From d192f71e8b251e99e00dacff2cfdbe2b8efc2cdd Mon Sep 17 00:00:00 2001 From: "pavel.makarov" Date: Thu, 14 Nov 2024 14:11:51 +0700 Subject: [PATCH 1/2] =?UTF-8?q?#2226=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20?= =?UTF-8?q?=D1=88=D0=B0=D0=B3=D0=BE=D0=B2=20=D1=84=D0=B8=D0=BA=D1=81=D1=82?= =?UTF-8?q?=D1=83=D1=80=20=D1=81=20json=20=D0=BC=D0=B0=D0=BA=D0=B5=D1=82?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...2\320\265\321\202\320\276\320\262JSON.xml" | 114 + ...0\244\320\276\321\200\320\274\320\260.xml" | 102 + .../Ext/Form.xml" | 12 + .../Ext/Form/Module.bsl" | 76 + ...0\274\320\265\320\275\321\202\321\213.xml" | 16 + .../Ext/Template.txt" | 403 +++ ...0\263\320\265\320\275\321\202\321\213.xml" | 16 + .../Ext/Template.txt" | 71 + ...0\264\320\265\320\275\320\270\320\271.xml" | 16 + .../Ext/Template.txt" | 197 ++ ...1\207\320\275\320\270\320\272\320\270.xml" | 16 + .../Ext/Template.txt" | 315 ++ .../filename" | 1 + ...0\265\321\202\320\276\320\262JSON.feature" | 81 + .../Ext/ObjectModule.bsl" | 3067 ++++++++++------- .../Ext/Form.xml" | 1213 ++++--- .../Ext/Form/Module.bsl" | 77 +- .../Ext/Form.bin" | Bin 155744 -> 160088 bytes 18 files changed, 4040 insertions(+), 1753 deletions(-) create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" create mode 100644 "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" 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 @@ + + +
+ + Форма + + + ru + Форма + + + en + Form + + + am + ቅጽ + + + az + Forması + + + bg + Форма + + + et + Vorm + + + fr + La forme + + + ka + ფორმა + + + de + Form + + + hu + Formában + + + it + La forma + + + lv + Forma + + + lt + Forma + + + mn + Маягт + + + pl + Kształt + + + ro + Forma + + + sl + Obrazec + + + es + La forma de + + + sv + Form + + + tr + Formu + + + vi + Biểu mẫu + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ 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 @@ + +
+ + + + + cfg:ExternalDataProcessorObject.ЗагрузкаМакетовJSON + + true + + + \ 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 @@ + + + + \ 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 @@ + + + + \ 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 @@ + + + + \ 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 @@ + + + + \ 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..bb4ad838b6 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" @@ -126,6 +126,55 @@ Возврат СоздатьДанныеПоТабличномуДокументу(МассивМакетов); КонецФункции +Функция СоздатьДанныеПоТекстовомуДокументу(ТабличныйДокументИлиМассивТабличныхДокументов, РежимыЗагрузкиИлиИмяКолонкиЗамещения = Неопределено, ИмяКолонкиЗамещения = Неопределено) Экспорт + + Перем РежимыЗагрузки; + + СоздатьСтруктурумТЗКэшОбъектов(); + + Если ТипЗнч(РежимыЗагрузкиИлиИмяКолонкиЗамещения) = Тип("Строка") Тогда + ИмяКолонкиЗамещения = РежимыЗагрузкиИлиИмяКолонкиЗамещения; + Иначе + РежимыЗагрузки = РежимыЗагрузкиИлиИмяКолонкиЗамещения; + Если РежимыЗагрузки <> Неопределено Тогда + ТипПараметра = ТипЗнч(РежимыЗагрузки); + Если ТипПараметра <> Тип("Структура") Тогда + ТекстСообщения = ПолучитьТекстСообщенияПользователю("Ожидали, что вторым параметром будет передана структура параметров для метода <СоздатьДанныеПоТабличномуДокументу>, а получили другой объект с типом <%1>"); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",ТипПараметра); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + МассивТабличныхДокументов = Новый Массив(); + Если ТипЗнч(ТабличныйДокументИлиМассивТабличныхДокументов) = Тип("ТекстовыйДокумент") Тогда + МассивТабличныхДокументов.Добавить(ТабличныйДокументИлиМассивТабличныхДокументов); + ИначеЕсли ТипЗнч(ТабличныйДокументИлиМассивТабличныхДокументов) = Тип("Массив") Тогда + МассивТабличныхДокументов = ТабличныйДокументИлиМассивТабличныхДокументов; + КонецЕсли; + + Данные = СоздатьДанныеИзМакетов(МассивТабличныхДокументов, РежимыЗагрузки, ИмяКолонкиЗамещения); + + ЗначениеСоответствияРегистрСведений = ВернутьЗначениеСоответствия("РегистрСведенийНаборЗаписей"); + ЗначениеСоответствияРегистрНакопления = ВернутьЗначениеСоответствия("РегистрНакопленияНаборЗаписей"); + ЗначениеСоответствияРегистрБухгалтерии = ВернутьЗначениеСоответствия("РегистрБухгалтерииНаборЗаписей"); + ЗначениеСоответствияРегистрРасчета = ВернутьЗначениеСоответствия("РегистрРасчетаНаборЗаписей"); + + Для каждого Элем Из Данные Цикл + Стр = Строка(Элем.Значение); + Если Найти(Стр, ЗначениеСоответствияРегистрСведений) > 0 Тогда + ИмяРегистра = Сред(Стр, СтрДлина(ЗначениеСоответствияРегистрСведений) + 2); + Данные[Элем.Ключ] = ПолучитьКлючиЗаписиРСПоНаборуЗаписейРС(Элем.Значение, ИмяРегистра); + ИначеЕсли Найти(Стр, ЗначениеСоответствияРегистрНакопления) > 0 Тогда + ИмяРегистра = Сред(Стр, СтрДлина(ЗначениеСоответствияРегистрНакопления) + 2); + Данные[Элем.Ключ] = ПолучитьКлючиЗаписиРСПоНаборуЗаписейРН(Элем.Значение, ИмяРегистра); + КонецЕсли; + КонецЦикла; + + Возврат Данные; + +КонецФункции + Функция СоздатьДанныеПоТабличномуДокументу(ТабличныйДокументИлиМассивТабличныхДокументов, РежимыЗагрузкиИлиИмяКолонкиЗамещения = Неопределено, ИмяКолонкиЗамещения = Неопределено) Экспорт Перем РежимыЗагрузки; @@ -149,6 +198,8 @@ МассивТабличныхДокументов = Новый Массив(); Если ТипЗнч(ТабличныйДокументИлиМассивТабличныхДокументов) = Тип("ТабличныйДокумент") Тогда МассивТабличныхДокументов.Добавить(ТабличныйДокументИлиМассивТабличныхДокументов); + ИначеЕсли ТипЗнч(ТабличныйДокументИлиМассивТабличныхДокументов) = Тип("ТекстовыйДокумент") Тогда + МассивТабличныхДокументов.Добавить(ТабличныйДокументИлиМассивТабличныхДокументов); ИначеЕсли ТипЗнч(ТабличныйДокументИлиМассивТабличныхДокументов) = Тип("Массив") Тогда МассивТабличныхДокументов = ТабличныйДокументИлиМассивТабличныхДокументов; КонецЕсли; @@ -279,13 +330,137 @@ Функция СоздатьДанныеИзМакетов(МассивТабличныхДокументов, РежимыЗагрузки, ИмяКолонкиЗамещения) ПротоДанные = Новый Структура; Для каждого ТабличныйДокумент Из МассивТабличныхДокументов Цикл - ПрочитатьДанныеИзМакета(ПротоДанные,ТабличныйДокумент,ИмяКолонкиЗамещения); + Если ТипЗнч(ТабличныйДокумент) = Тип("ТабличныйДокумент") Тогда + ПрочитатьДанныеИзМакета(ПротоДанные,ТабличныйДокумент,ИмяКолонкиЗамещения); + ИначеЕсли ТипЗнч(ТабличныйДокумент) = Тип("ТекстовыйДокумент") Тогда + ПрочитатьДанныеИзТекстовогоДокумента(ПротоДанные,ТабличныйДокумент,ИмяКолонкиЗамещения); + КонецЕсли; КонецЦикла; ЗаменитьРежимыЗагрузки(ПротоДанные, РежимыЗагрузки); Данные = СоздатьТестовыеДанныеПоПротоДанным(ПротоДанные); Возврат Данные; КонецФункции +Функция ПрочитатьДанныеИзТекстовогоДокумента(ПротоДанные,ТекстовыйДокумент,ИмяКолонкиЗамещения) + + Текст = ТекстовыйДокумент.ПолучитьТекст(); + + ЧтениеJSON = Новый ЧтениеJSON; + ЧтениеJSON.УстановитьСтроку(Текст); + JSON = ПрочитатьJSON(ЧтениеJSON); + ЧтениеJSON.Закрыть(); + + Для Каждого ОбъектJSON ИЗ JSON Цикл + + ПротоОбъект = СоздатьСтруктуруОписанияОбъекта(); + ПротоОбъект.ПоляОбъекта = СоздатьТаблицуОписанияПолей(); + ПротоДанные.Вставить(ОбъектJSON.Ключ,ПротоОбъект); + + Для Каждого СтрокаОбъекта ИЗ ОбъектJSON.Значение Цикл + Если СтрокаОбъекта.Ключ = "ПоляОбъекта" Тогда + //Поля объекта + Для Каждого РеквизитОбъекта ИЗ СтрокаОбъекта.Значение Цикл + НовоеПолеОбъекта = ПротоОбъект.ПоляОбъекта.Добавить(); + ЗаполнитьКолонкуСтрокиПротоОбъекта(НовоеПолеОбъекта, РеквизитОбъекта); + Если РеквизитОбъекта.Свойство("Ключ") И ВРег(РеквизитОбъекта.Ключ) = "КЛЮЧ" Тогда + ПротоОбъект.Ключи.Вставить(НовоеПолеОбъекта.Имя, НовоеПолеОбъекта.Значение); + КонецЕсли; + КонецЦикла; + ИначеЕсли ВРег(СтрокаОбъекта.Ключ)="РЕЖИМЫ" Тогда + Для Каждого СтрокаТЧОбъекта из СтрокаОбъекта.Значение Цикл + ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей(); + НовоеПолеТЧ = ОписаниеПолейТЧ.Добавить(); + НовоеПолеТЧ.Имя = СтрокаТЧОбъекта.Ключ; + НовоеПолеТЧ.Значение = СтрокаТЧОбъекта.Значение; + ПротоОбъект.Режимы[СтрокаТЧОбъекта.Ключ] = Истина; + КонецЦикла; + ИначеЕсли ВРег(СтрокаОбъекта.Ключ)="ДОПОЛНИТЕЛЬНЫЕСВОЙСТВА" Тогда + Для Каждого СтрокаТЧОбъекта из СтрокаОбъекта.Значение Цикл + ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей(); + НовоеПолеТЧ = ОписаниеПолейТЧ.Добавить(); + ЗаполнитьКолонкуСтрокиПротоОбъекта(НовоеПолеТЧ, СтрокаТЧОбъекта); + КонецЦикла; + ИначеЕсли ВРег(СтрокаОбъекта.Ключ) = "ЗАПИСИ" Тогда + ИмяТабЧасти = "Запись"; + ТабЧасть = Неопределено; + Если НЕ ПротоОбъект.ТабличныеЧасти.Свойство(ИмяТабЧасти,ТабЧасть) Тогда + //Новая ТабЧасть + ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей(); + ТабЧасть = Новый Массив; + ПротоОбъект.ТабличныеЧасти.Вставить(ИмяТабЧасти,ТабЧасть); + КонецЕсли; + Для Каждого ТЧОбъекта ИЗ СтрокаОбъекта.Значение Цикл + // создаем и заполняем строку ТЧ + ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей(); + ТабЧасть.Добавить(ОписаниеПолейТЧ); + // обработаем реквизиты записей + Для Каждого ЗаписьТЧОбъекта из ТЧОбъекта Цикл + НовоеПолеТЧ = ОписаниеПолейТЧ.Добавить(); + ЗаполнитьКолонкуСтрокиПротоОбъекта(НовоеПолеТЧ, ЗаписьТЧОбъекта); + КонецЦикла; + КонецЦикла; + ИначеЕсли ВРег(СтрокаОбъекта.Ключ) = "ТАБЛИЧНЫЕЧАСТИ" Тогда + Для Каждого ТЧОбъекта ИЗ СтрокаОбъекта.Значение Цикл + // вытащим имя ТЧ и её содержимое в виде массива структур + Для Каждого СтрокаТЧ ИЗ ТЧОбъекта Цикл + ИмяТабЧасти = СтрокаТЧ.Ключ; + СодержимоеТЧ = СтрокаТЧ.Значение; + КонецЦикла; + + //Табличные части + Если НЕ ПустаяСтрока(ИмяТабЧасти) Тогда + ТабЧасть = Неопределено; + Если НЕ ПротоОбъект.ТабличныеЧасти.Свойство(ИмяТабЧасти,ТабЧасть) Тогда + //Новая ТабЧасть + ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей(); + ТабЧасть = Новый Массив; + ПротоОбъект.ТабличныеЧасти.Вставить(ИмяТабЧасти,ТабЧасть); + КонецЕсли; + КонецЕсли; + + // Обмен данными + Если ВРег(ИмяТабЧасти)="ОБМЕНДАННЫМИ" Тогда + Для Каждого СтрокаТЧОбъекта из СодержимоеТЧ Цикл + НовоеПолеТЧ = ОписаниеПолейТЧ.Добавить(); + ЗаполнитьКолонкуСтрокиПротоОбъекта(НовоеПолеТЧ, СтрокаТЧОбъекта); + КонецЦикла; + Продолжить; + КонецЕсли; + + // ТЧ + Для Каждого СтрокаТЧОбъекта из СодержимоеТЧ Цикл + // создаем и заполняем строку ТЧ + ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей(); + ТабЧасть.Добавить(ОписаниеПолейТЧ); + Для Каждого КолонкаСтрокиТЧОбъекта из СтрокаТЧОбъекта Цикл + // строки ТЧ + НовоеПолеТЧ = ОписаниеПолейТЧ.Добавить(); + ЗаполнитьКолонкуСтрокиПротоОбъекта(НовоеПолеТЧ, КолонкаСтрокиТЧОбъекта); + КонецЦикла; + КонецЦикла; + КонецЦикла; + Иначе + ПротоОбъект.Вставить(СтрокаОбъекта.Ключ,СтрокаОбъекта.Значение); + Если ВРЕГ(СтрокаОбъекта.Ключ) = "РЕЖИМ" + И ЗначениеЗаполнено(СтрокаОбъекта.Значение) Тогда + ПротоОбъект.Режимы[СтрокаОбъекта.Значение] = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + +КонецФункции + +Процедура ЗаполнитьКолонкуСтрокиПротоОбъекта(Поле, СтруктураДляЗаполнения) + + Поле.Имя = СтруктураДляЗаполнения.Реквизит; + //Поле.Значение = СтруктураДляЗаполнения.Значение; + Поле.Значение = ?(СтруктураДляЗаполнения.Свойство("Значение"), СтруктураДляЗаполнения.Значение, ""); + Поле.Режим = ?(СтруктураДляЗаполнения.Свойство("Режим"), СтруктураДляЗаполнения.Режим, ""); + Поле.ДополнительныйТип = ?(СтруктураДляЗаполнения.Свойство("ДополнительныйТипЗначения"), СтруктураДляЗаполнения.ДополнительныйТипЗначения, ""); + +КонецПроцедуры + Функция ПрочитатьДанныеИзМакета(ПротоДанные,ТабличныйДокумент,ИмяКолонкиЗамещения) СтрокаМакета = 1; @@ -1553,6 +1728,19 @@ Значение = Неопределено; Режим = ВРег(стрПоле.Режим); + Попытка + Если НаборМдРеквизитов = Неопределено Тогда + Если НЕ ЗначениеЗаполнено(стрПоле.ДополнительныйТип) Тогда + ВызватьИсключение ПолучитьТекстСообщенияПользователю("Не указан дополнительный тип значения"); + КонецЕсли; + МетаданныеРеквизита = Неопределено; + Иначе + МетаданныеРеквизита = НаборМдРеквизитов[стрПоле.Имя]; + КонецЕсли; + Исключение + Возврат ""; + КонецПопытки; + Попытка Если НаборМдРеквизитов = Неопределено Тогда Если НЕ ЗначениеЗаполнено(стрПоле.ДополнительныйТип) Тогда @@ -2099,577 +2287,748 @@ // } Методы проверки таблиц метаданных //{ ОСНОВНОЙ БЛОК -Функция СоздатьМакетДляГенерацииДанных(МассивДанных) Экспорт +Функция СоздатьМакетДляГенерацииДанных(ТипЗнчМакета, МассивДанных) Экспорт + ШапкаДанных = ШапкаДанныхВМакете(); - Макет = Новый ТабличныйДокумент; - номерКолонки = 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; КонецЕсли; - КонецЕсли; - Возврат ОписательЭлемента; -КонецФункции - -Функция ЭтоПлатформа8_3_3БезРежимаСовместимости() - СистемнаяИнформация = Новый СистемнаяИнформация; + КонецЦикла; - ВерсияПриложения = СистемнаяИнформация.ВерсияПриложения; - Если СравнитьВерсии(ВерсияПриложения, "8.3.3") >= 0 Тогда - ВерсияРежимаСовместимости = СтрЗаменить(СтрЗаменить(Метаданные.РежимСовместимости, "Версия", ""), "_", "."); - Если ВРег(ВерсияРежимаСовместимости) = ВРег("НеИспользовать") Или СравнитьВерсии(ВерсияРежимаСовместимости, "8.3.3") >= 0 Тогда - Возврат Истина; - КонецЕсли; + // последнюю пустую строку убираем + Если РазбиватьНаСтроки Тогда + НомерСтроки = НомерСтроки - 1; КонецЕсли; - Возврат Ложь; - -КонецФункции +КонецПроцедуры -// Сравнить две строки версий. -// -// Параметры -// СтрокаВерсии1 - Строка - номер версии в формате РР.{П|ПП}.ЗЗ.СС -// СтрокаВерсии2 - Строка - второй сравниваемый номер версии -// -// Возвращаемое значение: -// Число - больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны. -// -Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт +Функция ВыгрузитьДанныеВМакетJSON(ДанныеДляВыгрузки) - Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0.0.0", СтрокаВерсии1); - Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0.0.0", СтрокаВерсии2); - Версия1 = РазложитьСтрокуВМассивПодстрок(Строка1, "."); - Если Версия1.Количество() > 4 Тогда - ВызватьИсключение СтрЗаменить(НСтр("ru='Неправильный формат параметра СтрокаВерсии1: %1';en='Incorrect parameter format СтрокаВерсии1: %1'"), "%1", СтрокаВерсии1); - Иначе - Для Инекс = Версия1.Количество() По 4 Цикл - Версия1.Добавить("0"); - КонецЦикла; - КонецЕсли; - Версия2 = РазложитьСтрокуВМассивПодстрок(Строка2, "."); - Если Версия2.Количество() > 4 Тогда - ВызватьИсключение СтрЗаменить(НСтр("ru='Неправильный формат параметра СтрокаВерсии2: %1';en='Incorrect parameter format СтрокаВерсии2: %1'"), "%1", СтрокаВерсии2); - Иначе - Для Инекс = Версия2.Количество() По 4 Цикл - Версия2.Добавить("0"); - КонецЦикла; - КонецЕсли; + МакетJSON = Новый ТекстовыйДокумент; - Результат = 0; - Для Разряд = 0 По 3 Цикл - Результат = Число(Версия1[Разряд]) - Число(Версия2[Разряд]); - Если Результат <> 0 Тогда - Возврат Результат; - КонецЕсли; - КонецЦикла; - Возврат Результат; + Конвертированный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Объект, СтрокаМассива); + + КонецЦикла; + + Возврат; + КонецЕсли; - ПоменялиИмя = Ложь; - Индекс = 1; - ИсходноеИмя = Имя + "_"; // для генерации нормальных имен типа Перем_1, Перем_2, Перем_3 - Пока МассивИмен.Найти(НРег(Имя)) <> Неопределено Цикл - Имя = ИсходноеИмя + Формат(Индекс, "ЧГ=; ЧН=0"); - Индекс = Индекс + 1; - ПоменялиИмя = Истина; - КонецЦикла; - Возврат Имя; -КонецФункции - -Функция ПолучитьИдентификаторПредставленияПоСсылке(Ссылка) //Экспорт - Мд = Ссылка.Метаданные(); + ЭтоШапкаОбъекта = ЗначениеОбъекта.Свойство("ИмяПеременной"); + ЭтоТЧОбъекта = ЗначениеОбъекта.Свойство("ТЧ"); - менеджерОбъекта = ПолучитьМенеджерОбъекта_ирЛкс(Мд); - КорневойТипКонфигурации = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд); + Если ЭтоШапкаОбъекта Тогда + + Для Каждого ЗначенияСтрокиОбъекта ИЗ ЗначениеОбъекта Цикл + + Если ЗначениеЗаполнено(ЗначенияСтрокиОбъекта.Значение) Тогда + + JSONОбъект.Вставить(ЗначенияСтрокиОбъекта.Ключ, ЗначенияСтрокиОбъекта.Значение); + + КонецЕсли; + + КонецЦикла; - Представление = ""; - Если КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Справочник") Тогда - Представление = Ссылка.Наименование; - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Документ") Тогда - Представление = ""+Ссылка; - //ИначеЕсли КорневойТипКонфигурации = "РегистрСведений" Тогда - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("БизнесПроцесс") Тогда - Представление = ""+Ссылка; - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Задача") Тогда - Представление = ""+Ссылка; - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланОбмена") Тогда - Представление = ""+Ссылка; - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланВидовХарактеристик") Тогда - Представление = ""+Ссылка; - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланСчетов") Тогда - Представление = ""+Ссылка; - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланВидовРасчета") Тогда - Представление = ""+Ссылка; - Иначе - ТекстСообщения = ПолучитьТекстСообщенияПользователю("ПолучитьИдентификаторПредставленияПоСсылке() : Неизвестный КорневойТипКонфигурации <%1>"); - ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",КорневойТипКонфигурации); - ВызватьИсключение ТекстСообщения; + Возврат; + КонецЕсли; - рез = ПолучитьИдентификаторИзПредставления_Лкс(Представление, "_"); - Возврат рез; -КонецФункции - -Процедура ДобавитьПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных) - ДобавитьШапкуПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных); + + Если ЭтоТЧОбъекта Тогда + + ТЧОбъекта = Новый Массив; + ЗначенияТЧОбъекта = ЗначениеОбъекта.ТЧ; + + Для Каждого СтрокаТЧОбъекта ИЗ ЗначенияТЧОбъекта Цикл + + СтруктураСтроки = Новый Структура; + + Для Каждого СтрокаЗначенияТЧОбъекта ИЗ СтрокаТЧОбъекта.Значение Цикл + + Если ТипЗнч(СтрокаТЧОбъекта.Значение) = Тип("Структура") Тогда + + ТЧОбъекта.Добавить(СтрокаЗначенияТЧОбъекта.Значение); + + Иначе + + ТЧОбъекта.Добавить(СтрокаЗначенияТЧОбъекта); + + КонецЕсли + + КонецЦикла; + + КонецЦикла; + + Если ПоложитьВJSONОбъектМассивТЧ Тогда + + JSONОбъект = ТЧОбъекта; + + Иначе + + СтруктураТЧ = Новый Структура; + СтруктураТЧ.Вставить(СтрокаТЧОбъекта.Ключ, ТЧОбъекта); + + // ТЧ складываем в массив + Если ТЧОбъекта.Количество() > 0 Тогда + JSONОбъект.Добавить(СтруктураТЧ); + КонецЕсли; + + КонецЕсли; + + Возврат; + + КонецЕсли; + + // реквизиты + РеквизитыОбъекта = Новый Структура; + Для Каждого ЗначенияСтрокиОбъекта ИЗ ЗначениеОбъекта Цикл + + // пустые пропускаем для снижения объема + Если ЗначениеЗаполнено(ЗначенияСтрокиОбъекта.Значение) Тогда + + РеквизитыОбъекта.Вставить(ЗначенияСтрокиОбъекта.Ключ, ЗначенияСтрокиОбъекта.Значение); + + КонецЕсли; - ДобавитьРеквизитыПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных); - ДобавитьРолиПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных); + КонецЦикла; + + // реквизиты складываем в массив + JSONОбъект.Добавить(РеквизитыОбъекта); + КонецПроцедуры -Процедура ДобавитьШапкуПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных) - ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, "", ОписательОбъекта.Значение); +Процедура ЗаполнитьРежимыОбъектаJSON(JSONОбъект, ЗначениеОбъекта) - НомерСтрокиМакета = Макет.ВысотаТаблицы; + СтруктураРежимы = Новый Структура; + ЗначенияТЧОбъекта = ЗначениеОбъекта.ТЧ; - НомерКолонкиМакета_Тип = ШапкаДанных.Тип; - ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Тип, НомерСтрокиМакета, НомерКолонкиМакета_Тип); - ОбластьМакета.Текст = "ПользовательИБ"; + Для Каждого СтрокаТЧОбъекта ИЗ ЗначенияТЧОбъекта Цикл + + Для Каждого СтрокаЗначенияТЧОбъекта ИЗ СтрокаТЧОбъекта.Значение Цикл + + СтруктураРежимы.Вставить(СтрокаЗначенияТЧОбъекта.Значение, Истина); + + КонецЦикла; + + КонецЦикла; + + JSONОбъект.Вставить("Режимы", СтруктураРежимы); - НомерКолонкиМакета_ИмяПеременной = ШапкаДанных.ИмяПеременной; - ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ИмяПеременной, НомерСтрокиМакета, НомерКолонкиМакета_ИмяПеременной); - ОбластьМакета.Текст = ОписательОбъекта.ИмяПеременной; КонецПроцедуры -Процедура ДобавитьРеквизитыПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных) +Функция ПреобразованиеНеПоддерживаемыхТипов(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт - параметрыПользователя = Новый Структура; - параметрыПользователя.Вставить("Имя", ""); - параметрыПользователя.Вставить("ПолноеИмя", ""); - параметрыПользователя.Вставить("АутентификацияСтандартная", Истина); - параметрыПользователя.Вставить("АутентификацияОС", Ложь); - параметрыПользователя.Вставить("ПользовательОС", ""); - параметрыПользователя.Вставить("ОсновнойИнтерфейс", ""); //Метаданные.Интерфейсы.Администратор); - параметрыПользователя.Вставить("ПоказыватьВСпискеВыбора", Истина); - параметрыПользователя.Вставить("РежимЗапуска", РежимЗапускаКлиентскогоПриложения.Авто); - //параметрыПользователя.Вставить("Язык", Метаданные.Языки.Русский); + Результат = Новый Структура; - ЗаполнитьЗначенияСвойств(параметрыПользователя, ОписательОбъекта.ПользовательИБ); + Если ТипЗнч(Значение) = Тип("ОбъектМетаданных") Тогда + + Результат.Вставить(Свойство, Строка(Значение)); + + Иначе + + Значение = ?(ЗначениеЗаполнено(Значение), Строка(Значение), ""); + Результат.Вставить(Свойство, Значение); + + КонецЕсли; - параметрыПользователя.Вставить("Пароль", ""); + Возврат Результат; - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; - Для Каждого КлючЗначение Из параметрыПользователя Цикл - ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, КлючЗначение.Ключ, КлючЗначение.Значение); - - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; - КонецЦикла; -КонецПроцедуры +КонецФункции -Процедура ДобавитьРолиПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных) - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; - НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ; - ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ТЧ, НомерСтрокиМакета, НомерКолонкиМакета_ТЧ); - ОбластьМакета.Текст = "Роли"; - - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; +//{ Пример вызова из внешнего кода: +// Путь_xUnitFor1C = "C:\Projects\GitHub\xUnitFor1C\"; +// ПутьГенератораМакета = Путь_xUnitFor1C + "ГенерацияМакетаДанных_На_БазеРеальныхДанных.epf"; +// Запрос = Новый Запрос; +// запрос.Текст = " +// |ВЫБРАТЬ +// | ""РегистрыСведений.РегистрСведений1.СоздатьНаборЗаписей().Метаданные()"" КАК __Метаданные, +// | ""ЗаписьРегистра"" КАК __Префикс, +// | РегистрСведений1.ПростойСправочник, +// | РегистрСведений1.ПростойСправочник2, +// | РегистрСведений1.РесурсЧисло, +// | РегистрСведений1.РесурсБулево +// |ИЗ +// | РегистрСведений.РегистрСведений1 КАК РегистрСведений1 +// |УПОРЯДОЧИТЬ ПО +// | ПростойСправочник2"; +// + //или Запрос.Текст = + // "ВЫБРАТЬ + // | """" КАК __Метаданные, + // | ""ПростойСправочник"" КАК __Префикс, + // | ПростойСправочник.Ссылка, + // | ПростойСправочник.Код, + // | ПростойСправочник.Наименование, + // | ПростойСправочник.РеквизитБулево, + // | ПростойСправочник.РеквизитПеречисление + // |ИЗ + // | Справочник.ПростойСправочник КАК ПростойСправочник + // |Где РеквизитБулево И ПростойСправочник.Наименование = ""Тестовое наименование"" "; +// +// РезультатЗапроса = Запрос.Выполнить(); +// +// ГенераторМакетаДанных = ВнешниеОбработки.Создать(ПутьГенератораМакета); +// Макет = ГенераторМакетаДанных.СоздатьМакетДанныхНаОснованииЗапроса(РезультатЗапроса); +// Макет.Показать(); +//} +Функция СоздатьМакетДанныхНаОснованииЗапроса(РезультатЗапроса) Экспорт + Таблица = РезультатЗапроса.Выгрузить(); - Роли = ОписательОбъекта.ПользовательИБ.Роли; - Для Каждого Роль Из Роли Цикл - ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, "Роль", Роль.Имя); - - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + МассивПропускаемыхКолонок = Новый Массив; + МассивПропускаемыхКолонок.Добавить("__Метаданные"); + МассивПропускаемыхКолонок.Добавить("__Префикс"); + СтрокаПропускаемыхКолонок = ""; + Для каждого Колонка Из МассивПропускаемыхКолонок Цикл + СтрокаПропускаемыхКолонок = СтрокаПропускаемыхКолонок + Колонка+", "; КонецЦикла; -КонецПроцедуры - -Процедура ДобавитьОбъектВМакет(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных) - Ссылка = Неопределено; - Мд = Неопределено; - ЭтоСсылочныйОбъект = ЭтоОписательОбъектаСсылки(ОписательОбъекта, Ссылка); - Если ЭтоСсылочныйОбъект Тогда - ЭтоСсылочныйОбъект = Истина; - Мд = Ссылка.Метаданные(); - ИначеЕсли ОписательОбъекта.Свойство("Метаданное", Мд) Тогда - КонецЕсли; - ДобавитьМетаданныеВМакетДляДобавляемогоОбъекта(Макет, ОписательОбъекта, ШапкаДанных, Макет.ВысотаТаблицы+1, Мд); + КоличествоСлужебныхКолонок = МассивПропускаемыхКолонок.Количество(); - менеджерОбъекта = ПолучитьМенеджерОбъекта_ирЛкс(Мд); - КорневойТипКонфигурации = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд); - Если КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Справочник") Тогда - Если ЗначениеЗаполнено(Ссылка) и Ссылка.ЭтоГруппа Тогда - Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда - лПустойОбъект = менеджерОбъекта.СоздатьГруппу(); - Иначе - лПустойОбъект = менеджерОбъекта.CreateFolder(); - КонецЕсли; - Иначе - Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда - лПустойОбъект = менеджерОбъекта.СоздатьЭлемент(); - Иначе - лПустойОбъект = менеджерОбъекта.CreateItem(); - КонецЕсли; - КонецЕсли; - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Документ") Тогда - лПустойОбъект = менеджерОбъекта.СоздатьДокумент(); - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("БизнесПроцесс") Тогда - лПустойОбъект = менеджерОбъекта.СоздатьБизнесПроцесс(); - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Задача") Тогда - лПустойОбъект = менеджерОбъекта.СоздатьЗадачу(); - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") Тогда - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрНакопления") Тогда - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланОбмена") Тогда - лПустойОбъект = менеджерОбъекта.СоздатьУзел(); - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланВидовХарактеристик") Тогда - Если ЗначениеЗаполнено(Ссылка) и Ссылка.ЭтоГруппа Тогда - Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда - лПустойОбъект = менеджерОбъекта.СоздатьГруппу(); - Иначе - лПустойОбъект = менеджерОбъекта.CreateFolder(); - КонецЕсли; - Иначе - Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда - лПустойОбъект = менеджерОбъекта.СоздатьЭлемент(); - Иначе - лПустойОбъект = менеджерОбъекта.CreateItem(); - КонецЕсли; + СтруктураДанных = Новый Структура(); + для каждого КолонкаЗапроса из Таблица.Колонки цикл + Если МассивПропускаемыхКолонок.Найти(КолонкаЗапроса.Имя) <> Неопределено Тогда + КоличествоСлужебныхКолонок = КоличествоСлужебныхКолонок - 1; + Продолжить; КонецЕсли; - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланСчетов") Тогда - лПустойОбъект = менеджерОбъекта.СоздатьСчет(); - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланВидовРасчета") Тогда - лПустойОбъект = менеджерОбъекта.СоздатьВидРасчета(); - Иначе - ТекстСообщения = ПолучитьТекстСообщенияПользователю("Неизвестный КорневойТипКонфигурации <%1>"); - ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",КорневойТипКонфигурации); + + имяКолонки = КолонкаЗапроса.имя; + СтруктураДанных.Вставить(имяКолонки); + КонецЦикла; + + Если КоличествоСлужебныхКолонок <> 0 Тогда + ТекстСообщения = ПолучитьТекстСообщенияПользователю("Не все служебные колонки заданы. В запросе обязательно должны быть колонки %1"); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",СтрокаПропускаемыхКолонок); ВызватьИсключение ТекстСообщения; КонецЕсли; - ВыгружаемыеСтандартныеРеквизиты = ВыгружаемыеСтандартныеРеквизиты(ОписательОбъекта, КорневойТипКонфигурации); - - Если ЗначениеЗаполнено(Ссылка) Тогда - объект = Ссылка.ПолучитьОбъект(); - - Если НЕ ВыгружатьСсылку И ЗначениеЗаполнено(ОписательОбъекта.ГуидСсылки) Тогда - Для каждого РеквизитМд Из Мд.СтандартныеРеквизиты Цикл - Если РеквизитМд.Имя = ВернутьЗначениеСоответствия("Ссылка") Тогда - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; - ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, РеквизитМд, ОписательОбъекта.ГуидСсылки, Мд, НомерСтрокиМакета, ШапкаДанных); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, Мд.СтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты); - ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, Мд.Реквизиты, Неопределено); + МассивДанных = Новый Массив; + + номер = 1; + индекс = 1; + Для каждого Строка из Таблица Цикл + номер = номер + 1; - ОбработатьТабличныеЧастиОбъекта(Макет, Мд.ТабличныеЧасти, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект); - ОбработатьРежимыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект); - ДобавитьДополнительныеСвойства(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект); + ИмяПеременной = Строка.__Префикс + Формат(индекс, "ЧГ=; ЧН=0"); + РеквизитыЗаписи = Новый Структура(); + Для каждого ключЗначение Из СтруктураДанных Цикл + РеквизитыЗаписи.Вставить(ключЗначение.Ключ) + КонецЦикла; + ЗаполнитьЗначенияСвойств(РеквизитыЗаписи, Строка); - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") и ТипЗнч(ОписательОбъекта.Реквизиты) = Тип("Структура") Тогда - ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.СтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты); - ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Измерения, Неопределено); - ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Ресурсы, Неопределено); - ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Реквизиты, Неопределено); + описаниеЗаписиРегистраСведений1 = СоздатьОписательЭлемента(); + описаниеЗаписиРегистраСведений1.Вставить("ИмяПеременной", ИмяПеременной); + описаниеЗаписиРегистраСведений1.Вставить("Реквизиты", РеквизитыЗаписи); - ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") - Или КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрНакопления") - Или КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда - - ЭтоРегистрБухгалтерии = КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии"); + Если ПустаяСтрока(Строка.__Метаданные) Тогда + описаниеЗаписиРегистраСведений1.Вставить(ВернутьЗначениеСоответствия("Ссылка"), Строка.Ссылка); + Иначе + Мета = Неопределено; + Выполнить("Мета = "+Строка.__Метаданные); - НаборЗаписейРегистра = ОписательОбъекта.Реквизиты; - Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл - Макет.Область(Макет.ВысотаТаблицы+1, ШапкаДанных.ТЧ).Текст = "Запись"; - ОписательОбъекта.Реквизиты = ЗаписьРегистра; - - НаборСтандартныеРеквизиты = Мд.СтандартныеРеквизиты; - Если ЭтоРегистрБухгалтерии Тогда - ДанныеСчета = Новый Структура; - Если Мд.Корреспонденция Тогда - ДанныеСчета.Вставить("СчетДт", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "СубконтоДт")); - ДанныеСчета.Вставить("СчетКт", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "СубконтоКт")); - Иначе - ДанныеСчета.Вставить("Счет", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "Субконто")); - КонецЕсли; - - НаборСтандартныеРеквизиты = Новый Массив; - для каждого МдРеквизит из Мд.СтандартныеРеквизиты Цикл - ИмяРеквизита = МдРеквизит.Имя; - Если Лев(ИмяРеквизита, СтрДлина("ВидСубконто")) = "ВидСубконто" Тогда - Продолжить; - КонецЕсли; - Если Лев(ИмяРеквизита, СтрДлина("Субконто")) = "Субконто" Тогда - Продолжить; - КонецЕсли; - НаборСтандартныеРеквизиты.Добавить(МдРеквизит); - КонецЦикла; - КонецЕсли; - - ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, НаборСтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты); - ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Измерения, Неопределено, КорневойТипКонфигурации); - ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Ресурсы, Неопределено, КорневойТипКонфигурации); - ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Реквизиты, Неопределено); - - Если ЭтоРегистрБухгалтерии Тогда - ВыгружаемыеРеквизиты = Новый Массив; - МассивИмитаторРеквизитовМд = Новый Массив; - Для каждого КлючЗначение Из ДанныеСчета Цикл - ИмяРеквизита = КлючЗначение.Ключ; - ВыгружаемыеРеквизиты.Добавить(ИмяРеквизита); - Структура = Новый Структура("Имя,Субконто", ИмяРеквизита, КлючЗначение.Значение); - МассивИмитаторРеквизитовМд.Добавить(Структура); - КонецЦикла; - - ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, МассивИмитаторРеквизитовМд, ВыгружаемыеРеквизиты, КорневойТипКонфигурации); - КонецЕсли; - КонецЦикла; + описаниеЗаписиРегистраСведений1.Вставить("Метаданное", Мета); + КонецЕсли; - Иначе - ВызватьИсключение ПолучитьТекстСообщенияПользователю("Неизвестный вариант работы - метод <ДобавитьОбъектВМакет>"); - КонецЕсли; -КонецПроцедуры + МассивДанных.Добавить(описаниеЗаписиРегистраСведений1); -Процедура ДобавитьДополнительныеСвойства(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект) - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; - - ДопСвойства = Новый Структура(); - Для Каждого СтрокаТЧ Из ЭтотОбъект.ДополнительныеСвойства Цикл - ДопСвойства.Вставить(СтрокаТЧ.Имя, СтрокаТЧ.Значение); + индекс = индекс + 1; КонецЦикла; - Если ДопСвойства.Количество() > 0 Тогда - НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ; - ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ТЧ, НомерСтрокиМакета, НомерКолонкиМакета_ТЧ); - ОбластьМакета.Текст = "ДополнительныеСвойства"; - КонецЕсли; - - ДобавитьДопСвойстваВМакет(Макет, ШапкаДанных, "Режим", ДопСвойства); -КонецПроцедуры - -Процедура ДобавитьМетаданныеВМакетДляДобавляемогоОбъекта(Макет, ОписательОбъекта, ШапкаДанных, НомерСтрокиМакета, Мд) - НомерКолонкиМакета_Тип = ШапкаДанных.Тип; - ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Тип, НомерСтрокиМакета, НомерКолонкиМакета_Тип); - ОбластьМакета.Текст = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд); - - НомерКолонкиМакета_Вид = ШапкаДанных.Вид; - ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Вид, НомерСтрокиМакета, НомерКолонкиМакета_Вид); - ОбластьМакета.Текст = Мд.Имя; - - НомерКолонкиМакета_ИмяПеременной = ШапкаДанных.ИмяПеременной; - ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ИмяПеременной, НомерСтрокиМакета, НомерКолонкиМакета_ИмяПеременной); - - ИмяПеременной = ИмяПеременнойИзОписателяОбъекта(Мд, ОписательОбъекта); - ОбластьМакета.Текст = ИмяПеременной; - НомерКолонкиМакета_Режим = ШапкаДанных.Режим; - ОбластьМакета_Режим = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Режим, НомерСтрокиМакета, НомерКолонкиМакета_Режим); - ОбластьМакета_Режим.Текст = ОписательОбъекта.РежимСоздания; + Макет = ЭтотОбъект.СоздатьМакетДляГенерацииДанных(массивДанных); - НомерКолонкиМакета_Значение = ШапкаДанных.Значение; - ОбластьМакета_Значение = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Значение, НомерСтрокиМакета, НомерКолонкиМакета_Значение); - ОбластьМакета_Значение.Текст = ОписательОбъекта.Значение; -КонецПроцедуры + Возврат Макет; +КонецФункции -Функция ВыгружаемыеСтандартныеРеквизиты(ОписательОбъекта, КорневойТипКонфигурации) - ВыгружаемыеСтандартныеРеквизиты = Новый Массив; - Если КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Справочник") Тогда +Функция СоздатьОписательЭлементаПоСсылке(Ссылка, МассивИмен, ДанныеОбъекта = Неопределено) Экспорт + ОписательЭлемента = СоздатьОписательЭлемента(); + ОписательЭлемента[ВернутьЗначениеСоответствия("Ссылка")] = Ссылка; + ОписательЭлемента.ИмяПеременной = УникальноеИмяПеременнойПоСсылке(Ссылка, МассивИмен); + МетаСсылка = Ссылка.Метаданные(); + ОписательЭлемента.Метаданное = МетаСсылка; + ОписательЭлемента.РежимПоиска = "Перем"; + ОписательЭлемента.ВыгружатьКод = ВыгружатьКод; + МенеджерОбъекта = ПолучитьМенеджерОбъекта_ирЛкс(МетаСсылка); + Если Метаданные.Справочники.Содержит(МетаСсылка) И Ссылка.ЭтоГруппа Тогда + ОписательЭлемента.РежимСоздания = "Группа"; + ИначеЕсли Метаданные.ПланыОбмена.Содержит(МетаСсылка) И Ссылка = МенеджерОбъекта.ЭтотУзел() Тогда + ОписательЭлемента.РежимСоздания = "ЭтотУзел"; + Иначе + ОписательЭлемента.РежимСоздания = ""; + КонецЕсли; + Если ДанныеОбъекта <> Неопределено Тогда + Если ДанныеОбъекта.Свойство("Предопределенный") Тогда + ЭтоПредопределенноеЗначение = ДанныеОбъекта.Предопределенный; + Иначе + ЭтоПредопределенноеЗначение = Ложь; + КонецЕсли; + Если ЭтоПредопределенноеЗначение Тогда + Если ЭтоПлатформа8_3_3БезРежимаСовместимости() Тогда + ОписательЭлемента.РежимСоздания = "Предопределенный"; + ОписательЭлемента.Значение = ДанныеОбъекта.ИмяПредопределенныхДанных; + Иначе // т.к. в 8.2 нет свойства ИмяПредопределенныхДанных, приходится использовать ГУИД + ОписательЭлемента.РежимСоздания = "СоздатьПоГуид"; + ОписательЭлемента.ГуидСсылки = Ссылка.УникальныйИдентификатор(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат ОписательЭлемента; +КонецФункции + +Функция ЭтоПлатформа8_3_3БезРежимаСовместимости() + + СистемнаяИнформация = Новый СистемнаяИнформация; + + ВерсияПриложения = СистемнаяИнформация.ВерсияПриложения; + Если СравнитьВерсии(ВерсияПриложения, "8.3.3") >= 0 Тогда + ВерсияРежимаСовместимости = СтрЗаменить(СтрЗаменить(Метаданные.РежимСовместимости, "Версия", ""), "_", "."); + Если ВРег(ВерсияРежимаСовместимости) = ВРег("НеИспользовать") Или СравнитьВерсии(ВерсияРежимаСовместимости, "8.3.3") >= 0 Тогда + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Сравнить две строки версий. +// +// Параметры +// СтрокаВерсии1 - Строка - номер версии в формате РР.{П|ПП}.ЗЗ.СС +// СтрокаВерсии2 - Строка - второй сравниваемый номер версии +// +// Возвращаемое значение: +// Число - больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны. +// +Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт + + Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0.0.0", СтрокаВерсии1); + Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0.0.0", СтрокаВерсии2); + Версия1 = РазложитьСтрокуВМассивПодстрок(Строка1, "."); + Если Версия1.Количество() > 4 Тогда + ВызватьИсключение СтрЗаменить(НСтр("ru='Неправильный формат параметра СтрокаВерсии1: %1';en='Incorrect parameter format СтрокаВерсии1: %1'"), "%1", СтрокаВерсии1); + Иначе + Для Инекс = Версия1.Количество() По 4 Цикл + Версия1.Добавить("0"); + КонецЦикла; + КонецЕсли; + Версия2 = РазложитьСтрокуВМассивПодстрок(Строка2, "."); + Если Версия2.Количество() > 4 Тогда + ВызватьИсключение СтрЗаменить(НСтр("ru='Неправильный формат параметра СтрокаВерсии2: %1';en='Incorrect parameter format СтрокаВерсии2: %1'"), "%1", СтрокаВерсии2); + Иначе + Для Инекс = Версия2.Количество() По 4 Цикл + Версия2.Добавить("0"); + КонецЦикла; + КонецЕсли; + + Результат = 0; + Для Разряд = 0 По 3 Цикл + Результат = Число(Версия1[Разряд]) - Число(Версия2[Разряд]); + Если Результат <> 0 Тогда + Возврат Результат; + КонецЕсли; + КонецЦикла; + Возврат Результат; + +КонецФункции + +Функция СоздатьОписательЭлементаПоНаборуЗаписей(НаборЗаписей, МассивИмен) Экспорт + Мд = НаборЗаписей.Метаданные(); + ОписательЭлемента = СоздатьОписательЭлемента(); + ОписательЭлемента.ИмяПеременной = ПолучитьУникальноеИмяПеременной(МассивИмен, Мд.Имя); + МассивИмен.Добавить(НРег(ОписательЭлемента.ИмяПеременной)); + + ОписательЭлемента.Реквизиты = НаборЗаписей; + ОписательЭлемента[ВернутьЗначениеСоответствия("Ссылка")] = Неопределено; + ОписательЭлемента.Метаданное = Мд; + Возврат ОписательЭлемента; +КонецФункции + +Функция СоздатьОписательЭлементаПользовательИБ(ПользовательИБ, МассивИмен, ДанныеОбъекта = Неопределено) Экспорт + ОписательЭлемента = СоздатьОписательЭлемента(); + ОписательЭлемента.ПользовательИБ = ПользовательИБ; + ОписательЭлемента.ИмяПеременной = ПолучитьИдентификаторИзПредставления_Лкс(ПользовательИБ.Имя, "_"); //УникальноеИмяПеременнойПоСсылке(ПользовательИБ, МассивИмен); + ОписательЭлемента.РежимПоиска = "Перем"; + Возврат ОписательЭлемента; +КонецФункции + +Функция ЭтоОписательПользователяИБ(ОписательОбъекта, РезПользовательИБ = Неопределено) + + ЭтоПользовательИБ = ОписательОбъекта.Свойство("ПользовательИБ", РезПользовательИБ) И РезПользовательИБ <> Неопределено; + Возврат ЭтоПользовательИБ; + +КонецФункции + +Функция СоздатьОписательЭлемента() Экспорт + ОписательЭлемента = Новый Структура; + ОписательЭлемента.Вставить(ВернутьЗначениеСоответствия("Ссылка")); + ОписательЭлемента.Вставить("ИмяПеременной", ""); + ОписательЭлемента.Вставить("Значение", Неопределено); + ОписательЭлемента.Вставить("Метаданное"); + ОписательЭлемента.Вставить("ВыгружатьКод", Ложь); + ОписательЭлемента.Вставить("РежимПоиска", ""); + ОписательЭлемента.Вставить("РежимСоздания", ""); + ОписательЭлемента.Вставить("ГуидСсылки", Неопределено); + ОписательЭлемента.Вставить("Реквизиты", Неопределено); + ОписательЭлемента.Вставить("ПользовательИБ", Неопределено); + Возврат ОписательЭлемента; +КонецФункции + +Функция УникальноеИмяПеременнойПоСсылке(Ссылка, МассивИмен) + ИмяПеременной = ПолучитьИдентификаторПредставленияПоСсылке(Ссылка); + ИмяПеременной = ПолучитьУникальноеИмяПеременной(МассивИмен, ИмяПеременной); + МассивИмен.Добавить(НРег(ИмяПеременной)); + Возврат ИмяПеременной; +КонецФункции + +Функция ПолучитьУникальноеИмяПеременной(МассивИмен, Знач Имя) + Если НЕ ЗначениеЗаполнено(МассивИмен) Тогда + Возврат Имя; + КонецЕсли; + + ПоменялиИмя = Ложь; + Индекс = 1; + ИсходноеИмя = Имя + "_"; // для генерации нормальных имен типа Перем_1, Перем_2, Перем_3 + Пока МассивИмен.Найти(НРег(Имя)) <> Неопределено Цикл + Имя = ИсходноеИмя + Формат(Индекс, "ЧГ=; ЧН=0"); + Индекс = Индекс + 1; + ПоменялиИмя = Истина; + КонецЦикла; + Возврат Имя; +КонецФункции + +Функция ПолучитьИдентификаторПредставленияПоСсылке(Ссылка) //Экспорт + Мд = Ссылка.Метаданные(); + + менеджерОбъекта = ПолучитьМенеджерОбъекта_ирЛкс(Мд); + КорневойТипКонфигурации = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд); + + Представление = ""; + Если КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Справочник") Тогда + Представление = Ссылка.Наименование; + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Документ") Тогда + Представление = ""+Ссылка; + //ИначеЕсли КорневойТипКонфигурации = "РегистрСведений" Тогда + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("БизнесПроцесс") Тогда + Представление = ""+Ссылка; + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Задача") Тогда + Представление = ""+Ссылка; + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланОбмена") Тогда + Представление = ""+Ссылка; + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланВидовХарактеристик") Тогда + Представление = ""+Ссылка; + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланСчетов") Тогда + Представление = ""+Ссылка; + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланВидовРасчета") Тогда + Представление = ""+Ссылка; + Иначе + ТекстСообщения = ПолучитьТекстСообщенияПользователю("ПолучитьИдентификаторПредставленияПоСсылке() : Неизвестный КорневойТипКонфигурации <%1>"); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",КорневойТипКонфигурации); + ВызватьИсключение ТекстСообщения; + КонецЕсли; + рез = ПолучитьИдентификаторИзПредставления_Лкс(Представление, "_"); + Возврат рез; +КонецФункции + +Процедура ДобавитьМетаданныеВМакетДляДобавляемогоОбъекта(Макет, ОписательОбъекта, ШапкаДанных, НомерСтрокиМакета, Мд) + + НомерКолонкиМакета_Тип = ШапкаДанных.Тип; + ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Тип, НомерСтрокиМакета, НомерКолонкиМакета_Тип); + ОбластьМакета.Текст = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд); + + НомерКолонкиМакета_Вид = ШапкаДанных.Вид; + ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Вид, НомерСтрокиМакета, НомерКолонкиМакета_Вид); + ОбластьМакета.Текст = Мд.Имя; + + НомерКолонкиМакета_ИмяПеременной = ШапкаДанных.ИмяПеременной; + ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ИмяПеременной, НомерСтрокиМакета, НомерКолонкиМакета_ИмяПеременной); + + ИмяПеременной = ИмяПеременнойИзОписателяОбъекта(Мд, ОписательОбъекта); + ОбластьМакета.Текст = ИмяПеременной; + + НомерКолонкиМакета_Режим = ШапкаДанных.Режим; + ОбластьМакета_Режим = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Режим, НомерСтрокиМакета, НомерКолонкиМакета_Режим); + ОбластьМакета_Режим.Текст = ОписательОбъекта.РежимСоздания; + + НомерКолонкиМакета_Значение = ШапкаДанных.Значение; + ОбластьМакета_Значение = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Значение, НомерСтрокиМакета, НомерКолонкиМакета_Значение); + ОбластьМакета_Значение.Текст = ОписательОбъекта.Значение; + +КонецПроцедуры + +Функция ВыгружаемыеСтандартныеРеквизиты(ОписательОбъекта, КорневойТипКонфигурации) + ВыгружаемыеСтандартныеРеквизиты = Новый Массив; + Если КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Справочник") Тогда ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Наименование")); ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("ПометкаУдаления")); ВыгружатьКод = Ложь; @@ -2811,234 +3170,20 @@ Возврат ВыгружаемыеСтандартныеРеквизиты; КонецФункции -Процедура ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, МдРеквизиты, ВыгружаемыеРеквизиты, КорневойТипКонфигурации = "") - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; - - ЭтоСсылочныйОбъект = ЭтоОписательОбъектаСсылки(ОписательОбъекта); - Если ЭтоСсылочныйОбъект Тогда - Мд = Объект.Метаданные(); - Иначе - Мд = Объект; - КонецЕсли; - - Для каждого РеквизитМд Из МдРеквизиты Цикл - имяРеквизита = РеквизитМд.Имя; - Если ВыгружаемыеРеквизиты <> Неопределено и ВыгружаемыеРеквизиты.Найти(имяРеквизита) = Неопределено Тогда - Продолжить; - КонецЕсли; - - БылДобавленСчетДляЗаписиРегистраБухгалтерии = Ложь; - - Если ЭтоСсылочныйОбъект Тогда - ЗначениеРеквизита = объект[имяРеквизита]; - - этоЗначениеБудетСозданоПоУмолчанию = лПустойОбъект[имяРеквизита] = ЗначениеРеквизита; - Если этоЗначениеБудетСозданоПоУмолчанию Тогда - Продолжить; - КонецЕсли; - Иначе - Если КорневойТипКонфигурации = "РегистрБухгалтерии" Тогда - Если Лев(ИмяРеквизита, СтрДлина("Счет")) = "Счет" Тогда - БылДобавленСчетДляЗаписиРегистраБухгалтерии = Истина; - ИмяРеквизитаСчет = имяРеквизита; - ИначеЕсли НЕ РеквизитМд.Балансовый Тогда - Суффиксы = Новый Массив; - Суффиксы.Добавить("Дт"); - Суффиксы.Добавить("Кт"); - Для Каждого Суффикс Из Суффиксы Цикл - ЗначениеРеквизита = ОписательОбъекта.Реквизиты[имяРеквизита + Суффикс]; - ИмитаторРеквизитаМд = Новый Структура("Имя, Тип", имяРеквизита + Суффикс, РеквизитМд.Тип); - ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, ИмитаторРеквизитаМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных); - Если ДобавилиРеквизит Тогда - НомерСтрокиМакета = НомерСтрокиМакета + 1; - КонецЕсли; - КонецЦикла; - Продолжить; - КонецЕсли; - КонецЕсли; - ЗначениеРеквизита = ОписательОбъекта.Реквизиты[имяРеквизита]; - КонецЕсли; - - ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных); - - Если ДобавилиРеквизит Тогда - НомерСтрокиМакета = НомерСтрокиМакета + 1; - КонецЕсли; - - Если БылДобавленСчетДляЗаписиРегистраБухгалтерии Тогда - Для Каждого ОписаниеВидаСубконто Из ОписательОбъекта.Реквизиты[ИмяРеквизитаСчет].ВидыСубконто Цикл - ВидСубконто = ОписаниеВидаСубконто.ВидСубконто; - НаименованиеРеквизитаСубконто = РеквизитМд.Субконто.НаименованиеРеквизитаСубконто; - ЗначениеРеквизита = ОписательОбъекта.Реквизиты[НаименованиеРеквизитаСубконто][ВидСубконто]; - Если ЗначениеРеквизита = Неопределено Тогда - Продолжить; - КонецЕсли; - - ИмитаторРеквизитаМд = Новый Структура("Имя, Тип", НаименованиеРеквизитаСубконто + ОписаниеВидаСубконто.НомерСтроки, ВидСубконто.ТипЗначения); - - ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, ИмитаторРеквизитаМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных); - - Если ДобавилиРеквизит Тогда - НомерСтрокиМакета = НомерСтрокиМакета + 1; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -Процедура ОбработатьТабличныеЧастиОбъекта(Макет, МдТабличныеЧасти, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект) - Для каждого МдТч Из МдТабличныеЧасти Цикл - МдРеквизиты = МдТч.Реквизиты; - ИмяТЧ = МдТч.Имя; - - НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ; - - Для каждого строкаТчОбъекта Из объект[ИмяТЧ] Цикл - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; - ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ТЧ, НомерСтрокиМакета, НомерКолонкиМакета_ТЧ); - ОбластьМакета.Текст = ИмяТЧ; - - ОбработатьРеквизитыТабличнойЧастиОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, строкаТчОбъекта, МдРеквизиты); - КонецЦикла; - КонецЦикла; -КонецПроцедуры - -Процедура ОбработатьРежимыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект) - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; - Режимы = новый Массив; - Если ТолькоСоздание Тогда - Режимы.Добавить("ТолькоСоздание"); - КонецЕсли; - Если ОбменДанными Тогда - Режимы.Добавить("ОбменДанными"); - КонецЕсли; - Мета = Объект.Метаданные(); - Если Метаданные.Справочники.Содержит(Мета) И Объект.ЭтоГруппа Тогда - Режимы.Добавить("Группа"); - КонецЕсли; - - Если Режимы.Количество()>0 Тогда - НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ; - ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ТЧ, НомерСтрокиМакета, НомерКолонкиМакета_ТЧ); - ОбластьМакета.Текст = "xddMods"; - - Для каждого Режим Из Режимы Цикл - ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, "Режим", Режим); - КонецЦикла; - КонецЕсли; -КонецПроцедуры - -Процедура ОбработатьРеквизитыТабличнойЧастиОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, строкаТчОбъекта, МдРеквизиты) - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; - - Мд = Объект.Метаданные(); - - Для каждого РеквизитМд Из МдРеквизиты Цикл - имяРеквизита = РеквизитМд.Имя; - - ЗначениеРеквизита = строкаТчОбъекта[имяРеквизита]; - - ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных); - - Если ДобавилиРеквизит Тогда - НомерСтрокиМакета = НомерСтрокиМакета + 1; - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -Функция ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных) - имяРеквизита = РеквизитМд.Имя; - ЕстьТипы = Ложь; - Попытка - Тип = РеквизитМд.Тип.Типы(); - ЕстьТипы = Истина; - Исключение - КонецПопытки; - - Если ЕстьТипы И НЕ ЗначениеЗаполнено(ЗначениеРеквизита) И РеквизитМд.Тип.Типы().Количество() = 1 Тогда - Возврат Ложь; - КонецЕсли; - ТипРеквизита = ТипЗнч(ЗначениеРеквизита); - Если ТипРеквизита = ТипЗнч(Неопределено) Тогда - Возврат Ложь; - КонецЕсли; - - ПредставлениеЗначенияРеквизита = ""; - РежимПоиска = ""; - ДополнительныйТипЗначения = ""; - Попытка - ПолучитьПредставлениеИРежимПоискаПоЗначениюРеквизита(Объект, ЗначениеРеквизита, ТипРеквизита, МассивДанных, ПредставлениеЗначенияРеквизита, РежимПоиска, ДополнительныйТипЗначения); - Исключение - описаниеОшибки = ОписаниеОшибки(); - ТекстСообщения = ПолучитьТекстСообщенияПользователю("%1 Не умею обрабатывать реквизит <%2> у объекта <%3>"); - ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",описаниеОшибки); - ТекстСообщения = СтрЗаменить(ТекстСообщения,"%2",имяРеквизита); - ТекстСообщения = СтрЗаменить(ТекстСообщения,"%3",Мд.ПолноеИмя()); - ВызватьИсключение ТекстСообщения; - КонецПопытки; - - Если ЕстьТипы И РеквизитМд.Тип.Типы().Количество() = 1 Тогда - ДополнительныйТипЗначения = ""; - КонецЕсли; - - ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита); - - НомерКолонкиМакета_Режим = ШапкаДанных.Режим; - ОбластьМакета_Режим = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Режим, НомерСтрокиМакета, НомерКолонкиМакета_Режим); - Если РежимПоиска <> "" Тогда - ОбластьМакета_Режим.Текст = РежимПоиска; - КонецЕсли; - - НомерКолонкиМакета_ДополнительныйТипЗначения = ШапкаДанных.ДополнительныйТипЗначения; - ОбластьМакета_ДополнительныйТипЗначения = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ДополнительныйТипЗначения, НомерСтрокиМакета, НомерКолонкиМакета_ДополнительныйТипЗначения); - ОбластьМакета_ДополнительныйТипЗначения.Текст = ДополнительныйТипЗначения; - - Возврат Истина; -КонецФункции - -Процедура ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита) - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; - - НомерКолонкиМакета_Реквизит = ШапкаДанных.Реквизит; - НомерКолонкиМакета_Значение = ШапкаДанных.Значение; - - ОбластьМакета_Реквизит = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Реквизит, НомерСтрокиМакета, НомерКолонкиМакета_Реквизит); - ОбластьМакета_Реквизит.Текст = ИмяРеквизита; - - ОбластьМакета_Значение = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Значение, НомерСтрокиМакета, НомерКолонкиМакета_Значение); - ОбластьМакета_Значение.Текст = ПредставлениеЗначенияРеквизита; - -КонецПроцедуры - -Процедура ДобавитьДопСвойстваВМакет(Макет, ШапкаДанных, ИмяРеквизита, СтруктураДопСвойств) - Для Каждого ДопСвойство Из СтруктураДопСвойств Цикл - НомерСтрокиМакета = Макет.ВысотаТаблицы+1; - - НомерКолонкиМакета_Реквизит = ШапкаДанных.Реквизит; - НомерКолонкиМакета_Значение = ШапкаДанных.Значение; - - ОбластьМакета_Реквизит = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Реквизит, НомерСтрокиМакета, НомерКолонкиМакета_Реквизит); - ОбластьМакета_Реквизит.Текст = ДопСвойство.Ключ; - - ОбластьМакета_Значение = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Значение, НомерСтрокиМакета, НомерКолонкиМакета_Значение); - ОбластьМакета_Значение.Текст = ДопСвойство.Значение; - КонецЦикла; -КонецПроцедуры - -Процедура ПолучитьПредставлениеИРежимПоискаПоЗначениюРеквизита(Объект, ЗначениеРеквизита, ТипРеквизита, МассивДанных, резПредставлениеЗначенияРеквизита, резРежимПоиска, резДополнительныйТипЗначения) - резДополнительныйТипЗначения = ""; - Если ТипРеквизита = Тип("Число") Тогда - ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "ЧГ="); - резДополнительныйТипЗначения = "Число"; - ИначеЕсли ТипРеквизита = Тип("Строка") Тогда - ПредставлениеЗначенияРеквизита = ЗначениеРеквизита; - резДополнительныйТипЗначения = "Строка"; - ИначеЕсли ТипРеквизита = Тип("Дата") Тогда - ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "ДФ=yyyyMMddЧЧммсс"); // важно ЧЧ - резДополнительныйТипЗначения = "Дата"; - ИначеЕсли ТипРеквизита = Тип("Булево") Тогда - ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "БЛ=Ложь; БИ=Истина"); - резДополнительныйТипЗначения = "Булево"; +Процедура ПолучитьПредставлениеИРежимПоискаПоЗначениюРеквизита(Объект, ЗначениеРеквизита, ТипРеквизита, МассивДанных, резПредставлениеЗначенияРеквизита, резРежимПоиска, резДополнительныйТипЗначения) + резДополнительныйТипЗначения = ""; + Если ТипРеквизита = Тип("Число") Тогда + ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "ЧГ="); + резДополнительныйТипЗначения = "Число"; + ИначеЕсли ТипРеквизита = Тип("Строка") Тогда + ПредставлениеЗначенияРеквизита = ЗначениеРеквизита; + резДополнительныйТипЗначения = "Строка"; + ИначеЕсли ТипРеквизита = Тип("Дата") Тогда + ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "ДФ=yyyyMMddЧЧммсс"); // важно ЧЧ + резДополнительныйТипЗначения = "Дата"; + ИначеЕсли ТипРеквизита = Тип("Булево") Тогда + ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "БЛ=Ложь; БИ=Истина"); + резДополнительныйТипЗначения = "Булево"; ИначеЕсли ЛиСсылкаНаОбъектБД_ирЛкс(ЗначениеРеквизита) Тогда ОписательЗначенияРеквизита = НайтиОписательОбъектаПоСсылке(МассивДанных, ЗначениеРеквизита); //МассивДанных.Найти(ЗначениеРеквизита); @@ -3162,7 +3307,7 @@ ВызватьИсключение ТекстСообщения; КонецЕсли; КонецЕсли; - резПредставлениеЗначенияРеквизита = ПредставлениеЗначенияРеквизита; + резПредставлениеЗначенияРеквизита = Строка(ПредставлениеЗначенияРеквизита); резРежимПоиска = РежимПоиска; КонецПроцедуры @@ -3599,9 +3744,7 @@ КонецЕсли; КонецПроцедуры -Функция СоздатьМакетДанныхПоТаблицеДанных(Макет) Экспорт - Макет.Очистить(); - +Функция СоздатьМакетДанныхПоТаблицеДанных(Макет) Экспорт массивДанных = Новый Массив; Для каждого строка Из ТаблицаДанных Цикл @@ -3609,35 +3752,26 @@ ЗаполнитьЗначенияСвойств(ОписательЭлемента, строка); массивДанных.Добавить(ОписательЭлемента); КонецЦикла; - НовыйМакет = СоздатьМакетДляГенерацииДанных(массивДанных); - Если ТипЗнч(НовыйМакет) = Тип("ТабличныйДокумент") Тогда - Макет.Вывести(НовыйМакет); - КонецЕсли; + НовыйМакет = СоздатьМакетДляГенерацииДанных(ТипЗнч(Макет), массивДанных); Возврат НовыйМакет; КонецФункции -Функция СоздатьМакетДанныхПоМетаданным(Макет) Экспорт - Макет.Очистить(); - +Функция СоздатьМакетДанныхПоМетаданным(Макет) Экспорт массивДанных = Новый Массив; МассивИмен = ТаблицаДанных.ВыгрузитьКолонку("ИмяПеременной"); СоздатьПоМетаданным(массивДанных); - НовыйМакет = СоздатьМакетДляГенерацииДанных(массивДанных); - Если ТипЗнч(НовыйМакет) = Тип("ТабличныйДокумент") Тогда - Макет.Вывести(НовыйМакет); - КонецЕсли; - + НовыйМакет = СоздатьМакетДляГенерацииДанных(ТипЗнч(Макет), массивДанных); + МассивИмен = Неопределено; Возврат НовыйМакет; КонецФункции Функция СоздатьМакетДанныхПоПользователямИБ(Макет, МассивИменПользователей) Экспорт - Макет.Очистить(); - + МассивПользователей = Новый Массив; МассивИмен = Новый Массив; @@ -3654,20 +3788,22 @@ МассивПользователей.Добавить(ОписательПользователяИБ); КонецЦикла; - НовыйМакет = СоздатьМакетДляГенерацииДанных(МассивПользователей); - Если ТипЗнч(НовыйМакет) = Тип("ТабличныйДокумент") Тогда - Макет.Вывести(НовыйМакет); - КонецЕсли; + НовыйМакет = СоздатьМакетДляГенерацииДанных(ТипЗнч(Макет), МассивПользователей); МассивИмен = Неопределено; Возврат НовыйМакет; КонецФункции -Процедура ПроверитьЗагрузкуМакета(ТабличныйДокумент) Экспорт +Процедура ПроверитьЗагрузкуМакета(Макет) Экспорт НачатьТранзакцию(); - ТестовыеДанные = СоздатьДанныеПоТабличномуДокументу(ТабличныйДокумент); + Если ТипЗнч(Макет) = Тип("ТабличныйДокумент") Тогда + ТестовыеДанные = СоздатьДанныеПоТабличномуДокументу(Макет); + ИначеЕсли ТипЗнч(Макет) = Тип("ТекстовыйДокумент") Тогда + ТестовыеДанные = СоздатьДанныеПоТекстовомуДокументу(Макет); + КонецЕсли; + Если ТестовыеДанные.Количество() = 0 Тогда ВызватьИсключение ПолучитьТекстСообщенияПользователю("не заполнены тестовые данные. Возможно, макет данных пуст."); КонецЕсли; @@ -5384,7 +5520,14 @@ КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Компоновщик.ПолучитьНастройки(),,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); - Запрос = Новый Запрос(МакетКомпоновки.НаборыДанных.ОсновнойЗапрос.Запрос); + Если МакетКомпоновки.НаборыДанных.Количество() = 0 Тогда + // TODO: при попытке создать компоновщик по РБ, Задаче, БД, РН набор не переносится в макет + // версия платформы 8.3.24.1342 + // разобраться и исправить + Запрос = Новый Запрос(СКД.НаборыДанных.ОсновнойЗапрос.Запрос); + Иначе + Запрос = Новый Запрос(МакетКомпоновки.НаборыДанных.ОсновнойЗапрос.Запрос); + КонецЕсли; ПараметрыЗапроса = Запрос.НайтиПараметры(); Для Каждого Параметр Из ПараметрыЗапроса Цикл ПараметрМакетаСКД = МакетКомпоновки.ЗначенияПараметров.Найти(Параметр.Имя); @@ -5621,543 +5764,1101 @@ КонецФункции -// Процедура анализирует необходимость записи объекта "по ссылке" и осуществляет запись -// -// Параметры -// АнализируемоеЗначение - анализируемое значение -// ЗаписьXML - объект, через которых происходит запись объектов ИБ -// -Процедура ЗаписатьЗначениеПриНеобходимости(АнализируемоеЗначение, ОбъектыВыгруженныеСОшибками, массивДанных) +// Процедура анализирует необходимость записи объекта "по ссылке" и осуществляет запись +// +// Параметры +// АнализируемоеЗначение - анализируемое значение +// ЗаписьXML - объект, через которых происходит запись объектов ИБ +// +Процедура ЗаписатьЗначениеПриНеобходимости(АнализируемоеЗначение, ОбъектыВыгруженныеСОшибками, массивДанных) + + Если НЕ ЗначениеЗаполнено(АнализируемоеЗначение) Тогда + Возврат; + КонецЕсли; + + ОбъектМД = СсылочныеТипы.Получить(ТипЗнч(АнализируемоеЗначение)); + + Если ОбъектМД = Неопределено Тогда + Возврат; // это не ссылка + КонецЕсли; + + Если СсылкаВыгружена(АнализируемоеЗначение) Тогда + Возврат; // объект уже был выгружен + КонецЕсли; + + КлассМДИерархический = КлассМДИерархический(ОбъектМД); // нужно для иерархических метаданных и подгрузки родителей + Если НЕ КлассМДИерархический Тогда + // Проверка того, что данный тип входит в список выгружаемых дополнительно + СтрокаТаблицы = СоставПолнойВыгрузки.Найти(ОбъектМД, "ОбъектМД"); + Если СтрокаТаблицы <> Неопределено Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + СтрокаТаблицы = СоставВспомогательнойВыгрузки.Найти(ОбъектМД, "ОбъектМД"); + Если СтрокаТаблицы <> Неопределено Тогда + + ДопЗапрос = Новый Запрос("ВЫБРАТЬ * ИЗ " + СтрокаТаблицы.СтрокаДерева.ЭлементОписания.ДляЗапроса + ОбъектМД.Имя + + " КАК ТаблицаОбъекта_" + " ГДЕ Ссылка = &Ссылка"); + ДопЗапрос.УстановитьПараметр("Ссылка", АнализируемоеЗначение); + РезультатЗапроса = ДопЗапрос.Выполнить(); + ЗапросИЗапись(РезультатЗапроса, , ОбъектыВыгруженныеСОшибками, массивДанных); + + КонецЕсли; + +КонецПроцедуры + +Функция ПолучитьМассивКолонокДвижения(ТаблицаДвижений, РегистрБухгалтерии = Ложь) + + МассивКолонок = Новый Массив(); + Для Каждого КолонкаТаблицы Из ТаблицаДвижений.Колонки Цикл + + Если КолонкаТаблицы.Имя = "МоментВремени" + ИЛИ Найти(КолонкаТаблицы.Имя, "ВидСубконтоДт") = 1 + ИЛИ Найти(КолонкаТаблицы.Имя, "ВидСубконтоКт") = 1 Тогда + + Продолжить; + + КонецЕсли; + + Если Найти(КолонкаТаблицы.Имя, "СубконтоДт") = 1 И РегистрБухгалтерии Тогда + + Если МассивКолонок.Найти("СубконтоДт") = Неопределено Тогда + МассивКолонок.Добавить("СубконтоДт"); + Конецесли; + + Продолжить; + + КонецЕсли; + + Если Найти(КолонкаТаблицы.Имя, "СубконтоКт") = 1 И РегистрБухгалтерии Тогда + + Если МассивКолонок.Найти("СубконтоКт") = Неопределено Тогда + МассивКолонок.Добавить("СубконтоКт"); + КонецЕсли; + + Продолжить; + + КонецЕсли; + + МассивКолонок.Добавить(КолонкаТаблицы.Имя); + + КонецЦикла; + + Возврат МассивКолонок; + +КонецФункции + +Процедура ВыгрузитьПодчиненныеЗначенияНабора(Движение, МассивКолонок, ОбъектыВыгруженныеСОшибками, массивДанных) + + Для Каждого ЗаписьИзНабора Из Движение Цикл + + Для Каждого Колонка Из МассивКолонок Цикл + + Если Колонка = "СубконтоДт" + ИЛИ Колонка = "СубконтоКт" Тогда + + Значение = ЗаписьИзНабора[Колонка]; + Для Каждого КлючИЗначение Из Значение Цикл + + Если ЗначениеЗаполнено(КлючИЗначение.Значение) Тогда + ЗаписатьЗначениеПриНеобходимости(КлючИЗначение.Значение, ОбъектыВыгруженныеСОшибками, массивДанных); + КонецЕсли; + + КонецЦикла; + + Иначе + + СохраненноеЗначение = ЗаписьИзНабора[Колонка]; + ЗаписатьЗначениеПриНеобходимости(СохраненноеЗначение, ОбъектыВыгруженныеСОшибками, массивДанных); + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Процедура записывает наборы записей регистра (накопления, бухгалтерии...) +// +// Параметры +// ЗаписьXML - объект, через которых происходит запись объектов ИБ +// СтрокаДереваМетаданных - строка дерева метаданных, соответствующая регистру +// +Процедура ЗаписьРегистра(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками, РегистрБухгалтерии = Ложь, массивДанных) + + ПодзаголовокОкнаИсполнения = СтрокаДереваМетаданных.ОбъектМД.ПолноеИмя(); + ОкноИсполненияОбщееКоличество = 1; + //ОкноИсполненияОбработано = 0; + + МенеджерНабораЗаписей = СтрокаДереваМетаданных.ЭлементОписания.Менеджер[СтрокаДереваМетаданных.ОбъектМД.Имя]; + + ИмяТаблицыДляЗапроса = СтрокаДереваМетаданных.ЭлементОписания.ДляЗапроса; + + ЗаписьЧерезНаборЗаписей(МенеджерНабораЗаписей, ИмяТаблицыДляЗапроса, + СтрокаДереваМетаданных.ОбъектМД.Имя, СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками, РегистрБухгалтерии, массивДанных); + +КонецПроцедуры + +// Процедура записывает данные, доступ к которым осуществляется через набор записей +// +// Параметры +// ЗаписьXML - объект, через которых происходит запись объектов ИБ +// СтрокаДереваМетаданных - строка дерева метаданных, соответствующая регистру +// +Процедура ЗаписьЧерезНаборЗаписей(МенеджерНабораЗаписей, ДляЗапроса, ИмяОбъекта, + СтрокаДереваМетаданных = Неопределено, ОбъектыВыгруженныеСОшибками, РегистрБухгалтерии = Ложь, массивДанных) + + // получить состав колонок записи регистра и проверить наличие хотя бы одной записи + Если ДляЗапроса = "РегистрБухгалтерии." Тогда + ИмяТаблицыДляЗапроса = ДляЗапроса + ИмяОбъекта + ".ДвиженияССубконто"; + Иначе + ИмяТаблицыДляЗапроса = ДляЗапроса + ИмяОбъекта; + КонецЕсли; + + Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ " + ИмяТаблицыДляЗапроса + " КАК ТаблицаОбъекта_" + ИмяОбъекта); + РезультатЗапросаПоСоставу = Запрос.Выполнить(); + Если РезультатЗапросаПоСоставу.Пустой() Тогда + Возврат; + КонецЕсли; + + ТаблицаДвижений = РезультатЗапросаПоСоставу.Выгрузить(); + МассивКолонок = ПолучитьМассивКолонокДвижения(ТаблицаДвижений, РегистрБухгалтерии); + + // выгрузка регистров осуществляется через его набор записей + НаборЗаписей = МенеджерНабораЗаписей.СоздатьНаборЗаписей(); + + СтрокаПолейОтбора = ПолучитьСтрокуПолейОтбораРегистра(МенеджерНабораЗаписей); + + СКД = ПодготовитьКомпоновщикДляВыгрузки(СтрокаДереваМетаданных, СтрокаПолейОтбора); + //ПостроительОтчета.Выполнить(); + РезультатЗапросаПоЗначениямОтбора = ПолучитьРезультатЗапросаСКД(СКД); + ВыборкаИзРезультата = РезультатЗапросаПоЗначениямОтбора.Выбрать(); + + ОкноИсполненияОбщееКоличество = ВыборкаИзРезультата.Количество(); + //ОкноИсполненияОбработано = 0; + //ОкноИсполнения.ОбновитьВерхнююГраницу(); + + КоличествоПолейОтбора = НаборЗаписей.Отбор.Количество(); + + // читаем наборы записей с различным составом отбора и записываем их + Пока ВыборкаИзРезультата.Следующий() Цикл + + // Пересоздание набора, чтоб чтоб разные экземпляры объекта в МассивДанных попали + НаборЗаписей = МенеджерНабораЗаписей.СоздатьНаборЗаписей(); + Отбор = НаборЗаписей.Отбор; + + // Отбор устанавливаем для регистров, у которых есть хотя бы один отбор (измерение) + Если КоличествоПолейОтбора <> 0 Тогда + + Для Каждого Колонка Из РезультатЗапросаПоЗначениямОтбора.Колонки Цикл + Отбор[Колонка.Имя].Значение = ВыборкаИзРезультата[Колонка.Имя]; + Отбор[Колонка.Имя].ВидСравнения = ВидСравнения.Равно; + Отбор[Колонка.Имя].Использование = Истина; + КонецЦикла; + + КонецЕсли; + + НаборЗаписей.Прочитать(); + + Если мНаличиеВыгрузкиПодчиненныхОбъектов Тогда + + // проверяем все записанные в наборе значения на необходимость записи "по ссылке" + ВыгрузитьПодчиненныеЗначенияНабора(НаборЗаписей, МассивКолонок, ОбъектыВыгруженныеСОшибками, массивДанных); + + КонецЕсли; + + ВсегоОбработаноОбъектов = ВсегоОбработанныхЗаписей(); + Попытка + + //ВыполнитьВспомогательныеДействияДляЗаписиXML(ВсегоОбработаноОбъектов, ЗаписьXML, ТолькоПроверкаНедопустимыхСимволов); + + //ЗаписатьXML(ЗаписьXML, НаборЗаписей); + + ОписательЭлемента = СоздатьОписательЭлементаПоНаборуЗаписей(НаборЗаписей, МассивИмен); + МассивДанных.Добавить(ОписательЭлемента); + //Мд = НаборЗаписей.Метаданные(); + ////Для каждого ЗаписьНабора Из НаборЗаписей Цикл + // ОписательЭлемента = СоздатьОписательЭлемента(); + // ОписательЭлемента.Реквизиты = НаборЗаписей; //ЗаписьНабора; + // ОписательЭлемента.Ссылка = Неопределено; + // ОписательЭлемента.Метаданное = Мд; + // МассивДанных.Добавить(ОписательЭлемента); + ////КонецЦикла; + + Исключение + + СтрокаОписанияОшибки = ОписаниеОшибки(); + //не смогли записать в XML + // возможно проблема с недопустимыми символами в XML + //Если ТолькоПроверкаНедопустимыхСимволов Тогда + // + // НовыйНабор = МенеджерНабораЗаписей.СоздатьНаборЗаписей(); + // + // Для Каждого СтрокаОтбора Из НаборЗаписей.Отбор Цикл + // + // СтрокаОтбораФормы = НовыйНабор.Отбор.Найти(СтрокаОтбора.Имя); + // + // Если СтрокаОтбораФормы = Неопределено Тогда + // Продолжить; + // КонецЕсли; + // + // СтрокаОтбораФормы.Использование = СтрокаОтбора.Использование; + // СтрокаОтбораФормы.ВидСравнения = СтрокаОтбора.ВидСравнения; + // СтрокаОтбораФормы.Значение = СтрокаОтбора.Значение; + // + // КонецЦикла; + // + // ОбъектыВыгруженныеСОшибками.Вставить(НовыйНабор, СтрокаОписанияОшибки); + // + //Иначе + + ТекстСообщения = ПолучитьТекстСообщенияПользователю("Ошибка при выгрузке набора записей регистра: %1"); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1","" + ДляЗапроса + ИмяОбъекта); + ТекстСообщения = ТекстСообщения + " + |" + СтрокаОписанияОшибки; + + Сообщить(ТекстСообщения); + + ВызватьИсключение ТекстСообщения; + + + + //КонецЕсли; + + КонецПопытки; + + ОбработанныхНаборовЗаписей = ОбработанныхНаборовЗаписей + 1; + //ОкноИсполненияОбработано = ОкноИсполненияОбработано + 1; + + ПоказатьПользователюИнформациюОСостоянииВыгрузки(ВсегоОбработаноОбъектов, ОбъектыВыгруженныеСОшибками); + + КонецЦикла; + +КонецПроцедуры + +Процедура ПоказатьПользователюИнформациюОСостоянииВыгрузки(ВсегоОбработаноОбъектов, ОбъектыВыгруженныеСОшибками) + + #Если Клиент Тогда + + Если ВсегоОбработаноОбъектов %100 = 0 Тогда + + Если ОбъектыВыгруженныеСОшибками <> Неопределено + И ОбъектыВыгруженныеСОшибками.Количество() > 0 Тогда + + Состояние("Выгруженных объектов - " + ВсегоОбработаноОбъектов + ", ошибок при выгрузке - " + ОбъектыВыгруженныеСОшибками.Количество()); + + Иначе + Состояние("Выгруженных объектов - " + ВсегоОбработаноОбъектов); + КонецЕсли; + + КонецЕсли; + + #КонецЕсли + +КонецПроцедуры + +Функция ПолучитьРезультатЗапросаСКД(СКД) + + Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; + Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); + Компоновщик.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию); + + СистемныеПоля = Новый ПолеКомпоновкиДанных("СистемныеПоля"); + ПараметрыДанных = Новый ПолеКомпоновкиДанных("ПараметрыДанных"); + Для Каждого ДоступноеПоле Из Компоновщик.Настройки.ДоступныеПоляВыбора.Элементы Цикл + Если ДоступноеПоле.Поле = СистемныеПоля Или ДоступноеПоле.Поле = ПараметрыДанных Тогда + Продолжить; + КонецЕсли; + ПолеНабора = СКД.НаборыДанных[0].Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); + ПолеНабора.Поле = Строка(ДоступноеПоле.Поле); + ПолеНабора.ПутьКДанным = Строка(ДоступноеПоле.Поле); + Если ДоступноеПоле.Папка Тогда + ВыбранноеПолеГруппа = Компоновщик.Настройки.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); + ВыбранноеПолеГруппа.Заголовок = ДоступноеПоле.Заголовок; + Для Каждого ВложенныйЭлемент Из ДоступноеПоле.Элементы Цикл + ПолеНабора = СКД.НаборыДанных[0].Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); + ПолеНабора.Поле = Строка(ВложенныйЭлемент.Поле); + ПолеНабора.ПутьКДанным = Строка(ВложенныйЭлемент.Поле); + ВыбранноеПоле = ВыбранноеПолеГруппа.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = ВложенныйЭлемент.Поле; + КонецЦикла; + Иначе + ВыбранноеПоле = Компоновщик.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = ДоступноеПоле.Поле; + КонецЕсли; + + КонецЦикла; + + ПолеГруппировки = Компоновщик.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + ПолеГруппировки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + + + //#Если Клиент Тогда + // + //НастройкиКомпоновщикаXDTO = СериализаторXDTO.ЗаписатьXDTO(Компоновщик.Настройки); + //СКДXDTO = СериализаторXDTO.ЗаписатьXDTO(СКД); + //СКДXDTO.defaultSettings = НастройкиКомпоновщикаXDTO; + //СКД = СериализаторXDTO.ПрочитатьXDTO(СКДXDTO); + // + //КонструкторСКД = Новый КонструкторСхемыКомпоновкиДанных(СКД); + //КонструкторСКД.Редактировать(ПолучитьФорму("Форма")); + //#КонецЕсли + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Компоновщик.ПолучитьНастройки(),,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + Запрос = Новый Запрос(МакетКомпоновки.НаборыДанных.ОсновнойЗапрос.Запрос); + ПараметрыЗапроса = Запрос.НайтиПараметры(); + Для Каждого Параметр Из ПараметрыЗапроса Цикл + ПараметрМакетаСКД = МакетКомпоновки.ЗначенияПараметров.Найти(Параметр.Имя); + Запрос.УстановитьПараметр(Параметр.Имя, ПараметрМакетаСКД.Значение); + КонецЦикла; + РезультатЗапроса = Запрос.Выполнить(); + + Возврат РезультатЗапроса; + +КонецФункции + +Функция ПолучитьСтрокуПолейОтбораРегистра(МенеджерНабораЗаписей) + + НаборЗаписей = МенеджерНабораЗаписей.СоздатьНаборЗаписей(); + + Отбор = НаборЗаписей.Отбор; + + СтрокаПолейОтбора = ""; + Для Каждого ЭлементОтбора Из Отбор Цикл + Если НЕ ПустаяСтрока(СтрокаПолейОтбора) Тогда + СтрокаПолейОтбора = СтрокаПолейОтбора + ","; + КонецЕсли; + СтрокаПолейОтбора = СтрокаПолейОтбора + ЭлементОтбора.Имя; + КонецЦикла; + Возврат СтрокаПолейОтбора; +КонецФункции + +Функция СформироватьОтчетПоОтобраннымДанным(СтрокаДереваМетаданных) Экспорт + + СКД = ПодготовитьКомпоновщикДляВыгрузки(СтрокаДереваМетаданных); + + Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; + Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); + Компоновщик.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию); + + СистемныеПоля = Новый ПолеКомпоновкиДанных("СистемныеПоля"); + ПараметрыДанных = Новый ПолеКомпоновкиДанных("ПараметрыДанных"); + Для Каждого ДоступноеПоле Из Компоновщик.Настройки.ДоступныеПоляВыбора.Элементы Цикл + Если ДоступноеПоле.Поле = СистемныеПоля Или ДоступноеПоле.Поле = ПараметрыДанных Или ДоступноеПоле.Папка Тогда + Продолжить; + КонецЕсли; + ПолеНабора = СКД.НаборыДанных[0].Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); + ПолеНабора.Поле = Строка(ДоступноеПоле.Поле); + ПолеНабора.ПутьКДанным = Строка(ДоступноеПоле.Поле); + + ВыбранноеПоле = Компоновщик.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = ДоступноеПоле.Поле; + КонецЦикла; + + ПолеГруппировки = Компоновщик.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + ПолеГруппировки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Компоновщик.ПолучитьНастройки()); + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновки); + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ТабличныйДокумент = Новый ТабличныйДокумент; + ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент); + ПроцессорВывода.Вывести(ПроцессорКомпоновки); + + ТабличныйДокумент.ОтображатьЗаголовки = Ложь; + ТабличныйДокумент.ОтображатьСетку = Ложь; + + Возврат ТабличныйДокумент; + +КонецФункции + +Функция ВыборкаИзРезультатаЗапросаВСтруктуру(РезультатЗапроса, СтрокаВыборки) + + РезультирующаяСтруктура = Новый Структура; + + Если РезультатЗапроса = Неопределено Или СтрокаВыборки = Неопределено Тогда + Возврат РезультирующаяСтруктура; + КонецЕсли; + + Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл + РезультирующаяСтруктура.Вставить(Колонка.Имя, СтрокаВыборки[Колонка.Имя]); + КонецЦикла; + + Возврат РезультирующаяСтруктура; + +КонецФункции + +//Заполнение соответствий в английском языке. +Процедура ЗаполнитьСоответствие() + АнглийскоеСоответствие = Новый Соответствие; + АнглийскоеСоответствие.Вставить("Справочник", "Catalog"); + АнглийскоеСоответствие.Вставить("Документ", "Document"); + АнглийскоеСоответствие.Вставить("БизнесПроцесс", "BusinessProcess"); + АнглийскоеСоответствие.Вставить("Задача", "Task"); + АнглийскоеСоответствие.Вставить("ПланВидовРасчета", "ChartOfCalculationTypes"); + АнглийскоеСоответствие.Вставить("ПланВидовХарактеристик", "ChartOfCharacteristicTypes"); + АнглийскоеСоответствие.Вставить("ПланОбмена", "ExchangePlan"); + АнглийскоеСоответствие.Вставить("ПланСчетов", "ChartOfAccounts"); + АнглийскоеСоответствие.Вставить("РегистрСведений", "InformationRegister"); + АнглийскоеСоответствие.Вставить("РегистрНакопления", "AccumulationRegister"); + АнглийскоеСоответствие.Вставить("РегистрБухгалтерии", "AccountingRegister"); + АнглийскоеСоответствие.Вставить("Перечисление", "Enum"); + АнглийскоеСоответствие.Вставить("Наименование", "Description"); + АнглийскоеСоответствие.Вставить("Код", "Code"); + АнглийскоеСоответствие.Вставить("Родитель", "Parent"); + АнглийскоеСоответствие.Вставить("ЭтоГруппа", "IsFolder"); + АнглийскоеСоответствие.Вставить("ПометкаУдаления", "DeletionMark"); + АнглийскоеСоответствие.Вставить("Ссылка", "Ref"); + АнглийскоеСоответствие.Вставить("Предопределенный", "Predefined"); + АнглийскоеСоответствие.Вставить("ИмяПредопределенныхДанных","PredefinedDataName"); + АнглийскоеСоответствие.Вставить("Владелец", "Owner"); + АнглийскоеСоответствие.Вставить("Дата", "Date"); + АнглийскоеСоответствие.Вставить("Проведен", "Posted"); + АнглийскоеСоответствие.Вставить("Номер", "Number"); + АнглийскоеСоответствие.Вставить("Стартован", "Started"); + АнглийскоеСоответствие.Вставить("Завершен", "Completed"); + АнглийскоеСоответствие.Вставить("ВедущаяЗадача", "HeadTask"); + АнглийскоеСоответствие.Вставить("ТочкаМаршрута", "RoutePoint"); + АнглийскоеСоответствие.Вставить("Выполнена", "Executed"); + АнглийскоеСоответствие.Вставить("Период", "Period"); + АнглийскоеСоответствие.Вставить("Регистратор", "Recorder"); + АнглийскоеСоответствие.Вставить("Активность", "Active"); + АнглийскоеСоответствие.Вставить("НомерСтроки", "LineNumber"); + АнглийскоеСоответствие.Вставить("НомерОтправленного", "SentNo"); + АнглийскоеСоответствие.Вставить("НомерПринятого", "ReceivedNo"); + АнглийскоеСоответствие.Вставить("ПользовательИБ", "InfoBaseUser"); + АнглийскоеСоответствие.Вставить("РегистрСведенийНаборЗаписей","InformationRegisterRecordSet"); + +КонецПроцедуры + +//Функция возвращает полученное значение из списка соответствия в зависимости от языка +Функция ВернутьЗначениеСоответствия(ИскомоеЗначение) + ЗначениеСоответствия = ИскомоеЗначение; + Если ВариантВстроенногоЯзыкаАнглийский Тогда + ЭлементСоответствия = АнглийскоеСоответствие.Получить(ИскомоеЗначение); + Если НЕ ЭлементСоответствия = Неопределено Тогда + ЗначениеСоответствия = ЭлементСоответствия + КонецЕсли; + КонецЕсли; + Возврат ЗначениеСоответствия; +КонецФункции + +Процедура СоздатьСтруктурумТЗКэшОбъектов() + мТЗКэшОбъектов = Новый ТаблицаЗначений(); + мТЗКэшОбъектов.Колонки.Добавить("МенеджерОбъекта"); + мТЗКэшОбъектов.Колонки.Добавить("МетаданныеИмя"); + мТЗКэшОбъектов.Колонки.Добавить("Наименование"); + мТЗКэшОбъектов.Колонки.Добавить("Код"); + мТЗКэшОбъектов.Колонки.Добавить("Ссылка"); + + мТЗКэшОбъектов.Индексы.Добавить("МенеджерОбъекта"); + мТЗКэшОбъектов.Индексы.Добавить("МетаданныеИмя"); +КонецПроцедуры //Получить + +Функция ПолучитьЗначениеИзКэша(МенеджерОбъекта,МетаданныеИмя,ПараметрыПоиска) + РезультатФункции = Новый Структура(); + пЗначениеИзКэша = Неопределено; + ЭтоЗначениеИзКэша = Ложь; + ПараметрыОтбора=Новый Структура(); + ПараметрыОтбора.Вставить("МенеджерОбъекта",МенеджерОбъекта); + ПараметрыОтбора.Вставить("МетаданныеИмя",МетаданныеИмя); + ПараметрыПоискаСтрока = ""; + Для каждого СтрокаПараметрыПоиска из ПараметрыПоиска цикл + ПараметрыОтбора.Вставить(СтрокаПараметрыПоиска.Ключ,СтрокаПараметрыПоиска.Значение); + ПараметрыПоискаСтрока = ПараметрыПоискаСтрока + "" +СтрокаПараметрыПоиска.Ключ + " ["+СтрокаПараметрыПоиска.Значение+"]"; + Конеццикла; + НайденныеСтроки = мТЗКэшОбъектов.НайтиСтроки(ПараметрыОтбора); + Если НайденныеСтроки.Количество()=1 тогда + пЗначениеИзКэша = НайденныеСтроки[0].Ссылка; + ЭтоЗначениеИзКэша = Истина; + ИначеЕсли НайденныеСтроки.Количество()>1 Тогда + ТекстСообщения = ПолучитьТекстСообщенияПользователю("Ошибка. Найдено более 1 значения в кэше МетаданныеИмя [%1] по указанным параметрам поиска %2"); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",МетаданныеИмя); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%2",ПараметрыПоискаСтрока); + Сообщить(ТекстСообщения); + Иначе + //Сообщить("Не найден "); + Конецесли; + РезультатФункции.Вставить("ЭтоЗначениеИзКэша",ЭтоЗначениеИзКэша); + РезультатФункции.Вставить("ЗначениеИзКэша",пЗначениеИзКэша); + Возврат РезультатФункции; +КонецФункции //ПолучитьЗначениеИзКэша(ДопПараметры) + +Процедура ДобавитьЗначениеВКэш(СсылкаНаОбъект,МенеджерОбъекта,МетаданныеИмя,ПараметрыПоиска) + СтрокамТЗКэшОбъектов = мТЗКэшОбъектов.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокамТЗКэшОбъектов,ПараметрыПоиска); + СтрокамТЗКэшОбъектов.Ссылка = СсылкаНаОбъект; + СтрокамТЗКэшОбъектов.МенеджерОбъекта = МенеджерОбъекта; + СтрокамТЗКэшОбъектов.МетаданныеИмя = МетаданныеИмя; +КонецПроцедуры //ДобавитьЗначениеВКэш(Справочники.Модели.ПустаяСсылка(),"Модели",ПараметрыПоиска) + +#КонецОбласти + +//#КонецОбласти ПроцедурыИФункции + +//#КонецОбласти ИнициализацияПеременных +#Область СлужебныеПроцедурыИФункции + +Процедура ДобавитьОбъектВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных) - Если НЕ ЗначениеЗаполнено(АнализируемоеЗначение) Тогда - Возврат; + Ссылка = Неопределено; + Мд = Неопределено; + ЭтоСсылочныйОбъект = ЭтоОписательОбъектаСсылки(ОписательОбъекта, Ссылка); + Если ЭтоСсылочныйОбъект Тогда + ЭтоСсылочныйОбъект = Истина; + Мд = Ссылка.Метаданные(); + ИначеЕсли ОписательОбъекта.Свойство("Метаданное", Мд) Тогда КонецЕсли; - ОбъектМД = СсылочныеТипы.Получить(ТипЗнч(АнализируемоеЗначение)); - - Если ОбъектМД = Неопределено Тогда - Возврат; // это не ссылка - КонецЕсли; - - Если СсылкаВыгружена(АнализируемоеЗначение) Тогда - Возврат; // объект уже был выгружен - КонецЕсли; + ДобавитьМетаданныеВВыгрузкуДляДобавляемогоОбъекта(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, Мд); - КлассМДИерархический = КлассМДИерархический(ОбъектМД); // нужно для иерархических метаданных и подгрузки родителей - Если НЕ КлассМДИерархический Тогда - // Проверка того, что данный тип входит в список выгружаемых дополнительно - СтрокаТаблицы = СоставПолнойВыгрузки.Найти(ОбъектМД, "ОбъектМД"); - Если СтрокаТаблицы <> Неопределено Тогда - Возврат; + менеджерОбъекта = ПолучитьМенеджерОбъекта_ирЛкс(Мд); + КорневойТипКонфигурации = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд); + Если КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Справочник") Тогда + Если ЗначениеЗаполнено(Ссылка) и Ссылка.ЭтоГруппа Тогда + Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда + лПустойОбъект = менеджерОбъекта.СоздатьГруппу(); + Иначе + лПустойОбъект = менеджерОбъекта.CreateFolder(); + КонецЕсли; + Иначе + Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда + лПустойОбъект = менеджерОбъекта.СоздатьЭлемент(); + Иначе + лПустойОбъект = менеджерОбъекта.CreateItem(); + КонецЕсли; КонецЕсли; + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Документ") Тогда + лПустойОбъект = менеджерОбъекта.СоздатьДокумент(); + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("БизнесПроцесс") Тогда + лПустойОбъект = менеджерОбъекта.СоздатьБизнесПроцесс(); + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Задача") Тогда + лПустойОбъект = менеджерОбъекта.СоздатьЗадачу(); + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") Тогда + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрНакопления") Тогда + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланОбмена") Тогда + лПустойОбъект = менеджерОбъекта.СоздатьУзел(); + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланВидовХарактеристик") Тогда + Если ЗначениеЗаполнено(Ссылка) и Ссылка.ЭтоГруппа Тогда + Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда + лПустойОбъект = менеджерОбъекта.СоздатьГруппу(); + Иначе + лПустойОбъект = менеджерОбъекта.CreateFolder(); + КонецЕсли; + Иначе + Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда + лПустойОбъект = менеджерОбъекта.СоздатьЭлемент(); + Иначе + лПустойОбъект = менеджерОбъекта.CreateItem(); + КонецЕсли; + КонецЕсли; + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланСчетов") Тогда + лПустойОбъект = менеджерОбъекта.СоздатьСчет(); + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланВидовРасчета") Тогда + лПустойОбъект = менеджерОбъекта.СоздатьВидРасчета(); + Иначе + ТекстСообщения = ПолучитьТекстСообщенияПользователю("Неизвестный КорневойТипКонфигурации <%1>"); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",КорневойТипКонфигурации); + ВызватьИсключение ТекстСообщения; КонецЕсли; - - СтрокаТаблицы = СоставВспомогательнойВыгрузки.Найти(ОбъектМД, "ОбъектМД"); - Если СтрокаТаблицы <> Неопределено Тогда - - ДопЗапрос = Новый Запрос("ВЫБРАТЬ * ИЗ " + СтрокаТаблицы.СтрокаДерева.ЭлементОписания.ДляЗапроса + ОбъектМД.Имя + - " КАК ТаблицаОбъекта_" + " ГДЕ Ссылка = &Ссылка"); - ДопЗапрос.УстановитьПараметр("Ссылка", АнализируемоеЗначение); - РезультатЗапроса = ДопЗапрос.Выполнить(); - ЗапросИЗапись(РезультатЗапроса, , ОбъектыВыгруженныеСОшибками, массивДанных); - - КонецЕсли; - -КонецПроцедуры - -Функция ПолучитьМассивКолонокДвижения(ТаблицаДвижений, РегистрБухгалтерии = Ложь) - МассивКолонок = Новый Массив(); - Для Каждого КолонкаТаблицы Из ТаблицаДвижений.Колонки Цикл + ВыгружаемыеСтандартныеРеквизиты = ВыгружаемыеСтандартныеРеквизиты(ОписательОбъекта, КорневойТипКонфигурации); + + Если ЗначениеЗаполнено(Ссылка) Тогда + объект = Ссылка.ПолучитьОбъект(); - Если КолонкаТаблицы.Имя = "МоментВремени" - ИЛИ Найти(КолонкаТаблицы.Имя, "ВидСубконтоДт") = 1 - ИЛИ Найти(КолонкаТаблицы.Имя, "ВидСубконтоКт") = 1 Тогда - - Продолжить; - + Если НЕ ВыгружатьСсылку И ЗначениеЗаполнено(ОписательОбъекта.ГуидСсылки) Тогда + Для каждого РеквизитМд Из Мд.СтандартныеРеквизиты Цикл + Если РеквизитМд.Имя = ВернутьЗначениеСоответствия("Ссылка") Тогда + ДобавилиРеквизит = ОбработатьВыгрузкуРеквизитаОбъекта(ДанныеДляВыгрузки, МассивДанных, Объект, РеквизитМд, ОписательОбъекта.ГуидСсылки, Мд, ШапкаДанных); + КонецЕсли; + КонецЦикла; КонецЕсли; - Если Найти(КолонкаТаблицы.Имя, "СубконтоДт") = 1 И РегистрБухгалтерии Тогда - - Если МассивКолонок.Найти("СубконтоДт") = Неопределено Тогда - МассивКолонок.Добавить("СубконтоДт"); - Конецесли; - - Продолжить; - - КонецЕсли; + ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, Мд.СтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты); + ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, Мд.Реквизиты, Неопределено); - Если Найти(КолонкаТаблицы.Имя, "СубконтоКт") = 1 И РегистрБухгалтерии Тогда - - Если МассивКолонок.Найти("СубконтоКт") = Неопределено Тогда - МассивКолонок.Добавить("СубконтоКт"); - КонецЕсли; - - Продолжить; - - КонецЕсли; + ДобавитьТабличныеЧастиОбъектаВВыгрузку(ДанныеДляВыгрузки, Мд.ТабличныеЧасти, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект); + ДобавитьРежимыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект); + ДобавитьДопСвойстваВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект); - МассивКолонок.Добавить(КолонкаТаблицы.Имя); + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") и ТипЗнч(ОписательОбъекта.Реквизиты) = Тип("Структура") Тогда + ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.СтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты); + ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Измерения, Неопределено); + ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Ресурсы, Неопределено); + ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Реквизиты, Неопределено); - КонецЦикла; - - Возврат МассивКолонок; - -КонецФункции - -Процедура ВыгрузитьПодчиненныеЗначенияНабора(Движение, МассивКолонок, ОбъектыВыгруженныеСОшибками, массивДанных) + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") + Или КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрНакопления") + Или КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда + + ЭтоРегистрБухгалтерии = КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии"); - Для Каждого ЗаписьИзНабора Из Движение Цикл - - Для Каждого Колонка Из МассивКолонок Цикл - - Если Колонка = "СубконтоДт" - ИЛИ Колонка = "СубконтоКт" Тогда + НаборЗаписейРегистра = ОписательОбъекта.Реквизиты; + МассивЗаписейТЧ = Новый Массив; + Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл + ОписательОбъекта.Реквизиты = ЗаписьРегистра; + МасивЗаписейРегистра = Новый Массив; + НаборСтандартныеРеквизиты = Мд.СтандартныеРеквизиты; + Если ЭтоРегистрБухгалтерии Тогда + ДанныеСчета = Новый Структура; + Если Мд.Корреспонденция Тогда + ДанныеСчета.Вставить("СчетДт", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "СубконтоДт")); + ДанныеСчета.Вставить("СчетКт", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "СубконтоКт")); + Иначе + ДанныеСчета.Вставить("Счет", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "Субконто")); + КонецЕсли; - Значение = ЗаписьИзНабора[Колонка]; - Для Каждого КлючИЗначение Из Значение Цикл - - Если ЗначениеЗаполнено(КлючИЗначение.Значение) Тогда - ЗаписатьЗначениеПриНеобходимости(КлючИЗначение.Значение, ОбъектыВыгруженныеСОшибками, массивДанных); + НаборСтандартныеРеквизиты = Новый Массив; + для каждого МдРеквизит из Мд.СтандартныеРеквизиты Цикл + ИмяРеквизита = МдРеквизит.Имя; + Если Лев(ИмяРеквизита, СтрДлина("ВидСубконто")) = "ВидСубконто" Тогда + Продолжить; КонецЕсли; - + Если Лев(ИмяРеквизита, СтрДлина("Субконто")) = "Субконто" Тогда + Продолжить; + КонецЕсли; + НаборСтандартныеРеквизиты.Добавить(МдРеквизит); КонецЦикла; - - Иначе - - СохраненноеЗначение = ЗаписьИзНабора[Колонка]; - ЗаписатьЗначениеПриНеобходимости(СохраненноеЗначение, ОбъектыВыгруженныеСОшибками, массивДанных); - КонецЕсли; + ДобавитьРеквизитыОбъектаВВыгрузку(МасивЗаписейРегистра, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, НаборСтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты); + ДобавитьРеквизитыОбъектаВВыгрузку(МасивЗаписейРегистра, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Измерения, Неопределено, КорневойТипКонфигурации); + ДобавитьРеквизитыОбъектаВВыгрузку(МасивЗаписейРегистра, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Ресурсы, Неопределено, КорневойТипКонфигурации); + ДобавитьРеквизитыОбъектаВВыгрузку(МасивЗаписейРегистра, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Реквизиты, Неопределено); + + Если ЭтоРегистрБухгалтерии Тогда + ВыгружаемыеРеквизиты = Новый Массив; + МассивИмитаторРеквизитовМд = Новый Массив; + Для каждого КлючЗначение Из ДанныеСчета Цикл + ИмяРеквизита = КлючЗначение.Ключ; + ВыгружаемыеРеквизиты.Добавить(ИмяРеквизита); + Структура = Новый Структура("Имя,Субконто", ИмяРеквизита, КлючЗначение.Значение); + МассивИмитаторРеквизитовМд.Добавить(Структура); + КонецЦикла; + + ДобавитьРеквизитыОбъектаВВыгрузку(МасивЗаписейРегистра, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, МассивИмитаторРеквизитовМд, ВыгружаемыеРеквизиты, КорневойТипКонфигурации); + КонецЕсли; + МассивЗаписейТЧ.Добавить(МасивЗаписейРегистра); КонецЦикла; - - КонецЦикла; + Если МасивЗаписейРегистра.Количество() > 0 Тогда + СтрукутраИмяТЧ = Новый Структура; + СтрукутраИмяТЧ.Вставить("Записи", МассивЗаписейТЧ); + ЗаписьТЧ = Новый Структура; + ЗаписьТЧ.Вставить("ТЧ", СтрукутраИмяТЧ); + ДанныеДляВыгрузки.Добавить(ЗаписьТЧ); + КонецЕсли; + Иначе + ВызватьИсключение ПолучитьТекстСообщенияПользователю("Неизвестный вариант работы - метод <ДобавитьОбъектВВыгрузку>"); + КонецЕсли; КонецПроцедуры -// Процедура записывает наборы записей регистра (накопления, бухгалтерии...) -// -// Параметры -// ЗаписьXML - объект, через которых происходит запись объектов ИБ -// СтрокаДереваМетаданных - строка дерева метаданных, соответствующая регистру -// -Процедура ЗаписьРегистра(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками, РегистрБухгалтерии = Ложь, массивДанных) +Процедура ДобавитьМетаданныеВВыгрузкуДляДобавляемогоОбъекта(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, Мд) + + ЗаписьВыгрузки = Новый Структура; - ПодзаголовокОкнаИсполнения = СтрокаДереваМетаданных.ОбъектМД.ПолноеИмя(); - ОкноИсполненияОбщееКоличество = 1; - //ОкноИсполненияОбработано = 0; + ЗначениеСтроки = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд); + ЗаписьВыгрузки.Вставить("Тип", ЗначениеСтроки); - МенеджерНабораЗаписей = СтрокаДереваМетаданных.ЭлементОписания.Менеджер[СтрокаДереваМетаданных.ОбъектМД.Имя]; + ЗначениеСтроки = Мд.Имя; + ЗаписьВыгрузки.Вставить("Вид", ЗначениеСтроки); - ИмяТаблицыДляЗапроса = СтрокаДереваМетаданных.ЭлементОписания.ДляЗапроса; - - ЗаписьЧерезНаборЗаписей(МенеджерНабораЗаписей, ИмяТаблицыДляЗапроса, - СтрокаДереваМетаданных.ОбъектМД.Имя, СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками, РегистрБухгалтерии, массивДанных); + ЗначениеСтроки = ИмяПеременнойИзОписателяОбъекта(Мд, ОписательОбъекта); + ЗаписьВыгрузки.Вставить("ИмяПеременной", ЗначениеСтроки); + + ЗначениеСтроки = ОписательОбъекта.РежимСоздания; + ЗаписьВыгрузки.Вставить("Режим", ЗначениеСтроки); + + ЗначениеСтроки = ОписательОбъекта.Значение; + ЗаписьВыгрузки.Вставить("Значение", ЗначениеСтроки); + + ДанныеДляВыгрузки.Вставить(ДанныеДляВыгрузки.Количество(), ЗаписьВыгрузки); КонецПроцедуры -// Процедура записывает данные, доступ к которым осуществляется через набор записей -// -// Параметры -// ЗаписьXML - объект, через которых происходит запись объектов ИБ -// СтрокаДереваМетаданных - строка дерева метаданных, соответствующая регистру -// -Процедура ЗаписьЧерезНаборЗаписей(МенеджерНабораЗаписей, ДляЗапроса, ИмяОбъекта, - СтрокаДереваМетаданных = Неопределено, ОбъектыВыгруженныеСОшибками, РегистрБухгалтерии = Ложь, массивДанных) +Функция ОбработатьВыгрузкуРеквизитаОбъекта(ДанныеДляВыгрузки, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, ШапкаДанных) + + имяРеквизита = РеквизитМд.Имя; + ЕстьТипы = Ложь; + Попытка + Тип = РеквизитМд.Тип.Типы(); + ЕстьТипы = Истина; + Исключение + КонецПопытки; + + Если ЕстьТипы И НЕ ЗначениеЗаполнено(ЗначениеРеквизита) И РеквизитМд.Тип.Типы().Количество() = 1 Тогда + Возврат Ложь; + КонецЕсли; + ТипРеквизита = ТипЗнч(ЗначениеРеквизита); + Если ТипРеквизита = ТипЗнч(Неопределено) Тогда + Возврат Ложь; + КонецЕсли; + + ПредставлениеЗначенияРеквизита = ""; + РежимПоиска = ""; + ДополнительныйТипЗначения = ""; + Попытка + ПолучитьПредставлениеИРежимПоискаПоЗначениюРеквизита(Объект, ЗначениеРеквизита, ТипРеквизита, МассивДанных, ПредставлениеЗначенияРеквизита, РежимПоиска, ДополнительныйТипЗначения); + Исключение + описаниеОшибки = ОписаниеОшибки(); + ТекстСообщения = ПолучитьТекстСообщенияПользователю("%1 Не умею обрабатывать реквизит <%2> у объекта <%3>"); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",описаниеОшибки); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%2",имяРеквизита); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%3",Мд.ПолноеИмя()); + ВызватьИсключение ТекстСообщения; + КонецПопытки; - // получить состав колонок записи регистра и проверить наличие хотя бы одной записи - Если ДляЗапроса = "РегистрБухгалтерии." Тогда - ИмяТаблицыДляЗапроса = ДляЗапроса + ИмяОбъекта + ".ДвиженияССубконто"; - Иначе - ИмяТаблицыДляЗапроса = ДляЗапроса + ИмяОбъекта; + Если ЕстьТипы И РеквизитМд.Тип.Типы().Количество() = 1 Тогда + ДополнительныйТипЗначения = ""; КонецЕсли; - Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ " + ИмяТаблицыДляЗапроса + " КАК ТаблицаОбъекта_" + ИмяОбъекта); - РезультатЗапросаПоСоставу = Запрос.Выполнить(); - Если РезультатЗапросаПоСоставу.Пустой() Тогда - Возврат; - КонецЕсли; + ЗаписьВыгрузки = Новый Структура; - ТаблицаДвижений = РезультатЗапросаПоСоставу.Выгрузить(); - МассивКолонок = ПолучитьМассивКолонокДвижения(ТаблицаДвижений, РегистрБухгалтерии); + ДобавитьПростойРеквизитВВыгрузку(ЗаписьВыгрузки, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита); - // выгрузка регистров осуществляется через его набор записей - НаборЗаписей = МенеджерНабораЗаписей.СоздатьНаборЗаписей(); + Если ЗначениеЗаполнено(РежимПоиска) Тогда + ЗаписьВыгрузки.Вставить("Режим", РежимПоиска); + КонецЕсли; - СтрокаПолейОтбора = ПолучитьСтрокуПолейОтбораРегистра(МенеджерНабораЗаписей); + Если ЗначениеЗаполнено(ДополнительныйТипЗначения) Тогда + ЗаписьВыгрузки.Вставить("ДополнительныйТипЗначения", ДополнительныйТипЗначения); + КонецЕсли; - СКД = ПодготовитьКомпоновщикДляВыгрузки(СтрокаДереваМетаданных, СтрокаПолейОтбора); - //ПостроительОтчета.Выполнить(); - РезультатЗапросаПоЗначениямОтбора = ПолучитьРезультатЗапросаСКД(СКД); - ВыборкаИзРезультата = РезультатЗапросаПоЗначениямОтбора.Выбрать(); + ДанныеДляВыгрузки.Вставить(ДанныеДляВыгрузки.Количество(), ЗаписьВыгрузки); + + Возврат Истина; - ОкноИсполненияОбщееКоличество = ВыборкаИзРезультата.Количество(); - //ОкноИсполненияОбработано = 0; - //ОкноИсполнения.ОбновитьВерхнююГраницу(); +КонецФункции - КоличествоПолейОтбора = НаборЗаписей.Отбор.Количество(); +// аналог ДобавитьПростойРеквизитВМакет +Процедура ДобавитьПростойРеквизитВВыгрузку(ДанныеДляВыгрузки, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита) - // читаем наборы записей с различным составом отбора и записываем их - Пока ВыборкаИзРезультата.Следующий() Цикл - - // Пересоздание набора, чтоб чтоб разные экземпляры объекта в МассивДанных попали - НаборЗаписей = МенеджерНабораЗаписей.СоздатьНаборЗаписей(); - Отбор = НаборЗаписей.Отбор; - - // Отбор устанавливаем для регистров, у которых есть хотя бы один отбор (измерение) - Если КоличествоПолейОтбора <> 0 Тогда - - Для Каждого Колонка Из РезультатЗапросаПоЗначениямОтбора.Колонки Цикл - Отбор[Колонка.Имя].Значение = ВыборкаИзРезультата[Колонка.Имя]; - Отбор[Колонка.Имя].ВидСравнения = ВидСравнения.Равно; - Отбор[Колонка.Имя].Использование = Истина; - КонецЦикла; - - КонецЕсли; - - НаборЗаписей.Прочитать(); - - Если мНаличиеВыгрузкиПодчиненныхОбъектов Тогда - - // проверяем все записанные в наборе значения на необходимость записи "по ссылке" - ВыгрузитьПодчиненныеЗначенияНабора(НаборЗаписей, МассивКолонок, ОбъектыВыгруженныеСОшибками, массивДанных); - - КонецЕсли; + Если ТипЗнч(ДанныеДляВыгрузки) = Тип("Массив") Тогда - ВсегоОбработаноОбъектов = ВсегоОбработанныхЗаписей(); - Попытка - - //ВыполнитьВспомогательныеДействияДляЗаписиXML(ВсегоОбработаноОбъектов, ЗаписьXML, ТолькоПроверкаНедопустимыхСимволов); - - //ЗаписатьXML(ЗаписьXML, НаборЗаписей); - - ОписательЭлемента = СоздатьОписательЭлементаПоНаборуЗаписей(НаборЗаписей, МассивИмен); - МассивДанных.Добавить(ОписательЭлемента); - //Мд = НаборЗаписей.Метаданные(); - ////Для каждого ЗаписьНабора Из НаборЗаписей Цикл - // ОписательЭлемента = СоздатьОписательЭлемента(); - // ОписательЭлемента.Реквизиты = НаборЗаписей; //ЗаписьНабора; - // ОписательЭлемента.Ссылка = Неопределено; - // ОписательЭлемента.Метаданное = Мд; - // МассивДанных.Добавить(ОписательЭлемента); - ////КонецЦикла; - - Исключение - - СтрокаОписанияОшибки = ОписаниеОшибки(); - //не смогли записать в XML - // возможно проблема с недопустимыми символами в XML - //Если ТолькоПроверкаНедопустимыхСимволов Тогда - // - // НовыйНабор = МенеджерНабораЗаписей.СоздатьНаборЗаписей(); - // - // Для Каждого СтрокаОтбора Из НаборЗаписей.Отбор Цикл - // - // СтрокаОтбораФормы = НовыйНабор.Отбор.Найти(СтрокаОтбора.Имя); - // - // Если СтрокаОтбораФормы = Неопределено Тогда - // Продолжить; - // КонецЕсли; - // - // СтрокаОтбораФормы.Использование = СтрокаОтбора.Использование; - // СтрокаОтбораФормы.ВидСравнения = СтрокаОтбора.ВидСравнения; - // СтрокаОтбораФормы.Значение = СтрокаОтбора.Значение; - // - // КонецЦикла; - // - // ОбъектыВыгруженныеСОшибками.Вставить(НовыйНабор, СтрокаОписанияОшибки); - // - //Иначе - - ТекстСообщения = ПолучитьТекстСообщенияПользователю("Ошибка при выгрузке набора записей регистра: %1"); - ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1","" + ДляЗапроса + ИмяОбъекта); - ТекстСообщения = ТекстСообщения + " - |" + СтрокаОписанияОшибки; - - Сообщить(ТекстСообщения); - - ВызватьИсключение ТекстСообщения; - - - - //КонецЕсли; - - КонецПопытки; + Структура = Новый Структура; + Структура.Вставить("Реквизит", ИмяРеквизита); + Структура.Вставить("Значение", ПредставлениеЗначенияРеквизита); - ОбработанныхНаборовЗаписей = ОбработанныхНаборовЗаписей + 1; - //ОкноИсполненияОбработано = ОкноИсполненияОбработано + 1; + ДанныеДляВыгрузки.Добавить(Структура); - ПоказатьПользователюИнформациюОСостоянииВыгрузки(ВсегоОбработаноОбъектов, ОбъектыВыгруженныеСОшибками); + Иначе - КонецЦикла; + ДанныеДляВыгрузки.Вставить("Реквизит", ИмяРеквизита); + ДанныеДляВыгрузки.Вставить("Значение", ПредставлениеЗначенияРеквизита); + + КонецЕсли; КонецПроцедуры -Процедура ПоказатьПользователюИнформациюОСостоянииВыгрузки(ВсегоОбработаноОбъектов, ОбъектыВыгруженныеСОшибками) - - #Если Клиент Тогда +// аналог ОбработатьРеквизитыОбъекта +Процедура ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, МдРеквизиты, ВыгружаемыеРеквизиты, КорневойТипКонфигурации = "") + + ЭтоСсылочныйОбъект = ЭтоОписательОбъектаСсылки(ОписательОбъекта); + Если ЭтоСсылочныйОбъект Тогда + Мд = Объект.Метаданные(); + Иначе + Мд = Объект; + КонецЕсли; + + Для каждого РеквизитМд Из МдРеквизиты Цикл + имяРеквизита = РеквизитМд.Имя; + Если ВыгружаемыеРеквизиты <> Неопределено и ВыгружаемыеРеквизиты.Найти(имяРеквизита) = Неопределено Тогда + Продолжить; + КонецЕсли; + + БылДобавленСчетДляЗаписиРегистраБухгалтерии = Ложь; - Если ВсегоОбработаноОбъектов %100 = 0 Тогда - - Если ОбъектыВыгруженныеСОшибками <> Неопределено - И ОбъектыВыгруженныеСОшибками.Количество() > 0 Тогда + Если ЭтоСсылочныйОбъект Тогда + ЗначениеРеквизита = объект[имяРеквизита]; + + этоЗначениеБудетСозданоПоУмолчанию = лПустойОбъект[имяРеквизита] = ЗначениеРеквизита; + Если этоЗначениеБудетСозданоПоУмолчанию Тогда + Продолжить; + КонецЕсли; + Иначе + Если КорневойТипКонфигурации = "РегистрБухгалтерии" Тогда + Если Лев(ИмяРеквизита, СтрДлина("Счет")) = "Счет" Тогда + БылДобавленСчетДляЗаписиРегистраБухгалтерии = Истина; + ИмяРеквизитаСчет = имяРеквизита; + ИначеЕсли НЕ РеквизитМд.Балансовый Тогда + Суффиксы = Новый Массив; + Суффиксы.Добавить("Дт"); + Суффиксы.Добавить("Кт"); + Для Каждого Суффикс Из Суффиксы Цикл + ЗначениеРеквизита = ОписательОбъекта.Реквизиты[имяРеквизита + Суффикс]; + ИмитаторРеквизитаМд = Новый Структура("Имя, Тип", имяРеквизита + Суффикс, РеквизитМд.Тип); + ДобавилиРеквизит = ДобавитьРеквизитОбъектаВВыгрузку(ДанныеДляВыгрузки, МассивДанных, Объект, ИмитаторРеквизитаМд, ЗначениеРеквизита, Мд, ШапкаДанных); + КонецЦикла; + Продолжить; + КонецЕсли; + КонецЕсли; + ЗначениеРеквизита = ОписательОбъекта.Реквизиты[имяРеквизита]; + КонецЕсли; - Состояние("Выгруженных объектов - " + ВсегоОбработаноОбъектов + ", ошибок при выгрузке - " + ОбъектыВыгруженныеСОшибками.Количество()); + ДобавилиРеквизит = ДобавитьРеквизитОбъектаВВыгрузку(ДанныеДляВыгрузки, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, ШапкаДанных); - Иначе - Состояние("Выгруженных объектов - " + ВсегоОбработаноОбъектов); + Если БылДобавленСчетДляЗаписиРегистраБухгалтерии Тогда + // при отсутствии видов субконто их не обрабатываем + Если НЕ ОписательОбъекта.Реквизиты[ИмяРеквизитаСчет].Метаданные().ВидыСубконто = Неопределено Тогда + Для Каждого ОписаниеВидаСубконто Из ОписательОбъекта.Реквизиты[ИмяРеквизитаСчет].ВидыСубконто Цикл + ВидСубконто = ОписаниеВидаСубконто.ВидСубконто; + НаименованиеРеквизитаСубконто = РеквизитМд.Субконто.НаименованиеРеквизитаСубконто; + ЗначениеРеквизита = ОписательОбъекта.Реквизиты[НаименованиеРеквизитаСубконто][ВидСубконто]; + Если ЗначениеРеквизита = Неопределено Тогда + Продолжить; + КонецЕсли; + + ИмитаторРеквизитаМд = Новый Структура("Имя, Тип", НаименованиеРеквизитаСубконто + ОписаниеВидаСубконто.НомерСтроки, ВидСубконто.ТипЗначения); + + ДобавилиРеквизит = ДобавитьРеквизитОбъектаВВыгрузку(ДанныеДляВыгрузки, МассивДанных, Объект, ИмитаторРеквизитаМд, ЗначениеРеквизита, Мд, ШапкаДанных); + КонецЦикла; КонецЕсли; - КонецЕсли; - - #КонецЕсли - + КонецЦикла; КонецПроцедуры -Функция ПолучитьРезультатЗапросаСКД(СКД) - - Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; - Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); - Компоновщик.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию); +// аналог ОбработатьРеквизитОбъекта +Функция ДобавитьРеквизитОбъектаВВыгрузку(ДанныеДляВыгрузки, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, ШапкаДанных) - СистемныеПоля = Новый ПолеКомпоновкиДанных("СистемныеПоля"); - ПараметрыДанных = Новый ПолеКомпоновкиДанных("ПараметрыДанных"); - Для Каждого ДоступноеПоле Из Компоновщик.Настройки.ДоступныеПоляВыбора.Элементы Цикл - Если ДоступноеПоле.Поле = СистемныеПоля Или ДоступноеПоле.Поле = ПараметрыДанных Тогда - Продолжить; - КонецЕсли; - ПолеНабора = СКД.НаборыДанных[0].Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); - ПолеНабора.Поле = Строка(ДоступноеПоле.Поле); - ПолеНабора.ПутьКДанным = Строка(ДоступноеПоле.Поле); - Если ДоступноеПоле.Папка Тогда - ВыбранноеПолеГруппа = Компоновщик.Настройки.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных")); - ВыбранноеПолеГруппа.Заголовок = ДоступноеПоле.Заголовок; - Для Каждого ВложенныйЭлемент Из ДоступноеПоле.Элементы Цикл - ПолеНабора = СКД.НаборыДанных[0].Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); - ПолеНабора.Поле = Строка(ВложенныйЭлемент.Поле); - ПолеНабора.ПутьКДанным = Строка(ВложенныйЭлемент.Поле); - ВыбранноеПоле = ВыбранноеПолеГруппа.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); - ВыбранноеПоле.Поле = ВложенныйЭлемент.Поле; - КонецЦикла; - Иначе - ВыбранноеПоле = Компоновщик.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); - ВыбранноеПоле.Поле = ДоступноеПоле.Поле; - КонецЕсли; - - КонецЦикла; + ЗаписьВыгрузки = Новый Структура; - ПолеГруппировки = Компоновщик.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); - ПолеГруппировки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + имяРеквизита = РеквизитМд.Имя; + ЕстьТипы = Ложь; + Попытка + Тип = РеквизитМд.Тип.Типы(); + ЕстьТипы = Истина; + Исключение + КонецПопытки; + Если ЕстьТипы И НЕ ЗначениеЗаполнено(ЗначениеРеквизита) И РеквизитМд.Тип.Типы().Количество() = 1 Тогда + Возврат Ложь; + КонецЕсли; + ТипРеквизита = ТипЗнч(ЗначениеРеквизита); + Если ТипРеквизита = ТипЗнч(Неопределено) Тогда + Возврат Ложь; + КонецЕсли; - //#Если Клиент Тогда - // - //НастройкиКомпоновщикаXDTO = СериализаторXDTO.ЗаписатьXDTO(Компоновщик.Настройки); - //СКДXDTO = СериализаторXDTO.ЗаписатьXDTO(СКД); - //СКДXDTO.defaultSettings = НастройкиКомпоновщикаXDTO; - //СКД = СериализаторXDTO.ПрочитатьXDTO(СКДXDTO); - // - //КонструкторСКД = Новый КонструкторСхемыКомпоновкиДанных(СКД); - //КонструкторСКД.Редактировать(ПолучитьФорму("Форма")); - //#КонецЕсли + ПредставлениеЗначенияРеквизита = ""; + РежимПоиска = ""; + ДополнительныйТипЗначения = ""; + Попытка + ПолучитьПредставлениеИРежимПоискаПоЗначениюРеквизита(Объект, ЗначениеРеквизита, ТипРеквизита, МассивДанных, ПредставлениеЗначенияРеквизита, РежимПоиска, ДополнительныйТипЗначения); + Исключение + описаниеОшибки = ОписаниеОшибки(); + ТекстСообщения = ПолучитьТекстСообщенияПользователю("%1 Не умею обрабатывать реквизит <%2> у объекта <%3>"); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",описаниеОшибки); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%2",имяРеквизита); + ТекстСообщения = СтрЗаменить(ТекстСообщения,"%3",Мд.ПолноеИмя()); + ВызватьИсключение ТекстСообщения; + КонецПопытки; - КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; - МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Компоновщик.ПолучитьНастройки(),,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); - Запрос = Новый Запрос(МакетКомпоновки.НаборыДанных.ОсновнойЗапрос.Запрос); - ПараметрыЗапроса = Запрос.НайтиПараметры(); - Для Каждого Параметр Из ПараметрыЗапроса Цикл - ПараметрМакетаСКД = МакетКомпоновки.ЗначенияПараметров.Найти(Параметр.Имя); - Запрос.УстановитьПараметр(Параметр.Имя, ПараметрМакетаСКД.Значение); - КонецЦикла; - РезультатЗапроса = Запрос.Выполнить(); + Если ЕстьТипы И РеквизитМд.Тип.Типы().Количество() = 1 Тогда + ДополнительныйТипЗначения = ""; + КонецЕсли; - Возврат РезультатЗапроса; + ДобавитьПростойРеквизитВВыгрузку(ЗаписьВыгрузки, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита); -КонецФункции + Если ЗначениеЗаполнено(РежимПоиска) Тогда + ЗаписьВыгрузки.Вставить("Режим", РежимПоиска); + КонецЕсли; -Функция ПолучитьСтрокуПолейОтбораРегистра(МенеджерНабораЗаписей) - - НаборЗаписей = МенеджерНабораЗаписей.СоздатьНаборЗаписей(); + Если ЗначениеЗаполнено(ДополнительныйТипЗначения) Тогда + ЗаписьВыгрузки.Вставить("ДополнительныйТипЗначения", ДополнительныйТипЗначения); + КонецЕсли; - Отбор = НаборЗаписей.Отбор; + ДанныеДляВыгрузки.Добавить(ЗаписьВыгрузки); + + Возврат Истина; - СтрокаПолейОтбора = ""; - Для Каждого ЭлементОтбора Из Отбор Цикл - Если НЕ ПустаяСтрока(СтрокаПолейОтбора) Тогда - СтрокаПолейОтбора = СтрокаПолейОтбора + ","; - КонецЕсли; - СтрокаПолейОтбора = СтрокаПолейОтбора + ЭлементОтбора.Имя; - КонецЦикла; - Возврат СтрокаПолейОтбора; КонецФункции -Функция СформироватьОтчетПоОтобраннымДанным(СтрокаДереваМетаданных) Экспорт +// аналог ОбработатьТабличныеЧастиОбъекта +Процедура ДобавитьТабличныеЧастиОбъектаВВыгрузку(ДанныеДляВыгрузки, МдТабличныеЧасти, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект) - СКД = ПодготовитьКомпоновщикДляВыгрузки(СтрокаДереваМетаданных); - - Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; - Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); - Компоновщик.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию); + Для каждого МдТч Из МдТабличныеЧасти Цикл + МдРеквизиты = МдТч.Реквизиты; + ИмяТЧ = МдТч.Имя; + + НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ; + + МассивСтрок = Новый Массив; + Для каждого строкаТчОбъекта Из объект[ИмяТЧ] Цикл + + МассивКолонокСтрок = Новый Массив; + ДобавитьРеквизитыТабличнойЧастиОбъектаВВыгрузку(МассивКолонокСтрок, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, строкаТчОбъекта, МдРеквизиты); + МассивСтрок.Добавить(МассивКолонокСтрок); + + КонецЦикла; + + СтрокаТЧ = Новый Структура; + СтрокаТЧ.Вставить(ИмяТЧ, МассивСтрок); + + ЗаписьТЧ = Новый Структура; + ЗаписьТЧ.Вставить("ТЧ", СтрокаТЧ); + + ДанныеДляВыгрузки.Добавить(ЗаписьТЧ); + КонецЦикла; - СистемныеПоля = Новый ПолеКомпоновкиДанных("СистемныеПоля"); - ПараметрыДанных = Новый ПолеКомпоновкиДанных("ПараметрыДанных"); - Для Каждого ДоступноеПоле Из Компоновщик.Настройки.ДоступныеПоляВыбора.Элементы Цикл - Если ДоступноеПоле.Поле = СистемныеПоля Или ДоступноеПоле.Поле = ПараметрыДанных Или ДоступноеПоле.Папка Тогда - Продолжить; - КонецЕсли; - ПолеНабора = СКД.НаборыДанных[0].Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); - ПолеНабора.Поле = Строка(ДоступноеПоле.Поле); - ПолеНабора.ПутьКДанным = Строка(ДоступноеПоле.Поле); +КонецПроцедуры + +// аналог ОбработатьРеквизитыТабличнойЧастиОбъекта +Процедура ДобавитьРеквизитыТабличнойЧастиОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, строкаТчОбъекта, МдРеквизиты) - ВыбранноеПоле = Компоновщик.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); - ВыбранноеПоле.Поле = ДоступноеПоле.Поле; + Мд = Объект.Метаданные(); + + Для каждого РеквизитМд Из МдРеквизиты Цикл + имяРеквизита = РеквизитМд.Имя; + ЗначениеРеквизита = строкаТчОбъекта[имяРеквизита]; + ДобавилиРеквизит = ДобавитьРеквизитОбъектаВВыгрузку(ДанныеДляВыгрузки, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, ШапкаДанных); КонецЦикла; - ПолеГруппировки = Компоновщик.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); - ПолеГруппировки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); +КонецПроцедуры + +// аналог ДобавитьДополнительныеСвойства +Процедура ДобавитьДопСвойстваВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект) - КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; - МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Компоновщик.ПолучитьНастройки()); - ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; - ПроцессорКомпоновки.Инициализировать(МакетКомпоновки); - ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; - ТабличныйДокумент = Новый ТабличныйДокумент; - ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент); - ПроцессорВывода.Вывести(ПроцессорКомпоновки); + ДопСвойства = Новый Структура(); + Для Каждого СтрокаТЧ Из ЭтотОбъект.ДополнительныеСвойства Цикл + ДопСвойства.Вставить(СтрокаТЧ.Имя, СтрокаТЧ.Значение); + КонецЦикла; - ТабличныйДокумент.ОтображатьЗаголовки = Ложь; - ТабличныйДокумент.ОтображатьСетку = Ложь; + Если ДопСвойства.Количество() > 0 Тогда + ЗаписьВыгрузки = Новый Структура; + МассивВыгрузкиДопСвойства = Новый Массив; + + ДобавитьДопСвойстваВВыгрузкуПоРежиму(МассивВыгрузкиДопСвойства, ШапкаДанных, "Режим", ДопСвойства); + + СоответствиеДопСвойств = Новый Структура; + СоответствиеДопСвойств.Вставить("ДополнительныеСвойства", МассивВыгрузкиДопСвойства); + ЗаписьВыгрузки.Вставить("ТЧ", СоответствиеДопСвойств); + + ДанныеДляВыгрузки.Вставить(ДанныеДляВыгрузки.Количество(), ЗаписьВыгрузки); + КонецЕсли; - Возврат ТабличныйДокумент; +КонецПроцедуры + +// аналог ДобавитьДопСвойстваВМакет +Процедура ДобавитьДопСвойстваВВыгрузкуПоРежиму(ДанныеДляВыгрузки, ШапкаДанных, ИмяРеквизита, СтруктураДопСвойств) -КонецФункции + Для Каждого ДопСвойство Из СтруктураДопСвойств Цикл + Структура = Новый Структура; + Структура.Вставить("Реквизит", ДопСвойство.Ключ); + Структура.Вставить("Значение", Строка(ДопСвойство.Значение)); + ДанныеДляВыгрузки.Добавить(Структура); + КонецЦикла; + +КонецПроцедуры -Функция ВыборкаИзРезультатаЗапросаВСтруктуру(РезультатЗапроса, СтрокаВыборки) +// аналог ОбработатьРежимыОбъекта +Процедура ДобавитьРежимыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект) - РезультирующаяСтруктура = Новый Структура; + Режимы = новый Массив; + Если ТолькоСоздание Тогда + Режимы.Добавить("ТолькоСоздание"); + КонецЕсли; + Если ОбменДанными Тогда + Режимы.Добавить("ОбменДанными"); + КонецЕсли; + Мета = Объект.Метаданные(); + Если Метаданные.Справочники.Содержит(Мета) И Объект.ЭтоГруппа Тогда + Режимы.Добавить("Группа"); + КонецЕсли; - Если РезультатЗапроса = Неопределено Или СтрокаВыборки = Неопределено Тогда - Возврат РезультирующаяСтруктура; + Если Режимы.Количество()>0 Тогда + ЗаписьВыгрузки = Новый Структура; + СтрокиТЧ = Новый Структура; + МассивЗаписейВыгрузкиДопСвойства = Новый Массив; + Для каждого Режим Из Режимы Цикл + ДобавитьПростойРеквизитВВыгрузку(МассивЗаписейВыгрузкиДопСвойства, ШапкаДанных, "Режим", Режим); + КонецЦикла; + + СтрокиТЧ.Вставить("xddMods", МассивЗаписейВыгрузкиДопСвойства); + ЗаписьВыгрузки.Вставить("ТЧ", СтрокиТЧ); + + ДанныеДляВыгрузки.Вставить(ДанныеДляВыгрузки.Количество(), ЗаписьВыгрузки); КонецЕсли; - Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл - РезультирующаяСтруктура.Вставить(Колонка.Имя, СтрокаВыборки[Колонка.Имя]); - КонецЦикла; +КонецПроцедуры + +// аналог ДобавитьПользователяИБ_ВМакет +Процедура ДобавитьПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных) - Возврат РезультирующаяСтруктура; + ДобавитьШапкуПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных); + + ДобавитьРеквизитыПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных); + ДобавитьРолиПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных); -КонецФункции +КонецПроцедуры -//Заполнение соответствий в английском языке. -Процедура ЗаполнитьСоответствие() - АнглийскоеСоответствие = Новый Соответствие; - АнглийскоеСоответствие.Вставить("Справочник", "Catalog"); - АнглийскоеСоответствие.Вставить("Документ", "Document"); - АнглийскоеСоответствие.Вставить("БизнесПроцесс", "BusinessProcess"); - АнглийскоеСоответствие.Вставить("Задача", "Task"); - АнглийскоеСоответствие.Вставить("ПланВидовРасчета", "ChartOfCalculationTypes"); - АнглийскоеСоответствие.Вставить("ПланВидовХарактеристик", "ChartOfCharacteristicTypes"); - АнглийскоеСоответствие.Вставить("ПланОбмена", "ExchangePlan"); - АнглийскоеСоответствие.Вставить("ПланСчетов", "ChartOfAccounts"); - АнглийскоеСоответствие.Вставить("РегистрСведений", "InformationRegister"); - АнглийскоеСоответствие.Вставить("РегистрНакопления", "AccumulationRegister"); - АнглийскоеСоответствие.Вставить("РегистрБухгалтерии", "AccountingRegister"); - АнглийскоеСоответствие.Вставить("Перечисление", "Enum"); - АнглийскоеСоответствие.Вставить("Наименование", "Description"); - АнглийскоеСоответствие.Вставить("Код", "Code"); - АнглийскоеСоответствие.Вставить("Родитель", "Parent"); - АнглийскоеСоответствие.Вставить("ЭтоГруппа", "IsFolder"); - АнглийскоеСоответствие.Вставить("ПометкаУдаления", "DeletionMark"); - АнглийскоеСоответствие.Вставить("Ссылка", "Ref"); - АнглийскоеСоответствие.Вставить("Предопределенный", "Predefined"); - АнглийскоеСоответствие.Вставить("ИмяПредопределенныхДанных","PredefinedDataName"); - АнглийскоеСоответствие.Вставить("Владелец", "Owner"); - АнглийскоеСоответствие.Вставить("Дата", "Date"); - АнглийскоеСоответствие.Вставить("Проведен", "Posted"); - АнглийскоеСоответствие.Вставить("Номер", "Number"); - АнглийскоеСоответствие.Вставить("Стартован", "Started"); - АнглийскоеСоответствие.Вставить("Завершен", "Completed"); - АнглийскоеСоответствие.Вставить("ВедущаяЗадача", "HeadTask"); - АнглийскоеСоответствие.Вставить("ТочкаМаршрута", "RoutePoint"); - АнглийскоеСоответствие.Вставить("Выполнена", "Executed"); - АнглийскоеСоответствие.Вставить("Период", "Period"); - АнглийскоеСоответствие.Вставить("Регистратор", "Recorder"); - АнглийскоеСоответствие.Вставить("Активность", "Active"); - АнглийскоеСоответствие.Вставить("НомерСтроки", "LineNumber"); - АнглийскоеСоответствие.Вставить("НомерОтправленного", "SentNo"); - АнглийскоеСоответствие.Вставить("НомерПринятого", "ReceivedNo"); - АнглийскоеСоответствие.Вставить("ПользовательИБ", "InfoBaseUser"); - АнглийскоеСоответствие.Вставить("РегистрСведенийНаборЗаписей","InformationRegisterRecordSet"); +// аналог ДобавитьШапкуПользователяИБ_ВМакет +Процедура ДобавитьШапкуПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных) -КонецПроцедуры + ЗаписьВыгрузки = Новый Структура; + + ДобавитьПростойРеквизитВВыгрузку(ЗаписьВыгрузки, ШапкаДанных, "", ОписательОбъекта.Значение); + + ЗаписьВыгрузки.Вставить("Тип", "ПользовательИБ"); + ЗаписьВыгрузки.Вставить("ИмяПеременной", ОписательОбъекта.ИмяПеременной); + + ДанныеДляВыгрузки.Добавить(ЗаписьВыгрузки); -//Функция возвращает полученное значение из списка соответствия в зависимости от языка -Функция ВернутьЗначениеСоответствия(ИскомоеЗначение) - ЗначениеСоответствия = ИскомоеЗначение; - Если ВариантВстроенногоЯзыкаАнглийский Тогда - ЭлементСоответствия = АнглийскоеСоответствие.Получить(ИскомоеЗначение); - Если НЕ ЭлементСоответствия = Неопределено Тогда - ЗначениеСоответствия = ЭлементСоответствия - КонецЕсли; - КонецЕсли; - Возврат ЗначениеСоответствия; -КонецФункции +КонецПроцедуры -Процедура СоздатьСтруктурумТЗКэшОбъектов() - мТЗКэшОбъектов = Новый ТаблицаЗначений(); - мТЗКэшОбъектов.Колонки.Добавить("МенеджерОбъекта"); - мТЗКэшОбъектов.Колонки.Добавить("МетаданныеИмя"); - мТЗКэшОбъектов.Колонки.Добавить("Наименование"); - мТЗКэшОбъектов.Колонки.Добавить("Код"); - мТЗКэшОбъектов.Колонки.Добавить("Ссылка"); +//аналог ДобавитьРеквизитыПользователяИБ_ВМакет +Процедура ДобавитьРеквизитыПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных) - мТЗКэшОбъектов.Индексы.Добавить("МенеджерОбъекта"); - мТЗКэшОбъектов.Индексы.Добавить("МетаданныеИмя"); -КонецПроцедуры //Получить - -Функция ПолучитьЗначениеИзКэша(МенеджерОбъекта,МетаданныеИмя,ПараметрыПоиска) - РезультатФункции = Новый Структура(); - пЗначениеИзКэша = Неопределено; - ЭтоЗначениеИзКэша = Ложь; - ПараметрыОтбора=Новый Структура(); - ПараметрыОтбора.Вставить("МенеджерОбъекта",МенеджерОбъекта); - ПараметрыОтбора.Вставить("МетаданныеИмя",МетаданныеИмя); - ПараметрыПоискаСтрока = ""; - Для каждого СтрокаПараметрыПоиска из ПараметрыПоиска цикл - ПараметрыОтбора.Вставить(СтрокаПараметрыПоиска.Ключ,СтрокаПараметрыПоиска.Значение); - ПараметрыПоискаСтрока = ПараметрыПоискаСтрока + "" +СтрокаПараметрыПоиска.Ключ + " ["+СтрокаПараметрыПоиска.Значение+"]"; - Конеццикла; - НайденныеСтроки = мТЗКэшОбъектов.НайтиСтроки(ПараметрыОтбора); - Если НайденныеСтроки.Количество()=1 тогда - пЗначениеИзКэша = НайденныеСтроки[0].Ссылка; - ЭтоЗначениеИзКэша = Истина; - ИначеЕсли НайденныеСтроки.Количество()>1 Тогда - ТекстСообщения = ПолучитьТекстСообщенияПользователю("Ошибка. Найдено более 1 значения в кэше МетаданныеИмя [%1] по указанным параметрам поиска %2"); - ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",МетаданныеИмя); - ТекстСообщения = СтрЗаменить(ТекстСообщения,"%2",ПараметрыПоискаСтрока); - Сообщить(ТекстСообщения); - Иначе - //Сообщить("Не найден "); - Конецесли; - РезультатФункции.Вставить("ЭтоЗначениеИзКэша",ЭтоЗначениеИзКэша); - РезультатФункции.Вставить("ЗначениеИзКэша",пЗначениеИзКэша); - Возврат РезультатФункции; -КонецФункции //ПолучитьЗначениеИзКэша(ДопПараметры) + параметрыПользователя = Новый Структура; + параметрыПользователя.Вставить("Имя", ""); + параметрыПользователя.Вставить("ПолноеИмя", ""); + параметрыПользователя.Вставить("АутентификацияСтандартная", Истина); + параметрыПользователя.Вставить("АутентификацияОС", Ложь); + параметрыПользователя.Вставить("ПользовательОС", ""); + параметрыПользователя.Вставить("ОсновнойИнтерфейс", ""); //Метаданные.Интерфейсы.Администратор); + параметрыПользователя.Вставить("ПоказыватьВСпискеВыбора", Истина); + параметрыПользователя.Вставить("РежимЗапуска", РежимЗапускаКлиентскогоПриложения.Авто); + //параметрыПользователя.Вставить("Язык", Метаданные.Языки.Русский); + + ЗаполнитьЗначенияСвойств(параметрыПользователя, ОписательОбъекта.ПользовательИБ); + // преобразуем к притивному типу т.к. мутабельные типы проблемно конвертировать в JSON + параметрыПользователя.ОсновнойИнтерфейс = Строка(параметрыПользователя.ОсновнойИнтерфейс); + параметрыПользователя.РежимЗапуска = Строка(параметрыПользователя.РежимЗапуска); + + параметрыПользователя.Вставить("Пароль", ""); + + МассивЗаписей = Новый Массив; + Для Каждого КлючЗначение Из параметрыПользователя Цикл + ДобавитьПростойРеквизитВВыгрузку(МассивЗаписей, ШапкаДанных, КлючЗначение.Ключ, КлючЗначение.Значение); + КонецЦикла; + + ДанныеДляВыгрузки.Добавить(МассивЗаписей); + +КонецПроцедуры -Процедура ДобавитьЗначениеВКэш(СсылкаНаОбъект,МенеджерОбъекта,МетаданныеИмя,ПараметрыПоиска) - СтрокамТЗКэшОбъектов = мТЗКэшОбъектов.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокамТЗКэшОбъектов,ПараметрыПоиска); - СтрокамТЗКэшОбъектов.Ссылка = СсылкаНаОбъект; - СтрокамТЗКэшОбъектов.МенеджерОбъекта = МенеджерОбъекта; - СтрокамТЗКэшОбъектов.МетаданныеИмя = МетаданныеИмя; -КонецПроцедуры //ДобавитьЗначениеВКэш(Справочники.Модели.ПустаяСсылка(),"Модели",ПараметрыПоиска) +// аналог ДобавитьРолиПользователяИБ_ВМакет +Процедура ДобавитьРолиПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных) + + МассивРолей = Новый Массив; + Роли = ОписательОбъекта.ПользовательИБ.Роли; + Для Каждого Роль Из Роли Цикл + ДобавитьПростойРеквизитВВыгрузку(МассивРолей, ШапкаДанных, "Роль", Роль.Имя); + КонецЦикла; + + ЗаписьРоли = Новый Структура; + ЗаписьРоли.Вставить("Роли", МассивРолей); + + ДанныеДляВыгрузки.Добавить(ЗаписьРоли); + +КонецПроцедуры #КонецОбласти -//#КонецОбласти ПроцедурыИФункции - #Область ИнициализацияПеременных ВариантВстроенногоЯзыкаАнглийский = ( Metadata.ScriptVariant = Metadata.ObjectProperties.ScriptVariant.English ); @@ -6169,5 +6870,3 @@ ЗаполнитьСоответствие(); #КонецОбласти - -//#КонецОбласти ИнициализацияПеременных 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..01a7bf2f5b 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" @@ -69,666 +69,746 @@ Group settings - Horizontal + Vertical None false - - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Группа страницы</v8:content> - </v8:item> - <v8:item> - <v8:lang>en</v8:lang> - <v8:content>Group page</v8:content> - </v8:item> - - - - ru - Группа страницы - - - en - Group page - - - + + AlwaysHorizontal + None + false + - + <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Метаданные</v8:content> + <v8:content>Группа страницы</v8:content> </v8:item> <v8:item> <v8:lang>en</v8:lang> - <v8:content>Metadata</v8:content> + <v8:content>Group page</v8:content> </v8:item> ru - Группа метаданные + Группа страницы en - Group metadata + Group page - true - + - + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Метаданные</v8:content> + </v8:item> + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Metadata</v8:content> + </v8:item> + + + + ru + Группа метаданные + + + en + Group metadata + + true - Horizontal - None - false - + - - Объект.ВыгружатьКод - Auto - - - - - Объект.ВыгружатьСсылку - Auto - - - - - Объект.СвязьПоГуид - Auto - - - - - Объект.ТолькоСоздание - Auto - - - - - Объект.ОбменДанными - Auto - - - - - Объект.ВариантВстроенногоЯзыкаАнглийский - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Язык программирования английский</v8:content> - </v8:item> - <v8:item> - <v8:lang>en</v8:lang> - <v8:content>Script variant English</v8:content> - </v8:item> - - Auto - - - - - Объект.УровеньВыгрузки - - - ru - Если значение = 0, то ограничений нет и выгружаются элементы с признаком "При необходимости" + + true + Horizontal + None + false + + + + Объект.ВыгружатьКод + Auto + + + + + Объект.ВыгружатьСсылку + Auto + + + + + Объект.СвязьПоГуид + Auto + + + + + Объект.ТолькоСоздание + Auto + + + + + Объект.ОбменДанными + Auto + + + + + Объект.ВариантВстроенногоЯзыкаАнглийский + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Язык программирования английский</v8:content> + </v8:item> + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Script variant English</v8:content> + </v8:item> + + 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 + + + + + + ДеревоМетаданныхПриАктивизацииСтроки + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа выбора объектов</v8:content> + </v8:item> + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Group choose objects</v8:content> + </v8:item> + + + + 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 - + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Таблица данных</v8:content> + </v8:item> + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Table of data</v8:content> + </v8:item> + + + + ru + Группа таблица данных + + + en + Group data table + + + - - Tree - false - false +
+ Listtrue - ExpandAllLevelstruetrueAsFile - Объект.ДеревоМетаданных - Объект.ДеревоМетаданных.ИндексКартинки - - RowsPicture.png - false - + Объект.ТаблицаДанныхNoneNoneNone - - - false + + + - - - + + - ДеревоМетаданных + ТаблицаДанных SearchStringRepresentation - - + + - + - ДеревоМетаданных + ТаблицаДанных ViewStatusRepresentation - - + + - + - ДеревоМетаданных + ТаблицаДанных SearchControl - - + + - - ДеревоМетаданныхПриАктивизацииСтроки - - - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Группа выбора объектов</v8:content> - </v8:item> - <v8:item> - <v8:lang>en</v8:lang> - <v8:content>Group choose objects</v8:content> - </v8:item> - - - - ru - Группа выбора объектов - - - en - Group choose objects - - - InCell - - - - Объект.ДеревоМетаданных.Выгружать - EnterOnInput - false - true - - - - ДеревоМетаданныхВыгружатьПриИзменении - - - - Объект.ДеревоМетаданных.ПолноеИмяМетаданных - true - EnterOnInput - - - - - - - Объект.ДеревоМетаданных.ВыгружатьПриНеобходимости - Right + + EnterOnInput + + + + + Объект.ТаблицаДанных.Ссылка EnterOnInput - true - - + + - ДеревоМетаданныхВыгружатьПриНеобходимостиПриИзменении + ТаблицаДанныхСсылкаПриИзменении + + + Объект.ТаблицаДанных.Метаданное + EnterOnInput + + + + + Объект.ТаблицаДанных.ИмяПеременной + EnterOnInput + + + + + Объект.ТаблицаДанных.ВыгружатьКод + EnterOnInput + Auto + + + + Объект.ТаблицаДанных.РежимПоиска + EnterOnInput + + + + + Объект.ТаблицаДанных.РежимСоздания + EnterOnInput + + +
- - Tree - true - ExpandAllLevels + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пользователи ИБ</v8:content> + </v8:item> + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Users of database</v8:content> + </v8:item> + + + + ru + Группа пользователи ИБ + + + en + Group users IB + + + + +
+ List + truetruetrueAsFile - Объект.КомпоновщикНастроекКомпоновкиДанных.Settings.Filter + Объект.ПользователиИБNoneNoneNone - All - false - - - - - - - - + + + + + - КомпоновщикОтбор + ПользователиИнфБазы SearchStringRepresentation - - + + - + - КомпоновщикОтбор + ПользователиИнфБазы ViewStatusRepresentation - - + + - + - КомпоновщикОтбор + ПользователиИнфБазы SearchControl - - + + - - КомпоновщикОтборПриОкончанииРедактирования - КомпоновщикОтборПослеУдаления - + + + Объект.ПользователиИБ.LineNumber + EnterOnInput + + + + + Объект.ПользователиИБ.Имя + EnterOnInput + + + + + Объект.ПользователиИБ.ПолноеИмя + EnterOnInput + + + + + Объект.ПользователиИБ.Роли + EnterOnInput + + + + + Объект.ПользователиИБ.АутентификацияСтандартная + EnterOnInput + + + + + Объект.ПользователиИБ.АутентификацияОС + EnterOnInput + + + + + Объект.ПользователиИБ.ПользовательОС + EnterOnInput + + + +
-
+
- - + + + Top + 4 + true + true + true + AsFile + Объект.ДополнительныеСвойства <v8:item> <v8:lang>ru</v8:lang> - <v8:content>Таблица данных</v8:content> + <v8:content>Дополнительные свойства</v8:content> </v8:item> <v8:item> <v8:lang>en</v8:lang> - <v8:content>Table of data</v8:content> + <v8:content>Additional properties</v8:content> </v8:item> - - - ru - Группа таблица данных - - - en - Group data table - - - + None + None + None + + + + + + + ДополнительныеСвойства + SearchStringRepresentation + + + + + + + ДополнительныеСвойства + ViewStatusRepresentation + + + + + + + ДополнительныеСвойства + SearchControl + + + + -
- List - true - true - true - AsFile - Объект.ТаблицаДанных - None - None - None - - - - - - - - - - - ТаблицаДанных - SearchStringRepresentation - - - - - - - ТаблицаДанных - ViewStatusRepresentation - - - - - - - ТаблицаДанных - SearchControl - - - - - - - EnterOnInput - - - - - Объект.ТаблицаДанных.Ссылка - EnterOnInput - - - - ТаблицаДанныхСсылкаПриИзменении - - - - Объект.ТаблицаДанных.Метаданное - EnterOnInput - - - - - Объект.ТаблицаДанных.ИмяПеременной - EnterOnInput - - - - - Объект.ТаблицаДанных.ВыгружатьКод - EnterOnInput - Auto - - - - - Объект.ТаблицаДанных.РежимПоиска - EnterOnInput - - - - - Объект.ТаблицаДанных.РежимСоздания - EnterOnInput - - - - -
+ + Объект.ДополнительныеСвойства.LineNumber + + false + + EnterOnInput + 1 + + + + + Объект.ДополнительныеСвойства.Имя + EnterOnInput + 14 + + + + + Объект.ДополнительныеСвойства.Значение + EnterOnInput + 20 + + + -
- - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Пользователи ИБ</v8:content> - </v8:item> - <v8:item> - <v8:lang>en</v8:lang> - <v8:content>Users of database</v8:content> - </v8:item> - - - - ru - Группа пользователи ИБ - - - en - Group users IB - - - + + + + + None + false + + + + Vertical + None + false + - - List - true - true - true - AsFile - Объект.ПользователиИБ - None - None - None - - - - - - - ПользователиИнфБазы - SearchStringRepresentation - - - - - - - ПользователиИнфБазы - ViewStatusRepresentation - - - - - - - ПользователиИнфБазы - SearchControl - - - - + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа макеты</v8:content> + </v8:item> + + + + ru + Группа макеты + + + - - Объект.ПользователиИБ.LineNumber - EnterOnInput - - - - - Объект.ПользователиИБ.Имя - EnterOnInput - - - - - Объект.ПользователиИБ.ПолноеИмя - EnterOnInput - - - - - Объект.ПользователиИБ.Роли - EnterOnInput - - - - - Объект.ПользователиИБ.АутентификацияСтандартная - EnterOnInput - - - - - Объект.ПользователиИБ.АутентификацияОС - EnterOnInput - - - - - Объект.ПользователиИБ.ПользовательОС - EnterOnInput - - - + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>XML</v8:content> + </v8:item> + + + + ru + Группа XML + + + + + + Макет + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Макет данных</v8:content> + </v8:item> + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Data layout</v8:content> + </v8:item> + + None + DontShow + true + true + true + true + WhenActive + Enable + true + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>JSON</v8:content> + </v8:item> + + + + ru + Группа макет JSON + + + + + + МакетJSON + None + + + + + -
+
-
- - - - Top - 4 - true - true - true - AsFile - Объект.ДополнительныеСвойства - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Дополнительные свойства</v8:content> - </v8:item> - <v8:item> - <v8:lang>en</v8:lang> - <v8:content>Additional properties</v8:content> - </v8:item> - - None - None - None - - - - - - - ДополнительныеСвойства - SearchStringRepresentation - - - - - - - ДополнительныеСвойства - ViewStatusRepresentation - - - - - - - ДополнительныеСвойства - SearchControl - - - - - - - Объект.ДополнительныеСвойства.LineNumber - - false - - EnterOnInput - 1 - - - - - Объект.ДополнительныеСвойства.Имя - EnterOnInput - 14 - - - - - Объект.ДополнительныеСвойства.Значение - EnterOnInput - 20 - - - + -
+ - - Макет - - <v8:item> - <v8:lang>ru</v8:lang> - <v8:content>Макет данных</v8:content> - </v8:item> - <v8:item> - <v8:lang>en</v8:lang> - <v8:content>Data layout</v8:content> - </v8:item> - - None - DontShow - true - true - true - true - WhenActive - Enable - true - - - @@ -893,6 +973,17 @@ If value is > 1, then paged sub-elements of this level or lower according to< + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Макет JSON</v8:content> + </v8:item> + + + d5p1:TextDocument + + 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..3bab63b2b3 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 @@ &НаКлиенте Процедура ПротестироватьЗагрузкуМакета(Команда) - ПроверитьЗагрузкуМакетаСервер(Макет); + + МакетДляЗаполнения = ПолучитьМакетЗаполнения(); + + ПроверитьЗагрузкуМакетаСервер(МакетДляЗаполнения); + КонецПроцедуры &НаКлиенте @@ -153,7 +159,15 @@ &НаСервере Функция СоздатьМакетДанныхПоТаблицеДанныхСервер() - Возврат Объект().СоздатьМакетДанныхПоТаблицеДанных(Макет); + + МакетДляЗаполнения = ПолучитьМакетЗаполнения(); + + НовыйМакет = Объект().СоздатьМакетДанныхПоТаблицеДанных(МакетДляЗаполнения); + + ЗаполнитьМакетНовымиДанными(НовыйМакет); + + Возврат НовыйМакет; + КонецФункции &НаСервере @@ -161,23 +175,69 @@ ОбъектНаСервере = Объект(); ЗаполнитьДеревоМетаданныхНаСервере(ОбъектНаСервере); - НовыйМакет = ОбъектНаСервере.СоздатьМакетДанныхПоМетаданным(Макет); + + МакетДляЗаполнения = ПолучитьМакетЗаполнения(); + + НовыйМакет = ОбъектНаСервере.СоздатьМакетДанныхПоМетаданным(МакетДляЗаполнения); + + ЗаполнитьМакетНовымиДанными(НовыйМакет); + ЗначениеВРеквизитФормы(ОбъектНаСервере.ДеревоМетаданных, "Объект.ДеревоМетаданных"); Возврат НовыйМакет; КонецФункции +&НаСервере Функция СоздатьМакетДанныхПоПользователямИБСервер(МассивИменПользователей) - Возврат Объект().СоздатьМакетДанныхПоПользователямИБ(Макет, МассивИменПользователей); + + МакетДляЗаполнения = ПолучитьМакетЗаполнения(); + + НовыйМакет = Объект().СоздатьМакетДанныхПоПользователямИБ(МакетДляЗаполнения, МассивИменПользователей); + + ЗаполнитьМакетНовымиДанными(НовыйМакет); + + Возврат НовыйМакет; + КонецФункции &НаСервере -Процедура ПроверитьЗагрузкуМакетаСервер(ТабличныйДокумент) - Объект().ПроверитьЗагрузкуМакета(ТабличныйДокумент); +Процедура ПроверитьЗагрузкуМакетаСервер(Макет) + + Объект().ПроверитьЗагрузкуМакета(Макет); + КонецПроцедуры +&НаСервере +Функция ОбработкаМакетаJSON() + + Возврат Элементы.ГруппаМакеты.ТекущаяСтраница.Имя = "ГруппаМакетJSON"; + +КонецФункции + +&НаСервере +Функция ПолучитьМакетЗаполнения() + + Если ОбработкаМакетаJSON() Тогда + МакетДляЗаполнения = МакетJSON; + Иначе + МакетДляЗаполнения = Макет; + КонецЕсли; + + Возврат МакетДляЗаполнения; + +КонецФункции +&НаСервере +Процедура ЗаполнитьМакетНовымиДанными(НовыйМакет) + + Если ОбработкаМакетаJSON() Тогда + МакетJSON = НовыйМакет; + Иначе + Макет = НовыйМакет; + КонецЕсли; + +КонецПроцедуры &НаСервере @@ -301,7 +361,8 @@ УстановитьПометкиПодчиненных(ТекущиеДанные, "Выгружать"); УстановитьПометкиРодителей(ТекущиеДанные, "Выгружать"); - УровеньВыгрузкиПриИзменении(Элемент); + УровеньВыгрузкиПриИзменении(Элемент); + КонецПроцедуры &НаКлиенте @@ -553,4 +614,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 1bb3277ed2dcac2bdbb0e3d6d4a83fc14c5106a1..5da18caf1246ce487cad705a5534e0c38b9d6af1 100644 GIT binary patch delta 4655 zcmc&%ZEO_B8D_?3`~m0SU}J1^u(Ex&uh}&_v$J0XN+4DnRiS`d3JFb`{cIG}ic0C9 zMqmtzNC7D%0~tiXBu&*wEkTAWI>JYwt*S=(QSJR|6e%t=s`>*p5JXy)DskW4vwcUv zaHvswtJ99>-p}WG-*?6rFEqUO*M_}IX8&#`o>5zeXN-@J4;^1ShF*NKkuS!J(ia|n z#~T~OGm8;mGx|GvYwr=u=J>Adb|Cri|keOdS^BYLDWg=U#AegnhkTPm1 znreFrb6BWYf#oQa5Yx5{*EY>i78mv-#y^o$l2PXe?&f%{l@dUc7 ztD5O4foaFmK7)9CUvV^7^-ShiMxai`(~&>i@OPB;4WER8PZU*Wfx>(Za?o_97%F8> zU>kvFu#!&xgINo3kLI|R>pKvzZL12SDg;A_ub95$QOEYcsaKBQ(V3|cR|AABkaj%C z)(xqmTAr$fmce}8E=$|s%Vo?_0*gZYmZ2(Es1k+RVc-zmC$=6Y(uj!jze2RvlB-r(Rt5TRb=_^we{irE@^%})>VPlVu^3wm*VgAKaWU$ zZSDY4O$LoYOO2tbz6WLNDz>FEDDA+6iq$;D)d^wL@H|)3Vj{nvHBHJw3YFw&s;Mv| zAc{pbOHmC6s+Ra_;M!9q+s18~<~!tllNn~oU1Iqwh!(aUK`+;2osj67u4zg@ z3}{@90Wo%9DY|30hE0MnU}g#A!Vh0ZH&E6zbOSybw6+UvYkIokgs?I!JJg-faCE<7 zkQ5&OCGu0H^lg}KR$%B#;M>3_^(`RXfEETIben{(=b2OKtG$|BjVsaiYgFi|#`GlR zPvxr0Iqny6=_qOu{l7p93eiz?!r%*cT0H+M;X8LeTG;(HJetgQ# z5U+m)wH4kU#M#;NR9TfZ%}5R#3Tq-O#9(6UcQE1G9;p>e2l0A-bzc+G3dh#s9W{s* z=sNrdG@WAOddz2&(n$nWsBRG>>+wpYi%an0>Z%mqC1s%r`EluCvHX3s=cPr>%mBBL z40tCMhh1{;Rct3qJ&}Nzxs>WeI^W&B6;WPH&8yk4>JgsH{xk*eE>T>EyZF^?d+M9t zUj40jyEa}->|g0kBa1)QM>}l-2Q55s^1{O=&R;4MX7D%qGJJMlPqz){a!H1Oj8T@+ zVjTingwN`ixY4h77_v=mnb}~Wln}&BWhhU=n};RdnHdplR^Ym&vB@oo&)7!%7_u3^ z6CMbYyCPoPR@@Pthi5c81mDxq$>R3t?dSx*lxag6A8IGF3{Xo_U`GC2yHr!TA&PIJ z#bQjLE!fut;wvCBKvWGs-t-V)~!xDDwg$rAQMiGUZ>F z273wf;5Go~zZ-fQ^h+2hwg*Fy`i{!%&{qjuICTCOJQ#Dm5fQ$y?m=Ym3lH^o#&jk& zlbkI`B~Au_(bQXFf0{q5Hm9dxNJzbuSs>1@z%xbn2Hb%e70Wl^KLhG;*NU%OEWT@% z7I520K2o~zrt6tF_94oo4eGgxY`iGE_aU0!Eb2OOTFmdkovpW}L40%>bq@_h2comZ z7o=rUS5jP3^mE`RAN?j8O*b|)RIs)$I#YZh62RhlkT?^ai%!D#RH7Rlj!7-9Y^+h-zNEtNvbY|mwLB2Lo){VhM_?bEZ7=RAJLngeuAv3a zO^6OeN8;#;JBmAR5zpmf*O2hJXcT@vSrNw_!w@&FBbKcS3t@eNzAAoFi(6~J`u!+Zcyhg)T66OUh-n+tAgYTOywL7%ddPA4jJ6 z=pU$as4PD%6$x~4NR<{#e3Z2(tKe*O3X+XkI|l^-fAyCOq@2@~$*z}xvI5l4HsEEu zbURt`+cfSHi^h>9mVJ!oiXVN3n!hB3z+dbC8==0tBebLe*b!(Po%m94`EIsM`?N(P zOJaB&2KeghXy(utT{>|wRsjo$r5mGzk$5+a+v5tFBR2mBr8KCu=y>!tjGxo6Dkn1< zkHLPpNyT{H>_A++hB9{;rgJ_&OsA@L&d}$lQrTf;LrqN7Dfjz}!!T)2Nzq7jJnoJ= zMSRD}J@mzm?t7n~Frvh#*AW%}nu}YETVRzc(4V%HN>Gk<;udi+hwraw$a@?*6U6>6 z$i5k!5r4ae=9hzrYvyi;)$PXGJ)c(K8V=EkgH&9(hML5SH_#&7(2$&kV(}-aqh%72 zx5~ig#E)z70`aFhEQ#@dqn7=z;V1WhhJPTQ%i!+9a|pAgP4MrdBTZd1xU*_$Va=m> HPThY2G!)=w delta 2317 zcma)7ZD^HM9QT}UZq9A!)^yF??dtBfrq5yL{hTL_Bqc1wmnft{^E_|h3sRrce5D`^ zTu*s4QWTWYH}xWq^db5pffQYZ(t>p5hdu})y%{LkdG2(ZAatM0z0dzS_y77k&+m7x z{W5F(%UOq(w(PqJW?XdN`}gnfKD+)p7~R~Qj=;Xw@twoHt5?Dq)qDCn?CxYbEMkmF zj1!R?ltsp*@52R<`{glM086OX+Wa>52=U0S2PX6IF7Ls*np!65%=*ECoN%HZd*H4n zEkaUWKTwY9?*O3fjZv_;{O-&G7-1gqbRMQW8K^iCK0&@uCE_um&Jq;iDCR_lA`zI{ z+lRr1^!S{nk~Bj2p&%$=h9RB^hJw%!kTFWjfJmy1Kjp2k3W<;*Vu6Sd51I28fkZly ziB6bQAtqDavB8?fiX&!x?7S62n)w{Xlv5YRd`*=dJr35{jcsrwUDwi>76GxJNf<@qP-}!k<|D4d0O`oJ zX#{luBynO)HDpb>*mMh&Br%bceuBc#cQ_^3cb*ud#C5D=>~k7Tn+1nLn;>Q=@r7~y zaEeUe@YMlku|t(7TBhfkkELUCX>FjMu%M83w{P#S0j2b__6wz&z;{_!rdvBl(tkQS zYXUJPPh2k5^v+ZpUeUR2Ni9I<@1ph=rF~62ZJl?pHngi1ew??hR14bWE%S$<{pcP* zt=eN8dp`9&?$hk+d!Sg?`^cJON0ox^hgNx*p8TZOetZ|4usg4SmIg;oPoKXEUjZ#H zj>&2+#;t%*%yqe|JfvRkhKNi@_c{h01r7H4U9e#`o5)QZ2h(rsx=NF@o(QWF-J6$P^zgy zb#LwrZe3DKfrq=le8Ag(VJN#W1a@r0OivAkW0J%qS0#lh;>K}G`yxP!yUUHQa1u-# zN>USZ9C9S3aznXEke^VD0`BWDj6)pzqB@ja_B<@wAJ#&g{hosFV0vJX_199%jrZQd z|1FcPIs&fLl~@!}CZiDfnh~coO1SQI;51Z(i3+s}w47+?-!V|MJ;wmcmCfc)nR{9f zN?IA5P!ggjO1J|+IXwy8{zeINYDt}1Q9ca-A$5Wy2LN+|j(B98LSrRSqD*3N#KT0= z%bZJj*W{Xx6*GDIAN${;wrW_ zKXRPf-)6!>t2>Tl)i*b?u1453x4H6Z(uz?4=?F$07+U4D_$G+7K zSAk&*X2X8FsTY#8w~1w&7Qm&AZIurzUsSTnxyyShXI%80e)zIw-S8>fF$_K1Gw7^0 zO0e`8KR^GY!+y0M7VMgCSL$KJfyX+p8-jg#<`VRZcJq8lbN_<9QFJ-RJ-FGfKrpiP zvtcp2gdkrwhf-e^r$LeKJ-Q|RV9%@Bi$8(A^^mCSo1ejP0C=|jCU~i3QYY-%Kft0X z`Kbz69ri@_=54UQu1;~BG_!~S2ls)Ti_MLIiXuofO V9guK)s{vk3PmQ!^#jQ{`{s-3Qpe+CZ From 431ede4d224c791fba65a9d639862c3b039f5e45 Mon Sep 17 00:00:00 2001 From: "pavel.makarov" Date: Wed, 20 Nov 2024 15:30:36 +0700 Subject: [PATCH 2/2] =?UTF-8?q?#2226=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BA=D0=BE=D0=BD=D0=B2=D0=B5=D1=80=D1=82=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8E=20=D0=BC=D0=B0=D0=BA=D0=B5=D1=82=D0=B0=20mxl?= =?UTF-8?q?=20=D0=B2=20json=20=D0=B2=20=D0=B1=D0=B0=D0=B7=D0=B5=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20mxl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Ext/ObjectModule.bsl" | 248 +++++++++++------- .../Ext/Form.xml" | 20 ++ .../Ext/Form/Module.bsl" | 18 ++ .../Ext/Form.bin" | Bin 160088 -> 161903 bytes 4 files changed, 197 insertions(+), 89 deletions(-) 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 bb4ad838b6..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,56 +139,7 @@ Если РежимыЗагрузки <> Неопределено Тогда ТипПараметра = ТипЗнч(РежимыЗагрузки); Если ТипПараметра <> Тип("Структура") Тогда - ТекстСообщения = ПолучитьТекстСообщенияПользователю("Ожидали, что вторым параметром будет передана структура параметров для метода <СоздатьДанныеПоТабличномуДокументу>, а получили другой объект с типом <%1>"); - ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",ТипПараметра); - ВызватьИсключение(ТекстСообщения); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - МассивТабличныхДокументов = Новый Массив(); - Если ТипЗнч(ТабличныйДокументИлиМассивТабличныхДокументов) = Тип("ТекстовыйДокумент") Тогда - МассивТабличныхДокументов.Добавить(ТабличныйДокументИлиМассивТабличныхДокументов); - ИначеЕсли ТипЗнч(ТабличныйДокументИлиМассивТабличныхДокументов) = Тип("Массив") Тогда - МассивТабличныхДокументов = ТабличныйДокументИлиМассивТабличныхДокументов; - КонецЕсли; - - Данные = СоздатьДанныеИзМакетов(МассивТабличныхДокументов, РежимыЗагрузки, ИмяКолонкиЗамещения); - - ЗначениеСоответствияРегистрСведений = ВернутьЗначениеСоответствия("РегистрСведенийНаборЗаписей"); - ЗначениеСоответствияРегистрНакопления = ВернутьЗначениеСоответствия("РегистрНакопленияНаборЗаписей"); - ЗначениеСоответствияРегистрБухгалтерии = ВернутьЗначениеСоответствия("РегистрБухгалтерииНаборЗаписей"); - ЗначениеСоответствияРегистрРасчета = ВернутьЗначениеСоответствия("РегистрРасчетаНаборЗаписей"); - - Для каждого Элем Из Данные Цикл - Стр = Строка(Элем.Значение); - Если Найти(Стр, ЗначениеСоответствияРегистрСведений) > 0 Тогда - ИмяРегистра = Сред(Стр, СтрДлина(ЗначениеСоответствияРегистрСведений) + 2); - Данные[Элем.Ключ] = ПолучитьКлючиЗаписиРСПоНаборуЗаписейРС(Элем.Значение, ИмяРегистра); - ИначеЕсли Найти(Стр, ЗначениеСоответствияРегистрНакопления) > 0 Тогда - ИмяРегистра = Сред(Стр, СтрДлина(ЗначениеСоответствияРегистрНакопления) + 2); - Данные[Элем.Ключ] = ПолучитьКлючиЗаписиРСПоНаборуЗаписейРН(Элем.Значение, ИмяРегистра); - КонецЕсли; - КонецЦикла; - - Возврат Данные; - -КонецФункции - -Функция СоздатьДанныеПоТабличномуДокументу(ТабличныйДокументИлиМассивТабличныхДокументов, РежимыЗагрузкиИлиИмяКолонкиЗамещения = Неопределено, ИмяКолонкиЗамещения = Неопределено) Экспорт - - Перем РежимыЗагрузки; - - СоздатьСтруктурумТЗКэшОбъектов(); - - Если ТипЗнч(РежимыЗагрузкиИлиИмяКолонкиЗамещения) = Тип("Строка") Тогда - ИмяКолонкиЗамещения = РежимыЗагрузкиИлиИмяКолонкиЗамещения; - Иначе - РежимыЗагрузки = РежимыЗагрузкиИлиИмяКолонкиЗамещения; - Если РежимыЗагрузки <> Неопределено Тогда - ТипПараметра = ТипЗнч(РежимыЗагрузки); - Если ТипПараметра <> Тип("Структура") Тогда - ТекстСообщения = ПолучитьТекстСообщенияПользователю("Ожидали, что вторым параметром будет передана структура параметров для метода <СоздатьДанныеПоТабличномуДокументу>, а получили другой объект с типом <%1>"); + ТекстСообщения = ПолучитьТекстСообщенияПользователю("Ожидали, что вторым параметром будет передана структура параметров для метода <СоздатьДанныеПоДокументуМакета>, а получили другой объект с типом <%1>"); ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",ТипПараметра); ВызватьИсключение(ТекстСообщения); КонецЕсли; @@ -212,13 +163,34 @@ ЗначениеСоответствияРегистрРасчета = ВернутьЗначениеСоответствия("РегистрРасчетаНаборЗаписей"); Для каждого Элем Из Данные Цикл + // при передаче на упр. форму при загрузке фикстуры не сериализуется набор записей + // но при конвертации макетов проблем не возникает Стр = Строка(Элем.Значение); Если Найти(Стр, ЗначениеСоответствияРегистрСведений) > 0 Тогда ИмяРегистра = Сред(Стр, СтрДлина(ЗначениеСоответствияРегистрСведений) + 2); - Данные[Элем.Ключ] = ПолучитьКлючиЗаписиРСПоНаборуЗаписейРС(Элем.Значение, ИмяРегистра); + Если ВозвращатьНаборЗаписей Тогда + Результат = Новый Массив; + Результат.Добавить(Элем.Значение); + Данные[Элем.Ключ] = Результат; + Иначе + Данные[Элем.Ключ] = ПолучитьКлючиЗаписиРСПоНаборуЗаписейРС(Элем.Значение, ИмяРегистра); + КонецЕсли; ИначеЕсли Найти(Стр, ЗначениеСоответствияРегистрНакопления) > 0 Тогда ИмяРегистра = Сред(Стр, СтрДлина(ЗначениеСоответствияРегистрНакопления) + 2); - Данные[Элем.Ключ] = ПолучитьКлючиЗаписиРСПоНаборуЗаписейРН(Элем.Значение, ИмяРегистра); + Если ВозвращатьНаборЗаписей Тогда + Результат = Новый Массив; + Результат.Добавить(Элем.Значение); + Данные[Элем.Ключ] = Результат; + Иначе + Данные[Элем.Ключ] = ПолучитьКлючиЗаписиРСПоНаборуЗаписейРН(Элем.Значение, ИмяРегистра); + КонецЕсли; + ИначеЕсли Найти(Стр, ЗначениеСоответствияРегистрБухгалтерии) > 0 Тогда + ИмяРегистра = Сред(Стр, СтрДлина(ЗначениеСоответствияРегистрБухгалтерии) + 2); + Если ВозвращатьНаборЗаписей Тогда + Результат = Новый Массив; + Результат.Добавить(Элем.Значение); + Данные[Элем.Ключ] = Результат; + КонецЕсли; КонецЕсли; КонецЦикла; @@ -327,6 +299,12 @@ Возврат Результат; КонецФункции +Функция СоздатьДанныеПоТабличномуДокументу(ТабличныйДокумент, РежимыЗагрузки, ИмяКолонкиЗамещения) Экспорт + // для обратной совместимости + Данные = СоздатьДанныеПоДокументуМакета(ТабличныйДокумент, РежимыЗагрузки, ИмяКолонкиЗамещения); + Возврат Данные; +КонецФункции + Функция СоздатьДанныеИзМакетов(МассивТабличныхДокументов, РежимыЗагрузки, ИмяКолонкиЗамещения) ПротоДанные = Новый Структура; Для каждого ТабличныйДокумент Из МассивТабличныхДокументов Цикл @@ -762,7 +740,7 @@ ОбъектСсылка = СоздатьОбъект_ПВХ(ПротоДанные,ПротоОбъект); ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("ПланСчетов") Тогда ОбъектСсылка = СоздатьОбъект_ПланСчетов(ПротоДанные,ПротоОбъект); - ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("ПланВидовРасчетов") Тогда + ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("ПланВидовРасчета") Тогда ОбъектСсылка = СоздатьОбъект_ПланВидовРасчетов(ПротоДанные,ПротоОбъект); КонецЕсли; ПротоОбъект.Объект = ОбъектСсылка; @@ -1584,13 +1562,9 @@ Для каждого мдТабЧасть из Объект.Метаданные().ТабличныеЧасти Цикл ЭтоРежимГруппа = ПротоОбъект.Режимы.Группа; - Если (ЭтоРежимГруппа И мдТабЧасть.Использование<>Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляЭлемента) - Или (НЕ ЭтоРежимГруппа И мдТабЧасть.Использование<>Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппы) Тогда - - Объект[мдТабЧасть.Имя].Очистить(); - КонецЕсли; - + Объект[мдТабЧасть.Имя].Очистить(); КонецЦикла; + Для каждого ТабЧасть из ПротоОбъект.ТабличныеЧасти Цикл Для каждого СтрокаТабЧасти Из ТабЧасть.Значение Цикл СтрокаТабЧастиОбъекта = Объект[ТабЧасть.Ключ].Добавить(); @@ -2488,17 +2462,9 @@ Функция ВыгрузитьДанныеВМакетJSON(ДанныеДляВыгрузки) - МакетJSON = Новый ТекстовыйДокумент; - - КонвертированныйJSON = ПодготовитьJSON(ДанныеДляВыгрузки); - - ПараметрыЗаписи = Новый ПараметрыЗаписиJSON( , Символы.Таб); - Запись = Новый ЗаписьJSON; - Запись.ПроверятьСтруктуру = Ложь; - Запись.УстановитьСтроку(ПараметрыЗаписи); - ЗаписатьJSON(Запись, КонвертированныйJSON,,"ПреобразованиеНеПоддерживаемыхТипов", ЭтотОбъект); - ТекстJSON = Запись.Закрыть(); - + МакетJSON = Новый ТекстовыйДокумент; + СтруктураJSON = ПодготовитьJSON(ДанныеДляВыгрузки); + ТекстJSON = КонвертироватьДанныеВJSON(СтруктураJSON); МакетJSON.УстановитьТекст(ТекстJSON); Возврат МакетJSON; @@ -3798,11 +3764,7 @@ Процедура ПроверитьЗагрузкуМакета(Макет) Экспорт НачатьТранзакцию(); - Если ТипЗнч(Макет) = Тип("ТабличныйДокумент") Тогда - ТестовыеДанные = СоздатьДанныеПоТабличномуДокументу(Макет); - ИначеЕсли ТипЗнч(Макет) = Тип("ТекстовыйДокумент") Тогда - ТестовыеДанные = СоздатьДанныеПоТекстовомуДокументу(Макет); - КонецЕсли; + ТестовыеДанные = СоздатьДанныеПоДокументуМакета(Макет); Если ТестовыеДанные.Количество() = 0 Тогда ВызватьИсключение ПолучитьТекстСообщенияПользователю("не заполнены тестовые данные. Возможно, макет данных пуст."); @@ -6297,6 +6259,20 @@ СтрокамТЗКэшОбъектов.МетаданныеИмя = МетаданныеИмя; КонецПроцедуры //ДобавитьЗначениеВКэш(Справочники.Модели.ПустаяСсылка(),"Модели",ПараметрыПоиска) +Функция КонвертироватьМакет(Макет) Экспорт + + Если ТипЗнч(Макет) = Тип("ТабличныйДокумент") Тогда + ВозвращатьНаборЗаписей = Истина; + Данные = СоздатьДанныеПоДокументуМакета(Макет, ,, ВозвращатьНаборЗаписей); + НовыйМакет = КонвертироватьДанныеВМакетJSON(Данные); + ИначеЕсли ТипЗнч(Макет) = Тип("ТекстовыйДокумент") Тогда + ВызватьИсключение "Конвертация из JSON в XML не реализована"; + КонецЕсли; + + Возврат НовыйМакет; + +КонецФункции + #КонецОбласти //#КонецОбласти ПроцедурыИФункции @@ -6304,6 +6280,112 @@ //#КонецОбласти ИнициализацияПеременных #Область СлужебныеПроцедурыИФункции +Функция КонвертироватьДанныеВJSON(СтруктураJSON) + + ПараметрыЗаписи = Новый ПараметрыЗаписиJSON( , Символы.Таб); + Запись = Новый ЗаписьJSON; + Запись.ПроверятьСтруктуру = Ложь; + Запись.УстановитьСтроку(ПараметрыЗаписи); + ЗаписатьJSON(Запись, СтруктураJSON,,"ПреобразованиеНеПоддерживаемыхТипов", ЭтотОбъект); + ТекстJSON = Запись.Закрыть(); + + Возврат ТекстJSON; + +КонецФункции + +Функция КонвертироватьДанныеВМакетJSON(Данные) + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + СтруктураJSON = КонвертироватьПротоОбъектыВСтруктуруДляJSON(Данные); + ТекстJSON = КонвертироватьДанныеВJSON(СтруктураJSON); + ТекстовыйДокумент.УстановитьТекст(ТекстJSON); + + Возврат ТекстовыйДокумент; + +КонецФункции + +Функция КонвертироватьПротоОбъектыВСтруктуруДляJSON(ДанныеПротоМодель) + + ШапкаДанных = ШапкаДанныхВМакете(); + ДанныеДляВыгрузки = Новый Массив; + МассивИмен = Новый Массив; + МассивДанных = Новый Массив; + + Для каждого ОбъектМодели Из ДанныеПротоМодель Цикл + + // напрямую получить объект метаднных из менержера объекта нельзя + // переделав на менеджер ключ записи потерям заполнение ресурсво и реквизитов записи + // поэтому идем обходным путем + Если ТипЗнч(ОбъектМодели.Значение) = Тип("Массив") Тогда + ОбъектМД = ОбъектМодели.Значение[0].Метаданные(); + Иначе + ОбъектМД = ОбъектМодели.Значение.Метаданные(); + КонецЕсли; + + Если Метаданные.Константы.Содержит(ОбъектМД) Тогда + + //ЗаписьКонстанты(СтрокаДереваМетаданных.ОбъектМД, ОбъектыВыгруженныеСОшибками); + + ИначеЕсли Метаданные.РегистрыСведений.Содержит(ОбъектМД) Или + Метаданные.РегистрыНакопления.Содержит(ОбъектМД) Или + Метаданные.РегистрыРасчета.Содержит(ОбъектМД) Тогда + + Для Каждого НаборЗаписейРегистра из ОбъектМодели.Значение Цикл + ОписательЭлемента = СоздатьОписательЭлементаПоНаборуЗаписей(НаборЗаписейРегистра, МассивИмен); + КонецЦикла; + + ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМД) Тогда + + Для Каждого НаборЗаписейРегистра из ОбъектМодели.Значение Цикл + ОписательЭлемента = СоздатьОписательЭлементаПоНаборуЗаписей(НаборЗаписейРегистра, МассивИмен); + КонецЦикла; + + //ИначеЕсли ТипЗнч(СтрокаДереваМетаданных.ЭлементОписания.Менеджер) = Тип("Строка") Тогда + // специальный случай для перерасчетов + //ЗаписьПерерасчета(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками); + + ИначеЕсли Метаданные.Последовательности.Содержит(ОбъектМД) Тогда + + //ЗаписьПоследовательности(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками); + + Иначе + + Попытка + ДанныеОбъекта = Новый Структура; + ДанныеОбъекта.Вставить("Предопределенный", ОбъектМодели.Значение["Предопределенный"]); + ДанныеОбъекта.Вставить("ИмяПредопределенныхДанных", ОбъектМодели.Значение["ИмяПредопределенныхДанных"]); + Исключение + ДанныеОбъекта = Неопределено; + КонецПопытки; + ОписательЭлемента = СоздатьОписательЭлементаПоСсылке(ОбъектМодели.Значение.Ссылка, МассивИмен, ДанныеОбъекта); + + КонецЕсли; + + МассивДанных.Добавить(ОписательЭлемента); + КонецЦикла; + + Для каждого ОписательОбъекта Из массивДанных Цикл + ПользовательИБ = Неопределено; + СтрокаОбъектаВыгрузки = Новый Массив; + Если ЭтоОписательПользователяИБ(ОписательОбъекта, ПользовательИБ) Тогда + + ДобавитьПользователяИБ_ВВыгрузку(СтрокаОбъектаВыгрузки, ОписательОбъекта, ШапкаДанных, массивДанных); + + Иначе + + // соберем объект для перевода в нужный формат + ДобавитьОбъектВВыгрузку(СтрокаОбъектаВыгрузки, ОписательОбъекта, ШапкаДанных, массивДанных); + + КонецЕсли; + ДанныеДляВыгрузки.Добавить(СтрокаОбъектаВыгрузки); + КонецЦикла; + + СтруктураJSON = ПодготовитьJSON(ДанныеДляВыгрузки); + + Возврат СтруктураJSON; + +КонецФункции + Процедура ДобавитьОбъектВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных) Ссылка = Неопределено; @@ -6537,7 +6619,6 @@ КонецФункции -// аналог ДобавитьПростойРеквизитВМакет Процедура ДобавитьПростойРеквизитВВыгрузку(ДанныеДляВыгрузки, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита) Если ТипЗнч(ДанныеДляВыгрузки) = Тип("Массив") Тогда @@ -6557,7 +6638,6 @@ КонецПроцедуры -// аналог ОбработатьРеквизитыОбъекта Процедура ДобавитьРеквизитыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, МдРеквизиты, ВыгружаемыеРеквизиты, КорневойТипКонфигурации = "") ЭтоСсылочныйОбъект = ЭтоОписательОбъектаСсылки(ОписательОбъекта); @@ -6624,7 +6704,6 @@ КонецЦикла; КонецПроцедуры -// аналог ОбработатьРеквизитОбъекта Функция ДобавитьРеквизитОбъектаВВыгрузку(ДанныеДляВыгрузки, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, ШапкаДанных) ЗаписьВыгрузки = Новый Структура; @@ -6679,7 +6758,6 @@ КонецФункции -// аналог ОбработатьТабличныеЧастиОбъекта Процедура ДобавитьТабличныеЧастиОбъектаВВыгрузку(ДанныеДляВыгрузки, МдТабличныеЧасти, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект) Для каждого МдТч Из МдТабличныеЧасти Цикл @@ -6708,7 +6786,6 @@ КонецПроцедуры -// аналог ОбработатьРеквизитыТабличнойЧастиОбъекта Процедура ДобавитьРеквизитыТабличнойЧастиОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, строкаТчОбъекта, МдРеквизиты) Мд = Объект.Метаданные(); @@ -6721,7 +6798,6 @@ КонецПроцедуры -// аналог ДобавитьДополнительныеСвойства Процедура ДобавитьДопСвойстваВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект) ДопСвойства = Новый Структура(); @@ -6744,7 +6820,6 @@ КонецПроцедуры -// аналог ДобавитьДопСвойстваВМакет Процедура ДобавитьДопСвойстваВВыгрузкуПоРежиму(ДанныеДляВыгрузки, ШапкаДанных, ИмяРеквизита, СтруктураДопСвойств) Для Каждого ДопСвойство Из СтруктураДопСвойств Цикл @@ -6756,7 +6831,6 @@ КонецПроцедуры -// аналог ОбработатьРежимыОбъекта Процедура ДобавитьРежимыОбъектаВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект) Режимы = новый Массив; @@ -6787,7 +6861,6 @@ КонецПроцедуры -// аналог ДобавитьПользователяИБ_ВМакет Процедура ДобавитьПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных, МассивДанных) ДобавитьШапкуПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных); @@ -6797,7 +6870,6 @@ КонецПроцедуры -// аналог ДобавитьШапкуПользователяИБ_ВМакет Процедура ДобавитьШапкуПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных) ЗаписьВыгрузки = Новый Структура; @@ -6811,7 +6883,6 @@ КонецПроцедуры -//аналог ДобавитьРеквизитыПользователяИБ_ВМакет Процедура ДобавитьРеквизитыПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных) параметрыПользователя = Новый Структура; @@ -6841,7 +6912,6 @@ КонецПроцедуры -// аналог ДобавитьРолиПользователяИБ_ВМакет Процедура ДобавитьРолиПользователяИБ_ВВыгрузку(ДанныеДляВыгрузки, ОписательОбъекта, ШапкаДанных) МассивРолей = Новый Массив; 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 01a7bf2f5b..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 @@ +
@@ -1278,5 +1283,20 @@ If value is > 1, then paged sub-elements of this level or lower according to< ДополнительныеСвойства DontUse + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конвертировать макет</v8:content> + </v8:item> + + + + 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 3bab63b2b3..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" @@ -143,6 +143,11 @@ Объект.ТаблицаДанных.Очистить(); КонецПроцедуры +&НаКлиенте +Процедура КонвертироватьМакет(Команда) + КонвертироватьМакетНаСервере(); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -239,6 +244,19 @@ КонецПроцедуры +&НаСервере +Процедура КонвертироватьМакетНаСервере() + + МакетДляЗаполнения = ПолучитьМакетЗаполнения(); + НовыйМакет = Объект().КонвертироватьМакет(МакетДляЗаполнения); + Если ОбработкаМакетаJSON() Тогда + Макет= НовыйМакет; + Иначе + МакетJSON = НовыйМакет; + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 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 5da18caf1246ce487cad705a5534e0c38b9d6af1..61b991c90952ca6e092b3cc904df32fba6b54df6 100644 GIT binary patch delta 2385 zcmcImTZmOv7w&bQm)qSifs2Cnb5iK<|XDUM0fS_o_H z%wf28DVCx}YO2=V`ASmDD7GrK1liPK#JSZdl}sWd7|p2Cgk$Ni9S6Jf$rbI9VsR1+ zu8_=3g1Ar;r6hGoFy>NCuu(d`X|0`NnZp7p=Q6}o6C=qpff!9=r5)CU*qhc$Q4{l6 zpp@$vaj6)ROk~KVB;z{Cuv69_n*@)|RNAkC$OT+frUFSzgL!JhDrsGkL`jx0tFs%M zZ?u^evBMTgZ3N=fD3t0rMyXObO)xcBDK`GMsR&g@zK8Hgm8A$!CjV={_3p#g)_1gV%MMrS06Eoow4 zyD!ww)z3E$G!E8h8wcta!_#!*VB<*r-THL>3^(5w-u4b{DzUL^o=l?NYF$uUA$HA(6)1hUR|Ae|AnpPlB-Z|=liSEvc8kv}* zuECON5g5WuC@d$MqRg>opRV&5a_dV##*ROnj)o9HxvDoR!77}SyBp;g-U|5P-to~g?bFPgtPSKF+Iil+`bbo&L0cZK ztR8=&47uk$lq0Oa=)sy&1j+kXp)E|Z8nLv7!=JRSVKq@JLxY*;*1XY$6%F6fIr0RJ z2^wTDvX%xxFe*Wrp&W6`C6<)QOtf_G>5+Mvw3yRGA)IQ3c#K113!R{tsbK38%u>;8 z?49|xK{`_zJPx8#9$Lx$qq=W2qjz?2y?kSXwL`N*#q1DxaU6>Upp3$bP-l=PE=4@c zOz4Op)F#F*iM4PkCrwS92W5oHgmo6##F3!=j-xCIa>s%qYL#FmP0|A8x9)%y|Mf12 zi(hl_CCp#1(x{ZPfbY$yjGyAs6X5g3k-|21E+kgUrsT#dNUmfYNlJ;;EDHlEE<&DX zmqa{O!mv;>9YBW)iV!{4DN>SKwu^;Kj4QgN~wSF?td(5qRRpUXK9(V+5<;a?tx_Z2UU p!o8sQYcE{Vd6yEjvH)E1;S#tFgv|M?OX1~wYV*pXvJc9(e*p?>Sv>#% delta 1787 zcma)7O=w+36z)v^d?7Iw6JLF)X)!OgN#EG{|FJ^-iBLg`U`5nLnVCCdAr|ApjfzzS zDQ*m2$c2cgNPm`=EUr6?8>M!ki=wL*L|nL0x50(yz1TK(b?@dLE@$rfzVCeJ%%6X? ze)+Yvc4Xw+QM_y9(qnhy$;-#SkJp#+uED!}8Fyxa$@?j#oJyevfp#fxeu(#sFynfx zXM2<5Z}c+5!6K@z0AZW>j`I&W_57JO2sl1q{*u4*>&_ndAM~~H{>K@&hU2|J&_?x60G+G5au8$S1Os3-}~v( z08mmvQDGuU#`Uuc34n@%coAqc(p#PAPC%;@2rm@6U^x|xP$d(Qg#Z>pNunv2J~^GD zmOBoWs}r5-hdo$tcBZbPuJFNz!UKNiD3P23HpU8K3Lm+55irEtbi9&AupmG&3)wyb z`H(rGHd2wTmW6URvs?2}I7sP9vK-i0O^MBv5$-h#0tG_Rxx$?@)%ArPTLbGh|!SeB`N6L-+*1Anp0n}%^O$=9V zwZH4S2GR|5!1u2#Ht|^B@V0!nJ-zvM=kx?M5~hG}PXVPx1d9gZER|s6WWb#wlAsuq zT*nxM=(p+Qf-ziX4mR9n<0yL1QnX6N8K>NY9Ur&LW{ zLWb1-m{N=CrVoCwZ?E|j;)sXKty`zo|B zv^W^Ukc1T`3E~;gaNIBgpCsW%YMGo1UemrJFICGMh$37$dsXaQF|aLW>$9JsQ^Q>cd(S4VNGcq3pBEM^qG6mtALUpM zF`8SdP$GJbO8v)j^*OAo6Bp2%jmq5g$*ILglJsj-m(HQ-YVY&7Q+~CyyS{M|{eEOr zDDVueE}uuN{^vJzdal}c4aNHE5Wa!>;fwX~DE=JPlds{U2uofaU&TMe)WF@+zg}ej zZrKiCoe!Sdp*8}>h>)D;Hi46 Yz{BH{u<7^T`eEsxezZRMI=*M@Uo_zF#{d8T