diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON.xml" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON.xml"
new file mode 100644
index 0000000000..a09e8e2163
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON.xml"
@@ -0,0 +1,114 @@
+
+
+
+
+
+ c3831ec8-d8d5-4f93-8a22-f9bfae07327f
+ 29d2f52d-0ed1-4254-a6bc-bbc6bc333ab1
+
+
+ 503de865-4645-4496-b5dd-2e4a76236095
+ 4d213f80-34d7-4f82-80f0-c17b4f80d887
+
+
+
+ ЗагрузкаМакетовJSON
+
+
+ ru
+ ЗагрузкаМакетовJSON
+
+
+ en
+ DataProcessor
+
+
+ am
+ ጥሪ
+
+
+ az
+ Emal zəng etmək
+
+
+ bg
+ Обработка на повикване
+
+
+ et
+ Töötlemine kõne
+
+
+ fr
+ Le traitement de l'appel
+
+
+ ka
+ დარეკეთ
+
+
+ de
+ Die Verarbeitung des Anrufs
+
+
+ hu
+ A hívás
+
+
+ it
+ Trattamento di chiamata
+
+
+ lv
+ Apstrāde zvanu
+
+
+ lt
+ Apdorojimo skambinti
+
+
+ mn
+ Дуудлага
+
+
+ pl
+ Obsługa połączeń
+
+
+ ro
+ Prelucrarea de apel
+
+
+ sl
+ Klic
+
+
+ es
+ El tratamiento de la llamada
+
+
+ sv
+ Samtalet
+
+
+ tr
+ İşleme arama
+
+
+ vi
+ Bộ xử lý gọi ra
+
+
+
+ ExternalDataProcessor.ЗагрузкаМакетовJSON.Form.Форма
+
+
+
+
+ Справочники
+ Документы
+ Контрагенты
+ РегистрыСведений
+
+
+
\ No newline at end of file
diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Forms/\320\244\320\276\321\200\320\274\320\260.xml"
new file mode 100644
index 0000000000..cf2c88f877
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Forms/\320\244\320\276\321\200\320\274\320\260.xml"
@@ -0,0 +1,102 @@
+
+
+
+
\ No newline at end of file
diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml"
new file mode 100644
index 0000000000..95bdbd7e86
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml"
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
new file mode 100644
index 0000000000..50c411f281
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
@@ -0,0 +1,76 @@
+
+///////////////////////////////////////////////////
+//Служебные функции и процедуры
+///////////////////////////////////////////////////
+
+&НаКлиенте
+// контекст фреймворка Vanessa-Automation
+Перем Ванесса;
+
+&НаКлиенте
+// Структура, в которой хранится состояние сценария между выполнением шагов. Очищается перед выполнением каждого сценария.
+Перем Контекст Экспорт;
+
+&НаКлиенте
+// Структура, в которой можно хранить служебные данные между запусками сценариев. Существует, пока открыта форма Vanessa-Automation.
+Перем КонтекстСохраняемый Экспорт;
+
+&НаКлиенте
+// Функция экспортирует список шагов, которые реализованы в данной внешней обработке.
+Функция ПолучитьСписокТестов(КонтекстФреймворкаBDD) Экспорт
+ Ванесса = КонтекстФреймворкаBDD;
+
+ ВсеТесты = Новый Массив;
+
+ //описание параметров
+ //Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,Снипет,ИмяПроцедуры,ПредставлениеТеста,ОписаниеШага,ТипШага,Транзакция,Параметр);
+
+
+ Возврат ВсеТесты;
+КонецФункции
+
+// Делает отключение модуля
+Процедура ОтключениеМодуля() Экспорт
+
+ Ванесса = Неопределено;
+ Контекст = Неопределено;
+ КонтекстСохраняемый = Неопределено;
+
+КонецПроцедуры
+
+&НаСервере
+// Служебная функция.
+Функция ПолучитьМакетСервер(ИмяМакета)
+ ОбъектСервер = РеквизитФормыВЗначение("Объект");
+ Возврат ОбъектСервер.ПолучитьМакет(ИмяМакета);
+КонецФункции
+
+&НаКлиенте
+// Служебная функция для подключения библиотеки создания fixtures.
+Функция ПолучитьМакетОбработки(ИмяМакета) Экспорт
+ Возврат ПолучитьМакетСервер(ИмяМакета);
+КонецФункции
+
+
+
+///////////////////////////////////////////////////
+//Работа со сценариями
+///////////////////////////////////////////////////
+
+&НаКлиенте
+// Функция выполняется перед началом каждого сценария
+Функция ПередНачаломСценария() Экспорт
+
+КонецФункции
+
+&НаКлиенте
+// Функция выполняется перед окончанием каждого сценария
+Функция ПередОкончаниемСценария() Экспорт
+
+КонецФункции
+
+
+
+///////////////////////////////////////////////////
+//Реализация шагов
+///////////////////////////////////////////////////
diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\321\213.xml" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\321\213.xml"
new file mode 100644
index 0000000000..9249ab1104
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\321\213.xml"
@@ -0,0 +1,16 @@
+
+
+
+
+ Документы
+
+
+ ru
+ Документы
+
+
+
+ TextDocument
+
+
+
\ No newline at end of file
diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\321\213/Ext/Template.txt" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\321\213/Ext/Template.txt"
new file mode 100644
index 0000000000..3b7e23fd77
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\321\213/Ext/Template.txt"
@@ -0,0 +1,403 @@
+{
+ "Ромашка": {
+ "Тип": "Справочник",
+ "Вид": "Организации",
+ "ИмяПеременной": "Ромашка",
+ "Режимы": {
+ "ТолькоСоздание": true,
+ "ОбменДанными": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "414c3b72-a238-11ef-be0a-00505687d921"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Ромашка"
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "Грузим",
+ "Значение": "Все"
+ },
+ {
+ "Реквизит": "Разрешаем",
+ "Значение": "Истина"
+ }
+ ]
+ },
+ "Операция0000000000001От14_11_202410_26_40": {
+ "Тип": "Документ",
+ "Вид": "ОперацияБух",
+ "ИмяПеременной": "Операция0000000000001От14_11_202410_26_40",
+ "Режимы": {
+ "ТолькоСоздание": true,
+ "ОбменДанными": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "414c3b73-a238-11ef-be0a-00505687d921"
+ },
+ {
+ "Реквизит": "Дата",
+ "Значение": "20241114102640"
+ },
+ {
+ "Реквизит": "Организация",
+ "Значение": "Ромашка",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "СуммаОперации",
+ "Значение": "500"
+ },
+ {
+ "Реквизит": "Содержание",
+ "Значение": "коррекция остатков"
+ }
+ ],
+ "ТабличныеЧасти": [
+ {
+ "ТаблицаРегистровНакопления": [
+ [
+ {
+ "Реквизит": "Имя",
+ "Значение": "Запасы"
+ }
+ ]
+ ]
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "Грузим",
+ "Значение": "Все"
+ },
+ {
+ "Реквизит": "Разрешаем",
+ "Значение": "Истина"
+ }
+ ]
+ },
+ "ВентиляторSakura": {
+ "Тип": "Справочник",
+ "Вид": "Товары",
+ "ИмяПеременной": "ВентиляторSakura",
+ "Режимы": {
+ "ТолькоСоздание": true,
+ "ОбменДанными": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "6782047e-a238-11ef-be0a-00505687d921"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Вентилятор Sakura"
+ },
+ {
+ "Реквизит": "Изображение",
+ "Значение": "ХранилищеЗначения"
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "Грузим",
+ "Значение": "Все"
+ },
+ {
+ "Реквизит": "Разрешаем",
+ "Значение": "Истина"
+ }
+ ]
+ },
+ "Поставщики": {
+ "Тип": "Справочник",
+ "Вид": "Контрагенты",
+ "ИмяПеременной": "Поставщики",
+ "Режим": "Группа",
+ "Режимы": {
+ "ТолькоСоздание": true,
+ "ОбменДанными": true,
+ "Группа": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "5ac8459a-a238-11ef-be0a-00505687d921"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Поставщики"
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "Грузим",
+ "Значение": "Все"
+ },
+ {
+ "Реквизит": "Разрешаем",
+ "Значение": "Истина"
+ }
+ ]
+ },
+ "Лор": {
+ "Тип": "Справочник",
+ "Вид": "Контрагенты",
+ "ИмяПеременной": "Лор",
+ "Режимы": {
+ "ТолькоСоздание": true,
+ "ОбменДанными": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "5ac8458a-a238-11ef-be0a-00505687d921"
+ },
+ {
+ "Реквизит": "Родитель",
+ "Значение": "Поставщики",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Лор"
+ },
+ {
+ "Реквизит": "ЮрФизЛицо",
+ "Значение": "ЮридическоеЛицо",
+ "Режим": "Предопределенный"
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "Грузим",
+ "Значение": "Все"
+ },
+ {
+ "Реквизит": "Разрешаем",
+ "Значение": "Истина"
+ }
+ ]
+ },
+ "ВентиляторBinatone": {
+ "Тип": "Справочник",
+ "Вид": "Товары",
+ "ИмяПеременной": "ВентиляторBinatone",
+ "Режимы": {
+ "ТолькоСоздание": true,
+ "ОбменДанными": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "040717d7-a22a-11ef-be09-00505687d921"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Вентилятор Binatone"
+ },
+ {
+ "Реквизит": "Изображение",
+ "Значение": "ХранилищеЗначения"
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "Грузим",
+ "Значение": "Все"
+ },
+ {
+ "Реквизит": "Разрешаем",
+ "Значение": "Истина"
+ }
+ ]
+ },
+ "Роа": {
+ "Тип": "Справочник",
+ "Вид": "Контрагенты",
+ "ИмяПеременной": "Роа",
+ "Режимы": {
+ "ТолькоСоздание": true,
+ "ОбменДанными": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "7afbaad7-a238-11ef-be0a-00505687d921"
+ },
+ {
+ "Реквизит": "Родитель",
+ "Значение": "Поставщики",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Роа"
+ },
+ {
+ "Реквизит": "ЮрФизЛицо",
+ "Значение": "ФизическоеЛицо",
+ "Режим": "Предопределенный"
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "Грузим",
+ "Значение": "Все"
+ },
+ {
+ "Реквизит": "Разрешаем",
+ "Значение": "Истина"
+ }
+ ]
+ },
+ "Запасы": {
+ "Тип": "РегистрНакопления",
+ "Вид": "Запасы",
+ "ИмяПеременной": "Запасы",
+ "Записи": [
+ [
+ {
+ "Реквизит": "ВидДвижения",
+ "Значение": "Приход",
+ "Режим": "Предопределенный"
+ },
+ {
+ "Реквизит": "Активность",
+ "Значение": "Истина"
+ },
+ {
+ "Реквизит": "Регистратор",
+ "Значение": "Операция0000000000001От14_11_202410_26_40",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Период",
+ "Значение": "20241114102640"
+ },
+ {
+ "Реквизит": "Номенклатура",
+ "Значение": "ВентиляторSakura",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Количество",
+ "Значение": "10"
+ },
+ {
+ "Реквизит": "Поставщик",
+ "Значение": "Лор",
+ "Режим": "Перем"
+ }
+ ],
+ [
+ {
+ "Реквизит": "ВидДвижения",
+ "Значение": "Приход",
+ "Режим": "Предопределенный"
+ },
+ {
+ "Реквизит": "Активность",
+ "Значение": "Истина"
+ },
+ {
+ "Реквизит": "Регистратор",
+ "Значение": "Операция0000000000001От14_11_202410_26_40",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Период",
+ "Значение": "20241114102640"
+ },
+ {
+ "Реквизит": "Номенклатура",
+ "Значение": "ВентиляторBinatone",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Количество",
+ "Значение": "5"
+ },
+ {
+ "Реквизит": "Поставщик",
+ "Значение": "Роа",
+ "Режим": "Перем"
+ }
+ ],
+ [
+ {
+ "Реквизит": "ВидДвижения",
+ "Значение": "Расход",
+ "Режим": "Предопределенный"
+ },
+ {
+ "Реквизит": "Активность",
+ "Значение": "Истина"
+ },
+ {
+ "Реквизит": "Регистратор",
+ "Значение": "Операция0000000000001От14_11_202410_26_40",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Период",
+ "Значение": "20241114102640"
+ },
+ {
+ "Реквизит": "Номенклатура",
+ "Значение": "ВентиляторSakura",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Количество",
+ "Значение": "4"
+ },
+ {
+ "Реквизит": "Поставщик",
+ "Значение": "Лор",
+ "Режим": "Перем"
+ }
+ ],
+ [
+ {
+ "Реквизит": "ВидДвижения",
+ "Значение": "Расход",
+ "Режим": "Предопределенный"
+ },
+ {
+ "Реквизит": "Активность",
+ "Значение": "Истина"
+ },
+ {
+ "Реквизит": "Регистратор",
+ "Значение": "Операция0000000000001От14_11_202410_26_40",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Период",
+ "Значение": "20241114102640"
+ },
+ {
+ "Реквизит": "Номенклатура",
+ "Значение": "ВентиляторBinatone",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Количество",
+ "Значение": "1"
+ },
+ {
+ "Реквизит": "Поставщик",
+ "Значение": "Роа",
+ "Режим": "Перем"
+ }
+ ]
+ ]
+ }
+}
\ No newline at end of file
diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\232\320\276\320\275\321\202\321\200\320\260\320\263\320\265\320\275\321\202\321\213.xml" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\232\320\276\320\275\321\202\321\200\320\260\320\263\320\265\320\275\321\202\321\213.xml"
new file mode 100644
index 0000000000..0fa3b1f510
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\232\320\276\320\275\321\202\321\200\320\260\320\263\320\265\320\275\321\202\321\213.xml"
@@ -0,0 +1,16 @@
+
+
+
+
+ Контрагенты
+
+
+ ru
+ Контрагенты
+
+
+
+ TextDocument
+
+
+
\ No newline at end of file
diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\232\320\276\320\275\321\202\321\200\320\260\320\263\320\265\320\275\321\202\321\213/Ext/Template.txt" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\232\320\276\320\275\321\202\321\200\320\260\320\263\320\265\320\275\321\202\321\213/Ext/Template.txt"
new file mode 100644
index 0000000000..49e73d1846
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\232\320\276\320\275\321\202\321\200\320\260\320\263\320\265\320\275\321\202\321\213/Ext/Template.txt"
@@ -0,0 +1,71 @@
+{
+ "Поставщики": {
+ "Тип": "Справочник",
+ "Вид": "Контрагенты",
+ "ИмяПеременной": "Поставщики",
+ "Режим": "Группа",
+ "Режимы": {
+ "Группа": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "5ac8459a-a238-11ef-be0a-00505687d921"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Поставщики"
+ }
+ ]
+ },
+ "Лор": {
+ "Тип": "Справочник",
+ "Вид": "Контрагенты",
+ "ИмяПеременной": "Лор",
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "5ac8458a-a238-11ef-be0a-00505687d921"
+ },
+ {
+ "Реквизит": "Родитель",
+ "Значение": "Поставщики",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Лор"
+ },
+ {
+ "Реквизит": "ЮрФизЛицо",
+ "Значение": "ЮридическоеЛицо",
+ "Режим": "Предопределенный"
+ }
+ ]
+ },
+ "Роа": {
+ "Тип": "Справочник",
+ "Вид": "Контрагенты",
+ "ИмяПеременной": "Роа",
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "7afbaad7-a238-11ef-be0a-00505687d921"
+ },
+ {
+ "Реквизит": "Родитель",
+ "Значение": "Поставщики",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Роа"
+ },
+ {
+ "Реквизит": "ЮрФизЛицо",
+ "Значение": "ФизическоеЛицо",
+ "Режим": "Предопределенный"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\321\213\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271.xml" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\321\213\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271.xml"
new file mode 100644
index 0000000000..20f32441f2
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\321\213\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271.xml"
@@ -0,0 +1,16 @@
+
+
+
+
+ РегистрыСведений
+
+
+ ru
+ Регистры сведений
+
+
+
+ TextDocument
+
+
+
\ No newline at end of file
diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\321\213\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271/Ext/Template.txt" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\321\213\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271/Ext/Template.txt"
new file mode 100644
index 0000000000..dde77eb7f4
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\321\213\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271/Ext/Template.txt"
@@ -0,0 +1,197 @@
+{
+ "РегистрСведений1": {
+ "Тип": "РегистрСведений",
+ "Вид": "РегистрСведений1",
+ "ИмяПеременной": "РегистрСведений1",
+ "Записи": [
+ [
+ {
+ "Реквизит": "Измерение1",
+ "Значение": "Изм"
+ },
+ {
+ "Реквизит": "Ресурс1",
+ "Значение": "Рес"
+ },
+ {
+ "Реквизит": "Реквизит1",
+ "Значение": "Рек"
+ }
+ ]
+ ]
+ },
+ "РегистрСведений1_1": {
+ "Тип": "РегистрСведений",
+ "Вид": "РегистрСведений1",
+ "ИмяПеременной": "РегистрСведений1_1",
+ "Записи": [
+ [
+ {
+ "Реквизит": "Измерение1",
+ "Значение": "Изм2"
+ },
+ {
+ "Реквизит": "Ресурс1",
+ "Значение": "Рес2"
+ },
+ {
+ "Реквизит": "Реквизит1",
+ "Значение": "Рек2"
+ }
+ ]
+ ]
+ },
+ "Поставщики": {
+ "Тип": "Справочник",
+ "Вид": "Контрагенты",
+ "ИмяПеременной": "Поставщики",
+ "Режим": "Группа",
+ "Режимы": {
+ "ТолькоСоздание": true,
+ "ОбменДанными": true,
+ "Группа": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "5ac8459a-a238-11ef-be0a-00505687d921"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Поставщики"
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "Грузим",
+ "Значение": "Все"
+ },
+ {
+ "Реквизит": "Разрешаем",
+ "Значение": "Истина"
+ }
+ ]
+ },
+ "Лор": {
+ "Тип": "Справочник",
+ "Вид": "Контрагенты",
+ "ИмяПеременной": "Лор",
+ "Режимы": {
+ "ТолькоСоздание": true,
+ "ОбменДанными": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "5ac8458a-a238-11ef-be0a-00505687d921"
+ },
+ {
+ "Реквизит": "Родитель",
+ "Значение": "Поставщики",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Лор"
+ },
+ {
+ "Реквизит": "ЮрФизЛицо",
+ "Значение": "ЮридическоеЛицо",
+ "Режим": "Предопределенный"
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "Грузим",
+ "Значение": "Все"
+ },
+ {
+ "Реквизит": "Разрешаем",
+ "Значение": "Истина"
+ }
+ ]
+ },
+ "ЧерныйСписокКонтрагентов": {
+ "Тип": "РегистрСведений",
+ "Вид": "ЧерныйСписокКонтрагентов",
+ "ИмяПеременной": "ЧерныйСписокКонтрагентов",
+ "Записи": [
+ [
+ {
+ "Реквизит": "Период",
+ "Значение": "20241114000000"
+ },
+ {
+ "Реквизит": "Контрагент",
+ "Значение": "Лор",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Включен",
+ "Значение": "Ложь"
+ }
+ ]
+ ]
+ },
+ "Роа": {
+ "Тип": "Справочник",
+ "Вид": "Контрагенты",
+ "ИмяПеременной": "Роа",
+ "Режимы": {
+ "ТолькоСоздание": true,
+ "ОбменДанными": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "7afbaad7-a238-11ef-be0a-00505687d921"
+ },
+ {
+ "Реквизит": "Родитель",
+ "Значение": "Поставщики",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Роа"
+ },
+ {
+ "Реквизит": "ЮрФизЛицо",
+ "Значение": "ФизическоеЛицо",
+ "Режим": "Предопределенный"
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "Грузим",
+ "Значение": "Все"
+ },
+ {
+ "Реквизит": "Разрешаем",
+ "Значение": "Истина"
+ }
+ ]
+ },
+ "ЧерныйСписокКонтрагентов_1": {
+ "Тип": "РегистрСведений",
+ "Вид": "ЧерныйСписокКонтрагентов",
+ "ИмяПеременной": "ЧерныйСписокКонтрагентов_1",
+ "Записи": [
+ [
+ {
+ "Реквизит": "Период",
+ "Значение": "20241114000000"
+ },
+ {
+ "Реквизит": "Контрагент",
+ "Значение": "Роа",
+ "Режим": "Перем"
+ },
+ {
+ "Реквизит": "Включен",
+ "Значение": "Ложь"
+ }
+ ]
+ ]
+ }
+}
\ No newline at end of file
diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\270.xml" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\270.xml"
new file mode 100644
index 0000000000..3df8af1979
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\270.xml"
@@ -0,0 +1,16 @@
+
+
+
+
+ Справочники
+
+
+ ru
+ Справочники
+
+
+
+ TextDocument
+
+
+
\ No newline at end of file
diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\270/Ext/Template.txt" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\270/Ext/Template.txt"
new file mode 100644
index 0000000000..94e06583f4
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/Templates/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\270/Ext/Template.txt"
@@ -0,0 +1,315 @@
+{
+ "ЭлементВКорне": {
+ "Тип": "Справочник",
+ "Вид": "Справочник2",
+ "ИмяПеременной": "ЭлементВКорне",
+ "Режимы": {
+ "ОбменДанными": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "adb330e2-a22b-11ef-be09-00505687d921"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Элемент в корне"
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "ТестJSON",
+ "Значение": "Истина"
+ },
+ {
+ "Реквизит": "ТестMXL",
+ "Значение": "Ложь"
+ }
+ ]
+ },
+ "ГруппаЭлементов": {
+ "Тип": "Справочник",
+ "Вид": "Справочник2",
+ "ИмяПеременной": "ГруппаЭлементов",
+ "Режим": "Группа",
+ "Режимы": {
+ "ОбменДанными": true,
+ "Группа": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "b6064d11-a22b-11ef-be09-00505687d921"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "ГруппаЭлементов"
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "ТестJSON",
+ "Значение": "Истина"
+ },
+ {
+ "Реквизит": "ТестMXL",
+ "Значение": "Ложь"
+ }
+ ]
+ },
+ "ПодчиненныйЭлемент": {
+ "Тип": "Справочник",
+ "Вид": "Справочник2",
+ "ИмяПеременной": "ПодчиненныйЭлемент",
+ "Режимы": {
+ "ОбменДанными": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "c1fb3fe7-a22b-11ef-be09-00505687d921"
+ },
+ {
+ "Реквизит": "Родитель",
+ "Значение": "b6064d11-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Подчиненный элемент"
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "ТестJSON",
+ "Значение": "Истина"
+ },
+ {
+ "Реквизит": "ТестMXL",
+ "Значение": "Ложь"
+ }
+ ]
+ },
+ "НаименованиеСправочника": {
+ "Тип": "Справочник",
+ "Вид": "Справочник1",
+ "ИмяПеременной": "НаименованиеСправочника",
+ "Режимы": {
+ "ОбменДанными": true
+ },
+ "ПоляОбъекта": [
+ {
+ "Реквизит": "Ссылка",
+ "Значение": "f7e1612c-a22b-11ef-be09-00505687d921"
+ },
+ {
+ "Реквизит": "Наименование",
+ "Значение": "Наименование справочника"
+ },
+ {
+ "Реквизит": "Реквизит1",
+ "Значение": "ЗначениеПеречисления1",
+ "Режим": "Предопределенный"
+ },
+ {
+ "Реквизит": "Реквизит2",
+ "Значение": "adb330e2-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ },
+ {
+ "Реквизит": "РеквизитСтрока",
+ "Значение": "значение"
+ },
+ {
+ "Реквизит": "РеквизитДата",
+ "Значение": "20241114000000"
+ },
+ {
+ "Реквизит": "РеквизитЧисло",
+ "Значение": "15,12"
+ },
+ {
+ "Реквизит": "РеквизитПереключатель",
+ "Значение": "2"
+ },
+ {
+ "Реквизит": "Реквизит3",
+ "Значение": "c1fb3fe7-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ },
+ {
+ "Реквизит": "СоставнойРеквизит",
+ "Значение": "adb330e2-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ },
+ {
+ "Реквизит": "РеквизитМеню",
+ "Значение": "Товар"
+ },
+ {
+ "Реквизит": "РеквизитСписок",
+ "Значение": "Значение списка"
+ },
+ {
+ "Реквизит": "РеквизитБыстрыйВыбор",
+ "Значение": "c1fb3fe7-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ }
+ ],
+ "ТабличныеЧасти": [
+ {
+ "ТабличнаяЧасть1": [
+ [
+ {
+ "Реквизит": "РеквизитЧисло",
+ "Значение": "1"
+ },
+ {
+ "Реквизит": "РеквизитСтрока",
+ "Значение": "один"
+ },
+ {
+ "Реквизит": "РеквизитДата",
+ "Значение": "20241114000000"
+ },
+ {
+ "Реквизит": "РеквизитСправочник",
+ "Значение": "c1fb3fe7-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ },
+ {
+ "Реквизит": "РеквизитБулево",
+ "Значение": "Истина"
+ },
+ {
+ "Реквизит": "РеквизитПеречисление",
+ "Значение": "ЗначениеПеречисления1",
+ "Режим": "Предопределенный"
+ },
+ {
+ "Реквизит": "РеквизитСправочникВыборИзФормыСписка",
+ "Значение": "c1fb3fe7-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ },
+ {
+ "Реквизит": "РеквизитБыстрыйВыборТЧ",
+ "Значение": "c1fb3fe7-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ },
+ {
+ "Реквизит": "МногострочнаяСтрока",
+ "Значение": "Первая строка\nВторая строка"
+ },
+ {
+ "Реквизит": "РеквизтПереносВЗаголовке",
+ "Значение": "Заголовок"
+ }
+ ],
+ [
+ {
+ "Реквизит": "РеквизитЧисло",
+ "Значение": "2"
+ },
+ {
+ "Реквизит": "РеквизитСтрока",
+ "Значение": "два"
+ },
+ {
+ "Реквизит": "РеквизитДата",
+ "Значение": "20241114000000"
+ },
+ {
+ "Реквизит": "РеквизитСправочник",
+ "Значение": "adb330e2-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ },
+ {
+ "Реквизит": "РеквизитБулево",
+ "Значение": "Ложь"
+ },
+ {
+ "Реквизит": "РеквизитСправочникВыборИзФормыСписка",
+ "Значение": "adb330e2-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ },
+ {
+ "Реквизит": "РеквизитБыстрыйВыборТЧ",
+ "Значение": "adb330e2-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ }
+ ]
+ ]
+ },
+ {
+ "ТабличнаяЧасть2": [
+ [
+ {
+ "Реквизит": "РеквизитЧисло",
+ "Значение": "1"
+ },
+ {
+ "Реквизит": "РеквизитСтрока",
+ "Значение": "один"
+ },
+ {
+ "Реквизит": "РеквизитДата",
+ "Значение": "20241114000000"
+ },
+ {
+ "Реквизит": "РеквизитСправочник",
+ "Значение": "adb330e2-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ },
+ {
+ "Реквизит": "РеквизитБулево",
+ "Значение": "Ложь"
+ },
+ {
+ "Реквизит": "РеквизитСправочникВыборИзФормыСписка",
+ "Значение": "adb330e2-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ }
+ ],
+ [
+ {
+ "Реквизит": "РеквизитЧисло",
+ "Значение": "2"
+ },
+ {
+ "Реквизит": "РеквизитСтрока",
+ "Значение": "два"
+ },
+ {
+ "Реквизит": "РеквизитДата",
+ "Значение": "20241114000000"
+ },
+ {
+ "Реквизит": "РеквизитСправочник",
+ "Значение": "c1fb3fe7-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ },
+ {
+ "Реквизит": "РеквизитБулево",
+ "Значение": "Истина"
+ },
+ {
+ "Реквизит": "РеквизитСправочникВыборИзФормыСписка",
+ "Значение": "c1fb3fe7-a22b-11ef-be09-00505687d921",
+ "Режим": "Гуид"
+ }
+ ]
+ ]
+ }
+ ],
+ "ДополнительныеСвойства": [
+ {
+ "Реквизит": "ТестJSON",
+ "Значение": "Истина"
+ },
+ {
+ "Реквизит": "ТестMXL",
+ "Значение": "Ложь"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git "a/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/filename" "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/filename"
new file mode 100644
index 0000000000..649d5ed635
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/step_definitions/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON/filename"
@@ -0,0 +1 @@
+ЗагрузкаМакетовJSON.epf
\ No newline at end of file
diff --git "a/features/Core/FixtureJSONLoad/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON.feature" "b/features/Core/FixtureJSONLoad/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON.feature"
new file mode 100644
index 0000000000..ea03302ddd
--- /dev/null
+++ "b/features/Core/FixtureJSONLoad/\320\227\320\260\320\263\321\200\321\203\320\267\320\272\320\260\320\234\320\260\320\272\320\265\321\202\320\276\320\262JSON.feature"
@@ -0,0 +1,81 @@
+# language: ru
+# encoding: utf-8
+@IgnoreOnOFBuilds
+
+Функционал: Загрузка макетов json
+ Как ответственный за закупки
+ Я хочу меньше денег тратить на покупку дисков
+ Чтобы экономить
+
+Контекст:
+ Дано я удаляю все элементы таблицы "Справочник.Справочник1"
+ И я удаляю все элементы таблицы "Справочник.Справочник2"
+ И я удаляю все элементы таблицы "Справочник.Справочник3"
+ И я удаляю все элементы таблицы "Справочник.Контрагенты"
+ И я удаляю все элементы таблицы "Документ.ОперацияБух"
+
+Сценарий: Загрузка справочника с табличными частями
+ Когда я создаю fixtures по макету "Справочники"
+ И Я открыл новый сеанс TestClient или подключил уже существующий
+ И В командном интерфейсе я выбираю "Основная" "Справочник1"
+ Тогда открылось окно "Справочник1"
+ И в таблице 'Список' я выбираю текущую строку
+ И элемент формы с именем 'РеквизитСтрока' стал равен "значение"
+ И элемент формы с именем 'РеквизитСтрокаНеДоступныйДляРедактирования' стал равен "значение"
+ И элемент формы с именем 'РеквизитТекстовыйДокумент' стал равен ""
+ И элемент формы с именем 'РеквизитЧисло' стал равен "15,12"
+ И элемент формы с именем 'РеквизитЧисло1' стал равен "15,12"
+ И у элемента формы с именем 'РеквизитЧисло1' текст редактирования стал равен "Нет"
+ И элемент формы с именем 'РекСтрока1' стал равен ""
+ И элемент формы с именем 'РекСтрока2' стал равен ""
+ И элемент формы с именем 'СоставнойРеквизит' стал равен "Элемент в корне"
+ Тогда открылось окно "Наименование справочника (Справочник1)"
+ И я перехожу к закладке "ТЧ"
+ И в таблице "ТабличнаяЧасть1" количество строк "меньше или равно" 2
+ И таблица 'ТабличнаяЧасть1' стала равной:
+ | 'N' | 'Реквизит число' | 'Реквизит строка' | 'Реквизит перечисление' | 'Реквизит дата' | 'Реквизит справочник' | 'Реквизит булево' | 'Многострочная строка' | 'Реквизит быстрый выбор ТЧ' | 'Реквизит справочник выбор из формы списка' | 'ЧастьЗаголовка1\nЧастьЗаголовка2' |
+ | '1' | '1,00' | 'один' | 'ЗначениеПеречисления1' | '14.11.2024' | 'Подчиненный элемент' | 'Да' | 'Первая строка\nВторая строка' | 'Подчиненный элемент' | 'Подчиненный элемент' | 'Заголовок' |
+ | '2' | '2,00' | 'два' | '' | '14.11.2024' | 'Элемент в корне' | 'Нет' | '' | 'Элемент в корне' | 'Элемент в корне' | '' |
+
+ И таблица 'ТабличнаяЧасть2' стала равной:
+ | 'N' | 'Реквизит число' | 'Реквизит строка' | 'Реквизит дата' | 'Реквизит справочник' | 'Реквизит булево' | 'Реквизит справочник выбор из формы списка' |
+ | '1' | '1,00' | 'один' | '14.11.2024' | 'Элемент в корне' | 'Нет' | 'Элемент в корне' |
+ | '2' | '2,00' | 'два' | '14.11.2024' | 'Подчиненный элемент' | 'Да' | 'Подчиненный элемент' |
+ И я закрываю сеанс текущего клиента тестирования
+
+Сценарий: Загрузка регистров сведений
+ Когда я создаю fixtures по макету "Контрагенты"
+ Когда я создаю fixtures по макету "РегистрыСведений"
+ Тогда Я открыл новый сеанс TestClient или подключил уже существующий
+ И В командном интерфейсе я выбираю "Основная" "РегистрСведений1"
+ Тогда таблица 'Список' стала равной:
+ | 'Измерение1' | 'Ресурс1' | 'Реквизит1' |
+ | 'Изм' | 'Рес' | 'Рек' |
+ | 'Изм2' | 'Рес2' | 'Рек2' |
+ И В командном интерфейсе я выбираю "Основная" "Черный список контрагентов"
+ Тогда таблица 'Список' стала равной:
+ | 'Период' | 'Контрагент' | 'Включен' |
+ | '14.11.2024' | 'Лор' | 'Нет' |
+ | '14.11.2024' | 'Роа' | 'Нет' |
+ И я закрываю сеанс текущего клиента тестирования
+
+Сценарий: Загрузка документа с табличными частями и движениями в регистре накопления
+ Когда я создаю fixtures по макету "Документы"
+ И Я открыл новый сеанс TestClient или подключил уже существующий
+ И В командном интерфейсе я выбираю "Основная" "Операции, введенные вручную"
+ Тогда открылось окно "Операции, введенные вручную"
+ И в таблице 'Список' я выбираю текущую строку
+ Тогда элемент формы с именем 'Дата' стал равен "14.11.2024 10:26:40"
+ И таблица 'Запасы' стала равной:
+ | 'N' | 'Вид движения' | 'Номенклатура' | 'Количество' | 'Поставщик' |
+ | '1' | 'Приход' | 'Вентилятор Sakura' | '10' | 'Лор' |
+ | '2' | 'Приход' | 'Вентилятор Binatone' | '5' | 'Роа' |
+ | '3' | 'Расход' | 'Вентилятор Sakura' | '4' | 'Лор' |
+ | '4' | 'Расход' | 'Вентилятор Binatone' | '1' | 'Роа' |
+ И элемент формы с именем 'Комментарий' стал равен ""
+ И элемент формы с именем 'Номер' стал равен "0000000000001"
+ И элемент формы с именем 'Организация' стал равен "Ромашка"
+ И элемент формы с именем 'Содержание' стал равен "коррекция остатков"
+ И элемент формы с именем 'СуммаОперации' стал равен "500,00"
+ И у элемента формы с именем 'СуммаОперации' текст редактирования стал равен "500,00"
+ И я закрываю сеанс текущего клиента тестирования
diff --git "a/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Ext/ObjectModule.bsl" "b/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Ext/ObjectModule.bsl"
index 9885d1c8ff..5fe7ff0987 100644
--- "a/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Ext/ObjectModule.bsl"
+++ "b/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Ext/ObjectModule.bsl"
@@ -123,10 +123,10 @@
Для каждого ИмяМакета Из МассивИменМакетов Цикл
МассивМакетов.Добавить(ТестОбъект.ПолучитьМакет(ИмяМакета));
КонецЦикла;
- Возврат СоздатьДанныеПоТабличномуДокументу(МассивМакетов);
+ Возврат СоздатьДанныеПоДокументуМакета(МассивМакетов);
КонецФункции
-Функция СоздатьДанныеПоТабличномуДокументу(ТабличныйДокументИлиМассивТабличныхДокументов, РежимыЗагрузкиИлиИмяКолонкиЗамещения = Неопределено, ИмяКолонкиЗамещения = Неопределено) Экспорт
+Функция СоздатьДанныеПоДокументуМакета(ТабличныйДокументИлиМассивТабличныхДокументов, РежимыЗагрузкиИлиИмяКолонкиЗамещения = Неопределено, ИмяКолонкиЗамещения = Неопределено, ВозвращатьНаборЗаписей = Ложь) Экспорт
Перем РежимыЗагрузки;
@@ -139,7 +139,7 @@
Если РежимыЗагрузки <> Неопределено Тогда
ТипПараметра = ТипЗнч(РежимыЗагрузки);
Если ТипПараметра <> Тип("Структура") Тогда
- ТекстСообщения = ПолучитьТекстСообщенияПользователю("Ожидали, что вторым параметром будет передана структура параметров для метода <СоздатьДанныеПоТабличномуДокументу>, а получили другой объект с типом <%1>");
+ ТекстСообщения = ПолучитьТекстСообщенияПользователю("Ожидали, что вторым параметром будет передана структура параметров для метода <СоздатьДанныеПоДокументуМакета>, а получили другой объект с типом <%1>");
ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",ТипПараметра);
ВызватьИсключение(ТекстСообщения);
КонецЕсли;
@@ -149,6 +149,8 @@
МассивТабличныхДокументов = Новый Массив();
Если ТипЗнч(ТабличныйДокументИлиМассивТабличныхДокументов) = Тип("ТабличныйДокумент") Тогда
МассивТабличныхДокументов.Добавить(ТабличныйДокументИлиМассивТабличныхДокументов);
+ ИначеЕсли ТипЗнч(ТабличныйДокументИлиМассивТабличныхДокументов) = Тип("ТекстовыйДокумент") Тогда
+ МассивТабличныхДокументов.Добавить(ТабличныйДокументИлиМассивТабличныхДокументов);
ИначеЕсли ТипЗнч(ТабличныйДокументИлиМассивТабличныхДокументов) = Тип("Массив") Тогда
МассивТабличныхДокументов = ТабличныйДокументИлиМассивТабличныхДокументов;
КонецЕсли;
@@ -161,13 +163,34 @@
ЗначениеСоответствияРегистрРасчета = ВернутьЗначениеСоответствия("РегистрРасчетаНаборЗаписей");
Для каждого Элем Из Данные Цикл
+ // при передаче на упр. форму при загрузке фикстуры не сериализуется набор записей
+ // но при конвертации макетов проблем не возникает
Стр = Строка(Элем.Значение);
Если Найти(Стр, ЗначениеСоответствияРегистрСведений) > 0 Тогда
ИмяРегистра = Сред(Стр, СтрДлина(ЗначениеСоответствияРегистрСведений) + 2);
- Данные[Элем.Ключ] = ПолучитьКлючиЗаписиРСПоНаборуЗаписейРС(Элем.Значение, ИмяРегистра);
+ Если ВозвращатьНаборЗаписей Тогда
+ Результат = Новый Массив;
+ Результат.Добавить(Элем.Значение);
+ Данные[Элем.Ключ] = Результат;
+ Иначе
+ Данные[Элем.Ключ] = ПолучитьКлючиЗаписиРСПоНаборуЗаписейРС(Элем.Значение, ИмяРегистра);
+ КонецЕсли;
ИначеЕсли Найти(Стр, ЗначениеСоответствияРегистрНакопления) > 0 Тогда
ИмяРегистра = Сред(Стр, СтрДлина(ЗначениеСоответствияРегистрНакопления) + 2);
- Данные[Элем.Ключ] = ПолучитьКлючиЗаписиРСПоНаборуЗаписейРН(Элем.Значение, ИмяРегистра);
+ Если ВозвращатьНаборЗаписей Тогда
+ Результат = Новый Массив;
+ Результат.Добавить(Элем.Значение);
+ Данные[Элем.Ключ] = Результат;
+ Иначе
+ Данные[Элем.Ключ] = ПолучитьКлючиЗаписиРСПоНаборуЗаписейРН(Элем.Значение, ИмяРегистра);
+ КонецЕсли;
+ ИначеЕсли Найти(Стр, ЗначениеСоответствияРегистрБухгалтерии) > 0 Тогда
+ ИмяРегистра = Сред(Стр, СтрДлина(ЗначениеСоответствияРегистрБухгалтерии) + 2);
+ Если ВозвращатьНаборЗаписей Тогда
+ Результат = Новый Массив;
+ Результат.Добавить(Элем.Значение);
+ Данные[Элем.Ключ] = Результат;
+ КонецЕсли;
КонецЕсли;
КонецЦикла;
@@ -276,16 +299,146 @@
Возврат Результат;
КонецФункции
+Функция СоздатьДанныеПоТабличномуДокументу(ТабличныйДокумент, РежимыЗагрузки, ИмяКолонкиЗамещения) Экспорт
+ // для обратной совместимости
+ Данные = СоздатьДанныеПоДокументуМакета(ТабличныйДокумент, РежимыЗагрузки, ИмяКолонкиЗамещения);
+ Возврат Данные;
+КонецФункции
+
Функция СоздатьДанныеИзМакетов(МассивТабличныхДокументов, РежимыЗагрузки, ИмяКолонкиЗамещения)
ПротоДанные = Новый Структура;
Для каждого ТабличныйДокумент Из МассивТабличныхДокументов Цикл
- ПрочитатьДанныеИзМакета(ПротоДанные,ТабличныйДокумент,ИмяКолонкиЗамещения);
+ Если ТипЗнч(ТабличныйДокумент) = Тип("ТабличныйДокумент") Тогда
+ ПрочитатьДанныеИзМакета(ПротоДанные,ТабличныйДокумент,ИмяКолонкиЗамещения);
+ ИначеЕсли ТипЗнч(ТабличныйДокумент) = Тип("ТекстовыйДокумент") Тогда
+ ПрочитатьДанныеИзТекстовогоДокумента(ПротоДанные,ТабличныйДокумент,ИмяКолонкиЗамещения);
+ КонецЕсли;
КонецЦикла;
ЗаменитьРежимыЗагрузки(ПротоДанные, РежимыЗагрузки);
Данные = СоздатьТестовыеДанныеПоПротоДанным(ПротоДанные);
Возврат Данные;
КонецФункции
+Функция ПрочитатьДанныеИзТекстовогоДокумента(ПротоДанные,ТекстовыйДокумент,ИмяКолонкиЗамещения)
+
+ Текст = ТекстовыйДокумент.ПолучитьТекст();
+
+ ЧтениеJSON = Новый ЧтениеJSON;
+ ЧтениеJSON.УстановитьСтроку(Текст);
+ JSON = ПрочитатьJSON(ЧтениеJSON);
+ ЧтениеJSON.Закрыть();
+
+ Для Каждого ОбъектJSON ИЗ JSON Цикл
+
+ ПротоОбъект = СоздатьСтруктуруОписанияОбъекта();
+ ПротоОбъект.ПоляОбъекта = СоздатьТаблицуОписанияПолей();
+ ПротоДанные.Вставить(ОбъектJSON.Ключ,ПротоОбъект);
+
+ Для Каждого СтрокаОбъекта ИЗ ОбъектJSON.Значение Цикл
+ Если СтрокаОбъекта.Ключ = "ПоляОбъекта" Тогда
+ //Поля объекта
+ Для Каждого РеквизитОбъекта ИЗ СтрокаОбъекта.Значение Цикл
+ НовоеПолеОбъекта = ПротоОбъект.ПоляОбъекта.Добавить();
+ ЗаполнитьКолонкуСтрокиПротоОбъекта(НовоеПолеОбъекта, РеквизитОбъекта);
+ Если РеквизитОбъекта.Свойство("Ключ") И ВРег(РеквизитОбъекта.Ключ) = "КЛЮЧ" Тогда
+ ПротоОбъект.Ключи.Вставить(НовоеПолеОбъекта.Имя, НовоеПолеОбъекта.Значение);
+ КонецЕсли;
+ КонецЦикла;
+ ИначеЕсли ВРег(СтрокаОбъекта.Ключ)="РЕЖИМЫ" Тогда
+ Для Каждого СтрокаТЧОбъекта из СтрокаОбъекта.Значение Цикл
+ ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей();
+ НовоеПолеТЧ = ОписаниеПолейТЧ.Добавить();
+ НовоеПолеТЧ.Имя = СтрокаТЧОбъекта.Ключ;
+ НовоеПолеТЧ.Значение = СтрокаТЧОбъекта.Значение;
+ ПротоОбъект.Режимы[СтрокаТЧОбъекта.Ключ] = Истина;
+ КонецЦикла;
+ ИначеЕсли ВРег(СтрокаОбъекта.Ключ)="ДОПОЛНИТЕЛЬНЫЕСВОЙСТВА" Тогда
+ Для Каждого СтрокаТЧОбъекта из СтрокаОбъекта.Значение Цикл
+ ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей();
+ НовоеПолеТЧ = ОписаниеПолейТЧ.Добавить();
+ ЗаполнитьКолонкуСтрокиПротоОбъекта(НовоеПолеТЧ, СтрокаТЧОбъекта);
+ КонецЦикла;
+ ИначеЕсли ВРег(СтрокаОбъекта.Ключ) = "ЗАПИСИ" Тогда
+ ИмяТабЧасти = "Запись";
+ ТабЧасть = Неопределено;
+ Если НЕ ПротоОбъект.ТабличныеЧасти.Свойство(ИмяТабЧасти,ТабЧасть) Тогда
+ //Новая ТабЧасть
+ ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей();
+ ТабЧасть = Новый Массив;
+ ПротоОбъект.ТабличныеЧасти.Вставить(ИмяТабЧасти,ТабЧасть);
+ КонецЕсли;
+ Для Каждого ТЧОбъекта ИЗ СтрокаОбъекта.Значение Цикл
+ // создаем и заполняем строку ТЧ
+ ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей();
+ ТабЧасть.Добавить(ОписаниеПолейТЧ);
+ // обработаем реквизиты записей
+ Для Каждого ЗаписьТЧОбъекта из ТЧОбъекта Цикл
+ НовоеПолеТЧ = ОписаниеПолейТЧ.Добавить();
+ ЗаполнитьКолонкуСтрокиПротоОбъекта(НовоеПолеТЧ, ЗаписьТЧОбъекта);
+ КонецЦикла;
+ КонецЦикла;
+ ИначеЕсли ВРег(СтрокаОбъекта.Ключ) = "ТАБЛИЧНЫЕЧАСТИ" Тогда
+ Для Каждого ТЧОбъекта ИЗ СтрокаОбъекта.Значение Цикл
+ // вытащим имя ТЧ и её содержимое в виде массива структур
+ Для Каждого СтрокаТЧ ИЗ ТЧОбъекта Цикл
+ ИмяТабЧасти = СтрокаТЧ.Ключ;
+ СодержимоеТЧ = СтрокаТЧ.Значение;
+ КонецЦикла;
+
+ //Табличные части
+ Если НЕ ПустаяСтрока(ИмяТабЧасти) Тогда
+ ТабЧасть = Неопределено;
+ Если НЕ ПротоОбъект.ТабличныеЧасти.Свойство(ИмяТабЧасти,ТабЧасть) Тогда
+ //Новая ТабЧасть
+ ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей();
+ ТабЧасть = Новый Массив;
+ ПротоОбъект.ТабличныеЧасти.Вставить(ИмяТабЧасти,ТабЧасть);
+ КонецЕсли;
+ КонецЕсли;
+
+ // Обмен данными
+ Если ВРег(ИмяТабЧасти)="ОБМЕНДАННЫМИ" Тогда
+ Для Каждого СтрокаТЧОбъекта из СодержимоеТЧ Цикл
+ НовоеПолеТЧ = ОписаниеПолейТЧ.Добавить();
+ ЗаполнитьКолонкуСтрокиПротоОбъекта(НовоеПолеТЧ, СтрокаТЧОбъекта);
+ КонецЦикла;
+ Продолжить;
+ КонецЕсли;
+
+ // ТЧ
+ Для Каждого СтрокаТЧОбъекта из СодержимоеТЧ Цикл
+ // создаем и заполняем строку ТЧ
+ ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей();
+ ТабЧасть.Добавить(ОписаниеПолейТЧ);
+ Для Каждого КолонкаСтрокиТЧОбъекта из СтрокаТЧОбъекта Цикл
+ // строки ТЧ
+ НовоеПолеТЧ = ОписаниеПолейТЧ.Добавить();
+ ЗаполнитьКолонкуСтрокиПротоОбъекта(НовоеПолеТЧ, КолонкаСтрокиТЧОбъекта);
+ КонецЦикла;
+ КонецЦикла;
+ КонецЦикла;
+ Иначе
+ ПротоОбъект.Вставить(СтрокаОбъекта.Ключ,СтрокаОбъекта.Значение);
+ Если ВРЕГ(СтрокаОбъекта.Ключ) = "РЕЖИМ"
+ И ЗначениеЗаполнено(СтрокаОбъекта.Значение) Тогда
+ ПротоОбъект.Режимы[СтрокаОбъекта.Значение] = Истина;
+ КонецЕсли;
+ КонецЕсли;
+ КонецЦикла;
+ КонецЦикла;
+
+КонецФункции
+
+Процедура ЗаполнитьКолонкуСтрокиПротоОбъекта(Поле, СтруктураДляЗаполнения)
+
+ Поле.Имя = СтруктураДляЗаполнения.Реквизит;
+ //Поле.Значение = СтруктураДляЗаполнения.Значение;
+ Поле.Значение = ?(СтруктураДляЗаполнения.Свойство("Значение"), СтруктураДляЗаполнения.Значение, "");
+ Поле.Режим = ?(СтруктураДляЗаполнения.Свойство("Режим"), СтруктураДляЗаполнения.Режим, "");
+ Поле.ДополнительныйТип = ?(СтруктураДляЗаполнения.Свойство("ДополнительныйТипЗначения"), СтруктураДляЗаполнения.ДополнительныйТипЗначения, "");
+
+КонецПроцедуры
+
Функция ПрочитатьДанныеИзМакета(ПротоДанные,ТабличныйДокумент,ИмяКолонкиЗамещения)
СтрокаМакета = 1;
@@ -587,7 +740,7 @@
ОбъектСсылка = СоздатьОбъект_ПВХ(ПротоДанные,ПротоОбъект);
ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("ПланСчетов") Тогда
ОбъектСсылка = СоздатьОбъект_ПланСчетов(ПротоДанные,ПротоОбъект);
- ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("ПланВидовРасчетов") Тогда
+ ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("ПланВидовРасчета") Тогда
ОбъектСсылка = СоздатьОбъект_ПланВидовРасчетов(ПротоДанные,ПротоОбъект);
КонецЕсли;
ПротоОбъект.Объект = ОбъектСсылка;
@@ -1409,13 +1562,9 @@
Для каждого мдТабЧасть из Объект.Метаданные().ТабличныеЧасти Цикл
ЭтоРежимГруппа = ПротоОбъект.Режимы.Группа;
- Если (ЭтоРежимГруппа И мдТабЧасть.Использование<>Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляЭлемента)
- Или (НЕ ЭтоРежимГруппа И мдТабЧасть.Использование<>Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппы) Тогда
-
- Объект[мдТабЧасть.Имя].Очистить();
- КонецЕсли;
-
+ Объект[мдТабЧасть.Имя].Очистить();
КонецЦикла;
+
Для каждого ТабЧасть из ПротоОбъект.ТабличныеЧасти Цикл
Для каждого СтрокаТабЧасти Из ТабЧасть.Значение Цикл
СтрокаТабЧастиОбъекта = Объект[ТабЧасть.Ключ].Добавить();
@@ -1553,6 +1702,19 @@
Значение = Неопределено;
Режим = ВРег(стрПоле.Режим);
+ Попытка
+ Если НаборМдРеквизитов = Неопределено Тогда
+ Если НЕ ЗначениеЗаполнено(стрПоле.ДополнительныйТип) Тогда
+ ВызватьИсключение ПолучитьТекстСообщенияПользователю("Не указан дополнительный тип значения");
+ КонецЕсли;
+ МетаданныеРеквизита = Неопределено;
+ Иначе
+ МетаданныеРеквизита = НаборМдРеквизитов[стрПоле.Имя];
+ КонецЕсли;
+ Исключение
+ Возврат "";
+ КонецПопытки;
+
Попытка
Если НаборМдРеквизитов = Неопределено Тогда
Если НЕ ЗначениеЗаполнено(стрПоле.ДополнительныйТип) Тогда
@@ -2099,170 +2261,557 @@
// } Методы проверки таблиц метаданных
//{ ОСНОВНОЙ БЛОК
-Функция СоздатьМакетДляГенерацииДанных(МассивДанных) Экспорт
+Функция СоздатьМакетДляГенерацииДанных(ТипЗнчМакета, МассивДанных) Экспорт
+
ШапкаДанных = ШапкаДанныхВМакете();
- Макет = Новый ТабличныйДокумент;
- номерКолонки = 0;
- Для каждого ключЗначение Из ШапкаДанных Цикл
- номерКолонки = номерКолонки + 1;
- имяПоля = ключЗначение.Ключ;
- Макет.Область(1, номерКолонки, 1, номерКолонки).Текст = имяПоля ;
+
+ ТЗ = Новый ТаблицаЗначений;
+ Для Каждого СтрокаШапки ИЗ ШапкаДанных Цикл
+ ТЗ.Колонки.Добавить(СтрокаШапки.Ключ, Новый ОписаниеТипов("Строка"));
КонецЦикла;
+ ДанныеДляВыгрузки = Новый Массив;
+
Для каждого ОписательОбъекта Из МассивДанных Цикл
ПользовательИБ = Неопределено;
+ СтрокаОбъектаВыгрузки = Новый Массив;
Если ЭтоОписательПользователяИБ(ОписательОбъекта, ПользовательИБ) Тогда
- ДобавитьПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных);
+ ДобавитьПользователяИБ_ВВыгрузку(СтрокаОбъектаВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных);
Иначе
-
- ДобавитьОбъектВМакет(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных);
+
+ // соберем объект для перевода в нужный формат
+ ДобавитьОбъектВВыгрузку(СтрокаОбъектаВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных);
КонецЕсли;
+ ДанныеДляВыгрузки.Вставить(ДанныеДляВыгрузки.Количество(), СтрокаОбъектаВыгрузки);
КонецЦикла;
+
+ Если ТипЗнчМакета = Тип("ТабличныйДокумент") Тогда
+
+ // запись в xml
+ Макет = ВыгрузитьДанныеВМакетXML(ДанныеДляВыгрузки, ШапкаДанных);
+
+ ИначеЕсли ТипЗнчМакета = Тип("ТекстовыйДокумент") Тогда
+
+ // запись в json
+ Макет = ВыгрузитьДанныеВМакетJSON(ДанныеДляВыгрузки);
+
+ КонецЕсли;
+
Возврат Макет;
+
КонецФункции
-//{ Пример вызова из внешнего кода:
-// Путь_xUnitFor1C = "C:\Projects\GitHub\xUnitFor1C\";
-// ПутьГенератораМакета = Путь_xUnitFor1C + "ГенерацияМакетаДанных_На_БазеРеальныхДанных.epf";
-// Запрос = Новый Запрос;
-// запрос.Текст = "
-// |ВЫБРАТЬ
-// | ""РегистрыСведений.РегистрСведений1.СоздатьНаборЗаписей().Метаданные()"" КАК __Метаданные,
-// | ""ЗаписьРегистра"" КАК __Префикс,
-// | РегистрСведений1.ПростойСправочник,
-// | РегистрСведений1.ПростойСправочник2,
-// | РегистрСведений1.РесурсЧисло,
-// | РегистрСведений1.РесурсБулево
-// |ИЗ
-// | РегистрСведений.РегистрСведений1 КАК РегистрСведений1
-// |УПОРЯДОЧИТЬ ПО
-// | ПростойСправочник2";
-//
- //или Запрос.Текст =
- // "ВЫБРАТЬ
- // | """" КАК __Метаданные,
- // | ""ПростойСправочник"" КАК __Префикс,
- // | ПростойСправочник.Ссылка,
- // | ПростойСправочник.Код,
- // | ПростойСправочник.Наименование,
- // | ПростойСправочник.РеквизитБулево,
- // | ПростойСправочник.РеквизитПеречисление
- // |ИЗ
- // | Справочник.ПростойСправочник КАК ПростойСправочник
- // |Где РеквизитБулево И ПростойСправочник.Наименование = ""Тестовое наименование"" ";
-//
-// РезультатЗапроса = Запрос.Выполнить();
-//
-// ГенераторМакетаДанных = ВнешниеОбработки.Создать(ПутьГенератораМакета);
-// Макет = ГенераторМакетаДанных.СоздатьМакетДанныхНаОснованииЗапроса(РезультатЗапроса);
-// Макет.Показать();
-//}
-Функция СоздатьМакетДанныхНаОснованииЗапроса(РезультатЗапроса) Экспорт
- Таблица = РезультатЗапроса.Выгрузить();
+Функция ВыгрузитьДанныеВМакетXML(ДанныеДляВыгрузки, ШапкаДанных)
- МассивПропускаемыхКолонок = Новый Массив;
- МассивПропускаемыхКолонок.Добавить("__Метаданные");
- МассивПропускаемыхКолонок.Добавить("__Префикс");
- СтрокаПропускаемыхКолонок = "";
- Для каждого Колонка Из МассивПропускаемыхКолонок Цикл
- СтрокаПропускаемыхКолонок = СтрокаПропускаемыхКолонок + Колонка+", ";
+ Макет = Новый ТабличныйДокумент;
+
+ номерКолонки = 0;
+ Для каждого ключЗначение Из ШапкаДанных Цикл
+ номерКолонки = номерКолонки + 1;
+ имяПоля = ключЗначение.Ключ;
+ ОбластьМакета = Макет.Область(1, номерКолонки, 1, номерКолонки);
+ ОбластьМакета.Текст = имяПоля;
КонецЦикла;
- КоличествоСлужебныхКолонок = МассивПропускаемыхКолонок.Количество();
+ НомерСтроки = 1;
- СтруктураДанных = Новый Структура();
- для каждого КолонкаЗапроса из Таблица.Колонки цикл
- Если МассивПропускаемыхКолонок.Найти(КолонкаЗапроса.Имя) <> Неопределено Тогда
- КоличествоСлужебныхКолонок = КоличествоСлужебныхКолонок - 1;
- Продолжить;
- КонецЕсли;
+ // обходим объекты
+ Для Каждого Строка ИЗ ДанныеДляВыгрузки Цикл
+
+ // обходим метаданные объекта
+ Для Каждого СтрокаМассива из Строка Цикл
+
+ ЗаполнитьСтрокуМакета(Макет, НомерСтроки, ШапкаДанных, СтрокаМассива);
+
+ КонецЦикла;
- имяКолонки = КолонкаЗапроса.имя;
- СтруктураДанных.Вставить(имяКолонки);
КонецЦикла;
- Если КоличествоСлужебныхКолонок <> 0 Тогда
- ТекстСообщения = ПолучитьТекстСообщенияПользователю("Не все служебные колонки заданы. В запросе обязательно должны быть колонки %1");
- ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",СтрокаПропускаемыхКолонок);
- ВызватьИсключение ТекстСообщения;
- КонецЕсли;
+ Возврат Макет;
- МассивДанных = Новый Массив;
-
- номер = 1;
- индекс = 1;
- Для каждого Строка из Таблица Цикл
- номер = номер + 1;
+КонецФункции
+
+Процедура ЗаполнитьСтрокуМакета(Макет, НомерСтроки, ШапкаДанных, ЗначениеОбъекта)
+
+ // обработка ролей
+ Если ТипЗнч(ЗначениеОбъекта) = Тип("Массив") Тогда
- ИмяПеременной = Строка.__Префикс + Формат(индекс, "ЧГ=; ЧН=0");
- РеквизитыЗаписи = Новый Структура();
- Для каждого ключЗначение Из СтруктураДанных Цикл
- РеквизитыЗаписи.Вставить(ключЗначение.Ключ)
+ Для Каждого СтрокаМассива из ЗначениеОбъекта Цикл
+
+ ЗаполнитьСтрокуМакета(Макет, НомерСтроки, ШапкаДанных, СтрокаМассива);
+
КонецЦикла;
- ЗаполнитьЗначенияСвойств(РеквизитыЗаписи, Строка);
- описаниеЗаписиРегистраСведений1 = СоздатьОписательЭлемента();
- описаниеЗаписиРегистраСведений1.Вставить("ИмяПеременной", ИмяПеременной);
- описаниеЗаписиРегистраСведений1.Вставить("Реквизиты", РеквизитыЗаписи);
+ Возврат;
- Если ПустаяСтрока(Строка.__Метаданные) Тогда
- описаниеЗаписиРегистраСведений1.Вставить(ВернутьЗначениеСоответствия("Ссылка"), Строка.Ссылка);
- Иначе
- Мета = Неопределено;
- Выполнить("Мета = "+Строка.__Метаданные);
+ КонецЕсли;
+
+ НомерСтроки = НомерСтроки + 1;
- описаниеЗаписиРегистраСведений1.Вставить("Метаданное", Мета);
+ Для Каждого ЗначенияСтрокиОбъекта ИЗ ЗначениеОбъекта Цикл
+
+ Если ШапкаДанных.Свойство(ЗначенияСтрокиОбъекта.Ключ) Тогда
+ НомерКолонки = ШапкаДанных[ЗначенияСтрокиОбъекта.Ключ];
КонецЕсли;
- МассивДанных.Добавить(описаниеЗаписиРегистраСведений1);
+ // как ТЧ доабвляются слжуебные параметры обмен, только создание и доп. свойства
+ Если ЗначенияСтрокиОбъекта.Ключ = "ТЧ" Тогда
+
+ // в ТЧ вложено значение "ДополнительныеСвойства" имеющее тип соответствия и список вложенных элементов
+ Для Каждого ТЧОбъекта ИЗ ЗначенияСтрокиОбъекта.Значение Цикл
+
+ // Если xddMods или ДополнительныеСвойства то они не разбиваются на строки в отличие от обычных ТЧ
+ // и хранят значения в виде структуры
+ // если ТЧ то строки хранятся в виде массива реквизитов
+
+ ОбработкаСтрокиТЧ(Макет, НомерСтроки, НомерКолонки, ШапкаДанных, ТЧОбъекта);
+
+ КонецЦикла;
+
+ ИначеЕсли ТипЗнч(ЗначенияСтрокиОбъекта) = Тип("Структура") Тогда
+
+ ЗаполнитьСтрокуМакета(Макет, НомерСтроки, ШапкаДанных, ЗначенияСтрокиОбъекта);
+
+ ИначеЕсли ТипЗнч(ЗначенияСтрокиОбъекта.Значение) = Тип("Структура") Тогда
+
+ Для Каждого Строка из ЗначенияСтрокиОбъекта.Значение Цикл
+ ЗаполнитьСтрокуМакета(Макет, НомерСтроки, ШапкаДанных, Строка.Значение);
+ КонецЦикла;
+
+ ИначеЕсли ЗначенияСтрокиОбъекта.Ключ = "Роли"
+ И ТипЗнч(ЗначенияСтрокиОбъекта.Значение) = Тип("Массив") Тогда
+
+ НомерКолонки = ШапкаДанных["ТЧ"];
+ ОбластьМакета = Макет.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки);
+ ОбластьМакета.Текст = ЗначенияСтрокиОбъекта.Ключ;
- индекс = индекс + 1;
+ ЗаполнитьСтрокуМакета(Макет, НомерСтроки, ШапкаДанных, ЗначенияСтрокиОбъекта.Значение);
+
+ Иначе
+ // обработка строки структуры
+ ОбластьМакета = Макет.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки);
+ ОбластьМакета.Текст = ЗначенияСтрокиОбъекта.Значение;
+
+ КонецЕсли;
+
КонецЦикла;
-
- Макет = ЭтотОбъект.СоздатьМакетДляГенерацииДанных(массивДанных);
-
- Возврат Макет;
-КонецФункции
-Функция СоздатьОписательЭлементаПоСсылке(Ссылка, МассивИмен, ДанныеОбъекта = Неопределено) Экспорт
- ОписательЭлемента = СоздатьОписательЭлемента();
- ОписательЭлемента[ВернутьЗначениеСоответствия("Ссылка")] = Ссылка;
- ОписательЭлемента.ИмяПеременной = УникальноеИмяПеременнойПоСсылке(Ссылка, МассивИмен);
- МетаСсылка = Ссылка.Метаданные();
- ОписательЭлемента.Метаданное = МетаСсылка;
- ОписательЭлемента.РежимПоиска = "Перем";
- ОписательЭлемента.ВыгружатьКод = ВыгружатьКод;
- МенеджерОбъекта = ПолучитьМенеджерОбъекта_ирЛкс(МетаСсылка);
- Если Метаданные.Справочники.Содержит(МетаСсылка) И Ссылка.ЭтоГруппа Тогда
- ОписательЭлемента.РежимСоздания = "Группа";
- ИначеЕсли Метаданные.ПланыОбмена.Содержит(МетаСсылка) И Ссылка = МенеджерОбъекта.ЭтотУзел() Тогда
- ОписательЭлемента.РежимСоздания = "ЭтотУзел";
+КонецПроцедуры
+
+Процедура ОбработкаСтрокиТЧ(Макет, НомерСтроки, НомерКолонки, ШапкаДанных, ТЧОбъекта)
+
+ МассивТЧБезРазделенияНаСтроки = Новый Массив;
+ МассивТЧБезРазделенияНаСтроки.Добавить("xddMods");
+ МассивТЧБезРазделенияНаСтроки.Добавить("ДополнительныеСвойства");
+ МассивТЧБезРазделенияНаСтроки.Добавить("Роли");
+
+ РазбиватьНаСтроки = Ложь;
+ Если МассивТЧБезРазделенияНаСтроки.Найти(ТЧОбъекта.Ключ) = Неопределено Тогда
+
+ РазбиватьНаСтроки = Истина;
+
Иначе
- ОписательЭлемента.РежимСоздания = "";
+
+ ОбластьМакета = Макет.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки);
+ ОбластьМакета.Текст = ТЧОбъекта.Ключ;
+
КонецЕсли;
- Если ДанныеОбъекта <> Неопределено Тогда
- Если ДанныеОбъекта.Свойство("Предопределенный") Тогда
- ЭтоПредопределенноеЗначение = ДанныеОбъекта.Предопределенный;
- Иначе
- ЭтоПредопределенноеЗначение = Ложь;
+
+ Для Каждого СтрокаТЧОбъекта ИЗ ТЧОбъекта.Значение Цикл
+
+ Если РазбиватьНаСтроки Тогда
+ ОбластьМакета = Макет.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки);
+ Текст = ?(ТЧОбъекта.Ключ = "Записи", "Запись", ТЧОбъекта.Ключ);
+ ОбластьМакета.Текст = Текст;
КонецЕсли;
- Если ЭтоПредопределенноеЗначение Тогда
- Если ЭтоПлатформа8_3_3БезРежимаСовместимости() Тогда
- ОписательЭлемента.РежимСоздания = "Предопределенный";
- ОписательЭлемента.Значение = ДанныеОбъекта.ИмяПредопределенныхДанных;
- Иначе // т.к. в 8.2 нет свойства ИмяПредопределенныхДанных, приходится использовать ГУИД
- ОписательЭлемента.РежимСоздания = "СоздатьПоГуид";
- ОписательЭлемента.ГуидСсылки = Ссылка.УникальныйИдентификатор();
- КонецЕсли;
+
+ Если ТипЗнч(СтрокаТЧОбъекта) = Тип("Массив") Тогда
+
+ // обработка строк ТЧ объекта
+ Для Каждого Строка ИЗ СтрокаТЧОбъекта Цикл
+
+ ЗаполнитьСтрокуМакета(Макет, НомерСтроки, ШапкаДанных, Строка);
+
+ КонецЦикла;
+
+ ИначеЕсли ТипЗнч(СтрокаТЧОбъекта) = Тип("Структура") Тогда
+
+ ЗаполнитьСтрокуМакета(Макет, НомерСтроки, ШапкаДанных, СтрокаТЧОбъекта);
+
+ ИначеЕсли ТипЗнч(СтрокаТЧОбъекта.Значение) = Тип("Структура") Тогда
+
+ ЗаполнитьСтрокуМакета(Макет, НомерСтроки, ШапкаДанных, СтрокаТЧОбъекта.Значение);
+
+ КонецЕсли;
+
+ Если РазбиватьНаСтроки Тогда
+ НомерСтроки = НомерСтроки + 1;
КонецЕсли;
+
+ КонецЦикла;
+
+ // последнюю пустую строку убираем
+ Если РазбиватьНаСтроки Тогда
+ НомерСтроки = НомерСтроки - 1;
КонецЕсли;
- Возврат ОписательЭлемента;
-КонецФункции
+
+КонецПроцедуры
-Функция ЭтоПлатформа8_3_3БезРежимаСовместимости()
+Функция ВыгрузитьДанныеВМакетJSON(ДанныеДляВыгрузки)
+
+ МакетJSON = Новый ТекстовыйДокумент;
+ СтруктураJSON = ПодготовитьJSON(ДанныеДляВыгрузки);
+ ТекстJSON = КонвертироватьДанныеВJSON(СтруктураJSON);
+ МакетJSON.УстановитьТекст(ТекстJSON);
+
+ Возврат МакетJSON;
+
+КонецФункции
+
+Функция ПодготовитьJSON(ДанныеДляВыгрузки)
+
+ JSON = Новый Структура;
+
+ // обходим объекты
+ Для Каждого Строка ИЗ ДанныеДляВыгрузки Цикл
+
+ JSONОбъект = Новый Структура;
+ // первой строкой всегда идет шапка объекта
+ ИмяПеременной = Строка[0].ИмяПеременной;
+ МассивРеквизитов = Новый Массив;
+ МассивТЧ = Новый Массив;
+ МассивДопСвойств = Новый Массив;
+ МассивЗаписей = Новый Массив;
+ МассивРолей = Новый Массив;
+
+ // обходим метаданыне объекта
+ Для Каждого СтрокаМассива из Строка Цикл
+
+ Если ТипЗнч(СтрокаМассива) = Тип("Массив") Тогда
+ ЗаполнитьСтрокуОбъектаJSON(МассивРеквизитов, СтрокаМассива);
+ ИначеЕсли СтрокаМассива.Свойство("Реквизит")
+ И ЗначениеЗаполнено(СтрокаМассива.Реквизит) Тогда
+ ЗаполнитьСтрокуОбъектаJSON(МассивРеквизитов, СтрокаМассива);
+ ИначеЕсли СтрокаМассива.Свойство("Роли") Тогда
+ ЗаполнитьСтрокуОбъектаJSON(МассивРолей, СтрокаМассива.Роли, Истина);
+ ИначеЕсли СтрокаМассива.Свойство("ТЧ") Тогда
+ Если СтрокаМассива.ТЧ.Свойство("XDDMODS")
+ или СтрокаМассива.ТЧ.Свойство("XDDDATAGEN") Тогда
+ ЗаполнитьРежимыОбъектаJSON(JSONОбъект, СтрокаМассива);
+ ИначеЕсли СтрокаМассива.ТЧ.Свойство("ДополнительныеСвойства") Тогда
+ ЗаполнитьСтрокуОбъектаJSON(МассивДопСвойств, СтрокаМассива, Истина);
+ ИначеЕсли СтрокаМассива.ТЧ.Свойство("Записи") Тогда
+ ЗаполнитьСтрокуОбъектаJSON(МассивЗаписей, СтрокаМассива, Истина);
+ Иначе
+ ЗаполнитьСтрокуОбъектаJSON(МассивТЧ, СтрокаМассива);
+ КонецЕсли;
+ Иначе
+ ЗаполнитьСтрокуОбъектаJSON(JSONОбъект, СтрокаМассива);
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Если МассивРеквизитов.Количество() > 0 Тогда
+ JSONОбъект.Вставить("ПоляОбъекта", МассивРеквизитов);
+ КонецЕсли;
+ Если МассивТЧ.Количество() > 0 Тогда
+ JSONОбъект.Вставить("ТабличныеЧасти", МассивТЧ);
+ КонецЕсли;
+ Если МассивДопСвойств.Количество() > 0 Тогда
+ JSONОбъект.Вставить("ДополнительныеСвойства", МассивДопСвойств);
+ КонецЕсли;
+ Если МассивЗаписей.Количество() > 0 Тогда
+ JSONОбъект.Вставить("Записи", МассивЗаписей);
+ КонецЕсли;
+ Если МассивРолей.Количество() > 0 Тогда
+ JSONОбъект.Вставить("Роли", МассивРолей);
+ КонецЕсли;
+
+ JSON.Вставить(ИмяПеременной, JSONОбъект);
+
+ КонецЦикла;
+
+ Возврат JSON;
+
+КонецФункции
+
+Процедура ЗаполнитьСтрокуОбъектаJSON(JSONОбъект, ЗначениеОбъекта, ПоложитьВJSONОбъектМассивТЧ = Ложь)
+
+ // обработка ролей
+ Если ТипЗнч(ЗначениеОбъекта) = Тип("Массив") Тогда
+
+ Для Каждого СтрокаМассива из ЗначениеОбъекта Цикл
+
+ ЗаполнитьСтрокуОбъектаJSON(JSONОбъект, СтрокаМассива);
+
+ КонецЦикла;
+
+ Возврат;
+
+ КонецЕсли;
+
+ ЭтоШапкаОбъекта = ЗначениеОбъекта.Свойство("ИмяПеременной");
+ ЭтоТЧОбъекта = ЗначениеОбъекта.Свойство("ТЧ");
+
+ Если ЭтоШапкаОбъекта Тогда
+
+ Для Каждого ЗначенияСтрокиОбъекта ИЗ ЗначениеОбъекта Цикл
+
+ Если ЗначениеЗаполнено(ЗначенияСтрокиОбъекта.Значение) Тогда
+
+ JSONОбъект.Вставить(ЗначенияСтрокиОбъекта.Ключ, ЗначенияСтрокиОбъекта.Значение);
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Возврат;
+
+ КонецЕсли;
+
+ Если ЭтоТЧОбъекта Тогда
+
+ ТЧОбъекта = Новый Массив;
+ ЗначенияТЧОбъекта = ЗначениеОбъекта.ТЧ;
+
+ Для Каждого СтрокаТЧОбъекта ИЗ ЗначенияТЧОбъекта Цикл
+
+ СтруктураСтроки = Новый Структура;
+
+ Для Каждого СтрокаЗначенияТЧОбъекта ИЗ СтрокаТЧОбъекта.Значение Цикл
+
+ Если ТипЗнч(СтрокаТЧОбъекта.Значение) = Тип("Структура") Тогда
+
+ ТЧОбъекта.Добавить(СтрокаЗначенияТЧОбъекта.Значение);
+
+ Иначе
+
+ ТЧОбъекта.Добавить(СтрокаЗначенияТЧОбъекта);
+
+ КонецЕсли
+
+ КонецЦикла;
+
+ КонецЦикла;
+
+ Если ПоложитьВJSONОбъектМассивТЧ Тогда
+
+ JSONОбъект = ТЧОбъекта;
+
+ Иначе
+
+ СтруктураТЧ = Новый Структура;
+ СтруктураТЧ.Вставить(СтрокаТЧОбъекта.Ключ, ТЧОбъекта);
+
+ // ТЧ складываем в массив
+ Если ТЧОбъекта.Количество() > 0 Тогда
+ JSONОбъект.Добавить(СтруктураТЧ);
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Возврат;
+
+ КонецЕсли;
+
+ // реквизиты
+ РеквизитыОбъекта = Новый Структура;
+ Для Каждого ЗначенияСтрокиОбъекта ИЗ ЗначениеОбъекта Цикл
+
+ // пустые пропускаем для снижения объема
+ Если ЗначениеЗаполнено(ЗначенияСтрокиОбъекта.Значение) Тогда
+
+ РеквизитыОбъекта.Вставить(ЗначенияСтрокиОбъекта.Ключ, ЗначенияСтрокиОбъекта.Значение);
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ // реквизиты складываем в массив
+ JSONОбъект.Добавить(РеквизитыОбъекта);
+
+КонецПроцедуры
+
+Процедура ЗаполнитьРежимыОбъектаJSON(JSONОбъект, ЗначениеОбъекта)
+
+ СтруктураРежимы = Новый Структура;
+ ЗначенияТЧОбъекта = ЗначениеОбъекта.ТЧ;
+
+ Для Каждого СтрокаТЧОбъекта ИЗ ЗначенияТЧОбъекта Цикл
+
+ Для Каждого СтрокаЗначенияТЧОбъекта ИЗ СтрокаТЧОбъекта.Значение Цикл
+
+ СтруктураРежимы.Вставить(СтрокаЗначенияТЧОбъекта.Значение, Истина);
+
+ КонецЦикла;
+
+ КонецЦикла;
+
+ JSONОбъект.Вставить("Режимы", СтруктураРежимы);
+
+КонецПроцедуры
+
+Функция ПреобразованиеНеПоддерживаемыхТипов(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт
+
+ Результат = Новый Структура;
+
+ Если ТипЗнч(Значение) = Тип("ОбъектМетаданных") Тогда
+
+ Результат.Вставить(Свойство, Строка(Значение));
+
+ Иначе
+
+ Значение = ?(ЗначениеЗаполнено(Значение), Строка(Значение), "");
+ Результат.Вставить(Свойство, Значение);
+
+ КонецЕсли;
+
+ Возврат Результат;
+
+КонецФункции
+
+//{ Пример вызова из внешнего кода:
+// Путь_xUnitFor1C = "C:\Projects\GitHub\xUnitFor1C\";
+// ПутьГенератораМакета = Путь_xUnitFor1C + "ГенерацияМакетаДанных_На_БазеРеальныхДанных.epf";
+// Запрос = Новый Запрос;
+// запрос.Текст = "
+// |ВЫБРАТЬ
+// | ""РегистрыСведений.РегистрСведений1.СоздатьНаборЗаписей().Метаданные()"" КАК __Метаданные,
+// | ""ЗаписьРегистра"" КАК __Префикс,
+// | РегистрСведений1.ПростойСправочник,
+// | РегистрСведений1.ПростойСправочник2,
+// | РегистрСведений1.РесурсЧисло,
+// | РегистрСведений1.РесурсБулево
+// |ИЗ
+// | РегистрСведений.РегистрСведений1 КАК РегистрСведений1
+// |УПОРЯДОЧИТЬ ПО
+// | ПростойСправочник2";
+//
+ //или Запрос.Текст =
+ // "ВЫБРАТЬ
+ // | """" КАК __Метаданные,
+ // | ""ПростойСправочник"" КАК __Префикс,
+ // | ПростойСправочник.Ссылка,
+ // | ПростойСправочник.Код,
+ // | ПростойСправочник.Наименование,
+ // | ПростойСправочник.РеквизитБулево,
+ // | ПростойСправочник.РеквизитПеречисление
+ // |ИЗ
+ // | Справочник.ПростойСправочник КАК ПростойСправочник
+ // |Где РеквизитБулево И ПростойСправочник.Наименование = ""Тестовое наименование"" ";
+//
+// РезультатЗапроса = Запрос.Выполнить();
+//
+// ГенераторМакетаДанных = ВнешниеОбработки.Создать(ПутьГенератораМакета);
+// Макет = ГенераторМакетаДанных.СоздатьМакетДанныхНаОснованииЗапроса(РезультатЗапроса);
+// Макет.Показать();
+//}
+Функция СоздатьМакетДанныхНаОснованииЗапроса(РезультатЗапроса) Экспорт
+ Таблица = РезультатЗапроса.Выгрузить();
+
+ МассивПропускаемыхКолонок = Новый Массив;
+ МассивПропускаемыхКолонок.Добавить("__Метаданные");
+ МассивПропускаемыхКолонок.Добавить("__Префикс");
+ СтрокаПропускаемыхКолонок = "";
+ Для каждого Колонка Из МассивПропускаемыхКолонок Цикл
+ СтрокаПропускаемыхКолонок = СтрокаПропускаемыхКолонок + Колонка+", ";
+ КонецЦикла;
+
+ КоличествоСлужебныхКолонок = МассивПропускаемыхКолонок.Количество();
+
+ СтруктураДанных = Новый Структура();
+ для каждого КолонкаЗапроса из Таблица.Колонки цикл
+ Если МассивПропускаемыхКолонок.Найти(КолонкаЗапроса.Имя) <> Неопределено Тогда
+ КоличествоСлужебныхКолонок = КоличествоСлужебныхКолонок - 1;
+ Продолжить;
+ КонецЕсли;
+
+ имяКолонки = КолонкаЗапроса.имя;
+ СтруктураДанных.Вставить(имяКолонки);
+ КонецЦикла;
+
+ Если КоличествоСлужебныхКолонок <> 0 Тогда
+ ТекстСообщения = ПолучитьТекстСообщенияПользователю("Не все служебные колонки заданы. В запросе обязательно должны быть колонки %1");
+ ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",СтрокаПропускаемыхКолонок);
+ ВызватьИсключение ТекстСообщения;
+ КонецЕсли;
+
+ МассивДанных = Новый Массив;
+
+ номер = 1;
+ индекс = 1;
+ Для каждого Строка из Таблица Цикл
+ номер = номер + 1;
+
+ ИмяПеременной = Строка.__Префикс + Формат(индекс, "ЧГ=; ЧН=0");
+ РеквизитыЗаписи = Новый Структура();
+ Для каждого ключЗначение Из СтруктураДанных Цикл
+ РеквизитыЗаписи.Вставить(ключЗначение.Ключ)
+ КонецЦикла;
+ ЗаполнитьЗначенияСвойств(РеквизитыЗаписи, Строка);
+
+ описаниеЗаписиРегистраСведений1 = СоздатьОписательЭлемента();
+ описаниеЗаписиРегистраСведений1.Вставить("ИмяПеременной", ИмяПеременной);
+ описаниеЗаписиРегистраСведений1.Вставить("Реквизиты", РеквизитыЗаписи);
+
+ Если ПустаяСтрока(Строка.__Метаданные) Тогда
+ описаниеЗаписиРегистраСведений1.Вставить(ВернутьЗначениеСоответствия("Ссылка"), Строка.Ссылка);
+ Иначе
+ Мета = Неопределено;
+ Выполнить("Мета = "+Строка.__Метаданные);
+
+ описаниеЗаписиРегистраСведений1.Вставить("Метаданное", Мета);
+ КонецЕсли;
+
+ МассивДанных.Добавить(описаниеЗаписиРегистраСведений1);
+
+ индекс = индекс + 1;
+ КонецЦикла;
+
+ Макет = ЭтотОбъект.СоздатьМакетДляГенерацииДанных(массивДанных);
+
+ Возврат Макет;
+КонецФункции
+
+Функция СоздатьОписательЭлементаПоСсылке(Ссылка, МассивИмен, ДанныеОбъекта = Неопределено) Экспорт
+ ОписательЭлемента = СоздатьОписательЭлемента();
+ ОписательЭлемента[ВернутьЗначениеСоответствия("Ссылка")] = Ссылка;
+ ОписательЭлемента.ИмяПеременной = УникальноеИмяПеременнойПоСсылке(Ссылка, МассивИмен);
+ МетаСсылка = Ссылка.Метаданные();
+ ОписательЭлемента.Метаданное = МетаСсылка;
+ ОписательЭлемента.РежимПоиска = "Перем";
+ ОписательЭлемента.ВыгружатьКод = ВыгружатьКод;
+ МенеджерОбъекта = ПолучитьМенеджерОбъекта_ирЛкс(МетаСсылка);
+ Если Метаданные.Справочники.Содержит(МетаСсылка) И Ссылка.ЭтоГруппа Тогда
+ ОписательЭлемента.РежимСоздания = "Группа";
+ ИначеЕсли Метаданные.ПланыОбмена.Содержит(МетаСсылка) И Ссылка = МенеджерОбъекта.ЭтотУзел() Тогда
+ ОписательЭлемента.РежимСоздания = "ЭтотУзел";
+ Иначе
+ ОписательЭлемента.РежимСоздания = "";
+ КонецЕсли;
+ Если ДанныеОбъекта <> Неопределено Тогда
+ Если ДанныеОбъекта.Свойство("Предопределенный") Тогда
+ ЭтоПредопределенноеЗначение = ДанныеОбъекта.Предопределенный;
+ Иначе
+ ЭтоПредопределенноеЗначение = Ложь;
+ КонецЕсли;
+ Если ЭтоПредопределенноеЗначение Тогда
+ Если ЭтоПлатформа8_3_3БезРежимаСовместимости() Тогда
+ ОписательЭлемента.РежимСоздания = "Предопределенный";
+ ОписательЭлемента.Значение = ДанныеОбъекта.ИмяПредопределенныхДанных;
+ Иначе // т.к. в 8.2 нет свойства ИмяПредопределенныхДанных, приходится использовать ГУИД
+ ОписательЭлемента.РежимСоздания = "СоздатьПоГуид";
+ ОписательЭлемента.ГуидСсылки = Ссылка.УникальныйИдентификатор();
+ КонецЕсли;
+ КонецЕсли;
+ КонецЕсли;
+ Возврат ОписательЭлемента;
+КонецФункции
+
+Функция ЭтоПлатформа8_3_3БезРежимаСовместимости()
СистемнаяИнформация = Новый СистемнаяИнформация;
@@ -2417,233 +2966,8 @@
Возврат рез;
КонецФункции
-Процедура ДобавитьПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных)
- ДобавитьШапкуПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных);
-
- ДобавитьРеквизитыПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных);
- ДобавитьРолиПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных);
-КонецПроцедуры
-
-Процедура ДобавитьШапкуПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных)
- ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, "", ОписательОбъекта.Значение);
-
- НомерСтрокиМакета = Макет.ВысотаТаблицы;
-
- НомерКолонкиМакета_Тип = ШапкаДанных.Тип;
- ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Тип, НомерСтрокиМакета, НомерКолонкиМакета_Тип);
- ОбластьМакета.Текст = "ПользовательИБ";
-
- НомерКолонкиМакета_ИмяПеременной = ШапкаДанных.ИмяПеременной;
- ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ИмяПеременной, НомерСтрокиМакета, НомерКолонкиМакета_ИмяПеременной);
- ОбластьМакета.Текст = ОписательОбъекта.ИмяПеременной;
-КонецПроцедуры
-
-Процедура ДобавитьРеквизитыПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных)
-
- параметрыПользователя = Новый Структура;
- параметрыПользователя.Вставить("Имя", "");
- параметрыПользователя.Вставить("ПолноеИмя", "");
- параметрыПользователя.Вставить("АутентификацияСтандартная", Истина);
- параметрыПользователя.Вставить("АутентификацияОС", Ложь);
- параметрыПользователя.Вставить("ПользовательОС", "");
- параметрыПользователя.Вставить("ОсновнойИнтерфейс", ""); //Метаданные.Интерфейсы.Администратор);
- параметрыПользователя.Вставить("ПоказыватьВСпискеВыбора", Истина);
- параметрыПользователя.Вставить("РежимЗапуска", РежимЗапускаКлиентскогоПриложения.Авто);
- //параметрыПользователя.Вставить("Язык", Метаданные.Языки.Русский);
-
- ЗаполнитьЗначенияСвойств(параметрыПользователя, ОписательОбъекта.ПользовательИБ);
-
- параметрыПользователя.Вставить("Пароль", "");
-
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
- Для Каждого КлючЗначение Из параметрыПользователя Цикл
- ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, КлючЗначение.Ключ, КлючЗначение.Значение);
-
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
- КонецЦикла;
-КонецПроцедуры
-
-Процедура ДобавитьРолиПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных)
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
- НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ;
- ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ТЧ, НомерСтрокиМакета, НомерКолонкиМакета_ТЧ);
- ОбластьМакета.Текст = "Роли";
-
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
-
- Роли = ОписательОбъекта.ПользовательИБ.Роли;
- Для Каждого Роль Из Роли Цикл
- ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, "Роль", Роль.Имя);
-
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
- КонецЦикла;
-КонецПроцедуры
-
-Процедура ДобавитьОбъектВМакет(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных)
- Ссылка = Неопределено;
- Мд = Неопределено;
- ЭтоСсылочныйОбъект = ЭтоОписательОбъектаСсылки(ОписательОбъекта, Ссылка);
- Если ЭтоСсылочныйОбъект Тогда
- ЭтоСсылочныйОбъект = Истина;
- Мд = Ссылка.Метаданные();
- ИначеЕсли ОписательОбъекта.Свойство("Метаданное", Мд) Тогда
- КонецЕсли;
-
- ДобавитьМетаданныеВМакетДляДобавляемогоОбъекта(Макет, ОписательОбъекта, ШапкаДанных, Макет.ВысотаТаблицы+1, Мд);
-
- менеджерОбъекта = ПолучитьМенеджерОбъекта_ирЛкс(Мд);
- КорневойТипКонфигурации = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд);
- Если КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Справочник") Тогда
- Если ЗначениеЗаполнено(Ссылка) и Ссылка.ЭтоГруппа Тогда
- Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда
- лПустойОбъект = менеджерОбъекта.СоздатьГруппу();
- Иначе
- лПустойОбъект = менеджерОбъекта.CreateFolder();
- КонецЕсли;
- Иначе
- Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда
- лПустойОбъект = менеджерОбъекта.СоздатьЭлемент();
- Иначе
- лПустойОбъект = менеджерОбъекта.CreateItem();
- КонецЕсли;
- КонецЕсли;
- ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Документ") Тогда
- лПустойОбъект = менеджерОбъекта.СоздатьДокумент();
- ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("БизнесПроцесс") Тогда
- лПустойОбъект = менеджерОбъекта.СоздатьБизнесПроцесс();
- ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Задача") Тогда
- лПустойОбъект = менеджерОбъекта.СоздатьЗадачу();
- ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") Тогда
- ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрНакопления") Тогда
- ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда
- ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланОбмена") Тогда
- лПустойОбъект = менеджерОбъекта.СоздатьУзел();
- ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланВидовХарактеристик") Тогда
- Если ЗначениеЗаполнено(Ссылка) и Ссылка.ЭтоГруппа Тогда
- Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда
- лПустойОбъект = менеджерОбъекта.СоздатьГруппу();
- Иначе
- лПустойОбъект = менеджерОбъекта.CreateFolder();
- КонецЕсли;
- Иначе
- Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда
- лПустойОбъект = менеджерОбъекта.СоздатьЭлемент();
- Иначе
- лПустойОбъект = менеджерОбъекта.CreateItem();
- КонецЕсли;
- КонецЕсли;
- ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланСчетов") Тогда
- лПустойОбъект = менеджерОбъекта.СоздатьСчет();
- ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланВидовРасчета") Тогда
- лПустойОбъект = менеджерОбъекта.СоздатьВидРасчета();
- Иначе
- ТекстСообщения = ПолучитьТекстСообщенияПользователю("Неизвестный КорневойТипКонфигурации <%1>");
- ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",КорневойТипКонфигурации);
- ВызватьИсключение ТекстСообщения;
- КонецЕсли;
-
- ВыгружаемыеСтандартныеРеквизиты = ВыгружаемыеСтандартныеРеквизиты(ОписательОбъекта, КорневойТипКонфигурации);
-
- Если ЗначениеЗаполнено(Ссылка) Тогда
- объект = Ссылка.ПолучитьОбъект();
-
- Если НЕ ВыгружатьСсылку И ЗначениеЗаполнено(ОписательОбъекта.ГуидСсылки) Тогда
- Для каждого РеквизитМд Из Мд.СтандартныеРеквизиты Цикл
- Если РеквизитМд.Имя = ВернутьЗначениеСоответствия("Ссылка") Тогда
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
- ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, РеквизитМд, ОписательОбъекта.ГуидСсылки, Мд, НомерСтрокиМакета, ШапкаДанных);
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
-
- ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, Мд.СтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты);
- ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, Мд.Реквизиты, Неопределено);
-
- ОбработатьТабличныеЧастиОбъекта(Макет, Мд.ТабличныеЧасти, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект);
- ОбработатьРежимыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект);
- ДобавитьДополнительныеСвойства(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект);
-
- ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") и ТипЗнч(ОписательОбъекта.Реквизиты) = Тип("Структура") Тогда
- ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.СтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты);
- ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Измерения, Неопределено);
- ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Ресурсы, Неопределено);
- ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Реквизиты, Неопределено);
-
- ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений")
- Или КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрНакопления")
- Или КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда
-
- ЭтоРегистрБухгалтерии = КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии");
-
- НаборЗаписейРегистра = ОписательОбъекта.Реквизиты;
- Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл
- Макет.Область(Макет.ВысотаТаблицы+1, ШапкаДанных.ТЧ).Текст = "Запись";
- ОписательОбъекта.Реквизиты = ЗаписьРегистра;
-
- НаборСтандартныеРеквизиты = Мд.СтандартныеРеквизиты;
- Если ЭтоРегистрБухгалтерии Тогда
- ДанныеСчета = Новый Структура;
- Если Мд.Корреспонденция Тогда
- ДанныеСчета.Вставить("СчетДт", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "СубконтоДт"));
- ДанныеСчета.Вставить("СчетКт", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "СубконтоКт"));
- Иначе
- ДанныеСчета.Вставить("Счет", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "Субконто"));
- КонецЕсли;
-
- НаборСтандартныеРеквизиты = Новый Массив;
- для каждого МдРеквизит из Мд.СтандартныеРеквизиты Цикл
- ИмяРеквизита = МдРеквизит.Имя;
- Если Лев(ИмяРеквизита, СтрДлина("ВидСубконто")) = "ВидСубконто" Тогда
- Продолжить;
- КонецЕсли;
- Если Лев(ИмяРеквизита, СтрДлина("Субконто")) = "Субконто" Тогда
- Продолжить;
- КонецЕсли;
- НаборСтандартныеРеквизиты.Добавить(МдРеквизит);
- КонецЦикла;
- КонецЕсли;
-
- ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, НаборСтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты);
- ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Измерения, Неопределено, КорневойТипКонфигурации);
- ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Ресурсы, Неопределено, КорневойТипКонфигурации);
- ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Реквизиты, Неопределено);
-
- Если ЭтоРегистрБухгалтерии Тогда
- ВыгружаемыеРеквизиты = Новый Массив;
- МассивИмитаторРеквизитовМд = Новый Массив;
- Для каждого КлючЗначение Из ДанныеСчета Цикл
- ИмяРеквизита = КлючЗначение.Ключ;
- ВыгружаемыеРеквизиты.Добавить(ИмяРеквизита);
- Структура = Новый Структура("Имя,Субконто", ИмяРеквизита, КлючЗначение.Значение);
- МассивИмитаторРеквизитовМд.Добавить(Структура);
- КонецЦикла;
-
- ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, МассивИмитаторРеквизитовМд, ВыгружаемыеРеквизиты, КорневойТипКонфигурации);
- КонецЕсли;
- КонецЦикла;
-
- Иначе
- ВызватьИсключение ПолучитьТекстСообщенияПользователю("Неизвестный вариант работы - метод <ДобавитьОбъектВМакет>");
- КонецЕсли;
-КонецПроцедуры
-
-Процедура ДобавитьДополнительныеСвойства(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект)
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
-
- ДопСвойства = Новый Структура();
- Для Каждого СтрокаТЧ Из ЭтотОбъект.ДополнительныеСвойства Цикл
- ДопСвойства.Вставить(СтрокаТЧ.Имя, СтрокаТЧ.Значение);
- КонецЦикла;
- Если ДопСвойства.Количество() > 0 Тогда
- НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ;
- ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ТЧ, НомерСтрокиМакета, НомерКолонкиМакета_ТЧ);
- ОбластьМакета.Текст = "ДополнительныеСвойства";
- КонецЕсли;
-
- ДобавитьДопСвойстваВМакет(Макет, ШапкаДанных, "Режим", ДопСвойства);
-КонецПроцедуры
-
Процедура ДобавитьМетаданныеВМакетДляДобавляемогоОбъекта(Макет, ОписательОбъекта, ШапкаДанных, НомерСтрокиМакета, Мд)
+
НомерКолонкиМакета_Тип = ШапкаДанных.Тип;
ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Тип, НомерСтрокиМакета, НомерКолонкиМакета_Тип);
ОбластьМакета.Текст = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд);
@@ -2664,7 +2988,8 @@
НомерКолонкиМакета_Значение = ШапкаДанных.Значение;
ОбластьМакета_Значение = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Значение, НомерСтрокиМакета, НомерКолонкиМакета_Значение);
- ОбластьМакета_Значение.Текст = ОписательОбъекта.Значение;
+ ОбластьМакета_Значение.Текст = ОписательОбъекта.Значение;
+
КонецПроцедуры
Функция ВыгружаемыеСтандартныеРеквизиты(ОписательОбъекта, КорневойТипКонфигурации)
@@ -2811,267 +3136,53 @@
Возврат ВыгружаемыеСтандартныеРеквизиты;
КонецФункции
-Процедура ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, МдРеквизиты, ВыгружаемыеРеквизиты, КорневойТипКонфигурации = "")
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
-
- ЭтоСсылочныйОбъект = ЭтоОписательОбъектаСсылки(ОписательОбъекта);
- Если ЭтоСсылочныйОбъект Тогда
- Мд = Объект.Метаданные();
- Иначе
- Мд = Объект;
- КонецЕсли;
-
- Для каждого РеквизитМд Из МдРеквизиты Цикл
- имяРеквизита = РеквизитМд.Имя;
- Если ВыгружаемыеРеквизиты <> Неопределено и ВыгружаемыеРеквизиты.Найти(имяРеквизита) = Неопределено Тогда
- Продолжить;
- КонецЕсли;
-
- БылДобавленСчетДляЗаписиРегистраБухгалтерии = Ложь;
+Процедура ПолучитьПредставлениеИРежимПоискаПоЗначениюРеквизита(Объект, ЗначениеРеквизита, ТипРеквизита, МассивДанных, резПредставлениеЗначенияРеквизита, резРежимПоиска, резДополнительныйТипЗначения)
+ резДополнительныйТипЗначения = "";
+ Если ТипРеквизита = Тип("Число") Тогда
+ ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "ЧГ=");
+ резДополнительныйТипЗначения = "Число";
+ ИначеЕсли ТипРеквизита = Тип("Строка") Тогда
+ ПредставлениеЗначенияРеквизита = ЗначениеРеквизита;
+ резДополнительныйТипЗначения = "Строка";
+ ИначеЕсли ТипРеквизита = Тип("Дата") Тогда
+ ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "ДФ=yyyyMMddЧЧммсс"); // важно ЧЧ
+ резДополнительныйТипЗначения = "Дата";
+ ИначеЕсли ТипРеквизита = Тип("Булево") Тогда
+ ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "БЛ=Ложь; БИ=Истина");
+ резДополнительныйТипЗначения = "Булево";
- Если ЭтоСсылочныйОбъект Тогда
- ЗначениеРеквизита = объект[имяРеквизита];
-
- этоЗначениеБудетСозданоПоУмолчанию = лПустойОбъект[имяРеквизита] = ЗначениеРеквизита;
- Если этоЗначениеБудетСозданоПоУмолчанию Тогда
- Продолжить;
+ ИначеЕсли ЛиСсылкаНаОбъектБД_ирЛкс(ЗначениеРеквизита) Тогда
+ ОписательЗначенияРеквизита = НайтиОписательОбъектаПоСсылке(МассивДанных, ЗначениеРеквизита); //МассивДанных.Найти(ЗначениеРеквизита);
+ Если ОписательЗначенияРеквизита <> Неопределено Тогда
+ ЕстьРеквизитСсылка = Истина;
+ Если ТипЗнч(Объект) = Тип("ОбъектМетаданных") Тогда
+ ЕстьРеквизитСсылка = Ложь;
+ Для каждого РеквизитМд Из Объект.СтандартныеРеквизиты Цикл
+ Если РеквизитМд.Имя = ВернутьЗначениеСоответствия("Ссылка") Тогда
+ ЕстьРеквизитСсылка = Истина;
+ КонецЕсли;
+ КонецЦикла;
КонецЕсли;
- Иначе
- Если КорневойТипКонфигурации = "РегистрБухгалтерии" Тогда
- Если Лев(ИмяРеквизита, СтрДлина("Счет")) = "Счет" Тогда
- БылДобавленСчетДляЗаписиРегистраБухгалтерии = Истина;
- ИмяРеквизитаСчет = имяРеквизита;
- ИначеЕсли НЕ РеквизитМд.Балансовый Тогда
- Суффиксы = Новый Массив;
- Суффиксы.Добавить("Дт");
- Суффиксы.Добавить("Кт");
- Для Каждого Суффикс Из Суффиксы Цикл
- ЗначениеРеквизита = ОписательОбъекта.Реквизиты[имяРеквизита + Суффикс];
- ИмитаторРеквизитаМд = Новый Структура("Имя, Тип", имяРеквизита + Суффикс, РеквизитМд.Тип);
- ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, ИмитаторРеквизитаМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных);
- Если ДобавилиРеквизит Тогда
- НомерСтрокиМакета = НомерСтрокиМакета + 1;
+ Если ЕстьРеквизитСсылка И ЗначениеРеквизита = Объект.Ссылка Тогда
+ ПредставлениеЗначенияРеквизита = Строка(ЗначениеРеквизита.УникальныйИдентификатор());
+ РежимПоиска = "";
+ Иначе
+ ИмяПеременнойИзОписателяОбъекта = ИмяПеременнойИзОписателяОбъекта(ЗначениеРеквизита.Метаданные(), ОписательЗначенияРеквизита);
+ ИскатьПоГуид = Ложь;
+ Если СвязьПоГуид Тогда
+ Для каждого Элемент Из МассивДанных Цикл
+ Если Элемент.ИмяПеременной = ИмяПеременнойИзОписателяОбъекта Тогда
+ ИскатьПоГуид = Истина;
+ Прервать;
КонецЕсли;
КонецЦикла;
- Продолжить;
- КонецЕсли;
- КонецЕсли;
- ЗначениеРеквизита = ОписательОбъекта.Реквизиты[имяРеквизита];
- КонецЕсли;
-
- ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных);
-
- Если ДобавилиРеквизит Тогда
- НомерСтрокиМакета = НомерСтрокиМакета + 1;
- КонецЕсли;
-
- Если БылДобавленСчетДляЗаписиРегистраБухгалтерии Тогда
- Для Каждого ОписаниеВидаСубконто Из ОписательОбъекта.Реквизиты[ИмяРеквизитаСчет].ВидыСубконто Цикл
- ВидСубконто = ОписаниеВидаСубконто.ВидСубконто;
- НаименованиеРеквизитаСубконто = РеквизитМд.Субконто.НаименованиеРеквизитаСубконто;
- ЗначениеРеквизита = ОписательОбъекта.Реквизиты[НаименованиеРеквизитаСубконто][ВидСубконто];
- Если ЗначениеРеквизита = Неопределено Тогда
- Продолжить;
- КонецЕсли;
-
- ИмитаторРеквизитаМд = Новый Структура("Имя, Тип", НаименованиеРеквизитаСубконто + ОписаниеВидаСубконто.НомерСтроки, ВидСубконто.ТипЗначения);
-
- ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, ИмитаторРеквизитаМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных);
-
- Если ДобавилиРеквизит Тогда
- НомерСтрокиМакета = НомерСтрокиМакета + 1;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- КонецЦикла;
-КонецПроцедуры
-
-Процедура ОбработатьТабличныеЧастиОбъекта(Макет, МдТабличныеЧасти, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект)
- Для каждого МдТч Из МдТабличныеЧасти Цикл
- МдРеквизиты = МдТч.Реквизиты;
- ИмяТЧ = МдТч.Имя;
-
- НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ;
-
- Для каждого строкаТчОбъекта Из объект[ИмяТЧ] Цикл
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
- ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ТЧ, НомерСтрокиМакета, НомерКолонкиМакета_ТЧ);
- ОбластьМакета.Текст = ИмяТЧ;
-
- ОбработатьРеквизитыТабличнойЧастиОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, строкаТчОбъекта, МдРеквизиты);
- КонецЦикла;
- КонецЦикла;
-КонецПроцедуры
-
-Процедура ОбработатьРежимыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект)
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
- Режимы = новый Массив;
- Если ТолькоСоздание Тогда
- Режимы.Добавить("ТолькоСоздание");
- КонецЕсли;
- Если ОбменДанными Тогда
- Режимы.Добавить("ОбменДанными");
- КонецЕсли;
- Мета = Объект.Метаданные();
- Если Метаданные.Справочники.Содержит(Мета) И Объект.ЭтоГруппа Тогда
- Режимы.Добавить("Группа");
- КонецЕсли;
-
- Если Режимы.Количество()>0 Тогда
- НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ;
- ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ТЧ, НомерСтрокиМакета, НомерКолонкиМакета_ТЧ);
- ОбластьМакета.Текст = "xddMods";
-
- Для каждого Режим Из Режимы Цикл
- ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, "Режим", Режим);
- КонецЦикла;
- КонецЕсли;
-КонецПроцедуры
-
-Процедура ОбработатьРеквизитыТабличнойЧастиОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, строкаТчОбъекта, МдРеквизиты)
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
-
- Мд = Объект.Метаданные();
-
- Для каждого РеквизитМд Из МдРеквизиты Цикл
- имяРеквизита = РеквизитМд.Имя;
-
- ЗначениеРеквизита = строкаТчОбъекта[имяРеквизита];
-
- ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных);
-
- Если ДобавилиРеквизит Тогда
- НомерСтрокиМакета = НомерСтрокиМакета + 1;
- КонецЕсли;
- КонецЦикла;
-КонецПроцедуры
-
-Функция ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных)
- имяРеквизита = РеквизитМд.Имя;
- ЕстьТипы = Ложь;
- Попытка
- Тип = РеквизитМд.Тип.Типы();
- ЕстьТипы = Истина;
- Исключение
- КонецПопытки;
-
- Если ЕстьТипы И НЕ ЗначениеЗаполнено(ЗначениеРеквизита) И РеквизитМд.Тип.Типы().Количество() = 1 Тогда
- Возврат Ложь;
- КонецЕсли;
- ТипРеквизита = ТипЗнч(ЗначениеРеквизита);
- Если ТипРеквизита = ТипЗнч(Неопределено) Тогда
- Возврат Ложь;
- КонецЕсли;
-
- ПредставлениеЗначенияРеквизита = "";
- РежимПоиска = "";
- ДополнительныйТипЗначения = "";
- Попытка
- ПолучитьПредставлениеИРежимПоискаПоЗначениюРеквизита(Объект, ЗначениеРеквизита, ТипРеквизита, МассивДанных, ПредставлениеЗначенияРеквизита, РежимПоиска, ДополнительныйТипЗначения);
- Исключение
- описаниеОшибки = ОписаниеОшибки();
- ТекстСообщения = ПолучитьТекстСообщенияПользователю("%1 Не умею обрабатывать реквизит <%2> у объекта <%3>");
- ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",описаниеОшибки);
- ТекстСообщения = СтрЗаменить(ТекстСообщения,"%2",имяРеквизита);
- ТекстСообщения = СтрЗаменить(ТекстСообщения,"%3",Мд.ПолноеИмя());
- ВызватьИсключение ТекстСообщения;
- КонецПопытки;
-
- Если ЕстьТипы И РеквизитМд.Тип.Типы().Количество() = 1 Тогда
- ДополнительныйТипЗначения = "";
- КонецЕсли;
-
- ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита);
-
- НомерКолонкиМакета_Режим = ШапкаДанных.Режим;
- ОбластьМакета_Режим = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Режим, НомерСтрокиМакета, НомерКолонкиМакета_Режим);
- Если РежимПоиска <> "" Тогда
- ОбластьМакета_Режим.Текст = РежимПоиска;
- КонецЕсли;
-
- НомерКолонкиМакета_ДополнительныйТипЗначения = ШапкаДанных.ДополнительныйТипЗначения;
- ОбластьМакета_ДополнительныйТипЗначения = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ДополнительныйТипЗначения, НомерСтрокиМакета, НомерКолонкиМакета_ДополнительныйТипЗначения);
- ОбластьМакета_ДополнительныйТипЗначения.Текст = ДополнительныйТипЗначения;
-
- Возврат Истина;
-КонецФункции
-
-Процедура ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита)
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
-
- НомерКолонкиМакета_Реквизит = ШапкаДанных.Реквизит;
- НомерКолонкиМакета_Значение = ШапкаДанных.Значение;
-
- ОбластьМакета_Реквизит = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Реквизит, НомерСтрокиМакета, НомерКолонкиМакета_Реквизит);
- ОбластьМакета_Реквизит.Текст = ИмяРеквизита;
-
- ОбластьМакета_Значение = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Значение, НомерСтрокиМакета, НомерКолонкиМакета_Значение);
- ОбластьМакета_Значение.Текст = ПредставлениеЗначенияРеквизита;
-
-КонецПроцедуры
-
-Процедура ДобавитьДопСвойстваВМакет(Макет, ШапкаДанных, ИмяРеквизита, СтруктураДопСвойств)
- Для Каждого ДопСвойство Из СтруктураДопСвойств Цикл
- НомерСтрокиМакета = Макет.ВысотаТаблицы+1;
-
- НомерКолонкиМакета_Реквизит = ШапкаДанных.Реквизит;
- НомерКолонкиМакета_Значение = ШапкаДанных.Значение;
-
- ОбластьМакета_Реквизит = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Реквизит, НомерСтрокиМакета, НомерКолонкиМакета_Реквизит);
- ОбластьМакета_Реквизит.Текст = ДопСвойство.Ключ;
-
- ОбластьМакета_Значение = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Значение, НомерСтрокиМакета, НомерКолонкиМакета_Значение);
- ОбластьМакета_Значение.Текст = ДопСвойство.Значение;
- КонецЦикла;
-КонецПроцедуры
-
-Процедура ПолучитьПредставлениеИРежимПоискаПоЗначениюРеквизита(Объект, ЗначениеРеквизита, ТипРеквизита, МассивДанных, резПредставлениеЗначенияРеквизита, резРежимПоиска, резДополнительныйТипЗначения)
- резДополнительныйТипЗначения = "";
- Если ТипРеквизита = Тип("Число") Тогда
- ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "ЧГ=");
- резДополнительныйТипЗначения = "Число";
- ИначеЕсли ТипРеквизита = Тип("Строка") Тогда
- ПредставлениеЗначенияРеквизита = ЗначениеРеквизита;
- резДополнительныйТипЗначения = "Строка";
- ИначеЕсли ТипРеквизита = Тип("Дата") Тогда
- ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "ДФ=yyyyMMddЧЧммсс"); // важно ЧЧ
- резДополнительныйТипЗначения = "Дата";
- ИначеЕсли ТипРеквизита = Тип("Булево") Тогда
- ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "БЛ=Ложь; БИ=Истина");
- резДополнительныйТипЗначения = "Булево";
-
- ИначеЕсли ЛиСсылкаНаОбъектБД_ирЛкс(ЗначениеРеквизита) Тогда
- ОписательЗначенияРеквизита = НайтиОписательОбъектаПоСсылке(МассивДанных, ЗначениеРеквизита); //МассивДанных.Найти(ЗначениеРеквизита);
- Если ОписательЗначенияРеквизита <> Неопределено Тогда
- ЕстьРеквизитСсылка = Истина;
- Если ТипЗнч(Объект) = Тип("ОбъектМетаданных") Тогда
- ЕстьРеквизитСсылка = Ложь;
- Для каждого РеквизитМд Из Объект.СтандартныеРеквизиты Цикл
- Если РеквизитМд.Имя = ВернутьЗначениеСоответствия("Ссылка") Тогда
- ЕстьРеквизитСсылка = Истина;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- Если ЕстьРеквизитСсылка И ЗначениеРеквизита = Объект.Ссылка Тогда
- ПредставлениеЗначенияРеквизита = Строка(ЗначениеРеквизита.УникальныйИдентификатор());
- РежимПоиска = "";
- Иначе
- ИмяПеременнойИзОписателяОбъекта = ИмяПеременнойИзОписателяОбъекта(ЗначениеРеквизита.Метаданные(), ОписательЗначенияРеквизита);
- ИскатьПоГуид = Ложь;
- Если СвязьПоГуид Тогда
- Для каждого Элемент Из МассивДанных Цикл
- Если Элемент.ИмяПеременной = ИмяПеременнойИзОписателяОбъекта Тогда
- ИскатьПоГуид = Истина;
- Прервать;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- Если ИскатьПоГуид Тогда
- ПредставлениеЗначенияРеквизита = Строка(ЗначениеРеквизита.УникальныйИдентификатор());
- РежимПоиска = "Гуид";
- Иначе
- ПредставлениеЗначенияРеквизита = ИмяПеременнойИзОписателяОбъекта;
- РежимПоиска = "Перем";
+ КонецЕсли;
+ Если ИскатьПоГуид Тогда
+ ПредставлениеЗначенияРеквизита = Строка(ЗначениеРеквизита.УникальныйИдентификатор());
+ РежимПоиска = "Гуид";
+ Иначе
+ ПредставлениеЗначенияРеквизита = ИмяПеременнойИзОписателяОбъекта;
+ РежимПоиска = "Перем";
КонецЕсли;
КонецЕсли;
Иначе
@@ -3162,7 +3273,7 @@
ВызватьИсключение ТекстСообщения;
КонецЕсли;
КонецЕсли;
- резПредставлениеЗначенияРеквизита = ПредставлениеЗначенияРеквизита;
+ резПредставлениеЗначенияРеквизита = Строка(ПредставлениеЗначенияРеквизита);
резРежимПоиска = РежимПоиска;
КонецПроцедуры
@@ -3599,9 +3710,7 @@
КонецЕсли;
КонецПроцедуры
-Функция СоздатьМакетДанныхПоТаблицеДанных(Макет) Экспорт
- Макет.Очистить();
-
+Функция СоздатьМакетДанныхПоТаблицеДанных(Макет) Экспорт
массивДанных = Новый Массив;
Для каждого строка Из ТаблицаДанных Цикл
@@ -3609,35 +3718,26 @@
ЗаполнитьЗначенияСвойств(ОписательЭлемента, строка);
массивДанных.Добавить(ОписательЭлемента);
КонецЦикла;
- НовыйМакет = СоздатьМакетДляГенерацииДанных(массивДанных);
- Если ТипЗнч(НовыйМакет) = Тип("ТабличныйДокумент") Тогда
- Макет.Вывести(НовыйМакет);
- КонецЕсли;
+ НовыйМакет = СоздатьМакетДляГенерацииДанных(ТипЗнч(Макет), массивДанных);
Возврат НовыйМакет;
КонецФункции
-Функция СоздатьМакетДанныхПоМетаданным(Макет) Экспорт
- Макет.Очистить();
-
+Функция СоздатьМакетДанныхПоМетаданным(Макет) Экспорт
массивДанных = Новый Массив;
МассивИмен = ТаблицаДанных.ВыгрузитьКолонку("ИмяПеременной");
СоздатьПоМетаданным(массивДанных);
- НовыйМакет = СоздатьМакетДляГенерацииДанных(массивДанных);
- Если ТипЗнч(НовыйМакет) = Тип("ТабличныйДокумент") Тогда
- Макет.Вывести(НовыйМакет);
- КонецЕсли;
-
+ НовыйМакет = СоздатьМакетДляГенерацииДанных(ТипЗнч(Макет), массивДанных);
+
МассивИмен = Неопределено;
Возврат НовыйМакет;
КонецФункции
Функция СоздатьМакетДанныхПоПользователямИБ(Макет, МассивИменПользователей) Экспорт
- Макет.Очистить();
-
+
МассивПользователей = Новый Массив;
МассивИмен = Новый Массив;
@@ -3654,20 +3754,18 @@
МассивПользователей.Добавить(ОписательПользователяИБ);
КонецЦикла;
- НовыйМакет = СоздатьМакетДляГенерацииДанных(МассивПользователей);
- Если ТипЗнч(НовыйМакет) = Тип("ТабличныйДокумент") Тогда
- Макет.Вывести(НовыйМакет);
- КонецЕсли;
+ НовыйМакет = СоздатьМакетДляГенерацииДанных(ТипЗнч(Макет), МассивПользователей);
МассивИмен = Неопределено;
Возврат НовыйМакет;
КонецФункции
-Процедура ПроверитьЗагрузкуМакета(ТабличныйДокумент) Экспорт
+Процедура ПроверитьЗагрузкуМакета(Макет) Экспорт
НачатьТранзакцию();
- ТестовыеДанные = СоздатьДанныеПоТабличномуДокументу(ТабличныйДокумент);
+ ТестовыеДанные = СоздатьДанныеПоДокументуМакета(Макет);
+
Если ТестовыеДанные.Количество() = 0 Тогда
ВызватьИсключение ПолучитьТекстСообщенияПользователю("не заполнены тестовые данные. Возможно, макет данных пуст.");
КонецЕсли;
@@ -5384,7 +5482,14 @@
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Компоновщик.ПолучитьНастройки(),,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
- Запрос = Новый Запрос(МакетКомпоновки.НаборыДанных.ОсновнойЗапрос.Запрос);
+ Если МакетКомпоновки.НаборыДанных.Количество() = 0 Тогда
+ // TODO: при попытке создать компоновщик по РБ, Задаче, БД, РН набор не переносится в макет
+ // версия платформы 8.3.24.1342
+ // разобраться и исправить
+ Запрос = Новый Запрос(СКД.НаборыДанных.ОсновнойЗапрос.Запрос);
+ Иначе
+ Запрос = Новый Запрос(МакетКомпоновки.НаборыДанных.ОсновнойЗапрос.Запрос);
+ КонецЕсли;
ПараметрыЗапроса = Запрос.НайтиПараметры();
Для Каждого Параметр Из ПараметрыЗапроса Цикл
ПараметрМакетаСКД = МакетКомпоновки.ЗначенияПараметров.Найти(Параметр.Имя);
@@ -6154,20 +6259,684 @@
СтрокамТЗКэшОбъектов.МетаданныеИмя = МетаданныеИмя;
КонецПроцедуры //ДобавитьЗначениеВКэш(Справочники.Модели.ПустаяСсылка(),"Модели",ПараметрыПоиска)
+Функция КонвертироватьМакет(Макет) Экспорт
+
+ Если ТипЗнч(Макет) = Тип("ТабличныйДокумент") Тогда
+ ВозвращатьНаборЗаписей = Истина;
+ Данные = СоздатьДанныеПоДокументуМакета(Макет, ,, ВозвращатьНаборЗаписей);
+ НовыйМакет = КонвертироватьДанныеВМакетJSON(Данные);
+ ИначеЕсли ТипЗнч(Макет) = Тип("ТекстовыйДокумент") Тогда
+ ВызватьИсключение "Конвертация из JSON в XML не реализована";
+ КонецЕсли;
+
+ Возврат НовыйМакет;
+
+КонецФункции
+
#КонецОбласти
//#КонецОбласти ПроцедурыИФункции
-#Область ИнициализацияПеременных
+//#КонецОбласти ИнициализацияПеременных
+#Область СлужебныеПроцедурыИФункции
-ВариантВстроенногоЯзыкаАнглийский = ( Metadata.ScriptVariant = Metadata.ObjectProperties.ScriptVariant.English );
+Функция КонвертироватьДанныеВJSON(СтруктураJSON)
+
+ ПараметрыЗаписи = Новый ПараметрыЗаписиJSON( , Символы.Таб);
+ Запись = Новый ЗаписьJSON;
+ Запись.ПроверятьСтруктуру = Ложь;
+ Запись.УстановитьСтроку(ПараметрыЗаписи);
+ ЗаписатьJSON(Запись, СтруктураJSON,,"ПреобразованиеНеПоддерживаемыхТипов", ЭтотОбъект);
+ ТекстJSON = Запись.Закрыть();
+
+ Возврат ТекстJSON;
+
+КонецФункции
-мНаличиеВыгрузкиПодчиненныхОбъектов = Ложь;
-мТипРезультатЗапроса = Тип("РезультатЗапроса");
-мСоответствиеКолонокДвижений = Новый Соответствие;
+Функция КонвертироватьДанныеВМакетJSON(Данные)
+
+ ТекстовыйДокумент = Новый ТекстовыйДокумент;
+ СтруктураJSON = КонвертироватьПротоОбъектыВСтруктуруДляJSON(Данные);
+ ТекстJSON = КонвертироватьДанныеВJSON(СтруктураJSON);
+ ТекстовыйДокумент.УстановитьТекст(ТекстJSON);
+
+ Возврат ТекстовыйДокумент;
+
+КонецФункции
-ЗаполнитьСоответствие();
+Функция КонвертироватьПротоОбъектыВСтруктуруДляJSON(ДанныеПротоМодель)
+
+ ШапкаДанных = ШапкаДанныхВМакете();
+ ДанныеДляВыгрузки = Новый Массив;
+ МассивИмен = Новый Массив;
+ МассивДанных = Новый Массив;
+
+ Для каждого ОбъектМодели Из ДанныеПротоМодель Цикл
+
+ // напрямую получить объект метаднных из менержера объекта нельзя
+ // переделав на менеджер ключ записи потерям заполнение ресурсво и реквизитов записи
+ // поэтому идем обходным путем
+ Если ТипЗнч(ОбъектМодели.Значение) = Тип("Массив") Тогда
+ ОбъектМД = ОбъектМодели.Значение[0].Метаданные();
+ Иначе
+ ОбъектМД = ОбъектМодели.Значение.Метаданные();
+ КонецЕсли;
+
+ Если Метаданные.Константы.Содержит(ОбъектМД) Тогда
+
+ //ЗаписьКонстанты(СтрокаДереваМетаданных.ОбъектМД, ОбъектыВыгруженныеСОшибками);
+
+ ИначеЕсли Метаданные.РегистрыСведений.Содержит(ОбъектМД) Или
+ Метаданные.РегистрыНакопления.Содержит(ОбъектМД) Или
+ Метаданные.РегистрыРасчета.Содержит(ОбъектМД) Тогда
+
+ Для Каждого НаборЗаписейРегистра из ОбъектМодели.Значение Цикл
+ ОписательЭлемента = СоздатьОписательЭлементаПоНаборуЗаписей(НаборЗаписейРегистра, МассивИмен);
+ КонецЦикла;
+
+ ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМД) Тогда
+
+ Для Каждого НаборЗаписейРегистра из ОбъектМодели.Значение Цикл
+ ОписательЭлемента = СоздатьОписательЭлементаПоНаборуЗаписей(НаборЗаписейРегистра, МассивИмен);
+ КонецЦикла;
+
+ //ИначеЕсли ТипЗнч(СтрокаДереваМетаданных.ЭлементОписания.Менеджер) = Тип("Строка") Тогда
+ // специальный случай для перерасчетов
+ //ЗаписьПерерасчета(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками);
+
+ ИначеЕсли Метаданные.Последовательности.Содержит(ОбъектМД) Тогда
+
+ //ЗаписьПоследовательности(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками);
+
+ Иначе
+
+ Попытка
+ ДанныеОбъекта = Новый Структура;
+ ДанныеОбъекта.Вставить("Предопределенный", ОбъектМодели.Значение["Предопределенный"]);
+ ДанныеОбъекта.Вставить("ИмяПредопределенныхДанных", ОбъектМодели.Значение["ИмяПредопределенныхДанных"]);
+ Исключение
+ ДанныеОбъекта = Неопределено;
+ КонецПопытки;
+ ОписательЭлемента = СоздатьОписательЭлементаПоСсылке(ОбъектМодели.Значение.Ссылка, МассивИмен, ДанныеОбъекта);
-#КонецОбласти
+ КонецЕсли;
+
+ МассивДанных.Добавить(ОписательЭлемента);
+ КонецЦикла;
+
+ Для каждого ОписательОбъекта Из массивДанных Цикл
+ ПользовательИБ = Неопределено;
+ СтрокаОбъектаВыгрузки = Новый Массив;
+ Если ЭтоОписательПользователяИБ(ОписательОбъекта, ПользовательИБ) Тогда
+
+ ДобавитьПользователяИБ_ВВыгрузку(СтрокаОбъектаВыгрузки, ОписательОбъекта, ШапкаДанных, массивДанных);
+
+ Иначе
+
+ // соберем объект для перевода в нужный формат
+ ДобавитьОбъектВВыгрузку(СтрокаОбъектаВыгрузки, ОписательОбъекта, ШапкаДанных, массивДанных);
+
+ КонецЕсли;
+ ДанныеДляВыгрузки.Добавить(СтрокаОбъектаВыгрузки);
+ КонецЦикла;
+
+ СтруктураJSON = ПодготовитьJSON(ДанныеДляВыгрузки);
+
+ Возврат СтруктураJSON;
+
+КонецФункции
-//#КонецОбласти ИнициализацияПеременных
+Процедура ДобавитьОбъектВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных)
+
+ Ссылка = Неопределено;
+ Мд = Неопределено;
+ ЭтоСсылочныйОбъект = ЭтоОписательОбъектаСсылки(ОписательОбъекта, Ссылка);
+ Если ЭтоСсылочныйОбъект Тогда
+ ЭтоСсылочныйОбъект = Истина;
+ Мд = Ссылка.Метаданные();
+ ИначеЕсли ОписательОбъекта.Свойство("Метаданное", Мд) Тогда
+ КонецЕсли;
+
+ ДобавитьМетаданныеВВыгрузкуДляДобавляемогоОбъекта(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, Мд);
+
+ менеджерОбъекта = ПолучитьМенеджерОбъекта_ирЛкс(Мд);
+ КорневойТипКонфигурации = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд);
+ Если КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Справочник") Тогда
+ Если ЗначениеЗаполнено(Ссылка) и Ссылка.ЭтоГруппа Тогда
+ Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда
+ лПустойОбъект = менеджерОбъекта.СоздатьГруппу();
+ Иначе
+ лПустойОбъект = менеджерОбъекта.CreateFolder();
+ КонецЕсли;
+ Иначе
+ Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда
+ лПустойОбъект = менеджерОбъекта.СоздатьЭлемент();
+ Иначе
+ лПустойОбъект = менеджерОбъекта.CreateItem();
+ КонецЕсли;
+ КонецЕсли;
+ ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Документ") Тогда
+ лПустойОбъект = менеджерОбъекта.СоздатьДокумент();
+ ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("БизнесПроцесс") Тогда
+ лПустойОбъект = менеджерОбъекта.СоздатьБизнесПроцесс();
+ ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Задача") Тогда
+ лПустойОбъект = менеджерОбъекта.СоздатьЗадачу();
+ ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") Тогда
+ ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрНакопления") Тогда
+ ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда
+ ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланОбмена") Тогда
+ лПустойОбъект = менеджерОбъекта.СоздатьУзел();
+ ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланВидовХарактеристик") Тогда
+ Если ЗначениеЗаполнено(Ссылка) и Ссылка.ЭтоГруппа Тогда
+ Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда
+ лПустойОбъект = менеджерОбъекта.СоздатьГруппу();
+ Иначе
+ лПустойОбъект = менеджерОбъекта.CreateFolder();
+ КонецЕсли;
+ Иначе
+ Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда
+ лПустойОбъект = менеджерОбъекта.СоздатьЭлемент();
+ Иначе
+ лПустойОбъект = менеджерОбъекта.CreateItem();
+ КонецЕсли;
+ КонецЕсли;
+ ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланСчетов") Тогда
+ лПустойОбъект = менеджерОбъекта.СоздатьСчет();
+ ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланВидовРасчета") Тогда
+ лПустойОбъект = менеджерОбъекта.СоздатьВидРасчета();
+ Иначе
+ ТекстСообщения = ПолучитьТекстСообщенияПользователю("Неизвестный КорневойТипКонфигурации <%1>");
+ ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",КорневойТипКонфигурации);
+ ВызватьИсключение ТекстСообщения;
+ КонецЕсли;
+
+ ВыгружаемыеСтандартныеРеквизиты = ВыгружаемыеСтандартныеРеквизиты(ОписательОбъекта, КорневойТипКонфигурации);
+
+ Если ЗначениеЗаполнено(Ссылка) Тогда
+ объект = Ссылка.ПолучитьОбъект();
+
+ Если НЕ ВыгружатьСсылку И ЗначениеЗаполнено(ОписательОбъекта.ГуидСсылки) Тогда
+ Для каждого РеквизитМд Из Мд.СтандартныеРеквизиты Цикл
+ Если РеквизитМд.Имя = ВернутьЗначениеСоответствия("Ссылка") Тогда
+ ДобавилиРеквизит = ОбработатьВыгрузкуРеквизитаОбъекта(ДанныеДляВыгрузки, МассивДанных, Объект, РеквизитМд, ОписательОбъекта.ГуидСсылки, Мд, ШапкаДанных);
+ КонецЕсли;
+ КонецЦикла;
+ КонецЕсли;
+
+ ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, Мд.СтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты);
+ ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, Мд.Реквизиты, Неопределено);
+
+ ДобавитьТабличныеЧастиОбъектаВВыгрузку(ДанныеДляВыгрузки, Мд.ТабличныеЧасти, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект);
+ ДобавитьРежимыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект);
+ ДобавитьДопСвойстваВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект);
+
+ ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") и ТипЗнч(ОписательОбъекта.Реквизиты) = Тип("Структура") Тогда
+ ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.СтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты);
+ ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Измерения, Неопределено);
+ ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Ресурсы, Неопределено);
+ ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Реквизиты, Неопределено);
+
+ ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений")
+ Или КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрНакопления")
+ Или КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда
+
+ ЭтоРегистрБухгалтерии = КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии");
+
+ НаборЗаписейРегистра = ОписательОбъекта.Реквизиты;
+ МассивЗаписейТЧ = Новый Массив;
+ Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл
+ ОписательОбъекта.Реквизиты = ЗаписьРегистра;
+ МасивЗаписейРегистра = Новый Массив;
+ НаборСтандартныеРеквизиты = Мд.СтандартныеРеквизиты;
+ Если ЭтоРегистрБухгалтерии Тогда
+ ДанныеСчета = Новый Структура;
+ Если Мд.Корреспонденция Тогда
+ ДанныеСчета.Вставить("СчетДт", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "СубконтоДт"));
+ ДанныеСчета.Вставить("СчетКт", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "СубконтоКт"));
+ Иначе
+ ДанныеСчета.Вставить("Счет", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "Субконто"));
+ КонецЕсли;
+
+ НаборСтандартныеРеквизиты = Новый Массив;
+ для каждого МдРеквизит из Мд.СтандартныеРеквизиты Цикл
+ ИмяРеквизита = МдРеквизит.Имя;
+ Если Лев(ИмяРеквизита, СтрДлина("ВидСубконто")) = "ВидСубконто" Тогда
+ Продолжить;
+ КонецЕсли;
+ Если Лев(ИмяРеквизита, СтрДлина("Субконто")) = "Субконто" Тогда
+ Продолжить;
+ КонецЕсли;
+ НаборСтандартныеРеквизиты.Добавить(МдРеквизит);
+ КонецЦикла;
+ КонецЕсли;
+
+ ДобавитьРеквизитыОбъектаВВыгрузку(МасивЗаписейРегистра, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, НаборСтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты);
+ ДобавитьРеквизитыОбъектаВВыгрузку(МасивЗаписейРегистра, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Измерения, Неопределено, КорневойТипКонфигурации);
+ ДобавитьРеквизитыОбъектаВВыгрузку(МасивЗаписейРегистра, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Ресурсы, Неопределено, КорневойТипКонфигурации);
+ ДобавитьРеквизитыОбъектаВВыгрузку(МасивЗаписейРегистра, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Реквизиты, Неопределено);
+
+ Если ЭтоРегистрБухгалтерии Тогда
+ ВыгружаемыеРеквизиты = Новый Массив;
+ МассивИмитаторРеквизитовМд = Новый Массив;
+ Для каждого КлючЗначение Из ДанныеСчета Цикл
+ ИмяРеквизита = КлючЗначение.Ключ;
+ ВыгружаемыеРеквизиты.Добавить(ИмяРеквизита);
+ Структура = Новый Структура("Имя,Субконто", ИмяРеквизита, КлючЗначение.Значение);
+ МассивИмитаторРеквизитовМд.Добавить(Структура);
+ КонецЦикла;
+
+ ДобавитьРеквизитыОбъектаВВыгрузку(МасивЗаписейРегистра, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, МассивИмитаторРеквизитовМд, ВыгружаемыеРеквизиты, КорневойТипКонфигурации);
+ КонецЕсли;
+ МассивЗаписейТЧ.Добавить(МасивЗаписейРегистра);
+ КонецЦикла;
+ Если МасивЗаписейРегистра.Количество() > 0 Тогда
+ СтрукутраИмяТЧ = Новый Структура;
+ СтрукутраИмяТЧ.Вставить("Записи", МассивЗаписейТЧ);
+ ЗаписьТЧ = Новый Структура;
+ ЗаписьТЧ.Вставить("ТЧ", СтрукутраИмяТЧ);
+ ДанныеДляВыгрузки.Добавить(ЗаписьТЧ);
+ КонецЕсли;
+ Иначе
+ ВызватьИсключение ПолучитьТекстСообщенияПользователю("Неизвестный вариант работы - метод <ДобавитьОбъектВВыгрузку>");
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьМетаданныеВВыгрузкуДляДобавляемогоОбъекта(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, Мд)
+
+ ЗаписьВыгрузки = Новый Структура;
+
+ ЗначениеСтроки = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд);
+ ЗаписьВыгрузки.Вставить("Тип", ЗначениеСтроки);
+
+ ЗначениеСтроки = Мд.Имя;
+ ЗаписьВыгрузки.Вставить("Вид", ЗначениеСтроки);
+
+ ЗначениеСтроки = ИмяПеременнойИзОписателяОбъекта(Мд, ОписательОбъекта);
+ ЗаписьВыгрузки.Вставить("ИмяПеременной", ЗначениеСтроки);
+
+ ЗначениеСтроки = ОписательОбъекта.РежимСоздания;
+ ЗаписьВыгрузки.Вставить("Режим", ЗначениеСтроки);
+
+ ЗначениеСтроки = ОписательОбъекта.Значение;
+ ЗаписьВыгрузки.Вставить("Значение", ЗначениеСтроки);
+
+ ДанныеДляВыгрузки.Вставить(ДанныеДляВыгрузки.Количество(), ЗаписьВыгрузки);
+
+КонецПроцедуры
+
+Функция ОбработатьВыгрузкуРеквизитаОбъекта(ДанныеДляВыгрузки, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, ШапкаДанных)
+
+ имяРеквизита = РеквизитМд.Имя;
+ ЕстьТипы = Ложь;
+ Попытка
+ Тип = РеквизитМд.Тип.Типы();
+ ЕстьТипы = Истина;
+ Исключение
+ КонецПопытки;
+
+ Если ЕстьТипы И НЕ ЗначениеЗаполнено(ЗначениеРеквизита) И РеквизитМд.Тип.Типы().Количество() = 1 Тогда
+ Возврат Ложь;
+ КонецЕсли;
+ ТипРеквизита = ТипЗнч(ЗначениеРеквизита);
+ Если ТипРеквизита = ТипЗнч(Неопределено) Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ ПредставлениеЗначенияРеквизита = "";
+ РежимПоиска = "";
+ ДополнительныйТипЗначения = "";
+ Попытка
+ ПолучитьПредставлениеИРежимПоискаПоЗначениюРеквизита(Объект, ЗначениеРеквизита, ТипРеквизита, МассивДанных, ПредставлениеЗначенияРеквизита, РежимПоиска, ДополнительныйТипЗначения);
+ Исключение
+ описаниеОшибки = ОписаниеОшибки();
+ ТекстСообщения = ПолучитьТекстСообщенияПользователю("%1 Не умею обрабатывать реквизит <%2> у объекта <%3>");
+ ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",описаниеОшибки);
+ ТекстСообщения = СтрЗаменить(ТекстСообщения,"%2",имяРеквизита);
+ ТекстСообщения = СтрЗаменить(ТекстСообщения,"%3",Мд.ПолноеИмя());
+ ВызватьИсключение ТекстСообщения;
+ КонецПопытки;
+
+ Если ЕстьТипы И РеквизитМд.Тип.Типы().Количество() = 1 Тогда
+ ДополнительныйТипЗначения = "";
+ КонецЕсли;
+
+ ЗаписьВыгрузки = Новый Структура;
+
+ ДобавитьПростойРеквизитВВыгрузку(ЗаписьВыгрузки, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита);
+
+ Если ЗначениеЗаполнено(РежимПоиска) Тогда
+ ЗаписьВыгрузки.Вставить("Режим", РежимПоиска);
+ КонецЕсли;
+
+ Если ЗначениеЗаполнено(ДополнительныйТипЗначения) Тогда
+ ЗаписьВыгрузки.Вставить("ДополнительныйТипЗначения", ДополнительныйТипЗначения);
+ КонецЕсли;
+
+ ДанныеДляВыгрузки.Вставить(ДанныеДляВыгрузки.Количество(), ЗаписьВыгрузки);
+
+ Возврат Истина;
+
+КонецФункции
+
+Процедура ДобавитьПростойРеквизитВВыгрузку(ДанныеДляВыгрузки, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита)
+
+ Если ТипЗнч(ДанныеДляВыгрузки) = Тип("Массив") Тогда
+
+ Структура = Новый Структура;
+ Структура.Вставить("Реквизит", ИмяРеквизита);
+ Структура.Вставить("Значение", ПредставлениеЗначенияРеквизита);
+
+ ДанныеДляВыгрузки.Добавить(Структура);
+
+ Иначе
+
+ ДанныеДляВыгрузки.Вставить("Реквизит", ИмяРеквизита);
+ ДанныеДляВыгрузки.Вставить("Значение", ПредставлениеЗначенияРеквизита);
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, МдРеквизиты, ВыгружаемыеРеквизиты, КорневойТипКонфигурации = "")
+
+ ЭтоСсылочныйОбъект = ЭтоОписательОбъектаСсылки(ОписательОбъекта);
+ Если ЭтоСсылочныйОбъект Тогда
+ Мд = Объект.Метаданные();
+ Иначе
+ Мд = Объект;
+ КонецЕсли;
+
+ Для каждого РеквизитМд Из МдРеквизиты Цикл
+ имяРеквизита = РеквизитМд.Имя;
+ Если ВыгружаемыеРеквизиты <> Неопределено и ВыгружаемыеРеквизиты.Найти(имяРеквизита) = Неопределено Тогда
+ Продолжить;
+ КонецЕсли;
+
+ БылДобавленСчетДляЗаписиРегистраБухгалтерии = Ложь;
+
+ Если ЭтоСсылочныйОбъект Тогда
+ ЗначениеРеквизита = объект[имяРеквизита];
+
+ этоЗначениеБудетСозданоПоУмолчанию = лПустойОбъект[имяРеквизита] = ЗначениеРеквизита;
+ Если этоЗначениеБудетСозданоПоУмолчанию Тогда
+ Продолжить;
+ КонецЕсли;
+ Иначе
+ Если КорневойТипКонфигурации = "РегистрБухгалтерии" Тогда
+ Если Лев(ИмяРеквизита, СтрДлина("Счет")) = "Счет" Тогда
+ БылДобавленСчетДляЗаписиРегистраБухгалтерии = Истина;
+ ИмяРеквизитаСчет = имяРеквизита;
+ ИначеЕсли НЕ РеквизитМд.Балансовый Тогда
+ Суффиксы = Новый Массив;
+ Суффиксы.Добавить("Дт");
+ Суффиксы.Добавить("Кт");
+ Для Каждого Суффикс Из Суффиксы Цикл
+ ЗначениеРеквизита = ОписательОбъекта.Реквизиты[имяРеквизита + Суффикс];
+ ИмитаторРеквизитаМд = Новый Структура("Имя, Тип", имяРеквизита + Суффикс, РеквизитМд.Тип);
+ ДобавилиРеквизит = ДобавитьРеквизитОбъектаВВыгрузку(ДанныеДляВыгрузки, МассивДанных, Объект, ИмитаторРеквизитаМд, ЗначениеРеквизита, Мд, ШапкаДанных);
+ КонецЦикла;
+ Продолжить;
+ КонецЕсли;
+ КонецЕсли;
+ ЗначениеРеквизита = ОписательОбъекта.Реквизиты[имяРеквизита];
+ КонецЕсли;
+
+ ДобавилиРеквизит = ДобавитьРеквизитОбъектаВВыгрузку(ДанныеДляВыгрузки, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, ШапкаДанных);
+
+ Если БылДобавленСчетДляЗаписиРегистраБухгалтерии Тогда
+ // при отсутствии видов субконто их не обрабатываем
+ Если НЕ ОписательОбъекта.Реквизиты[ИмяРеквизитаСчет].Метаданные().ВидыСубконто = Неопределено Тогда
+ Для Каждого ОписаниеВидаСубконто Из ОписательОбъекта.Реквизиты[ИмяРеквизитаСчет].ВидыСубконто Цикл
+ ВидСубконто = ОписаниеВидаСубконто.ВидСубконто;
+ НаименованиеРеквизитаСубконто = РеквизитМд.Субконто.НаименованиеРеквизитаСубконто;
+ ЗначениеРеквизита = ОписательОбъекта.Реквизиты[НаименованиеРеквизитаСубконто][ВидСубконто];
+ Если ЗначениеРеквизита = Неопределено Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ИмитаторРеквизитаМд = Новый Структура("Имя, Тип", НаименованиеРеквизитаСубконто + ОписаниеВидаСубконто.НомерСтроки, ВидСубконто.ТипЗначения);
+
+ ДобавилиРеквизит = ДобавитьРеквизитОбъектаВВыгрузку(ДанныеДляВыгрузки, МассивДанных, Объект, ИмитаторРеквизитаМд, ЗначениеРеквизита, Мд, ШапкаДанных);
+ КонецЦикла;
+ КонецЕсли;
+ КонецЕсли;
+ КонецЦикла;
+КонецПроцедуры
+
+Функция ДобавитьРеквизитОбъектаВВыгрузку(ДанныеДляВыгрузки, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, ШапкаДанных)
+
+ ЗаписьВыгрузки = Новый Структура;
+
+ имяРеквизита = РеквизитМд.Имя;
+ ЕстьТипы = Ложь;
+ Попытка
+ Тип = РеквизитМд.Тип.Типы();
+ ЕстьТипы = Истина;
+ Исключение
+ КонецПопытки;
+
+ Если ЕстьТипы И НЕ ЗначениеЗаполнено(ЗначениеРеквизита) И РеквизитМд.Тип.Типы().Количество() = 1 Тогда
+ Возврат Ложь;
+ КонецЕсли;
+ ТипРеквизита = ТипЗнч(ЗначениеРеквизита);
+ Если ТипРеквизита = ТипЗнч(Неопределено) Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ ПредставлениеЗначенияРеквизита = "";
+ РежимПоиска = "";
+ ДополнительныйТипЗначения = "";
+ Попытка
+ ПолучитьПредставлениеИРежимПоискаПоЗначениюРеквизита(Объект, ЗначениеРеквизита, ТипРеквизита, МассивДанных, ПредставлениеЗначенияРеквизита, РежимПоиска, ДополнительныйТипЗначения);
+ Исключение
+ описаниеОшибки = ОписаниеОшибки();
+ ТекстСообщения = ПолучитьТекстСообщенияПользователю("%1 Не умею обрабатывать реквизит <%2> у объекта <%3>");
+ ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",описаниеОшибки);
+ ТекстСообщения = СтрЗаменить(ТекстСообщения,"%2",имяРеквизита);
+ ТекстСообщения = СтрЗаменить(ТекстСообщения,"%3",Мд.ПолноеИмя());
+ ВызватьИсключение ТекстСообщения;
+ КонецПопытки;
+
+ Если ЕстьТипы И РеквизитМд.Тип.Типы().Количество() = 1 Тогда
+ ДополнительныйТипЗначения = "";
+ КонецЕсли;
+
+ ДобавитьПростойРеквизитВВыгрузку(ЗаписьВыгрузки, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита);
+
+ Если ЗначениеЗаполнено(РежимПоиска) Тогда
+ ЗаписьВыгрузки.Вставить("Режим", РежимПоиска);
+ КонецЕсли;
+
+ Если ЗначениеЗаполнено(ДополнительныйТипЗначения) Тогда
+ ЗаписьВыгрузки.Вставить("ДополнительныйТипЗначения", ДополнительныйТипЗначения);
+ КонецЕсли;
+
+ ДанныеДляВыгрузки.Добавить(ЗаписьВыгрузки);
+
+ Возврат Истина;
+
+КонецФункции
+
+Процедура ДобавитьТабличныеЧастиОбъектаВВыгрузку(ДанныеДляВыгрузки, МдТабличныеЧасти, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект)
+
+ Для каждого МдТч Из МдТабличныеЧасти Цикл
+ МдРеквизиты = МдТч.Реквизиты;
+ ИмяТЧ = МдТч.Имя;
+
+ НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ;
+
+ МассивСтрок = Новый Массив;
+ Для каждого строкаТчОбъекта Из объект[ИмяТЧ] Цикл
+
+ МассивКолонокСтрок = Новый Массив;
+ ДобавитьРеквизитыТабличнойЧастиОбъектаВВыгрузку(МассивКолонокСтрок, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, строкаТчОбъекта, МдРеквизиты);
+ МассивСтрок.Добавить(МассивКолонокСтрок);
+
+ КонецЦикла;
+
+ СтрокаТЧ = Новый Структура;
+ СтрокаТЧ.Вставить(ИмяТЧ, МассивСтрок);
+
+ ЗаписьТЧ = Новый Структура;
+ ЗаписьТЧ.Вставить("ТЧ", СтрокаТЧ);
+
+ ДанныеДляВыгрузки.Добавить(ЗаписьТЧ);
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ДобавитьРеквизитыТабличнойЧастиОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, строкаТчОбъекта, МдРеквизиты)
+
+ Мд = Объект.Метаданные();
+
+ Для каждого РеквизитМд Из МдРеквизиты Цикл
+ имяРеквизита = РеквизитМд.Имя;
+ ЗначениеРеквизита = строкаТчОбъекта[имяРеквизита];
+ ДобавилиРеквизит = ДобавитьРеквизитОбъектаВВыгрузку(ДанныеДляВыгрузки, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, ШапкаДанных);
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ДобавитьДопСвойстваВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект)
+
+ ДопСвойства = Новый Структура();
+ Для Каждого СтрокаТЧ Из ЭтотОбъект.ДополнительныеСвойства Цикл
+ ДопСвойства.Вставить(СтрокаТЧ.Имя, СтрокаТЧ.Значение);
+ КонецЦикла;
+
+ Если ДопСвойства.Количество() > 0 Тогда
+ ЗаписьВыгрузки = Новый Структура;
+ МассивВыгрузкиДопСвойства = Новый Массив;
+
+ ДобавитьДопСвойстваВВыгрузкуПоРежиму(МассивВыгрузкиДопСвойства, ШапкаДанных, "Режим", ДопСвойства);
+
+ СоответствиеДопСвойств = Новый Структура;
+ СоответствиеДопСвойств.Вставить("ДополнительныеСвойства", МассивВыгрузкиДопСвойства);
+ ЗаписьВыгрузки.Вставить("ТЧ", СоответствиеДопСвойств);
+
+ ДанныеДляВыгрузки.Вставить(ДанныеДляВыгрузки.Количество(), ЗаписьВыгрузки);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьДопСвойстваВВыгрузкуПоРежиму(ДанныеДляВыгрузки, ШапкаДанных, ИмяРеквизита, СтруктураДопСвойств)
+
+ Для Каждого ДопСвойство Из СтруктураДопСвойств Цикл
+ Структура = Новый Структура;
+ Структура.Вставить("Реквизит", ДопСвойство.Ключ);
+ Структура.Вставить("Значение", Строка(ДопСвойство.Значение));
+ ДанныеДляВыгрузки.Добавить(Структура);
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ДобавитьРежимыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект)
+
+ Режимы = новый Массив;
+ Если ТолькоСоздание Тогда
+ Режимы.Добавить("ТолькоСоздание");
+ КонецЕсли;
+ Если ОбменДанными Тогда
+ Режимы.Добавить("ОбменДанными");
+ КонецЕсли;
+ Мета = Объект.Метаданные();
+ Если Метаданные.Справочники.Содержит(Мета) И Объект.ЭтоГруппа Тогда
+ Режимы.Добавить("Группа");
+ КонецЕсли;
+
+ Если Режимы.Количество()>0 Тогда
+ ЗаписьВыгрузки = Новый Структура;
+ СтрокиТЧ = Новый Структура;
+ МассивЗаписейВыгрузкиДопСвойства = Новый Массив;
+ Для каждого Режим Из Режимы Цикл
+ ДобавитьПростойРеквизитВВыгрузку(МассивЗаписейВыгрузкиДопСвойства, ШапкаДанных, "Режим", Режим);
+ КонецЦикла;
+
+ СтрокиТЧ.Вставить("xddMods", МассивЗаписейВыгрузкиДопСвойства);
+ ЗаписьВыгрузки.Вставить("ТЧ", СтрокиТЧ);
+
+ ДанныеДляВыгрузки.Вставить(ДанныеДляВыгрузки.Количество(), ЗаписьВыгрузки);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ДобавитьПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных)
+
+ ДобавитьШапкуПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных);
+
+ ДобавитьРеквизитыПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных);
+ ДобавитьРолиПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных);
+
+КонецПроцедуры
+
+Процедура ДобавитьШапкуПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных)
+
+ ЗаписьВыгрузки = Новый Структура;
+
+ ДобавитьПростойРеквизитВВыгрузку(ЗаписьВыгрузки, ШапкаДанных, "", ОписательОбъекта.Значение);
+
+ ЗаписьВыгрузки.Вставить("Тип", "ПользовательИБ");
+ ЗаписьВыгрузки.Вставить("ИмяПеременной", ОписательОбъекта.ИмяПеременной);
+
+ ДанныеДляВыгрузки.Добавить(ЗаписьВыгрузки);
+
+КонецПроцедуры
+
+Процедура ДобавитьРеквизитыПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных)
+
+ параметрыПользователя = Новый Структура;
+ параметрыПользователя.Вставить("Имя", "");
+ параметрыПользователя.Вставить("ПолноеИмя", "");
+ параметрыПользователя.Вставить("АутентификацияСтандартная", Истина);
+ параметрыПользователя.Вставить("АутентификацияОС", Ложь);
+ параметрыПользователя.Вставить("ПользовательОС", "");
+ параметрыПользователя.Вставить("ОсновнойИнтерфейс", ""); //Метаданные.Интерфейсы.Администратор);
+ параметрыПользователя.Вставить("ПоказыватьВСпискеВыбора", Истина);
+ параметрыПользователя.Вставить("РежимЗапуска", РежимЗапускаКлиентскогоПриложения.Авто);
+ //параметрыПользователя.Вставить("Язык", Метаданные.Языки.Русский);
+
+ ЗаполнитьЗначенияСвойств(параметрыПользователя, ОписательОбъекта.ПользовательИБ);
+ // преобразуем к притивному типу т.к. мутабельные типы проблемно конвертировать в JSON
+ параметрыПользователя.ОсновнойИнтерфейс = Строка(параметрыПользователя.ОсновнойИнтерфейс);
+ параметрыПользователя.РежимЗапуска = Строка(параметрыПользователя.РежимЗапуска);
+
+ параметрыПользователя.Вставить("Пароль", "");
+
+ МассивЗаписей = Новый Массив;
+ Для Каждого КлючЗначение Из параметрыПользователя Цикл
+ ДобавитьПростойРеквизитВВыгрузку(МассивЗаписей, ШапкаДанных, КлючЗначение.Ключ, КлючЗначение.Значение);
+ КонецЦикла;
+
+ ДанныеДляВыгрузки.Добавить(МассивЗаписей);
+
+КонецПроцедуры
+
+Процедура ДобавитьРолиПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных)
+
+ МассивРолей = Новый Массив;
+ Роли = ОписательОбъекта.ПользовательИБ.Роли;
+ Для Каждого Роль Из Роли Цикл
+ ДобавитьПростойРеквизитВВыгрузку(МассивРолей, ШапкаДанных, "Роль", Роль.Имя);
+ КонецЦикла;
+
+ ЗаписьРоли = Новый Структура;
+ ЗаписьРоли.Вставить("Роли", МассивРолей);
+
+ ДанныеДляВыгрузки.Добавить(ЗаписьРоли);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ИнициализацияПеременных
+
+ВариантВстроенногоЯзыкаАнглийский = ( Metadata.ScriptVariant = Metadata.ObjectProperties.ScriptVariant.English );
+
+мНаличиеВыгрузкиПодчиненныхОбъектов = Ложь;
+мТипРезультатЗапроса = Тип("РезультатЗапроса");
+мСоответствиеКолонокДвижений = Новый Соответствие;
+
+ЗаполнитьСоответствие();
+
+#КонецОбласти
diff --git "a/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml"
index ac230e1dc1..b0ceec0864 100644
--- "a/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml"
+++ "b/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml"
@@ -41,6 +41,11 @@
+
@@ -69,666 +74,746 @@
Group settings
- Horizontal
+ Vertical
None
false
-
-
-
- ru
- Группа страницы
-
-
- en
- Group page
-
-
-
-
- ru
- Группа страницы
-
-
- en
- Group page
-
-
-
+
+ AlwaysHorizontal
+ None
+ false
+
-
+
ru
- Метаданные
+ Группа страницы
en
- Metadata
+ Group page
ru
- Группа метаданные
+ Группа страницы
en
- Group metadata
+ Group page
- true
-
+
-
+
+
+
+ ru
+ Метаданные
+
+
+ en
+ Metadata
+
+
+
+
+ ru
+ Группа метаданные
+
+
+ en
+ Group metadata
+
+
true
- Horizontal
- None
- false
-
+
-
- Объект.ВыгружатьКод
- Auto
-
-
-
-
- Объект.ВыгружатьСсылку
- Auto
-
-
-
-
- Объект.СвязьПоГуид
- Auto
-
-
-
-
- Объект.ТолькоСоздание
- Auto
-
-
-
-
- Объект.ОбменДанными
- Auto
-
-
-
-
- Объект.ВариантВстроенногоЯзыкаАнглийский
-
-
- ru
- Язык программирования английский
-
-
- en
- Script variant English
-
-
- Auto
-
-
-
-
- Объект.УровеньВыгрузки
-
-
- ru
- Если значение = 0, то ограничений нет и выгружаются элементы с признаком "При необходимости"
+
+ true
+ Horizontal
+ None
+ false
+
+
+
+ Объект.ВыгружатьКод
+ Auto
+
+
+
+
+ Объект.ВыгружатьСсылку
+ Auto
+
+
+
+
+ Объект.СвязьПоГуид
+ Auto
+
+
+
+
+ Объект.ТолькоСоздание
+ Auto
+
+
+
+
+ Объект.ОбменДанными
+ Auto
+
+
+
+
+ Объект.ВариантВстроенногоЯзыкаАнглийский
+
+
+ ru
+ Язык программирования английский
+
+
+ en
+ Script variant English
+
+
+ Auto
+
+
+
+
+ Объект.УровеньВыгрузки
+
+
+ ru
+ Если значение = 0, то ограничений нет и выгружаются элементы с признаком "При необходимости"
`Значение = 1` выгружаем вообще без подчиненных, только явно заданные
Если значение > 1, то выгружаем подчиненные элементы этого или меньшего уровня зависимости
-
-
- en
- If value = 0, then there are no restrictions and unloaded the items with the sign "If necessary"
+
+
+ en
+ If value = 0, then there are no restrictions and unloaded the items with the sign "If necessary"
`Value = 1` paged even without subordinates, only explicit
If value is > 1, then paged sub-elements of this level or lower according to
-
-
- true
-
-
-
- УровеньВыгрузкиПриИзменении
-
-
+
+
+ true
+
+
+
+ УровеньВыгрузкиПриИзменении
+
+
+
+
+
+ true
+ Horizontal
+ None
+ false
+
+
+
+ Tree
+ false
+ false
+ true
+ ExpandAllLevels
+ true
+ true
+ AsFile
+ Объект.ДеревоМетаданных
+ Объект.ДеревоМетаданных.ИндексКартинки
+
+ RowsPicture.png
+ false
+
+ None
+ None
+ None
+
+
+ false
+
+
+
+
+
+
+
+ - ДеревоМетаданных
+ SearchStringRepresentation
+
+
+
+
+
+
+ - ДеревоМетаданных
+ ViewStatusRepresentation
+
+
+
+
+
+
+ - ДеревоМетаданных
+ SearchControl
+
+
+
+
+
+ ДеревоМетаданныхПриАктивизацииСтроки
+
+
+
+
+
+ ru
+ Группа выбора объектов
+
+
+ en
+ Group choose objects
+
+
+
+
+ ru
+ Группа выбора объектов
+
+
+ en
+ Group choose objects
+
+
+ InCell
+
+
+
+ Объект.ДеревоМетаданных.Выгружать
+ EnterOnInput
+ false
+ true
+
+
+
+ ДеревоМетаданныхВыгружатьПриИзменении
+
+
+
+ Объект.ДеревоМетаданных.ПолноеИмяМетаданных
+ true
+ EnterOnInput
+
+
+
+
+
+
+ Объект.ДеревоМетаданных.ВыгружатьПриНеобходимости
+ Right
+ EnterOnInput
+ true
+
+
+
+ ДеревоМетаданныхВыгружатьПриНеобходимостиПриИзменении
+
+
+
+
+
+ Tree
+ true
+ ExpandAllLevels
+ true
+ true
+ AsFile
+ Объект.КомпоновщикНастроекКомпоновкиДанных.Settings.Filter
+ None
+ None
+ None
+ All
+ false
+
+
+
+
+
+
+
+
+
+ - КомпоновщикОтбор
+ SearchStringRepresentation
+
+
+
+
+
+
+ - КомпоновщикОтбор
+ ViewStatusRepresentation
+
+
+
+
+
+
+ - КомпоновщикОтбор
+ SearchControl
+
+
+
+
+
+ КомпоновщикОтборПриОкончанииРедактирования
+ КомпоновщикОтборПослеУдаления
+
+
+
+
-
-
- true
- Horizontal
- None
- false
-
+
+
+
+
+ ru
+ Таблица данных
+
+
+ en
+ Table of data
+
+
+
+
+ ru
+ Группа таблица данных
+
+
+ en
+ Group data table
+
+
+
-
- Tree
- false
- false
+
+ List
true
- ExpandAllLevels
true
true
AsFile
- Объект.ДеревоМетаданных
- Объект.ДеревоМетаданных.ИндексКартинки
-
- RowsPicture.png
- false
-
+ Объект.ТаблицаДанных
None
None
None
-
-
- false
+
+
+
-
-
-
+
+
- - ДеревоМетаданных
+ - ТаблицаДанных
SearchStringRepresentation
-
-
+
+
-
+
- - ДеревоМетаданных
+ - ТаблицаДанных
ViewStatusRepresentation
-
-
+
+
-
+
- - ДеревоМетаданных
+ - ТаблицаДанных
SearchControl
-
-
+
+
-
- ДеревоМетаданныхПриАктивизацииСтроки
-
-
-
-
- ru
- Группа выбора объектов
-
-
- en
- Group choose objects
-
-
-
-
- ru
- Группа выбора объектов
-
-
- en
- Group choose objects
-
-
- InCell
-
-
-
- Объект.ДеревоМетаданных.Выгружать
- EnterOnInput
- false
- true
-
-
-
- ДеревоМетаданныхВыгружатьПриИзменении
-
-
-
- Объект.ДеревоМетаданных.ПолноеИмяМетаданных
- true
- EnterOnInput
-
-
-
-
-
-
- Объект.ДеревоМетаданных.ВыгружатьПриНеобходимости
- Right
+
+ EnterOnInput
+
+
+
+
+ Объект.ТаблицаДанных.Ссылка
EnterOnInput
- true
-
-
+
+
- ДеревоМетаданныхВыгружатьПриНеобходимостиПриИзменении
+ ТаблицаДанныхСсылкаПриИзменении
+
+
+ Объект.ТаблицаДанных.Метаданное
+ EnterOnInput
+
+
+
+
+ Объект.ТаблицаДанных.ИмяПеременной
+ EnterOnInput
+
+
+
+
+ Объект.ТаблицаДанных.ВыгружатьКод
+ EnterOnInput
+ Auto
+
+
+
+ Объект.ТаблицаДанных.РежимПоиска
+ EnterOnInput
+
+
+
+
+ Объект.ТаблицаДанных.РежимСоздания
+ EnterOnInput
+
+
+
-
- Tree
- true
- ExpandAllLevels
+
+
+
+
+
+ ru
+ Пользователи ИБ
+
+
+ en
+ Users of database
+
+
+
+
+ ru
+ Группа пользователи ИБ
+
+
+ en
+ Group users IB
+
+
+
+
+
+ List
+ true
true
true
AsFile
- Объект.КомпоновщикНастроекКомпоновкиДанных.Settings.Filter
+ Объект.ПользователиИБ
None
None
None
- All
- false
-
-
-
-
- CommandBarButton
- Form.Command.ПоказатьРезультатОтбора
-
-
- ru
- Показать выбранные
-
-
- en
- Show selected
-
-
-
-
-
-
-
-
+
+
+
+
+
- - КомпоновщикОтбор
+ - ПользователиИнфБазы
SearchStringRepresentation
-
-
+
+
-
+
- - КомпоновщикОтбор
+ - ПользователиИнфБазы
ViewStatusRepresentation
-
-
+
+
-
+
- - КомпоновщикОтбор
+ - ПользователиИнфБазы
SearchControl
-
-
+
+
-
- КомпоновщикОтборПриОкончанииРедактирования
- КомпоновщикОтборПослеУдаления
-
+
+
+ Объект.ПользователиИБ.LineNumber
+ EnterOnInput
+
+
+
+
+ Объект.ПользователиИБ.Имя
+ EnterOnInput
+
+
+
+
+ Объект.ПользователиИБ.ПолноеИмя
+ EnterOnInput
+
+
+
+
+ Объект.ПользователиИБ.Роли
+ EnterOnInput
+
+
+
+
+ Объект.ПользователиИБ.АутентификацияСтандартная
+ EnterOnInput
+
+
+
+
+ Объект.ПользователиИБ.АутентификацияОС
+ EnterOnInput
+
+
+
+
+ Объект.ПользователиИБ.ПользовательОС
+ EnterOnInput
+
+
+
+
-
+
-
-
+
+
+ Top
+ 4
+ true
+ true
+ true
+ AsFile
+ Объект.ДополнительныеСвойства
ru
- Таблица данных
+ Дополнительные свойства
en
- Table of data
+ Additional properties
-
-
- ru
- Группа таблица данных
-
-
- en
- Group data table
-
-
-
+ None
+ None
+ None
+
+
+
+
+
+
+ - ДополнительныеСвойства
+ SearchStringRepresentation
+
+
+
+
+
+
+ - ДополнительныеСвойства
+ ViewStatusRepresentation
+
+
+
+
+
+
+ - ДополнительныеСвойства
+ SearchControl
+
+
+
+
-
- List
- true
- true
- true
- AsFile
- Объект.ТаблицаДанных
- None
- None
- None
-
-
-
-
-
- CommandBarButton
- Form.Command.ОчиститьТаблицуДанных
-
-
-
-
-
-
-
- - ТаблицаДанных
- SearchStringRepresentation
-
-
-
-
-
-
- - ТаблицаДанных
- ViewStatusRepresentation
-
-
-
-
-
-
- - ТаблицаДанных
- SearchControl
-
-
-
-
-
-
- EnterOnInput
-
-
-
-
- Объект.ТаблицаДанных.Ссылка
- EnterOnInput
-
-
-
- ТаблицаДанныхСсылкаПриИзменении
-
-
-
- Объект.ТаблицаДанных.Метаданное
- EnterOnInput
-
-
-
-
- Объект.ТаблицаДанных.ИмяПеременной
- EnterOnInput
-
-
-
-
- Объект.ТаблицаДанных.ВыгружатьКод
- EnterOnInput
- Auto
-
-
-
-
- Объект.ТаблицаДанных.РежимПоиска
- EnterOnInput
-
-
-
-
- Объект.ТаблицаДанных.РежимСоздания
- EnterOnInput
-
-
-
-
-
+
+ Объект.ДополнительныеСвойства.LineNumber
+
+ false
+
+ EnterOnInput
+ 1
+
+
+
+
+ Объект.ДополнительныеСвойства.Имя
+ EnterOnInput
+ 14
+
+
+
+
+ Объект.ДополнительныеСвойства.Значение
+ EnterOnInput
+ 20
+
+
+
-
-
-
-
- ru
- Пользователи ИБ
-
-
- en
- Users of database
-
-
-
-
- ru
- Группа пользователи ИБ
-
-
- en
- Group users IB
-
-
-
+
+
+
+
+ None
+ false
+
+
+
+ Vertical
+ None
+ false
+
-
- List
- true
- true
- true
- AsFile
- Объект.ПользователиИБ
- None
- None
- None
-
-
-
-
-
-
- - ПользователиИнфБазы
- SearchStringRepresentation
-
-
-
-
-
-
- - ПользователиИнфБазы
- ViewStatusRepresentation
-
-
-
-
-
-
- - ПользователиИнфБазы
- SearchControl
-
-
-
-
+
+
+
+ ru
+ Группа макеты
+
+
+
+
+ ru
+ Группа макеты
+
+
+
-
- Объект.ПользователиИБ.LineNumber
- EnterOnInput
-
-
-
-
- Объект.ПользователиИБ.Имя
- EnterOnInput
-
-
-
-
- Объект.ПользователиИБ.ПолноеИмя
- EnterOnInput
-
-
-
-
- Объект.ПользователиИБ.Роли
- EnterOnInput
-
-
-
-
- Объект.ПользователиИБ.АутентификацияСтандартная
- EnterOnInput
-
-
-
-
- Объект.ПользователиИБ.АутентификацияОС
- EnterOnInput
-
-
-
-
- Объект.ПользователиИБ.ПользовательОС
- EnterOnInput
-
-
-
+
+
+
+ ru
+ XML
+
+
+
+
+ ru
+ Группа XML
+
+
+
+
+
+ Макет
+
+
+ ru
+ Макет данных
+
+
+ en
+ Data layout
+
+
+ None
+ DontShow
+ true
+ true
+ true
+ true
+ WhenActive
+
+ true
+
+
+
+
+
+
+
+
+ ru
+ JSON
+
+
+
+
+ ru
+ Группа макет JSON
+
+
+
+
+
+ МакетJSON
+ None
+
+
+
+
+
-
+
-
-
-
-
- Top
- 4
- true
- true
- true
- AsFile
- Объект.ДополнительныеСвойства
-
-
- ru
- Дополнительные свойства
-
-
- en
- Additional properties
-
-
- None
- None
- None
-
-
-
-
-
-
- - ДополнительныеСвойства
- SearchStringRepresentation
-
-
-
-
-
-
- - ДополнительныеСвойства
- ViewStatusRepresentation
-
-
-
-
-
-
- - ДополнительныеСвойства
- SearchControl
-
-
-
-
-
-
- Объект.ДополнительныеСвойства.LineNumber
-
- false
-
- EnterOnInput
- 1
-
-
-
-
- Объект.ДополнительныеСвойства.Имя
- EnterOnInput
- 14
-
-
-
-
- Объект.ДополнительныеСвойства.Значение
- EnterOnInput
- 20
-
-
-
+
-
+
-
- Макет
-
-
- ru
- Макет данных
-
-
- en
- Data layout
-
-
- None
- DontShow
- true
- true
- true
- true
- WhenActive
-
- true
-
-
-
@@ -893,6 +978,17 @@ If value is > 1, then paged sub-elements of this level or lower according to<
+
+
+
+ ru
+ Макет JSON
+
+
+
+ d5p1:TextDocument
+
+
@@ -1187,5 +1283,20 @@ If value is > 1, then paged sub-elements of this level or lower according to<
ДополнительныеСвойства
DontUse
+
+
+
+ ru
+ Конвертировать макет
+
+
+
+
+ ru
+ Конвертировать макет
+
+
+ КонвертироватьМакет
+
\ No newline at end of file
diff --git "a/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
index 5b7a935fff..f8d8320efb 100644
--- "a/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
+++ "b/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\243\320\277\321\200\320\260\320\262\320\273\321\217\320\265\320\274\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
@@ -76,6 +76,7 @@
&НаКлиенте
Процедура СоздатьМакетДанных(Команда)
+
ПанельИсточников = Элементы.ГруппаСтраницы;
Если ПанельИсточников.ТекущаяСтраница = ПанельИсточников.ПодчиненныеЭлементы.ГруппаМетаданные Тогда
КоманднаяПанель1СоздатьМакетДанныхПоМетаданным();
@@ -84,6 +85,7 @@
ИначеЕсли ПанельИсточников.ТекущаяСтраница = ПанельИсточников.ПодчиненныеЭлементы.ГруппаПользователиИБ Тогда
КоманднаяПанель1СоздатьМакетДанныхДляПользователейИБ();
КонецЕсли;
+
КонецПроцедуры
&НаКлиенте
@@ -116,7 +118,11 @@
&НаКлиенте
Процедура ПротестироватьЗагрузкуМакета(Команда)
- ПроверитьЗагрузкуМакетаСервер(Макет);
+
+ МакетДляЗаполнения = ПолучитьМакетЗаполнения();
+
+ ПроверитьЗагрузкуМакетаСервер(МакетДляЗаполнения);
+
КонецПроцедуры
&НаКлиенте
@@ -137,6 +143,11 @@
Объект.ТаблицаДанных.Очистить();
КонецПроцедуры
+&НаКлиенте
+Процедура КонвертироватьМакет(Команда)
+ КонвертироватьМакетНаСервере();
+КонецПроцедуры
+
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
@@ -153,7 +164,15 @@
&НаСервере
Функция СоздатьМакетДанныхПоТаблицеДанныхСервер()
- Возврат Объект().СоздатьМакетДанныхПоТаблицеДанных(Макет);
+
+ МакетДляЗаполнения = ПолучитьМакетЗаполнения();
+
+ НовыйМакет = Объект().СоздатьМакетДанныхПоТаблицеДанных(МакетДляЗаполнения);
+
+ ЗаполнитьМакетНовымиДанными(НовыйМакет);
+
+ Возврат НовыйМакет;
+
КонецФункции
&НаСервере
@@ -161,23 +180,82 @@
ОбъектНаСервере = Объект();
ЗаполнитьДеревоМетаданныхНаСервере(ОбъектНаСервере);
- НовыйМакет = ОбъектНаСервере.СоздатьМакетДанныхПоМетаданным(Макет);
+
+ МакетДляЗаполнения = ПолучитьМакетЗаполнения();
+
+ НовыйМакет = ОбъектНаСервере.СоздатьМакетДанныхПоМетаданным(МакетДляЗаполнения);
+
+ ЗаполнитьМакетНовымиДанными(НовыйМакет);
+
ЗначениеВРеквизитФормы(ОбъектНаСервере.ДеревоМетаданных, "Объект.ДеревоМетаданных");
Возврат НовыйМакет;
КонецФункции
+&НаСервере
Функция СоздатьМакетДанныхПоПользователямИБСервер(МассивИменПользователей)
- Возврат Объект().СоздатьМакетДанныхПоПользователямИБ(Макет, МассивИменПользователей);
+
+ МакетДляЗаполнения = ПолучитьМакетЗаполнения();
+
+ НовыйМакет = Объект().СоздатьМакетДанныхПоПользователямИБ(МакетДляЗаполнения, МассивИменПользователей);
+
+ ЗаполнитьМакетНовымиДанными(НовыйМакет);
+
+ Возврат НовыйМакет;
+
+КонецФункции
+
+&НаСервере
+Процедура ПроверитьЗагрузкуМакетаСервер(Макет)
+
+ Объект().ПроверитьЗагрузкуМакета(Макет);
+
+КонецПроцедуры
+
+&НаСервере
+Функция ОбработкаМакетаJSON()
+
+ Возврат Элементы.ГруппаМакеты.ТекущаяСтраница.Имя = "ГруппаМакетJSON";
+
КонецФункции
&НаСервере
-Процедура ПроверитьЗагрузкуМакетаСервер(ТабличныйДокумент)
- Объект().ПроверитьЗагрузкуМакета(ТабличныйДокумент);
+Функция ПолучитьМакетЗаполнения()
+
+ Если ОбработкаМакетаJSON() Тогда
+ МакетДляЗаполнения = МакетJSON;
+ Иначе
+ МакетДляЗаполнения = Макет;
+ КонецЕсли;
+
+ Возврат МакетДляЗаполнения;
+
+КонецФункции
+
+&НаСервере
+Процедура ЗаполнитьМакетНовымиДанными(НовыйМакет)
+
+ Если ОбработкаМакетаJSON() Тогда
+ МакетJSON = НовыйМакет;
+ Иначе
+ Макет = НовыйМакет;
+ КонецЕсли;
+
КонецПроцедуры
+&НаСервере
+Процедура КонвертироватьМакетНаСервере()
+
+ МакетДляЗаполнения = ПолучитьМакетЗаполнения();
+ НовыйМакет = Объект().КонвертироватьМакет(МакетДляЗаполнения);
+ Если ОбработкаМакетаJSON() Тогда
+ Макет= НовыйМакет;
+ Иначе
+ МакетJSON = НовыйМакет;
+ КонецЕсли;
+КонецПроцедуры
&НаСервере
@@ -301,7 +379,8 @@
УстановитьПометкиПодчиненных(ТекущиеДанные, "Выгружать");
УстановитьПометкиРодителей(ТекущиеДанные, "Выгружать");
- УровеньВыгрузкиПриИзменении(Элемент);
+ УровеньВыгрузкиПриИзменении(Элемент);
+
КонецПроцедуры
&НаКлиенте
@@ -553,4 +632,4 @@
Отказ = (Вопрос("Вы действительно хотите закрыть обработку?", РежимДиалогаВопрос.ДаНет,,,"Подтвердите выход") = КодВозвратаДиалога.Нет);
КонецЕсли;
-КонецПроцедуры
\ No newline at end of file
+КонецПроцедуры
diff --git "a/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" "b/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin"
index 1bb3277ed2..61b991c909 100644
Binary files "a/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" and "b/plugins/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" differ