diff --git a/DBStorageStructureInfo.epf b/DBStorageStructureInfo.epf
new file mode 100644
index 0000000..8697fe9
Binary files /dev/null and b/DBStorageStructureInfo.epf differ
diff --git a/src/DBStorageStructureInfo.xml b/src/DBStorageStructureInfo.xml
new file mode 100644
index 0000000..c903ecf
--- /dev/null
+++ b/src/DBStorageStructureInfo.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+ c3831ec8-d8d5-4f93-8a22-f9bfae07327f
+ 486e4187-14ff-4a4a-8b61-23d09bf40908
+
+
+ 6ecfb3f8-eedb-4d79-b9f2-2e28a5e0e865
+ 18940b80-8f60-4d77-b88e-b97f4e594c70
+
+
+
+ DBStorageStructureInfo
+
+
+ ru
+ DB storage structure info
+
+
+
+ ExternalDataProcessor.DBStorageStructureInfo.Form.ФормаУправляемая
+ ExternalDataProcessor.DBStorageStructureInfo.Form.Форма
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260.xml"
new file mode 100644
index 0000000..3a008ec
--- /dev/null
+++ "b/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260.xml"
@@ -0,0 +1,22 @@
+
+
+
+
\ No newline at end of file
diff --git "a/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" "b/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin"
new file mode 100644
index 0000000..a98d436
Binary files /dev/null and "b/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" differ
diff --git "a/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217.xml" "b/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217.xml"
new file mode 100644
index 0000000..7b7e277
--- /dev/null
+++ "b/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217.xml"
@@ -0,0 +1,22 @@
+
+
+
+
\ No newline at end of file
diff --git "a/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217/Ext/Form.xml" "b/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217/Ext/Form.xml"
new file mode 100644
index 0000000..4a853e6
--- /dev/null
+++ "b/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217/Ext/Form.xml"
@@ -0,0 +1,733 @@
+
+
\ No newline at end of file
diff --git "a/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217/Ext/Form/Module.bsl" "b/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217/Ext/Form/Module.bsl"
new file mode 100644
index 0000000..a9d975b
--- /dev/null
+++ "b/src/DBStorageStructureInfo/Forms/\320\244\320\276\321\200\320\274\320\260\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217/Ext/Form/Module.bsl"
@@ -0,0 +1,134 @@
+&НаСервере
+Процедура ЗаполнитьТаблицы()
+
+ СтруктураБазы = ПолучитьИзВременногоХранилища(АдресСтруктурыБазы);
+
+ Если СтруктураБазы = Неопределено Тогда
+
+ СтруктураБазы = ПолучитьСтруктуруХраненияБазыДанных();
+ ПоместитьВоВременноеХранилище(СтруктураБазы, АдресСтруктурыБазы);
+
+ КонецЕсли;
+
+ Результат.Очистить();
+ Поля.Очистить();
+ Индексы.Очистить();
+ ПоляИндексов.Очистить();
+
+ Для Каждого ТекСтрока Из СтруктураБазы Цикл
+ ЗаполнитьЗначенияСвойств(Результат.Добавить(), ТекСтрока);
+ ПоляИзСтруктуры = ТекСтрока.Поля;
+ Для Каждого ТекСтрокаПоля Из ПоляИзСтруктуры Цикл
+ НоваяСтрока = Поля.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрокаПоля);
+ НоваяСтрока.ИмяТаблицы = ТекСтрока.ИмяТаблицыХранения;
+ КонецЦикла;
+
+ ИндексыИзСтруктуры = ТекСтрока.Индексы;
+ Для Каждого ТекСтрокаИндексы Из ИндексыИзСтруктуры Цикл
+ НоваяСтрока = Индексы.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрокаИндексы);
+ НоваяСтрока.ИмяТаблицы = ТекСтрока.ИмяТаблицыХранения;
+
+ ПоляИндексовИзСтруктуры = ТекСтрокаИндексы.Поля;
+ Для Каждого ТекСтрокаПоляИндексов Из ПоляИндексовИзСтруктуры Цикл
+ НоваяСтрока = ПоляИндексов.Добавить();
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрокаПоляИндексов);
+ НоваяСтрока.ИмяИндексаХранения = ТекСтрокаИндексы.ИмяИндексаХранения;
+ НоваяСтрока.ИмяТаблицы = ТекСтрока.ИмяТаблицыХранения;
+ КонецЦикла;
+
+ КонецЦикла;
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура НайтиПоИмениТаблицыХранения()
+
+ СтруктураБазы = ПолучитьИзВременногоХранилища(АдресСтруктурыБазы);
+
+ ИмяДляПоиска = ВРЕГ(СокрЛП(ИмяТаблицыХранения));
+ Если Лев(ИмяДляПоиска, 1) = "_" Тогда
+ ИмяДляПоиска = Сред(ИмяДляПоиска, 2);
+ КонецЕсли;
+ НайденныеСтроки = Новый Массив();
+ Для каждого Строка из СтруктураБазы Цикл
+ Если Найти(ВРЕГ(Строка.ИмяТаблицыХранения), ИмяДляПоиска) > 0
+ ИЛИ Найти(ВРЕГ(Строка.ИмяТаблицы), ИмяДляПоиска)
+ ИЛИ Найти(ВРЕГ(Строка.Метаданные), ИмяДляПоиска)
+ ИЛИ Найти(ВРЕГ(Строка.Назначение), ИмяДляПоиска) Тогда
+ НайденныеСтроки.Добавить(Строка);
+ КонецЕсли;
+ КонецЦикла;
+
+ Результат.Очистить();
+ Для каждого Строка из НайденныеСтроки Цикл
+ ЗаполнитьЗначенияСвойств(Результат.Добавить(), Строка);
+ КонецЦикла;
+
+КонецПроцедуры
+
+
+&НаКлиенте
+Процедура УстановитьОтбор(Команда)
+ НайтиПоИмениТаблицыХранения();
+КонецПроцедуры
+
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ АдресСтруктурыБазы = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
+ ЗаполнитьТаблицы();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура РезультатПриАктивизацииСтроки(Элемент)
+
+ ТекДанные = Элементы.Результат.ТекущиеДанные;
+ Если ТекДанные = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ ОтборСтрок = Новый ФиксированнаяСтруктура("ИмяТаблицы", ТекДанные.ИмяТаблицыХранения);
+
+ Элементы.Поля.ОтборСтрок = ОтборСтрок;
+ Элементы.Индексы.ОтборСтрок = ОтборСтрок;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИндексыПриАктивизацииСтроки(Элемент)
+
+ ТекДанные = Элементы.Индексы.ТекущиеДанные;
+ Если ТекДанные = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+
+ ОтборСтрок = Новый ФиксированнаяСтруктура("ИмяИндексаХранения, ИмяТаблицы", ТекДанные.ИмяИндексаХранения, ТекДанные.ИмяТаблицы);
+
+ Элементы.ПоляИндексов.ОтборСтрок = ОтборСтрок;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ИмяТаблицыХраненияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
+
+ СтандартнаяОбработка = Ложь;
+ ИмяТаблицыХранения = Текст;
+
+ Если ПустаяСтрока(ИмяТаблицыХранения) Тогда
+
+ ЗаполнитьТаблицы();
+
+ Иначе
+
+ НайтиПоИмениТаблицыХранения();
+
+ КонецЕсли;
+
+КонецПроцедуры