diff --git a/F.A.Q.MD b/F.A.Q.MD index 8b0144ceb..f888c9cc7 100644 --- a/F.A.Q.MD +++ b/F.A.Q.MD @@ -3,18 +3,18 @@ 1. Появляется ошибка, в которой есть текст: "Неизвестный идентификатор формы". Это означает, что есть два или более epf файла, у которых совпадает поле **Имя** (это которое находится около Синонима и Комментария). 1. При открытии внешних обработок могут появляться окна с предупреждениями безопасности. - * Если вы используете версию платформы 8.3.9.2033 или новее, тогда может появиться окно **Предупреждение безопасности**. + * Если вы используете версию платформы 8.3.9.2033 или новее, тогда может появиться окно **Предупреждение безопасности**. * Подробно этот механизм описан [здесь](http://its.1c.ru/db/v838doc#bookmark:dev:TI000001871). * Решение описано по [ссылке](https://github.com/xDrivenDevelopment/precommit1c#%D0%94%D0%BB%D1%8F-%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BA%D1%82%D0%BD%D0%BE%D0%B9-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D0%BD%D0%B0-1%D0%A1-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8-8392016-%D0%B8-%D1%81%D1%82%D0%B0%D1%80%D1%88%D0%B5) * Кратко - Если хотите выключить этот механизм для всех баз - пропишите в файле conf.cfg строку: **DisableUnsafeActionProtection=.*** 1. При пакетном запуске не загружаются и не выполняются фичи, открывается только форма `bddRunner` - + * У Вас неверный/устаревший/ json-файл настроек, несовместимый формат со штатным json, например, что читает 1С :frowning: * например: * одинарный слеш `\` не разрешен - используйте или `\\` или `/` * или одинарные кавычки \` или ’ не разрешены - используйте `\"` - * Пример правильной настройки + * Пример правильной настройки ```json "КомандаСделатьСкриншот": "\"C:\\Program Files (x86)\\IrfanView\\i_view32.exe\" /capture=1 /convert=", @@ -23,8 +23,8 @@ * Разбор проблемы в https://xdd.silverbulleters.org/t/pri-paketnom-zapuske-ne-zagruzhayutsya-i-ne-vypolnyayutsya-fichi-otkryvaetsya-tolko-bddrunner/2132 4. Как поставить точку останова (брейкпоинт) во внешней обработке для отладки? - * Используйте штатный механизм отладки 1С, если у вас - * файловая база + * Используйте штатный механизм отладки 1С, если у вас + * файловая база * или клиент 1С и сервер 1С находятся на одной машине. * Если это не так, тогда более сложный путь: * Надо закрыть сеанс TestManager. @@ -56,10 +56,10 @@ - Используйте организацию файлов через рабочий каталог проекта (**рекомендуемый путь**) - В BDD – `Ванесса.Объект.КаталогПроекта` - В TDD - `КонтекстЯдра.Объект.КаталогПроекта` - - эта настройка задается + - эта настройка задается - либо через командную строку (например, через `vanessa-runner`) - либо интерактивно, через форму настроек (`Сервис`) -- +- - В TDD можно использовать получить полный путь к текущему файлу теста – в тесте нужно определить свойство «ПутьКФайлуПолный» - это или Глобальная публичная переменная модуля @@ -72,11 +72,11 @@ 7. Как пропустить сценарий, чтобы он не падал? * Можно его закоментировать в тексте фичи (символ #) * Можно поставить сценарию тег - и использовать теги фильтры - * Да пусть падает - тем более если он не реализован - то он будет желтым, а если реализован - тогда почему он падает? + * Да пусть падает - тем более если он не реализован - то он будет желтым, а если реализован - тогда почему он падает? 2. Как запустить фичу из поставки VB у себя в базе? * Большинство фич, которые идут в поставке VB, требуют, чтобы их запускали в специальной служебной базе. - * Надо собрать служебную базу. Для этого надо загрузить CF из (**.\vanessa-behavoir\lib\CF\83**) + * Надо собрать служебную базу. Для этого надо загрузить CF из (**.\vanessa-behavoir\lib\CF\83**) * Надо руками в базе установить константу **Путь к Vanessa Behavior** - это полный путь к обработке **vanessa-behavior.epf** включая имя файла * Надо открыть в базе VB * Надо указать тег исключение **IgnoreOnCIMainBuild** (список исключаемых тегов) @@ -107,7 +107,7 @@ + поле `Консольная команда создания скриншотов` + после строки команды вставляется имя файла и в таком виде команда запускается! - Можно устанавливать + Можно устанавливать + как `NirCMD` + http://www.nirsoft.net/utils/nircmd.zip + команда `nircmd savescreenshot ` @@ -154,7 +154,7 @@ 1. Я вызвал метод Ванесса.ЗапретитьВыполнениеШагов(), затем я подключаю свой таймер, и мне надо сделать, чтобы шаг упал. * в этом случае вместо вызова исключения надо сделать Ванесса.ПродолжитьВыполнениеШагов(Истина) -1. Как использовать Sikuli-скрипты. +1. Как использовать Sikuli-скрипты. * Установите SikuliX согласно инструкции http://sikulix.com/quickstart/; * Ознакомьтесь с http://sikulix-2014.readthedocs.io/en/latest/faq/010-command-line.html; * Укажите через path путь к каталогу с runsikulix(.cmd); @@ -162,7 +162,7 @@ * Выполнение скрипта в реализации шага вызывайте через Ванесса.ВыполнитьSikuliСкрипт(). 1. Как получить отчет Allure у себя на компьютере под Windows - * Надо скачать дистрибутив Allure [отсюда](https://github.com/allure-framework/allure1/releases) + * Надо скачать дистрибутив Allure [отсюда](https://github.com/allure-framework/allure1/releases) * Надо прописать в Path каталог где лежит allure.bat * Для использования через командную строку можно использовать строки ниже * Вызвать команду **call allure generate {каталог где лежат ваши xml в формате Allure}** @@ -181,7 +181,19 @@ 1. Как для УФ (управляемой формы) и ОФ (обычной формы) шаги сделать общими? * Разместить код шага в модуле объекта обработки, -* В коде управляемой формы в клиентском методе шага нужно вызвать серверный метод, - * в котором выполнить `ОбъектНаСервере = ЗначениеФормыВОбъект("Объект")` +* В коде управляемой формы в клиентском методе шага нужно вызвать серверный метод, + * в котором выполнить `ОбъектНаСервере = ЗначениеФормыВОбъект("Объект")` * и вызвать код из модуля обработки `ОбъектНаСервере.НужныйМетод(...)` * Сигнатуры методов в УФ и ОФ должны совпадать соответственно + +1. Что нужно сделать, чтобы увидеть собственные шаги в форме `Известные шаги` ? + +* В строке описания шага нужно заполнить последние параметры (4 и 5 параметры) в процедуре ДобавитьШагВМассивТестов. Там как раз задается развернутое описание шага и место в дереве. +* Место в группе можно задавать с учетом иерархии. + * Указание группы как `UI.Формы.Кнопки.Мой шаг` расположит шаг в иерархии дерева `UI` - `Формы` - `Кнопки` +* Например, + +```bsl + Ванесса.ДобавитьШагВМассивТестов(ВсеТесты, "Пауза(Парам01)","Пауза", "И Пауза 1", + "Позволяет сделать паузу нужной длительности.", "Прочее.Сделать паузу"); +``` diff --git a/epf/xddTestRunner/xddTestRunner.xml b/epf/xddTestRunner/xddTestRunner.xml index 3dafcfb8d..e1f6db906 100644 --- a/epf/xddTestRunner/xddTestRunner.xml +++ b/epf/xddTestRunner/xddTestRunner.xml @@ -676,6 +676,40 @@ Auto + + + ПлагиныЗагружены + + + ru + Плагины загружены + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + +
Форма
УправляемаяФорма
diff --git "a/epf/xddTestRunner/xddTestRunner/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/epf/xddTestRunner/xddTestRunner/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 231e9eb3a..c289d4bf8 100644 --- "a/epf/xddTestRunner/xddTestRunner/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/epf/xddTestRunner/xddTestRunner/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" @@ -483,6 +483,28 @@ xs:boolean + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Есть поддержка асинхронных вызовов</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Есть защита от опасных действий</v8:content> + </v8:item> + + + xs:boolean + + diff --git "a/epf/xddTestRunner/xddTestRunner/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/epf/xddTestRunner/xddTestRunner/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 6d13b4cd1..79d0918ae 100644 --- "a/epf/xddTestRunner/xddTestRunner/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/epf/xddTestRunner/xddTestRunner/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" @@ -3,10 +3,16 @@ &НаКлиенте Перем ПодключенныеВнешниеОбработки; +&НаКлиенте +Перем Версия836ИлиВыше Экспорт; + // { События формы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОбъектНаСервере = РеквизитФормыВЗначение("Объект"); + + ЕстьПоддержкаАсинхронныхВызовов = УзнатьЕстьПоддержкаАсинхронныхВызовов(); + ЕстьЗащитаОтОпасныхДействий = УзнатьЕстьЗащитаОтОпасныхДействий(); ЭтаФорма.Заголовок = ОбъектНаСервере.ЗаголовокФормы(); @@ -21,12 +27,31 @@ &НаКлиенте Процедура ПриОткрытии() Объект.ИспользоватьПрямыеПутиФайлов = КлиентИСерверРасположеныНаОднойМашине(); + + СистемнаяИнформация = Новый СистемнаяИнформация; + Версия836ИлиВыше = ВерсияПриложенияБольшеИлиРавнаЧемЗаданная(СистемнаяИнформация.ВерсияПриложения, "8.3.6.0"); ЗагрузитьПлагины(); + + //КэшироватьПеречисленияПлагинов(); + //СброситьПодключенныеВнешниеОбработки(); + // + //КаталогПроекта = КаталогВременныхФайлов(); + + //ЭтоПакетныйЗапуск = ЗначениеЗаполнено(ПараметрЗапуска); + //Если ЭтоПакетныйЗапуск Тогда + // ВыполнитьПакетныйЗапуск(ПараметрЗапуска); + //Иначе + // ПерезагрузитьПоследниеТестыПоИстории(); + //КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытииЗавершение() КэшироватьПеречисленияПлагинов(); СброситьПодключенныеВнешниеОбработки(); - КаталогПроекта = КаталогВременныхФайлов(); + КаталогПроекта = ПолучитьКаталогВременныхФайлов(); ЭтоПакетныйЗапуск = ЗначениеЗаполнено(ПараметрЗапуска); Если ЭтоПакетныйЗапуск Тогда @@ -36,7 +61,6 @@ КонецЕсли; КонецПроцедуры -&НаКлиенте Процедура ПриЗакрытии(ЗавершениеРаботы = Неопределено) Если ЭтоПакетныйЗапуск Тогда @@ -47,8 +71,12 @@ Возврат; КонецЕсли; + + ПриЗакрытииНаСервере(); + + КонецПроцедуры &НаСервере @@ -147,8 +175,8 @@ Попытка ЗагрузитьТесты(ЭлементИстории.ИдентификаторЗагрузчика, ЭлементИстории.Путь); Исключение - // TODO - Сообщить("Не удалось загрузить тесты из истории <" + ЭлементИстории.ИдентификаторЗагрузчика + ": " + ЭлементИстории.Путь + ">" + Символы.ПС + ОписаниеОшибки()); + Сообщить("Не удалось загрузить тесты из истории <" + ЭлементИстории.ИдентификаторЗагрузчика + ": " + + ЭлементИстории.Путь + ">" + Символы.ПС + ОписаниеОшибки()); КонецПопытки; КонецЕсли; @@ -199,6 +227,10 @@ // { Плагины &НаКлиенте Процедура ЗагрузитьПлагины() + Если Объект.ПлагиныЗагружены Тогда + Возврат; + КонецЕсли; + Объект.Плагины = Новый Структура; КэшФормПлагинов = Новый Структура; @@ -209,55 +241,198 @@ Для Каждого Плагин Из Объект.Плагины Цикл КэшФормПлагинов.Вставить(Плагин.Ключ, Истина); КонецЦикла; + + ДобавитьКомандыЗагрузчиковНаФорме(); + + Иначе КаталогПлагинов = ПолучитьПутьКПлагинам(); - НайденныеФайлы = НайтиФайлы(КаталогПлагинов, "*.epf", Ложь); + + Если ЕстьПоддержкаАсинхронныхВызовов Тогда + ОбработчикПоискаКлиентскихПлагинов = Вычислить("Новый ОписаниеОповещения(""ОбработчикПоискаКлиентскихПлагинов"", ЭтаФорма)"); + Выполнить("НачатьПоискФайлов(ОбработчикПоискаКлиентскихПлагинов, КаталогПлагинов, ""*.epf"", Ложь)"); + Иначе + НайденныеФайлы = НайтиФайлы(КаталогПлагинов, "*.epf", Ложь); + ОбработчикПоискаКлиентскихПлагинов(НайденныеФайлы, Неопределено); + КонецЕсли; + КонецЕсли; + + // НайденныеФайлы = НайтиФайлы(КаталогПлагинов, "*.epf", Ложь); - ЗагруженныеФайлы = Новый Массив; - ИдентификаторыПлагинов = Новый Соответствие; - Если Объект.ИспользоватьПрямыеПутиФайлов Тогда - Для каждого ФайлОбработки Из НайденныеФайлы Цикл + // ЗагруженныеФайлы = Новый Массив; + // ИдентификаторыПлагинов = Новый Соответствие; + // Если Объект.ИспользоватьПрямыеПутиФайлов Тогда + // Для каждого ФайлОбработки Из НайденныеФайлы Цикл - ОписаниеПередаваемогоФайла = Новый Структура("Имя", ФайлОбработки.ПолноеИмя); - ЗагруженныеФайлы.Добавить(ОписаниеПередаваемогоФайла); + // ОписаниеПередаваемогоФайла = Новый Структура("Имя", ФайлОбработки.ПолноеИмя); + // ЗагруженныеФайлы.Добавить(ОписаниеПередаваемогоФайла); - ИмяПлагина = ФайлОбработки.ИмяБезРасширения; - ИдентификаторыПлагинов.Вставить(ФайлОбработки.ПолноеИмя, ИмяПлагина); + // ИмяПлагина = ФайлОбработки.ИмяБезРасширения; + // ИдентификаторыПлагинов.Вставить(ФайлОбработки.ПолноеИмя, ИмяПлагина); - КонецЦикла; - Иначе - ПомещаемыеФайлы = Новый Массив; - Для каждого ФайлОбработки Из НайденныеФайлы Цикл + // КонецЦикла; + // Иначе + // ПомещаемыеФайлы = Новый Массив; - ПомещаемыйФайл = Новый ОписаниеПередаваемогоФайла(ФайлОбработки.ПолноеИмя); - ПомещаемыеФайлы.Добавить(ПомещаемыйФайл); + // Для каждого ФайлОбработки Из НайденныеФайлы Цикл - ИмяПлагина = ФайлОбработки.ИмяБезРасширения; - ИдентификаторыПлагинов.Вставить(ФайлОбработки.ПолноеИмя, ИмяПлагина); + // ПомещаемыйФайл = Новый ОписаниеПередаваемогоФайла(ФайлОбработки.ПолноеИмя); + // ПомещаемыеФайлы.Добавить(ПомещаемыйФайл); - КонецЦикла; + // ИмяПлагина = ФайлОбработки.ИмяБезРасширения; + // ИдентификаторыПлагинов.Вставить(ФайлОбработки.ПолноеИмя, ИмяПлагина); - Если ПомещаемыеФайлы.Количество() Тогда - ПоместитьФайлы(ПомещаемыеФайлы, ЗагруженныеФайлы,,Ложь, ЭтаФорма.УникальныйИдентификатор); - КонецЕсли; - КонецЕсли; + // КонецЦикла; + + // Если ПомещаемыеФайлы.Количество() Тогда + // ПоместитьФайлы(ПомещаемыеФайлы, ЗагруженныеФайлы,,Ложь, ЭтаФорма.УникальныйИдентификатор); + // КонецЕсли; + // КонецЕсли; + + + // ОписанияПлагинов = ПодключитьПлагиныНаСервере(ЗагруженныеФайлы); + + // Для Каждого ЗагруженныйФайл Из ЗагруженныеФайлы Цикл + // ИмяПлагина = ИдентификаторыПлагинов[ЗагруженныйФайл.Имя]; - ОписанияПлагинов = ПодключитьПлагиныНаСервере(ЗагруженныеФайлы); + // ОписаниеПлагина = ОписанияПлагинов[ЗагруженныйФайл.Имя]; + // Объект.Плагины.Вставить(ОписаниеПлагина.Идентификатор, ИмяПлагина); + // КэшФормПлагинов.Вставить(ОписаниеПлагина.Идентификатор, Истина); - Для Каждого ЗагруженныйФайл Из ЗагруженныеФайлы Цикл - ИмяПлагина = ИдентификаторыПлагинов[ЗагруженныйФайл.Имя]; + // КонецЦикла; + //КонецЕсли; - ОписаниеПлагина = ОписанияПлагинов[ЗагруженныйФайл.Имя]; - Объект.Плагины.Вставить(ОписаниеПлагина.Идентификатор, ИмяПлагина); - КэшФормПлагинов.Вставить(ОписаниеПлагина.Идентификатор, Истина); + //ДобавитьКомандыЗагрузчиковНаФорме(); + + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикПоискаКлиентскихПлагинов(Знач НайденныеФайлы, Знач ДополнительныеПараметры) Экспорт + + ПомещаемыеФайлы = Новый Массив; + ИдентификаторыПлагинов = Новый Соответствие; + ИдентификаторыИменПлагинов = Новый Соответствие; + + Если Объект.ИспользоватьПрямыеПутиФайлов Тогда + ПомещенныеФайлы = Новый Массив; + Для каждого ФайлОбработки Из НайденныеФайлы Цикл + + ОписаниеПередаваемогоФайла = Новый Структура("Имя", ФайлОбработки.ПолноеИмя); + ПомещенныеФайлы.Добавить(ОписаниеПередаваемогоФайла); + + ИмяПлагина = ФайлОбработки.ИмяБезРасширения; + ИдентификаторыПлагинов.Вставить(ФайлОбработки.ПолноеИмя, ИмяПлагина); + ИдентификаторыИменПлагинов.Вставить(ИмяПлагина, ФайлОбработки.ПолноеИмя); + + КонецЦикла; + + ПодключитьНайденныеКлиентскиеПлагины(ПомещенныеФайлы, ИдентификаторыПлагинов); + Иначе + + Для каждого ФайлОбработки Из НайденныеФайлы Цикл + + ПомещаемыйФайл = Новый ОписаниеПередаваемогоФайла(ФайлОбработки.ПолноеИмя); + ПомещаемыеФайлы.Добавить(ПомещаемыйФайл); + + ИмяПлагина = ФайлОбработки.ИмяБезРасширения; + ИдентификаторыПлагинов.Вставить(ФайлОбработки.ПолноеИмя, ИмяПлагина); + ИдентификаторыИменПлагинов.Вставить(ИмяПлагина, ФайлОбработки.ПолноеИмя); КонецЦикла; + + Если ПомещаемыеФайлы.Количество() Тогда + ПараметрыЗавершения = Новый Структура("ИдентификаторыПлагинов", ИдентификаторыПлагинов); + Если Версия836ИлиВыше Тогда + Выполнить("НачатьПомещениеФайлов(Новый ОписаниеОповещения(""ОбработчикПоискаКлиентскихПлагиновЗавершение"", ЭтаФорма, ПараметрыЗавершения), + |ПомещаемыеФайлы, , Ложь, ЭтаФорма.УникальныйИдентификатор)"); + Иначе + ПомещенныеФайлы = Новый Массив; + ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ЭтаФорма.УникальныйИдентификатор); + ПодключитьНайденныеКлиентскиеПлагины(ПомещенныеФайлы, ИдентификаторыПлагинов); + КонецЕсли; + Иначе + ПодключитьНайденныеКлиентскиеПлагины(Новый Массив, ИдентификаторыПлагинов); + КонецЕсли; КонецЕсли; - ДобавитьКомандыЗагрузчиковНаФорме(); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикПоискаКлиентскихПлагиновЗавершение(Знач ПомещенныеФайлы, Знач ДополнительныеПараметры) Экспорт + + ПодключитьНайденныеКлиентскиеПлагины(ПомещенныеФайлы, ДополнительныеПараметры.ИдентификаторыПлагинов); + +КонецПроцедуры + +&НаКлиенте +Процедура ПодключитьНайденныеКлиентскиеПлагины(Знач ЗагруженныеФайлы, Знач ИдентификаторыПлагинов) + Перем ЗагруженныйФайл, ИмяПлагина, ОписаниеПлагина, ОписанияПлагинов; + Перем ОбъектПлагина, ОписанияПлагиновКлиент, ПодключенныеРанее, МассивФормПлагинов; + + //ОписанияПлагиновКлиент = Новый Соответствие; + //ПодключенныеРанее = Новый Соответствие; + + //МассивПодключенныхПлагинов = Новый Массив(); + //Если Не Объект.ИспользоватьПрямыеПутиФайлов Тогда + // ПодключитьВнешниеОбработкиДляОтладки(Истина, МассивПодключенныхПлагинов); + //КонецЕсли; + + ////Подключим на клиенте для отладки + //Для каждого ОбъектПлагина Из МассивПодключенныхПлагинов Цикл + // Попытка + // ОбъектПлагина.Инициализация(ЭтаФорма); + // ОписаниеПлагина = ОбъектПлагина.ОписаниеПлагина(Объект.ТипыПлагинов); + // ИмяПлагина = ОписаниеПлагина.Идентификатор; + + // ПодключенныеРанее.Вставить(ОписаниеПлагина.Идентификатор, Истина); + // Объект.ПлагиныЗагружены = Истина; + // Объект.Плагины.Вставить(ОписаниеПлагина.Идентификатор, ИмяПлагина); + // КэшФормПлагинов.Вставить(ОписаниеПлагина.Идентификатор, Истина); + // СделатьСообщение("Подключен плагин " + ИмяПлагина + " в режиме отладки"); + // Исключение + // ИнфоОшибки = ИнформацияОбОшибке(); + // Если ОбъектПлагина <> Неопределено Тогда + // СделатьСообщение("Ошибка подключения плагина "+ОбъектПлагина.Заголовок + ": + // |" + ИнфоОшибки.Описание); + // Иначе + // СделатьСообщение("Ошибка подключения неопределенного плагина: + // |" + ИнфоОшибки.Описание); + // КонецЕсли; + // КонецПопытки; + + //КонецЦикла; + + //ОписанияПлагинов = ПодключитьПлагиныНаСервере(ЗагруженныеФайлы, ПодключенныеРанее); + ОписанияПлагинов = ПодключитьПлагиныНаСервере(ЗагруженныеФайлы); + + Для Каждого ЗагруженныйФайл Из ЗагруженныеФайлы Цикл + Объект.ПлагиныЗагружены = Истина; + + ИмяПлагина = ИдентификаторыПлагинов[ЗагруженныйФайл.Имя]; + + ОписаниеПлагина = ОписанияПлагинов.Получить(ЗагруженныйФайл.Имя); + Если ОписаниеПлагина = Неопределено Тогда + Продолжить; + КонецЕсли; + Объект.Плагины.Вставить(ОписаниеПлагина.Идентификатор, ИмяПлагина); + КэшФормПлагинов.Вставить(ОписаниеПлагина.Идентификатор, Истина); + + КонецЦикла; + + + ЗагрузкаПлагиновЗавершение(); КонецПроцедуры +&НаКлиенте +Процедура ЗагрузкаПлагиновЗавершение() Экспорт + ДобавитьКомандыЗагрузчиковНаФорме(); + ПриОткрытииЗавершение(); + //КэшироватьПеречисленияПлагинов(); + //СброситьПодключенныеВнешниеОбработки(); +КонецПроцедуры + &НаСервере Функция ПодключитьПлагиныНаСервере(Знач ЗагружаемыеФайлы) @@ -775,7 +950,7 @@ РезультатТестирования.Состояние = Объект.СостоянияТестов.НеизвестнаяОшибка; ВывестиОписаниеОшибкиВЛогФайл(РезультатТестирования); -КонецПопытки; + КонецПопытки; Возврат РезультатТестирования; КонецФункции @@ -1004,29 +1179,22 @@ ТестКлиенты.ПодключитьТестКлиент_ПакетныйРежим(Параметры_xddTestClient); КонецЕсли; - Параметры_xddRun = Неопределено; - Если ПараметрыЗапуска.Свойство(ВозможныеКлючи.xddRun, Параметры_xddRun) Тогда - РезультатыТестирования = ЗагрузитьИВыполнитьТесты_ПакетныйРежим(Параметры_xddRun); - Если РезультатыТестирования = Неопределено Тогда - ВывестиСообщение("Не найдено результатов тестирования"); - КонецЕсли; - КонецЕсли; - - Параметры_xddReport = Неопределено; - Если ЗначениеЗаполнено(РезультатыТестирования) И ПараметрыЗапуска.Свойство(ВозможныеКлючи.xddReport, Параметры_xddReport) Тогда - СформироватьОтчетОТестированииИЭкспортировать_ПакетныйРежим(Параметры_xddReport, РезультатыТестирования); - КонецЕсли; - - Параметры_xddExitCodePath = Неопределено; - Если ПараметрыЗапуска.Свойство(ВозможныеКлючи.xddExitCodePath, Параметры_xddExitCodePath) Тогда - СформироватьФайлКодаВозврата(Параметры_xddExitCodePath, РезультатыТестирования); - КонецЕсли; - - Если ПараметрыЗапуска.Свойство(ВозможныеКлючи.xddShutdown) Тогда - Если ТестКлиенты <> Неопределено Тогда - ТестКлиенты.ЗавершитьВсеТестКлиенты(); - КонецЕсли; - ЗавершитьРаботуСистемы(Ложь); + НастройкиШагов = Новый Структура; + НастройкиШагов.Вставить("Параметры_xddRun"); + НастройкиШагов.Вставить("Параметры_xddReport"); + НастройкиШагов.Вставить("Параметры_xddExitCodePath"); + НастройкиШагов.Вставить("xddShutdown"); + НастройкиШагов.Вставить("ТестКлиенты", ТестКлиенты); + + ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddRun, НастройкиШагов.Параметры_xddRun); + ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddReport, НастройкиШагов.Параметры_xddReport); + ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddExitCodePath, НастройкиШагов.Параметры_xddExitCodePath); + НастройкиШагов.xddShutdown = ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddShutdown); + + Если Не ЕстьПоддержкаАсинхронныхВызовов Тогда + ВыполнитьПакетныйЗапускСинхронно(НастройкиШагов); + Иначе + ВыполнитьПакетныйЗапускАсинхронно(НастройкиШагов) КонецЕсли; Исключение @@ -1043,11 +1211,268 @@ КонецПроцедуры +&НаКлиенте +Процедура ВыполнитьПакетныйЗапускСинхронно(Знач ПараметрыЗапуска) + + Перем РезультатыТестирования; + + Если ПараметрыЗапуска.Параметры_xddRun <> Неопределено Тогда + РезультатыТестирования = ЗагрузитьИВыполнитьТесты_ПакетныйРежим(ПараметрыЗапуска.Параметры_xddRun); + Если РезультатыТестирования = Неопределено Тогда + ВывестиСообщение("Не найдено результатов тестирования"); + КонецЕсли; + КонецЕсли; + + Если ЗначениеЗаполнено(РезультатыТестирования) И ПараметрыЗапуска.Параметры_xddReport <> Неопределено Тогда + СформироватьОтчетОТестированииИЭкспортировать_ПакетныйРежим(ПараметрыЗапуска.Параметры_xddReport, РезультатыТестирования); + КонецЕсли; + + Если ПараметрыЗапуска.Параметры_xddExitCodePath <> Неопределено Тогда + СформироватьФайлКодаВозврата(ПараметрыЗапуска.Параметры_xddExitCodePath, РезультатыТестирования); + КонецЕсли; + + Если ПараметрыЗапуска.xddShutdown = Истина Тогда + Если ПараметрыЗапуска.ТестКлиенты <> Неопределено Тогда + ПараметрыЗапуска.ТестКлиенты.ЗавершитьВсеТестКлиенты(); + КонецЕсли; + + ЗавершитьРаботуСистемы(Ложь); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьПакетныйЗапускАсинхронно(Знач ПараметрыЗапуска) + ПервичнаяНастройка(); + + Состояние = Новый Структура; + Состояние.Вставить("НастройкиШагов", ПараметрыЗапуска); + Состояние.Вставить("СледующийШаг"); + Состояние.Вставить("ТекущийШаг"); + Состояние.Вставить("РезультатыТестирования"); + + Если ПараметрыЗапуска.Параметры_xddRun <> Неопределено Тогда + Состояние.СледующийШаг = "ЗагрузитьТесты"; + ИначеЕсли ПараметрыЗапуска.xddShutdown = Истина Тогда + Состояние.СледующийШаг = "ЗавершитьРаботу"; + Иначе + ВызватьИсключение НСтр("ru = 'Vanessa-ADD: Я не знаю что мне делать. Нет приказа на выполнение тестов или закрытие.'"); + КонецЕсли; + + ВыполнитьШагПакетногоЗапуска(, Состояние); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьШагПакетногоЗапуска(Знач РезультатПредыдущегоШага, Знач Состояние) Экспорт + + ОбработкаОповещения = Новый ОписаниеОповещения("ВыполнитьШагПакетногоЗапуска", ЭтаФорма, Состояние, "ВыполнитьШагПакетногоЗапускаИсключение", ЭтаФорма); + + Состояние.ТекущийШаг = Состояние.СледующийШаг; + Если Состояние.СледующийШаг = "ЗагрузитьТесты" Тогда + НачатьЗагрузкуТестовПакетныйРежим(ОбработкаОповещения); + ИначеЕсли Состояние.СледующийШаг = "ЗапуститьТесты" Тогда + НачатьВыполнениеТестов(РезультатПредыдущегоШага, ОбработкаОповещения); + ИначеЕсли Состояние.СледующийШаг = "СоставитьОтчет" Тогда + СоставитьОтчетОТестировании(РезультатПредыдущегоШага, ОбработкаОповещения); + ИначеЕсли Состояние.СледующийШаг = "ЗавершитьРаботу" Тогда + + Если Состояние.НастройкиШагов.Параметры_xddExitCodePath <> Неопределено Тогда + СформироватьФайлКодаВозврата(Состояние.НастройкиШагов.Параметры_xddExitCodePath, Состояние.РезультатыТестирования); + КонецЕсли; + + ТестКлиенты = Состояние.НастройкиШагов.ТестКлиенты; + Если ТестКлиенты <> Неопределено Тогда + ТестКлиенты.ЗавершитьВсеТестКлиенты(); + КонецЕсли; + + ЗавершитьРаботуСистемы(Ложь); + КонецЕсли; + +КонецПроцедуры // ВыполнитьШагПакетногоЗапуска() + +&НаКлиенте +Процедура ВыполнитьШагПакетногоЗапускаИсключение(Знач ИнформацияОбОшибке, СтандартнаяОбработка, Знач Состояние) Экспорт + + СтандартнаяОбработка = Ложь; + + ТекстОшибки = СтрШаблон("Ошибка при асинхронном режиме пакетного запуска: + |Состояние: + | Текущий шаг: %1 + | Следующий шаг:%2 + | Исключение: %3", + Состояние.ТекущийШаг, Состояние.СледующийШаг, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + ЗафиксироватьОшибкуВЖурналеРегистрации("xUnitFor1C.АсинхронныйПакетныйЗапуск", ТекстОшибки); + Сообщить(ТекстОшибки, СтатусСообщения.ОченьВажное); +КонецПроцедуры + +&НаКлиенте +Процедура НачатьЗагрузкуТестовПакетныйРежим(Знач ОбработкаОповещения); + Параметры_xddRun = ОбработкаОповещения.ДополнительныеПараметры.НастройкиШагов.Параметры_xddRun; + ИдентификаторЗагрузчика = Параметры_xddRun[0]; + Загрузчик = ЭтаФорма.Плагин(ИдентификаторЗагрузчика); + + ПутьКТестам = Параметры_xddRun[1]; + + ОбработкаОповещения.ДополнительныеПараметры.СледующийШаг = "ЗапуститьТесты"; + ОбработкаОповещения.ДополнительныеПараметры.Вставить("Загрузчик", Загрузчик); + Загрузчик.НачатьЗагрузку(ОбработкаОповещения, ЭтаФорма, ПутьКТестам); +КонецПроцедуры + +&НаКлиенте +Процедура НачатьВыполнениеТестов(ДеревоТестовОтЗагрузчика, ОбработкаОповещения) + + Загрузчик = ОбработкаОповещения.ДополнительныеПараметры.Загрузчик; + РезультатыТестирования = ЭтаФорма.ВыполнитьТесты(Загрузчик, ДеревоТестовОтЗагрузчика); + Если РезультатыТестирования = Неопределено Тогда + ВывестиСообщение("Не найдено результатов тестирования"); + КонецЕсли; + + ОбработкаОповещения.ДополнительныеПараметры.СледующийШаг = "СоставитьОтчет"; + ОбработкаОповещения.ДополнительныеПараметры.РезультатыТестирования = РезультатыТестирования; + ВыполнитьОбработкуОповещения(ОбработкаОповещения, РезультатыТестирования); + +КонецПроцедуры + +&НаКлиенте +Процедура СоставитьОтчетОТестировании(РезультатыТестирования, ОбработкаОповещения) + + Параметры_xddReport = ОбработкаОповещения.ДополнительныеПараметры.НастройкиШагов.Параметры_xddReport; + Если Не ЗначениеЗаполнено(РезультатыТестирования) или Параметры_xddReport = Неопределено Тогда + // Отчет не нужен + ОбработкаОповещения.ДополнительныеПараметры.СледующийШаг = "ЗавершитьРаботу"; + ВыполнитьОбработкуОповещения(ОбработкаОповещения, Неопределено); + Возврат; + КонецЕсли; + + Если Параметры_xddReport.Количество() > 0 И ТипЗнч(Параметры_xddReport[0]) <> Тип("ФиксированныйМассив") Тогда + НовыйМассивПараметров = Новый Массив; + НовыйМассивПараметров.Добавить(Параметры_xddReport); + Параметры_xddReport = НовыйМассивПараметров; + КонецЕсли; + + ЭкспортируемыеОтчеты = Новый Массив; + + Для Каждого ОчередныеПараметры Из Параметры_xddReport Цикл + + ИдентификаторГенератораОтчета = ОчередныеПараметры[0]; + ГенераторОтчета = ЭтаФорма.Плагин(ИдентификаторГенератораОтчета); + Отчет = ГенераторОтчета.СоздатьОтчет(ЭтаФорма, РезультатыТестирования); + ПутьКОтчету = ОчередныеПараметры[1]; + + НаборОтчетов = Отчет; + Если ТипЗнч(НаборОтчетов) <> Тип("Массив") Тогда + НовыйНаборОтчетов = Новый Массив; + НовыйНаборОтчетов.Добавить(НаборОтчетов); + НаборОтчетов = НовыйНаборОтчетов; + КонецЕсли; + + СтрокаЭкспорта = СтрокаЭкспортируемыхОтчетов(); + СтрокаЭкспорта.Отчет = НовыйНаборОтчетов; + СтрокаЭкспорта.Путь = ПутьКОтчету; + СтрокаЭкспорта.ГенераторОтчета = ГенераторОтчета; + СтрокаЭкспорта.ИдентификаторГенератораОтчета = ИдентификаторГенератораОтчета; + + ЭкспортируемыеОтчеты.Добавить(СтрокаЭкспорта); + + КонецЦикла; + + ПараметрыДиспетчера = Новый Структура; + ПараметрыДиспетчера.Вставить("ИндексВидаОтчета", 0); + ПараметрыДиспетчера.Вставить("ИндексОтчета", 0); + ПараметрыДиспетчера.Вставить("СписокОтчетов", ЭкспортируемыеОтчеты); + ПараметрыДиспетчера.Вставить("Финализация", ОбработкаОповещения); + + ДиспетчерЭкспортаОтчетовАсинхронныйПакетныйРежим(, ПараметрыДиспетчера); + +КонецПроцедуры + +&НаКлиенте +Функция СтрокаЭкспортируемыхОтчетов() + Возврат Новый Структура("Отчет,Путь,ГенераторОтчета,ИдентификаторГенератораОтчета"); +КонецФункции + + +&НаКлиенте +Процедура ДиспетчерЭкспортаОтчетовАсинхронныйПакетныйРежим(Знач РезультатЭкспорта, Знач ПараметрыДиспетчера) Экспорт + + СписокОтчетов = ПараметрыДиспетчера.СписокОтчетов; + Если СписокОтчетов.Количество() > ПараметрыДиспетчера.ИндексВидаОтчета Тогда + СтрокаЭкспорта = СписокОтчетов[ПараметрыДиспетчера.ИндексВидаОтчета]; + ГенераторОтчета = СтрокаЭкспорта.генераторОтчета; + + ПутьКОтчету = СтрокаЭкспорта.Путь; + + ОписаниеОшибки = СтрШаблон_("УФ: Формируем отчет тестирования - путь %1", ПутьКОтчету); + ЗафиксироватьОшибкуВЖурналеРегистрации(СтрокаЭкспорта.ИдентификаторГенератораОтчета, ОписаниеОшибки, Истина); + + НаборОтчетов = СтрокаЭкспорта.Отчет; + + Если ПараметрыДиспетчера.ИндексОтчета < НаборОтчетов.Количество() Тогда + + Отчет = НаборОтчетов[ПараметрыДиспетчера.ИндексОтчета]; + + ПараметрыДиспетчера.ИндексОтчета = ПараметрыДиспетчера.ИндексОтчета + 1; + КонецЕсли; + + Если ПараметрыДиспетчера.ИндексОтчета >= НаборОтчетов.Количество() Тогда + ПараметрыДиспетчера.ИндексВидаОтчета = ПараметрыДиспетчера.ИндексВидаОтчета + 1; + ПараметрыДиспетчера.ИндексОтчета = 0; + КонецЕсли; + + ОбработчикЭкспорта = Новый ОписаниеОповещения("ДиспетчерЭкспортаОтчетовАсинхронныйПакетныйРежим", ЭтаФорма, ПараметрыДиспетчера, + "ДиспетчерЭкспортаОтчетовАсинхронныйПакетныйРежимИсключение", ЭтаФорма); + ГенераторОтчета.НачатьЭкспорт(ОбработчикЭкспорта, Отчет, СтрокаЭкспорта.Путь); + + Иначе + ОбработкаОповещения = ПараметрыДиспетчера.Финализация; + ОбработкаОповещения.ДополнительныеПараметры.СледующийШаг = "ЗавершитьРаботу"; + ВыполнитьОбработкуОповещения(ОбработкаОповещения); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДиспетчерЭкспортаОтчетовАсинхронныйПакетныйРежимИсключение(Знач ИнформацияОбОшибке, СтандартнаяОбработка, Знач ПараметрыДиспетчера) Экспорт + + СтандартнаяОбработка = Ложь; + + СписокОтчетов = ПараметрыДиспетчера.СписокОтчетов; + Если СписокОтчетов.Количество() > ПараметрыДиспетчера.ИндексВидаОтчета Тогда + СтрокаЭкспорта = СписокОтчетов[ПараметрыДиспетчера.ИндексВидаОтчета]; + ГенераторОтчета = СтрокаЭкспорта.генераторОтчета; + + ТекстОшибки = СтрШаблон("Ошибка при асинхронном режиме генерации отчетов пакетного запуска: + |Состояние: + | Генератор отчета: %1 + | Отчет: %2 + | Путь файла: %3 + | Исключение: %4", + ГенераторОтчета, СтрокаЭкспорта.Отчет, СтрокаЭкспорта.Путь, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + Иначе + ТекстОшибки = СтрШаблон("Ошибка при асинхронном режиме генерации отчетов пакетного запуска: + |Состояние: + | Исключение: %1", + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + КонецЕсли; + + ЗафиксироватьОшибкуВЖурналеРегистрации("xUnitFor1C.АсинхронныйПакетныйЗапуск", ТекстОшибки); + Сообщить(ТекстОшибки, СтатусСообщения.ОченьВажное); + + ОбработкаОповещения = ПараметрыДиспетчера.Финализация; + ОбработкаОповещения.ДополнительныеПараметры.СледующийШаг = "ЗавершитьРаботу"; + ВыполнитьОбработкуОповещения(ОбработкаОповещения); +КонецПроцедуры + &НаКлиенте Функция ЗагрузитьИВыполнитьТесты_ПакетныйРежим(Знач Параметры_xddRun) ПервичнаяНастройка(); + ИдентификаторЗагрузчика = Параметры_xddRun[0]; Загрузчик = Плагин(ИдентификаторЗагрузчика); @@ -1060,11 +1485,15 @@ РезультатыТестирования = ВыполнитьТесты(Загрузчик, ДеревоТестовОтЗагрузчика); Иначе + + + ВывестиСообщение("Не найдено загруженных тестов. Выполнение тестов завершается"); КонецЕсли; + Возврат РезультатыТестирования; КонецФункции @@ -1286,6 +1715,65 @@ КонецЕсли; КонецПроцедуры +#Область АсинхронныйAPI + +&НаКлиенте +Процедура НачатьПодключениеВнешнейбработки(Знач ОбработкаОповещения, Знач ФайлОбработки) Экспорт + + Если ПодключенныеВнешниеОбработки.Получить(ФайлОбработки.ИмяБезРасширения) = Неопределено Тогда + ЭтоОтчет = (НРег(ФайлОбработки.Расширение) = ".erf"); + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("ФайлОбработки", ФайлОбработки); + ПараметрыОповещения.Вставить("ЭтоОтчет", ЭтоОтчет); + ПараметрыОповещения.Вставить("ОбработкаЗавершения", ОбработкаОповещения); + + АдресХранилища = ""; + Оп = Новый ОписаниеОповещения("ПодключитьВнешнююОбработкуЗавершение", ЭтаФорма, ПараметрыОповещения); + НачатьПомещениеФайла(Оп, АдресХранилища, ФайлОбработки.ПолноеИмя , Ложь, ЭтаФорма.УникальныйИдентификатор); + Иначе + ВыполнитьОбработкуОповещения(ОбработкаОповещения); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НачатьЗагрузкуТестов(Знач ОбработкаОповещения, Знач ИдентификаторВыбранногоЗагрузчика, Знач Путь) Экспорт + + ИнициализироватьИндикаторВыполнения(); + + ЭтаФорма.ИдентификаторЗагрузчика = ИдентификаторВыбранногоЗагрузчика; + ФормаЗагрузчика = Плагин(ИдентификаторВыбранногоЗагрузчика); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ОбработкаОповещения", ОбработкаОповещения); + ДополнительныеПараметры.Вставить("ИдентификаторВыбранногоЗагрузчика", ИдентификаторВыбранногоЗагрузчика); + ДополнительныеПараметры.Вставить("Путь", Путь); + Обработчик = Новый ОписаниеОповещения("ЗагрузкаТестовЗавершение", ЭтаФорма, ДополнительныеПараметры); + ФормаЗагрузчика.НачатьЗагрузку(Обработчик, ЭтаФорма, Путь); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузкаТестовЗавершение(Знач ДеревоОтЗагрузчика, Знач ДополнительныеПараметры) Экспорт + + ЭтаФорма.ДеревоОтЗагрузчика = ДеревоОтЗагрузчика; + ЭлементыДереваТестов = ЭтаФорма.ДеревоТестов.ПолучитьЭлементы(); + ЭлементыДереваТестов.Очистить(); + ЗаполнитьДеревоТестов(ЭтаФорма.ДеревоТестов, ДеревоОтЗагрузчика); + + КоличествоТестовыхСлучаев = ЗаполнитьКоличествоТестовыхСлучаевПоВсемуДеревуТестов(ЭтаФорма.ДеревоТестов); + РазвернутьСтрокиДерева(КоличествоТестовыхСлучаев < 30); + + СохранитьВИсториюЗагрузкиТестовНаСервере(ДополнительныеПараметры.ИдентификаторВыбранногоЗагрузчика, ДополнительныеПараметры.Путь); + ОбновитьКомандыИсторииЗагрузкиТестов(); + + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработкаОповещения); + +КонецПроцедуры + +#КонецОбласти + &НаСервереБезКонтекста Процедура ПодключитьФайлОбработкиНаСервере(Знач АдресХранилища, Знач ИдентификаторОбработки, ЭтоОтчет = Ложь) Если ЭтоОтчет = Истина Тогда @@ -1520,6 +2008,10 @@ ПодключенныеВнешниеОбработки.Вставить(ФайлОбработки.ИмяБезРасширения, Истина); + Если ДополнительныеПараметры.Свойство("ОбработкаЗавершения") Тогда + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработкаЗавершения, Результат); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -1652,6 +2144,42 @@ Возврат СтрШаблон_(СтрокаШаблон, Парам1, Парам2, Парам3, Парам4, Парам5); КонецФункции +// Аналог СтрРазделить() для старых версий платформы +// Описание параметров аналогично описанию параметров для СтрРазделить() +&НаКлиентеНаСервереБезКонтекста +Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт + + Результат = Новый Массив; + + // для обеспечения обратной совместимости + Если ПропускатьПустыеСтроки = Неопределено Тогда + ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); + Если ПустаяСтрока(Строка) Тогда + Если Разделитель = " " Тогда + Результат.Добавить(""); + КонецЕсли; + Возврат Результат; + КонецЕсли; + КонецЕсли; + + Позиция = Найти(Строка, Разделитель); + Пока Позиция > 0 Цикл + Подстрока = Лев(Строка, Позиция - 1); + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда + Результат.Добавить(Подстрока); + КонецЕсли; + Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); + Позиция = Найти(Строка, Разделитель); + КонецЦикла; + + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда + Результат.Добавить(Строка); + КонецЕсли; + + Возврат Результат; + +КонецФункции + &НаКлиенте Функция КлиентИСерверРасположеныНаОднойМашине() @@ -1688,5 +2216,77 @@ КонецЕсли; Возврат Найти(Врег(СтрокаСоединенияИнформационнойБазы), "FILE=") = 1; КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ВерсияПриложенияБольшеИлиРавнаЧемЗаданная(Версия1, Версия2) Экспорт + Массив1 = РазложитьСтрокуВМассивПодстрок(Версия1, "."); + Массив2 = РазложитьСтрокуВМассивПодстрок(Версия2, "."); + + Версия1БольшеИлиРавно = Истина; + Для Ккк = 0 По Массив1.Количество() - 1 Цикл + Элем1 = Массив1.Получить(Ккк); + Элем2 = Массив2.Получить(Ккк); + + Если Число(Элем2) > Число(Элем1) Тогда + Версия1БольшеИлиРавно = Ложь; + ИначеЕсли Число(Элем2) < Число(Элем1) Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Версия1БольшеИлиРавно; +КонецФункции + +&НаКлиенте +Функция ВерсияПриложенияБольшеИлиРавнаЧемЗаданнаяКлиент(Версия1, Версия2) Экспорт + + Возврат ВерсияПриложенияБольшеИлиРавнаЧемЗаданная(Версия1, Версия2); + +КонецФункции + +&НаСервереБезКонтекста +Функция УзнатьЕстьПоддержкаАсинхронныхВызовов() + СистемнаяИнформация = Новый СистемнаяИнформация; + + Версия1БольшеИлиРавно = ВерсияПриложенияБольшеИлиРавнаЧемЗаданная(СистемнаяИнформация.ВерсияПриложения,"8.3.5.1383"); + + Рез = Версия1БольшеИлиРавно И Не ОпределитьВозможностьСинхронныхВызовов(); + + Возврат Рез; +КонецФункции + +&НаСервереБезКонтекста +Функция УзнатьЕстьЗащитаОтОпасныхДействий() + СистемнаяИнформация = Новый СистемнаяИнформация; + Массив1 = РазложитьСтрокуВМассивПодстрок(СистемнаяИнформация.ВерсияПриложения, "."); + Массив2 = РазложитьСтрокуВМассивПодстрок("8.3.9.2033", "."); + + Версия1БольшеИлиРавно = Истина; + Для Ккк = 0 По Массив1.Количество() - 1 Цикл + Элем1 = Массив1.Получить(Ккк); + Элем2 = Массив2.Получить(Ккк); + + Если Число(Элем2) > Число(Элем1) Тогда + Версия1БольшеИлиРавно = Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Версия1БольшеИлиРавно; +КонецФункции + +&НаСервереБезКонтекста +Функция ОпределитьВозможностьСинхронныхВызовов() + + Запрет = Метаданные.РежимИспользованияСинхронныхВызововРасширенийИВнешнихКомпонент = Метаданные.СвойстваОбъектов.РежимИспользованияСинхронныхВызововРасширенийИВнешнихКомпонент.НеИспользовать; + Возврат Не Запрет; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПолучитьКаталогВременныхФайлов() + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("123"); + ВременныйФайл = Новый Файл(ИмяВременногоФайла); + Возврат ВременныйФайл.Путь; +КонецФункции -// } Вспомогательные методы \ No newline at end of file +// } Вспомогательные методы diff --git "a/lib/CF/83xddNoSync/AccountingRegisters/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\221\321\203\321\205\320\263\320\260\320\273\321\202\320\265\321\200\320\270\320\2701.xml" "b/lib/CF/83xddNoSync/AccountingRegisters/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\221\321\203\321\205\320\263\320\260\320\273\321\202\320\265\321\200\320\270\320\2701.xml" new file mode 100644 index 000000000..8a9eff736 --- /dev/null +++ "b/lib/CF/83xddNoSync/AccountingRegisters/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\221\321\203\321\205\320\263\320\260\320\273\321\202\320\265\321\200\320\270\320\2701.xml" @@ -0,0 +1,541 @@ + + + + + + 5ce670b8-d244-4425-814f-1c5912afd49b + d60c9db8-7bca-41a5-aae3-4968460f01f7 + + + cb4d74ef-f043-4464-9123-63f4abb2dffe + 514d0fad-21ef-455f-80fc-9f0b17a1fc51 + + + 15c9463f-4e1e-4a5b-91ce-bf4c1319a115 + 5674bd07-6b2b-4503-931b-05cf1ecc4c44 + + + 54d41948-5663-4167-aa07-023a3ded8334 + f596d36b-ce1f-46aa-b616-1bc4a2aa825c + + + 06de0b5b-f188-4985-bac6-2d1696e1a566 + 529b7c14-44bb-422f-b0a8-286339ade06f + + + 4250e577-4924-4010-ae2e-03e0510a2e34 + 58149843-7c17-47de-b319-97376c8d2f95 + + + a5c70ca1-e64d-46cd-a609-177fba3327e5 + a85d38cb-c6e6-4717-9f1e-5122f833befd + + + + РегистрБухгалтерии1 + + + false + false + ChartOfAccounts.ПланСчетов1 + true + 0 + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + AccountingRegister.РегистрБухгалтерии1.StandardAttribute.Account + 1 + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + AccountingRegister.РегистрБухгалтерии1.StandardAttribute.Account + 2 + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + AccountingRegister.РегистрБухгалтерии1.StandardAttribute.Account + 3 + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + Managed + true + DontUse + + + + + + + + ПростойСправочник + + + ru + Простой справочник + + + + + cfg:CatalogRef.ПростойСправочник + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + true + + false + DontIndex + Use + + + + + ПростойСправочник2 + + + ru + Простой справочник2 + + + + + cfg:CatalogRef.ПростойСправочник2 + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + false + + false + DontIndex + Use + + + + + РесурсЧисло + + + ru + Ресурс число + + + + + xs:decimal + + 10 + 2 + Any + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + true + + + Use + + + + + РесурсЧисло1 + + + ru + Ресурс число1 + + + + + xs:decimal + + 10 + 2 + Any + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + false + + + Use + + + + + РеквизитБулево + + + ru + Реквизит булево + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/AccumulationRegisters/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\235\320\260\320\272\320\276\320\277\320\273\320\265\320\275\320\270\321\2172.xml" "b/lib/CF/83xddNoSync/AccumulationRegisters/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\235\320\260\320\272\320\276\320\277\320\273\320\265\320\275\320\270\321\2172.xml" new file mode 100644 index 000000000..6d6ba109c --- /dev/null +++ "b/lib/CF/83xddNoSync/AccumulationRegisters/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\235\320\260\320\272\320\276\320\277\320\273\320\265\320\275\320\270\321\2172.xml" @@ -0,0 +1,206 @@ + + + + + + abd86a0f-f2fb-4204-8758-65984e8cc0b8 + 92391fc1-e16b-4aa6-9a2a-122cd2663775 + + + 8cadf6df-f384-476e-9299-8bc955d13e5b + a07d696d-ee84-4cdc-af40-a6b25858cc8a + + + 33b811ba-ca92-44c2-85dd-ea43417e9e90 + 1711862c-8e11-4f54-9fa6-b2260090860a + + + d858be9f-d426-4dd8-8c3a-c6b29fe07631 + 0394a940-af95-4bde-9ed0-73c263eb381f + + + f4567532-5fad-4809-b453-d06f0bc18151 + 2ad2d6db-0633-425a-929a-e9650396bddc + + + 10e02ee6-e438-4719-90b4-a9cfb271a137 + 598ec45d-f535-497c-80ac-9571c9be3377 + + + + РегистрНакопления2 + + + ru + Регистр накопления2 + + + + false + + + Balance + false + Managed + DontUse + true + + + + + + + + РесурсЧисло + + + ru + Ресурс число + + + + + xs:decimal + + 10 + 2 + Any + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + Use + + + + + РеквизитБулево + + + ru + Реквизит булево + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + ПростойСправочник + + + ru + Простой справочник + + + + + cfg:CatalogRef.ПростойСправочник + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + false + DontIndex + Use + true + + + + + ПростойСправочник2 + + + ru + Простой справочник2 + + + + + cfg:CatalogRef.ПростойСправочник2 + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + false + DontIndex + Use + true + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/BusinessProcesses/\320\221\320\270\320\267\320\275\320\265\321\201\320\237\321\200\320\276\321\206\320\265\321\201\321\2011.xml" "b/lib/CF/83xddNoSync/BusinessProcesses/\320\221\320\270\320\267\320\275\320\265\321\201\320\237\321\200\320\276\321\206\320\265\321\201\321\2011.xml" new file mode 100644 index 000000000..3ba6de248 --- /dev/null +++ "b/lib/CF/83xddNoSync/BusinessProcesses/\320\221\320\270\320\267\320\275\320\265\321\201\320\237\321\200\320\276\321\206\320\265\321\201\321\2011.xml" @@ -0,0 +1,371 @@ + + + + + + 6cf1be9d-3493-4193-98bc-858efdd3c36e + 53330a8d-d3c9-464e-86f0-c485cbc6d274 + + + ae28ffb1-1b22-482d-8f4e-4279348087d5 + 0d8e7048-e2ab-4a11-b5d2-ccfd9cbe7527 + + + e8a90dcc-f918-4f79-b322-d71742c71a56 + e08a752f-8437-4878-a793-a82aedd1f41c + + + 09a3cf98-b157-43c9-b17d-9137301c9a94 + bd8308be-b100-4182-9460-2928808b4827 + + + d3b469f0-cc90-456c-a6a5-da01be735f55 + 2c614c2a-6bbc-42ce-b97e-d902295e2a2e + + + 30b3403f-2f19-432a-bc77-eeb45ac6db42 + 1de975ac-a221-49f6-8376-ea0755fe7ade + + + + БизнесПроцесс1 + + + false + InDialog + + BusinessProcess.БизнесПроцесс1.StandardAttribute.Number + + DontUse + Begin + Directly + DontUse + + + + + + + Auto + String + 9 + Variable + true + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + Task.Задача1.EmptyRef + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + true + + Nonperiodical + Task.Задача1 + false + + Managed + false + Use + + + + + + + + + + ПростойСправочник + + + ru + Простой справочник + + + + + cfg:CatalogRef.ПростойСправочник + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + + 5cecf190-0c29-41e9-a548-02e0ddeb9d85 + 5cb0bb84-72cf-49fc-b049-6fe06c7a2522 + + + 3cd4bc8d-7de1-4a85-9bf9-246916b02636 + 3ae54271-d952-4ab2-8dab-bdd40a6a954b + + + + ТабличнаяЧасть1 + + + + DontCheck + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + + + + Реквизит1 + + + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/BusinessProcesses/\320\221\320\270\320\267\320\275\320\265\321\201\320\237\321\200\320\276\321\206\320\265\321\201\321\2011/Ext/Flowchart.xml" "b/lib/CF/83xddNoSync/BusinessProcesses/\320\221\320\270\320\267\320\275\320\265\321\201\320\237\321\200\320\276\321\206\320\265\321\201\321\2011/Ext/Flowchart.xml" new file mode 100644 index 000000000..b4c3674c1 --- /dev/null +++ "b/lib/CF/83xddNoSync/BusinessProcesses/\320\221\320\270\320\267\320\275\320\265\321\201\320\237\321\200\320\276\321\206\320\265\321\201\321\2011/Ext/Flowchart.xml" @@ -0,0 +1,211 @@ + + + style:FieldBackColor + true + Lines + 20 + 20 + + 10 + 10 + 10 + 10 + false + Auto + + + + + Старт + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Старт</v8:content> + </v8:item> + + + 1 + auto + style:FormTextColor + style:BorderColor + 0 + 0 + false + false + + Center + Center + Left + + + Solid + + + AutoSize + + + + + + + + Линия1 + + <ToolTip/> + <TabOrder>2</TabOrder> + <BackColor>auto</BackColor> + <TextColor>style:FormTextColor</TextColor> + <LineColor>style:BorderColor</LineColor> + <GroupNumber>0</GroupNumber> + <ZOrder>1</ZOrder> + <Hyperlink>false</Hyperlink> + <Transparent>false</Transparent> + <Font kind="AutoFont"/> + <HorizontalAlign>Center</HorizontalAlign> + <VerticalAlign>Center</VerticalAlign> + <PictureLocation>Left</PictureLocation> + <PivotPoints> + <Point x="350" y="180"/> + <Point x="350" y="200"/> + <Point x="350" y="200"/> + <Point x="350" y="220"/> + </PivotPoints> + <Connect> + <From> + <Item>Старт</Item> + <PortIndex>4</PortIndex> + </From> + <To> + <Item>Действие1</Item> + <PortIndex>2</PortIndex> + </To> + </Connect> + <Line width="1" gap="false"> + <v8ui:style xsi:type="sch:ConnectorLineType">Solid</v8ui:style> + </Line> + <DecorativeLine>false</DecorativeLine> + <TextLocation>FirstSegment</TextLocation> + <BeginArrow>None</BeginArrow> + <EndArrow>Filled</EndArrow> + </Properties> + </ConnectionLine> + <Activity id="3" uuid="9d9423e8-2514-4157-b4bf-751a187e87c5"> + <Properties> + <Name>Действие1</Name> + <Title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Действие1</v8:content> + </v8:item> + + + 3 + auto + style:FormTextColor + style:BorderColor + 0 + 2 + false + false + + Center + Center + Left + + + Solid + + + AutoSize + Действие1 + + false + + + + + + + + + + + + + + + Линия2 + + <ToolTip/> + <TabOrder>4</TabOrder> + <BackColor>auto</BackColor> + <TextColor>style:FormTextColor</TextColor> + <LineColor>style:BorderColor</LineColor> + <GroupNumber>0</GroupNumber> + <ZOrder>3</ZOrder> + <Hyperlink>false</Hyperlink> + <Transparent>false</Transparent> + <Font kind="AutoFont"/> + <HorizontalAlign>Center</HorizontalAlign> + <VerticalAlign>Center</VerticalAlign> + <PictureLocation>Left</PictureLocation> + <PivotPoints> + <Point x="350" y="300"/> + <Point x="350" y="320"/> + <Point x="350" y="320"/> + <Point x="350" y="340"/> + </PivotPoints> + <Connect> + <From> + <Item>Действие1</Item> + <PortIndex>4</PortIndex> + </From> + <To> + <Item>Завершение</Item> + <PortIndex>2</PortIndex> + </To> + </Connect> + <Line width="1" gap="false"> + <v8ui:style xsi:type="sch:ConnectorLineType">Solid</v8ui:style> + </Line> + <DecorativeLine>false</DecorativeLine> + <TextLocation>FirstSegment</TextLocation> + <BeginArrow>None</BeginArrow> + <EndArrow>Filled</EndArrow> + </Properties> + </ConnectionLine> + <Completion id="5" uuid="d37f5b8d-131c-4b26-bc26-5d11190419f3"> + <Properties> + <Name>Завершение</Name> + <Title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Завершение</v8:content> + </v8:item> + + + 5 + auto + style:FormTextColor + style:BorderColor + 0 + 4 + false + false + + Center + Center + Left + + + Solid + + + AutoSize + + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/BusinessProcesses/\320\221\320\270\320\267\320\275\320\265\321\201\320\237\321\200\320\276\321\206\320\265\321\201\321\2012.xml" "b/lib/CF/83xddNoSync/BusinessProcesses/\320\221\320\270\320\267\320\275\320\265\321\201\320\237\321\200\320\276\321\206\320\265\321\201\321\2012.xml" new file mode 100644 index 000000000..f0f6c7910 --- /dev/null +++ "b/lib/CF/83xddNoSync/BusinessProcesses/\320\221\320\270\320\267\320\275\320\265\321\201\320\237\321\200\320\276\321\206\320\265\321\201\321\2012.xml" @@ -0,0 +1,371 @@ + + + + + + 8ec345e9-2b18-4628-9b8c-6976d867f522 + bbbeef7b-d3ba-4dae-87a1-48807bbec0b2 + + + e92212e0-1fab-4450-9181-3877721a117b + 7fa724ed-90cd-4253-8f66-b784ece368cd + + + 19aefbd8-6a39-4dc6-8420-9bd7eda85d36 + 8315a499-f431-4879-a9df-04e4ca2405c7 + + + 3432880d-f79d-4547-be1e-4c0ea12daa5a + 514617f4-afc1-4194-ad5c-219f1afe1e34 + + + 0cc2d187-4a61-4563-b8ef-5e032eb15d85 + 098f7c03-098d-437c-b516-0bca3991c529 + + + c3d43def-eefe-4bef-8b70-8647aa775c7a + 322cb10e-4d4c-4e0a-9a39-a67cd65ad36f + + + + БизнесПроцесс2 + + + false + InDialog + + BusinessProcess.БизнесПроцесс2.StandardAttribute.Number + + DontUse + Begin + Directly + DontUse + + + + + + + Auto + String + 9 + Variable + true + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + Task.Задача1.EmptyRef + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + true + + Nonperiodical + Task.Задача1 + false + + Managed + false + Use + + + + + + + + + + ПростойСправочник + + + ru + Простой справочник + + + + + cfg:CatalogRef.ПростойСправочник + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + + 68b60d16-b1b4-4e0f-bdfd-bfe079fb319f + 1c4963b8-0331-4d88-bccb-54fc0bd59184 + + + 5273d7e1-d3ad-4e11-90ec-af34b652fbfb + 33286eea-1875-4920-b268-533a9b34280c + + + + ТабличнаяЧасть1 + + + + DontCheck + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + + + + Реквизит1 + + + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/BusinessProcesses/\320\221\320\270\320\267\320\275\320\265\321\201\320\237\321\200\320\276\321\206\320\265\321\201\321\2012/Ext/Flowchart.xml" "b/lib/CF/83xddNoSync/BusinessProcesses/\320\221\320\270\320\267\320\275\320\265\321\201\320\237\321\200\320\276\321\206\320\265\321\201\321\2012/Ext/Flowchart.xml" new file mode 100644 index 000000000..b4c3674c1 --- /dev/null +++ "b/lib/CF/83xddNoSync/BusinessProcesses/\320\221\320\270\320\267\320\275\320\265\321\201\320\237\321\200\320\276\321\206\320\265\321\201\321\2012/Ext/Flowchart.xml" @@ -0,0 +1,211 @@ + + + style:FieldBackColor + true + Lines + 20 + 20 + + 10 + 10 + 10 + 10 + false + Auto + + + + + Старт + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Старт</v8:content> + </v8:item> + + + 1 + auto + style:FormTextColor + style:BorderColor + 0 + 0 + false + false + + Center + Center + Left + + + Solid + + + AutoSize + + + + + + + + Линия1 + + <ToolTip/> + <TabOrder>2</TabOrder> + <BackColor>auto</BackColor> + <TextColor>style:FormTextColor</TextColor> + <LineColor>style:BorderColor</LineColor> + <GroupNumber>0</GroupNumber> + <ZOrder>1</ZOrder> + <Hyperlink>false</Hyperlink> + <Transparent>false</Transparent> + <Font kind="AutoFont"/> + <HorizontalAlign>Center</HorizontalAlign> + <VerticalAlign>Center</VerticalAlign> + <PictureLocation>Left</PictureLocation> + <PivotPoints> + <Point x="350" y="180"/> + <Point x="350" y="200"/> + <Point x="350" y="200"/> + <Point x="350" y="220"/> + </PivotPoints> + <Connect> + <From> + <Item>Старт</Item> + <PortIndex>4</PortIndex> + </From> + <To> + <Item>Действие1</Item> + <PortIndex>2</PortIndex> + </To> + </Connect> + <Line width="1" gap="false"> + <v8ui:style xsi:type="sch:ConnectorLineType">Solid</v8ui:style> + </Line> + <DecorativeLine>false</DecorativeLine> + <TextLocation>FirstSegment</TextLocation> + <BeginArrow>None</BeginArrow> + <EndArrow>Filled</EndArrow> + </Properties> + </ConnectionLine> + <Activity id="3" uuid="9d9423e8-2514-4157-b4bf-751a187e87c5"> + <Properties> + <Name>Действие1</Name> + <Title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Действие1</v8:content> + </v8:item> + + + 3 + auto + style:FormTextColor + style:BorderColor + 0 + 2 + false + false + + Center + Center + Left + + + Solid + + + AutoSize + Действие1 + + false + + + + + + + + + + + + + + + Линия2 + + <ToolTip/> + <TabOrder>4</TabOrder> + <BackColor>auto</BackColor> + <TextColor>style:FormTextColor</TextColor> + <LineColor>style:BorderColor</LineColor> + <GroupNumber>0</GroupNumber> + <ZOrder>3</ZOrder> + <Hyperlink>false</Hyperlink> + <Transparent>false</Transparent> + <Font kind="AutoFont"/> + <HorizontalAlign>Center</HorizontalAlign> + <VerticalAlign>Center</VerticalAlign> + <PictureLocation>Left</PictureLocation> + <PivotPoints> + <Point x="350" y="300"/> + <Point x="350" y="320"/> + <Point x="350" y="320"/> + <Point x="350" y="340"/> + </PivotPoints> + <Connect> + <From> + <Item>Действие1</Item> + <PortIndex>4</PortIndex> + </From> + <To> + <Item>Завершение</Item> + <PortIndex>2</PortIndex> + </To> + </Connect> + <Line width="1" gap="false"> + <v8ui:style xsi:type="sch:ConnectorLineType">Solid</v8ui:style> + </Line> + <DecorativeLine>false</DecorativeLine> + <TextLocation>FirstSegment</TextLocation> + <BeginArrow>None</BeginArrow> + <EndArrow>Filled</EndArrow> + </Properties> + </ConnectionLine> + <Completion id="5" uuid="d37f5b8d-131c-4b26-bc26-5d11190419f3"> + <Properties> + <Name>Завершение</Name> + <Title> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Завершение</v8:content> + </v8:item> + + + 5 + auto + style:FormTextColor + style:BorderColor + 0 + 4 + false + false + + Center + Center + Left + + + Solid + + + AutoSize + + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\230\320\265\321\200\320\260\321\200\321\205\320\270\321\207\320\265\321\201\320\272\320\270\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\230\320\265\321\200\320\260\321\200\321\205\320\270\321\207\320\265\321\201\320\272\320\270\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272.xml" new file mode 100644 index 000000000..90f37b853 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\230\320\265\321\200\320\260\321\200\321\205\320\270\321\207\320\265\321\201\320\272\320\270\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272.xml" @@ -0,0 +1,547 @@ + + + + + + 46fd7f7b-eae7-439d-a572-013534c4eb09 + 2f7abc4d-103d-4dbe-a4b7-5d69d9b4bfc2 + + + f2e9634f-2a37-4570-93f0-2a26e5f40052 + b39da958-262e-4ee8-b5eb-1b0e0aeaf1df + + + 7d2992e9-7c22-4229-b427-2be8ac6fc415 + 0bd3c6b3-ae0c-4954-904c-e1c2d2b7c193 + + + e776b877-f98c-43d2-87bf-612d6c33ca72 + 6b605b67-bb92-4332-942f-236c667d3052 + + + ea590713-bfe4-43f3-983e-eaf7ada7cb40 + 8c84b52c-b276-4f34-af8b-5bd626e5a1c4 + + + + ИерархическийСправочник + + + ru + Иерархический справочник + + + + true + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + Number + Variable + WholeCatalog + false + true + AsDescription + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + true + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + true + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + Auto + InDialog + false + BothWays + + Catalog.ИерархическийСправочник.StandardAttribute.Description + Catalog.ИерархическийСправочник.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + + + + + ПростойСправочник + + + ru + Простой справочник + + + + + cfg:CatalogRef.ПростойСправочник + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + + + + + ПростойСправочник2ДляГруппы + + + ru + Простой справочник2 для группы + + + + + cfg:CatalogRef.ПростойСправочник2 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForFolder + DontIndex + Use + + + + + + acd0bfee-0eac-424d-bca1-587b82898b40 + 31ccba4b-0960-40d8-9382-ac5ad869f0a2 + + + 80d08bdb-6a6c-4215-8d94-8c07575afed0 + 96f091d7-a30c-40a7-b573-e4a13cefa650 + + + + ТабличнаяЧастьДляЭлемента + + + ru + Табличная часть для элемента + + + + + DontCheck + ForItem + + + + + ПростойСправочник + + + ru + Простой справочник + + + + + cfg:CatalogRef.ПростойСправочник + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + + + + b04d4cd2-074c-40e9-be00-3915298401b9 + 4ced6ea6-2877-409c-812e-8058fca39fa8 + + + 0503deca-c540-4fca-a916-ac8216effbe4 + a7ee086a-4d7d-4c1c-9112-5c9edaaba8de + + + + ТабличнаяЧастьДляГруппы + + + ru + Табличная часть для группы + + + + + DontCheck + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + ForFolder + + + + + ПростойСправочник + + + ru + Простой справочник + + + + + cfg:CatalogRef.ПростойСправочник + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\230\320\265\321\200\320\260\321\200\321\205\320\270\321\207\320\265\321\201\320\272\320\270\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/Catalogs/\320\230\320\265\321\200\320\260\321\200\321\205\320\270\321\207\320\265\321\201\320\272\320\270\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..2eb0005a0 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\230\320\265\321\200\320\260\321\200\321\205\320\270\321\207\320\265\321\201\320\272\320\270\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/ObjectModule.bsl" @@ -0,0 +1,7 @@ + +Процедура ПередЗаписью(Отказ) + Перем СвойствоПростойСправочник; + Если ДополнительныеСвойства.Свойство("СвойствоПростойСправочник", СвойствоПростойСправочник) и ЗначениеЗаполнено(СвойствоПростойСправочник) Тогда + ПростойСправочник = СвойствоПростойСправочник; + КонецЕсли; +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\230\320\265\321\200\320\260\321\200\321\205\320\270\321\207\320\265\321\201\320\272\320\270\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/Predefined.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\230\320\265\321\200\320\260\321\200\321\205\320\270\321\207\320\265\321\201\320\272\320\270\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/Predefined.xml" new file mode 100644 index 000000000..81aafb1bf --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\230\320\265\321\200\320\260\321\200\321\205\320\270\321\207\320\265\321\201\320\272\320\270\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/Predefined.xml" @@ -0,0 +1,9 @@ + + + + Группа1 + 1 + Группа1 + true + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\224\320\262\321\203\320\274\321\217\320\222\320\273\320\260\320\264\320\265\320\273\321\214\321\206\320\260\320\274\320\270.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\224\320\262\321\203\320\274\321\217\320\222\320\273\320\260\320\264\320\265\320\273\321\214\321\206\320\260\320\274\320\270.xml" new file mode 100644 index 000000000..e1739c49f --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\224\320\262\321\203\320\274\321\217\320\222\320\273\320\260\320\264\320\265\320\273\321\214\321\206\320\260\320\274\320\270.xml" @@ -0,0 +1,93 @@ + + + + + + 573581bf-8e7c-486e-be60-8f7c5fd510fa + f2aa0009-b840-4dcc-b91d-8905264c7e36 + + + 998979cc-985c-4883-93a1-2f4b7bc4aa62 + f28e1324-2117-4111-a180-107cdfcb7dff + + + f5781bb3-07f7-4289-b3eb-e77a02dc2a8b + 7ec76855-0e19-4cf8-ad6f-e117d4ab8b0f + + + 19292f30-2a94-41ed-9297-95e3c7327f39 + ac832f79-dc1d-42dd-ba74-02d3b47405b2 + + + 68d3f36f-d9e9-453c-bc71-6e036c9b935c + 5c3fa79a-6930-440a-9005-dc88acf01ece + + + + ПодчиненныйСДвумяВладельцами + + + ru + Подчиненный с двумя владельцами + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + Catalog.ПростойСправочник + Catalog.ПростойСправочник2 + + ToItems + 9 + 25 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.ПодчиненныйСДвумяВладельцами.StandardAttribute.Description + Catalog.ПодчиненныйСДвумяВладельцами.StandardAttribute.Code + + Begin + DontUse + Directly + Catalog.ПодчиненныйСДвумяВладельцами.Form.ФормаЭлемента + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + + +
ФормаЭлемента
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\224\320\262\321\203\320\274\321\217\320\222\320\273\320\260\320\264\320\265\320\273\321\214\321\206\320\260\320\274\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\224\320\262\321\203\320\274\321\217\320\222\320\273\320\260\320\264\320\265\320\273\321\214\321\206\320\260\320\274\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" new file mode 100644 index 000000000..5a8551951 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\224\320\262\321\203\320\274\321\217\320\222\320\273\320\260\320\264\320\265\320\273\321\214\321\206\320\260\320\274\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Ordinary + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\224\320\262\321\203\320\274\321\217\320\222\320\273\320\260\320\264\320\265\320\273\321\214\321\206\320\260\320\274\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\224\320\262\321\203\320\274\321\217\320\222\320\273\320\260\320\264\320\265\320\273\321\214\321\206\320\260\320\274\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" new file mode 100644 index 000000000..fa8ce54ec Binary files /dev/null and "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\224\320\262\321\203\320\274\321\217\320\222\320\273\320\260\320\264\320\265\320\273\321\214\321\206\320\260\320\274\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" differ diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272.xml" new file mode 100644 index 000000000..fc6e1a834 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272.xml" @@ -0,0 +1,321 @@ + + + + + + 5675f4a8-94f1-4141-bc84-69e4fe7339bf + 53645ad6-7370-460a-8547-64156f19a0dd + + + 4a6f0c09-962e-4b68-9ad5-69a38952e08a + bb48a4bd-117e-4da0-93f2-21573568d66c + + + 2f2f3bad-be42-4713-b3ea-c62dbc8914d3 + aa891238-aa02-48df-8598-bbb131f2fb78 + + + 9c638494-4cb9-42d6-ad25-ee97f0d369c6 + d3b6b3fb-8490-44ab-80f1-b5684951d5df + + + 0dfd353e-4353-4f2c-a015-20dae6c54e19 + 48fa0337-c1c2-492b-86ea-5947ee1f874f + + + + ПодчиненныйСправочник + + + ru + Подчиненный справочник + + + + false + HierarchyFoldersAndItems + false + 2 + true + false + + Catalog.ПростойСправочник + + ToItems + 9 + 25 + String + Variable + WholeCatalog + false + true + AsDescription + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + true + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + Catalog.ПростойСправочник.EmptyRef + + + + + + DontCheck + false + true + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + Auto + InDialog + false + BothWays + + Catalog.ПодчиненныйСправочник.StandardAttribute.Description + Catalog.ПодчиненныйСправочник.StandardAttribute.Code + + Begin + DontUse + Directly + Catalog.ПодчиненныйСправочник.Form.ФормаЭлемента + + Catalog.ПодчиненныйСправочник.Form.ФормаСписка + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + + +
ФормаЭлемента
+
УпрФормаЭлемента
+
ФормаСписка
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\243\320\277\321\200\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\243\320\277\321\200\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" new file mode 100644 index 000000000..0b541c8eb --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\243\320\277\321\200\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + УпрФормаЭлемента + + + ru + Управляемая форма элемента + + + + Managed + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\243\320\277\321\200\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\243\320\277\321\200\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" new file mode 100644 index 000000000..4b4fb5c54 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\243\320\277\321\200\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" @@ -0,0 +1,35 @@ + +
+ LockOwnerWindow + Items + + + + Объект.Code + EnterOnInput + + + + + Объект.Description + EnterOnInput + + + + + Объект.Owner + EnterOnInput + + + + + + + + cfg:CatalogObject.ПодчиненныйСправочник + + true + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" new file mode 100644 index 000000000..457de8693 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Ordinary + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.bin" "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.bin" new file mode 100644 index 000000000..ecf4741f8 Binary files /dev/null and "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.bin" differ diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" new file mode 100644 index 000000000..1c3fed48d --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Ordinary + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" new file mode 100644 index 000000000..f10c0129e Binary files /dev/null and "b/lib/CF/83xddNoSync/Catalogs/\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" differ diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272.xml" new file mode 100644 index 000000000..e1da65a10 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272.xml" @@ -0,0 +1,398 @@ + + + + + + 8da0b1d4-112c-4b22-989c-8608b2200c8e + 3021c5e5-f736-4aa8-8349-42b5d228cce5 + + + 27a93a7c-7ca1-4ebf-9b3d-5689a8b6475f + 6a22273b-e955-4fdf-a664-0cac126952e8 + + + 864cb7c3-67eb-43fe-8af0-9b65429b5d41 + 4920125f-c573-4c24-addd-27da8c73b8eb + + + cf43d9cc-a712-49df-92ca-bc49964f4436 + 839c3b1d-26c1-43c8-afbb-a062fea07f0b + + + 93e738e2-fdba-4d49-b012-9ac29682849d + dfaf5852-872c-4266-bbc2-6794b0d5679c + + + + ПростойСправочник + + + ru + Простой справочник + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + Number + Variable + WholeCatalog + false + true + AsDescription + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + true + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + true + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + Auto + InDialog + false + BothWays + + Catalog.ПростойСправочник.StandardAttribute.Description + Catalog.ПростойСправочник.StandardAttribute.Code + + Begin + DontUse + Directly + Catalog.ПростойСправочник.Form.ФормаЭлемента + + Catalog.ПростойСправочник.Form.ФормаСписка + Catalog.ПростойСправочник.Form.ФормаВыбора + + Catalog.ПростойСправочник.Form.УпрФормаЭлемента + + + + + false + + + Managed + Use + + + + + + Use + Auto + + + + + РеквизитБулево + + + ru + Реквизит булево + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + + + + + РеквизитПеречисление + + + ru + Реквизит перечисление + + + + + cfg:EnumRef.Перечисление1 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + + +
ФормаСписка
+
ФормаЭлемента
+
ФормаВыбора
+
УпрФормаЭлемента
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/ManagerModule.bsl" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/ManagerModule.bsl" new file mode 100644 index 000000000..1bc7fed26 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/ManagerModule.bsl" @@ -0,0 +1,6 @@ +Функция ПолучитьЗапрещенноеНаименование(Ид) Экспорт + Если Ид = 0 Тогда + Возврат "Запрещенное наименование"; + КонецЕсли; + ВызватьИсключение "Необрабатываемый ИД <"+Ид+">"; +КонецФункции diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..50d42ba51 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/ObjectModule.bsl" @@ -0,0 +1,10 @@ + +Процедура ПередЗаписью(Отказ) + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + Если Наименование = Справочники.ПростойСправочник.ПолучитьЗапрещенноеНаименование(0) Тогда + Сообщить("Запрещена запись элемента с наименованием <"+СокрЛП(Наименование)+">"); + Отказ = Истина; + КонецЕсли; +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/Predefined.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/Predefined.xml" new file mode 100644 index 000000000..10e4c0dba --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Ext/Predefined.xml" @@ -0,0 +1,9 @@ + + + + ПредопределенноеЗначение1 + 1 + Предопределенное значение + false + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\243\320\277\321\200\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\243\320\277\321\200\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" new file mode 100644 index 000000000..0fe7cfc87 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\243\320\277\321\200\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + УпрФормаЭлемента + + + ru + Упр форма элемента + + + + Managed + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\243\320\277\321\200\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\243\320\277\321\200\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" new file mode 100644 index 000000000..d1b0ec923 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\243\320\277\321\200\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" @@ -0,0 +1,43 @@ + +
+ LockOwnerWindow + useIfNecessary + Items + + + + Объект.Code + EnterOnInput + + + + + Объект.Description + EnterOnInput + + + + + Объект.РеквизитБулево + EnterOnInput + Auto + + + + + Объект.РеквизитПеречисление + EnterOnInput + + + + + + + + cfg:CatalogObject.ПростойСправочник + + true + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260.xml" new file mode 100644 index 000000000..d8d8c7bec --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаВыбора + + + ru + Форма выбора + + + + Managed + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260/Ext/Form.xml" new file mode 100644 index 000000000..eaaa9bbc1 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260/Ext/Form.xml" @@ -0,0 +1,117 @@ + +
+ LockOwnerWindow + useIfNecessary + + + + List + None + true + true + true + ExpandTopLevel + true + Список + Список.DefaultPicture + None + None + None + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Description + true + + + + + Список.Code + + + + + Список.РеквизитБулево + Auto + + + + + Список.РеквизитПеречисление + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Catalog.ПростойСправочник + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" new file mode 100644 index 000000000..2e8225cb5 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml" new file mode 100644 index 000000000..560fedafd --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml" @@ -0,0 +1,118 @@ + +
+ useIfNecessary + + + ПриОткрытии + + + + List + None + true + true + ExpandTopLevel + true + Список + Список.DefaultPicture + None + None + None + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Description + true + + + + + Список.Code + + + + + Список.РеквизитБулево + Auto + + + + + Список.РеквизитПеречисление + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Catalog.ПростойСправочник + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..200fb14f7 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,6 @@ + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + пустой = Неопределено; // строка нужна для отключения ошибки на пустой обработчик "ПриОткрытии" + //ВызватьИсключение "не должно открываться"; +КонецПроцедуры \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" new file mode 100644 index 000000000..c1a18e6ce --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Ordinary + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" new file mode 100644 index 000000000..6c4663e88 Binary files /dev/null and "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" differ diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722.xml" new file mode 100644 index 000000000..65b2a9fc0 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722.xml" @@ -0,0 +1,396 @@ + + + + + + 2c77ae91-d10d-486c-89e7-b6cdbc296b7f + 748c3958-0418-4313-9023-f7efc4d878f1 + + + 22274af5-9c8e-408e-873d-07a7b3867b6e + a1f64187-2c04-46a8-8b32-aaa01b1a544c + + + 8f21b641-752e-49c5-9164-a1b49daebcdb + 8732b03a-9e6e-4f2f-9e9b-c0663e3a43a0 + + + 28aefe1e-b6cb-4f1a-9149-c1496d058ca9 + c14bc6ad-8faf-4d2b-aa00-f286ba89982d + + + 47ff36c8-0d8f-45cb-b2f3-46dd65c0c30f + 19bb7ace-39c5-4954-b5f3-70dc779d4887 + + + + ПростойСправочник2 + + + ru + Простой справочник2 + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + Number + Variable + WholeCatalog + false + true + AsDescription + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + true + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + true + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + Auto + InDialog + false + BothWays + + Catalog.ПростойСправочник2.StandardAttribute.Description + Catalog.ПростойСправочник2.StandardAttribute.Code + + Begin + DontUse + Directly + Catalog.ПростойСправочник2.Form.ФормаЭлемента + + Catalog.ПростойСправочник2.Form.ФормаСписка + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + + + + + РеквизитБулево + + + ru + Реквизит булево + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + + + + + Счет + + + ru + Счет + + + + + cfg:ChartOfAccountsRef.ПланСчетов1 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + + +
ФормаЭлемента
+
ФормаСписка
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" new file mode 100644 index 000000000..c73166bb3 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Ordinary + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.bin" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.bin" new file mode 100644 index 000000000..5cf89d90d Binary files /dev/null and "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.bin" differ diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" new file mode 100644 index 000000000..b98c46232 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Ordinary + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" new file mode 100644 index 000000000..0aa092f6f Binary files /dev/null and "b/lib/CF/83xddNoSync/Catalogs/\320\237\321\200\320\276\321\201\321\202\320\276\320\271\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\2722/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" differ diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\236\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\236\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274.xml" new file mode 100644 index 000000000..15f509ea4 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\236\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274.xml" @@ -0,0 +1,133 @@ + + + + + + 1378ecf8-bebf-4274-8600-77b110d011e4 + f84a5649-e633-4b69-bb44-307b54662cd7 + + + c058063f-bfaf-4c21-afe2-7a502fb58877 + 623eb0eb-ecb4-4568-8437-2e3cf4388d2f + + + 9a89c3a1-8e8f-419d-ba22-cf755a3f6d79 + 9a9bfbfa-7774-4e17-a3e0-1298fefe716b + + + ecd51426-23ac-42bb-852c-3e6e499b7c6e + c83a670b-170c-4e02-a330-b54176f6d129 + + + 776de0e9-f45a-426f-932d-d22b03578ae6 + 379a1292-ee04-4dc1-a0a6-2b1f18f55f13 + + + + СправочникСОбязательнымРеквизитом + + + ru + Справочник с обязательным реквизитом + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + String + Variable + WholeCatalog + true + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.СправочникСОбязательнымРеквизитом.StandardAttribute.Description + Catalog.СправочникСОбязательнымРеквизитом.StandardAttribute.Code + + Begin + DontUse + Directly + Catalog.СправочникСОбязательнымРеквизитом.Form.ФормаЭлемента + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + + + + + ОбязательныйРеквизит + + + ru + Обязательный реквизит + + + + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + false + + ShowError + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + + +
ФормаЭлемента
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\236\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\236\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..98f5ba1db --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\236\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274/Ext/ObjectModule.bsl" @@ -0,0 +1,6 @@ + +Процедура ПередЗаписью(Отказ) + Если НЕ ЗначениеЗаполнено(ОбязательныйРеквизит) Тогда + Отказ = Истина; + КонецЕсли +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\236\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\236\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" new file mode 100644 index 000000000..6a2e85080 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\236\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Ordinary + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\236\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\236\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" new file mode 100644 index 000000000..951b12c5f Binary files /dev/null and "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\236\320\261\321\217\320\267\320\260\321\202\320\265\320\273\321\214\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.bin" differ diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\242\320\260\320\261\320\247\320\260\321\201\321\202\321\214\321\216.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\242\320\260\320\261\320\247\320\260\321\201\321\202\321\214\321\216.xml" new file mode 100644 index 000000000..07ac0c47a --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\242\320\260\320\261\320\247\320\260\321\201\321\202\321\214\321\216.xml" @@ -0,0 +1,322 @@ + + + + + + c4d96687-43c4-4e57-84ba-1e62aaab4be2 + 554947df-0a5c-4f15-b767-4c73bd094f1c + + + 96c8ac63-705e-4447-af37-d3a165ca871f + dda378c1-867f-4597-b547-dac85b264cbb + + + a75554f6-6fa0-43ac-b229-e6072ba5321a + 6a18fc55-a670-4e1d-9a15-626a88176498 + + + 157ecc2e-618b-442a-9862-42b0cbe10e16 + c9007ec2-bdeb-44a6-beaa-2f74b6d44051 + + + 932fa2d0-1c47-4f9e-ab0b-5203841c2195 + 2dd51481-3b95-49ba-b8ea-6c5fa41edfa4 + + + + СправочникСТабЧастью + + + ru + Справочник с таб частью + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + String + Variable + WholeCatalog + false + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.СправочникСТабЧастью.StandardAttribute.Description + Catalog.СправочникСТабЧастью.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + + + + + РеквизитСоставногоТипа + + + ru + Реквизит составного типа + + + + + cfg:CatalogRef.ПростойСправочник2 + cfg:CatalogRef.ПростойСправочник + cfg:EnumRef.Перечисление1 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + + + + + РеквизитСоставногоТипа2 + + + ru + Реквизит составного типа2 + + + + + cfg:CatalogRef.ПростойСправочник2 + cfg:CatalogRef.ПростойСправочник + cfg:EnumRef.Перечисление1 + xs:boolean + xs:string + xs:dateTime + xs:decimal + + 10 + 0 + Any + + + 10 + Variable + + + Date + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + + + + + + dcde4ba8-5146-45f6-8cda-e9d57f26d5e2 + 99ec8127-e299-48d9-a6f8-c5cd0750a9d9 + + + f0395bc1-df50-4329-943a-a64713aa7de1 + 10ffacc0-11f3-407f-8aaf-93d937fed63b + + + + Состав + + + ru + Состав + + + + + DontCheck + ForItem + + + + + ПростойСправочник + + + ru + Простой справочник + + + + + cfg:CatalogRef.ПростойСправочник + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + ПростойСправочник2 + + + ru + Простой справочник2 + + + + + cfg:CatalogRef.ПростойСправочник2 + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + РеквизитБулево + + + ru + Реквизит булево + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\276\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\235\320\260\320\241\320\260\320\274\320\276\320\263\320\276\320\241\320\265\320\261\321\217.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\276\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\235\320\260\320\241\320\260\320\274\320\276\320\263\320\276\320\241\320\265\320\261\321\217.xml" new file mode 100644 index 000000000..4e2de1775 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\276\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\235\320\260\320\241\320\260\320\274\320\276\320\263\320\276\320\241\320\265\320\261\321\217.xml" @@ -0,0 +1,129 @@ + + + + + + 230ba184-c982-4a1b-a6e2-1395b2455e51 + 5c8c8888-a333-4c02-84df-895c99fe93ff + + + cdcaa363-ce70-41df-9595-c0bb5c69041f + 9060d0a4-3c01-4aee-bcd5-a9f478ddaebd + + + ec51ff28-0bc6-40bf-802a-58d203dec278 + 0fd12f3c-c978-4814-acfd-d1c26f175066 + + + abedb790-7901-441c-be25-36057488f01c + 1b4570c0-ff36-4c66-a497-975e79f78c1a + + + d83bc9e3-9ce9-4b88-8dd5-43877401734a + f31e9173-8f74-4b89-ac68-dd0305127393 + + + + СправочникСоСсылкойНаСамогоСебя + + + ru + Справочник со ссылкой на самого себя + + + + false + HierarchyFoldersAndItems + false + 2 + true + true + + ToItems + 9 + 25 + String + Variable + WholeCatalog + false + true + AsDescription + + Auto + InDialog + false + BothWays + + Catalog.СправочникСоСсылкойНаСамогоСебя.StandardAttribute.Description + Catalog.СправочникСоСсылкойНаСамогоСебя.StandardAttribute.Code + + Begin + DontUse + Directly + Catalog.СправочникСоСсылкойНаСамогоСебя.Form.ФормаЭлемента + + + + + + + + + + false + + + Managed + Use + + + + + + Use + Auto + + + + + СправочникСоСсылкойНаСамогоСебя + + + ru + Справочник со ссылкой на самого себя + + + + + cfg:CatalogRef.СправочникСоСсылкойНаСамогоСебя + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + + +
ФормаЭлемента
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\276\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\235\320\260\320\241\320\260\320\274\320\276\320\263\320\276\320\241\320\265\320\261\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\276\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\235\320\260\320\241\320\260\320\274\320\276\320\263\320\276\320\241\320\265\320\261\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" new file mode 100644 index 000000000..9095eda10 --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\276\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\235\320\260\320\241\320\260\320\274\320\276\320\263\320\276\320\241\320\265\320\261\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаЭлемента + + + ru + Форма элемента + + + + Managed + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\276\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\235\320\260\320\241\320\260\320\274\320\276\320\263\320\276\320\241\320\265\320\261\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\276\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\235\320\260\320\241\320\260\320\274\320\276\320\263\320\276\320\241\320\265\320\261\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" new file mode 100644 index 000000000..21732bd5d --- /dev/null +++ "b/lib/CF/83xddNoSync/Catalogs/\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\241\320\276\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\235\320\260\320\241\320\260\320\274\320\276\320\263\320\276\320\241\320\265\320\261\321\217/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" @@ -0,0 +1,35 @@ + +
+ LockOwnerWindow + Items + + + + Объект.Code + EnterOnInput + + + + + Объект.Description + EnterOnInput + + + + + Объект.СправочникСоСсылкойНаСамогоСебя + EnterOnInput + + + + + + + + cfg:CatalogObject.СправочникСоСсылкойНаСамогоСебя + + true + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/ChartsOfAccounts/\320\237\320\273\320\260\320\275\320\241\321\207\320\265\321\202\320\276\320\2621.xml" "b/lib/CF/83xddNoSync/ChartsOfAccounts/\320\237\320\273\320\260\320\275\320\241\321\207\320\265\321\202\320\276\320\2621.xml" new file mode 100644 index 000000000..7b7b97234 --- /dev/null +++ "b/lib/CF/83xddNoSync/ChartsOfAccounts/\320\237\320\273\320\260\320\275\320\241\321\207\320\265\321\202\320\276\320\2621.xml" @@ -0,0 +1,155 @@ + + + + + + 70488e5a-68be-4940-96e0-e32e6fe2b36c + f80ac720-dfde-4d2f-9296-e467cc0ef856 + + + 162d15fd-c60f-448e-8dee-9d32aed94bf9 + 306cef2a-821a-4298-859b-05f405900ccd + + + d92f5d08-90ea-42f5-b0b1-7db8605c6ea7 + 2c379684-61ab-4192-91cc-6932ef0b0909 + + + 40fc91d9-bd59-4757-92d8-0b800b1b025a + 7e7ae3f1-387e-4547-9a15-7452c83885e3 + + + 554a901a-2653-4ec6-a4e7-8f980fc43358 + 5bc16dda-ed60-452d-be74-4af8d2d54510 + + + 5b6393e5-5167-49db-b8f4-6caad25aaadb + 1d830e8c-9aa4-423d-84db-03a2cd1e5b24 + + + 15423cf5-3719-4846-9bd1-75f58af646e3 + e97de5ce-6078-4d46-a5e6-1196423d8833 + + + + ПланСчетов1 + + + true + false + + ChartOfCharacteristicTypes.ВидыСубконто1 + 3 + + 9 + 25 + WholeChartOfAccounts + true + AsCode + + Auto + InDialog + false + BothWays + + ChartOfAccounts.ПланСчетов1.StandardAttribute.Description + ChartOfAccounts.ПланСчетов1.StandardAttribute.Code + + Begin + DontUse + Directly + DontUse + Auto + + + + + + + false + 0 + + Managed + Use + + + + + + + + + + Валютный + + + ru + Валютный + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Суммовой + + + ru + Суммовой + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/ChartsOfAccounts/\320\237\320\273\320\260\320\275\320\241\321\207\320\265\321\202\320\276\320\2621/Ext/Predefined.xml" "b/lib/CF/83xddNoSync/ChartsOfAccounts/\320\237\320\273\320\260\320\275\320\241\321\207\320\265\321\202\320\276\320\2621/Ext/Predefined.xml" new file mode 100644 index 000000000..454ecaa6c --- /dev/null +++ "b/lib/CF/83xddNoSync/ChartsOfAccounts/\320\237\320\273\320\260\320\275\320\241\321\207\320\265\321\202\320\276\320\2621/Ext/Predefined.xml" @@ -0,0 +1,59 @@ + + + + СчетБезСубконто + 003 + Счет без субконто + ActivePassive + true + + + true + + + + + Счет01 + 01 + Счет01 + ActivePassive + false + + + false + + + + false + + true + + + + + + Счет02 + 02 + Счет02 + ActivePassive + false + + + false + + + + false + + true + + + + true + + true + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/ChartsOfCalculationTypes/\320\237\320\273\320\260\320\275\320\222\320\270\320\264\320\276\320\262\320\240\320\260\321\201\321\207\320\265\321\202\320\2601.xml" "b/lib/CF/83xddNoSync/ChartsOfCalculationTypes/\320\237\320\273\320\260\320\275\320\222\320\270\320\264\320\276\320\262\320\240\320\260\321\201\321\207\320\265\321\202\320\2601.xml" new file mode 100644 index 000000000..797eea96b --- /dev/null +++ "b/lib/CF/83xddNoSync/ChartsOfCalculationTypes/\320\237\320\273\320\260\320\275\320\222\320\270\320\264\320\276\320\262\320\240\320\260\321\201\321\207\320\265\321\202\320\2601.xml" @@ -0,0 +1,96 @@ + + + + + + 55631911-2efa-4d2a-b239-4a60ec3ac4cb + 17c4d5c9-83b3-4ac7-83a1-93ea2bb3a2c0 + + + 0a2a3a28-656d-453e-b06f-5482fc460bcd + 033631d3-0bb6-4e2d-8b4f-cfffc13ca630 + + + 2ceabc3d-581a-499e-984f-ed5d96766c0e + 4390a9f4-f0fe-4293-a61a-0b449129c0cd + + + 8d5ddea0-70d3-4127-9d0e-45cfe176bfe9 + 314cb595-6801-4d88-937c-a0bf7b4aeb59 + + + 771706cf-260a-4278-84df-3ec5553b857b + f68e0ef3-3be5-4003-9078-314e4b5f1485 + + + 337ccfff-b40b-475a-9c05-8590d7443e0b + 962248f8-5565-48c8-a901-02981bb88345 + + + a1b374b3-1ba3-464d-96e1-b985d6269c5d + 6a36471e-27f4-43f1-8b58-116e78c7f6ef + + + 46402985-303a-4a6e-ae6a-9bd464b343f4 + 5766e18c-c64a-4b1b-93c5-c215697b13d2 + + + 8c10e8f5-4779-4ef5-ba6d-611d39a7e125 + 3cb44902-5d48-4b0b-96b9-928bc83744c2 + + + b8f798a7-26fa-44c2-85df-57a9389e9c8c + 255ce292-2ccf-4b50-81dc-895ceba5e915 + + + 416841ac-8156-4944-968e-f17772d16d4c + 93c341f1-28fc-4915-a6af-7889de8148dd + + + + ПланВидовРасчета1 + + + false + 9 + 40 + String + Variable + AsDescription + InDialog + false + BothWays + + ChartOfCalculationTypes.ПланВидовРасчета1.StandardAttribute.Description + ChartOfCalculationTypes.ПланВидовРасчета1.StandardAttribute.Code + + Begin + DontUse + Directly + DontUse + Auto + + + + + + + + DontUse + + false + + Auto + false + + Managed + Use + + + + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/ChartsOfCharacteristicTypes/\320\222\320\270\320\264\321\213\320\241\321\203\320\261\320\272\320\276\320\275\321\202\320\2761.xml" "b/lib/CF/83xddNoSync/ChartsOfCharacteristicTypes/\320\222\320\270\320\264\321\213\320\241\321\203\320\261\320\272\320\276\320\275\321\202\320\2761.xml" new file mode 100644 index 000000000..338d1a4ef --- /dev/null +++ "b/lib/CF/83xddNoSync/ChartsOfCharacteristicTypes/\320\222\320\270\320\264\321\213\320\241\321\203\320\261\320\272\320\276\320\275\321\202\320\2761.xml" @@ -0,0 +1,361 @@ + + + + + + c730e9f6-f138-4fb6-9a9b-e2bb02afc0a8 + cbaaad03-c2b0-4ec8-a753-862da48de3e9 + + + 652b967c-c8db-4d5e-a16f-73376958e966 + 410a747a-9a95-4e4d-8d0e-7ea0b8548058 + + + 17dbf5fe-8b2a-415b-a0f6-9caece50b4f9 + 5d6c38a3-8ee0-470a-8e9a-172ab0c78edd + + + 154ae0aa-6411-4854-b6e2-f23dfa581758 + 1aaecb1e-e83d-4cea-a7f7-042904a99fc2 + + + 32cb3819-efef-4e2d-8626-37019dd51736 + bbea4645-1c9f-4add-832a-824f64a320d1 + + + bff37c0d-9a3b-4cd4-8184-6bac2a265c49 + 3e30fac7-7fb5-43ee-beac-13d19fb6a8a4 + + + + ВидыСубконто1 + + + ru + Виды субконто1 + + + + false + false + + + cfg:CatalogRef.ПростойСправочник2 + cfg:CatalogRef.ПростойСправочник + cfg:CatalogRef.СправочникСТабЧастью + cfg:CatalogRef.СправочникСоСсылкойНаСамогоСебя + cfg:CatalogRef.ИерархическийСправочник + + true + true + 9 + Variable + 25 + WholeCharacteristicKind + true + true + AsDescription + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + true + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + Auto + InDialog + false + BothWays + + ChartOfCharacteristicTypes.ВидыСубконто1.StandardAttribute.Description + ChartOfCharacteristicTypes.ВидыСубконто1.StandardAttribute.Code + + DontUse + Begin + Directly + DontUse + Auto + + + + + + + + + + + + + Managed + Use + + + + + + + + + + РеквизитБулево + + + ru + Реквизит булево + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + ForItem + Use + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/ChartsOfCharacteristicTypes/\320\222\320\270\320\264\321\213\320\241\321\203\320\261\320\272\320\276\320\275\321\202\320\2761/Ext/Predefined.xml" "b/lib/CF/83xddNoSync/ChartsOfCharacteristicTypes/\320\222\320\270\320\264\321\213\320\241\321\203\320\261\320\272\320\276\320\275\321\202\320\2761/Ext/Predefined.xml" new file mode 100644 index 000000000..7e967b850 --- /dev/null +++ "b/lib/CF/83xddNoSync/ChartsOfCharacteristicTypes/\320\222\320\270\320\264\321\213\320\241\321\203\320\261\320\272\320\276\320\275\321\202\320\2761/Ext/Predefined.xml" @@ -0,0 +1,36 @@ + + + + Группа1 + 000000003 + Группа1 + + true + + + Субконто1 + 000000001 + Субконто1 + + d4p1:CatalogRef.ПростойСправочник2 + d4p1:CatalogRef.ПростойСправочник + d4p1:CatalogRef.СправочникСТабЧастью + d4p1:CatalogRef.СправочникСоСсылкойНаСамогоСебя + d4p1:CatalogRef.ИерархическийСправочник + + false + + + Субконто2 + 000000002 + Субконто2 + + d4p1:CatalogRef.ПростойСправочник2 + d4p1:CatalogRef.ПростойСправочник + d4p1:CatalogRef.СправочникСТабЧастью + d4p1:CatalogRef.СправочникСоСсылкойНаСамогоСебя + d4p1:CatalogRef.ИерархическийСправочник + + false + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/CommonForms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260.xml" "b/lib/CF/83xddNoSync/CommonForms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260.xml" new file mode 100644 index 000000000..3867db78d --- /dev/null +++ "b/lib/CF/83xddNoSync/CommonForms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260.xml" @@ -0,0 +1,24 @@ + + + + + ФормаОтчета + + + ru + Форма отчета + + + + Managed + false + + PersonalComputer + MobileDevice + + false + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/CommonForms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/CommonForms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form.xml" new file mode 100644 index 000000000..28edd61fd --- /dev/null +++ "b/lib/CF/83xddNoSync/CommonForms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form.xml" @@ -0,0 +1,77 @@ + +
+ None + Результат + ДанныеРасшифровки + Main + + Auto + КомпоновщикНастроекПользовательскиеНастройки + + false + + + ПриОткрытии + ПриСозданииНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Основная командная панель</v8:content> + </v8:item> + + Form + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа пользовательских настроек</v8:content> + </v8:item> + + false + Vertical + false + + + + Результат + true + None + 100 + + + + + + + + cfg:ReportObject + + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Результат</v8:content> + </v8:item> + + + mxl:SpreadsheetDocument + + + + + xs:string + + 0 + Variable + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/CommonForms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/CommonForms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..d11a4e4c5 --- /dev/null +++ "b/lib/CF/83xddNoSync/CommonForms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,16 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Сообщить(Отчет); +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриОткрытииНаСервере() + // Вставить содержимое обработчика. +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Сообщить(Отчет); + ПриОткрытииНаСервере(); +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/CommonModules/xdd\320\232\320\273\320\270\320\265\320\275\321\202.xml" "b/lib/CF/83xddNoSync/CommonModules/xdd\320\232\320\273\320\270\320\265\320\275\321\202.xml" new file mode 100644 index 000000000..7338bbec9 --- /dev/null +++ "b/lib/CF/83xddNoSync/CommonModules/xdd\320\232\320\273\320\270\320\265\320\275\321\202.xml" @@ -0,0 +1,23 @@ + + + + + xddКлиент + + + ru + Xdd клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/CommonModules/xdd\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl" "b/lib/CF/83xddNoSync/CommonModules/xdd\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl" new file mode 100644 index 000000000..672c255b3 --- /dev/null +++ "b/lib/CF/83xddNoSync/CommonModules/xdd\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl" @@ -0,0 +1,10 @@ +&НаКлиенте +Функция ПодключитьНаСервереВнешнююОбработкуОтКлиента(ПолныйПутьФайлаОбработки, ИдентификаторОбработки) Экспорт + АдресХранилища = ""; + #Если ТонкийКлиент Тогда + ПоместитьФайл(АдресХранилища, ПолныйПутьФайлаОбработки,, Ложь); + #КонецЕсли + ИД_Обработки = xddСервер.ПодключитьВнешнююОбработку(АдресХранилища, ИдентификаторОбработки, ПолныйПутьФайлаОбработки); + Возврат ИД_Обработки; +КонецФункции + diff --git "a/lib/CF/83xddNoSync/CommonModules/xdd\320\241\320\265\321\200\320\262\320\265\321\200.xml" "b/lib/CF/83xddNoSync/CommonModules/xdd\320\241\320\265\321\200\320\262\320\265\321\200.xml" new file mode 100644 index 000000000..cf6bd3997 --- /dev/null +++ "b/lib/CF/83xddNoSync/CommonModules/xdd\320\241\320\265\321\200\320\262\320\265\321\200.xml" @@ -0,0 +1,23 @@ + + + + + xddСервер + + + ru + Xdd сервер + + + + false + false + true + true + false + true + false + DontUse + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/CommonModules/xdd\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" "b/lib/CF/83xddNoSync/CommonModules/xdd\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" new file mode 100644 index 000000000..ecda75977 --- /dev/null +++ "b/lib/CF/83xddNoSync/CommonModules/xdd\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" @@ -0,0 +1,9 @@ +Функция ПодключитьВнешнююОбработку(АдресХранилища, ИдентификаторОбработки, ПолныйПутьФайлаОбработки) Экспорт + //#Если Клиент Тогда + //Возврат ПолныйПутьФайлаОбработки; + //#Иначе + ИД = ВнешниеОбработки.Подключить(АдресХранилища, ИдентификаторОбработки, Ложь); // подключаю не в безопасном режиме + ВнешниеОбработки.Создать(ИдентификаторОбработки); + Возврат ИдентификаторОбработки; + //#КонецЕсли +КонецФункции diff --git "a/lib/CF/83xddNoSync/CommonModules/\320\227\320\260\320\277\321\203\321\201\320\272\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\232\320\273\320\270\320\265\320\275\321\202.xml" "b/lib/CF/83xddNoSync/CommonModules/\320\227\320\260\320\277\321\203\321\201\320\272\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\232\320\273\320\270\320\265\320\275\321\202.xml" new file mode 100644 index 000000000..aa8ab31c3 --- /dev/null +++ "b/lib/CF/83xddNoSync/CommonModules/\320\227\320\260\320\277\321\203\321\201\320\272\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\232\320\273\320\270\320\265\320\275\321\202.xml" @@ -0,0 +1,23 @@ + + + + + ЗапускПриложенияКлиент + + + ru + Запуск приложения клиент + + + + false + true + false + false + true + false + false + DontUse + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/CommonModules/\320\227\320\260\320\277\321\203\321\201\320\272\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl" "b/lib/CF/83xddNoSync/CommonModules/\320\227\320\260\320\277\321\203\321\201\320\272\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl" new file mode 100644 index 000000000..9147ebbd7 --- /dev/null +++ "b/lib/CF/83xddNoSync/CommonModules/\320\227\320\260\320\277\321\203\321\201\320\272\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\232\320\273\320\270\320\265\320\275\321\202/Ext/Module.bsl" @@ -0,0 +1,17 @@ + +Функция ИмяАдминистратораПоУмолчанию() Экспорт + Возврат "Admin"; +КонецФункции + +// Запускает предприятие с параметрами текущего сенса +// +// Параметры +// Пользователь - Строка - Имя пользователя под которым будет запущен новый сеанс +// СтрокаЗапука - Строка - Параметр запуска обработки xUnitFor1C, первым параметром ожидается путь к обработке +// +Процедура ЗапуститьСистемуПовторно(Пользователь, СтрокаЗапуска = "") Экспорт + + ДополнительныеПараметрыЗапуска = "/N" + Пользователь; + ЗапуститьСистему(ДополнительныеПараметрыЗапуска); + +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/CommonModules/\320\227\320\260\320\277\321\203\321\201\320\272\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\265\321\200\320\262\320\265\321\200.xml" "b/lib/CF/83xddNoSync/CommonModules/\320\227\320\260\320\277\321\203\321\201\320\272\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\265\321\200\320\262\320\265\321\200.xml" new file mode 100644 index 000000000..af455644f --- /dev/null +++ "b/lib/CF/83xddNoSync/CommonModules/\320\227\320\260\320\277\321\203\321\201\320\272\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\265\321\200\320\262\320\265\321\200.xml" @@ -0,0 +1,23 @@ + + + + + ЗапускПриложенияСервер + + + ru + Запуск приложения сервер + + + + false + false + true + false + false + true + false + DontUse + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/CommonModules/\320\227\320\260\320\277\321\203\321\201\320\272\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" "b/lib/CF/83xddNoSync/CommonModules/\320\227\320\260\320\277\321\203\321\201\320\272\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" new file mode 100644 index 000000000..29f064ae8 --- /dev/null +++ "b/lib/CF/83xddNoSync/CommonModules/\320\227\320\260\320\277\321\203\321\201\320\272\320\237\321\200\320\270\320\273\320\276\320\266\320\265\320\275\320\270\321\217\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" @@ -0,0 +1,23 @@ + +Функция СоздатьПервогоАдминистратораПриНеобходимости(Имя, ПараметрЗапуска) Экспорт + + Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0 Тогда + Возврат Ложь; + КонецЕсли; + + Если Не (ПустаяСтрока(ПараметрЗапуска) Или ПараметрЗапуска = "AdminCreate" Или ПараметрЗапуска = "СоздатьАдминистратора") Тогда + Возврат Ложь; + КонецЕсли; + + Администратор = ПользователиИнформационнойБазы.СоздатьПользователя(); + Администратор.Имя = Имя; + Администратор.АутентификацияСтандартная = Истина; + Администратор.ПоказыватьВСпискеВыбора = Истина; + Администратор.ПолноеИмя = Имя; + Администратор.Роли.Добавить(Метаданные.Роли.ПолныеПрава); + Администратор.Язык = Метаданные.Языки.Русский; + Администратор.Записать(); + + Возврат Истина; + +КонецФункции diff --git a/lib/CF/83xddNoSync/Configuration.xml b/lib/CF/83xddNoSync/Configuration.xml new file mode 100644 index 000000000..a4bdba9b5 --- /dev/null +++ b/lib/CF/83xddNoSync/Configuration.xml @@ -0,0 +1,189 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + 5fafd470-b0a2-485b-b255-a3b8faa26fb7 + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + 6eaeb2c4-c358-4c9b-82bf-b779f300f3e5 + + + e3687481-0a87-462c-a166-9f34594f9bba + 579c1543-cef7-4925-bf5c-8d647b10ae9c + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + 5b74eae4-4a1c-4e7f-8ffc-15b9dd85359b + + + 51f2d5d8-ea4d-4064-8892-82951750031e + 811a0158-e000-4e8b-b55d-3c8ee2db8b5f + + + e68182ea-4237-4383-967f-90c1e3370bc7 + e4f92e27-7e0f-4b89-81c9-1f942dc7e704 + + + + ADD_TDD + + + ru + ADD/TDD, ver. 5.4.0 + + + + + Version8_3_10 + ManagedApplication + + PersonalComputer + + Russian + + + 5.4.0 + + false + true + true + + + + + + + + CommonForm.ФормаОтчета + + + + + + + Multimedia + false + + + Location + false + + + Contacts + false + + + Calendars + false + + + Telephony + false + + + PushNotification + false + + + LocalNotification + false + + + Print + false + + + InAppPurchases + false + + + Ads + false + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + Version8_3_8 + + + + Русский + Тестовая + ПадающаяТестовая + xUnitFor1C + ПолныеПрава + Роль1 + ПраваНеобходимыеДляТестирования + xddКлиент + xddСервер + ЗапускПриложенияКлиент + ЗапускПриложенияСервер + ПланОбмена1 + ФункциональнаяОпция1 + ФормаОтчета + ПростойСправочник + ПростойСправочник2 + ИерархическийСправочник + СправочникСТабЧастью + ПодчиненныйСправочник + СправочникСоСсылкойНаСамогоСебя + ПодчиненныйСДвумяВладельцами + СправочникСОбязательнымРеквизитом + Документ1 + Документ2 + Перечисление1 + Отчет1 + ТестовыйОтчетСКДДляСравнениеСЭталоном + Тест_Отчет + Отчет2 + xddGuidShow + Тест_Обработка + ТестОбработка_Форма_ИсключениеПриОткрытии + ТестПадающий_Обработка + Тест_ЗагрузчикИзПодсистем_НовыйAPIОбъявленияТестов + xddTestRunner + БазовыеУтверждения + ВременныеФайлы + ГенераторОтчетаJUnitXML + ГенераторОтчетаMXL + ЗагрузчикИзПодсистемКонфигурации + ЗагрузчикКаталога + ЗагрузчикФайла + ЗапросыИзБД + КомандныйФайл + ПарсерКоманднойСтроки + ПостроительДереваТестов + СериализаторMXL + СтроковыеУтилиты + УтвержденияBDD + УтвержденияПроверкаТаблиц + ПреобразованиеЖурналаДействийПользователя + xddTestsConvertIntoRebornFormat + РегистрСведений1 + РСПодчиненныйРегистратору + РегистрНакопления2 + ВидыСубконто1 + ПланСчетов1 + РегистрБухгалтерии1 + ПланВидовРасчета1 + БизнесПроцесс1 + БизнесПроцесс2 + Задача1 + + + \ No newline at end of file diff --git a/lib/CF/83xddNoSync/DataProcessors/xddGuidShow.xml b/lib/CF/83xddNoSync/DataProcessors/xddGuidShow.xml new file mode 100644 index 000000000..a5a5198ae --- /dev/null +++ b/lib/CF/83xddNoSync/DataProcessors/xddGuidShow.xml @@ -0,0 +1,107 @@ + + + + + + a09d333c-5239-4c55-a885-6d7e88afd91d + 8610bc5a-6220-4fc1-9b17-d6a5c154a1a3 + + + 715d665d-50e0-4d43-8f27-2687862a1b44 + 84cf4074-fba8-490e-9e47-02bfb1c1bb63 + + + + xddGuidShow + + + ru + Показать ГУИД + + + + true + DataProcessor.xddGuidShow.Form.Форма + DataProcessor.xddGuidShow.Form.УправляемаяФорма + false + + + + + + + Ссылка + + + ru + Ссылка + + + + + cfg:AnyRef + + false + + + + false + + false + false + + + ShowError + Items + + + Auto + Auto + + + Auto + + + + + ГУИД + + + ru + ГУИД + + + + + xs:string + + 36 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + +
УправляемаяФорма
+
Форма
+
+
+
\ No newline at end of file diff --git a/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/Ext/ObjectModule.bsl b/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/Ext/ObjectModule.bsl new file mode 100644 index 000000000..5f282702b --- /dev/null +++ b/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/Ext/ObjectModule.bsl @@ -0,0 +1 @@ + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/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.xml" "b/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/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.xml" new file mode 100644 index 000000000..be0cbae8a --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/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.xml" @@ -0,0 +1,22 @@ + + +
+ + УправляемаяФорма + + + ru + Управляемая форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/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/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/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" new file mode 100644 index 000000000..92ed83a9b --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/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" @@ -0,0 +1,65 @@ + +
+ None + useIfNecessary + + + + Объект.Ссылка + + + + СсылкаПриИзменении + + + + Horizontal + None + false + + + + Объект.ГУИД + true + + + + + + + + + + + cfg:DataProcessorObject.xddGuidShow + + true + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Показать ГУИД</v8:content> + </v8:item> + + + + ru + Показать ГУИД + + + + StdPicture.Refresh + true + + ПоказатьГУИД + Picture + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/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/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/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" new file mode 100644 index 000000000..6b9d048b8 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/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" @@ -0,0 +1,20 @@ + +&НаКлиенте +Процедура ПоказатьГУИД(Команда) + + Если ПроверитьЗаполнение() Тогда + Объект.ГУИД = Объект.Ссылка.УникальныйИдентификатор(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СсылкаПриИзменении(Элемент) + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + Объект.ГУИД = Объект.Ссылка.УникальныйИдентификатор(); + Иначе + ГУИД = ""; + КонецЕсли; + +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..d7681f5ca --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Ordinary + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" "b/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" new file mode 100644 index 000000000..46db8ebaf Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/xddGuidShow/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" differ diff --git a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner.xml b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner.xml new file mode 100644 index 000000000..ba8d6b914 --- /dev/null +++ b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner.xml @@ -0,0 +1,471 @@ + + + + + + 4d445884-0651-43bd-ac78-465a61471676 + c6fa6016-56ad-4ec9-acc1-831ce088909f + + + 804437a3-2547-4232-9bbf-b9e0e65be3a1 + 1f2a88bd-f0b0-4643-a189-279298a41d81 + + + + xddTestRunner + + + ru + Тестирование для 1С:Предприятия 8, xUnitFor1C + + + https://github.com/xDrivenDevelopment/xUnitFor1C + true + DataProcessor.xddTestRunner.Form.Форма + DataProcessor.xddTestRunner.Form.УправляемаяФорма + false + + + + + + + ВозможныеИсключения + + + ru + Возможные исключения + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ВозможныеСобытия + + + ru + Возможные события + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Настройки + + + ru + Настройки + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Плагины + + + ru + Плагины + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СостоянияТестов + + + ru + Состояния тестов + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ТекущийКонтейнер + + + ru + Текущий контейнер + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ТипыПлагинов + + + ru + Типы плагинов + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ТипыУзловДереваТестов + + + ru + Типы узлов дерева тестов + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СтатусыРезультатаТестирования + + + ru + Статусы результата тестирования + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ЭтоВстроеннаяОбработка + + + ru + Это встроенная обработка + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ИспользуемыйПрефиксПодсистемы + + + ru + Используемый префикс подсистемы + + + Префикс для объектов, встроенных в состав конфигурации. Если браузер тестов, плагины и утилиты встроены в конфигурцаию, то они должны иметь один префикс. + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ПолноеИмяБраузераТестов + + + ru + Полное имя браузера тестов + + + + + xs:string + + 512 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ПолныйПутьКФайлуБраузераТестов + + + ru + Полный путь к файлу браузера тестов + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + +
Форма
+
УправляемаяФорма
+
+
+
\ No newline at end of file diff --git a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Ext/Help.xml b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Ext/Help.xml new file mode 100644 index 000000000..aaa8b4844 --- /dev/null +++ b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Ext/Help.xml @@ -0,0 +1,4 @@ + + + ru + \ No newline at end of file diff --git a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Ext/Help/ru.html b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Ext/Help/ru.html new file mode 100644 index 000000000..d174560d9 --- /dev/null +++ b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Ext/Help/ru.html @@ -0,0 +1,99 @@ + +

https://github.com/xDrivenDevelopment/xUnitFor1C/wiki

+

+

xUnitFor1C - набор инструментов для выполнения тестирования (модульного/юнит, приемочного, сценарного для 1С 8.3, интеграционного) в 1С:Предприятии 8.

+

xUnitFor1C работает с любыми конфигурациями, полностью независима, но может быть встроена в конфигурацию.

+

Позволяет открывать/тестировать в разных режимах - обычное приложение, тонкий и толстый клиент управляемого приложения.

+

Тесты могут быть как во внешних обработках, так и во встроенных обработках.

+

Любые наборы тестов могут прогоняться в полностью автоматическом режиме через специальную командную строку запуска. Автозапуск используется в различных build-серверах и в системах Continuous Integration.

+

Для дополнительной информации см. Wiki проекта

+

Что к чему

+
    +
  • xddTestRunner.epf - браузер и исполнитель тестов для обычного приложения и управляемого приложения 1С:Предприятия 8 (толстый и тонкий клиенты) +
  • xddDataFixtureGen.epf - генерация макета данных для использования в тестах. Макет можно генерить из боевой базы на основе реальных данных. +
  • xddTestRunner.js - скрипт для Снегопата, позволяющий выполнять тесты прямо из конфигуратора +
  • Tests/ - каталог с примерами тестов и с тестами для самотестирования xddTestRunner.epf (подпапка selftests) +
  • Tests\CommonApp\тесты_ОткрытиеФормКонфигурации.epf - тесты открытия всех форм справочников, документов, отчетов и обработок. Для справочников и документов в транзакции создаются новые или копируются или перезаписываются существующие элементы. +
  • Tests\CommonApp\Тест_ЗапускТестовВСеансеДругихПользователей.epf - примеры запуска тестов для пользователей с ограниченными правами. Пользователи создаются на лету из простых макетов. +
  • Tests\CommonApp\Тест_ПроверитьОтчетНаСоответствиеЭталону.epf - пример теста отчета путем сравнения с эталонным ожиданием из макета.

Как помочь проекту

+

Мы рады любой помощи:

+
  1. +

    Если вы занимаетесь разработкой на 1С:Преприятии 8 пробуйте писать и выполнять тесты при помощи xUnitFor1C, сообщайте нам об обнаруженных ошибках, пишите пожелания. Для управления сообщениями об ошибках и пожеланиями мы используем баг-трекер GitHub'а.

    +
  2. +

    Если у вас есть время разобраться в исходном коде, вы можете взять на себя реализацию одной из открытых задач.

    +
  3. +

    Если вы уже используете xUnitFor1C на практике, напишите об этом статью, например, на Инфостарте.

Создание файлов-тестов

+

Создаем новую внешнюю обработку, т.н. тестовый набор

+

В модуле этой обработки размещаются тестовые случаи (экспортные методы без параметров, чье имя начинается на Тест)

+

Тестовый случай считается успешно выполненным, если в процессе его выполнения не было исключения.

+

Соответственно, для того, чтобы тест упал, нужно выбросить исключение 1С. Для этого используются вызовы специальных методов-утверждений из фреймворка xUnitFor1C. См. Методы проверки/утверждений

+

Предопределенные методы теста

+
+
  • +

    Переменная ЮТест

    +
    • содержит в себе ссылку на экземпляр фреймворка xUnitFor1C - объект обработки UnitTestRunner +
    • с помощью этой переменной можно использовать предопределенные методы xUnitFor1C. Например, см. Методы проверки/утверждений +
    • имя ЮТест необязательно, можно использовать любое другое имя переменной +
    • значение этой переменной должно быть заполнено в методе ПолучитьСписокТестов
  • +

    Метод ПолучитьСписокТестов

    +
    • должен вернуть массив описаний тестовых случаев +
    • именно этот массив и является списком выполняемых тестов
  • +

    Метод ПередЗапускомТеста

    +
    • вызывается перед запуском каждого теста
  • +

    ПослеЗапускаТеста

    +
    • вызывается после запуска каждого теста +
    • метод вызывается независимо от того, успешно прошел тест или упал.
+

Базовые приемы написания тестов

+

Для гарантирования независимости тестов (это одно из основных требований к тестам) рекомендуется использовать механизм транзакций.

+

Перед запуском теста начинаем транзакцию, после выполнения теста транзакция отменяется. В итоге в базе не остается никаких следов тестирования и тесты работают независимо.

+

Можно использовать следующий шаблон методов теста

+
Процедура ПередЗапускомТеста() Экспорт
+    НачатьТранзакцию();
+КонецПроцедуры
+
+Процедура ПослеЗапускаТеста() Экспорт
+    Если ТранзакцияАктивна() Тогда
+        ОтменитьТранзакцию();
+    КонецЕсли;
+КонецПроцедуры
+
+

Базовый шаблон файла-теста

+
Перем ЮТест; // ссылка на экземпляр фреймворка xUnitFor1C - объект обработки UnitTestRunner
+
+//{ основная процедура для юнит-тестирования xUnitFor1C
+Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
+
+    ЮТест = ЮнитТестирование;
+
+    ВсеТесты = Новый Массив;
+
+    ВсеТесты.Добавить("ТестДолжен_СложитьДваИДва");
+
+
+    Возврат ВсеТесты;
+
+КонецФункции
+//}
+
+//{ ОСНОВНОЙ БЛОК
+
+//} КОНЕЦ ОСНОВНОГО БЛОКА
+
+//{ БЛОК ЮНИТ-ТЕСТОВ - сами тесты
+
+Процедура ПередЗапускомТеста() Экспорт
+    НачатьТранзакцию();
+КонецПроцедуры
+
+Процедура ПослеЗапускаТеста() Экспорт
+    Если ТранзакцияАктивна() Тогда
+        ОтменитьТранзакцию();
+    КонецЕсли;
+КонецПроцедуры
+
+Процедура ТестДолжен_СложитьДваИДва() Экспорт
+    ЮТест.ПроверитьРавенство(2 + 2, 4, "2 + 2, 4");
+КонецПроцедуры
+
+//} КОНЕЦ БЛОКА ЮНИТ-ТЕСТОВ
+
\ No newline at end of file diff --git a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Ext/ObjectModule.bsl b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Ext/ObjectModule.bsl new file mode 100644 index 000000000..2b5962365 --- /dev/null +++ b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Ext/ObjectModule.bsl @@ -0,0 +1,727 @@ + +Процедура Инициализация() + + ЭтоВстроеннаяОбработка = ОбработкаЯвляетсяВстроеннойВКонфигурацию(); + Если ЭтоВстроеннаяОбработка Тогда + // Для встроенной в состав конфигурации обработки + // может быть использван префикс, который определяет имена объектов + // фреймворка xUnitFor1C в составе конфигурации + // Например: Обработки.<префикс>xddTestRunner + // Если префикс не задан, то должны использоваться оригинальные + // имена обработок и подсистем. + // Для подсистем нужно добавлять префикс тольяо для главной - "xUnitFor1C" + ИспользуемыйПрефиксПодсистемы = ""; + Иначе + ПолныйПутьКФайлуБраузераТестов = ЭтотОбъект["ИспользуемоеИмяФайла"]; + КонецЕсли; + ПолноеИмяБраузераТестов = Метаданные().ПолноеИмя(); + + ТипыПлагинов = ТипыПлагинов(); + СостоянияТестов = СостоянияТестов(); + СтатусыРезультатаТестирования = СтатусыРезультатаТестирования(); + ВозможныеСобытия = ВозможныеСобытия(); + ВозможныеИсключения = ВозможныеИсключения(); + + ЗагрузитьНастройки(); +КонецПроцедуры + +Функция Версия() Экспорт + Возврат "4.1.0.0"; +КонецФункции + +Функция ЗаголовокФормы() Экспорт + Возврат СокрЛП(Метаданные().Синоним) + ", версия " + Версия(); +КонецФункции + +// { Plugins +Функция ТипыПлагинов() + Результат = Новый Структура; + Результат.Вставить("Загрузчик", "Загрузчик"); + Результат.Вставить("Утилита", "Утилита"); + Результат.Вставить("ГенераторОтчета", "ГенераторОтчета"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Функция Плагин(Знач Идентификатор) Экспорт + + ИдентификаторПлагинаСПрефиксомПодсистемы = ДополнитьИдентификаторПрефиксомПодсистемы(Идентификатор); + ИдентификаторПлагинаБезПрефиксаПодсистемы = ПолучитьИдентификаторБезПрефиксаПодсистемы(Идентификатор); + Плагин = Плагины[ИдентификаторПлагинаБезПрефиксаПодсистемы]; + Если ТипЗнч(Плагин) = Тип("Строка") Тогда + Плагин = СоздатьОбъектПлагина(Плагин); + КонецЕсли; + + Возврат Плагин; + +КонецФункции + +Функция ПолучитьОписанияПлагиновПоТипу(Знач ТипПлагина) Экспорт + Результат = Новый Массив; + Для каждого КлючЗначение Из Плагины Цикл + Плагин = Плагин(КлючЗначение.Ключ); + Плагин.Инициализация(ЭтотОбъект); + ОписаниеПлагина = Плагин.ОписаниеПлагина(ТипыПлагинов); + Если ОписаниеПлагина.Тип = ТипПлагина Тогда + Результат.Добавить(ОписаниеПлагина); + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ЗагрузчикПоУмолчанию() Экспорт + Возврат Плагин("ЗагрузчикКаталога"); +КонецФункции +// } Plugins + +// { Выполнение тестов +Функция ПолучитьКоличествоТестовыхМетодов(Знач КонтейнерДереваТестов, Знач Фильтр = Неопределено) Экспорт + КоличествоТестовыхМетодов = 0; + ФильтрДляДочернихУзлов = Неопределено; + Если Не УзелДереваТестовУдовлетворяетФильтру(КонтейнерДереваТестов, Фильтр) Тогда + ФильтрДляДочернихУзлов = Фильтр; + КонецЕсли; + Для каждого ДочернийУзел Из КонтейнерДереваТестов.Строки Цикл + КоличествоДочернихТестовыхМетодов = 0; + Если ДочернийУзел.Тип = ЭтотОбъект.ТипыУзловДереваТестов.Контейнер Тогда + КоличествоДочернихТестовыхМетодов = ПолучитьКоличествоТестовыхМетодов(ДочернийУзел, ФильтрДляДочернихУзлов); + ИначеЕсли ДочернийУзел.Тип = ЭтотОбъект.ТипыУзловДереваТестов.Элемент Тогда + Если УзелДереваТестовУдовлетворяетФильтру(ДочернийУзел, ФильтрДляДочернихУзлов) Тогда + КоличествоДочернихТестовыхМетодов = 1; + КонецЕсли; + КонецЕсли; + КоличествоТестовыхМетодов = КоличествоТестовыхМетодов + КоличествоДочернихТестовыхМетодов; + КонецЦикла; + + Возврат КоличествоТестовыхМетодов; +КонецФункции + +Функция ВыполнитьТесты(Знач Загрузчик, Знач КонтейнерДереваТестов, Знач Фильтр = Неопределено, Знач Подписчик = Неопределено) Экспорт + РезультатТестирования = СоздатьКонтейнерРезультатовТестирования(КонтейнерДереваТестов); + ФильтрДляДочернихУзлов = Неопределено; + Если Не УзелДереваТестовУдовлетворяетФильтру(КонтейнерДереваТестов, Фильтр) Тогда + ФильтрДляДочернихУзлов = Фильтр; + КонецЕсли; + + Если КонтейнерДереваТестов.СлучайныйПорядокВыполнения Тогда + СтрокиКонтейнера = ПеремешатьМассив(КонтейнерДереваТестов.Строки); + Иначе + СтрокиКонтейнера = КонтейнерДереваТестов.Строки; + КонецЕсли; + + Для каждого ДочернийУзел Из СтрокиКонтейнера Цикл + ДочернийРезультатТестирования = Неопределено; + Если ДочернийУзел.Тип = ЭтотОбъект.ТипыУзловДереваТестов.Контейнер Тогда + ДочернийРезультатТестирования = ВыполнитьТесты(Загрузчик, ДочернийУзел, ФильтрДляДочернихУзлов, Подписчик); + ИначеЕсли ДочернийУзел.Тип = ЭтотОбъект.ТипыУзловДереваТестов.Элемент Тогда + Если УзелДереваТестовУдовлетворяетФильтру(ДочернийУзел, ФильтрДляДочернихУзлов) Тогда + Контекст = Загрузчик.ПолучитьКонтекстПоПути(ЭтотОбъект, ДочернийУзел.Путь); + // Заполняем служебные поля, если они имеются + ЗаполнитьСвойствоПриНаличии(Контекст, "ПутьКФайлуПолный", ДочернийУзел.Путь); + ЭтотОбъект.ТекущийКонтейнер = КонтейнерДереваТестов; + ДочернийРезультатТестирования = ВыполнитьТестовыйМетод(Контекст, ДочернийУзел); + + Если Подписчик <> Неопределено Тогда + ОповеститьОСобытии(Подписчик, ЭтотОбъект.ВозможныеСобытия.ВыполненТестовыйМетод, ДочернийРезультатТестирования); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ДочернийРезультатТестирования <> Неопределено Тогда + РезультатТестирования.Строки.Добавить(ДочернийРезультатТестирования); + РезультатТестирования.Состояние = ВыбратьХудшееСостояниеВыполненияТестов(РезультатТестирования.Состояние, ДочернийРезультатТестирования.Состояние); + ЗаполнитьДанныеСтатистики(РезультатТестирования, ДочернийРезультатТестирования); + Если Не КонтейнерДереваТестов.СлучайныйПорядокВыполнения И ДочернийРезультатТестирования.Состояние <> ЭтотОбъект.СостоянияТестов.Пройден Тогда + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если РезультатТестирования.Строки.Количество() = 0 Тогда + РезультатТестирования = Неопределено; + КонецЕсли; + + Возврат РезультатТестирования; +КонецФункции + +Функция УзелДереваТестовУдовлетворяетФильтру(Знач УзелДереваТестов, Знач Фильтр) + Возврат (Фильтр = Неопределено) Или (Фильтр.Найти(УзелДереваТестов.Ключ) <> Неопределено); +КонецФункции + +Процедура ЗаполнитьДанныеСтатистики(РезультатТестирования, Знач ДочернийРезультатТестирования) Экспорт + Если ДочернийРезультатТестирования.Тип = ЭтотОбъект.ТипыУзловДереваТестов.Контейнер Тогда + РезультатТестирования.КоличествоТестов = РезультатТестирования.КоличествоТестов + ДочернийРезультатТестирования.КоличествоТестов; + РезультатТестирования.КоличествоСломанныхТестов = РезультатТестирования.КоличествоСломанныхТестов + ДочернийРезультатТестирования.КоличествоСломанныхТестов; + РезультатТестирования.КоличествоНеРеализованныхТестов = РезультатТестирования.КоличествоНеРеализованныхТестов + ДочернийРезультатТестирования.КоличествоНеРеализованныхТестов; + РезультатТестирования.КоличествоОшибочныхТестов = РезультатТестирования.КоличествоОшибочныхТестов + ДочернийРезультатТестирования.КоличествоОшибочныхТестов; + + ИначеЕсли ДочернийРезультатТестирования.Тип = ЭтотОбъект.ТипыУзловДереваТестов.Элемент Тогда + РезультатТестирования.КоличествоТестов = РезультатТестирования.КоличествоТестов + 1; + Если ДочернийРезультатТестирования.Состояние = СостоянияТестов.Сломан Тогда + РезультатТестирования.КоличествоСломанныхТестов = РезультатТестирования.КоличествоСломанныхТестов + 1; + ИначеЕсли ДочернийРезультатТестирования.Состояние = СостоянияТестов.НеРеализован Тогда + РезультатТестирования.КоличествоНеРеализованныхТестов = РезультатТестирования.КоличествоНеРеализованныхТестов + 1; + ИначеЕсли ДочернийРезультатТестирования.Состояние = СостоянияТестов.НеизвестнаяОшибка Тогда + РезультатТестирования.КоличествоОшибочныхТестов = РезультатТестирования.КоличествоОшибочныхТестов + 1; + КонецЕсли; + КонецЕсли; + РезультатТестирования.ВремяВыполнения = РезультатТестирования.ВремяВыполнения + ДочернийРезультатТестирования.ВремяВыполнения; +КонецПроцедуры + +Функция ВыбратьХудшееСостояниеВыполненияТестов(Знач Состояние1, Знач Состояние2) + Возврат Макс(Состояние1, Состояние2); +КонецФункции + +Функция ВыполнитьТестовыйМетод(Знач КонтекстВыполнения, Знач ЭлементДереваТестов) Экспорт + РезультатТестирования = СоздатьЭлементРезультатовТестирования(ЭлементДереваТестов); + НачалоВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах(); + + Если ВыполнитьИнициализациюКонтекста(КонтекстВыполнения, РезультатТестирования) Тогда + + Попытка + ВыполнитьНеобязательнуюПроцедуруТестовогоСлучая(КонтекстВыполнения, ЭлементДереваТестов.ПередЗапускомТеста); + ВыполнитьПроцедуруКонтекста(КонтекстВыполнения, ЭлементДереваТестов.ИмяМетода, ЭлементДереваТестов.Параметры); + + РезультатТестирования.Состояние = СостоянияТестов.Пройден; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КраткийТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + Если ЕстьОшибка_МетодОбъектаНеОбнаружен(КраткийТекстОшибки, ЭлементДереваТестов.ИмяМетода) Тогда + РезультатТестирования.Состояние = СостоянияТестов.НеРеализован; + Сообщение = НСтр("ru = 'Отсутствует реализация тестового метода (%1).'"); + РезультатТестирования.Сообщение = СтрЗаменить(Сообщение, "%1", ЭлементДереваТестов.ИмяМетода); + Иначе + РезультатТестирования.Сообщение = ТекстОшибки; + Если ЭтоОшибкаПроверки(КраткийТекстОшибки) Тогда + РезультатТестирования.Состояние = СостоянияТестов.Сломан; + ИначеЕсли ЭтоПропущенныйТест(КраткийТекстОшибки) Тогда + РезультатТестирования.Состояние = СостоянияТестов.НеРеализован; + Иначе + РезультатТестирования.Состояние = СостоянияТестов.НеизвестнаяОшибка; + КонецЕсли; + КонецЕсли; + КонецПопытки; + Попытка + ВыполнитьНеобязательнуюПроцедуруТестовогоСлучая(КонтекстВыполнения, ЭлементДереваТестов.ПослеЗапускаТеста); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + РезультатТестирования.Сообщение = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + + КраткийТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + Если ЭтоОшибкаПроверки(ТекстОшибки) Тогда + РезультатТестирования.Состояние = СостоянияТестов.Сломан; + Иначе + РезультатТестирования.Состояние = СостоянияТестов.НеизвестнаяОшибка; + КонецЕсли; + КонецПопытки; + КонецЕсли; + + ОкончаниеВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах(); + РезультатТестирования.ВремяВыполнения = (ОкончаниеВыполнения - НачалоВыполнения) / 1000; + + Возврат РезультатТестирования; +КонецФункции + +Функция ВыполнитьИнициализациюКонтекста(КонтекстВыполнения, РезультатТестирования) + Попытка + КонтекстВыполнения.Инициализация(ЭтотОбъект); + Возврат Истина; + Исключение + РезультатТестирования.Сообщение = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + РезультатТестирования.Состояние = СостоянияТестов.НеизвестнаяОшибка; + КонецПопытки; + Возврат Ложь; +КонецФункции + +Процедура ВыполнитьНеобязательнуюПроцедуруТестовогоСлучая(Знач КонтекстВыполнения, Знач ИмяПроцедуры) + Попытка + ВыполнитьПроцедуруКонтекста(КонтекстВыполнения, ИмяПроцедуры); + Исключение + ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Если Не ЕстьОшибка_МетодОбъектаНеОбнаружен(ТекстОшибки, ИмяПроцедуры) Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; +КонецПроцедуры + +Процедура ВыполнитьПроцедуруКонтекста(Знач КонтекстВыполнения, Знач ПроцедураКонтекста, Знач Параметры = Неопределено) + СтрокаПараметров = СформироватьСтрокуПараметров(Параметры); + ИcполняемыйКод = "КонтекстВыполнения." + ПроцедураКонтекста + "(" + СтрокаПараметров + ");"; + Выполнить(ИcполняемыйКод); +КонецПроцедуры + +Функция СформироватьСтрокуПараметров(Знач Параметры) + СтрокаПараметров = ""; + Если ТипЗнч(Параметры) = Тип("Массив") Тогда + Для Сч = 0 По Параметры.Количество() - 1 Цикл + СтрокаПараметров = СтрокаПараметров + ",Параметры[" + Формат(Сч, "ЧН=0; ЧГ=") + "]"; + КонецЦикла; + КонецЕсли; + + Возврат Сред(СтрокаПараметров, 2); +КонецФункции + +Функция ЕстьОшибка_МетодОбъектаНеОбнаружен(Знач ТекстОшибки, Знач ИмяМетода) + Результат = Ложь; + Если Найти(текстОшибки, "Метод объекта не обнаружен (" + ИмяМетода + ")") > 0 + ИЛИ Найти(текстОшибки, "Object method not found (" + ИмяМетода + ")") > 0 Тогда + Результат = Истина; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ЭтоОшибкаПроверки(ТекстОшибки) + + Возврат Найти(ТекстОшибки, "["+ СтатусыРезультатаТестирования.ОшибкаПроверки + "]") = 1; + +КонецФункции + +Функция ЭтоПропущенныйТест(ТекстОшибки) + + Возврат Найти(ТекстОшибки, "["+ СтатусыРезультатаТестирования.ТестПропущен + "]") > 0; + +КонецФункции + +// } Выполнение тестов + +// { Генерация результатов тестирования +Функция СостоянияТестов() + СостоянияТестов = Новый Структура; + СостоянияТестов.Вставить("НеВыполнен", 0); + СостоянияТестов.Вставить("Пройден", 1); + СостоянияТестов.Вставить("НеРеализован", 2); + СостоянияТестов.Вставить("Сломан", 3); + СостоянияТестов.Вставить("НеизвестнаяОшибка", 4); + + Возврат Новый ФиксированнаяСтруктура(СостоянияТестов); +КонецФункции + +Функция СтатусыРезультатаТестирования() + СтатусыРезультатаТестирования = Новый Структура; + СтатусыРезультатаТестирования.Вставить("ОшибкаПроверки", "Failed"); + СтатусыРезультатаТестирования.Вставить("НеизвестнаяОшибка", "Broken"); + СтатусыРезультатаТестирования.Вставить("ТестПропущен", "Pending"); + + Возврат Новый ФиксированнаяСтруктура(СтатусыРезультатаТестирования); +КонецФункции + +Функция СоздатьКонтейнерРезультатовТестирования(Знач КонтейнерДереваТестов) + ГруппаРезультатовТестирования = Новый Структура; + ГруппаРезультатовТестирования.Вставить("Ключ", КонтейнерДереваТестов.Ключ); + ГруппаРезультатовТестирования.Вставить("Тип", КонтейнерДереваТестов.Тип); + ГруппаРезультатовТестирования.Вставить("Имя", КонтейнерДереваТестов.Имя); + ГруппаРезультатовТестирования.Вставить("Состояние", СостоянияТестов.НеВыполнен); + ГруппаРезультатовТестирования.Вставить("КоличествоТестов", 0); + ГруппаРезультатовТестирования.Вставить("КоличествоСломанныхТестов", 0); + ГруппаРезультатовТестирования.Вставить("КоличествоНеРеализованныхТестов", 0); + ГруппаРезультатовТестирования.Вставить("КоличествоОшибочныхТестов", 0); + ГруппаРезультатовТестирования.Вставить("ВремяВыполнения", 0); + ГруппаРезультатовТестирования.Вставить("Строки", Новый Массив); + + Возврат ГруппаРезультатовТестирования; +КонецФункции + +Функция СоздатьЭлементРезультатовТестирования(Знач ЭлементДереваТестов) + РезультатТестирования = Новый Структура; + РезультатТестирования.Вставить("Ключ", ЭлементДереваТестов.Ключ); + РезультатТестирования.Вставить("Тип", ЭлементДереваТестов.Тип); + РезультатТестирования.Вставить("Путь", ЭлементДереваТестов.Путь); + РезультатТестирования.Вставить("ИмяМетода", ЭлементДереваТестов.ИмяМетода); + РезультатТестирования.Вставить("Представление", ЭлементДереваТестов.Представление); + РезультатТестирования.Вставить("Параметры", ЭлементДереваТестов.Параметры); + РезультатТестирования.Вставить("Состояние", СостоянияТестов.НеВыполнен); + РезультатТестирования.Вставить("ВремяВыполнения", 0); + РезультатТестирования.Вставить("Сообщение", ""); + + Возврат РезультатТестирования; +КонецФункции +// } Генерация результатов тестирования + +// { Настройки браузера тестирования +Процедура ЗагрузитьНастройки() Экспорт + ЭтотОбъект.Настройки = ПолучитьПустыеНастройкиБраузераТестирования(); + // Ключом настроек должно быть не имя обработки, а полное имя метаданных, т.к. имя внешней обработки + // может совпадать с именем обработки, встроенной в состав конфигурации + СчитанныеНастройки = ХранилищеОбщихНастроек.Загрузить(ЭтотОбъект.Метаданные().ПолноеИмя()); + Если ТипЗнч(СчитанныеНастройки) = Тип("Структура") Тогда + Для каждого СчитанныеКлючЗначение Из СчитанныеНастройки Цикл + Если ЭтотОбъект.Настройки.Свойство(СчитанныеКлючЗначение.Ключ) И ТипЗнч(СчитанныеКлючЗначение.Значение) = ТипЗнч(ЭтотОбъект.Настройки[СчитанныеКлючЗначение.Ключ]) Тогда + ЭтотОбъект.Настройки[СчитанныеКлючЗначение.Ключ] = СчитанныеКлючЗначение.Значение; + КонецЕсли; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +Процедура СохранитьНастройки() Экспорт + Попытка + // Ключом настроек должно быть не имя обработки, а полное имя метаданных, т.к. имя внешней обработки + // может совпадать с именем обработки, встроенной в состав конфигурации + ХранилищеОбщихНастроек.Сохранить(ЭтотОбъект.Метаданные().ПолноеИмя(), , ЭтотОбъект.Настройки); + Исключение + // TODO: При пакетном запуске и тестировании в тонком клиенте возникает ошибка типа XDTO + // Могут возникнуть ошибки, пропускаем + КонецПопытки; +КонецПроцедуры + +Функция ПолучитьПустыеНастройкиБраузераТестирования() + Результат = Новый Структура; + Результат.Вставить("ИсторияЗагрузкиТестов", Новый Массив); + + Возврат Результат; +КонецФункции + +Процедура СохранитьВИсториюЗагрузкиТестов(Знач ИдентификаторЗагрузчика, Знач Путь) Экспорт + ИсторияЗагрузкиТестов = ЭтотОбъект.Настройки.ИсторияЗагрузкиТестов; + Для Сч = - ИсторияЗагрузкиТестов.Количество() + 1 По 0 Цикл + Индекс = -Сч; + ЭлементИстории = ИсторияЗагрузкиТестов[Индекс]; + Если ЭлементИстории.ИдентификаторЗагрузчика = ИдентификаторЗагрузчика И ЭлементИстории.Путь = Путь Тогда + ИсторияЗагрузкиТестов.Удалить(Индекс); + КонецЕсли; + КонецЦикла; + + ИсторияЗагрузкиТестов.Вставить(0, Новый Структура("ИдентификаторЗагрузчика, Путь", ИдентификаторЗагрузчика, Путь)); + ДлинаИстории = 10; + Пока ИсторияЗагрузкиТестов.Количество() > ДлинаИстории Цикл + ИсторияЗагрузкиТестов.Удалить(ДлинаИстории); + КонецЦикла; +КонецПроцедуры +// } Настройки браузера тестирования + +// { Оповещения +Функция ВозможныеСобытия() Экспорт + ИмяФреймворка = Метаданные().Имя; + ВозможныеСобытия = Новый Структура; + ВозможныеСобытия.Вставить("ВыполненТестовыйМетод", ИмяФреймворка + "_ВыполненТестовыйМетод"); + + Возврат Новый ФиксированнаяСтруктура(ВозможныеСобытия); +КонецФункции + +Процедура ОповеститьОСобытии(Знач Подписчик, Знач Событие, Знач ПараметрыСобытия) + Выполнить("Подписчик.ОбработатьСобытиеВыполненияТестов(Событие, ПараметрыСобытия);"); +КонецПроцедуры +// } Оповещения + +// { Контекст +Процедура СохранитьКонтекст(Знач Контекст) Экспорт + Если ЭтотОбъект.ТекущийКонтейнер.СлучайныйПорядокВыполнения Тогда + ВызватьИсключение ЭтотОбъект.ВозможныеИсключения.СохранятьКонтекстТолькоВСтрогомРежиме; + КонецЕсли; + ЭтотОбъект.ТекущийКонтейнер.Контекст = Контекст; +КонецПроцедуры + +Функция ПолучитьКонтекст() Экспорт + Если ЭтотОбъект.ТекущийКонтейнер.СлучайныйПорядокВыполнения Тогда + ВызватьИсключение ЭтотОбъект.ВозможныеИсключения.ПолучатьКонтекстТолькоВСтрогомРежиме; + КонецЕсли; + Возврат ЭтотОбъект.ТекущийКонтейнер.Контекст; +КонецФункции +// } Контекст + +Процедура ВызватьОшибкуПроверки(СообщениеОшибки = "") Экспорт + + Префикс = "["+ СтатусыРезультатаТестирования.ОшибкаПроверки + "]"; + ВызватьИсключение Префикс + " " + СообщениеОшибки; + +КонецПроцедуры + +Процедура ПропуститьТест(Знач Сообщение = "") Экспорт + + Префикс = "[" + СтатусыРезультатаТестирования.ТестПропущен + "]"; + Если ПустаяСтрока(Сообщение) Тогда + Сообщение = НСтр("ru = 'Тест пропущен'"); + КонецЕсли; + ВызватьИсключение Префикс + " " + Сообщение; + +КонецПроцедуры + +// Выводит сообщение. В тестах ВСЕГДА должна использоваться ВМЕСТО метода Сообщить(). +// +Функция ВывестиСообщение(ТекстСообщения, Статус=Неопределено) Экспорт + + Сообщить(ТекстСообщения, Статус); + +КонецФункции + +// { Helpers +Функция ВозможныеИсключения() + ВозможныеИсключения = Новый Структура; + ВозможныеИсключения.Вставить("СохранятьКонтекстТолькоВСтрогомРежиме", "Сохранять контекст можно только в рамках контейнеров со строгим порядком выполнения"); + ВозможныеИсключения.Вставить("ПолучатьКонтекстТолькоВСтрогомРежиме", "Получать контекст можно только в рамках контейнеров со строгим порядком выполнения"); + + Возврат Новый ФиксированнаяСтруктура(ВозможныеИсключения); +КонецФункции + +Функция ПеремешатьМассив(Знач ИсходныйМассив) + Результат = Новый Массив; + Для Каждого Элемент Из ИсходныйМассив Цикл + Результат.Добавить(Элемент); + КонецЦикла; + + // алгоритм перемешивания взят из книги Кнута "Искусство программирования" т.2 + ГСЧ = Новый ГенераторСлучайныхЧисел(); + ПоследнийИндекс = Результат.ВГраница(); + Для Индекс = 1 По ПоследнийИндекс Цикл + ТекущийИндекс = ПоследнийИндекс - Индекс + 1; + НовыйИндекс = ГСЧ.СлучайноеЧисло(0, ТекущийИндекс); + Если НовыйИндекс <> ТекущийИндекс Тогда + Значение = Результат[НовыйИндекс]; + Результат[НовыйИндекс] = Результат[ТекущийИндекс]; + Результат[ТекущийИндекс] = Значение; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция НайтиРезультатТестированияПоИдентификатору(Знач КонтейнерРезультатовТестирования, Знач ИдентификаторТеста, Знач ВключатьПодчиненные = Ложь) Экспорт + Перем Результат; + + Для каждого ДочернийРезультатТестирования Из КонтейнерРезультатовТестирования.Строки Цикл + Если ДочернийРезультатТестирования.Ключ = ИдентификаторТеста Тогда + Результат = ДочернийРезультатТестирования; + ИначеЕсли ЗначениеЗаполнено(Результат) И ВключатьПодчиненные И ДочернийРезультатТестирования.Тип = ЭтотОбъект.ТипыУзловДереваТестов.Контейнер Тогда + Результат = НайтиРезультатТестированияПоИдентификатору(ДочернийРезультатТестирования, ИдентификаторТеста, ВключатьПодчиненные); + КонецЕсли; + Если ЗначениеЗаполнено(Результат) Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ПараметрыМетода(Знач Парам1, Знач Парам2 = Неопределено, Знач Парам3 = Неопределено, Знач Парам4 = Неопределено, Знач Парам5 = Неопределено, Знач Парам6 = Неопределено, Знач Парам7 = Неопределено, Знач Парам8 = Неопределено, Знач Парам9 = Неопределено) Экспорт + ВсеПараметры = Новый Массив; + ВсеПараметры.Добавить(Парам1); + ВсеПараметры.Добавить(Парам2); + ВсеПараметры.Добавить(Парам3); + ВсеПараметры.Добавить(Парам4); + ВсеПараметры.Добавить(Парам5); + ВсеПараметры.Добавить(Парам6); + ВсеПараметры.Добавить(Парам7); + ВсеПараметры.Добавить(Парам8); + ВсеПараметры.Добавить(Парам9); + + ИндексСПоследнимПараметром = 0; + Для Сч = 0 По ВсеПараметры.ВГраница() Цикл + Индекс = ВсеПараметры.ВГраница() - Сч; + Если ВсеПараметры[Индекс] <> Неопределено Тогда + ИндексСПоследнимПараметром = Индекс; + Прервать; + КонецЕсли; + КонецЦикла; + + ПараметрыМетода = Новый Массив; + Для Сч = 0 По ИндексСПоследнимПараметром Цикл + ПараметрыМетода.Добавить(ВсеПараметры[Сч]); + КонецЦикла; + + Возврат ПараметрыМетода; +КонецФункции +// } Helpers + +// { Подсистема конфигурации xUnitFor1C + +Функция ПолучитьГлавнуюПодсистему() Экспорт + + КоллекцияПодсистем = Метаданные.Подсистемы; + + ГлавнаяПодсистема = Неопределено; + + ИмяГлавнойПодсистемы = ИспользуемыйПрефиксПодсистемы + "xUnitFor1C"; + Для Каждого Подсистема Из КоллекцияПодсистем Цикл + Если Подсистема.Имя = ИмяГлавнойПодсистемы Тогда + ГлавнаяПодсистема = Подсистема; + Прервать; + Иначе + ГлавнаяПодсистема = НайтиПодсистемуПоИмени(Подсистема.Подсистемы, ИмяГлавнойПодсистемы); + Если ЗначениеЗаполнено(ГлавнаяПодсистема) Тогда + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ГлавнаяПодсистема = Неопределено Тогда + ВызватьИсключение "Не удалось главную подсистему """ + ИмяГлавнойПодсистемы + """!"; + КонецЕсли; + + Возврат ГлавнаяПодсистема; + +КонецФункции + +Функция НайтиПодсистемуПоИмени(КоллекцияПодсистем, ИмяПодсистемыДляПоиска) + + Для Каждого Подсистема Из КоллекцияПодсистем Цикл + Если Подсистема.Имя = ИмяПодсистемыДляПоиска Тогда + Возврат Подсистема; + Иначе + Возврат НайтиПодсистемуПоИмени(Подсистема.Подсистемы, ИмяПодсистемыДляПоиска); + КонецЕсли; + КонецЦикла; + +КонецФункции + +Функция ПолучитьПлагины() Экспорт + + ГлавнаяПодсистема = ПолучитьГлавнуюПодсистему(); + + СтруктураПлагинов = Новый Структура; + + ДлинаПрефикса = СтрДлина(ИспользуемыйПрефиксПодсистемы); + + КоллекцияПлагинов = ГлавнаяПодсистема.Подсистемы.Plugins.Состав; + Для Каждого Плагин Из КоллекцияПлагинов Цикл + ИмяПлагина = Прав(Плагин.Имя, СтрДлина(Плагин.Имя) - ДлинаПрефикса); + СтруктураПлагинов.Вставить(ИмяПлагина, Плагин.Имя); + КонецЦикла; + + Возврат СтруктураПлагинов; + +КонецФункции + +Функция ПолучитьУтилиты() Экспорт + + ГлавнаяПодсистема = ПолучитьГлавнуюПодсистему(); + + СтруктураПлагинов = Новый Структура; + + ДлинаПрефикса = СтрДлина(ИспользуемыйПрефиксПодсистемы); + + КоллекцияПлагинов = ГлавнаяПодсистема.Подсистемы.Utils.Состав; + Для Каждого Плагин Из КоллекцияПлагинов Цикл + ИмяПлагина = Прав(Плагин.Имя, СтрДлина(Плагин.Имя) - ДлинаПрефикса); + СтруктураПлагинов.Вставить(ИмяПлагина, Плагин.Имя); + КонецЦикла; + + Возврат СтруктураПлагинов; + +КонецФункции + +Функция ОбработкаЯвляетсяВстроеннойВКонфигурацию() Экспорт + + ПолноеИмяТекущейОбработки = ЭтотОбъект.Метаданные().ПолноеИмя(); + ВстроеннаяВКонфигурациюОбработка = Метаданные.НайтиПоПолномуИмени(ПолноеИмяТекущейОбработки); + + ОбработкаВстроенаяВСоставКонфигурации = НЕ (ВстроеннаяВКонфигурациюОбработка = Неопределено); + + Возврат ОбработкаВстроенаяВСоставКонфигурации; + +КонецФункции + +Функция СлужебныеПараметрыОбработки() Экспорт + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("ПолноеИмяБраузераТестов", ПолноеИмяБраузераТестов); + СтруктураПараметров.Вставить("ПолныйПутьКФайлуБраузераТестов", ПолныйПутьКФайлуБраузераТестов); + + Возврат СтруктураПараметров; + +КонецФункции + +// Универсальная функция для проверки наличия +// свойств у значения любого типа данных +// Переменные: +// 1. Переменная - переменная любого типа, +// для которой необходимо проверить наличие свойства +// 2. ИмяСвойства - переменная типа "Строка", +// содержащая искомое свойства +// +Функция ПеременнаяСодержитСвойство(Переменная, ИмяСвойства) + // Инициализируем структуру для теста + // с ключом (значение переменной "ИмяСвойства") + // и значением произвольного GUID'а + GUIDПроверка = Новый УникальныйИдентификатор; + СтруктураПроверка = Новый Структура; + СтруктураПроверка.Вставить(ИмяСвойства, GUIDПроверка); + // Заполняем созданную структуру из переданного + // значения переменной + ЗаполнитьЗначенияСвойств(СтруктураПроверка, Переменная); + // Если значение для свойства структуры осталось + // NULL, то искомое свойство не найдено, + // и наоборот. + Если СтруктураПроверка[ИмяСвойства] = GUIDПроверка Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; +КонецФункции +Функция ЗаполнитьСвойствоПриНаличии(ОбъектЗаполнения, ИмяСвойство, ЗначениеСвойства) + + Если ПеременнаяСодержитСвойство(ОбъектЗаполнения, ИмяСвойство) Тогда + ОбъектЗаполнения[ИмяСвойство] = ЗначениеСвойства; + КонецЕсли; + +КонецФункции + +Функция ДополнитьИдентификаторПрефиксомПодсистемы(Знач Идентификатор) Экспорт + + Если НЕ ЗначениеЗаполнено(ИспользуемыйПрефиксПодсистемы) Тогда + Возврат Идентификатор; + КонецЕсли; + + ДлинаПрефикса = СтрДлина(ИспользуемыйПрефиксПодсистемы); + Если Лев(Идентификатор, ДлинаПрефикса) = ИспользуемыйПрефиксПодсистемы Тогда + Возврат Идентификатор; + Иначе + Возврат ИспользуемыйПрефиксПодсистемы + Идентификатор; + КонецЕсли; + +КонецФункции +Функция ПолучитьИдентификаторБезПрефиксаПодсистемы(Знач Идентификатор) Экспорт + + Если НЕ ЗначениеЗаполнено(ИспользуемыйПрефиксПодсистемы) Тогда + Возврат Идентификатор; + КонецЕсли; + + ДлинаПрефикса = СтрДлина(ИспользуемыйПрефиксПодсистемы); + Если Лев(Идентификатор, ДлинаПрефикса) = ИспользуемыйПрефиксПодсистемы Тогда + Возврат Прав(Идентификатор, СтрДлина(Идентификатор) - ДлинаПрефикса); + Иначе + Возврат Идентификатор; + КонецЕсли; + +КонецФункции + +Функция СоздатьОбъектПлагина(Идентификатор, ВстроенаВКонфигурацию = Ложь, ЭтоОтчет = Ложь) Экспорт + + ОбъектПлагина = Неопределено; + + Если ЭтотОбъект.ЭтоВстроеннаяОбработка + ИЛИ ВстроенаВКонфигурацию = Истина Тогда + + ИдентификаторСПрефиксомПодсистемы = ДополнитьИдентификаторПрефиксомПодсистемы(Идентификатор); + ИдентификаторБезПрефиксаПодсистемы = ПолучитьИдентификаторБезПрефиксаПодсистемы(Идентификатор); + + Если ЭтоОтчет = Истина Тогда + МенеджерВидаОбъектов = Отчеты; + МетаданныеВидаОбъектов = Метаданные.Отчеты; + Иначе + МенеджерВидаОбъектов = Обработки; + МетаданныеВидаОбъектов = Метаданные.Обработки; + КонецЕсли; + + Если НЕ МетаданныеВидаОбъектов.Найти(ИдентификаторСПрефиксомПодсистемы) = Неопределено Тогда + ОбъектПлагина = МенеджерВидаОбъектов[ИдентификаторСПрефиксомПодсистемы].Создать(); + ИначеЕсли НЕ МетаданныеВидаОбъектов.Найти(ИдентификаторБезПрефиксаПодсистемы) = Неопределено Тогда + ОбъектПлагина = МенеджерВидаОбъектов[ИдентификаторБезПрефиксаПодсистемы].Создать(); + КонецЕсли; + + КонецЕсли; + + Если ОбъектПлагина = Неопределено Тогда + Если ЭтоОтчет = Истина Тогда + ОбъектПлагина = ВнешниеОтчеты.Создать(Идентификатор, Ложь); + Иначе + ОбъектПлагина = ВнешниеОбработки.Создать(Идентификатор, Ложь); + КонецЕсли; + КонецЕсли; + + Возврат ОбъектПлагина; + +КонецФункции + +// } Подсистема конфигурации xUnitFor1C + +Инициализация(); diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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.xml" "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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.xml" new file mode 100644 index 000000000..098668691 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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.xml" @@ -0,0 +1,22 @@ + + +
+ + УправляемаяФорма + + + ru + Управляемая форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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" new file mode 100644 index 000000000..59005adc0 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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" @@ -0,0 +1,645 @@ + +
+ false + useIfNecessary + + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузить ...</v8:content> + </v8:item> + + + + ru + Подменю загрузить тесты + + + + Picture.png + false + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Плагины загрузчики</v8:content> + </v8:item> + + + + ru + Плагины загрузчики + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Подменю история загрузки тестов</v8:content> + </v8:item> + + + + ru + История загрузки тестов + + + + + + + + + + + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Внешние инструменты</v8:content> + </v8:item> + + + + ru + Внешние инструменты + + + + + + + + + + + + + + + + ПриОткрытии + ПриСозданииНаСервере + ПриЗакрытии + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дерево тестов</v8:content> + </v8:item> + + + + ru + Дерево тестов + + + Vertical + None + false + + + + Tree + true + false + false + 3 + Row + true + ExpandAllLevels + ДеревоТестов + ДеревоТестов.ИконкаУзла + + RowsPicture.png + false + + None + None + None + + false + + + + + + false + + + + + ДеревоТестов + SearchStringRepresentation + + + + + + + ДеревоТестов + ViewStatusRepresentation + + + + + + + ДеревоТестов + SearchControl + + + + + + + ДеревоТестов.Состояние + None + EnterOnInput + + ValuesPicture.png + false + + + + + + ДеревоТестов.Имя + EnterOnInput + + + + + ДеревоТестов.КоличествоТестов + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Кол-во</v8:content> + </v8:item> + + EnterOnInput + + + + + ДеревоТестов.ВремяВыполнения + EnterOnInput + + + + + ДеревоТестов.Путь + EnterOnInput + + + + +
+
+
+ + ИндикаторВыполнения + None + Broken + true + + + +
+ + + + cfg:DataProcessorObject.xddTestRunner + + true + + 1/0:e46a4b91-3cc7-4188-b6f0-96c31aa42e19 + 1/0:a2724854-2f5c-4048-b7b2-02cbb9cb7fa3 + 1/0:092b3fc1-7ced-4d20-8a28-79b535f8a9c4 + 1/0:07f739b4-709b-41bf-8096-032bddefd0f9 + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Индикатор выполнения</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Any + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дерево тестов</v8:content> + </v8:item> + + + v8:ValueTree + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Количество тестов</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Состояние</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Имя</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Время выполнения</v8:content> + </v8:item> + + + xs:decimal + + 10 + 3 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Путь</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Иконка узла</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Ключ</v8:content> + </v8:item> + + + v8:UUID + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Используемое имя файла</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Идентификатор загрузчика</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дерево от загрузчика</v8:content> + </v8:item> + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Это пакетный запуск</v8:content> + </v8:item> + + + xs:boolean + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выполнить все тесты (F7)</v8:content> + </v8:item> + + + + ru + Команда выполнить все тесты + + + F7 + КомандаВыполнитьВсеТесты + TextPicture + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перезагрузить</v8:content> + </v8:item> + + + + ru + Команда перезагрузить все тесты + + + Ctrl+R + ПерезагрузитьПоследниеТестыПоИстории + TextPicture + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выполнить выделенные (Ctrl+Enter)</v8:content> + </v8:item> + + + + ru + Команда выполнить выделенные тесты + + + + StdPicture.GenerateReport + true + + КомандаВыполнитьВыделенныеТесты + TextPicture + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Генератор макетов данных</v8:content> + </v8:item> + + + + ru + Генератор макетов данных на базе реальных данных + + + ГенераторМакетовДанных + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Показать ГУИД</v8:content> + </v8:item> + + + + ru + Показать ГУИД + + + ПоказатьГУИД + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузить только выделенные тесты</v8:content> + </v8:item> + + + + ru + Команда загрузить только выделенные тесты + + + КомандаЗагрузитьТолькоВыделенныеТесты + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Перезагрузить браузер тестирования</v8:content> + </v8:item> + + + + ru + Команда перезагрузить форму + + + КомандаПерезагрузитьФорму + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Загрузить тесты по умолчанию</v8:content> + </v8:item> + + + + ru + Загрузить тесты по умолчанию + + + ЗагрузитьТестыПоУмолчанию + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конвертер тестов в формат 4-й версии</v8:content> + </v8:item> + + + + ru + Конвертер тестов + + + КонвертерТестов + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Преобразовать журнал действий пользователя в тест</v8:content> + </v8:item> + + + + ru + Преобразовать журнал действий пользователя в тест + + + ПреобразоватьЖурналДействийПользователяВТест + + + + + + v8:ValueListType + + + +
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\224\320\265\321\200\320\265\320\262\320\276\320\242\320\265\321\201\321\202\320\276\320\262/RowsPicture.png" "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\224\320\265\321\200\320\265\320\262\320\276\320\242\320\265\321\201\321\202\320\276\320\262/RowsPicture.png" new file mode 100644 index 000000000..4b74f63e9 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\224\320\265\321\200\320\265\320\262\320\276\320\242\320\265\321\201\321\202\320\276\320\262/RowsPicture.png" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\224\320\265\321\200\320\265\320\262\320\276\320\242\320\265\321\201\321\202\320\276\320\262\320\241\320\276\321\201\321\202\320\276\321\217\320\275\320\270\320\265/ValuesPicture.png" "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\224\320\265\321\200\320\265\320\262\320\276\320\242\320\265\321\201\321\202\320\276\320\262\320\241\320\276\321\201\321\202\320\276\321\217\320\275\320\270\320\265/ValuesPicture.png" new file mode 100644 index 000000000..bafa4a172 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\224\320\265\321\200\320\265\320\262\320\276\320\242\320\265\321\201\321\202\320\276\320\262\320\241\320\276\321\201\321\202\320\276\321\217\320\275\320\270\320\265/ValuesPicture.png" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\222\321\201\320\265\320\242\320\265\321\201\321\202\321\213/Picture.png" "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\222\321\201\320\265\320\242\320\265\321\201\321\202\321\213/Picture.png" new file mode 100644 index 000000000..800aa1674 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\222\321\213\320\277\320\276\320\273\320\275\320\270\321\202\321\214\320\222\321\201\320\265\320\242\320\265\321\201\321\202\321\213/Picture.png" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\265\321\200\320\265\320\267\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\242\320\265\321\201\321\202\321\213/Picture.png" "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\265\321\200\320\265\320\267\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\242\320\265\321\201\321\202\321\213/Picture.png" new file mode 100644 index 000000000..8cd2ce115 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\237\320\265\321\200\320\265\320\267\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\242\320\265\321\201\321\202\321\213/Picture.png" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\237\320\276\320\264\320\274\320\265\320\275\321\216\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\242\320\265\321\201\321\202\321\213/Picture.png" "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\237\320\276\320\264\320\274\320\265\320\275\321\216\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\242\320\265\321\201\321\202\321\213/Picture.png" new file mode 100644 index 000000000..30ddd6b31 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\237\320\276\320\264\320\274\320\265\320\275\321\216\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\242\320\265\321\201\321\202\321\213/Picture.png" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\244\320\276\321\200\320\274\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\242\320\265\321\201\321\202\321\213\320\237\320\276\320\243\320\274\320\276\320\273\321\207\320\260\320\275\320\270\321\216/Picture.png" "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\244\320\276\321\200\320\274\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\242\320\265\321\201\321\202\321\213\320\237\320\276\320\243\320\274\320\276\320\273\321\207\320\260\320\275\320\270\321\216/Picture.png" new file mode 100644 index 000000000..30ddd6b31 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/Items/\320\244\320\276\321\200\320\274\320\260\320\227\320\260\320\263\321\200\321\203\320\267\320\270\321\202\321\214\320\242\320\265\321\201\321\202\321\213\320\237\320\276\320\243\320\274\320\276\320\273\321\207\320\260\320\275\320\270\321\216/Picture.png" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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" new file mode 100644 index 000000000..b53f29f43 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/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" @@ -0,0 +1,1192 @@ +&НаКлиенте +Перем КэшФормПлагинов; +&НаКлиенте +Перем ПодключенныеВнешниеОбработки; + +// { События формы +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ОбъектНаСервере = РеквизитФормыВЗначение("Объект"); + + ЭтаФорма.Заголовок = ОбъектНаСервере.ЗаголовокФормы(); + + Если НЕ Объект.ЭтоВстроеннаяОбработка Тогда // Используемое имя файла меняется в зависимости от того + // встроена обработка в конфигурацию или нет + ИспользуемоеИмяФайла = ОбъектНаСервере.ИспользуемоеИмяФайла; + КонецЕсли; + + ОбновитьКомандыИсторииЗагрузкиТестов(); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии() + ЗагрузитьПлагины(); + КэшироватьПеречисленияПлагинов(); + СброситьПодключенныеВнешниеОбработки(); + + ЭтоПакетныйЗапуск = ЗначениеЗаполнено(ПараметрЗапуска); + Если ЭтоПакетныйЗапуск Тогда + ВыполнитьПакетныйЗапуск(ПараметрЗапуска); + Иначе + ПерезагрузитьПоследниеТестыПоИстории(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + + // Для пакетного запуска нет смысла вызывать это событие, + Если НЕ ЭтоПакетныйЗапуск Тогда + ПриЗакрытииНаСервере(); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЗакрытииНаСервере() + ЭтотОбъектНаСервере().СохранитьНастройки(); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьСобытиеВыполненияТестов(Знач ИмяСобытия, Знач Параметр) Экспорт + Если ИмяСобытия = Объект.ВозможныеСобытия.ВыполненТестовыйМетод Тогда + Если Параметр.Состояние = Объект.СостоянияТестов.НеРеализован Тогда + Если Элементы.ИндикаторВыполнения.ЦветРамки <> WebЦвета.Красный Тогда + Элементы.ИндикаторВыполнения.ЦветРамки = WebЦвета.Золотой; + КонецЕсли; + ИначеЕсли Параметр.Состояние = Объект.СостоянияТестов.Сломан Тогда + Элементы.ИндикаторВыполнения.ЦветРамки = WebЦвета.Красный; + КонецЕсли; + ИндикаторВыполнения = ИндикаторВыполнения + 1; + КонецЕсли; + ОбновитьОтображениеДанных(); +КонецПроцедуры +// } События формы + +// { Управляющие воздействия пользователя +&НаКлиенте +Процедура ЗагрузитьТестыПоУмолчанию(Команда) + ЗагрузчикПоУмолчанию = ЗагрузчикПоУмолчанию(); + ИдентификаторЗагрузчикаПоУмолчанию = ЗагрузчикПоУмолчанию.ОписаниеПлагина(Объект.ТипыПлагинов).Идентификатор; + Подключаемый_ИнтерактивныйВызовЗагрузчика(Новый Структура("Имя", ИдентификаторЗагрузчикаПоУмолчанию)); +КонецПроцедуры + +&НаКлиенте +Процедура КомандаВыполнитьВсеТесты(Команда) + ВыполнитьТестыНаКлиенте(); +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьТестыНаКлиенте(Знач Фильтр = Неопределено) + Если ЗначениеЗаполнено(ЭтаФорма.ДеревоОтЗагрузчика) Тогда + ОчиститьСообщения(); + + КоличествоТестовыхМетодов = ПолучитьКоличествоТестовыхМетодов(ЭтаФорма.ДеревоОтЗагрузчика, Фильтр); + ИнициализироватьИндикаторВыполнения(КоличествоТестовыхМетодов); + + СброситьПодключенныеВнешниеОбработки(); + РезультатыТестирования = ВыполнитьТесты(Плагин(ИдентификаторЗагрузчика), ЭтаФорма.ДеревоОтЗагрузчика, Фильтр, ЭтаФорма); + + ОбновитьДеревоТестовНаОснованииРезультатовТестирования(ДеревоТестов.ПолучитьЭлементы()[0], РезультатыТестирования); + + ГенераторОтчетаMXL = Плагин("ГенераторОтчетаMXL"); + Отчет = ГенераторОтчетаMXL.СоздатьОтчет(ЭтаФорма, РезультатыТестирования); + ГенераторОтчетаMXL.Показать(Отчет); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура КомандаВыполнитьВыделенныеТесты(Команда) + Фильтр = Новый Массив; + ВыделенныеСтроки = Элементы.ДеревоТестов.ВыделенныеСтроки; + Для каждого ИдентификаторВыделеннойСтроки Из ВыделенныеСтроки Цикл + ВыделеннаяСтрока = ДеревоТестов.НайтиПоИдентификатору(ИдентификаторВыделеннойСтроки); + Фильтр.Добавить(Новый УникальныйИдентификатор(ВыделеннаяСтрока.Ключ)); + КонецЦикла; + Если Фильтр.Количество() > 0 Тогда + ВыполнитьТестыНаКлиенте(Фильтр); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура КомандаПерезагрузитьФорму(Команда) + Перем АдресХранилища; + + Закрыть(); + + Если Объект.ЭтоВстроеннаяОбработка Тогда // Для встроенной в конф. обработки открываем форму + ОткрытьФорму(ЭтаФорма.ИмяФормы); + Иначе + + Оповещение = Новый ОписаниеОповещения("КомандаПерезагрузитьФормуЗавершение", ЭтаФорма); + НачатьПомещениеФайла(Оповещение, АдресХранилища, ЭтаФорма.ИспользуемоеИмяФайла , Ложь, ЭтаФорма.УникальныйИдентификатор); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПерезагрузитьПоследниеТестыПоИстории(Команда = Неопределено) + ИсторияЗагрузкиТестов = Объект.Настройки.ИсторияЗагрузкиТестов; + Если ИсторияЗагрузкиТестов.Количество() > 0 Тогда + ЭлементИстории = ИсторияЗагрузкиТестов[0]; + Попытка + ЗагрузитьТесты(ЭлементИстории.ИдентификаторЗагрузчика, ЭлементИстории.Путь); + Исключение + // TODO + Сообщить("Не удалось загрузить тесты из истории <" + ЭлементИстории.ИдентификаторЗагрузчика + ": " + ЭлементИстории.Путь + ">" + Символы.ПС + ОписаниеОшибки()); + КонецПопытки; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ГенераторМакетовДанных(Команда) + ОткрытьИнструмент("СериализаторMXL", ПолучитьПутьКПлагинам()); +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьГУИД(Команда) + ОткрытьИнструмент("xddGuidShow"); +КонецПроцедуры + +&НаКлиенте +Процедура КонвертерТестов(Команда) + ОткрытьИнструмент("xddTestsConvertIntoRebornFormat"); +КонецПроцедуры + +&НаКлиенте +Процедура ПреобразоватьЖурналДействийПользователяВТест(Команда) + ОткрытьИнструмент("UILogToScript"); +КонецПроцедуры +// } Управляющие воздействия пользователя + +// { Плагины +&НаКлиенте +Процедура ЗагрузитьПлагины() + Объект.Плагины = Новый Структура; + КэшФормПлагинов = Новый Структура; + + // Для встроенного в состав конфигурации браузера тестов + // плагины также загружаем из встроенных обработок + Если Объект.ЭтоВстроеннаяОбработка Тогда + ЗагрузитьВстроенныеПлагины(); + Для Каждого Плагин Из Объект.Плагины Цикл + КэшФормПлагинов.Вставить(Плагин.Ключ, Истина); + КонецЦикла; + Иначе + КаталогПлагинов = ПолучитьПутьКПлагинам(); + НайденныеФайлы = НайтиФайлы(КаталогПлагинов, "*.epf", Ложь); + ПомещаемыеФайлы = Новый Массив; + ИдентификаторыПлагинов = Новый Соответствие; + Для каждого ФайлОбработки Из НайденныеФайлы Цикл + + ПомещаемыйФайл = Новый ОписаниеПередаваемогоФайла(ФайлОбработки.ПолноеИмя); + ПомещаемыеФайлы.Добавить(ПомещаемыйФайл); + + ИмяПлагина = ФайлОбработки.ИмяБезРасширения; + ИдентификаторыПлагинов.Вставить(ФайлОбработки.ПолноеИмя, ИмяПлагина); + + КонецЦикла; + + ЗагруженныеФайлы = Новый Массив; + Если ПомещаемыеФайлы.Количество() Тогда + ПоместитьФайлы(ПомещаемыеФайлы, ЗагруженныеФайлы,,Ложь, ЭтаФорма.УникальныйИдентификатор); + КонецЕсли; + + ОписанияПлагинов = ПодключитьПлагиныНаСервере(ЗагруженныеФайлы); + + Для Каждого ЗагруженныйФайл Из ЗагруженныеФайлы Цикл + ИмяПлагина = ИдентификаторыПлагинов[ЗагруженныйФайл.Имя]; + + ОписаниеПлагина = ОписанияПлагинов[ЗагруженныйФайл.Имя]; + Объект.Плагины.Вставить(ОписаниеПлагина.Идентификатор, ИмяПлагина); + КэшФормПлагинов.Вставить(ОписаниеПлагина.Идентификатор, Истина); + + КонецЦикла; + КонецЕсли; + + ДобавитьКомандыЗагрузчиковНаФорме(); + +КонецПроцедуры + +&НаСервере +Функция ПодключитьПлагиныНаСервере(Знач ЗагружаемыеФайлы) + + ОписанияПлагинов = Новый Соответствие; + + Для Каждого ОписаниеФайла Из ЗагружаемыеФайлы Цикл + ФайлОбъект = Новый Файл(ОписаниеФайла.Имя); + ИмяПлагина = ФайлОбъект.ИмяБезРасширения; + ПодключитьФайлОбработкиНаСервере(ОписаниеФайла.Хранение, ИмяПлагина); + + Попытка + ОбъектОбработки = ВнешниеОбработки.Создать(ИмяПлагина, Ложь); + ОбъектОбработки.Инициализация(ЭтотОбъектНаСервере()); + ОписанияПлагинов.Вставить(ОписаниеФайла.Имя, ОбъектОбработки.ОписаниеПлагина(Объект.ТипыПлагинов)); + Исключение + Ошибка = "Возникла ошибка при загрузке плагина: "+ОписаниеФайла.Имя + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Сообщить(Ошибка); + Продолжить; + КонецПопытки; + + КонецЦикла; + + Возврат Новый ФиксированноеСоответствие(ОписанияПлагинов); + +КонецФункции // ПодключитьПлагиныНаСервере() + +&НаКлиенте +Процедура КэшироватьПеречисленияПлагинов() + Объект.ТипыУзловДереваТестов = Плагин("ПостроительДереваТестов").Объект.ТипыУзловДереваТестов; +КонецПроцедуры + +&НаКлиенте +Функция Плагин(Знач Идентификатор) Экспорт + + ОбъектПлагин = Неопределено; + ИдентификаторБезПрефиксовПодсистемы = ПолучитьИдентификаторБезПрефиксаПодсистемы(Идентификатор, Объект.ИспользуемыйПрефиксПодсистемы); + Если КэшФормПлагинов.Свойство(ИдентификаторБезПрефиксовПодсистемы) Тогда + ОбъектПлагин = КэшФормПлагинов[ИдентификаторБезПрефиксовПодсистемы]; + КонецЕсли; + + Если ОбъектПлагин = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Неизвестный идентификатор плагина: <"+Идентификатор+">'"); + ИначеЕсли ОбъектПлагин = Истина Тогда + // загрузка клиентского плагина "По требованию" + ИмяПлагина = Объект.Плагины[ПолучитьИдентификаторБезПрефиксаПодсистемы(Идентификатор, Объект.ИспользуемыйПрефиксПодсистемы)]; + Попытка + Если Объект.ЭтоВстроеннаяОбработка Тогда + ОбъектПлагин = ПолучитьФорму("Обработка." + ДополнитьИдентификаторПрефиксомПодсистемы(ИмяПлагина, Объект.ИспользуемыйПрефиксПодсистемы) + ".Форма", , ЭтаФорма); + Иначе + ОбъектПлагин = ПолучитьФорму("ВнешняяОбработка." + ИмяПлагина + ".Форма", , ЭтаФорма); + КонецЕсли; + КэшФормПлагинов.Вставить(ИдентификаторБезПрефиксовПодсистемы, ОбъектПлагин); + Исключение + // TODO добавить поведение при отсутствии управляемой формы у плагина + ВызватьИсключение; + КонецПопытки; + + КонецЕсли; + + Возврат ОбъектПлагин; +КонецФункции + +&НаСервере +Процедура ДобавитьКомандыЗагрузчиковНаФорме() + ОписанияЗагрузчиков = ПолучитьОписанияЗагрузчиковНаСервере(); + Для каждого Описание Из ОписанияЗагрузчиков Цикл + Команда = ЭтаФорма.Команды.Добавить(Описание.Идентификатор); + Команда.Действие = "Подключаемый_ИнтерактивныйВызовЗагрузчика"; + ПунктМеню = ЭтаФорма.Элементы.Добавить(Команда.Имя, Тип("КнопкаФормы"), ЭтаФорма.Элементы.ПлагиныЗагрузчики); + ПунктМеню.Заголовок = Описание.Представление; + ПунктМеню.ИмяКоманды = Команда.Имя; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьОписанияПлагиновПоТипу(Знач ТипПлагина) Экспорт + Результат = ПолучитьОписанияПлагиновПоТипуНаСервере(ТипПлагина); + + Возврат Результат; +КонецФункции + +&НаСервере +Функция ПолучитьОписанияПлагиновПоТипуНаСервере(Знач ТипПлагина) + ОбъектНаСервере = РеквизитФормыВЗначение("Объект"); + Результат = ОбъектНаСервере.ПолучитьОписанияПлагиновПоТипу(ТипПлагина); + + Возврат Результат; +КонецФункции + +&НаСервере +Функция ПолучитьОписанияЗагрузчиковНаСервере() + ОбъектНаСервере = РеквизитФормыВЗначение("Объект"); + ОписанияЗагрузчиков = ОбъектНаСервере.ПолучитьОписанияПлагиновПоТипу(ОбъектНаСервере.ТипыПлагинов.Загрузчик); + + Возврат ОписанияЗагрузчиков; +КонецФункции + +&НаКлиенте +Функция ЗагрузчикПоУмолчанию() Экспорт + Возврат Плагин("ЗагрузчикКаталога"); +КонецФункции +// } Плагины + +// { Работа с деревом тестов +&НаКлиенте +Процедура Подключаемый_ИнтерактивныйВызовЗагрузчика(Команда) + ИдентификаторВыбранногоЗагрузчика = Команда.Имя; + Плагин(ИдентификаторВыбранногоЗагрузчика).ВыбратьПутьИнтерактивно(ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьТесты(Знач ИдентификаторВыбранногоЗагрузчика, Знач Путь) Экспорт + ИнициализироватьИндикаторВыполнения(); + + ЭтаФорма.ИдентификаторЗагрузчика = ИдентификаторВыбранногоЗагрузчика; + ФормаЗагрузчика = Плагин(ИдентификаторВыбранногоЗагрузчика); + + Попытка + ЭтаФорма.ДеревоОтЗагрузчика = ФормаЗагрузчика.Загрузить(ЭтаФорма, Путь); + Исключение + Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + КонецПопытки; + + ЭлементыДереваТестов = ЭтаФорма.ДеревоТестов.ПолучитьЭлементы(); + ЭлементыДереваТестов.Очистить(); + ЗаполнитьДеревоТестов(ЭтаФорма.ДеревоТестов, ДеревоОтЗагрузчика); + + КоличествоТестовыхСлучаев = ЗаполнитьКоличествоТестовыхСлучаевПоВсемуДеревуТестов(ЭтаФорма.ДеревоТестов); + РазвернутьСтрокиДерева(КоличествоТестовыхСлучаев < 30); + + СохранитьВИсториюЗагрузкиТестовНаСервере(ИдентификаторВыбранногоЗагрузчика, Путь); + ОбновитьКомандыИсторииЗагрузкиТестов(); +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьДеревоТестов(РодительскаяСтрокаДереваТестов, Знач КонтейнерДереваТестовЗагрузчика) + СтрокаКонтейнера = РодительскаяСтрокаДереваТестов.ПолучитьЭлементы().Добавить(); + СтрокаКонтейнера.Имя = КонтейнерДереваТестовЗагрузчика.Имя; + СтрокаКонтейнера.ИконкаУзла = КонтейнерДереваТестовЗагрузчика.ИконкаУзла; + СтрокаКонтейнера.Ключ = КонтейнерДереваТестовЗагрузчика.Ключ; + + Для каждого ЭлементКоллекции Из КонтейнерДереваТестовЗагрузчика.Строки Цикл + Если ЭлементКоллекции.Тип = Объект.ТипыУзловДереваТестов.Контейнер Тогда + ЗаполнитьДеревоТестов(СтрокаКонтейнера, ЭлементКоллекции); + ИначеЕсли ЭлементКоллекции.Тип = Объект.ТипыУзловДереваТестов.Элемент Тогда + СтрокаЭлемента = СтрокаКонтейнера.ПолучитьЭлементы().Добавить(); + СтрокаЭлемента.Имя = ЭлементКоллекции.Представление; + СтрокаЭлемента.Путь = ЭлементКоллекции.Путь; + СтрокаЭлемента.ИконкаУзла = ЭлементКоллекции.ИконкаУзла; + СтрокаЭлемента.Ключ = ЭлементКоллекции.Ключ; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Функция ЗаполнитьКоличествоТестовыхСлучаевПоВсемуДеревуТестов(РодительскаяСтрока) + КоллекцияСтрок = РодительскаяСтрока.ПолучитьЭлементы(); + Если КоллекцияСтрок.Количество() = 0 Тогда + Возврат 1; + КонецЕсли; + ОбщееКоличествоТестов = 0; + Для каждого СтрокаДерева из КоллекцияСтрок Цикл + КоличествоТестовВСтроке = ЗаполнитьКоличествоТестовыхСлучаевПоВсемуДеревуТестов(СтрокаДерева); + СтрокаДерева.КоличествоТестов = КоличествоТестовВСтроке; + ОбщееКоличествоТестов = ОбщееКоличествоТестов + КоличествоТестовВСтроке; + КонецЦикла; + + Возврат ОбщееКоличествоТестов; +КонецФункции + +&НаКлиенте +Процедура РазвернутьСтрокиДерева(Знач ВключаяПодчиненные = Ложь) + Для каждого СтрокаДерева из ДеревоТестов.ПолучитьЭлементы() Цикл + Идентификатор = СтрокаДерева.ПолучитьИдентификатор(); + Элементы.ДеревоТестов.Развернуть(Идентификатор, ВключаяПодчиненные); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДеревоТестовНаОснованииРезультатовТестирования(УзелДереваТестов, Знач РезультатТестирования) + УзелДереваТестов.Состояние = РезультатТестирования.Состояние; + УзелДереваТестов.ВремяВыполнения = РезультатТестирования.ВремяВыполнения; + Если РезультатТестирования.Тип = Объект.ТипыУзловДереваТестов.Контейнер Тогда + Для каждого ДочернийРезультатТестирования Из РезультатТестирования.Строки Цикл + ДочернийУзелДереваТестов = НайтиСтрокуВДеревеТестовПоКлючу(УзелДереваТестов, ДочернийРезультатТестирования.Ключ); + ОбновитьДеревоТестовНаОснованииРезультатовТестирования(ДочернийУзелДереваТестов, ДочернийРезультатТестирования); + КонецЦикла; + ИначеЕсли РезультатТестирования.Тип = Объект.ТипыУзловДереваТестов.Элемент Тогда + Если РезультатТестирования.Свойство("Сообщение") И ЗначениеЗаполнено(РезультатТестирования.Сообщение) Тогда + Сообщить(РезультатТестирования.Сообщение, СтатусСообщения.ОченьВажное); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция НайтиСтрокуВДеревеТестовПоКлючу(УзелДереваТестов, Знач Ключ) + Результат = Неопределено; + Для каждого ЭлементКоллекции Из УзелДереваТестов.ПолучитьЭлементы() Цикл + Если ЭлементКоллекции.Ключ = Ключ Тогда + Результат = ЭлементКоллекции; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции +// } Работа с деревом тестов + +// { Выполнение тестов +&НаКлиенте +Функция ПолучитьКоличествоТестовыхМетодов(Знач КонтейнерДереваТестов, Знач Фильтр = Неопределено) Экспорт + Возврат ПолучитьКоличествоТестовыхМетодовНаСервере(КонтейнерДереваТестов, Фильтр); +КонецФункции + +&НаСервере +Функция ПолучитьКоличествоТестовыхМетодовНаСервере(Знач КонтейнерДереваТестов, Знач Фильтр) + Возврат ЭтотОбъектНаСервере().ПолучитьКоличествоТестовыхМетодов(КонтейнерДереваТестов, Фильтр); +КонецФункции + +&НаКлиенте +Функция ВыполнитьТесты(Знач Загрузчик, Знач КонтейнерДереваТестов, Знач Фильтр = Неопределено, Знач Подписчик = Неопределено) Экспорт + РезультатТестирования = СоздатьКонтейнерРезультатовТестирования(КонтейнерДереваТестов); + ФильтрДляДочернихУзлов = Неопределено; + Если Не УзелДереваТестовУдовлетворяетФильтру(КонтейнерДереваТестов, Фильтр) Тогда + ФильтрДляДочернихУзлов = Фильтр; + КонецЕсли; + + Если КонтейнерДереваТестов.СлучайныйПорядокВыполнения Тогда + СтрокиКонтейнера = ПеремешатьМассив(КонтейнерДереваТестов.Строки); + Иначе + СтрокиКонтейнера = КонтейнерДереваТестов.Строки; + КонецЕсли; + + Для каждого ДочернийУзел Из СтрокиКонтейнера Цикл + ДочернийРезультатТестирования = Неопределено; + Если ДочернийУзел.Тип = Объект.ТипыУзловДереваТестов.Контейнер Тогда + ДочернийРезультатТестирования = ВыполнитьТесты(Загрузчик, ДочернийУзел, ФильтрДляДочернихУзлов, Подписчик); + ИначеЕсли ДочернийУзел.Тип = Объект.ТипыУзловДереваТестов.Элемент Тогда + Если УзелДереваТестовУдовлетворяетФильтру(ДочернийУзел, ФильтрДляДочернихУзлов) Тогда + КонтекстВыполнения = ПолучитьКонтекстВыполненияПоПути(Загрузчик, ДочернийУзел.Путь); + // Заполняем служебные поля, если они имеются + Если ПеременнаяСодержитСвойство(КонтекстВыполнения, "ИспользуемыйПрефиксПодсистемы") Тогда + КонтекстВыполнения.ИспользуемыйПрефиксПодсистемы = Объект.ИспользуемыйПрефиксПодсистемы; + КонецЕсли; + Объект.ТекущийКонтейнер = КонтейнерДереваТестов; + ДочернийРезультатТестирования = ВыполнитьТестовыйМетод(КонтекстВыполнения, ДочернийУзел); + КонтейнерДереваТестов.Контекст = Объект.ТекущийКонтейнер.Контекст; + + Если Подписчик <> Неопределено Тогда + ОповеститьОСобытии(Подписчик, Объект.ВозможныеСобытия.ВыполненТестовыйМетод, ДочернийРезультатТестирования); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ДочернийРезультатТестирования <> Неопределено Тогда + РезультатТестирования.Строки.Добавить(ДочернийРезультатТестирования); + РезультатТестирования.Состояние = ВыбратьХудшееСостояниеВыполненияТестов(РезультатТестирования.Состояние, ДочернийРезультатТестирования.Состояние); + ЗаполнитьДанныеСтатистики(РезультатТестирования, ДочернийРезультатТестирования); + Если Не КонтейнерДереваТестов.СлучайныйПорядокВыполнения И ДочернийРезультатТестирования.Состояние <> Объект.СостоянияТестов.Пройден Тогда + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если РезультатТестирования.Строки.Количество() = 0 Тогда + РезультатТестирования = Неопределено; + КонецЕсли; + + Возврат РезультатТестирования; +КонецФункции + +&НаКлиенте +Функция УзелДереваТестовУдовлетворяетФильтру(Знач УзелДереваТестов, Знач Фильтр) + Возврат (Фильтр = Неопределено) Или (Фильтр.Найти(УзелДереваТестов.Ключ) <> Неопределено); +КонецФункции + +&НаКлиенте +Функция ПолучитьКонтекстВыполненияПоПути(Знач Загрузчик, Знач Путь) + КонтекстВыполнения = Загрузчик.ПолучитьКонтекстПоПути(ЭтаФорма, Путь); + + Возврат КонтекстВыполнения; +КонецФункции + +&НаКлиенте +Функция ЭтоСерверныйКонтекстВыполнения(Знач КонтекстВыполнения) + Результат = ТипЗнч(КонтекстВыполнения) = Тип("ФиксированнаяСтруктура"); + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура ЗаполнитьДанныеСтатистики(РезультатТестирования, Знач ДочернийРезультатТестирования) + Если ДочернийРезультатТестирования.Тип = Объект.ТипыУзловДереваТестов.Контейнер Тогда + РезультатТестирования.КоличествоТестов = РезультатТестирования.КоличествоТестов + ДочернийРезультатТестирования.КоличествоТестов; + РезультатТестирования.КоличествоСломанныхТестов = РезультатТестирования.КоличествоСломанныхТестов + ДочернийРезультатТестирования.КоличествоСломанныхТестов; + РезультатТестирования.КоличествоНеРеализованныхТестов = РезультатТестирования.КоличествоНеРеализованныхТестов + ДочернийРезультатТестирования.КоличествоНеРеализованныхТестов; + РезультатТестирования.КоличествоОшибочныхТестов = РезультатТестирования.КоличествоОшибочныхТестов + ДочернийРезультатТестирования.КоличествоОшибочныхТестов; + + ИначеЕсли ДочернийРезультатТестирования.Тип = Объект.ТипыУзловДереваТестов.Элемент Тогда + РезультатТестирования.КоличествоТестов = РезультатТестирования.КоличествоТестов + 1; + Если ДочернийРезультатТестирования.Состояние = Объект.СостоянияТестов.Сломан Тогда + РезультатТестирования.КоличествоСломанныхТестов = РезультатТестирования.КоличествоСломанныхТестов + 1; + ИначеЕсли ДочернийРезультатТестирования.Состояние = Объект.СостоянияТестов.НеРеализован Тогда + РезультатТестирования.КоличествоНеРеализованныхТестов = РезультатТестирования.КоличествоНеРеализованныхТестов + 1; + ИначеЕсли ДочернийРезультатТестирования.Состояние = Объект.СостоянияТестов.НеизвестнаяОшибка Тогда + РезультатТестирования.КоличествоОшибочныхТестов = РезультатТестирования.КоличествоОшибочныхТестов + 1; + КонецЕсли; + КонецЕсли; + РезультатТестирования.ВремяВыполнения = РезультатТестирования.ВремяВыполнения + ДочернийРезультатТестирования.ВремяВыполнения; +КонецПроцедуры + +&НаКлиенте +Функция ВыбратьХудшееСостояниеВыполненияТестов(Знач Состояние1, Знач Состояние2) + Возврат Макс(Состояние1, Состояние2); +КонецФункции + +&НаКлиенте +Функция ВыполнитьТестовыйМетод(Знач КонтекстВыполнения, Знач ЭлементДереваТестов) + Перем РезультатТестирования; + + Если ЭтоСерверныйКонтекстВыполнения(КонтекстВыполнения) Тогда + РезультатТестирования = ВыделитьТестовыйМетодНаСервереСОбработкойОшибокПередачиМеждуНаКлиентомИСервером(КонтекстВыполнения, ЭлементДереваТестов); + Иначе + РезультатТестирования = ВыполнитьТестовыйМетодНаКлиенте(КонтекстВыполнения, ЭлементДереваТестов); + КонецЕсли; + + Возврат РезультатТестирования; +КонецФункции + +&НаКлиенте +Функция ВыполнитьТестовыйМетодНаКлиенте(Знач КонтекстВыполнения, Знач ЭлементДереваТестов) Экспорт + + РезультатТестирования = СоздатьЭлементРезультатовТестирования(ЭлементДереваТестов); + НачалоВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах(); + + Если ВыполнитьИнициализациюКонтекста(КонтекстВыполнения, РезультатТестирования) Тогда + + Попытка + ВыполнитьНеобязательнуюПроцедуруТестовогоСлучая(КонтекстВыполнения, ЭлементДереваТестов.ПередЗапускомТеста); + ВыполнитьПроцедуруКонтекста(КонтекстВыполнения, ЭлементДереваТестов.ИмяМетода, ЭлементДереваТестов.Параметры); + + РезультатТестирования.Состояние = Объект.СостоянияТестов.Пройден; + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + КраткийТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + Если ЕстьОшибка_МетодОбъектаНеОбнаружен(КраткийТекстОшибки, ЭлементДереваТестов.ИмяМетода) Тогда + РезультатТестирования.Состояние = Объект.СостоянияТестов.НеРеализован; + Сообщение = НСтр("ru = 'Отсутствует реализация тестового метода (%1).'"); + РезультатТестирования.Сообщение = СтрЗаменить(Сообщение, "%1", ЭлементДереваТестов.ИмяМетода); + Иначе + РезультатТестирования.Сообщение = ТекстОшибки; + Если ЭтоОшибкаПроверки(КраткийТекстОшибки) Тогда + РезультатТестирования.Состояние = Объект.СостоянияТестов.Сломан; + ИначеЕсли ЭтоПропущенныйТест(КраткийТекстОшибки) Тогда + РезультатТестирования.Состояние = Объект.СостоянияТестов.НеРеализован; + Иначе + РезультатТестирования.Состояние = Объект.СостоянияТестов.НеизвестнаяОшибка; + КонецЕсли; + КонецЕсли; + КонецПопытки; + Попытка + ВыполнитьНеобязательнуюПроцедуруТестовогоСлучая(КонтекстВыполнения, ЭлементДереваТестов.ПослеЗапускаТеста); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + РезультатТестирования.Сообщение = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке); + + КраткийТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + Если ЭтоОшибкаПроверки(КраткийТекстОшибки) Тогда + РезультатТестирования.Состояние = Объект.СостоянияТестов.Сломан; + Иначе + РезультатТестирования.Состояние = Объект.СостоянияТестов.НеизвестнаяОшибка; + КонецЕсли; + + КонецПопытки; + КонецЕсли; + + ОкончаниеВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах(); + РезультатТестирования.ВремяВыполнения = (ОкончаниеВыполнения - НачалоВыполнения) / 1000; + + Возврат РезультатТестирования; +КонецФункции + +&НаКлиенте +Функция ВыполнитьИнициализациюКонтекста(КонтекстВыполнения, РезультатТестирования) + Попытка + КонтекстВыполнения.Инициализация(ЭтаФорма); + Возврат Истина; + Исключение + РезультатТестирования.Сообщение = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + РезультатТестирования.Состояние = Объект.СостоянияТестов.НеизвестнаяОшибка; + КонецПопытки; + Возврат Ложь; +КонецФункции + +&НаКлиенте +Функция ВыделитьТестовыйМетодНаСервереСОбработкойОшибокПередачиМеждуНаКлиентомИСервером(Знач КонтекстВыполнения, Знач ЭлементДереваТестов) + + Перем ПолныйТекстОшибки, РезультатТестирования; + + Попытка + РезультатТестирования = ВыполнитьТестовыйМетодНаСервере(КонтекстВыполнения, ЭлементДереваТестов); + Исключение + ПолныйТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + РезультатТестирования = СоздатьЭлементРезультатовТестирования(ЭлементДереваТестов); + РезультатТестирования.Сообщение = ПолныйТекстОшибки; + РезультатТестирования.Состояние = Объект.СостоянияТестов.НеизвестнаяОшибка; + КонецПопытки; + + Возврат РезультатТестирования; +КонецФункции + +&НаСервере +Функция ВыполнитьТестовыйМетодНаСервере(Знач ОписаниеКонтекста, Знач ЭлементДереваТестов) + ОбъектНаСервере = ЭтотОбъектНаСервере(); + + Если ОписаниеКонтекста.ЭтоВнутренняяОбработка Тогда + ЭтоОтчет = (Метаданные.Отчеты.Найти(ОписаниеКонтекста.Идентификатор) <> Неопределено); + Иначе + ФайлОбработки = Новый Файл(ЭлементДереваТестов.Путь); + ЭтоОтчет = (НРег(ФайлОбработки.Расширение) = ".erf"); + КонецЕсли; + + КонтекстВыполнения = СоздатьОбъектПлагина(ОписаниеКонтекста.Идентификатор, ОписаниеКонтекста.ЭтоВнутренняяОбработка, ЭтоОтчет); + КонтекстВыполнения.Инициализация(ОбъектНаСервере); + + // Заполняем служебные поля, если они имеются + ЗаполнитьСвойствоПриНаличии(КонтекстВыполнения, "ПутьКФайлуПолный", ЭлементДереваТестов.Путь); + + РезультатТестирования = ОбъектНаСервере.ВыполнитьТестовыйМетод(КонтекстВыполнения, ЭлементДереваТестов); + + Возврат РезультатТестирования; +КонецФункции + +&НаКлиенте +Процедура ВыполнитьНеобязательнуюПроцедуруТестовогоСлучая(Знач КонтекстВыполнения, Знач ИмяПроцедуры) + Попытка + ВыполнитьПроцедуруКонтекста(КонтекстВыполнения, ИмяПроцедуры); + Исключение + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Если Не ЕстьОшибка_МетодОбъектаНеОбнаружен(ТекстОшибки, ИмяПроцедуры) Тогда + ВызватьИсключение; + КонецЕсли; + КонецПопытки; +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьПроцедуруКонтекста(Знач КонтекстВыполнения, Знач ПроцедураКонтекста, Знач Параметры = Неопределено) + СтрокаПараметров = СформироватьСтрокуПараметров(Параметры); + ИcполняемыйКод = "КонтекстВыполнения." + ПроцедураКонтекста + "(" + СтрокаПараметров + ");"; + Выполнить(ИcполняемыйКод); +КонецПроцедуры + +&НаКлиенте +Функция СформироватьСтрокуПараметров(Знач Параметры) + СтрокаПараметров = ""; + Если ТипЗнч(Параметры) = Тип("Массив") Тогда + Для Сч = 0 По Параметры.Количество() - 1 Цикл + СтрокаПараметров = СтрокаПараметров + ",Параметры[" + Формат(Сч, "ЧН=0; ЧГ=") + "]"; + КонецЦикла; + КонецЕсли; + + Возврат Сред(СтрокаПараметров, 2); +КонецФункции + +&НаКлиенте +Функция ЕстьОшибка_МетодОбъектаНеОбнаружен(Знач ТекстОшибки, Знач ИмяМетода) + Результат = Ложь; + Если Найти(ТекстОшибки, "Метод объекта не обнаружен (" + ИмяМетода + ")") > 0 + ИЛИ Найти(ТекстОшибки, "Object method not found (" + ИмяМетода + ")") > 0 Тогда + Результат = Истина; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ЭтоОшибкаПроверки(ТекстОшибки) + + Возврат Найти(ТекстОшибки, "["+ Объект.СтатусыРезультатаТестирования.ОшибкаПроверки + "]") = 1; + +КонецФункции + +Функция ЭтоПропущенныйТест(ТекстОшибки) + + Возврат Найти(ТекстОшибки, "["+ Объект.СтатусыРезультатаТестирования.ТестПропущен + "]") > 0; + +КонецФункции + +// } Выполнение тестов + +// { Генерация результатов тестирования +&НаКлиенте +Функция СоздатьКонтейнерРезультатовТестирования(Знач КонтейнерДереваТестов) + ГруппаРезультатовТестирования = Новый Структура; + ГруппаРезультатовТестирования.Вставить("Ключ", КонтейнерДереваТестов.Ключ); + ГруппаРезультатовТестирования.Вставить("Тип", КонтейнерДереваТестов.Тип); + ГруппаРезультатовТестирования.Вставить("Имя", КонтейнерДереваТестов.Имя); + ГруппаРезультатовТестирования.Вставить("Состояние", Объект.СостоянияТестов.НеВыполнен); + ГруппаРезультатовТестирования.Вставить("КоличествоТестов", 0); + ГруппаРезультатовТестирования.Вставить("КоличествоСломанныхТестов", 0); + ГруппаРезультатовТестирования.Вставить("КоличествоОшибочныхТестов", 0); + ГруппаРезультатовТестирования.Вставить("КоличествоНеРеализованныхТестов", 0); + ГруппаРезультатовТестирования.Вставить("ВремяВыполнения", 0); + ГруппаРезультатовТестирования.Вставить("Строки", Новый Массив); + + Возврат ГруппаРезультатовТестирования; +КонецФункции + +&НаКлиенте +Функция СоздатьЭлементРезультатовТестирования(Знач ЭлементДереваТестов) + РезультатТестирования = Новый Структура; + РезультатТестирования.Вставить("Ключ", ЭлементДереваТестов.Ключ); + РезультатТестирования.Вставить("Тип", ЭлементДереваТестов.Тип); + РезультатТестирования.Вставить("Путь", ЭлементДереваТестов.Путь); + РезультатТестирования.Вставить("ИмяМетода", ЭлементДереваТестов.ИмяМетода); + РезультатТестирования.Вставить("Представление", ЭлементДереваТестов.Представление); + РезультатТестирования.Вставить("Параметры", ЭлементДереваТестов.Параметры); + РезультатТестирования.Вставить("Состояние", Объект.СостоянияТестов.НеВыполнен); + РезультатТестирования.Вставить("ВремяВыполнения", 0); + РезультатТестирования.Вставить("Сообщение", ""); + + Возврат РезультатТестирования; +КонецФункции +// } Генерация результатов тестирования + +// { История загрузки тестов +&НаСервере +Процедура СохранитьВИсториюЗагрузкиТестовНаСервере(Знач ИдентификаторЗагрузчика, Знач Путь) + ЭтотОбъектНаСервере = ЭтотОбъектНаСервере(); + ЭтотОбъектНаСервере.СохранитьВИсториюЗагрузкиТестов(ИдентификаторЗагрузчика, Путь); + ЗначениеВРеквизитФормы(ЭтотОбъектНаСервере, "Объект"); +КонецПроцедуры + +&НаСервере +Процедура ОбновитьКомандыИсторииЗагрузкиТестов() + ИсторияЗагрузкиТестов = Объект.Настройки.ИсторияЗагрузкиТестов; + ПодменюИсторияЗагрузкиТестов = Элементы.ПодменюИсторияЗагрузкиТестов; + Для Сч = 0 По ИсторияЗагрузкиТестов.Количество() - 1 Цикл + ИмяКоманды = "История_" + Сч; + НайденнаяКоманда = Команды.Найти(ИмяКоманды); + Если НайденнаяКоманда = Неопределено Тогда + НоваяКоманда = Команды.Добавить(ИмяКоманды); + НоваяКоманда.Действие = "Подключаемый_ЗагрузитьТестыИзИстории"; + ПунктМеню = Элементы.Добавить(НоваяКоманда.Имя, Тип("КнопкаФормы"), ПодменюИсторияЗагрузкиТестов); + ПунктМеню.ИмяКоманды = НоваяКоманда.Имя; + Иначе + ПунктМеню = Элементы.Найти(ИмяКоманды); + КонецЕсли; + ЭлементИстории = ИсторияЗагрузкиТестов[Сч]; + ПунктМеню.Заголовок = ЭлементИстории.ИдентификаторЗагрузчика + ": " + ЭлементИстории.Путь; + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ЗагрузитьТестыИзИстории(Команда) + ИндексИстории = Число(Сред(Команда.Имя, Найти(Команда.Имя, "_") + 1)); + ИсторияЗагрузкиТестов = Объект.Настройки.ИсторияЗагрузкиТестов; + ЭлементИстории = ИсторияЗагрузкиТестов[ИндексИстории]; + ЗагрузитьТесты(ЭлементИстории.ИдентификаторЗагрузчика, ЭлементИстории.Путь); +КонецПроцедуры +// } История загрузки тестов + +// { Пакетный запуск +&НаКлиенте +Процедура ВыполнитьПакетныйЗапуск(Знач ПараметрЗапуска) + Перем РезультатыТестирования; + + ПарсерКоманднойСтроки = ЭтаФорма.Плагин("ПарсерКоманднойСтроки"); + ПараметрыЗапуска = ПарсерКоманднойСтроки.Разобрать(ПараметрЗапуска); + + Параметры_xddRun = Неопределено; + Если ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddRun, Параметры_xddRun) Тогда + РезультатыТестирования = ЗагрузитьИВыполнитьТесты_ПакетныйРежим(Параметры_xddRun); + КонецЕсли; + + Параметры_xddReport = Неопределено; + Если ЗначениеЗаполнено(РезультатыТестирования) И ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddReport, Параметры_xddReport) Тогда + СформироватьОтчетОТестированииИЭкспортировать_ПакетныйРежим(Параметры_xddReport, РезультатыТестирования); + КонецЕсли; + + Если ПараметрыЗапуска.Свойство(ПарсерКоманднойСтроки.Объект.ВозможныеКлючи.xddShutdown) Тогда + ЗавершитьРаботуСистемы(Ложь); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ЗагрузитьИВыполнитьТесты_ПакетныйРежим(Знач Параметры_xddRun) + Попытка + ИдентификаторЗагрузчика = Параметры_xddRun[0]; + Загрузчик = ЭтаФорма.Плагин(ИдентификаторЗагрузчика); + + ПутьКТестам = Параметры_xddRun[1]; + ДеревоТестовОтЗагрузчика = Загрузчик.Загрузить(ЭтаФорма, ПутьКТестам); + + РезультатыТестирования = ЭтаФорма.ВыполнитьТесты(Загрузчик, ДеревоТестовОтЗагрузчика); + Исключение + ОписаниеОшибки = "Ошибка загрузки и выполнения тестов в пакетном режиме + |" + ОписаниеОшибки(); + ЗафиксироватьОшибкуВЖурналеРегистрации(ОписаниеОшибки); + КонецПопытки; + + Возврат РезультатыТестирования; +КонецФункции + +&НаКлиенте +Процедура СформироватьОтчетОТестированииИЭкспортировать_ПакетныйРежим(Знач Параметры_xddReport, Знач РезультатыТестирования) + Попытка + ИдентификаторГенератораОтчета = Параметры_xddReport[0]; + ГенераторОтчета = ЭтаФорма.Плагин(ИдентификаторГенератораОтчета); + + Отчет = ГенераторОтчета.СоздатьОтчет(ЭтаФорма, РезультатыТестирования); + + ПутьКОтчету = Параметры_xddReport[1]; + ГенераторОтчета.Экспортировать(Отчет, ПутьКОтчету); + Исключение + ОписаниеОшибки = "Ошибка формирования и экспорта отчета о тестировании в пакетном режиме + |" + ОписаниеОшибки(); + ЗафиксироватьОшибкуВЖурналеРегистрации(ОписаниеОшибки); + КонецПопытки; +КонецПроцедуры + +&НаСервере +Процедура ЗафиксироватьОшибкуВЖурналеРегистрации(Знач ОписаниеОшибки) + ЗаписьЖурналаРегистрации(ЭтотОбъектНаСервере().Метаданные().Имя, УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки); +КонецПроцедуры +// } Пакетный запуск + +// { Контекст +&НаКлиенте +Процедура СохранитьКонтекст(Знач Контекст) Экспорт + Если Объект.ТекущийКонтейнер.СлучайныйПорядокВыполнения Тогда + ВызватьИсключение Объект.ВозможныеИсключения.СохранятьКонтекстТолькоВСтрогомРежиме; + КонецЕсли; + Объект.ТекущийКонтейнер.Контекст = Контекст; +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьКонтекст() Экспорт + Если Объект.ТекущийКонтейнер.СлучайныйПорядокВыполнения Тогда + ВызватьИсключение Объект.ВозможныеИсключения.ПолучатьКонтекстТолькоВСтрогомРежиме; + КонецЕсли; + + Возврат Объект.ТекущийКонтейнер.Контекст; +КонецФункции +// } Контекст + +Процедура ВызватьОшибкуПроверки(СообщениеОшибки = "") Экспорт + + Префикс = "["+ Объект.СтатусыРезультатаТестирования.ОшибкаПроверки + "]"; + ВызватьИсключение Префикс + " " + СообщениеОшибки; + +КонецПроцедуры + +Процедура ПропуститьТест(Знач Сообщение = "") Экспорт + + Префикс = "[" + Объект.СтатусыРезультатаТестирования.ТестПропущен + "]"; + Если ПустаяСтрока(Сообщение) Тогда + Сообщение = НСтр("ru = 'Тест пропущен'"); + КонецЕсли; + ВызватьИсключение Префикс + " " + Сообщение; + +КонецПроцедуры + +// Выводит сообщение. В тестах ВСЕГДА должна использоваться ВМЕСТО метода Сообщить(). +// +Функция ВывестиСообщение(ТекстСообщения, Статус=Неопределено) Экспорт + + Сообщить(ТекстСообщения, Статус); + +КонецФункции + +// { Внешние интерфейсные инструменты +&НаКлиенте +Процедура ОткрытьИнструмент(Знач ИмяИнструмента, Знач ПутьИнструмента = "", Знач ИмяФормы = "Форма") + Перем АдресХранилища; + + // Для встроенного в состав конфигурации браузера тестов + // инструменты находятся также в составке конфигурации + Если Объект.ЭтоВстроеннаяОбработка Тогда + // Преобразование имени инструмента к имени обработки + Если ИмяИнструмента = "UILogToScript" Тогда + ИмяИнструмента = "ПреобразованиеЖурналаДействийПользователя"; + КонецЕсли; + ИмяИнструмента = ДополнитьИдентификаторПрефиксомПодсистемы(ИмяИнструмента, Объект.ИспользуемыйПрефиксПодсистемы); + ФормаИнструмента = ПолучитьФорму("Обработка." + ИмяИнструмента + "." + ИмяФормы); + ФормаИнструмента.Открыть(); + ФормаИнструмента = Неопределено; + + Иначе + Если Не ПустаяСтрока(ПутьИнструмента) Тогда + ПутьКВнешнимИнструментам = ПутьИнструмента + "\"; + Иначе + ПутьКВнешнимИнструментам = ПолучитьПутьКВнешнимИнструментам(); + КонецЕсли; + ПутьИнструмента = ПутьКВнешнимИнструментам + ИмяИнструмента + ".epf"; + ФайлИнструмента = Новый Файл(ПутьИнструмента); + Если Не ФайлИнструмента.Существует() Тогда + Сообщить("Инструмент <" + ИмяИнструмента + "> не найден в каталоге <" + ФайлИнструмента.Путь + ">"); + Возврат; + КонецЕсли; + + Оповещение = Новый ОписаниеОповещения("ОткрытьИнструментЗавершение", ЭтаФорма, Новый Структура("ИмяИнструмента, ИмяФормыИнструмента", ИмяИнструмента, ИмяФормы)); + НачатьПомещениеФайла(Оповещение, АдресХранилища, ФайлИнструмента.ПолноеИмя , Ложь, ЭтаФорма.УникальныйИдентификатор); + + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьПутьКПлагинам() + // Для встроенного в состав конфигурации браузера тестов + // используемое имя файла не используется + Если НЕ Объект.ЭтоВстроеннаяОбработка Тогда + ФайлЯдра = Новый Файл(ЭтаФорма["ИспользуемоеИмяФайла"]); + Результат = ФайлЯдра.Путь + "Plugins\"; + КонецЕсли; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция ПолучитьПутьКВнешнимИнструментам() + ФайлЯдра = Новый Файл(ЭтаФорма.ИспользуемоеИмяФайла); + Результат = ФайлЯдра.Путь + "Utils\"; + + Возврат Результат; +КонецФункции +// } Внешние интерфейстные инструменты + +// { Helpers +&НаКлиенте +Процедура ПодключитьВнешнююОбработку(ФайлОбработки) Экспорт + Перем АдресХранилища; + + Если ПодключенныеВнешниеОбработки.Получить(ФайлОбработки.ИмяБезРасширения) = Неопределено Тогда + ЭтоОтчет = (НРег(ФайлОбработки.Расширение) = ".erf"); + Оп = Новый ОписаниеОповещения("ПодключитьВнешнююОбработкуЗавершение", ЭтаФорма, Новый Структура("ФайлОбработки, ЭтоОтчет", ФайлОбработки, ЭтоОтчет)); + НачатьПомещениеФайла(Оп, АдресХранилища, ФайлОбработки.ПолноеИмя , Ложь, ЭтаФорма.УникальныйИдентификатор); + КонецЕсли; +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПодключитьФайлОбработкиНаСервере(Знач АдресХранилища, Знач ИдентификаторОбработки, ЭтоОтчет = Ложь) + Если ЭтоОтчет = Истина Тогда + ВнешниеОтчеты.Подключить(АдресХранилища, ИдентификаторОбработки, Ложь); + Иначе + ВнешниеОбработки.Подключить(АдресХранилища, ИдентификаторОбработки, Ложь); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьОписаниеКонтекстаВыполнения(Знач Идентификатор, Знач ЭтоВнутренняяОбработка = Ложь) Экспорт + ОписаниеКонтекстаВыполнения = Новый Структура("Идентификатор, ЭтоВнутренняяОбработка", Идентификатор, ЭтоВнутренняяОбработка); + + Возврат Новый ФиксированнаяСтруктура(ОписаниеКонтекстаВыполнения); +КонецФункции + +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции + +&НаКлиенте +Процедура ИнициализироватьИндикаторВыполнения(Знач КоличествоТестовыхМетодов = 0) + Элементы.ИндикаторВыполнения.МаксимальноеЗначение = КоличествоТестовыхМетодов; + ИндикаторВыполнения = 0; + Элементы.ИндикаторВыполнения.ЦветРамки = Новый Цвет(0, 174, 0); // Зеленый +КонецПроцедуры + +&НаКлиенте +Процедура ОповеститьОСобытии(Знач Подписчик, Знач Событие, Знач ПараметрыСобытия) + Выполнить("Подписчик.ОбработатьСобытиеВыполненияТестов(Событие, ПараметрыСобытия);"); +КонецПроцедуры + +&НаКлиенте +Функция ПеремешатьМассив(Знач ИсходныйМассив) Экспорт + Результат = Новый Массив; + Для Каждого Элемент Из ИсходныйМассив Цикл + Результат.Добавить(Элемент); + КонецЦикла; + + // алгоритм перемешивания взят из книги Кнута "Искусство программирования" т.2 + ГСЧ = Новый ГенераторСлучайныхЧисел(); + ПоследнийИндекс = Результат.ВГраница(); + Для Индекс = 1 По ПоследнийИндекс Цикл + ТекущийИндекс = ПоследнийИндекс - Индекс + 1; + НовыйИндекс = ГСЧ.СлучайноеЧисло(0, ТекущийИндекс); + Если НовыйИндекс <> ТекущийИндекс Тогда + Значение = Результат[НовыйИндекс]; + Результат[НовыйИндекс] = Результат[ТекущийИндекс]; + Результат[ТекущийИндекс] = Значение; + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция НайтиРезультатТестированияПоИдентификатору(Знач КонтейнерРезультатовТестирования, Знач ИдентификаторТеста, Знач ВключатьПодчиненные = Ложь) Экспорт + Результат = НайтиРезультатТестированияПоИдентификатору_НаСервере(КонтейнерРезультатовТестирования, ИдентификаторТеста, ВключатьПодчиненные); + + Возврат Результат; +КонецФункции + +&НаСервере +Функция НайтиРезультатТестированияПоИдентификатору_НаСервере(Знач КонтейнерРезультатовТестирования, Знач ИдентификаторТеста, Знач ВключатьПодчиненные) Экспорт + Результат = ЭтотОбъектНаСервере().НайтиРезультатТестированияПоИдентификатору(КонтейнерРезультатовТестирования, ИдентификаторТеста, ВключатьПодчиненные); + + Возврат Результат; +КонецФункции + +&НаКлиенте +Процедура СброситьПодключенныеВнешниеОбработки() + ПодключенныеВнешниеОбработки = Новый Соответствие; +КонецПроцедуры + +&НаКлиенте +Функция ПараметрыМетода(Знач Парам1, Знач Парам2 = Неопределено, Знач Парам3 = Неопределено, Знач Парам4 = Неопределено, Знач Парам5 = Неопределено, Знач Парам6 = Неопределено, Знач Парам7 = Неопределено, Знач Парам8 = Неопределено, Знач Парам9 = Неопределено) Экспорт + ВсеПараметры = Новый Массив; + ВсеПараметры.Добавить(Парам1); + ВсеПараметры.Добавить(Парам2); + ВсеПараметры.Добавить(Парам3); + ВсеПараметры.Добавить(Парам4); + ВсеПараметры.Добавить(Парам5); + ВсеПараметры.Добавить(Парам6); + ВсеПараметры.Добавить(Парам7); + ВсеПараметры.Добавить(Парам8); + ВсеПараметры.Добавить(Парам9); + + ИндексСПоследнимПараметром = 0; + Для Сч = 0 По ВсеПараметры.ВГраница() Цикл + Индекс = ВсеПараметры.ВГраница() - Сч; + Если ВсеПараметры[Индекс] <> Неопределено Тогда + ИндексСПоследнимПараметром = Индекс; + Прервать; + КонецЕсли; + КонецЦикла; + + ПараметрыМетода = Новый Массив; + Для Сч = 0 По ИндексСПоследнимПараметром Цикл + ПараметрыМетода.Добавить(ВсеПараметры[Сч]); + КонецЦикла; + + Возврат ПараметрыМетода; +КонецФункции + +&НаСервере +Процедура ЗагрузитьВстроенныеПлагины() + + ОбъектНаСервере = ЭтотОбъектНаСервере(); + Объект.Плагины = ОбъектНаСервере.ПолучитьПлагины(); + +КонецПроцедуры + +// } Helpers + +// { Подсистема конфигурации xUnitFor1C + +// Универсальная функция для проверки наличия +// свойств у значения любого типа данных +// Переменные: +// 1. Переменная - переменная любого типа, +// для которой необходимо проверить наличие свойства +// 2. ИмяСвойства - переменная типа "Строка", +// содержащая искомое свойства +// +&НаКлиентеНаСервереБезКонтекста +Функция ПеременнаяСодержитСвойство(Переменная, ИмяСвойства) + // Инициализируем структуру для теста + // с ключом (значение переменной "ИмяСвойства") + // и значением произвольного GUID'а + GUIDПроверка = Новый УникальныйИдентификатор; + СтруктураПроверка = Новый Структура; + СтруктураПроверка.Вставить(ИмяСвойства, GUIDПроверка); + // Заполняем созданную структуру из переданного + // значения переменной + ЗаполнитьЗначенияСвойств(СтруктураПроверка, Переменная); + // Если значение для свойства структуры осталось + // NULL, то искомое свойство не найдено, + // и наоборот. + Если СтруктураПроверка[ИмяСвойства] = GUIDПроверка Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ЗаполнитьСвойствоПриНаличии(ОбъектЗаполнения, ИмяСвойство, ЗначениеСвойства) + + Если ПеременнаяСодержитСвойство(ОбъектЗаполнения, ИмяСвойство) Тогда + ОбъектЗаполнения[ИмяСвойство] = ЗначениеСвойства; + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция ДополнитьИдентификаторПрефиксомПодсистемы(Знач Идентификатор, Знач ИспользуемыйПрефиксПодсистемы) Экспорт + + Если НЕ ЗначениеЗаполнено(ИспользуемыйПрефиксПодсистемы) Тогда + Возврат Идентификатор; + КонецЕсли; + + ДлинаПрефикса = СтрДлина(ИспользуемыйПрефиксПодсистемы); + Если Лев(Идентификатор, ДлинаПрефикса) = ИспользуемыйПрефиксПодсистемы Тогда + Возврат Идентификатор; + Иначе + Возврат ИспользуемыйПрефиксПодсистемы + Идентификатор; + КонецЕсли; + +КонецФункции +&НаКлиенте +Функция ПолучитьИдентификаторБезПрефиксаПодсистемы(Знач Идентификатор, Знач ИспользуемыйПрефиксПодсистемы) Экспорт + + Если НЕ ЗначениеЗаполнено(ИспользуемыйПрефиксПодсистемы) Тогда + Возврат Идентификатор; + КонецЕсли; + + ДлинаПрефикса = СтрДлина(ИспользуемыйПрефиксПодсистемы); + Если Лев(Идентификатор, ДлинаПрефикса) = ИспользуемыйПрефиксПодсистемы Тогда + Возврат Прав(Идентификатор, СтрДлина(Идентификатор) - ДлинаПрефикса); + Иначе + Возврат Идентификатор; + КонецЕсли; + +КонецФункции + +&НаСервере +Функция СоздатьОбъектПлагина(Идентификатор, ВстроенаВКонфигурацию = Ложь, ЭтоОтчет = Ложь) + + ОбъектНаСервере = ЭтотОбъектНаСервере(); + + Возврат ОбъектНаСервере.СоздатьОбъектПлагина(Идентификатор, ВстроенаВКонфигурацию, ЭтоОтчет); + +КонецФункции + +// } Подсистема конфигурации xUnitFor1C + +// { Вспомогательные методы + +&НаКлиенте +Процедура ПодключитьВнешнююОбработкуЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт + + + ФайлОбработки = ДополнительныеПараметры.ФайлОбработки; + ЭтоОтчет = ДополнительныеПараметры.ЭтоОтчет; + + ПодключитьФайлОбработкиНаСервере(Адрес, ФайлОбработки.ИмяБезРасширения, ЭтоОтчет); + + ПодключенныеВнешниеОбработки.Вставить(ФайлОбработки.ИмяБезРасширения, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьИнструментЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт + + ИмяИнструмента = ДополнительныеПараметры.ИмяИнструмента; + ИмяФормыИнструмента = ДополнительныеПараметры.ИмяФормыИнструмента; + + ПодключитьФайлОбработкиНаСервере(Адрес, ИмяИнструмента); + + ФормаИнструмента = ПолучитьФорму("ВнешняяОбработка." + ИмяИнструмента + "." + ИмяФормыИнструмента); + Если ФормаИнструмента = Неопределено Тогда + Сообщить("Инструмент <" + ИмяИнструмента + ">: не удалось получить основную форму!"); + Возврат; + КонецЕсли; + + ФормаИнструмента.Открыть(); + ФормаИнструмента = Неопределено; + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаПерезагрузитьФормуЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт + + ПодключитьФайлОбработкиНаСервере(Адрес, Неопределено); + + НоваяФорма = ПолучитьФорму(ЭтаФорма.ИмяФормы,,,Истина); + НоваяФорма.ИспользуемоеИмяФайла = ЭтаФорма.ИспользуемоеИмяФайла; + НоваяФорма.Открыть(); + +КонецПроцедуры + +// } Вспомогательные методы \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..c10139354 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Ordinary + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" new file mode 100644 index 000000000..c1a714472 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/xddTestRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" differ diff --git a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat.xml b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat.xml new file mode 100644 index 000000000..310e8a541 --- /dev/null +++ b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat.xml @@ -0,0 +1,42 @@ + + + + + + 708e0251-9a7c-4ba1-bf67-b81769161a18 + 2e229ff5-a332-4c33-9674-0474dd90fb2d + + + f94f5915-9170-4dd1-a719-56545bf9b594 + 9f6c7f4c-44ee-47d9-84a2-bbc161f33db5 + + + + xddTestsConvertIntoRebornFormat + + + ru + Конвертация тестов xUnitFor1C в версию4 из формата версии 3 + + + + false + DataProcessor.xddTestsConvertIntoRebornFormat.Form.Форма + DataProcessor.xddTestsConvertIntoRebornFormat.Form.УправляемаяФорма + false + + + + +
Форма
+
УправляемаяФорма
+ + + + + + + +
+
+
\ No newline at end of file diff --git a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Ext/ObjectModule.bsl b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Ext/ObjectModule.bsl new file mode 100644 index 000000000..1a93dbf9c --- /dev/null +++ b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Ext/ObjectModule.bsl @@ -0,0 +1,790 @@ +//Перем КонтекстЯдра; +Перем Ожидаем; +Перем ВременныеФайлы; +Перем КомандныйФайл; + +Перем Лог; +Перем ЛогВключен; + +Перем RegExp_ПолучитьСписокТестов; +Перем RegExp_КонецФункции_ПолучитьСписокТестов; + +Перем ПолноеИмяБраузераТестов; +Перем ПолныйПутьКФайлуБраузераТестов; + +//{ Интерфейс конвертера + +Функция Инициализация(СлужебныеПараметрыЯдра = Неопределено) Экспорт + + Если ТипЗнч(СлужебныеПараметрыЯдра) = Тип("Структура") Тогда + СлужебныеПараметрыЯдра.Свойство("ПолноеИмяБраузераТестов", ПолноеИмяБраузераТестов); + СлужебныеПараметрыЯдра.Свойство("ПолныйПутьКФайлуБраузераТестов", ПолныйПутьКФайлуБраузераТестов); + КонецЕсли; + + ВременныеФайлы = СоздатьУтилиту("ВременныеФайлы"); + КомандныйФайл = СоздатьУтилиту("КомандныйФайл"); + Ожидаем = СоздатьУтилиту("УтвержденияBDD"); + + РегулярныеВыражения_Инициализация (RegExp_ПолучитьСписокТестов, "^\s*((?:procedure)|(?:function)|(?:процедура)|(?:функция))\s+(получитьсписоктестов)\s*\(([\wА-яёЁ\d]+)\s*\)\s+экспорт"); + РегулярныеВыражения_Инициализация (RegExp_КонецФункции_ПолучитьСписокТестов, "^\s*конецфункции"); + + ВключитьЛог(Ложь); + Лог = ""; + +КонецФункции + +Функция ПреобразоватьКаталог(КаталогТестов, ИскатьВПодкаталогах = Ложь) Экспорт + Рез = СоздатьСтруктуруРезультатаПреобразования(); + + Файлы = НайтиФайлы(КаталогТестов, "*.epf", ИскатьВПодкаталогах); + Возврат ПреобразоватьФайлы(Файлы, Истина); +КонецФункции + +Функция ПреобразоватьФайлы(НаборФайлов, НужноДелатьКопию = Истина) Экспорт + Рез = СоздатьСтруктуруРезультатаПреобразования(); + + Если НаборФайлов.Количество() = 0 Тогда + Возврат Рез; + КонецЕсли; + Для Каждого Файл Из НаборФайлов Цикл + Попытка + РезультатыПоФайлу = ПреобразоватьФайл(Файл, Истина); + ДобавитьЧислаВНаборИзДругогоНабора(Рез, РезультатыПоФайлу); + Исключение + Сообщить(Файл.ПолноеИмя + " : " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЦикла; + Возврат Рез; +КонецФункции + +Функция ПреобразоватьФайл(ИсходныйФайл, НужноДелатьКопию = Истина) Экспорт + Рез = СоздатьСтруктуруРезультатаПреобразования(); + Рез.НайденоВнешнихОбработок = 1; + + ИмяКаталогаСборки = ПодготовитьВременныйКаталогДляСборкиРазборки(); + + ФайлУтилиты = ПолучитьУтилитуСборкиРазборки(ИмяКаталогаСборки); + МассивОписанийФайловМодулей = РазобратьФайлТестаНаИсходники(ИмяКаталогаСборки, ИсходныйФайл, ФайлУтилиты); + НовыйМассивОписанийФайловМодулей = НайтиФайлыМодуляТестаВИсходниках(МассивОписанийФайловМодулей); + Если НовыйМассивОписанийФайловМодулей.Количество() = 0 Тогда + Возврат Рез; + КонецЕсли; + Рез.НайденоФайловТестов = 1; + + Для Каждого ОписаниеФайлаМодуля Из НовыйМассивОписанийФайловМодулей Цикл + ФайлМодуляТеста = ОписаниеФайлаМодуля.Файл; + ИсходныйТекст = ПолучитьИсходныйТекстМодуляТеста(ФайлМодуляТеста); + ЭтоОбычнаяФорма = ОписаниеФайлаМодуля.БылРазборДополнительногоКонтейнера; + КонечныйТекст = ПреобразоватьТекстМодуляТестаВФормат_v4_reborn(ИсходныйТекст, ЭтоОбычнаяФорма); + ЗаписатьНовыйТекстМодуляТестаВИсходникМодуляФайлТеста(ФайлМодуляТеста, КонечныйТекст); + КонецЦикла; + Если НужноДелатьКопию Тогда + ФайлКопии = СделатьКопиюФайла(ИсходныйФайл); + КонецЕсли; + ПодменитьФайлВерсийВИсходниках(ИмяКаталогаСборки, ИсходныйФайл, ФайлУтилиты); + + СобратьФайлТеста(ИмяКаталогаСборки, ИсходныйФайл, ФайлУтилиты, МассивОписанийФайловМодулей); + Рез.КонвертированоТестов = 1; + + УдалитьВременныеФайлы(); + Возврат Рез; +КонецФункции + +Процедура УдалитьВременныеФайлы() Экспорт + ВременныеФайлы.Удалить(); +КонецПроцедуры + +Процедура ВключитьЛог(НовоеЗначение = Истина) Экспорт + ЛогВключен = НовоеЗначение = Истина; +КонецПроцедуры + +Функция ПолучитьЛог() Экспорт + Возврат Лог; +КонецФункции + +//} + +//{ приватные методы + +Функция СоздатьУтилиту(ИмяУтилиты) + + КонтекстЯдра = ПолучитьКонтекстЯдраНаСервере(); + + Возврат КонтекстЯдра.СоздатьОбъектПлагина(ИмяУтилиты); + +КонецФункции + +Функция ПодготовитьВременныйКаталогДляСборкиРазборки() + ИмяКаталогаСборки = ВременныеФайлы.СоздатьКаталог_(); + Возврат ИмяКаталогаСборки; +КонецФункции + +Функция ПолучитьУтилитуСборкиРазборки(ИмяКаталогаСборки) + МакетУтилиты = ПолучитьМакет("v8unpack"); + + Файл = Новый Файл(ИмяКаталогаСборки+"\v8unpack.exe"); + + МакетУтилиты.Записать(Файл.ПолноеИмя); + Возврат Файл; +КонецФункции + +Функция РазобратьФайлТестаНаИсходники(ИмяКаталогаСборки, ФайлТеста, ФайлУтилиты) + МассивОписанийФайловМодулей = Новый Массив; + + ИмяКаталогаИсходниковФайла = ФайлТеста.ИмяБезРасширения; + + Файл = КомандныйФайл.ОткрытьФайл(ВременныеФайлы.НовоеИмяФайла("bat")); + КомандныйФайл.Добавить("cd /d " + ИмяКаталогаСборки); + КомандныйФайл.Добавить(ФайлУтилиты.ПолноеИмя + " -unpack """ + ФайлТеста.ПолноеИмя + """ " + ИмяКаталогаИсходниковФайла + " > "+ИмяКаталогаИсходниковФайла+".unpack.log"); + КодВозврата = КомандныйФайл.ВыполнитьКоманду(); + Ожидаем.Что(КодВозврата, "КодВозврата первый -unpack").Равно(0); + + Файлы = НайтиФайлы(ИмяКаталогаСборки+"/"+ИмяКаталогаИсходниковФайла, "*.0.data"); + Ожидаем.Что(Файлы.Количество(), "Должны быть файлы, а их нет").Больше(0); + Для Каждого БинарныйФайл Из Файлы Цикл + ИмяФайлаИсходников = БинарныйФайл.Имя + ".txt"; + + Файл = КомандныйФайл.ОткрытьФайл(ВременныеФайлы.НовоеИмяФайла("bat")); + КомандныйФайл.Добавить("cd /d " + БинарныйФайл.Путь); + КомандныйФайл.Добавить(ФайлУтилиты.ПолноеИмя + " -undeflate " + БинарныйФайл.Имя + " " + ИмяФайлаИсходников + " > "+БинарныйФайл.ИмяБезРасширения+".unpack.log"); + КодВозврата = КомандныйФайл.ВыполнитьКоманду(); + Ожидаем.Что(КодВозврата, "КодВозврата -undeflate "+БинарныйФайл.Имя).Равно(0); + + Файл = КомандныйФайл.ОткрытьФайл(ВременныеФайлы.НовоеИмяФайла("bat")); + КомандныйФайл.Добавить("cd /d " + БинарныйФайл.Путь); + КомандныйФайл.Добавить(ФайлУтилиты.ПолноеИмя + " -unpack " + ИмяФайлаИсходников + " " + БинарныйФайл.ИмяБезРасширения + " > "+БинарныйФайл.ИмяБезРасширения+".unpack.log"); + КодВозврата = КомандныйФайл.ВыполнитьКоманду(); + + ОписаниеИсходника = Новый Структура("ИсходныйФайл", БинарныйФайл); + ОписаниеИсходника.Вставить("ФайлДополнительногоКонтейнера", Новый Файл(БинарныйФайл.Путь +"/"+ИмяФайлаИсходников)); + Если КодВозврата = 4294967245 Тогда //UnpackToFolder. This is not V8 file! + ОписаниеИсходника.Вставить("БылРазборДополнительногоКонтейнера", Ложь); + ОписаниеИсходника.Вставить("Файл", Новый Файл(БинарныйФайл.Путь +"/"+ИмяФайлаИсходников)); + МассивОписанийФайловМодулей.Добавить(ОписаниеИсходника); + Продолжить; + ИначеЕсли КодВозврата = 0 Тогда + ОписаниеИсходника.Вставить("БылРазборДополнительногоКонтейнера", Истина); + НужныйФайл = Новый Файл(БинарныйФайл.Путь +"/"+БинарныйФайл.ИмяБезРасширения+"/text.data"); + Если НужныйФайл.Существует() Тогда + ОписаниеИсходника.Вставить("Файл", НужныйФайл); + МассивОписанийФайловМодулей.Добавить(ОписаниеИсходника); + КонецЕсли; + Продолжить; + КонецЕсли; + Ожидаем.Что(КодВозврата, "КодВозврата второй -unpack "+БинарныйФайл.Имя).Равно(0); + КонецЦикла; + Возврат МассивОписанийФайловМодулей; + + //разборка + //@echo off + //v8unpack.exe -unpack ШаблонТестаУФ.epf .\ШаблонТестаУФ + //v8unpack.exe -undeflate .\ШаблонТестаУФ\727eda5f-558c-428b-86d2-3421c52f4c50.0.data .\ШаблонТестаУФ\Module.txt + //v8unpack.exe -unpack .\ШаблонТестаУФ\Module.txt .\ШаблонТестаУФ\Module + + //v8unpack.exe -undeflate .\ШаблонТестаУФ\ba335523-e6ff-4049-91a9-5f97f7ab0a0b.0.data .\ШаблонТестаУФ\UF.txt + //rem v8unpack.exe -unpack .\ШаблонТестаУФ\UF.txt .\ШаблонТеста\UF + + //сборка + //rem @echo off + //v8unpack.exe -pack .\ШаблонТеста\Module .\ШаблонТеста\NewModule.txt + //v8unpack.exe -deflate .\ШаблонТеста\NewModule.txt .\ШаблонТеста\727eda5f-558c-428b-86d2-3421c52f4c50.0.data + //v8unpack.exe -pack .\ШаблонТеста ШаблонТеста2.epf +КонецФункции + +Функция ПолучитьИмяКонтейнераИзФайла(БинарныйФайл) + Возврат БинарныйФайл.Имя + ".txt"; +КонецФункции + +Функция НайтиФайлыМодуляТестаВИсходниках(МассивОписанийФайловМодулей) + НовыйМассивОписанийФайловМодулей = Новый Массив; + Для Каждого ОписаниеИсходника Из МассивОписанийФайловМодулей Цикл + Файл = ОписаниеИсходника.Файл; + Текст = Новый ЧтениеТекста(Файл.ПолноеИмя, КодировкаТекста.UTF8); + Стр = Текст.ПрочитатьСтроку(); + Пока Стр <> Неопределено Цикл + Если РегулярныеВыражения_Проверка(RegExp_ПолучитьСписокТестов, Стр) Тогда + НовыйМассивОписанийФайловМодулей.Добавить(ОписаниеИсходника); + Прервать; + КонецЕсли; + Стр = Текст.ПрочитатьСтроку(); + КонецЦикла; + КонецЦикла; + Возврат НовыйМассивОписанийФайловМодулей;; +КонецФункции + +Функция ПолучитьИсходныйТекстМодуляТеста(ФайлМодуляТеста) + Возврат ПолучитьТекстФайла(ФайлМодуляТеста); +КонецФункции + +Функция ПреобразоватьТекстМодуляТестаВФормат_v4_reborn(ИсходныйТекст, ЭтоОбычнаяФорма) + ЕстьДвеДвойныеКавычки = Не ЭтоОбычнаяФорма; + Возврат ПреобразоватьТекст(ИсходныйТекст, ЭтоОбычнаяФорма, ЕстьДвеДвойныеКавычки); +КонецФункции + +Функция ЗаписатьНовыйТекстМодуляТестаВИсходникМодуляФайлТеста(ФайлМодуляТеста, КонечныйТекст) + ЗаписатьТекстВФайл(ФайлМодуляТеста, КонечныйТекст); +КонецФункции + +Функция СделатьКопиюФайла(ИсходныйФайл) + ФайлКопии = Новый Файл(ИсходныйФайл.Путь+"/"+ИсходныйФайл.ИмяБезРасширения +".orig.epf"); + КопироватьФайл(ИсходныйФайл.ПолноеИмя, ФайлКопии.ПолноеИмя); + Ожидаем.Что(ФайлКопии.Существует(), "не удалось сделать копию-файла для файла "+ИсходныйФайл.ПолноеИмя +", ожидали файл копии "+ФайлКопии.ПолноеИмя).ЭтоИстина(); + Возврат ФайлКопии; +КонецФункции + +Процедура ПодменитьФайлВерсийВИсходниках(ИмяКаталогаСборки, ИсходныйФайл, ФайлУтилиты) + НовыйФайлВерсий = Новый Файл(ВременныеФайлы.НовоеИмяФайла("txt")); + ЗаписатьТекстВФайл(НовыйФайлВерсий, "{1,0}"); + + Файл = КомандныйФайл.ОткрытьФайл(ВременныеФайлы.НовоеИмяФайла("bat")); + КомандныйФайл.Добавить("cd /d " + ИмяКаталогаСборки+"/"+ИсходныйФайл.ИмяБезРасширения); + КомандныйФайл.Добавить(ФайлУтилиты.ПолноеИмя + " -deflate " + НовыйФайлВерсий.ПолноеИмя + " versions.data >> versions.data.pack.log"); + + КодВозврата = КомандныйФайл.ВыполнитьКоманду(); + Ожидаем.Что(КодВозврата, "КодВозврата versions -pack").Равно(0); +КонецПроцедуры + +Функция СобратьФайлТеста(ИмяКаталогаСборки, ФайлТеста, ФайлУтилиты, МассивОписанийФайловМодулей) + УдалитьФайлы(ФайлТеста.ПолноеИмя); + Ожидаем.Что(ФайлТеста.Существует(), "исходный файл теста не удалось удалить "+ФайлТеста.ПолноеИмя).ЭтоЛожь(); + + Файл = КомандныйФайл.ОткрытьФайл(ВременныеФайлы.НовоеИмяФайла("bat")); + КомандныйФайл.Добавить("cd /d " + ИмяКаталогаСборки+"/"+ФайлТеста.ИмяБезРасширения); + Для Каждого ОписаниеИсходника Из МассивОписанийФайловМодулей Цикл + РазобранныйФайл = ОписаниеИсходника.Файл; + ИсходныйФайл = ОписаниеИсходника.ИсходныйФайл; + ФайлДополнительногоКонтейнера = ОписаниеИсходника.ФайлДополнительногоКонтейнера; + Если ОписаниеИсходника.БылРазборДополнительногоКонтейнера Тогда + КомандныйФайл.Добавить(ФайлУтилиты.ПолноеИмя + " -pack " + РазобранныйФайл.Путь + " " + ФайлДополнительногоКонтейнера.Имя + " > "+РазобранныйФайл.Имя +".pack.log"); + КонецЕсли; + + КомандныйФайл.Добавить(ФайлУтилиты.ПолноеИмя + " -deflate " + ФайлДополнительногоКонтейнера.Имя + " " + ИсходныйФайл.Имя + " >> "+РазобранныйФайл.Имя +".pack.log"); + КонецЦикла; + ИмяКаталогаИсходниковФайла = ФайлТеста.ИмяБезРасширения; + + КомандныйФайл.Добавить("cd .."); + КомандныйФайл.Добавить(ФайлУтилиты.ПолноеИмя + " -pack " + ИмяКаталогаИсходниковФайла + " """ + ФайлТеста.ПолноеИмя + """ > "+ИмяКаталогаИсходниковФайла+".pack.log"); + КодВозврата = КомандныйФайл.ВыполнитьКоманду(); + Ожидаем.Что(КодВозврата, "КодВозврата первый -pack").Равно(0); +КонецФункции + +Функция ПреобразоватьТекст(Знач Исходный, ЭтоОбычнаяФорма, ЕстьДвеДвойныеКавычки) Экспорт + + ОписаниеМетодаПолучитьСписокТестов = ПолучитьОписаниеМетода_ПолучитьСписокТестов(Исходный); + Если Не ЗначениеЗаполнено(ОписаниеМетодаПолучитьСписокТестов) Тогда + Возврат ""; + КонецЕсли; + + СтрокаРез = ИсправитьОписаниеТестов(Исходный, ОписаниеМетодаПолучитьСписокТестов, ЭтоОбычнаяФорма, ЕстьДвеДвойныеКавычки); + СтрокаРез = ПодменитьБазовыеУтверждения(СтрокаРез, ОписаниеМетодаПолучитьСписокТестов); + Возврат СтрокаРез; +КонецФункции + +Функция ПолучитьОписаниеМетода_ПолучитьСписокТестов(Знач ИсходныйТекст) Экспорт + ОписаниеМетода = Новый Структура("Начало, Конец, ИмяПараметра_КонтекстЯдра, ТелоМетода, КоллекцияТестов"); + + Группировки = РегулярныеВыражения_Выполнить(RegExp_ПолучитьСписокТестов, ИсходныйТекст); + Если Не ЗначениеЗаполнено(Группировки) Тогда + ДобавитьЛог("Не удалось найти экспортную процедуру ПолучитьСписокТестов с одним параметром."); + Возврат Неопределено; + КонецЕсли; + + Группировка_Процедура = Группировки[0]; + Ожидаем.Что(Группировка_Процедура.ПодВыражения.Количество(), "Ожидаем, что количество найденных элементов при поиске ПолучитьСписокТестов равно образцу, а это не так").Равно(3); + Если Сред(ИсходныйТекст, Группировка_Процедура.Начало, 1) = Символы.ПС Тогда + Начало = Группировка_Процедура.Начало + 1; + КонецЕсли; + Если Сред(ИсходныйТекст, Начало, 1) = Символы.ПС Тогда + Начало = Начало + 1; + КонецЕсли; + ОписаниеМетода.Вставить("Начало", Начало); + ОписаниеМетода.Вставить("ИмяПараметра_КонтекстЯдра", Группировка_Процедура.ПодВыражения[2]); + ДобавитьЛог("ОписаниеМетода.ИмяПараметра_КонтекстЯдра "+ОписаниеМетода.ИмяПараметра_КонтекстЯдра); + + НачалоКодаПроцедуры = Группировка_Процедура.Начало + Группировка_Процедура.Длина + 2; + + Группировки_КонецПроцедуры = РегулярныеВыражения_Выполнить(RegExp_КонецФункции_ПолучитьСписокТестов, Сред(ИсходныйТекст, НачалоКодаПроцедуры)); + Если Не ЗначениеЗаполнено(Группировки_КонецПроцедуры) Тогда + ВызватьИсключение "Не удалось найти конец процедуры для процедуры ПолучитьСписокТестов с одним параметром."; + КонецЕсли; + + ГруппировкаДляКонецПроцедуры = Группировки_КонецПроцедуры[0]; + ТекстМетодаПолучитьСписокТестов = Сред(ИсходныйТекст, НачалоКодаПроцедуры, ГруппировкаДляКонецПроцедуры.Начало - 1); + + ОписаниеМетода.Вставить("Конец", НачалоКодаПроцедуры + ГруппировкаДляКонецПроцедуры.Начало + ГруппировкаДляКонецПроцедуры.Длина + 2); + ОписаниеМетода.Вставить("ТелоМетода", ТекстМетодаПолучитьСписокТестов); + + ДобавитьЛог("ТелоМетода ПолучитьСписокТестов <"+ОписаниеМетода.ТелоМетода+">"); + + ОписаниеГлобальнойПеременнойКонтекстаЯдра = ПолучитьОписаниеГлобальнойПеременнойКонтекстаЯдра(ИсходныйТекст, ОписаниеМетода); + ПодтвердитьИмяГлобальнойПеременнойКонтекстаЯдра(ИсходныйТекст, ОписаниеМетода, ОписаниеГлобальнойПеременнойКонтекстаЯдра); + ОписаниеМетода.Вставить("ОписаниеГлобальнойПеременнойКонтекстаЯдра", ОписаниеГлобальнойПеременнойКонтекстаЯдра); + + КоллекцияТестов = ПолучитьКоллекциюТестов(ИсходныйТекст, ОписаниеМетода); + ОписаниеМетода.Вставить("КоллекцияТестов", КоллекцияТестов); + + Возврат ОписаниеМетода; +КонецФункции + +Функция ПолучитьОписаниеГлобальнойПеременнойКонтекстаЯдра(Знач ИсходныйТекст, ОписаниеМетода) + RegExp_ПрисваиваниеКонтекстаЯдра = Неопределено; + РегулярныеВыражения_Инициализация (RegExp_ПрисваиваниеКонтекстаЯдра, "^\s*([\wА-яёЁ\d]+)\s*=\s*" + ОписаниеМетода.ИмяПараметра_КонтекстЯдра + "\s*;"); + Группировки = РегулярныеВыражения_Выполнить(RegExp_ПрисваиваниеКонтекстаЯдра, ОписаниеМетода.ТелоМетода); + Если Не ЗначениеЗаполнено(Группировки) Тогда + ВызватьИсключение "Не удалось найти присваивание параметра контекста ядра."; + КонецЕсли; + Группировка = Группировки[0]; + + Ожидаем.Что(Группировка.ПодВыражения.Количество(), "Ожидаем, что количество найденных элементов при поиске ИмяГлобальнойПеременнойКонтекстаЯдра равно образцу, а это не так").Равно(1); + + ОписаниеГлобальнойПеременнойКонтекстаЯдра = Новый Структура("Имя, НачалоОписания, КонецОписания"); + + ОписаниеГлобальнойПеременнойКонтекстаЯдра.Вставить("Имя", Группировка.ПодВыражения[0]); + + ДобавитьЛог("предварительно ОписаниеГлобальнойПеременнойКонтекстаЯдра.Имя = " + ОписаниеГлобальнойПеременнойКонтекстаЯдра.Имя); + Возврат ОписаниеГлобальнойПеременнойКонтекстаЯдра; +КонецФункции + +Процедура ПодтвердитьИмяГлобальнойПеременнойКонтекстаЯдра(Знач ИсходныйТекст, ОписаниеМетода, ОписаниеГлобальнойПеременнойКонтекстаЯдра) + RegExp_ОбъявлениеГлобальнойПеременнойКонтекстаЯдра = Неопределено; + РегулярныеВыражения_Инициализация (RegExp_ОбъявлениеГлобальнойПеременнойКонтекстаЯдра, "^\s*Перем\s+(" + ОписаниеГлобальнойПеременнойКонтекстаЯдра.Имя + ")\s*[;,]"); + Группировки = РегулярныеВыражения_Выполнить(RegExp_ОбъявлениеГлобальнойПеременнойКонтекстаЯдра, ИсходныйТекст); + Если Не ЗначениеЗаполнено(Группировки) Тогда + ВызватьИсключение ("Не удалось найти глобальную переменную контекста ядра."); + КонецЕсли; + Группировка = Группировки[0]; + + Ожидаем.Что(Группировка.ПодВыражения.Количество(), "Ожидаем, что количество найденных элементов при проверке ИмяГлобальнойПеременнойКонтекстаЯдра равно образцу, а это не так").Равно(1); + ДобавитьЛог("подтверждено ИмяГлобальнойПеременнойКонтекстаЯдра = "+Группировка.ПодВыражения[0]); + + ОписаниеГлобальнойПеременнойКонтекстаЯдра.Вставить("НачалоОписания", Группировка.Начало); + ОписаниеГлобальнойПеременнойКонтекстаЯдра.Вставить("КонецОписания", Группировка.Начало + Группировка.Длина); +КонецПроцедуры + +Функция ПолучитьКоллекциюТестов(Знач ИсходныйТекст, ОписаниеМетода) + RegExp_ИмяКоллекцииТестов = Неопределено; + //РегулярныеВыражения_Инициализация (RegExp_ИмяКоллекцииТестов, "\s*([\wА-яёЁ\d]+)\s*=\s*Новый\s+Массив\s*[;\(]([.\s].+)+Возврат\s+([\wА-яёЁ\d]+)"); + РегулярныеВыражения_Инициализация (RegExp_ИмяКоллекцииТестов, "^\s*Возврат\s+([\wА-яёЁ\d]+)"); + Группировки = РегулярныеВыражения_Выполнить(RegExp_ИмяКоллекцииТестов, ОписаниеМетода.ТелоМетода); + Если Не ЗначениеЗаполнено(Группировки) Тогда + ВызватьИсключение "Не удалось найти создание коллекции тестов."; + КонецЕсли; + Ожидаем.Что(Группировки[0].ПодВыражения.Количество(), "Ожидаем, что количество найденных элементов при поиске ИмяГлобальнойПеременнойКонтекстаЯдра равно образцу, а это не так").Равно(1); + ИмяПеременнойКоллекцииСпискаТестов = Группировки[0].ПодВыражения[0]; + ДобавитьЛог("ИмяПеременнойКоллекцииСпискаТестов = "+ИмяПеременнойКоллекцииСпискаТестов); + + RegExp_ДобавлениеТеста = Неопределено; + РегулярныеВыражения_Инициализация (RegExp_ДобавлениеТеста, "^\s*" + ИмяПеременнойКоллекцииСпискаТестов + "\s*\.\s*Добавить\(\s*""{1,2}([\wА-яёЁ\d]+)""{1,2}\s*\)\s*;"); + Группировки = РегулярныеВыражения_Выполнить(RegExp_ДобавлениеТеста, ОписаниеМетода.ТелоМетода); + + КоллекцияТестов = Новый Массив; + Если Не ЗначениеЗаполнено(Группировки) Тогда + Возврат КоллекцияТестов; + КонецЕсли; + Ожидаем.Что(Группировки[0].ПодВыражения.Количество(), "Ожидаем, что количество найденных элементов при поиске ИмяГлобальнойПеременнойКонтекстаЯдра равно образцу, а это не так").Равно(1); + + Для Каждого Группировка Из Группировки Цикл + ИмяТеста = Группировка.ПодВыражения[0]; + ДобавитьЛог("добавляем имя теста = "+ИмяТеста); + КоллекцияТестов.Добавить(ИмяТеста); + КонецЦикла; + + Возврат КоллекцияТестов; +КонецФункции + +Функция ИсправитьОписаниеТестов(Знач Исходный, ОписаниеМетодаПолучитьСписокТестов, ЭтоОбычнаяФорма, ЕстьДвеДвойныеКавычки) + Ожидаем.Что(Не ЭтоОбычнаяФорма ИЛИ ЭтоОбычнаяФорма И Не ЕстьДвеДвойныеКавычки, "Ожидаем, что ЕстьДвеДвойныеКавычки только в режиме УФ, а сейчас наоборот").ЭтоИстина(); + + ОписаниеГлобальнойПеременнойКонтекстаЯдра = ОписаниеМетодаПолучитьСписокТестов.ОписаниеГлобальнойПеременнойКонтекстаЯдра; + ИмяГлобальнойПеременнойКонтекстаЯдра = ОписаниеГлобальнойПеременнойКонтекстаЯдра.Имя; + + Макет = ПолучитьМакет("ШаблонТеста"); + + ОбластьПеременныеТестирования = ?(ЭтоОбычнаяФорма, Макет.ПолучитьОбласть("ПеременныеТестирования"), Макет.ПолучитьОбласть("ПеременныеТестирования_УФ")); + ОбластьОписанияТестов = ?(ЭтоОбычнаяФорма, Макет.ПолучитьОбласть("ОписанияТестов"), Макет.ПолучитьОбласть("ОписанияТестов_УФ")); + Если ЕстьДвеДвойныеКавычки Тогда + ОбластьОписанияТестов = Макет.ПолучитьОбласть("ОписанияТестов_УФ_ДвеДвойныеКавычки"); + КонецЕсли; + + ОбластьДобавитьИмяТеста = Макет.ПолучитьОбласть("ДобавитьИмяТеста"); + ОбластьЗавершениеСпискаТестов = Макет.ПолучитьОбласть("ЗавершениеСпискаТестов"); + ОбластьУФ_НаКлиенте = Макет.ПолучитьОбласть("УФ_НаКлиенте"); + + ИтоговыйТекст = Новый ТекстовыйДокумент; + + ТекстДоОписанияГлобальнойПеременнойКонтекстаЯдра = СокрЛП(Лев(Исходный, ОписаниеГлобальнойПеременнойКонтекстаЯдра.НачалоОписания-1)); + СтрЧислоСтрок_ТекстДо = СтрЧислоСтрок(ТекстДоОписанияГлобальнойПеременнойКонтекстаЯдра); + Если СтрЧислоСтрок_ТекстДо > 0 и СтрПолучитьСтроку(ТекстДоОписанияГлобальнойПеременнойКонтекстаЯдра, СтрЧислоСтрок_ТекстДо) = "&НаКлиенте" Тогда + ТекстДо = ""; + Для к = 1 По СтрЧислоСтрок_ТекстДо-1 Цикл + ТекстДо = ТекстДо + СтрПолучитьСтроку(ТекстДоОписанияГлобальнойПеременнойКонтекстаЯдра, к) + Символы.ПС; + КонецЦикла; + ТекстДоОписанияГлобальнойПеременнойКонтекстаЯдра = ТекстДо; + //Если ТекстДоОписанияГлобальнойПеременнойКонтекстаЯдра = "&НаКлиенте" Тогда + // ТекстДоОписанияГлобальнойПеременнойКонтекстаЯдра = ""; + КонецЕсли; + ДобавитьЛог("текст до описания глобальной переменной контекста "+Символы.ПС+ТекстДоОписанияГлобальнойПеременнойКонтекстаЯдра +"=========="+Символы.ПС); + + ДобавитьНепустуюСтрокуКТексту(ИтоговыйТекст, ТекстДоОписанияГлобальнойПеременнойКонтекстаЯдра); + + ИтоговыйТекст.Вывести(ОбластьПеременныеТестирования); + ИтоговыйТекст.ДобавитьСтроку(""); + + ТекстДоМетодаПолучитьСписокТестов = СокрЛП(Сред(Исходный, ОписаниеГлобальнойПеременнойКонтекстаЯдра.КонецОписания + 1, ОписаниеМетодаПолучитьСписокТестов.Начало-1 - ОписаниеГлобальнойПеременнойКонтекстаЯдра.КонецОписания - 1)); + Если ТекстДоМетодаПолучитьСписокТестов = "&НаКлиенте" Тогда + ТекстДоМетодаПолучитьСписокТестов = ""; + КонецЕсли; + ДобавитьЛог("текст до ПолучитьСписокТестов"+Символы.ПС+ТекстДоМетодаПолучитьСписокТестов +"=========="+Символы.ПС); + ДобавитьНепустуюСтрокуКТексту(ИтоговыйТекст, ТекстДоМетодаПолучитьСписокТестов); + Если Не ПустаяСтрока(ТекстДоМетодаПолучитьСписокТестов) Тогда + ИтоговыйТекст.ДобавитьСтроку(""); + КонецЕсли; + + ИтоговыйТекст.ДобавитьСтроку(ДобавитьКомментарии("Перем " + ИмяГлобальнойПеременнойКонтекстаЯдра + ";")); + + ИсходныйТекстВКомментарии = ДобавитьКомментарии(Сред(Исходный, ОписаниеМетодаПолучитьСписокТестов.Начало, ОписаниеМетодаПолучитьСписокТестов.Конец-ОписаниеМетодаПолучитьСписокТестов.Начало - 2)); + + ИтоговыйТекст.ДобавитьСтроку(ИсходныйТекстВКомментарии); + ИтоговыйТекст.ДобавитьСтроку(""); + + ИтоговыйТекст.Вывести(ОбластьОписанияТестов); + + Для Каждого ИмяТеста Из ОписаниеМетодаПолучитьСписокТестов.КоллекцияТестов Цикл + // из-за невозможности управлять длиной строки-параметра при установке параметра не использую параметры макета текстового документа + НужныеКавычки = ?(ЕстьДвеДвойныеКавычки, """"+"""", """"); + ВставляемоеИмяТеста = НужныеКавычки + ИмяТеста + НужныеКавычки; + ДобавляемыйТекст = СтрЗаменить(ОбластьДобавитьИмяТеста.ПолучитьСтроку(2), "%ИмяТеста%", ВставляемоеИмяТеста); + ИтоговыйТекст.ДобавитьСтроку(ДобавляемыйТекст); + КонецЦикла; + ИтоговыйТекст.Вывести(ОбластьЗавершениеСпискаТестов); + + ОсновнойТекст = Сред(Исходный, ОписаниеМетодаПолучитьСписокТестов.Конец); + ИтоговыйТекст.ДобавитьСтроку(ОсновнойТекст); + + ДобавитьЛог("ИтоговыйТекст.ПолучитьТекст() = "+Символы.ПС + ИтоговыйТекст.ПолучитьТекст()+"=========="+Символы.ПС); + + Возврат ИтоговыйТекст.ПолучитьТекст(); +КонецФункции + +Функция ПодменитьБазовыеУтверждения(Знач Исходный, ОписаниеМетодаПолучитьСписокТестов) + НаборОписанийУтвержденийДляЗамены = Новый Структура; + НаборОписанийУтвержденийДляЗамены.Вставить("БазовыеУтверждения", "Утверждения"); + НаборОписанийУтвержденийДляЗамены.Вставить("ГенераторТестовыхДанных", "ГенераторТестовыхДанных"); + НаборОписанийУтвержденийДляЗамены.Вставить("ЗапросыИзБД", "ЗапросыИзБД"); + НаборОписанийУтвержденийДляЗамены.Вставить("УтвержденияПроверкаТаблиц", "УтвержденияПроверкаТаблиц"); + НаборОписанийУтвержденийДляЗамены.Вставить("КонтекстЯдра", "КонтекстЯдра"); + + Для Каждого ОписаниеУтверждения Из НаборОписанийУтвержденийДляЗамены Цикл + НаборБазовыхУтверждений = ПолучитьНаборБазовыхУтверждений(ОписаниеУтверждения.Ключ); + Исходный = ЗаменитьБазовыеУтвержденияИзНабораУтверждений(Исходный, ОписаниеМетодаПолучитьСписокТестов.ОписаниеГлобальнойПеременнойКонтекстаЯдра.Имя, НаборБазовыхУтверждений, ОписаниеУтверждения.Значение); + КонецЦикла; + Возврат Исходный; +КонецФункции + +Функция ПолучитьНаборБазовыхУтверждений(ИмяМакетаУтверждений) + ТекстУтверждений = ПолучитьМакет(ИмяМакетаУтверждений); + НаборБазовыхУтверждений = Новый Структура; + Для к = 1 По ТекстУтверждений.КоличествоСтрок() Цикл + ТекстУтверждения = СокрЛП(ТекстУтверждений.ПолучитьСтроку(к)); + Если ПустаяСтрока(ТекстУтверждения) Тогда + Продолжить; + КонецЕсли; + Описание = ПолучитьОписаниеБазовогоУтверждения(ТекстУтверждения); + НаборБазовыхУтверждений.Вставить(Описание.Исходное, Описание); + КонецЦикла; + Возврат НаборБазовыхУтверждений; +КонецФункции + +Функция ПолучитьОписаниеБазовогоУтверждения(ТекстУтверждения) + Результат = Новый Структура("Исходное, Результирующее, ЕстьЗамена"); + + МассивСтрок = РазложитьСтрокуВМассивПодстрок(ТекстУтверждения, "="); + + Если МассивСтрок.Количество() = 1 Тогда + Результат.Вставить("Исходное", ТекстУтверждения); + Результат.Вставить("Результирующее", ТекстУтверждения); + Результат.Вставить("ЕстьЗамена", Ложь); + ИначеЕсли МассивСтрок.Количество() = 2 Тогда + Результат.Вставить("Исходное", МассивСтрок[0]); + Результат.Вставить("Результирующее", МассивСтрок[1]); + Результат.Вставить("ЕстьЗамена", Истина); + Иначе + ВызватьИсключение "Неверный формат базового утверждения. В макете разрешено либо название утверждения (например, ПроверитьРавенство) либо описание замены (например, ПрерватьТест=КонтекстЯдра.ВызватьОшибкуПроверки)"; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ЗаменитьБазовыеУтвержденияИзНабораУтверждений(Знач Исходный, ОписаниеГлобальнойПеременнойКонтекстаЯдра, НаборБазовыхУтверждений, ИмяНовойПеременнойУтверждений) + + НаборЗамен = Новый Соответствие; + ШаблонУтверждений = "("; + Для Каждого Структура Из НаборБазовыхУтверждений Цикл + ИсходноеУтверждение = Структура.Ключ; + ОписаниеУтверждения = Структура.Значение; + + ШаблонУтверждений = ШаблонУтверждений + "(" + ОписаниеГлобальнойПеременнойКонтекстаЯдра + "\s*\.\s*("+ИсходноеУтверждение+")\s*\()|"; + + Если ОписаниеУтверждения.ЕстьЗамена Тогда + НаборЗамен.Вставить(НРег(ОписаниеГлобальнойПеременнойКонтекстаЯдра + "." + ИсходноеУтверждение + "("), ОписаниеУтверждения.Результирующее + "("); + Иначе + НаборЗамен.Вставить(НРег(ОписаниеГлобальнойПеременнойКонтекстаЯдра + "." + ИсходноеУтверждение + "("), ИмяНовойПеременнойУтверждений + "." + ИсходноеУтверждение + "("); + КонецЕсли; + КонецЦикла; + НаборЗамен = Новый ФиксированноеСоответствие(НаборЗамен); // для точной проверки свойств через НаборЗамен[ТекстУтверждения], а не переустановки значения свойство в Неопределено + + ШаблонУтверждений = Лев(ШаблонУтверждений, СтрДлина(ШаблонУтверждений) - 1); + ШаблонУтверждений = ШаблонУтверждений + ")+"; + ДобавитьЛог(ИмяНовойПеременнойУтверждений + " ШаблонУтверждений " + ШаблонУтверждений); + + RegExp_ШаблонУтверждений = Неопределено; + РегулярныеВыражения_Инициализация (RegExp_ШаблонУтверждений, ШаблонУтверждений); + Группировки = РегулярныеВыражения_Выполнить(RegExp_ШаблонУтверждений, Исходный); + + Если Не ЗначениеЗаполнено(Группировки) Тогда + ДобавитьЛог("Не удалось найти использование утверждений в тексте теста"); + Возврат Исходный; + КонецЕсли; + + //обход в обратном порядке, чтобы не было проблем с индексом по строке в Лев, Сред + Для н = -Группировки.Количество()+1 По 0 Цикл + к = -н; + Группировка = Группировки[к]; + + ТекстУтверждения = Группировка.ПодВыражения[0]; + ДобавитьЛог(ИмяНовойПеременнойУтверждений + " найден текст утверждения имя теста = "+ТекстУтверждения); + ДобавитьЛог(ИмяНовойПеременнойУтверждений + " найден НаборЗамен["+НРег(ТекстУтверждения)+"] = "+НаборЗамен[НРег(ТекстУтверждения)]); + ЛеваяЧасть = Лев(Исходный, Группировка.Начало); + ПраваяЧасть = Сред(Исходный, Группировка.Начало + Группировка.Длина + 1); + + Исходный = ЛеваяЧасть + НаборЗамен[НРег(ТекстУтверждения)] + ПраваяЧасть; + КонецЦикла; + + ДобавитьЛог(ИмяНовойПеременнойУтверждений + " После ЗаменитьБазовыеУтвержденияИзНабораУтверждений ============== "+Символы.ПС + Исходный); + Возврат Исходный; +КонецФункции + +Функция ДобавитьКомментарии(Строка) + Рез = Новый ТекстовыйДокумент; + Для к=1 По СтрЧислоСтрок(Строка) Цикл + Рез.ДобавитьСтроку("//"+СтрПолучитьСтроку(Строка, к)); + КонецЦикла; + Возврат СокрЛП(Рез.ПолучитьТекст()); +КонецФункции + +Процедура ДобавитьНепустуюСтрокуКТексту(Текст, Строка) + Если Не ПустаяСтрока(Строка) Тогда + Текст.ДобавитьСтроку(Строка); + КонецЕсли; +КонецПроцедуры + +Функция ПолучитьТекстФайла(Файл) + Текст = Новый ЧтениеТекста(Файл.ПолноеИмя, КодировкаТекста.UTF8); + Стр = Текст.Прочитать(); + Возврат Стр; +КонецФункции + +Процедура ЗаписатьТекстВФайл(Файл, Строка) + Текст = Новый ЗаписьТекста(Файл.ПолноеИмя, КодировкаТекста.UTF8); + Текст.Записать(Строка); + Текст.Закрыть(); +КонецПроцедуры + +Процедура ДобавитьЛог(Сообщение) + Если ЛогВключен Тогда + Лог = Лог + Сообщение + Символы.ПС; + КонецЕсли; +КонецПроцедуры + +Функция СоздатьСтруктуруРезультатаПреобразования() + Возврат Новый Структура("НайденоВнешнихОбработок,НайденоФайловТестов,КонвертированоТестов",0,0,0); +КонецФункции + +Процедура ДобавитьЧислаВНаборИзДругогоНабора(ИсходныйНабор, ДобавляемыйНабор) + Для Каждого КлючЗначение Из ДобавляемыйНабор Цикл + Ключ = КлючЗначение.Ключ; + ИсходныйНабор.Вставить(Ключ, ИсходныйНабор[Ключ] + КлючЗначение.Значение); + КонецЦикла; +КонецПроцедуры + +// Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину. +// Общий модуль СтроковыеФункцииКлиентСервер. +// +// Параметры: +// Строка - Строка - текст с разделителями; +// Разделитель - Строка - разделитель строк текста, минимум 1 символ; +// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк. +// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: +// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки +// включаются в результат. +// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в +// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а +// при других разделителях результатом функции будет пустой массив. +// +// +// Возвращаемое значение: +// Массив - массив строк. +// +// Примеры: +// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые строки; +// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов; +// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов; +// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив; +// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой); +// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой); +// +Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) + + Результат = Новый Массив; + + // для обеспечения обратной совместимости + Если ПропускатьПустыеСтроки = Неопределено Тогда + ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); + Если ПустаяСтрока(Строка) Тогда + Если Разделитель = " " Тогда + Результат.Добавить(""); + КонецЕсли; + Возврат Результат; + КонецЕсли; + КонецЕсли; + // + + Позиция = Найти(Строка, Разделитель); + Пока Позиция > 0 Цикл + Подстрока = Лев(Строка, Позиция - 1); + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда + Результат.Добавить(Подстрока); + КонецЕсли; + Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); + Позиция = Найти(Строка, Разделитель); + КонецЦикла; + + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда + Результат.Добавить(Строка); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +//} + +//{ RegExp + +Процедура РегулярныеВыражения_Инициализация (RegExp, Шаблон, ИскатьДоПервогоСовпадения = Ложь, МногоСтрок = Истина, ИгнорироватьРегистр = Истина) Экспорт + + Если RegExp = Неопределено Тогда + RegExp = Новый COMОбъект("VBScript.RegExp"); + КонецЕсли; + + RegExp.MultiLine = МногоСтрок; // истина — текст многострочный, ложь — одна строка + RegExp.Global = Не ИскатьДоПервогоСовпадения; // истина — поиск по всей строке, ложь — до первого совпадения + RegExp.IgnoreCase = ИгнорироватьРегистр; // истина — игнорировать регистр строки при поиске + RegExp.Pattern = Шаблон; // шаблон (регулярное выражение) + +КонецПроцедуры + +Функция РегулярныеВыражения_Проверка(RegExp, ПроверяемыйТекст) + + Возврат RegExp.Test(ПроверяемыйТекст); + +КонецФункции + +Функция РегулярныеВыражения_Выполнить(RegExp, АнализируемыйТекст) Экспорт + + РезультатАнализаСтроки = RegExp.Execute(АнализируемыйТекст); + + Группировки = Новый Массив; + + Для Каждого Выражение Из РезультатАнализаСтроки Цикл + СтруктураВыражение = Новый Структура ("Начало, Длина, Значение, ПодВыражения", Выражение.FirstIndex, Выражение.Length,Выражение.Value); + + МассивПодВыражений = Новый Массив; + Для Каждого ПодВыражение Из Выражение.SubMatches Цикл + МассивПодВыражений.Добавить(ПодВыражение); + КонецЦикла; + СтруктураВыражение.ПодВыражения = МассивПодВыражений; + + Группировки.Добавить (СтруктураВыражение); + + КонецЦикла; + + Возврат Группировки; + +КонецФункции + +Функция РегулярныеВыражения_Заменить(RegExp, АнализируемыйТекст, ЗаменяемыйТекст) Экспорт + + Рез = RegExp.Replace(АнализируемыйТекст, ЗаменяемыйТекст); + Возврат Рез; + +КонецФункции + +//} + +// { Подсистема конфигурации xUnitFor1C + +Функция ПолучитьКорневойКаталогФреймворка(Знач АнализируемыйПутьККаталогу) + + РезультатПоиска = НайтиФайлы(АнализируемыйПутьККаталогу, "xddTestRunner.epf"); + Если РезультатПоиска.Количество() = 0 Тогда + ВышестоящийКаталог = ПолучитьПутьВышестоящегоКаталога(АнализируемыйПутьККаталогу); + Возврат ПолучитьКорневойКаталогФреймворка(ВышестоящийКаталог); + Иначе + Возврат РезультатПоиска.Получить(0).Путь; + КонецЕсли; + +КонецФункции +Функция ПолучитьПутьВышестоящегоКаталога(Знач ТекущийПутьККаталогу) + + МассивРазделителей = Новый Массив; + МассивРазделителей.Добавить("/"); + МассивРазделителей.Добавить("\"); + + ПоследнийСимвол = Прав(ТекущийПутьККаталогу, 1); + Если НЕ МассивРазделителей.Найти(ПоследнийСимвол) = Неопределено Тогда + ДлинаПутьБезПоследнегоРазделителя = СтрДлина(ТекущийПутьККаталогу) - 1; + ТекущийПутьККаталогу = Лев(ТекущийПутьККаталогу, ДлинаПутьБезПоследнегоРазделителя); + КонецЕсли; + + Пока СтрДлина(ТекущийПутьККаталогу) > 0 Цикл + + ПоследнийСимвол = Прав(ТекущийПутьККаталогу, 1); + Если НЕ МассивРазделителей.Найти(ПоследнийСимвол) = Неопределено Тогда + Прервать; + Иначе + ДлинаПутьБезПоследнегоСимвола = СтрДлина(ТекущийПутьККаталогу) - 1; + ТекущийПутьККаталогу = Лев(ТекущийПутьККаталогу, ДлинаПутьБезПоследнегоСимвола); + КонецЕсли; + + КонецЦикла; + + Возврат ТекущийПутьККаталогу; + +КонецФункции + +Функция ПолучитьКонтекстЯдраНаСервере() + + // Получаем доступ к серверному контексту обработки с использованием + // полного имени метаданных браузера тестов. Иначе нет возможности получить + // доступ к серверному контексту ядра, т.к. изначально вызов был выполнен на клиенте. + // При передаче на сервер клиентский контекст теряется. + КонтекстЯдра = Неопределено; + МетаданныеЯдра = Метаданные.НайтиПоПолномуИмени(ПолноеИмяБраузераТестов); + Если НЕ МетаданныеЯдра = Неопределено + И Метаданные.Обработки.Содержит(МетаданныеЯдра) Тогда + ИмяОбработкиКонекстаЯдра = СтрЗаменить(ПолноеИмяБраузераТестов, "Обработка", "Обработки"); + Выполнить("КонтекстЯдра = " + ИмяОбработкиКонекстаЯдра + ".Создать()"); + Иначе + ИмяОбработкиКонекстаЯдра = СтрЗаменить(ПолноеИмяБраузераТестов, "ВнешняяОбработка", "ВнешниеОбработки"); + ИмяОбработкиКонекстаЯдра = СтрЗаменить(ИмяОбработкиКонекстаЯдра, ".", Символы.ПС); + МенеджерОбъектов = СтрПолучитьСтроку(ИмяОбработкиКонекстаЯдра, 1); + ИмяОбъекта = СтрПолучитьСтроку(ИмяОбработкиКонекстаЯдра, 2); + Выполнить("КонтекстЯдра = " + МенеджерОбъектов + ".Создать("""+ИмяОбъекта+""")"); + КонецЕсли; + + Возврат КонтекстЯдра; + +КонецФункции + +// } Подсистема конфигурации xUnitFor1C \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/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.xml" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/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.xml" new file mode 100644 index 000000000..63f0f1c25 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/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.xml" @@ -0,0 +1,22 @@ + + +
+ + УправляемаяФорма + + + ru + Управляемая форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/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/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/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" new file mode 100644 index 000000000..099f57a6a --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/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" @@ -0,0 +1,29 @@ + +
+ useIfNecessary + + + + web:DarkCyan + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конвертация тестов из формата 3.Х в новый формат (4.Х) работает только в режиме обычного приложения. + +Запустите 1С в указанном приложении!</v8:content> + </v8:item> + + + + + + + + + cfg:DataProcessorObject.xddTestsConvertIntoRebornFormat + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..4d97b9715 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Ordinary + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" new file mode 100644 index 000000000..9bf93d1cb Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" differ diff --git a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/v8unpack.xml b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/v8unpack.xml new file mode 100644 index 000000000..60c08103f --- /dev/null +++ b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/v8unpack.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/v8unpack/Ext/Template.bin b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/v8unpack/Ext/Template.bin new file mode 100644 index 000000000..59496ab38 Binary files /dev/null and b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/v8unpack/Ext/Template.bin differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.xml" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.xml" new file mode 100644 index 000000000..8727d091b --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Ext/Template.txt" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Ext/Template.txt" new file mode 100644 index 000000000..096e10ae6 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Ext/Template.txt" @@ -0,0 +1,24 @@ +Проверить +ПроверитьИстину +ПроверитьЛожь +ПроверитьДату +ПроверитьРавенствоДатСТочностью2Секунды +ПроверитьРавенство +ПроверитьНеРавенство +ПроверитьБольше +ПроверитьБольшеИлиРавно +ПроверитьМеньше +ПроверитьМеньшеИлиРавно +ПроверитьВыполнилось +ПроверитьМетодВыполнился +ПроверитьНеВыполнилось +ПроверитьМетодНеВыполнился +ПроверитьЗаполненность +ПроверитьНеЗаполненность +ПроверитьТип +ПроверитьВхождение +ПроверитьВхождениеВКоллекцию +ПроверитьВалидностьЗапросаСКД +ПроверитьНаличиеОбъектаИБ +ПроверитьРавенствоФайлов +ПропуститьТест \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\242\320\265\321\201\321\202\320\276\320\262\321\213\321\205\320\224\320\260\320\275\320\275\321\213\321\205.xml" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\242\320\265\321\201\321\202\320\276\320\262\321\213\321\205\320\224\320\260\320\275\320\275\321\213\321\205.xml" new file mode 100644 index 000000000..8f343e4e4 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\242\320\265\321\201\321\202\320\276\320\262\321\213\321\205\320\224\320\260\320\275\320\275\321\213\321\205.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\242\320\265\321\201\321\202\320\276\320\262\321\213\321\205\320\224\320\260\320\275\320\275\321\213\321\205/Ext/Template.txt" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\242\320\265\321\201\321\202\320\276\320\262\321\213\321\205\320\224\320\260\320\275\320\275\321\213\321\205/Ext/Template.txt" new file mode 100644 index 000000000..2cf09194f --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\242\320\265\321\201\321\202\320\276\320\262\321\213\321\205\320\224\320\260\320\275\320\275\321\213\321\205/Ext/Template.txt" @@ -0,0 +1,5 @@ +СоздатьДанныеПоМакетам +СоздатьДанныеПоТабличномуДокументу +УдалитьСозданныеДанные +СоздатьПользователяИБ +РазложитьСтрокуВМассивПодстрок \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224.xml" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224.xml" new file mode 100644 index 000000000..360f8d6ee --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Ext/Template.txt" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Ext/Template.txt" new file mode 100644 index 000000000..20982aa63 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Ext/Template.txt" @@ -0,0 +1,10 @@ +ПолучитьКоличествоДокументовПоОтбору +ПолучитьКоличествоЭлементовСправочникаПоОтбору +ПолучитьКоличествоСтрокВДокументахПоОтбору +ПолучитьИтоговуюСуммуТабличнойЧастиДокументовПоОтбору +ПолучитьИтоговуюСуммуДокументовПоОтбору +ПолучитьКоличествоЭлементовМетаданногоПоОтбору +ПолучитьКоличествоБизнесПроцессовПоОтбору +ПолучитьКоличествоЗадачПоОтбору +ПолучитьКоличествоЭлементовРегистраПоОтбору +ПолучитьЭлементыМетаданногоПоОтбору \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\257\320\264\321\200\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\257\320\264\321\200\320\260.xml" new file mode 100644 index 000000000..d556e41b0 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\257\320\264\321\200\320\260.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\257\320\264\321\200\320\260/Ext/Template.txt" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\257\320\264\321\200\320\260/Ext/Template.txt" new file mode 100644 index 000000000..341a1519d --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\232\320\276\320\275\321\202\320\265\320\272\321\201\321\202\320\257\320\264\321\200\320\260/Ext/Template.txt" @@ -0,0 +1,2 @@ +ВывестиСообщение +ПрерватьТест=КонтекстЯдра.ВызватьОшибкуПроверки \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206.xml" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206.xml" new file mode 100644 index 000000000..805b6763a --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Ext/Template.txt" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Ext/Template.txt" new file mode 100644 index 000000000..665228224 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Ext/Template.txt" @@ -0,0 +1,3 @@ +ПроверитьРавенствоТаблиц +ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениям +ПолучитьТаблицуЗначенийИзТабличногоДокумента \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\250\320\260\320\261\320\273\320\276\320\275\320\242\320\265\321\201\321\202\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\250\320\260\320\261\320\273\320\276\320\275\320\242\320\265\321\201\321\202\320\260.xml" new file mode 100644 index 000000000..808e5fc87 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\250\320\260\320\261\320\273\320\276\320\275\320\242\320\265\321\201\321\202\320\260.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\250\320\260\320\261\320\273\320\276\320\275\320\242\320\265\321\201\321\202\320\260/Ext/Template.txt" "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\250\320\260\320\261\320\273\320\276\320\275\320\242\320\265\321\201\321\202\320\260/Ext/Template.txt" new file mode 100644 index 000000000..0a533b325 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/xddTestsConvertIntoRebornFormat/Templates/\320\250\320\260\320\261\320\273\320\276\320\275\320\242\320\265\321\201\321\202\320\260/Ext/Template.txt" @@ -0,0 +1,79 @@ +#Область ПеременныеТестирования +Перем КонтекстЯдра; +Перем Ожидаем; +Перем Утверждения; +Перем ГенераторТестовыхДанных; +Перем ЗапросыИзБД; +Перем УтвержденияПроверкаТаблиц; +#КонецОбласти + +#Область ПеременныеТестирования_УФ +&НаКлиенте +Перем КонтекстЯдра; +&НаКлиенте +Перем Ожидаем; +&НаКлиенте +Перем Утверждения; +&НаКлиенте +Перем ГенераторТестовыхДанных; +&НаКлиенте +Перем ЗапросыИзБД; +&НаКлиенте +Перем УтвержденияПроверкаТаблиц; +#КонецОбласти + +#Область ОписанияТестов +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + КонтекстЯдра = КонтекстЯдраПараметр; + Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD"); + Утверждения = КонтекстЯдра.Плагин("БазовыеУтверждения"); + ГенераторТестовыхДанных = КонтекстЯдра.Плагин("СериализаторMXL"); + ЗапросыИзБД = КонтекстЯдра.Плагин("ЗапросыИзБД"); + УтвержденияПроверкаТаблиц = КонтекстЯдра.Плагин("УтвержденияПроверкаТаблиц"); +КонецПроцедуры + +Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт +#КонецОбласти + +#Область ОписанияТестов_УФ +&НаКлиенте +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + КонтекстЯдра = КонтекстЯдраПараметр; + Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD"); + Утверждения = КонтекстЯдра.Плагин("БазовыеУтверждения"); + ГенераторТестовыхДанных = КонтекстЯдра.Плагин("СериализаторMXL"); + ЗапросыИзБД = КонтекстЯдра.Плагин("ЗапросыИзБД"); + УтвержденияПроверкаТаблиц = КонтекстЯдра.Плагин("УтвержденияПроверкаТаблиц"); +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт +#КонецОбласти + +#Область ОписанияТестов_УФ_ДвеДвойныеКавычки +&НаКлиенте +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + КонтекстЯдра = КонтекстЯдраПараметр; + Ожидаем = КонтекстЯдра.Плагин(""УтвержденияBDD""); + Утверждения = КонтекстЯдра.Плагин(""БазовыеУтверждения""); + ГенераторТестовыхДанных = КонтекстЯдра.Плагин(""СериализаторMXL""); + ЗапросыИзБД = КонтекстЯдра.Плагин(""ЗапросыИзБД""); + УтвержденияПроверкаТаблиц = КонтекстЯдра.Плагин(""УтвержденияПроверкаТаблиц""); +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт +#КонецОбласти + +#Область ДобавитьИмяТеста + НаборТестов.Добавить(%ИмяТеста%); +#КонецОбласти + +#Область ЗавершениеСпискаТестов +КонецПроцедуры + +#КонецОбласти + +#Область УФ_НаКлиенте +&НаКлиенте +#КонецОбласти diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.xml" new file mode 100644 index 000000000..ef5469a36 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217.xml" @@ -0,0 +1,34 @@ + + + + + + 824a7f81-6e79-492d-8c40-2f6d36f77bc3 + 420e4203-7737-419e-951c-3b79e2bb75ff + + + fab045ed-8db6-4a8f-9c32-9d0cadd47e0c + dace8333-7cb2-4bbe-881c-76e08ad28f0d + + + + БазовыеУтверждения + + + ru + Базовые утверждения + + + + false + DataProcessor.БазовыеУтверждения.Form.Форма + + false + + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..0f8e1d620 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl" @@ -0,0 +1,386 @@ +Перем СтатусыРезультатаТестирования; + +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Утилита); + Результат.Вставить("Идентификатор", "БазовыеУтверждения"); + Результат.Вставить("Представление", "Базовый набор утверждений"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры + +//{ МЕТОДЫ ДЛЯ ПРОВЕРКИ ЗНАЧЕНИЙ (assertions). + +Процедура Проверить(_Истина, ДопСообщениеОшибки = "") Экспорт + Если Не _Истина Тогда + СообщениеОшибки = "Переданный параметр ("+Формат(_Истина, "БЛ=ложь; БИ=истина")+") не является Истиной, а хотели, чтобы являлся." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьИстину(_Истина, ДопСообщениеОшибки = "") Экспорт + Проверить(_Истина, ДопСообщениеОшибки); +КонецПроцедуры + +Процедура ПроверитьЛожь(_Ложь, ДопСообщениеОшибки = "") Экспорт + Если _Ложь Тогда + СообщениеОшибки = "Переданный параметр ("+Формат(_Ложь, "БЛ=ложь; БИ=истина")+") не является Ложью, а хотели, чтобы являлся." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьДату(_Дата, _Период, ДопСообщениеОшибки = "") Экспорт + Если _Дата < _Период.ДатаНачала или _Дата > _Период.ДатаОкончания Тогда + представление = ПредставлениеПериода(_Период.ДатаНачала, _Период.ДатаОкончания, "ФП = Истина"); + СообщениеОшибки = "Переданный параметр ("+Формат(_Дата, "ДФ='dd.MM.yyyy HH:mm:ss'")+") не входит в период "+представление+", а хотели, чтобы являлся." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьРавенствоДатСТочностью2Секунды(_Дата, _Дата2, ДопСообщениеОшибки = "") Экспорт + Если _Дата < _Дата2-2 или _Дата > _Дата2+2 Тогда + СообщениеОшибки = "Переданная дата ("+Формат(_Дата, "ДФ='dd.MM.yyyy HH:mm:ss'")+") не равна дате ("+Формат(_Дата2, "ДФ='dd.MM.yyyy HH:mm:ss'")+") с точностью до 2-х секунд, а хотели, чтобы они равнялись." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьРавенство(_1, _2, ДопСообщениеОшибки = "") Экспорт + Если _1 <> _2 Тогда + СообщениеОшибки = "Сравниваемые значения ("+_1+"; "+_2+") не равны, а хотели, чтобы были равны." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьНеРавенство(_1, _2, ДопСообщениеОшибки = "") Экспорт + Если _1 = _2 Тогда + СообщениеОшибки = "Сравниваемые значения ("+_1+"; "+_2+") равны, а хотели, чтобы были не равны." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьБольше(_Больше, _Меньше, ДопСообщениеОшибки = "") Экспорт + Если _Больше <= _Меньше Тогда + СообщениеОшибки = "Первый параметр ("+_Больше+") меньше или равен второму ("+_Меньше+") а хотели, чтобы был больше." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьБольшеИлиРавно(_Больше, _Меньше, ДопСообщениеОшибки = "") Экспорт + Если _Больше < _Меньше Тогда + СообщениеОшибки = "Первый параметр ("+_Больше+") меньше второго ("+_Меньше+") а хотели, чтобы был больше или равен." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьМеньше(проверяемоеЗначение1, проверяемоеЗначение2, СообщениеОбОшибке = "") Экспорт + Если проверяемоеЗначение1 >= проверяемоеЗначение2 Тогда + СообщениеОшибки = "Значение <"+проверяемоеЗначение1+"> больше или равно, чем <"+проверяемоеЗначение2+">, а ожидалось меньше"+ + ФорматДСО(СообщениеОбОшибке); + ВызватьОшибкуПроверки(СообщениеОшибки) + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьМеньшеИлиРавно(проверяемоеЗначение1, проверяемоеЗначение2, СообщениеОбОшибке = "") Экспорт + Если проверяемоеЗначение1 > проверяемоеЗначение2 Тогда + СообщениеОшибки = "Значение <"+проверяемоеЗначение1+"> больше, чем <"+проверяемоеЗначение2+">, а ожидалось меньше или равно"+ + ФорматДСО(СообщениеОбОшибке); + ВызватьОшибкуПроверки(СообщениеОшибки) + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьВыполнилось(Знач СтрокаАлгоритм, ПараметрыИлиДопСообщениеОшибки = Неопределено, Знач ДопСообщениеОшибки = "") Экспорт + Перем Параметры; + + Если ТипЗнч(ПараметрыИлиДопСообщениеОшибки) = Тип("Строка") Тогда + ДопСообщениеОшибки = ПараметрыИлиДопСообщениеОшибки; + Иначе + Параметры = ПараметрыИлиДопСообщениеОшибки; + КонецЕсли; + Попытка + Выполнить(СтрокаАлгоритм); + Исключение + ПолученноеОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + СообщениеОшибки = "Хотели, чтобы алгоритм """+СтрокаАлгоритм+""" выполнился, а он упал с ошибкой """+ПолученноеОписаниеОшибки+"""." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецПопытки; + +КонецПроцедуры + +Процедура ПроверитьМетодВыполнился(Объект, Знач ИмяМетода, ПараметрыИлиДопСообщениеОшибки = Неопределено, Знач ДопСообщениеОшибки = "") Экспорт + Перем Параметры; + + Если ТипЗнч(ПараметрыИлиДопСообщениеОшибки) = Тип("Строка") Тогда + ДопСообщениеОшибки = ПараметрыИлиДопСообщениеОшибки; + Иначе + Параметры = ПараметрыИлиДопСообщениеОшибки; + Если Параметры <> Неопределено Тогда + ТипПараметра = ТипЗнч(Параметры); + Если ТипПараметра <> Тип("Массив") Тогда + ВызватьИсключение ("Ожидали, что вторым параметром будет передан массив параметров для метода <"+ИмяМетода+">, а получили другой объект с типом <"+ТипПараметра+">"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ПараметрыСтрока = ПараметрыСтрокой(Параметры); + + СтрокаВыполнения = "Объект." + ИмяМетода + "(" + ПараметрыСтрока + ")"; + + Попытка + Выполнить(СтрокаВыполнения); + Исключение + ПолученноеОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + СообщениеОшибки = "Хотели, чтобы код """+СтрокаВыполнения+""" выполнился, а он упал с ошибкой """+ПолученноеОписаниеОшибки+"""." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецПопытки; + +КонецПроцедуры + +Функция ПараметрыСтрокой(Параметры) + ПараметрыСтрока = ""; + Если ЗначениеЗаполнено(Параметры) Тогда + Для Индекс = 0 По Параметры.ВГраница() Цикл + ПараметрыСтрока = ПараметрыСтрока + ", Параметры[" + Формат(Индекс, "ЧН=0; ЧГ=0") + "]"; + КонецЦикла; + КонецЕсли; + Возврат Сред(ПараметрыСтрока, 3); +КонецФункции + +Процедура ПроверитьНеВыполнилось(Знач СтрокаАлгоритм, ПараметрыИлиОжидаемоеОписаниеОшибки, Знач ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки = "", Знач ДопСообщениеОшибки = "") Экспорт + Перем Параметры, ОжидаемоеОписаниеОшибки; + Если ТипЗнч(ПараметрыИлиОжидаемоеОписаниеОшибки) = Тип("Строка") Тогда + ОжидаемоеОписаниеОшибки = ПараметрыИлиОжидаемоеОписаниеОшибки; + ДопСообщениеОшибки = ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки; + Иначе + Параметры = ПараметрыИлиОжидаемоеОписаниеОшибки; + ОжидаемоеОписаниеОшибки = ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки; + КонецЕсли; + Попытка + Выполнить(СтрокаАлгоритм); + Исключение + ПолученноеОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Если Найти(ПолученноеОписаниеОшибки, ОжидаемоеОписаниеОшибки) = 0 Тогда + ВызватьОшибкуПроверки("Хотели, чтобы алгоритм """+СтрокаАлгоритм+""" упал с сообщением об ошибке """+ОжидаемоеОписаниеОшибки+""", а он упал с сообщением """+ПолученноеОписаниеОшибки+"""." + ФорматДСО(ДопСообщениеОшибки)); + КонецЕсли; + Возврат; + КонецПопытки; + + ВызватьОшибкуПроверки("Хотели, чтобы алгоритм """+СтрокаАлгоритм+""" упал, а он выполнился" + ФорматДСО(ДопСообщениеОшибки)); + +КонецПроцедуры + +Процедура ПроверитьМетодНеВыполнился(Объект, ИмяМетода, ПараметрыИлиОжидаемоеОписаниеОшибки, Знач ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки = "", Знач ДопСообщениеОшибки = "") Экспорт + Перем Параметры, ОжидаемоеОписаниеОшибки; + + Если ТипЗнч(ПараметрыИлиОжидаемоеОписаниеОшибки) = Тип("Строка") Тогда + ОжидаемоеОписаниеОшибки = ПараметрыИлиОжидаемоеОписаниеОшибки; + ДопСообщениеОшибки = ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки; + Иначе + Параметры = ПараметрыИлиОжидаемоеОписаниеОшибки; + Если Параметры <> Неопределено Тогда + ТипПараметра = ТипЗнч(Параметры); + Если ТипПараметра <> Тип("Массив") Тогда + ВызватьИсключение ("Ожидали, что третьим параметром будет передан массив параметров для метода <"+ИмяМетода+">, а получили другой объект с типом <"+ТипПараметра+">"); + КонецЕсли; + КонецЕсли; + ОжидаемоеОписаниеОшибки = ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки; + КонецЕсли; + + ПараметрыСтрока = ПараметрыСтрокой(Параметры); + + СтрокаВыполнения = "Объект." + ИмяМетода + "(" + ПараметрыСтрока + ")"; + + Попытка + Выполнить(СтрокаВыполнения); + Исключение + ПолученноеОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Если Найти(ПолученноеОписаниеОшибки, ОжидаемоеОписаниеОшибки) = 0 Тогда + ВызватьОшибкуПроверки("Хотели, чтобы код """+СтрокаВыполнения+""" упал с сообщением об ошибке """+ОжидаемоеОписаниеОшибки+""", а он упал с сообщением """+ПолученноеОписаниеОшибки+"""." + ФорматДСО(ДопСообщениеОшибки)); + КонецЕсли; + Возврат; + КонецПопытки; + + ВызватьОшибкуПроверки("Хотели, чтобы код """+СтрокаВыполнения+""" упал, а он выполнился" + ФорматДСО(ДопСообщениеОшибки)); + +КонецПроцедуры + +// проверка идет через ЗначениеЗаполнено, но мутабельные значение всегда считаем заполненными +Процедура ПроверитьЗаполненность(ПроверяемоеЗначение, ДопСообщениеОшибки = "") Экспорт + Попытка + фЗаполнено = ЗначениеЗаполнено(ПроверяемоеЗначение); + Исключение + Возврат; + КонецПопытки; + Если НЕ фЗаполнено Тогда + ВызватьОшибкуПроверки("Значение ("+ПроверяемоеЗначение+") не заполнено, а ожидалась заполненность" + ФорматДСО(ДопСообщениеОшибки)); + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьНеЗаполненность(ПроверяемоеЗначение, ДопСообщениеОшибки = "") Экспорт + СообщениеОшибки = "Значение ("+ПроверяемоеЗначение+") заполнено, а ожидалась незаполненность" + ФорматДСО(ДопСообщениеОшибки); + Попытка + фЗаполнено = ЗначениеЗаполнено(ПроверяемоеЗначение); + Исключение + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецПопытки; + Если фЗаполнено Тогда + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьТип(значение, ТипИлиИмяТипа, ДопСообщениеОшибки = "") Экспорт + Если ТипЗнч(ТипИлиИмяТипа) = Тип("Строка") Тогда + искомыйТип = Тип(ТипИлиИмяТипа); + ИначеЕсли ТипЗнч(ТипИлиИмяТипа) = Тип("Тип") Тогда + искомыйТип = ТипИлиИмяТипа; + Иначе + ВызватьИсключение ("ПроверитьТип: Тип значения параметра ТипИлиИмяТипа должен быть <Тип> или <Строка>, а получили <"+ ТипЗнч(ТипИлиИмяТипа) + ">" + ФорматДСО(ДопСообщениеОшибки)); + КонецЕсли; + Если ТипЗнч(значение) <> искомыйТип Тогда + ВызватьОшибкуПроверки("Типом значения <"+значение+"> является <"+ТипЗнч(значение)+">, а ожидался тип <"+ТипИлиИмяТипа+">."+ФорматДСО(ДопСообщениеОшибки)); + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьВхождение(строка, подстрокаПоиска, ДопСообщениеОшибки = "") Экспорт + Если Найти(строка, подстрокаПоиска) = 0 Тогда + ПредставлениеСтроки = "<"+строка+">"; + Если СтрДлина(строка) > 20 Тогда + ПредставлениеСтроки = ПредставлениеСтроки + Символы.ПС; + КонецЕсли; + ПредставлениеПодСтроки = "<"+подстрокаПоиска+">"; + Если СтрДлина(подстрокаПоиска) > 20 Тогда + ПредставлениеПодСтроки = ПредставлениеПодСтроки + Символы.ПС; + КонецЕсли; + СообщениеОшибки = "Искали в "+ПредставлениеСтроки+" подстроку "+ПредставлениеПодСтроки+", но не нашли." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +//Коллекция - Массив, Структура, Соответствие, ФиксированныйМассив, ФиксированнаяСтруктура, ФиксированноеСоответствие, СписокЗначений +Процедура ПроверитьВхождениеВКоллекцию(Элемент, Коллекция, ДопСообщениеОшибки = "") Экспорт + Нашли = Неопределено; + ТипКоллекции = ТипЗнч(Коллекция); + Если ТипКоллекции = Тип("Массив") или ТипКоллекции = Тип("ФиксированныйМассив") Тогда + Нашли = Коллекция.Найти(Элемент) <> Неопределено; + ИначеЕсли ТипКоллекции = Тип("Структура") или ТипКоллекции = Тип("Соответствие") + или ТипКоллекции = Тип("ФиксированнаяСтруктура") или ТипКоллекции = Тип("ФиксированноеСоответствие") Тогда + Для каждого КлючЗначение Из Коллекция Цикл + Нашли = КлючЗначение.Значение = Элемент; + Если Нашли Тогда + Прервать; + КонецЕсли; + КонецЦикла; + ИначеЕсли ТипКоллекции = Тип("СписокЗначений") Тогда + Нашли = Коллекция.НайтиПоЗначению(Элемент) <> Неопределено; + КонецЕсли; + Если Нашли = Неопределено Тогда + СообщениеОшибки = "Утверждение ""ПроверитьВхождениеВКоллекцию"" не умеет работать с типом коллекции <"+ТипКоллекции+">." + ФорматДСО(ДопСообщениеОшибки); + ВызватьИсключение СообщениеОшибки; + КонецЕсли; + Если Не Нашли Тогда + СообщениеОшибки = "Не нашли элемент <"+Элемент+"> в коллекции, а хотели, чтобы он был в коллекции." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +Процедура ПроверитьВалидностьЗапросаСКД(ТекстЗапроса, ДопСообщениеОшибки = "") Экспорт + + СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; + + ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); + ИсточникДанных.Имя = "ИсточникДанных"; + ИсточникДанных.СтрокаСоединения = ""; + ИсточникДанных.ТипИсточникаДанных = "Local"; + + НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных.Имя = "НаборДанных"; + НаборДанных.ИсточникДанных = "ИсточникДанных"; + НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; + НаборДанных.Запрос = ТекстЗапроса; + + КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; + Попытка + КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); + Исключение + СообщениеОшибки = ОписаниеОшибки() + "." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецПопытки; + +КонецПроцедуры // ПроверитьВалидностьЗапросаСКД() + +Процедура ПроверитьНаличиеОбъектаИБ(ссылка, ДопСообщениеОшибки = "") Экспорт + Если Не ЗначениеЗаполнено(ссылка) Тогда + СообщениеОшибки = "Ожидали заполненность ссылки, а получили пустую ссылку." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + лОбъект = ссылка.ПолучитьОбъект(); + Если лОбъект = Неопределено Тогда + СообщениеОшибки = "Ожидали существование объекта в ИБ, а получили объект не найден <" + ссылка + "> ." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +// Проеряет равенство файлов +// Параметры: +// ПутьФайла1, ПутьФайла2 - полные пути к фалйам +// ПарамСравнениеФайлов - структура с ключами: +// ИгнорироватьПустоеПространство +// СпособСравнения +// УчитыватьРазделителиСтрок +// УчитыватьРегистр +// ПоказатьРазличия - в случае ошибки появляется окно сравнеия (для отладки) +Процедура ПроверитьРавенствоФайлов(ПутьФайла1, ПутьФайла2, ДопСообщениеОшибки = "", ПарамСравнениеФайлов = Неопределено, ПоказатьРазличия = Ложь) Экспорт +#Если ТолстыйКлиентОбычноеПриложение или ТолстыйКлиентУправляемоеПриложение Тогда + Если ПарамСравнениеФайлов = Неопределено Тогда + ПарамСравнениеФайлов = Новый Структура; + КонецЕсли; + СравнениеФайлов = Новый СравнениеФайлов; + СравнениеФайлов.ПервыйФайл = ПутьФайла1; + СравнениеФайлов.ВторойФайл = ПутьФайла2; + Если Не ПарамСравнениеФайлов.Свойство("СпособСравнения") Тогда + Файл = Новый Файл(ПутьФайла1); + ТипФайла = НРег(Файл.Расширение); + ТекстовыеТипы = ".txt,.xml"; + Если ТипФайла = ".mxl" Тогда + ПарамСравнениеФайлов.Вставить("СпособСравнения", СпособСравненияФайлов.ТабличныйДокумент); + ИначеЕсли Найти(ТекстовыеТипы, ТипФайла) > 0 Тогда + ПарамСравнениеФайлов.Вставить("СпособСравнения", СпособСравненияФайлов.ТекстовыйДокумент); + КонецЕсли; + КонецЕсли; + ЗаполнитьЗначенияСвойств(СравнениеФайлов, ПарамСравнениеФайлов); + ФайлыИдентичны = СравнениеФайлов.Сравнить(); + Если Не ФайлыИдентичны Тогда + Если ПоказатьРазличия Тогда // для удобства отладки и расследования ошибок + СравнениеФайлов.ПоказатьРазличия(); + КонецЕсли; + СообщениеОшибки = "Ожидали идентичность файлов, а получили, что они различны." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +#Иначе + ВызватьИсключение "Утверждение ПроверитьРавенствоФайлов можно использовать только в толстом клиенте!"; +#КонецЕсли +КонецПроцедуры +//} + +Процедура ВызватьОшибкуПроверки(СообщениеОшибки) + + Префикс = "["+ СтатусыРезультатаТестирования.ОшибкаПроверки + "]"; + ВызватьИсключение Префикс + " " + СообщениеОшибки; + +КонецПроцедуры + +Функция ФорматДСО(ДопСообщениеОшибки) + Если ДопСообщениеОшибки = "" Тогда + Возврат ""; + КонецЕсли; + + Возврат Символы.ПС + ДопСообщениеОшибки; +КонецФункции + +СтатусыРезультатаТестирования = Новый Структура; +СтатусыРезультатаТестирования.Вставить("ОшибкаПроверки", "Failed"); +СтатусыРезультатаТестирования.Вставить("НеизвестнаяОшибка", "Broken"); +СтатусыРезультатаТестирования.Вставить("ТестПропущен", "Pending"); +СтатусыРезультатаТестирования = Новый ФиксированнаяСтруктура(СтатусыРезультатаТестирования); \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..30f4aedce --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..6fb087216 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.БазовыеУтверждения + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..28e144457 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\221\320\260\320\267\320\276\320\262\321\213\320\265\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,366 @@ +&НаКлиенте +Перем СтатусыРезультатаТестирования; + +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат Объект().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции + +// { функции утверждения- проверки значений. + +&НаКлиенте +Процедура Проверить(_Истина, ДопСообщениеОшибки = "") Экспорт + Если Не _Истина Тогда + СообщениеОшибки = "Переданный параметр ("+Формат(_Истина, "БЛ=ложь; БИ=истина")+") не является Истиной, а хотели, чтобы являлся." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьИстину(_Истина, ДопСообщениеОшибки = "") Экспорт + Проверить(_Истина, ДопСообщениеОшибки); +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьЛожь(_Ложь, ДопСообщениеОшибки = "") Экспорт + Если _Ложь Тогда + СообщениеОшибки = "Переданный параметр ("+Формат(_Ложь, "БЛ=ложь; БИ=истина")+") не является Ложью, а хотели, чтобы являлся." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьДату(_Дата, _Период, ДопСообщениеОшибки = "") Экспорт + Если _Дата < _Период.ДатаНачала или _Дата > _Период.ДатаОкончания Тогда + представление = ПредставлениеПериода(_Период.ДатаНачала, _Период.ДатаОкончания, "ФП = Истина"); + СообщениеОшибки = "Переданный параметр ("+Формат(_Дата, "ДФ='dd.MM.yyyy HH:mm:ss'")+") не входит в период "+представление+", а хотели, чтобы являлся." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьРавенствоДатСТочностью2Секунды(_Дата, _Дата2, ДопСообщениеОшибки = "") Экспорт + Если _Дата < _Дата2-2 или _Дата > _Дата2+2 Тогда + СообщениеОшибки = "Переданная дата ("+Формат(_Дата, "ДФ='dd.MM.yyyy HH:mm:ss'")+") не равна дате ("+Формат(_Дата2, "ДФ='dd.MM.yyyy HH:mm:ss'")+") с точностью до 2-х секунд, а хотели, чтобы они равнялись." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьРавенство(_1, _2, ДопСообщениеОшибки = "") Экспорт + Если _1 <> _2 Тогда + СообщениеОшибки = "Сравниваемые значения ("+_1+"; "+_2+") не равны, а хотели, чтобы были равны." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьНеРавенство(_1, _2, ДопСообщениеОшибки = "") Экспорт + Если _1 = _2 Тогда + СообщениеОшибки = "Сравниваемые значения ("+_1+"; "+_2+") равны, а хотели, чтобы были не равны." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьБольше(_Больше, _Меньше, ДопСообщениеОшибки = "") Экспорт + Если _Больше <= _Меньше Тогда + СообщениеОшибки = "Первый параметр ("+_Больше+") меньше или равен второму ("+_Меньше+") а хотели, чтобы был больше." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьБольшеИлиРавно(_Больше, _Меньше, ДопСообщениеОшибки = "") Экспорт + Если _Больше < _Меньше Тогда + СообщениеОшибки = "Первый параметр ("+_Больше+") меньше второго ("+_Меньше+") а хотели, чтобы был больше или равен." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьМеньше(проверяемоеЗначение1, проверяемоеЗначение2, СообщениеОбОшибке = "") Экспорт + Если проверяемоеЗначение1 >= проверяемоеЗначение2 Тогда + СообщениеОшибки = "Значение <"+проверяемоеЗначение1+"> больше или равно, чем <"+проверяемоеЗначение2+">, а ожидалось меньше"+ + ФорматДСО(СообщениеОбОшибке); + ВызватьОшибкуПроверки(СообщениеОшибки) + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьМеньшеИлиРавно(проверяемоеЗначение1, проверяемоеЗначение2, СообщениеОбОшибке = "") Экспорт + Если проверяемоеЗначение1 > проверяемоеЗначение2 Тогда + СообщениеОшибки = "Значение <"+проверяемоеЗначение1+"> больше, чем <"+проверяемоеЗначение2+">, а ожидалось меньше или равно"+ + ФорматДСО(СообщениеОбОшибке); + ВызватьОшибкуПроверки(СообщениеОшибки) + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьВыполнилось(Знач СтрокаАлгоритм, ПараметрыИлиДопСообщениеОшибки = Неопределено, Знач ДопСообщениеОшибки = "") Экспорт + Перем Параметры; + + Если ТипЗнч(ПараметрыИлиДопСообщениеОшибки) = Тип("Строка") Тогда + ДопСообщениеОшибки = ПараметрыИлиДопСообщениеОшибки; + Иначе + Параметры = ПараметрыИлиДопСообщениеОшибки; + КонецЕсли; + Попытка + Выполнить(СтрокаАлгоритм); + Исключение + ПолученноеОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + СообщениеОшибки = "Хотели, чтобы алгоритм """+СтрокаАлгоритм+""" выполнился, а он упал с ошибкой """+ПолученноеОписаниеОшибки+"""." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьМетодВыполнился(Объект, Знач ИмяМетода, ПараметрыИлиДопСообщениеОшибки = Неопределено, Знач ДопСообщениеОшибки = "") Экспорт + Перем Параметры; + + Если ТипЗнч(ПараметрыИлиДопСообщениеОшибки) = Тип("Строка") Тогда + ДопСообщениеОшибки = ПараметрыИлиДопСообщениеОшибки; + Иначе + Параметры = ПараметрыИлиДопСообщениеОшибки; + Если Параметры <> Неопределено Тогда + ТипПараметра = ТипЗнч(Параметры); + Если ТипПараметра <> Тип("Массив") Тогда + ВызватьИсключение ("Ожидали, что вторым параметром будет передан массив параметров для метода <"+ИмяМетода+">, а получили другой объект с типом <"+ТипПараметра+">"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ПараметрыСтрока = ПараметрыСтрокой(Параметры); + + СтрокаВыполнения = "Объект." + ИмяМетода + "(" + ПараметрыСтрока + ")"; + + Попытка + Выполнить(СтрокаВыполнения); + Исключение + ПолученноеОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + СообщениеОшибки = "Хотели, чтобы код """+СтрокаВыполнения+""" выполнился, а он упал с ошибкой """+ПолученноеОписаниеОшибки+"""." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Функция ПараметрыСтрокой(Параметры) + ПараметрыСтрока = ""; + Если ЗначениеЗаполнено(Параметры) Тогда + Для Индекс = 0 По Параметры.ВГраница() Цикл + ПараметрыСтрока = ПараметрыСтрока + ", Параметры[" + Формат(Индекс, "ЧН=0; ЧГ=0") + "]"; + КонецЦикла; + КонецЕсли; + Возврат Сред(ПараметрыСтрока, 3); +КонецФункции + +&НаКлиенте +Процедура ПроверитьНеВыполнилось(Знач СтрокаАлгоритм, ПараметрыИлиОжидаемоеОписаниеОшибки, Знач ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки = "", Знач ДопСообщениеОшибки = "") Экспорт + Перем Параметры, ОжидаемоеОписаниеОшибки; + Если ТипЗнч(ПараметрыИлиОжидаемоеОписаниеОшибки) = Тип("Строка") Тогда + ОжидаемоеОписаниеОшибки = ПараметрыИлиОжидаемоеОписаниеОшибки; + ДопСообщениеОшибки = ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки; + Иначе + Параметры = ПараметрыИлиОжидаемоеОписаниеОшибки; + ОжидаемоеОписаниеОшибки = ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки; + КонецЕсли; + Попытка + Выполнить(СтрокаАлгоритм); + Исключение + ПолученноеОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Если Найти(ПолученноеОписаниеОшибки, ОжидаемоеОписаниеОшибки) = 0 Тогда + ВызватьОшибкуПроверки("Хотели, чтобы алгоритм """+СтрокаАлгоритм+""" упал с сообщением об ошибке """+ОжидаемоеОписаниеОшибки+""", а он упал с сообщением """+ПолученноеОписаниеОшибки+"""." + ФорматДСО(ДопСообщениеОшибки)); + КонецЕсли; + Возврат; + КонецПопытки; + + ВызватьОшибкуПроверки("Хотели, чтобы алгоритм """+СтрокаАлгоритм+""" упал, а он выполнился" + ФорматДСО(ДопСообщениеОшибки)); + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьМетодНеВыполнился(Объект, ИмяМетода, ПараметрыИлиОжидаемоеОписаниеОшибки, Знач ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки = "", Знач ДопСообщениеОшибки = "") Экспорт + Перем Параметры, ОжидаемоеОписаниеОшибки; + + Если ТипЗнч(ПараметрыИлиОжидаемоеОписаниеОшибки) = Тип("Строка") Тогда + ОжидаемоеОписаниеОшибки = ПараметрыИлиОжидаемоеОписаниеОшибки; + ДопСообщениеОшибки = ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки; + Иначе + Параметры = ПараметрыИлиОжидаемоеОписаниеОшибки; + Если Параметры <> Неопределено Тогда + ТипПараметра = ТипЗнч(Параметры); + Если ТипПараметра <> Тип("Массив") Тогда + ВызватьИсключение ("Ожидали, что третьим параметром будет передан массив параметров для метода <"+ИмяМетода+">, а получили другой объект с типом <"+ТипПараметра+">"); + КонецЕсли; + КонецЕсли; + ОжидаемоеОписаниеОшибки = ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки; + КонецЕсли; + + ПараметрыСтрока = ПараметрыСтрокой(Параметры); + + СтрокаВыполнения = "Объект." + ИмяМетода + "(" + ПараметрыСтрока + ")"; + + Попытка + Выполнить(СтрокаВыполнения); + Исключение + ПолученноеОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Если Найти(ПолученноеОписаниеОшибки, ОжидаемоеОписаниеОшибки) = 0 Тогда + ВызватьОшибкуПроверки("Хотели, чтобы код """+СтрокаВыполнения+""" упал с сообщением об ошибке """+ОжидаемоеОписаниеОшибки+""", а он упал с сообщением """+ПолученноеОписаниеОшибки+"""." + ФорматДСО(ДопСообщениеОшибки)); + КонецЕсли; + Возврат; + КонецПопытки; + + ВызватьОшибкуПроверки("Хотели, чтобы код """+СтрокаВыполнения+""" упал, а он выполнился" + ФорматДСО(ДопСообщениеОшибки)); + +КонецПроцедуры + +// проверка идет через ЗначениеЗаполнено, но мутабельные значение всегда считаем заполненными +&НаКлиенте +Процедура ПроверитьЗаполненность(ПроверяемоеЗначение, ДопСообщениеОшибки = "") Экспорт + Попытка + фЗаполнено = ЗначениеЗаполнено(ПроверяемоеЗначение); + Исключение + Возврат; + КонецПопытки; + Если НЕ фЗаполнено Тогда + ВызватьОшибкуПроверки("Значение ("+ПроверяемоеЗначение+") не заполнено, а ожидалась заполненность" + ФорматДСО(ДопСообщениеОшибки)); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьНеЗаполненность(ПроверяемоеЗначение, ДопСообщениеОшибки = "") Экспорт + СообщениеОшибки = "Значение ("+ПроверяемоеЗначение+") заполнено, а ожидалась незаполненность" + ФорматДСО(ДопСообщениеОшибки); + Попытка + фЗаполнено = ЗначениеЗаполнено(ПроверяемоеЗначение); + Исключение + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецПопытки; + Если фЗаполнено Тогда + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьТип(значение, ТипИлиИмяТипа, ДопСообщениеОшибки = "") Экспорт + Если ТипЗнч(ТипИлиИмяТипа) = Тип("Строка") Тогда + искомыйТип = Тип(ТипИлиИмяТипа); + ИначеЕсли ТипЗнч(ТипИлиИмяТипа) = Тип("Тип") Тогда + искомыйТип = ТипИлиИмяТипа; + Иначе + ВызватьИсключение ("ПроверитьТип: Тип значения параметра ТипИлиИмяТипа должен быть <Тип> или <Строка>, а получили <"+ ТипЗнч(ТипИлиИмяТипа) + ">" + ФорматДСО(ДопСообщениеОшибки)); + КонецЕсли; + Если ТипЗнч(значение) <> искомыйТип Тогда + ВызватьОшибкуПроверки("Типом значения <"+значение+"> является <"+ТипЗнч(значение)+">, а ожидался тип <"+ТипИлиИмяТипа+">."+ФорматДСО(ДопСообщениеОшибки)); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьВхождение(строка, подстрокаПоиска, ДопСообщениеОшибки = "") Экспорт + Если Найти(строка, подстрокаПоиска) = 0 Тогда + ПредставлениеСтроки = "<"+строка+">"; + Если СтрДлина(строка) > 20 Тогда + ПредставлениеСтроки = ПредставлениеСтроки + Символы.ПС; + КонецЕсли; + ПредставлениеПодСтроки = "<"+подстрокаПоиска+">"; + Если СтрДлина(подстрокаПоиска) > 20 Тогда + ПредставлениеПодСтроки = ПредставлениеПодСтроки + Символы.ПС; + КонецЕсли; + СообщениеОшибки = "Искали в "+ПредставлениеСтроки+" подстроку "+ПредставлениеПодСтроки+", но не нашли." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +//Коллекция - Массив, Структура, Соответствие, ФиксированныйМассив, ФиксированнаяСтруктура, ФиксированноеСоответствие, СписокЗначений +&НаКлиенте +Процедура ПроверитьВхождениеВКоллекцию(Элемент, Коллекция, ДопСообщениеОшибки = "") Экспорт + Нашли = Неопределено; + ТипКоллекции = ТипЗнч(Коллекция); + Если ТипКоллекции = Тип("Массив") или ТипКоллекции = Тип("ФиксированныйМассив") Тогда + Нашли = Коллекция.Найти(Элемент) <> Неопределено; + ИначеЕсли ТипКоллекции = Тип("Структура") или ТипКоллекции = Тип("Соответствие") + или ТипКоллекции = Тип("ФиксированнаяСтруктура") или ТипКоллекции = Тип("ФиксированноеСоответствие") Тогда + Для каждого КлючЗначение Из Коллекция Цикл + Нашли = КлючЗначение.Значение = Элемент; + Если Нашли Тогда + Прервать; + КонецЕсли; + КонецЦикла; + ИначеЕсли ТипКоллекции = Тип("СписокЗначений") Тогда + Нашли = Коллекция.НайтиПоЗначению(Элемент) <> Неопределено; + КонецЕсли; + Если Нашли = Неопределено Тогда + СообщениеОшибки = "Утверждение ""ПроверитьВхождениеВКоллекцию"" не умеет работать с типом коллекции <"+ТипКоллекции+">." + ФорматДСО(ДопСообщениеОшибки); + ВызватьИсключение СообщениеОшибки; + КонецЕсли; + Если Не Нашли Тогда + СообщениеОшибки = "Не нашли элемент <"+Элемент+"> в коллекции, а хотели, чтобы он был в коллекции." + ФорматДСО(ДопСообщениеОшибки); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьВалидностьЗапросаСКД(ТекстЗапроса, ДопСообщениеОшибки = "") Экспорт + ПроверитьВалидностьЗапросаСКДНаСервере(ТекстЗапроса, ДопСообщениеОшибки); +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениям(ТабДок1, ТабДок2, УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки = Ложь, УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки = Ложь, Знач ДопСообщениеОшибки = "") Экспорт + ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениямСервер(ТабДок1, ТабДок2, УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки, УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки, ДопСообщениеОшибки); +КонецПроцедуры + +&НаСервере +Процедура ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениямСервер(ТабДок1, ТабДок2, УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки = Ложь, УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки = Ложь, Знач ДопСообщениеОшибки = "") Экспорт + Объект().ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениям(ТабДок1, ТабДок2, УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки, УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки, ДопСообщениеОшибки); +КонецПроцедуры + +&НаКлиенте +Процедура ВызватьОшибкуПроверки(СообщениеОшибки) + + Префикс = "[" + СтатусыРезультатаТестирования.ОшибкаПроверки + "]"; + ВызватьИсключение Префикс + " " + СообщениеОшибки; + +КонецПроцедуры + +&НаКлиенте +Процедура ПропуститьТест(Знач Сообщение = "") Экспорт + + Префикс = "[" + СтатусыРезультатаТестирования.ТестПропущен + "]"; + Если ПустаяСтрока(Сообщение) Тогда + Сообщение = НСтр("ru = 'Тест пропущен'"); + КонецЕсли; + ВызватьИсключение Префикс + " " + Сообщение; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьВалидностьЗапросаСКДНаСервере(ТекстЗапроса, ДопСообщениеОшибки = "") + Объект().ПроверитьВалидностьЗапросаСКД(ТекстЗапроса, ДопСообщениеОшибки); +КонецПроцедуры +// } + +&НаКлиенте +Функция ФорматДСО(ДопСообщениеОшибки) + Если ДопСообщениеОшибки = "" Тогда + Возврат ""; + КонецЕсли; + + Возврат Символы.ПС + ДопСообщениеОшибки; +КонецФункции + +&НаСервере +Функция Объект() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции + +СтатусыРезультатаТестирования = Новый Структура; +СтатусыРезультатаТестирования.Вставить("ОшибкаПроверки", "Failed"); +СтатусыРезультатаТестирования.Вставить("НеизвестнаяОшибка", "Broken"); +СтатусыРезультатаТестирования.Вставить("ТестПропущен", "Pending"); +СтатусыРезультатаТестирования = Новый ФиксированнаяСтруктура(СтатусыРезультатаТестирования); diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213.xml" new file mode 100644 index 000000000..8eea79b0b --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213.xml" @@ -0,0 +1,34 @@ + + + + + + 61246342-9a0f-49d6-9b9e-726b5f607d44 + 777524cb-341e-4fc4-80b3-582edf19b399 + + + 41a92690-ab41-487e-9a10-c964a0a71bab + 5eeffb20-0ba8-490c-bfc9-7658a6c1a529 + + + + ВременныеФайлы + + + ru + Временные файлы + + + + false + DataProcessor.ВременныеФайлы.Form.Форма + + false + + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..a6be3506f --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213/Ext/ObjectModule.bsl" @@ -0,0 +1,102 @@ + +////////////////////////////////////////////////////////////////// +// +// Простой хелпер создания временных файлов и каталогов +// +////////////////////////////////////////////////////////////////// + +//#Использовать logos + +Перем мВременныеФайлы; +//Перем Лог; + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Утилита); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "ВременныеФайлы"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры +// } Plugin interface + +///////////////////////////////////////////////////////////////////////// +// Программный интерфейс + +Функция НовоеИмяФайла(Знач Расширение = "tmp") Экспорт + + ИмяВремФайла = ПолучитьИмяВременногоФайла(Расширение); + мВременныеФайлы.Добавить(ИмяВремФайла); + + Возврат ИмяВремФайла; + +КонецФункции + +Функция СоздатьФайл(Знач Расширение = "tmp") Экспорт + + ИмяФайла = НовоеИмяФайла(Расширение); + ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI); + ЗаписьТекста.Закрыть(); + Возврат ИмяФайла; + +КонецФункции + +Функция СоздатьКаталог_(Знач Расширение = "tmp") Экспорт + + ИмяФайла = НовоеИмяФайла(Расширение); + СоздатьКаталог(ИмяФайла); + + Возврат ИмяФайла; + +КонецФункции + +Процедура Удалить() Экспорт + + КрайнийИндекс = мВременныеФайлы.Количество()-1; + Для Сч = 0 По КрайнийИндекс Цикл + + Индекс = КрайнийИндекс-Сч; + ИмяВременногоФайла = мВременныеФайлы[Индекс]; + Если БезопасноУдалитьФайл(ИмяВременногоФайла) Тогда + мВременныеФайлы.Удалить(Индекс); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Функция УдалитьФайл(Знач Путь) Экспорт + Возврат БезопасноУдалитьФайл(Путь); +КонецФункции + +Функция БезопасноУдалитьФайл(Знач Путь) Экспорт + + Попытка + УдалитьФайлы(Путь); + Возврат Истина; + Исключение + ТекстОшибки = "Попытка удаления "+Путь+" закончилась неудачей, по причине "+ОписаниеОшибки(); + УдаляемыйФайл = Новый Файл(Путь); + Если УдаляемыйФайл.ЭтоФайл() и УдаляемыйФайл.ПолучитьТолькоЧтение() Тогда + УдаляемыйФайл.УстановитьТолькоЧтение(Ложь); + Попытка + УдалитьФайлы(Путь); + Возврат Истина; + Исключение + //Лог.Предупреждение(ТекстОшибки); + КонецПопытки; + Иначе + //Лог.Предупреждение(ТекстОшибки); + КонецЕсли; + КонецПопытки; + + Возврат Ложь; + +КонецФункции + +мВременныеФайлы = Новый Массив; +//Лог = Логирование.ПолучитьЛог("oscript.app.tempfiles"); \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..4566918e2 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..1e76386ce --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.ВременныеФайлы + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..c8ecf2899 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\222\321\200\320\265\320\274\320\265\320\275\320\275\321\213\320\265\320\244\320\260\320\271\320\273\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,19 @@ + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции +// } Helpers diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML.xml" new file mode 100644 index 000000000..de1da74ab --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML.xml" @@ -0,0 +1,163 @@ + + + + + + 34d3e7a1-d956-4b27-b02f-72da65b7b961 + 0098a90c-15f5-49cb-b685-df792b2c4b30 + + + 24518f9a-7802-4cfb-a587-80f522fc1f97 + 531d1ba5-bbcf-43c8-9112-90e30eefea16 + + + + ГенераторОтчетаJUnitXML + + + ru + Генератор отчета JUnit XML + + + + false + DataProcessor.ГенераторОтчетаJUnitXML.Form.Форма + + false + + + + + + + ТипыУзловДереваТестов + + + ru + Типы узлов дерева тестов + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ИконкиУзловДереваТестов + + + ru + Иконки узлов дерева тестов + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СостоянияТестов + + + ru + Состояния тестов + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СтатусыJUnit + + + ru + Статусы junit + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + +
Форма
+ +
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..63a27256e --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Ext/ObjectModule.bsl" @@ -0,0 +1,115 @@ + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.ГенераторОтчета); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "Отчет о тестировании в формате MXL"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры +// } Plugin interface + +// { Report generator interface +Функция СоздатьОтчет(КонтекстЯдра, РезультатыТестирования) Экспорт + ПостроительДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов"); + ЭтотОбъект.ТипыУзловДереваТестов = ПостроительДереваТестов.ТипыУзловДереваТестов; + ЭтотОбъект.СостоянияТестов = КонтекстЯдра.СостоянияТестов; + Отчет = СоздатьОтчетНаСервере(РезультатыТестирования); + + Возврат Отчет; +КонецФункции + +Функция СоздатьОтчетНаСервере(РезультатыТестирования) Экспорт + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("testsuites"); + ЗаписьXML.ЗаписатьАтрибут("name", XMLСтрока(РезультатыТестирования.Имя)); + ЗаписьXML.ЗаписатьАтрибут("time", XMLСтрока(РезультатыТестирования.ВремяВыполнения)); + ЗаписьXML.ЗаписатьАтрибут("tests", XMLСтрока(РезультатыТестирования.КоличествоТестов)); + ЗаписьXML.ЗаписатьАтрибут("failures", XMLСтрока(РезультатыТестирования.КоличествоСломанныхТестов)); + ЗаписьXML.ЗаписатьАтрибут("errors", XMLСтрока(РезультатыТестирования.КоличествоОшибочныхТестов)); + ЗаписьXML.ЗаписатьАтрибут("skipped", XMLСтрока(РезультатыТестирования.КоличествоНеРеализованныхТестов)); + + ВывестиДанныеОтчетаТестированияРекурсивно(ЗаписьXML, РезультатыТестирования); + + ЗаписьXML.ЗаписатьКонецЭлемента(); + + СтрокаXML = ЗаписьXML.Закрыть(); + Отчет = Новый ТекстовыйДокумент; + Отчет.ДобавитьСтроку(СтрокаXML); + + Возврат Отчет; +КонецФункции + +Процедура ВывестиДанныеОтчетаТестированияРекурсивно(ЗаписьXML, РезультатыТестирования, ИмяРодителя = "") + Если РезультатыТестирования.Тип = ТипыУзловДереваТестов.Контейнер Тогда + ЗаписьXML.ЗаписатьНачалоЭлемента("testsuite"); + ЗаписьXML.ЗаписатьАтрибут("name", РезультатыТестирования.Имя); + Для Каждого ЭлементКоллекции Из РезультатыТестирования.Строки Цикл + ВывестиДанныеОтчетаТестированияРекурсивно(ЗаписьXML, ЭлементКоллекции, РезультатыТестирования.Имя); + КонецЦикла; + ЗаписьXML.ЗаписатьКонецЭлемента(); + Иначе + ВывестиРезультатЭлемента(ЗаписьXML, РезультатыТестирования, ИмяРодителя); + КонецЕсли; +КонецПроцедуры + +Процедура ВывестиРезультатЭлемента(ЗаписьXML, РезультатыТестирования, ИмяРодителя) + ЗаписьXML.ЗаписатьНачалоЭлемента("testcase"); + ЗаписьXML.ЗаписатьАтрибут("classname", XMLСтрока(ИмяРодителя)); + ЗаписьXML.ЗаписатьАтрибут("name", XMLСтрока(РезультатыТестирования.Представление)); + ЗаписьXML.ЗаписатьАтрибут("time", XMLСтрока(РезультатыТестирования.ВремяВыполнения)); + + Если РезультатыТестирования.Состояние = СостоянияТестов.Пройден Тогда + ЗаписьXML.ЗаписатьАтрибут("status", "passed"); + ИначеЕсли РезультатыТестирования.Состояние = СостоянияТестов.НеРеализован Тогда + СтатусJUnit = "skipped"; + ЗаписьXML.ЗаписатьАтрибут("status", СтатусJUnit); + ЗаписьXML.ЗаписатьНачалоЭлемента(СтатусJUnit); + ЗаписьXML.ЗаписатьКонецЭлемента(); + ИначеЕсли РезультатыТестирования.Состояние = СостоянияТестов.Сломан Тогда + СтатусJUnit = "failure"; + ЗаписьXML.ЗаписатьАтрибут("status", СтатусJUnit); + ЗаписьXML.ЗаписатьНачалоЭлемента(СтатусJUnit); + Сообщение = УдалитьНедопустимыеСимволыXML(РезультатыТестирования.Сообщение); + ЗаписьXML.ЗаписатьАтрибут("message", XMLСтрока(Сообщение)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + ИначеЕсли РезультатыТестирования.Состояние = СостоянияТестов.НеизвестнаяОшибка Тогда + СтатусJUnit = "error"; + ЗаписьXML.ЗаписатьАтрибут("status", СтатусJUnit); + ЗаписьXML.ЗаписатьНачалоЭлемента(СтатусJUnit); + Сообщение = УдалитьНедопустимыеСимволыXML(РезультатыТестирования.Сообщение); + ЗаписьXML.ЗаписатьАтрибут("message", XMLСтрока(Сообщение)); + ЗаписьXML.ЗаписатьКонецЭлемента(); + КонецЕсли; + ЗаписьXML.ЗаписатьКонецЭлемента(); +КонецПроцедуры + +#Если ТолстыйКлиентОбычноеПриложение Тогда +Процедура Показать(Отчет) Экспорт + Отчет.Показать(); +КонецПроцедуры +#КонецЕсли + +Процедура Экспортировать(Отчет, ПолныйПутьФайла) Экспорт + Отчет.Записать(ПолныйПутьФайла); +КонецПроцедуры +// } Report generator interface + +// { Helpers +Функция УдалитьНедопустимыеСимволыXML(Знач Результат) + Позиция = НайтиНедопустимыеСимволыXML(Результат); + Пока Позиция > 0 Цикл + Результат = Лев(Результат, Позиция - 1) + Сред(Результат, Позиция + 1); + Позиция = НайтиНедопустимыеСимволыXML(Результат, Позиция); + КонецЦикла; + + Возврат Результат; +КонецФункции +// } Helpers diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..4e7ece186 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..da3afde50 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.ГенераторОтчетаJUnitXML + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..9f00ea34d --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,44 @@ + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +// { Report generator interface +&НаКлиенте +Функция СоздатьОтчет(КонтекстЯдра, РезультатыТестирования) Экспорт + Объект.ТипыУзловДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов").Объект.ТипыУзловДереваТестов; + Объект.СостоянияТестов = КонтекстЯдра.Объект.СостоянияТестов; + Возврат СоздатьОтчетНаСервере(РезультатыТестирования); +КонецФункции + +&НаСервере +Функция СоздатьОтчетНаСервере(РезультатыТестирования) + Возврат ЭтотОбъектНаСервере().СоздатьОтчетНаСервере(РезультатыТестирования); +КонецФункции + +&НаКлиенте +Процедура Показать(Отчет) Экспорт + Отчет.Показать(); +КонецПроцедуры + +&НаКлиенте +Процедура Экспортировать(Отчет, ПолныйПутьФайла) Экспорт + Отчет.Записать(ПолныйПутьФайла); +КонецПроцедуры +// } Report generator interface + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции +// } Helpers + diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Templates/\320\241\321\205\320\265\320\274\320\260JUnit4.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Templates/\320\241\321\205\320\265\320\274\320\260JUnit4.xml" new file mode 100644 index 000000000..b3b7d8e02 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Templates/\320\241\321\205\320\265\320\274\320\260JUnit4.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Templates/\320\241\321\205\320\265\320\274\320\260JUnit4/Ext/Template.txt" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Templates/\320\241\321\205\320\265\320\274\320\260JUnit4/Ext/Template.txt" new file mode 100644 index 000000000..77cab717c --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Templates/\320\241\321\205\320\265\320\274\320\260JUnit4/Ext/Template.txt" @@ -0,0 +1,206 @@ + + + + + JUnit test result schema for the Apache Ant JUnit and JUnitReport tasks +Copyright © 2011, Windy Road Technology Pty. Limited +The Apache Ant JUnit XML Schema is distributed under the terms of the GNU Lesser General Public License (LGPL) http://www.gnu.org/licenses/lgpl.html +Permission to waive conditions of this license may be requested from Windy Road Support (http://windyroad.org/support). + + + + + + + + + + Contains an aggregation of testsuite results + + + + + + + + + + Derived from testsuite/@name in the non-aggregated documents + + + + + Starts at '0' for the first testsuite and is incremented by 1 for each following testsuite + + + + + + + + + + + + Contains the results of exexuting a testsuite + + + + + Properties (e.g., environment settings) set during test execution + + + + + + + + + + + + + + + + + + + + + + + + Indicates that the test errored. An errored test is one that had an unanticipated problem. e.g., an unchecked throwable; or a problem with the implementation of the test. Contains as a text node relevant data for the error, e.g., a stack trace + + + + + + + The error message. e.g., if a java exception is thrown, the return value of getMessage() + + + + + The type of error that occured. e.g., if a java execption is thrown the full class name of the exception. + + + + + + + + + Indicates that the test failed. A failure is a test which the code has explicitly failed by using the mechanisms for that purpose. e.g., via an assertEquals. Contains as a text node relevant data for the failure, e.g., a stack trace + + + + + + + The message specified in the assert + + + + + The type of the assert. + + + + + + + + + + Name of the test method + + + + + Full class name for the class the test method is in. + + + + + Time taken (in seconds) to execute the test + + + + + + + Data that was written to standard out while the test was executed + + + + + + + + + + Data that was written to standard error while the test was executed + + + + + + + + + + + Full class name of the test for non-aggregated testsuite documents. Class name without the package for aggregated testsuites documents + + + + + + + + + + when the test was executed. Timezone may not be specified. + + + + + Host on which the tests were executed. 'localhost' should be used if the hostname cannot be determined. + + + + + + + + + + The total number of tests in the suite + + + + + The total number of tests in the suite that failed. A failure is a test which the code has explicitly failed by using the mechanisms for that purpose. e.g., via an assertEquals + + + + + The total number of tests in the suite that errorrd. An errored test is one that had an unanticipated problem. e.g., an unchecked throwable; or a problem with the implementation of the test. + + + + + Time taken (in seconds) to execute the tests in the suite + + + + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL.xml" new file mode 100644 index 000000000..a2a5e72ca --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL.xml" @@ -0,0 +1,99 @@ + + + + + + a04f8187-ec37-4bc7-a9e7-094a9f9f4782 + a2f8dce6-6d9c-44ad-be59-5bbb0bfc6ff1 + + + 6c288d37-5757-40b7-8204-90e6dd3cce64 + 8a890cc3-0df9-4550-ab0d-21213a4b1245 + + + + ГенераторОтчетаMXL + + + ru + Генератор отчета MXL + + + + false + DataProcessor.ГенераторОтчетаMXL.Form.Форма + + false + + + + + + + ТипыУзловДереваТестов + + + ru + Типы узлов дерева тестов + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СостоянияТестов + + + ru + Состояния тестов + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + +
Форма
+ +
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..4be4b5044 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Ext/ObjectModule.bsl" @@ -0,0 +1,81 @@ + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.ГенераторОтчета); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "Отчет о тестировании в формате MXL"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры +// } Plugin interface + +// { Report generator interface +Функция СоздатьОтчет(КонтекстЯдра, РезультатыТестирования) Экспорт + ЭтотОбъект.ТипыУзловДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов").ТипыУзловДереваТестов; + ЭтотОбъект.СостоянияТестов = КонтекстЯдра.СостоянияТестов; + Отчет = СоздатьОтчетНаСервере(РезультатыТестирования); + + Возврат Отчет; +КонецФункции + +Функция СоздатьОтчетНаСервере(РезультатыТестирования) Экспорт + Если (РезультатыТестирования.КоличествоСломанныхТестов = 0) И (РезультатыТестирования.КоличествоОшибочныхТестов = 0) И (РезультатыТестирования.КоличествоНеРеализованныхТестов = 0) Тогда + Возврат Неопределено; + КонецЕсли; + + МакетОтчетТестирования = ПолучитьМакет("ОтчетТестирования"); + Отчет = Новый ТабличныйДокумент; + ОбластьЗаголовок = МакетОтчетТестирования.ПолучитьОбласть("Заголовок"); + ЗаполнитьЗначенияСвойств(ОбластьЗаголовок.Параметры, РезультатыТестирования); + ОбластьЗаголовок.Параметры.ВремяВыполненияСтрока = Формат(Дата(1, 1, 1) + РезультатыТестирования.ВремяВыполнения, "ДЛФ=T"); + Отчет.Вывести(ОбластьЗаголовок); + + Отчет.НачатьАвтогруппировкуСтрок(); + ВывестиДанныеОтчетаТестированияРекурсивно(ТипыУзловДереваТестов, СостоянияТестов, РезультатыТестирования, МакетОтчетТестирования, Отчет); + Отчет.ЗакончитьАвтогруппировкуСтрок(); + + Отчет.ОтображатьСетку = Ложь; + Отчет.Защита = Ложь; + Отчет.ТолькоПросмотр = Ложь; + Отчет.ОтображатьЗаголовки = Ложь; + + Возврат Отчет; +КонецФункции + +Процедура ВывестиДанныеОтчетаТестированияРекурсивно(ТипыУзловДереваТестов, СостоянияТестов, РезультатыТестирования, МакетОтчетТестирования, Отчет, Уровень = 0) + Если РезультатыТестирования.Состояние <> СостоянияТестов.Пройден Тогда + Если РезультатыТестирования.Тип = ТипыУзловДереваТестов.Контейнер Тогда + ОбластьКонтейнер = МакетОтчетТестирования.ПолучитьОбласть("Контейнер"); + ОбластьКонтейнер.Параметры.ИмяКонтейнера = РезультатыТестирования.Имя; + Отчет.Вывести(ОбластьКонтейнер, Уровень); + Для каждого ЭлементКоллекции Из РезультатыТестирования.Строки Цикл + ВывестиДанныеОтчетаТестированияРекурсивно(ТипыУзловДереваТестов, СостоянияТестов, ЭлементКоллекции, МакетОтчетТестирования, Отчет, Уровень + 1); + КонецЦикла; + Иначе + ОбластьЭлемент = МакетОтчетТестирования.ПолучитьОбласть("Элемент"); + ОбластьЭлемент.Параметры.ИмяМетода = РезультатыТестирования.Представление; + ОбластьЭлемент.Параметры.Путь = РезультатыТестирования.Путь; + ОбластьЭлемент.Параметры.Сообщение = РезультатыТестирования.Сообщение; + ОбластьЭлемент.Области.Элемент.Отступ = Уровень * 2; + Отчет.Вывести(ОбластьЭлемент, Уровень); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +#Если ТолстыйКлиентОбычноеПриложение Тогда +Процедура Показать(Отчет) Экспорт + Если Отчет <> Неопределено Тогда + ЗаголовокОкнаОтчета = НСтр("ru = 'Отчет об автоматическом тестировании'"); + Отчет.Показать(ЗаголовокОкнаОтчета); + КонецЕсли; +КонецПроцедуры +#КонецЕсли + +Процедура Экспортировать(Отчет, ПолныйПутьФайла) Экспорт + ВызватьИсключение "Метод не реализован"; +КонецПроцедуры +// } Report generator interface diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..3e7149b16 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..1bf4c9c49 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.ГенераторОтчетаMXL + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..793020bfd --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,46 @@ + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +// { Report generator interface +&НаКлиенте +Функция СоздатьОтчет(КонтекстЯдра, РезультатыТестирования) Экспорт + Объект.ТипыУзловДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов").Объект.ТипыУзловДереваТестов; + Объект.СостоянияТестов = КонтекстЯдра.Объект.СостоянияТестов; + Возврат СоздатьОтчетНаСервере(РезультатыТестирования); +КонецФункции + +&НаСервере +Функция СоздатьОтчетНаСервере(РезультатыТестирования) + Возврат ЭтотОбъектНаСервере().СоздатьОтчетНаСервере(РезультатыТестирования); +КонецФункции + +&НаКлиенте +Процедура Показать(Отчет) Экспорт + Если Отчет <> Неопределено Тогда + ЗаголовокОкнаОтчета = НСтр("ru = 'Отчет об автоматическом тестировании'"); + Отчет.Показать(ЗаголовокОкнаОтчета); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Экспортировать(Отчет, ПолныйПутьФайла) Экспорт + ВызватьИсключение "Метод не реализован"; +КонецПроцедуры +// } Report generator interface + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции +// } Helpers diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Templates/\320\236\321\202\321\207\320\265\321\202\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Templates/\320\236\321\202\321\207\320\265\321\202\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217.xml" new file mode 100644 index 000000000..c8c488168 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Templates/\320\236\321\202\321\207\320\265\321\202\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Templates/\320\236\321\202\321\207\320\265\321\202\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Templates/\320\236\321\202\321\207\320\265\321\202\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217/Ext/Template.xml" new file mode 100644 index 000000000..2ae3b3d68 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Templates/\320\236\321\202\321\207\320\265\321\202\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217/Ext/Template.xml" @@ -0,0 +1,184 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 1 + + 0 + + 1 + + + + + 1 + + 2 + + + 3 + + + ru + Запущено тестов - [КоличествоТестов], ошибочных тестов - [КоличествоОшибочныхТестов], не прошло проверку - [КоличествоСломанныхТестов], пропущено - [КоличествоНеРеализованныхТестов] + + + + + + + + 2 + + 2 + + + 4 + + + ru + Общее время выполнения: [ВремяВыполнения] ( [ВремяВыполненияСтрока] сек. ) + + + + + + + + 5 + + + + 5 + + + ru + [ИмяКонтейнера] + + + + + + + + 8 + + 6 + + + 7 + + + ru + [ИмяМетода], путь [Путь] + + + + + + + + 9 + + 2 + + + 0 + + + + + + 10 + + + + 2 + + + ru + [Сообщение] + + + + + + + true + 8 + 11 + 11 + + Заголовок + + Rows + 1 + 2 + -1 + -1 + + + + Контейнер + + Rows + 4 + 5 + -1 + -1 + + + + Элемент + + Rows + 7 + 10 + -1 + -1 + + + + + 946 + + + Template + + + 0 + d3p1:FireBrick + Template + + + 0 + Template + + + 0 + Template + 2 + + + 0 + d3p1:IndianRed + Template + + + 0 + 72 + d3p1:IndianRed + Template + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.xml" new file mode 100644 index 000000000..63fdc8663 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.xml" @@ -0,0 +1,36 @@ + + + + + + b6e00ba1-9825-4b58-b46a-a7c8fd541c73 + 423f3c29-65bb-4e60-b669-d84cf743dd12 + + + f621c2b2-9619-4955-8dbd-440f5c92a04f + 6efa2dd9-e8a4-4f64-907a-c898be2f6996 + + + + ЗагрузчикИзПодсистемКонфигурации + + + ru + Загрузчик из подсистем конфигурации + + + + false + DataProcessor.ЗагрузчикИзПодсистемКонфигурации.Form.УправляемаяФорма + + false + + + + +
УправляемаяФорма
+
ФормаВыбораПодсистемы
+
ФормаВыбораПодсистемУФ
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..9c5a0a312 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Ext/ObjectModule.bsl" @@ -0,0 +1,332 @@ +Перем мЗначенияТиповСтроки Экспорт; + +Перем КэшПостроительДереваТестов; +Перем ЗагружаемыйПуть; + +Перем КонтейнерТестов; +Перем ТекущаяГруппа; + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Загрузчик); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "Загрузить тесты из конфигурации"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры +// } Plugin interface + +// { Loader interface +#Если ТолстыйКлиентОбычноеПриложение Тогда +Функция ВыбратьПутьИнтерактивно(КонтекстЯдра, ТекущийПуть = "") Экспорт + ФормаВыбораПодсистем = ЭтотОбъект.ПолучитьФорму("ФормаВыбораПодсистемы"); + ФормаВыбораПодсистем.РежимВыбора = Истина; + ФормаВыбораПодсистем.ОтборПоИмениТеста = ""; + ВыбранныйПуть = ФормаВыбораПодсистем.ОткрытьМодально(); + + Возврат ВыбранныйПуть; +КонецФункции +#КонецЕсли + +Функция Загрузить(КонтекстЯдра, Путь) Экспорт + Перем ДеревоТестов; + + ПостроительДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов"); + ЗагрузчикФайла = КонтекстЯдра.Плагин("ЗагрузчикФайла"); + + ДеревоТестов = ЗагрузитьПуть(Путь, ПостроительДереваТестов, ЗагрузчикФайла); + + Возврат ДеревоТестов; +КонецФункции + +Функция ПолучитьКонтекстПоПути(КонтекстЯдра, Путь) Экспорт + ОбъектМетаданных = ПолучитьОбъектМетаданныхПоПути(Путь); + Контекст = СоздатьОбработкуПоМетаданным(ОбъектМетаданных); + + Возврат Контекст; +КонецФункции +// } Loader interface + +Функция ЗагрузитьПуть(Путь, ПостроительДереваТестов, ЗагрузчикФайла) Экспорт + ОбъектМетаданных = ПолучитьОбъектМетаданныхПоПути(Путь); + ДеревоТестов = ОбработатьОбъектМетаданных(ОбъектМетаданных, ПостроительДереваТестов, ЗагрузчикФайла); + + Возврат ДеревоТестов; +КонецФункции + +Функция ПолучитьОбъектМетаданныхПоПути(Путь) Экспорт + Перем ОбъектКонфигурации; + Попытка + Выполнить("ОбъектКонфигурации = " + Путь); + Исключение + ВызватьИсключение "Передан невалидный путь <" + Путь + ">"; + КонецПопытки; + + Возврат ОбъектКонфигурации; +КонецФункции + +Функция ОбработатьОбъектМетаданных(ОбъектМетаданных, ПостроительДереваТестов, ЗагрузчикФайла) + Если ЭтоПодсистема(ОбъектМетаданных) Тогда + Контейнер = ЗагрузитьПодсистему(ОбъектМетаданных, ПостроительДереваТестов, ЗагрузчикФайла); + Иначе + Контейнер = ЗагрузитьОбработку(ОбъектМетаданных, ПостроительДереваТестов, ЗагрузчикФайла); + КонецЕсли; + + Возврат Контейнер; +КонецФункции + +Функция ЭтоПодсистема(ОбъектМетаданных) + Возврат (Найти(НРег(ОбъектМетаданных.ПолноеИмя()), НРег("Подсистема")) > 0); +КонецФункции + +Функция ЗагрузитьПодсистему(Подсистема, ПостроительДереваТестов, ЗагрузчикФайла) + Контейнер = ПостроительДереваТестов.СоздатьКонтейнер(Подсистема.Имя, ПостроительДереваТестов.ИконкиУзловДереваТестов.Подсистема); + Для каждого ПодчиненнаяПодсистема Из Подсистема.Подсистемы цикл + КонтейнерПодчиненнойПодсистемы = ЗагрузитьПодсистему(ПодчиненнаяПодсистема, ПостроительДереваТестов, ЗагрузчикФайла); + Если КонтейнерПодчиненнойПодсистемы.Строки.Количество() > 0 Тогда + Контейнер.Строки.Добавить(КонтейнерПодчиненнойПодсистемы); + КонецЕсли; + КонецЦикла; + + Для каждого ДочернееМетаданное Из Подсистема.Состав цикл + Если Метаданные.Обработки.Найти(ДочернееМетаданное.Имя) <> Неопределено + ИЛИ Метаданные.Отчеты.Найти(ДочернееМетаданное.Имя) <> Неопределено Тогда + КонтейнерСТестамиОбработки = ЗагрузитьОбработку(ДочернееМетаданное, ПостроительДереваТестов, ЗагрузчикФайла); + Если КонтейнерСТестамиОбработки.Строки.Количество() > 0 Тогда + Контейнер.Строки.Добавить(КонтейнерСТестамиОбработки); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Контейнер; +КонецФункции + +Функция ЗагрузитьОбработку(МетаданныеОбработки, ПостроительДереваТестов, ЗагрузчикФайла) Экспорт + Обработка = СоздатьОбработкуПоМетаданным(МетаданныеОбработки); + Попытка + Контейнер = ЗагрузитьТестыВНовомФормате(ПостроительДереваТестов, Обработка, МетаданныеОбработки, ЗагрузчикФайла); + Исключение + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ЭтоНовыйФорматОбработки(ТекстОшибки) Тогда + ВызватьИсключение; + Иначе + Контейнер = ЗагрузитьТестыВСтаромФормате(ПостроительДереваТестов, Обработка, МетаданныеОбработки, ЗагрузчикФайла); + КонецЕсли; + КонецПопытки; + + Возврат Контейнер; +КонецФункции + +Функция ЗагрузитьТестыВНовомФормате(ПостроительДереваТестов, Обработка, МетаданныеОбработки, ЗагрузчикФайла) + КэшПостроительДереваТестов = ПостроительДереваТестов; + Если Метаданные.Обработки.Содержит(МетаданныеОбработки) Тогда + ЗагружаемыйПуть = СтрЗаменить("Метаданные." + МетаданныеОбработки.ПолноеИмя(), ".Обработка.", ".Обработки."); + ИконкаУзла = ПостроительДереваТестов.ИконкиУзловДереваТестов.Обработка; + ИначеЕсли Метаданные.Отчеты.Содержит(МетаданныеОбработки) Тогда + ЗагружаемыйПуть = СтрЗаменить("Метаданные." + МетаданныеОбработки.ПолноеИмя(), ".Отчет.", ".Отчеты."); + ИконкаУзла = ПостроительДереваТестов.ИконкиУзловДереваТестов.Отчет; + КонецЕсли; + КонтейнерТестов = ПостроительДереваТестов.СоздатьКонтейнер(МетаданныеОбработки.Имя, ИконкаУзла); + Обработка.ЗаполнитьНаборТестов(ЭтотОбъект); + Результат = КонтейнерТестов; + КонтейнерТестов = Неопределено; + ТекущаяГруппа = Неопределено; + + Возврат Результат; +КонецФункции + +Функция ЭтоНовыйФорматОбработки(Знач ТекстОшибки) + ЭтоНовыйФорматОбработки = Не ЕстьОшибка_МетодОбъектаНеОбнаружен(ТекстОшибки, "ЗаполнитьНаборТестов"); + + Возврат ЭтоНовыйФорматОбработки; +КонецФункции + +Функция ЗагрузитьТестыВСтаромФормате(ПостроительДереваТестов, Обработка, МетаданныеОбработки, ЗагрузчикФайла) + + Обработка = СоздатьОбработкуПоМетаданным(МетаданныеОбработки); + Попытка + СписокТестов = Обработка.ПолучитьСписокТестов(); + Исключение + Описание = ОписаниеОшибки(); + Если Найти(Описание, "Недостаточно фактических параметров") > 0 Тогда + ВызватьИсключение "Старый формат тестов в обработке тестов <"+МетаданныеОбработки.Имя+">."+Символы.ПС+ + "Метод ПолучитьСписокТестов сейчас не принимает параметров"; + КонецЕсли; + + Если Найти(Описание, "Метод объекта не обнаружен (ПолучитьСписокТестов)") = 0 Тогда + ВызватьИсключение Описание; + КонецЕсли; + КонецПопытки; + + СлучайныйПорядокВыполнения = Истина; + Попытка + СлучайныйПорядокВыполнения = Обработка.РазрешенСлучайныйПорядокВыполненияТестов(); + Исключение + КонецПопытки; + Путь = СтрЗаменить("Метаданные." + МетаданныеОбработки.ПолноеИмя(), ".Обработка.", ".Обработки."); + Контейнер = ПолучитьКонтейнерДереваТестовПоСпискуТестов(ПостроительДереваТестов, ЗагрузчикФайла, СписокТестов, МетаданныеОбработки.Имя, Путь, СлучайныйПорядокВыполнения); + + Возврат Контейнер; +КонецФункции + +Функция ПолучитьКонтейнерДереваТестовПоСпискуТестов(ПостроительДереваТестов, ЗагрузчикФайла, СписокТестов, ИмяКонтейнера, Путь, СлучайныйПорядокВыполнения = Истина) Экспорт + + Контейнер = ЗагрузчикФайла.ПолучитьКонтейнерДереваТестовПоСпискуТестов(ПостроительДереваТестов, СписокТестов, ИмяКонтейнера, Путь, СлучайныйПорядокВыполнения); + + Возврат Контейнер; + +КонецФункции + +Функция СоздатьОбработкуПоМетаданным(МетаданныеОбработки) + Если Метаданные.Обработки.Найти(МетаданныеОбработки.Имя) <> Неопределено Тогда + Возврат Обработки[МетаданныеОбработки.Имя].Создать(); + ИначеЕсли Метаданные.Отчеты.Найти(МетаданныеОбработки.Имя) <> Неопределено Тогда + Возврат Отчеты[МетаданныеОбработки.Имя].Создать(); + Иначе + ВызватьИсключение "Не удалось найти обработку / отчет с идентификатором """+МетаданныеОбработки.Имя+""""; + КонецЕсли; +КонецФункции + +//{ Работа со встроенными в конфигурацию тестами и подсистемами +Процедура ЗаполнитьДеревоПодсистем(ДеревоПодсистем, ОтборПоИмениТеста) Экспорт + Для каждого МетаПодсистема из Метаданные.Подсистемы цикл + ДобавитьПодсистемуВДерево(МетаПодсистема, ДеревоПодсистем, ЭтотОбъект, ОтборПоИмениТеста); + КонецЦикла; +КонецПроцедуры + +Функция ДобавитьПодсистемуВДерево(ТекМетаПодсистема, РодительскаяСтрока, ОбработкаОбъект, ОтборПоИмениТеста) + СтрокаПодсистемы = ПодчиненныеСтроки(РодительскаяСтрока).Добавить(); + СтрокаПодсистемы.Имя = ТекМетаПодсистема.Имя; + СтрокаПодсистемы.Путь = "Метаданные."+СтрЗаменить(ТекМетаПодсистема.ПолноеИмя(), "Подсистема.", "Подсистемы."); + СтрокаПодсистемы.ТипСтроки = мЗначенияТиповСтроки.Подсистема; + Для Каждого Подсистема из ТекМетаПодсистема.Подсистемы Цикл + ДобавитьПодсистемуВДерево(Подсистема,СтрокаПодсистемы, ОбработкаОбъект, ОтборПоИмениТеста); + КонецЦикла; + + Для каждого ОбъектМетаданных из ТекМетаПодсистема.Состав цикл + Если Найти(ОбъектМетаданных.ПолноеИмя(), "Обработка."+ОтборПоИмениТеста) = 1 Тогда + СтрокаТеста = ПодчиненныеСтроки(СтрокаПодсистемы).Добавить(); + СтрокаТеста.Имя = ОбъектМетаданных.Имя; + СтрокаТеста.Путь = "Метаданные."+СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), "Обработка.", "Обработки."); + СтрокаТеста.ТипСтроки = мЗначенияТиповСтроки.ТестовыйСлучай; + ИначеЕсли Найти(ОбъектМетаданных.ПолноеИмя(), "Отчет."+ОтборПоИмениТеста) = 1 Тогда + СтрокаТеста = ПодчиненныеСтроки(СтрокаПодсистемы).Добавить(); + СтрокаТеста.Имя = ОбъектМетаданных.Имя; + СтрокаТеста.Путь = "Метаданные."+СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), "Отчет.", "Отчеты."); + СтрокаТеста.ТипСтроки = мЗначенияТиповСтроки.ТестовыйСлучайОтчет; + КонецЕсли; + КонецЦикла; + + Если ПодчиненныеСтроки(СтрокаПодсистемы).Количество() = 0 Тогда + ПодчиненныеСтроки(РодительскаяСтрока).Удалить(СтрокаПодсистемы); + КонецЕсли; + +КонецФункции + +Функция ПодчиненныеСтроки(СтрокаДерева, РезЭтоСтрокаДереваУФ = Ложь) Экспорт + РезЭтоСтрокаДереваУФ = ЭтоСтрокаДереваУФ(СтрокаДерева); + Если Не РезЭтоСтрокаДереваУФ Тогда + Строки = СтрокаДерева.Строки; + Иначе + Строки = СтрокаДерева.ПолучитьЭлементы(); + КонецЕсли; + Возврат Строки; +КонецФункции + +Функция ЭтоСтрокаДереваУФ(СтрокаДерева) + Рез = Ложь; + Если ТипЗнч(СтрокаДерева) = Тип("СтрокаДереваЗначений") ИЛИ ТипЗнч(СтрокаДерева) = Тип("ДеревоЗначений") Тогда + ИначеЕсли ТипЗнч(СтрокаДерева) = Тип("ДанныеФормыЭлементДерева") ИЛИ ТипЗнч(СтрокаДерева) = Тип("ДанныеФормыДерево") Тогда + Рез = Истина; + КонецЕсли; + Возврат Рез; +КонецФункции +//} + +// { API нового формата +Процедура СлучайныйПорядокВыполнения() Экспорт + Если ЗначениеЗаполнено(КонтейнерТестов) Тогда + КонтейнерТестов.СлучайныйПорядокВыполнения = Истина; + КонецЕсли; +КонецПроцедуры + +Процедура СтрогийПорядокВыполнения() Экспорт + Если ЗначениеЗаполнено(КонтейнерТестов) Тогда + КонтейнерТестов.СлучайныйПорядокВыполнения = Ложь; + КонецЕсли; +КонецПроцедуры + +Процедура НачатьГруппу(Знач ИмяГруппы, Знач СтрогийПорядокВыполнения = Ложь) Экспорт + ТекущаяГруппа = КэшПостроительДереваТестов.СоздатьКонтейнер(ИмяГруппы, КэшПостроительДереваТестов.ИконкиУзловДереваТестов.Группа); + ТекущаяГруппа.СлучайныйПорядокВыполнения = Не СтрогийПорядокВыполнения; + КонтейнерТестов.Строки.Добавить(ТекущаяГруппа); +КонецПроцедуры + +Функция Добавить(Знач ИмяМетода, Знач Параметры = Неопределено, Знач Представление = "") Экспорт + Элемент = КэшПостроительДереваТестов.СоздатьЭлемент(ЗагружаемыйПуть, ИмяМетода, Представление); + Если ЗначениеЗаполнено(Параметры) И ТипЗнч(Параметры) = Тип("Массив") Тогда + Элемент.Параметры = Параметры; + КонецЕсли; + Если ЗначениеЗаполнено(ТекущаяГруппа) Тогда + ТекущаяГруппа.Строки.Добавить(Элемент); + Иначе + КонтейнерТестов.Строки.Добавить(Элемент); + КонецЕсли; + + Возврат Элемент; +КонецФункции + +Функция ПараметрыТеста(Знач Парам1, Знач Парам2 = Неопределено, Знач Парам3 = Неопределено, Знач Парам4 = Неопределено, Знач Парам5 = Неопределено, Знач Парам6 = Неопределено, Знач Парам7 = Неопределено, Знач Парам8 = Неопределено, Знач Парам9 = Неопределено) Экспорт + ВсеПараметры = Новый Массив; + ВсеПараметры.Добавить(Парам1); + ВсеПараметры.Добавить(Парам2); + ВсеПараметры.Добавить(Парам3); + ВсеПараметры.Добавить(Парам4); + ВсеПараметры.Добавить(Парам5); + ВсеПараметры.Добавить(Парам6); + ВсеПараметры.Добавить(Парам7); + ВсеПараметры.Добавить(Парам8); + ВсеПараметры.Добавить(Парам9); + + ИндексСПоследнимПараметром = 0; + Для Сч = 0 По ВсеПараметры.ВГраница() Цикл + Индекс = ВсеПараметры.ВГраница() - Сч; + Если ВсеПараметры[Индекс] <> Неопределено Тогда + ИндексСПоследнимПараметром = Индекс; + Прервать; + КонецЕсли; + КонецЦикла; + + ПараметрыТеста = Новый Массив; + Для Сч = 0 По ИндексСПоследнимПараметром Цикл + ПараметрыТеста.Добавить(ВсеПараметры[Сч]); + КонецЦикла; + + Возврат ПараметрыТеста; +КонецФункции +// } API нового формата + +// { Helpers +Функция ЕстьОшибка_МетодОбъектаНеОбнаружен(Знач ТекстОшибки, Знач ИмяМетода) + Результат = Ложь; + Если Найти(текстОшибки, "Метод объекта не обнаружен (" + ИмяМетода + ")") > 0 + ИЛИ Найти(текстОшибки, "Object method not found (" + ИмяМетода + ")") > 0 Тогда + Результат = Истина; + КонецЕсли; + + Возврат Результат; +КонецФункции +// } Helpers + +мЗначенияТиповСтроки = Новый Структура; +мЗначенияТиповСтроки.Вставить("КаталогТестов", 0); +мЗначенияТиповСтроки.Вставить("ТестовыйСлучай", 1); +мЗначенияТиповСтроки.Вставить("ТестовыйСлучайОтчет", 7); +мЗначенияТиповСтроки.Вставить("ТестовыйМетод", 2); +мЗначенияТиповСтроки.Вставить("Подсистема", 3); +мЗначенияТиповСтроки.Вставить("Ошибка", 9); +мЗначенияТиповСтроки = Новый ФиксированнаяСтруктура(мЗначенияТиповСтроки); diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/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.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/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.xml" new file mode 100644 index 000000000..870f82efd --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/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.xml" @@ -0,0 +1,22 @@ + + +
+ + УправляемаяФорма + + + ru + Управляемая форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/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/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/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" new file mode 100644 index 000000000..6140d8764 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/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" @@ -0,0 +1,28 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.ЗагрузчикИзПодсистемКонфигурации + + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Полное имя браузера тестов</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/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/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/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" new file mode 100644 index 000000000..8defe6981 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/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" @@ -0,0 +1,409 @@ +&НаКлиенте +Перем ПостроительДереваТестов; +&НаКлиенте +Перем ЗагружаемыйПуть; + +&НаКлиенте +Перем КонтейнерТестов; +&НаКлиенте +Перем ТекущаяГруппа; + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +// { Loader interface + +&НаКлиенте +Функция ВыбратьПутьИнтерактивно(КонтекстЯдра, ТекущийПуть = "") Экспорт + + ВыбратьПутьИнтерактивноРаботаСОкном(КонтекстЯдра); + +КонецФункции + +&НаКлиенте +Функция Загрузить(КонтекстЯдра, Путь) Экспорт + ПолноеИмяБраузераТестов = КонтекстЯдра.Объект.ПолноеИмяБраузераТестов; + + СтруктураМетаданных = СтруктураМетаданныхПоПереданномуПути(Путь); + ПостроительДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов"); + ДеревоТестов = Неопределено; + ОбработатьОбъектМетаданных(СтруктураМетаданных, ДеревоТестов); + Возврат ДеревоТестов; +КонецФункции + +&НаКлиенте +Функция ПолучитьКонтекстПоПути(КонтекстЯдра, Путь) Экспорт + Перем Контекст; + Если ЭтоПутьККлиентскомуКонтексту(Путь) Тогда + Контекст = ПолучитьКлиентскийКонтекст(КонтекстЯдра, Путь); + Иначе + Контекст = ПолучитьСерверныйКонтекст(КонтекстЯдра, Путь); + КонецЕсли; + + Возврат Контекст; +КонецФункции +// } Loader interface + +&НаКлиенте +Функция ПолучитьКлиентскийКонтекст(КонтекстЯдра, Путь) + ИдентификаторКонтекста = ПолучитьИдентификаторКонтекстаПоПутиНаСервере(Сред(Путь, СтрДлина(ПрефиксПутейСФормами()) + 1)); + ОписаниеКонтекста = ПолучитьФорму("Обработка." + ИдентификаторКонтекста + ".Форма", , ЭтаФорма, Новый УникальныйИдентификатор); + КонтекстЯдра.ПолучитьОписаниеКонтекстаВыполнения(ИдентификаторКонтекста, Истина); + + Возврат ОписаниеКонтекста; +КонецФункции + +&НаКлиенте +Функция ПолучитьСерверныйКонтекст(КонтекстЯдра, Путь) + ИдентификаторКонтекста = ПолучитьИдентификаторКонтекстаПоПутиНаСервере(Путь); + ОписаниеКонтекста = КонтекстЯдра.ПолучитьОписаниеКонтекстаВыполнения(ИдентификаторКонтекста, Истина); + + Возврат ОписаниеКонтекста; +КонецФункции + +&НаСервере +Функция СтруктураМетаданныхПоПереданномуПути(Путь) + ОбъектМетаданных = ЭтотОбъектНаСервере().ПолучитьОбъектМетаданныхПоПути(Путь); + Если ЭтоПодсистема(ОбъектМетаданных.ПолноеИмя()) Тогда + СтруктураМетаданных = СтруктураМетаданныхПодсистемы(ОбъектМетаданных); + Иначе + СтруктураМетаданных = СтрокаДереваМетаданных(ОбъектМетаданных); + КонецЕсли; + Возврат СтруктураМетаданных; +КонецФункции + +&НаСервере +Функция СтруктураМетаданныхПодсистемы(Подсистема) + СтруктураМетаданных = СтрокаДереваМетаданных(Подсистема); + Для Каждого ПодчиненнаяПодсистема Из Подсистема.Подсистемы Цикл + СтруктураМетаданных.Строки.Добавить(СтруктураМетаданныхПодсистемы(ПодчиненнаяПодсистема)); + КонецЦикла; + + Для Каждого ДочернееМетаданное Из Подсистема.Состав цикл + Если Метаданные.Обработки.Найти(ДочернееМетаданное.Имя) <> Неопределено + ИЛИ Метаданные.Отчеты.Найти(ДочернееМетаданное.Имя) <> Неопределено Тогда + СтруктураМетаданныхОбработки = СтрокаДереваМетаданных(ДочернееМетаданное); + СтруктураМетаданных.Строки.Добавить(СтруктураМетаданныхОбработки); + КонецЕсли; + КонецЦикла; + + Возврат СтруктураМетаданных; +КонецФункции + +&НаСервере +Функция СтрокаДереваМетаданных(ОбъектМетаданных) + СтрокаДерева = Новый Структура(); + СтрокаДерева.Вставить("Имя", ОбъектМетаданных.Имя); + СтрокаДерева.Вставить("ПолноеИмя", ОбъектМетаданных.ПолноеИмя()); + СтрокаДерева.Вставить("Строки", Новый Массив); + + Возврат СтрокаДерева; +КонецФункции + +&НаКлиенте +Функция ОбработатьОбъектМетаданных(СтруктураМетаданных, ДеревоТестов) + Если ЭтоПодсистема(СтруктураМетаданных.ПолноеИмя) Тогда + Контейнер = ЗагрузитьПодсистему(СтруктураМетаданных, ДеревоТестов); + Иначе + Контейнер = ЗагрузитьОбработку(СтруктураМетаданных, ДеревоТестов); + КонецЕсли; + + Возврат Контейнер; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ЭтоПодсистема(ПолноеИмяОбъектаМетаданных) + Возврат (Найти(НРег(ПолноеИмяОбъектаМетаданных), НРег("Подсистема")) > 0); +КонецФункции + +&НаКлиенте +Функция ЗагрузитьПодсистему(СтруктураМетаданных, ДеревоТестов) + + Контейнер = ПостроительДереваТестов.СоздатьКонтейнер(СтруктураМетаданных.Имя, ПостроительДереваТестов.Объект.ИконкиУзловДереваТестов.Подсистема); + Для Каждого ПодчиненноеМетаданное Из СтруктураМетаданных.Строки Цикл + Если ЭтоПодсистема(ПодчиненноеМетаданное.ПолноеИмя) Тогда + ЗагрузитьПодсистему(ПодчиненноеМетаданное, Контейнер); + Иначе + ЗагрузитьОбработку(ПодчиненноеМетаданное, Контейнер); + КонецЕсли; + КонецЦикла; + + Если ДеревоТестов = Неопределено Тогда + ДеревоТестов = Контейнер; + ИначеЕсли Контейнер.Строки.Количество() > 0 Тогда + ДеревоТестов.Строки.Добавить(Контейнер); + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция ЗагрузитьОбработку(СтруктураМетаданных, ДеревоТестов) + ЗагружаемыйПуть = СтрЗаменить("Метаданные." + СтруктураМетаданных.ПолноеИмя, ".Обработка.", ".Обработки."); + ЗагружаемыйПуть = СтрЗаменить(ЗагружаемыйПуть, ".Отчет.", ".Отчеты."); + Контейнер = ЗагрузитьОбработкуНаСервере(ЗагружаемыйПуть); + КонтейнерСКлиентскимиТестамиОбработки = ЗагрузитьОбработкуНаКлиенте(СтруктураМетаданных); + Если КонтейнерСКлиентскимиТестамиОбработки.Строки.Количество() > 0 Тогда + Контейнер.Строки.Добавить(КонтейнерСКлиентскимиТестамиОбработки); + КонецЕсли; + Если ДеревоТестов = Неопределено Тогда + ДеревоТестов = Контейнер; + ИначеЕсли Контейнер.Строки.Количество() > 0 Тогда + ДеревоТестов.Строки.Добавить(Контейнер); + КонецЕсли; + +КонецФункции + +&НаСервере +Функция ЗагрузитьОбработкуНаСервере(Путь) + КонтекстЯдра = ПолучитьКонтекстЯдраНаСервере(); + + ПостроительДереваТестов = КонтекстЯдра.СоздатьОбъектПлагина("ПостроительДереваТестов"); + ЗагрузчикФайла = КонтекстЯдра.СоздатьОбъектПлагина("ЗагрузчикФайла"); + + ДеревоТестов = ЭтотОбъектНаСервере().ЗагрузитьПуть(Путь, ПостроительДереваТестов, ЗагрузчикФайла); + + Возврат ДеревоТестов; +КонецФункции + +&НаКлиенте +Функция ЗагрузитьОбработкуНаКлиенте(СтруктураМетаданных) + ФормаОбработки = ПолучитьФорму(СтруктураМетаданных.ПолноеИмя + ".Форма"); + Попытка + Контейнер = ЗагрузитьТестыВНовомФормате_НаКлиенте(ФормаОбработки); + Исключение + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ЭтоНовыйФорматОбработки(ТекстОшибки) Тогда + ВызватьИсключение; + Иначе + Контейнер = ЗагрузитьТестыВСтаромФормате_НаКлиенте(ФормаОбработки); + КонецЕсли; + КонецПопытки; + Возврат Контейнер; +КонецФункции + +&НаКлиенте +Функция ЭтоНовыйФорматОбработки(Знач ТекстОшибки) + ЭтоНовыйФорматОбработки = Не ЕстьОшибка_МетодОбъектаНеОбнаружен(ТекстОшибки, "ЗаполнитьНаборТестов"); + + Возврат ЭтоНовыйФорматОбработки; +КонецФункции + +&НаКлиенте +Функция ЗагрузитьТестыВНовомФормате_НаКлиенте(ФормаОбработки) + КонтейнерТестов = ПостроительДереваТестов.СоздатьКонтейнер(ПрефиксПутейСФормами() + СтрЗаменить(ЗагружаемыйПуть, "Метаданные.Обработки.", ""), ПостроительДереваТестов.Объект.ИконкиУзловДереваТестов.Форма); + ФормаОбработки.ЗаполнитьНаборТестов(ЭтаФорма); + Результат = КонтейнерТестов; + КонтейнерТестов = Неопределено; + ТекущаяГруппа = Неопределено; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция ЗагрузитьТестыВСтаромФормате_НаКлиенте(ФормаОбработки) + Попытка + СписокТестов = ФормаОбработки.ПолучитьСписокТестов(); + Исключение + Описание = ОписаниеОшибки(); + Если Найти(Описание, "Недостаточно фактических параметров") > 0 Тогда + ВызватьИсключение "Старый формат тестов в обработке тестов <"+ЗагружаемыйПуть+">."+Символы.ПС+ + "Метод ПолучитьСписокТестов сейчас не принимает параметров"; + КонецЕсли; + + Если Найти(Описание, "Метод объекта не обнаружен (ПолучитьСписокТестов)") = 0 Тогда + ВызватьИсключение Описание; + КонецЕсли; + КонецПопытки; + СлучайныйПорядокВыполнения = Истина; + Попытка + СлучайныйПорядокВыполнения = ФормаОбработки.РазрешенСлучайныйПорядокВыполненияТестов(); + Исключение + КонецПопытки; + + Контейнер = ПолучитьКонтейнерДереваТестовПоСпискуТестовНаСервере(СписокТестов, ПрефиксПутейСФормами() + СтрЗаменить(ЗагружаемыйПуть, "Обработка.", ""), ПрефиксПутейСФормами() + ЗагружаемыйПуть, СлучайныйПорядокВыполнения); + Контейнер.ИконкаУзла = ПостроительДереваТестов.Объект.ИконкиУзловДереваТестов.Форма; + + Возврат Контейнер; +КонецФункции + +&НаСервере +Функция ПолучитьИдентификаторКонтекстаПоПутиНаСервере(Путь) + ОбъектМетаданных = ЭтотОбъектНаСервере().ПолучитьОбъектМетаданныхПоПути(Путь); + + Возврат ОбъектМетаданных.Имя; +КонецФункции + +&НаСервере +Функция ПолучитьКонтейнерДереваТестовПоСпискуТестовНаСервере(СписокТестов, ИмяКонтейнера, Путь, СлучайныйПорядокВыполнения = Истина) + КонтекстЯдра = ПолучитьКонтекстЯдраНаСервере(); + + ПостроительДереваТестов = КонтекстЯдра.СоздатьОбъектПлагина("ПостроительДереваТестов"); + ЗагрузчикФайла = КонтекстЯдра.СоздатьОбъектПлагина("ЗагрузчикФайла"); + + Контейнер = ЭтотОбъектНаСервере().ПолучитьКонтейнерДереваТестовПоСпискуТестов(ПостроительДереваТестов, ЗагрузчикФайла, СписокТестов, ИмяКонтейнера, Путь, СлучайныйПорядокВыполнения); + + Возврат Контейнер; +КонецФункции + +&НаКлиенте +Функция ЭтоПутьККлиентскомуКонтексту(Путь) + ПрефиксПутейСФормами = ПрефиксПутейСФормами(); + Результат = (Найти(Путь, ПрефиксПутейСФормами) = 1); + + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция ПрефиксПутейСФормами() + Возврат "УпрФорма # "; +КонецФункции + +// { API нового формата +&НаКлиенте +Процедура СлучайныйПорядокВыполнения() Экспорт + Если ЗначениеЗаполнено(КонтейнерТестов) Тогда + КонтейнерТестов.СлучайныйПорядокВыполнения = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтрогийПорядокВыполнения() Экспорт + Если ЗначениеЗаполнено(КонтейнерТестов) Тогда + КонтейнерТестов.СлучайныйПорядокВыполнения = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура НачатьГруппу(Знач ИмяГруппы, Знач СтрогийПорядокВыполнения = Ложь) Экспорт + ТекущаяГруппа = ПостроительДереваТестов.СоздатьКонтейнер(ИмяГруппы, ПостроительДереваТестов.Объект.ИконкиУзловДереваТестов.Группа); + ТекущаяГруппа.СлучайныйПорядокВыполнения = Не СтрогийПорядокВыполнения; + КонтейнерТестов.Строки.Добавить(ТекущаяГруппа); +КонецПроцедуры + +&НаКлиенте +Функция Добавить(Знач ИмяМетода, Знач Параметры = Неопределено, Знач Представление = "") Экспорт + Элемент = ПостроительДереваТестов.СоздатьЭлемент(ПрефиксПутейСФормами() + ЗагружаемыйПуть, ИмяМетода, Представление); + Если ЗначениеЗаполнено(Параметры) И ТипЗнч(Параметры) = Тип("Массив") Тогда + Элемент.Параметры = Параметры; + КонецЕсли; + Если ЗначениеЗаполнено(ТекущаяГруппа) Тогда + ТекущаяГруппа.Строки.Добавить(Элемент); + Иначе + КонтейнерТестов.Строки.Добавить(Элемент); + КонецЕсли; + + Возврат Элемент; +КонецФункции + +&НаКлиенте +Функция ПараметрыТеста(Знач Парам1, Знач Парам2 = Неопределено, Знач Парам3 = Неопределено, Знач Парам4 = Неопределено, Знач Парам5 = Неопределено, Знач Парам6 = Неопределено, Знач Парам7 = Неопределено, Знач Парам8 = Неопределено, Знач Парам9 = Неопределено) Экспорт + ВсеПараметры = Новый Массив; + ВсеПараметры.Добавить(Парам1); + ВсеПараметры.Добавить(Парам2); + ВсеПараметры.Добавить(Парам3); + ВсеПараметры.Добавить(Парам4); + ВсеПараметры.Добавить(Парам5); + ВсеПараметры.Добавить(Парам6); + ВсеПараметры.Добавить(Парам7); + ВсеПараметры.Добавить(Парам8); + ВсеПараметры.Добавить(Парам9); + + ИндексСПоследнимПараметром = 0; + Для Сч = 0 По ВсеПараметры.ВГраница() Цикл + Индекс = ВсеПараметры.ВГраница() - Сч; + Если ВсеПараметры[Индекс] <> Неопределено Тогда + ИндексСПоследнимПараметром = Индекс; + Прервать; + КонецЕсли; + КонецЦикла; + + ПараметрыТеста = Новый Массив; + Для Сч = 0 По ИндексСПоследнимПараметром Цикл + ПараметрыТеста.Добавить(ВсеПараметры[Сч]); + КонецЦикла; + + Возврат ПараметрыТеста; +КонецФункции +// } API нового формата + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции + +&НаКлиенте +Функция ЕстьОшибка_МетодОбъектаНеОбнаружен(Знач ТекстОшибки, Знач ИмяМетода) + Результат = Ложь; + Если Найти(текстОшибки, "Метод объекта не обнаружен (" + ИмяМетода + ")") > 0 + Или Найти(текстОшибки, "Object method not found (" + ИмяМетода + ")") > 0 Тогда + Результат = Истина; + КонецЕсли; + + Возврат Результат; +КонецФункции +// } Helpers + +// { Подсистема конфигурации xUnitFor1C + +&НаСервере +Функция ПолучитьКонтекстЯдраНаСервере() + + // Получаем доступ к серверному контексту обработки с использованием + // полного имени метаданных браузера тестов. Иначе нет возможности получить + // доступ к серверному контексту ядра, т.к. изначально вызов был выполнен на клиенте. + // При передаче на сервер клиентский контекст теряется. + КонтекстЯдра = Неопределено; + МетаданныеЯдра = Метаданные.НайтиПоПолномуИмени(ПолноеИмяБраузераТестов); + Если НЕ МетаданныеЯдра = Неопределено + И Метаданные.Обработки.Содержит(МетаданныеЯдра) Тогда + ИмяОбработкиКонекстаЯдра = СтрЗаменить(ПолноеИмяБраузераТестов, "Обработка", "Обработки"); + Выполнить("КонтекстЯдра = " + ИмяОбработкиКонекстаЯдра + ".Создать()"); + Иначе + ИмяОбработкиКонекстаЯдра = СтрЗаменить(ПолноеИмяБраузераТестов, "ВнешняяОбработка", "ВнешниеОбработки"); + ИмяОбработкиКонекстаЯдра = СтрЗаменить(ИмяОбработкиКонекстаЯдра, ".", Символы.ПС); + МенеджерОбъектов = СтрПолучитьСтроку(ИмяОбработкиКонекстаЯдра, 1); + ИмяОбъекта = СтрПолучитьСтроку(ИмяОбработкиКонекстаЯдра, 2); + Выполнить("КонтекстЯдра = " + МенеджерОбъектов + ".Создать("""+ИмяОбъекта+""")"); + КонецЕсли; + + Возврат КонтекстЯдра; + +КонецФункции + +// } Подсистема конфигурации xUnitFor1C + +// { Вспомогательные методы + +&НаКлиенте +Функция ВыбратьПутьИнтерактивноРаботаСОкном(КонтекстЯдра) Экспорт + + ПараметрыОткрытия = Новый Структура("ОтборПоИмениТеста", ""); + ИмяФормыВыбораПодсистемыУФ = СтрЗаменить(ЭтаФорма.ИмяФормы, "УправляемаяФорма", "ФормаВыбораПодсистемУФ"); + + ОткрытьФорму(ИмяФормыВыбораПодсистемыУФ, + ПараметрыОткрытия, ЭтаФорма,,,, + Новый ОписаниеОповещения("ВыбратьПутьИнтерактивноРаботаСОкномЗавершение", ЭтаФорма, КонтекстЯдра), + РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс); + +КонецФункции + +&НаКлиенте +Процедура ВыбратьПутьИнтерактивноРаботаСОкномЗавершение(Результат, ДополнительныеПараметры) Экспорт + + КонтекстЯдра = ДополнительныеПараметры; + Описание = ОписаниеПлагина(КонтекстЯдра.Объект.ТипыПлагинов); + КонтекстЯдра.ЗагрузитьТесты(Описание.Идентификатор, Результат, КонтекстЯдра); + +КонецПроцедуры + +// } Вспомогательные методы \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\243\320\244.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\243\320\244.xml" new file mode 100644 index 000000000..3a6977d1d --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\243\320\244.xml" @@ -0,0 +1,22 @@ + + +
+ + ФормаВыбораПодсистемУФ + + + ru + Форма выбора подсистем УФ + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\243\320\244/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\243\320\244/Ext/Form.xml" new file mode 100644 index 000000000..c1670c24a --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\243\320\244/Ext/Form.xml" @@ -0,0 +1,167 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выберите тестовый случай или всю подсистему</v8:content> + </v8:item> + + 55 + LockOwnerWindow + false + useIfNecessary + + + ПриОткрытии + ПриСозданииНаСервере + + + + Tree + true + true + true + ДеревоПодсистем + ДеревоПодсистем.ТипСтроки + + RowsPicture.png + false + + None + None + None + + + false + + + + + ДеревоПодсистем + SearchStringRepresentation + + + + + + + ДеревоПодсистем + ViewStatusRepresentation + + + + + + + ДеревоПодсистем + SearchControl + + + + + + ДеревоПодсистемВыбор + + + + ДеревоПодсистем.Имя + EnterOnInput + + + + + ДеревоПодсистем.Путь + false + EnterOnInput + + + + + ДеревоПодсистем.ТипСтроки + false + EnterOnInput + + + + +
+
+ + + + cfg:DataProcessorObject.ЗагрузчикИзПодсистемКонфигурации + + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дерево подсистем</v8:content> + </v8:item> + + + v8:ValueTree + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Имя</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Путь</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Тип строки</v8:content> + </v8:item> + + + xs:decimal + + 10 + 0 + Any + + + + + + + + + + xs:string + + 0 + Variable + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\243\320\244/Ext/Form/Items/\320\224\320\265\321\200\320\265\320\262\320\276\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274/RowsPicture.png" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\243\320\244/Ext/Form/Items/\320\224\320\265\321\200\320\265\320\262\320\276\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274/RowsPicture.png" new file mode 100644 index 000000000..4b74f63e9 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\243\320\244/Ext/Form/Items/\320\224\320\265\321\200\320\265\320\262\320\276\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274/RowsPicture.png" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\243\320\244/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\243\320\244/Ext/Form/Module.bsl" new file mode 100644 index 000000000..e6fa7d841 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\243\320\244/Ext/Form/Module.bsl" @@ -0,0 +1,26 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + РеквизитФормыВЗначение("Объект").ЗаполнитьДеревоПодсистем(ДеревоПодсистем, Параметры.ОтборПоИмениТеста); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + РазвернутьСтрокиДерева(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоПодсистемВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + Закрыть(ДеревоПодсистем.НайтиПоИдентификатору(ВыбраннаяСтрока).Путь); +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьСтрокиДерева(ВключаяПодчиненные = Ложь) + + Для каждого СтрокаДерева из ДеревоПодсистем.ПолучитьЭлементы() Цикл + Идентификатор = СтрокаДерева.ПолучитьИдентификатор(); + Элементы.ДеревоПодсистем.Развернуть(Идентификатор, ВключаяПодчиненные); + КонецЦикла; + +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213.xml" new file mode 100644 index 000000000..cef9cf693 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213.xml" @@ -0,0 +1,22 @@ + + +
+ + ФормаВыбораПодсистемы + + + ru + Форма выбора подсистемы + + + + Ordinary + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213/Ext/Form.bin" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213/Ext/Form.bin" new file mode 100644 index 000000000..7384a1dfe Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\222\321\213\320\261\320\276\321\200\320\260\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213/Ext/Form.bin" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.xml" new file mode 100644 index 000000000..6cef3fd5e --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260.xml" @@ -0,0 +1,34 @@ + + + + + + b5d91c1a-edbb-4345-848a-49e704b023e3 + b1291eac-2edb-473c-9de4-782d7101206c + + + bc9e5f2d-1cb5-49be-900a-46f730aa3eab + d6c375b6-eddd-4b67-9664-fa6fcd7edb20 + + + + ЗагрузчикКаталога + + + ru + Загрузчик каталога + + + + false + DataProcessor.ЗагрузчикКаталога.Form.Форма + + false + + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..2ca21a91b --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Ext/ObjectModule.bsl" @@ -0,0 +1,88 @@ +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Загрузчик); + Результат.Вставить("Идентификатор", "ЗагрузчикКаталога"); + Результат.Вставить("Представление", "Загрузить тесты из каталога файловой системы"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры +// } Plugin interface + +// { Loader interface +#Если ТолстыйКлиентОбычноеПриложение Тогда +Функция ВыбратьПутьИнтерактивно(КонтекстЯдра, ТекущийПуть = "") Экспорт + ДиалогВыбораКаталога = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + ДиалогВыбораКаталога.Каталог = ТекущийПуть; + + Результат = ""; + Если ДиалогВыбораКаталога.Выбрать() Тогда + Результат = ДиалогВыбораКаталога.Каталог; + КонецЕсли; + + Возврат Результат; +КонецФункции +#КонецЕсли + +Функция Загрузить(КонтекстЯдра, Путь) Экспорт + КаталогДляЗагрузки = Новый Файл(Путь); + Если Не (КаталогДляЗагрузки.Существует() И КаталогДляЗагрузки.ЭтоКаталог()) Тогда + ВызватьИсключение "Для загрузки передан не каталог файловой системы <" + КаталогДляЗагрузки.ПолноеИмя + ">"; + КонецЕсли; + ДеревоТестов = ЗагрузитьКаталог(КонтекстЯдра, КаталогДляЗагрузки); + ДеревоТестов.Имя = КаталогДляЗагрузки.ПолноеИмя; + + Возврат ДеревоТестов; +КонецФункции + +Функция ПолучитьКонтекстПоПути(КонтекстЯдра, Путь) Экспорт + ЗагрузчикФайла = КонтекстЯдра.Плагин("ЗагрузчикФайла"); + Обработка = ЗагрузчикФайла.ПолучитьКонтекстПоПути(КонтекстЯдра, Путь); + + Возврат Обработка; +КонецФункции +// } Loader interface + +Функция ЗагрузитьКаталог(КонтекстЯдра, КаталогДляЗагрузки) + КонтейнерКаталога = КонтекстЯдра.Плагин("ПостроительДереваТестов").СоздатьКонтейнер(КаталогДляЗагрузки.Имя); + НайденныеФайлы = НайтиФайлы(КаталогДляЗагрузки.ПолноеИмя, "*", Ложь); + Для каждого Файл из НайденныеФайлы Цикл + #Если Клиент Тогда + ОбработкаПрерыванияПользователя(); + #КонецЕсли + Если Файл.ЭтоКаталог() Тогда + КонтейнерДочернегоКаталога = ЗагрузитьКаталог(КонтекстЯдра, Файл); + Если КонтейнерДочернегоКаталога.Строки.Количество() > 0 Тогда + КонтейнерКаталога.Строки.Добавить(КонтейнерДочернегоКаталога); + КонецЕсли; + ИначеЕсли НРег(Файл.Расширение) = ".epf" + ИЛИ НРег(Файл.Расширение) = ".erf" Тогда + КонтейнерФайла = ЗагрузитьФайл(КонтекстЯдра, Файл); + Если ЗначениеЗаполнено(КонтейнерФайла) И КонтейнерФайла.Строки.Количество() > 0 Тогда + КонтейнерКаталога.Строки.Добавить(КонтейнерФайла); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат КонтейнерКаталога; +КонецФункции + +Функция ЗагрузитьФайл(КонтекстЯдра, ФайлОбработки) + ЗагрузчикФайла = КонтекстЯдра.Плагин("ЗагрузчикФайла"); + Попытка + ДеревоТестовФайла = ЗагрузчикФайла.Загрузить(КонтекстЯдра, ФайлОбработки.ПолноеИмя); + Результат = ДеревоТестовФайла; + Если ДеревоТестовФайла.Строки.Количество() > 0 Тогда + Результат = ДеревоТестовФайла.Строки[0]; + КонецЕсли; + + Исключение + Сообщить("Не удалось загрузить файл " + ФайлОбработки.ПолноеИмя + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Результат = Неопределено; + КонецПопытки; + + Возврат Результат; +КонецФункции diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..8e5f87731 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..ab9e4dee6 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.ЗагрузчикКаталога + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..e46f19bca --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,110 @@ + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +// { Loader interface +&НаКлиенте +Функция ВыбратьПутьИнтерактивно(КонтекстЯдра, ТекущийПуть = "") Экспорт + + ДиалогВыбораКаталога = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + ДиалогВыбораКаталога.Каталог = ТекущийПуть; + + ДиалогВыбораКаталога.Показать(Новый ОписаниеОповещения("ВыбратьПутьИнтерактивноЗавершение", ЭтаФорма, + Новый Структура("ДиалогВыбораКаталога, КонтекстЯдра", ДиалогВыбораКаталога, КонтекстЯдра))); + +КонецФункции + +&НаКлиенте +Функция Загрузить(КонтекстЯдра, Путь) Экспорт + КаталогДляЗагрузки = Новый Файл(Путь); + Если Не (КаталогДляЗагрузки.Существует() И КаталогДляЗагрузки.ЭтоКаталог()) Тогда + ВызватьИсключение "Для загрузки передан не каталог файловой системы <" + КаталогДляЗагрузки.ПолноеИмя + ">"; + КонецЕсли; + ДеревоТестов = ЗагрузитьКаталог(КонтекстЯдра, КаталогДляЗагрузки); + ДеревоТестов.Имя = КаталогДляЗагрузки.ПолноеИмя; + + Возврат ДеревоТестов; +КонецФункции + +&НаКлиенте +Функция ПолучитьКонтекстПоПути(КонтекстЯдра, Путь) Экспорт + ЗагрузчикФайла = КонтекстЯдра.Плагин("ЗагрузчикФайла"); + Контекст = ЗагрузчикФайла.ПолучитьКонтекстПоПути(КонтекстЯдра, Путь); + + Возврат Контекст; +КонецФункции +// } Loader interface + +&НаКлиенте +Функция ЗагрузитьКаталог(КонтекстЯдра, КаталогДляЗагрузки) + КонтейнерКаталога = КонтекстЯдра.Плагин("ПостроительДереваТестов").СоздатьКонтейнер(КаталогДляЗагрузки.Имя); + НайденныеФайлы = НайтиФайлы(КаталогДляЗагрузки.ПолноеИмя, "*", Ложь); + Для каждого Файл из НайденныеФайлы Цикл + ОбработкаПрерыванияПользователя(); + Если Файл.ЭтоКаталог() Тогда + КонтейнерДочернегоКаталога = ЗагрузитьКаталог(КонтекстЯдра, Файл); + Если КонтейнерДочернегоКаталога.Строки.Количество() > 0 Тогда + КонтейнерКаталога.Строки.Добавить(КонтейнерДочернегоКаталога); + КонецЕсли; + ИначеЕсли НРег(Файл.Расширение) = ".epf" + ИЛИ НРег(Файл.Расширение) = ".erf" Тогда + КонтейнерФайла = ЗагрузитьФайл(КонтекстЯдра, Файл); + Если ЗначениеЗаполнено(КонтейнерФайла) И КонтейнерФайла.Строки.Количество() > 0 Тогда + КонтейнерКаталога.Строки.Добавить(КонтейнерФайла); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат КонтейнерКаталога; +КонецФункции + +&НаКлиенте +Функция ЗагрузитьФайл(КонтекстЯдра, ФайлОбработки) + ЗагрузчикФайла = КонтекстЯдра.Плагин("ЗагрузчикФайла"); + Попытка + ДеревоТестовФайла = ЗагрузчикФайла.Загрузить(КонтекстЯдра, ФайлОбработки.ПолноеИмя); + Результат = ДеревоТестовФайла; + Если ДеревоТестовФайла.Строки.Количество() > 0 Тогда + Результат = ДеревоТестовФайла.Строки[0]; + КонецЕсли; + + Исключение + Сообщить("Не удалось загрузить файл " + ФайлОбработки.ПолноеИмя + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Результат = Неопределено; + КонецПопытки; + + Возврат Результат; +КонецФункции + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции +// } Helpers + +// { Вспомогательные методы +&НаКлиенте +Процедура ВыбратьПутьИнтерактивноЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + ДиалогВыбораКаталога = ДополнительныеПараметры.ДиалогВыбораКаталога; + КонтекстЯдра = ДополнительныеПараметры.КонтекстЯдра; + + Если (ВыбранныеФайлы <> Неопределено) Тогда + Результат = ДиалогВыбораКаталога.Каталог; + КонецЕсли; + + Описание = ОписаниеПлагина(КонтекстЯдра.Объект.ТипыПлагинов); + КонтекстЯдра.ЗагрузитьТесты(Описание.Идентификатор, Результат); + +КонецПроцедуры +// } Вспомогательные методы \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260.xml" new file mode 100644 index 000000000..eea9f2f42 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260.xml" @@ -0,0 +1,34 @@ + + + + + + 39cb1910-05d4-4795-a83b-1fede024da26 + 4660d451-74c5-48db-852a-88d87210b7b3 + + + 2ca7359f-ef20-42a2-a9d1-9d02eae50298 + e4e947f1-ea6a-4607-849c-29182fc7eff7 + + + + ЗагрузчикФайла + + + ru + Загрузчик файла + + + + false + DataProcessor.ЗагрузчикФайла.Form.Форма + + false + + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..f2e7189da --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Ext/ObjectModule.bsl" @@ -0,0 +1,271 @@ +Перем КэшПостроительДереваТестов; +Перем ЗагружаемыйПуть; + +Перем КонтейнерТестов; +Перем ТекущаяГруппа; + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Загрузчик); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "Загрузить тесты из файлов"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры + +// } Plugin interface + +// { Loader interface +#Если ТолстыйКлиентОбычноеПриложение Тогда +Функция ВыбратьПутьИнтерактивно(КонтекстЯдра, ТекущийПуть = "") Экспорт + ДиалогВыбораТеста = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + ДиалогВыбораТеста.Фильтр = "Обработка-тест (*.epf)|*.epf|Отчет-тест (*.erf)|*.erf|Все файлы|*"; + ДиалогВыбораТеста.МножественныйВыбор = Истина; + ДиалогВыбораТеста.ПроверятьСуществованиеФайла = Истина; + ДиалогВыбораТеста.ПолноеИмяФайла = ТекущийПуть; + + Результат = Новый ТекстовыйДокумент; + Если ДиалогВыбораТеста.Выбрать() Тогда + Для каждого ПолноеИмяФайла Из ДиалогВыбораТеста.ВыбранныеФайлы Цикл + Результат.ДобавитьСтроку(ПолноеИмяФайла); + КонецЦикла; + КонецЕсли; + Текст = Результат.ПолучитьТекст(); + + Возврат Лев(Текст, СтрДлина(Текст) - 1); +КонецФункции +#КонецЕсли + +Функция Загрузить(КонтекстЯдра, Путь) Экспорт + ПостроительДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов"); + ДеревоТестов = Неопределено; + Для Сч = 1 По СтрЧислоСтрок(Путь) Цикл + ФайлОбработки = Новый Файл(СтрПолучитьСтроку(Путь, Сч)); + + Если ДеревоТестов = Неопределено Тогда + ДеревоТестов = ПостроительДереваТестов.СоздатьКонтейнер(ФайлОбработки.Путь); + КонецЕсли; + + КонтейнерСТестамиОбработки = ЗагрузитьФайл(ПостроительДереваТестов, ФайлОбработки); + Если КонтейнерСТестамиОбработки.Строки.Количество() > 0 Тогда + ДеревоТестов.Строки.Добавить(КонтейнерСТестамиОбработки); + КонецЕсли; + КонецЦикла; + + Возврат ДеревоТестов; +КонецФункции + +Функция ПолучитьКонтекстПоПути(КонтекстЯдра, Путь) Экспорт + ФайлОбработки = Новый Файл(Путь); + + Обработка = ПолучитьКонтекстОбработки(ФайлОбработки); + + Возврат Обработка; +КонецФункции +// } Loader interface + +Функция ПолучитьКонтекстОбработки(ФайлОбработки) + + ЭтоФайлОтчета = (НРег(ФайлОбработки.Расширение) = ".erf"); + + Попытка + Если ЭтоФайлОтчета Тогда + Обработка = ВнешниеОтчеты.Создать(ФайлОбработки.ИмяБезРасширения, Ложь); + Иначе + Обработка = ВнешниеОбработки.Создать(ФайлОбработки.ИмяБезРасширения, Ложь); + КонецЕсли; + Исключение + ПроверитьКорректностьФайла(ФайлОбработки); + + Если ЭтоФайлОтчета Тогда + Обработка = ВнешниеОтчеты.Создать(ФайлОбработки.ПолноеИмя, Ложь); + Иначе + Обработка = ВнешниеОбработки.Создать(ФайлОбработки.ПолноеИмя, Ложь); + КонецЕсли; + КонецПопытки; + Возврат Обработка; + +КонецФункции + +Процедура ПроверитьКорректностьФайла(Файл) + Если Не Файл.Существует() Тогда + ВызватьИсключение "Переданный файл не существует файл <" + Файл.ПолноеИмя + ">"; + КонецЕсли; + Если Файл.ЭтоКаталог() Тогда + ВызватьИсключение "Передан каталог вместо файла <" + Файл.ПолноеИмя + ">"; + КонецЕсли; +КонецПроцедуры + +Функция ЗагрузитьФайл(ПостроительДереваТестов, ФайлОбработки) Экспорт + Обработка = ПолучитьКонтекстОбработки(ФайлОбработки); + Попытка + Контейнер = ЗагрузитьТестыВНовомФормате(ПостроительДереваТестов, Обработка, ФайлОбработки); + Исключение + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ЭтоНовыйФорматОбработки(ТекстОшибки) Тогда + ВызватьИсключение; + Иначе + Контейнер = ЗагрузитьТестыВСтаромФормате(ПостроительДереваТестов, Обработка, ФайлОбработки); + КонецЕсли; + КонецПопытки; + + Возврат Контейнер; +КонецФункции + +Функция ЗагрузитьТестыВНовомФормате(ПостроительДереваТестов, Обработка, ФайлОбработки) + ЗагружаемыйПуть = ФайлОбработки.ПолноеИмя; + КэшПостроительДереваТестов = ПостроительДереваТестов; + Если НРег(ФайлОбработки.Расширение) = ".erf" Тогда + ИконкаУзла = ПостроительДереваТестов.ИконкиУзловДереваТестов.Отчет; + Иначе + ИконкаУзла = ПостроительДереваТестов.ИконкиУзловДереваТестов.Обработка; + КонецЕсли; + КонтейнерТестов = ПостроительДереваТестов.СоздатьКонтейнер(ФайлОбработки.ИмяБезРасширения, ИконкаУзла); + Обработка.ЗаполнитьНаборТестов(ЭтотОбъект); + Результат = КонтейнерТестов; + КонтейнерТестов = Неопределено; + ТекущаяГруппа = Неопределено; + + Возврат Результат; +КонецФункции + +Функция ЭтоНовыйФорматОбработки(Знач ТекстОшибки) + ЭтоНовыйФорматОбработки = Не ЕстьОшибка_МетодОбъектаНеОбнаружен(ТекстОшибки, "ЗаполнитьНаборТестов"); + + Возврат ЭтоНовыйФорматОбработки; +КонецФункции + +Функция ЗагрузитьТестыВСтаромФормате(ПостроительДереваТестов, Обработка, ФайлОбработки) + Попытка + СписокТестов = Обработка.ПолучитьСписокТестов(); + Исключение + Описание = ОписаниеОшибки(); + Если Найти(Описание, "Недостаточно фактических параметров") > 0 Тогда + ВызватьИсключение "Старый формат тестов в обработке тестов <"+ФайлОбработки.ПолноеИмя+">."+Символы.ПС+ + "Метод ПолучитьСписокТестов сейчас не принимает параметров"; + КонецЕсли; + + Если Найти(Описание, "Метод объекта не обнаружен (ПолучитьСписокТестов)") = 0 Тогда + ВызватьИсключение Описание; + КонецЕсли; + КонецПопытки; + + СлучайныйПорядокВыполнения = Истина; + Попытка + СлучайныйПорядокВыполнения = Обработка.РазрешенСлучайныйПорядокВыполненияТестов(); + Исключение + КонецПопытки; + Результат = ПолучитьКонтейнерДереваТестовПоСпискуТестов(ПостроительДереваТестов, СписокТестов, ФайлОбработки.ИмяБезРасширения, ФайлОбработки.ПолноеИмя, СлучайныйПорядокВыполнения); + + Возврат Результат; +КонецФункции + +Функция ПолучитьКонтейнерДереваТестовПоСпискуТестов(ПостроительДереваТестов, СписокТестов, ИмяКонтейнера, Путь, СлучайныйПорядокВыполнения = Истина) Экспорт + Контейнер = ПостроительДереваТестов.СоздатьКонтейнер(ИмяКонтейнера, ПостроительДереваТестов.ИконкиУзловДереваТестов.Обработка); + Контейнер.СлучайныйПорядокВыполнения = СлучайныйПорядокВыполнения; + Если ЗначениеЗаполнено(СписокТестов) И ТипЗнч(СписокТестов) = Тип("Массив") Тогда + Для каждого Тест Из СписокТестов Цикл + Элемент = Неопределено; + Если ТипЗнч(Тест) = Тип("Строка") Тогда + Элемент = ПостроительДереваТестов.СоздатьЭлемент(Путь, Тест); + ИначеЕсли ТипЗнч(Тест) = Тип("Структура") Тогда + ИмяМетода = Тест.ИмяТеста; + Представление = Неопределено; + Если Не Тест.Свойство("ПредставлениеТеста", Представление) Тогда + Представление = ИмяМетода; + КонецЕсли; + Элемент = ПостроительДереваТестов.СоздатьЭлемент(Путь, ИмяМетода, Представление); + Параметр = Неопределено; + Если Тест.Свойство("Параметр", Параметр) Тогда + Элемент.Параметры.Добавить(Параметр); + КонецЕсли; + Иначе + ВызватьИсключение "Тест может быть описан либо строкой либо структурой"; + КонецЕсли; + Если ЗначениеЗаполнено(Элемент) Тогда + Контейнер.Строки.Добавить(Элемент); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат Контейнер; +КонецФункции + +// { API нового формата +Процедура СлучайныйПорядокВыполнения() Экспорт + Если ЗначениеЗаполнено(КонтейнерТестов) Тогда + КонтейнерТестов.СлучайныйПорядокВыполнения = Истина; + КонецЕсли; +КонецПроцедуры + +Процедура СтрогийПорядокВыполнения() Экспорт + Если ЗначениеЗаполнено(КонтейнерТестов) Тогда + КонтейнерТестов.СлучайныйПорядокВыполнения = Ложь; + КонецЕсли; +КонецПроцедуры + +Процедура НачатьГруппу(Знач ИмяГруппы, Знач СтрогийПорядокВыполнения = Ложь) Экспорт + ТекущаяГруппа = КэшПостроительДереваТестов.СоздатьКонтейнер(ИмяГруппы, КэшПостроительДереваТестов.ИконкиУзловДереваТестов.Группа); + ТекущаяГруппа.СлучайныйПорядокВыполнения = Не СтрогийПорядокВыполнения; + КонтейнерТестов.Строки.Добавить(ТекущаяГруппа); +КонецПроцедуры + +Функция Добавить(Знач ИмяМетода, Знач Параметры = Неопределено, Знач Представление = "") Экспорт + Элемент = КэшПостроительДереваТестов.СоздатьЭлемент(ЗагружаемыйПуть, ИмяМетода, Представление); + Если ЗначениеЗаполнено(Параметры) И ТипЗнч(Параметры) = Тип("Массив") Тогда + Элемент.Параметры = Параметры; + КонецЕсли; + Если ЗначениеЗаполнено(ТекущаяГруппа) Тогда + ТекущаяГруппа.Строки.Добавить(Элемент); + Иначе + КонтейнерТестов.Строки.Добавить(Элемент); + КонецЕсли; + + Возврат Элемент; +КонецФункции + +Функция ПараметрыТеста(Знач Парам1, Знач Парам2 = Неопределено, Знач Парам3 = Неопределено, Знач Парам4 = Неопределено, Знач Парам5 = Неопределено, Знач Парам6 = Неопределено, Знач Парам7 = Неопределено, Знач Парам8 = Неопределено, Знач Парам9 = Неопределено) Экспорт + ВсеПараметры = Новый Массив; + ВсеПараметры.Добавить(Парам1); + ВсеПараметры.Добавить(Парам2); + ВсеПараметры.Добавить(Парам3); + ВсеПараметры.Добавить(Парам4); + ВсеПараметры.Добавить(Парам5); + ВсеПараметры.Добавить(Парам6); + ВсеПараметры.Добавить(Парам7); + ВсеПараметры.Добавить(Парам8); + ВсеПараметры.Добавить(Парам9); + + ИндексСПоследнимПараметром = 0; + Для Сч = 0 По ВсеПараметры.ВГраница() Цикл + Индекс = ВсеПараметры.ВГраница() - Сч; + Если ВсеПараметры[Индекс] <> Неопределено Тогда + ИндексСПоследнимПараметром = Индекс; + Прервать; + КонецЕсли; + КонецЦикла; + + ПараметрыТеста = Новый Массив; + Для Сч = 0 По ИндексСПоследнимПараметром Цикл + ПараметрыТеста.Добавить(ВсеПараметры[Сч]); + КонецЦикла; + + Возврат ПараметрыТеста; +КонецФункции +// } API нового формата + +// { Helpers +Функция ЕстьОшибка_МетодОбъектаНеОбнаружен(Знач ТекстОшибки, Знач ИмяМетода) + Результат = Ложь; + Если Найти(текстОшибки, "Метод объекта не обнаружен (" + ИмяМетода + ")") > 0 + ИЛИ Найти(текстОшибки, "Object method not found (" + ИмяМетода + ")") > 0 Тогда + Результат = Истина; + КонецЕсли; + + Возврат Результат; +КонецФункции +// } Helpers diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..3b0c27c37 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..2f2b50e10 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,28 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.ЗагрузчикФайла + + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Полное имя браузера тестов</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..7ea532bfe --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,393 @@ +&НаКлиенте +Перем КэшПостроительДереваТестов; +&НаКлиенте +Перем ЗагружаемыйПуть; + +&НаКлиенте +Перем КонтейнерТестов; +&НаКлиенте +Перем ТекущаяГруппа; + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаКлиенте +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +// { Loader interface +&НаКлиенте +Функция ВыбратьПутьИнтерактивно(КонтекстЯдра, ТекущийПуть = "") Экспорт + + ДиалогВыбораТеста = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + ДиалогВыбораТеста.Фильтр = "Обработка-тест (*.epf)|*.epf|Отчет-тест (*.erf)|*.erf|Все файлы|*"; + ДиалогВыбораТеста.МножественныйВыбор = Истина; + ДиалогВыбораТеста.ПроверятьСуществованиеФайла = Истина; + ДиалогВыбораТеста.ПолноеИмяФайла = ТекущийПуть; + + Результат = Новый ТекстовыйДокумент; + ДиалогВыбораТеста.Показать(Новый ОписаниеОповещения("ВыбратьПутьИнтерактивноЗавершение", ЭтаФорма, + Новый Структура("ДиалогВыбораТеста, Результат, КонтекстЯдра", ДиалогВыбораТеста, Результат, КонтекстЯдра))); + +КонецФункции + +&НаКлиенте +Функция Загрузить(КонтекстЯдра, Путь) Экспорт + + ПолноеИмяБраузераТестов = КонтекстЯдра.Объект.ПолноеИмяБраузераТестов; + + ПостроительДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов"); + ДеревоТестов = Неопределено; + Для Сч = 1 По СтрЧислоСтрок(Путь) Цикл + ФайлОбработки = Новый Файл(СтрПолучитьСтроку(Путь, Сч)); + ПроверитьКорректностьФайла(ФайлОбработки); + + Если ДеревоТестов = Неопределено Тогда + ДеревоТестов = ПостроительДереваТестов.СоздатьКонтейнер(ФайлОбработки.Путь); + КонецЕсли; + + КонтекстЯдра.ПодключитьВнешнююОбработку(ФайлОбработки); + + КонтейнерССервернымиТестамиОбработки = ЗагрузитьФайлНаСервере(ФайлОбработки.ПолноеИмя); + КонтейнерСКлиентскимиТестамиОбработки = ЗагрузитьФайлНаКлиенте(ПостроительДереваТестов, ФайлОбработки); + Если КонтейнерСКлиентскимиТестамиОбработки.Строки.Количество() > 0 Тогда + КонтейнерССервернымиТестамиОбработки.Строки.Добавить(КонтейнерСКлиентскимиТестамиОбработки); + КонецЕсли; + Если КонтейнерССервернымиТестамиОбработки.Строки.Количество() > 0 Тогда + ДеревоТестов.Строки.Добавить(КонтейнерССервернымиТестамиОбработки); + КонецЕсли; + КонецЦикла; + + Возврат ДеревоТестов; +КонецФункции + +&НаКлиенте +Функция ПолучитьКонтекстПоПути(КонтекстЯдра, Путь) Экспорт + Перем Контекст; + Если ЭтоПутьККлиентскомуКонтексту(Путь) Тогда + Контекст = ПолучитьКлиентскийКонтекст(КонтекстЯдра, Путь); + Иначе + Контекст = ПолучитьСерверныйКонтекст(КонтекстЯдра, Путь); + КонецЕсли; + + Возврат Контекст; +КонецФункции +// } Loader interface + +&НаКлиенте +Функция ПолучитьКлиентскийКонтекст(КонтекстЯдра, Путь) + ПрефиксПутейСФормами = ПрефиксПутейСФормами(); + ФайлОбработки = Новый Файл(Сред(Путь, СтрДлина(ПрефиксПутейСФормами) + 1)); + ПроверитьКорректностьФайла(ФайлОбработки); + КонтекстЯдра.ПодключитьВнешнююОбработку(ФайлОбработки); + Контекст = ПолучитьФорму("ВнешняяОбработка." + ФайлОбработки.ИмяБезРасширения + ".Форма", , ЭтаФорма, Новый УникальныйИдентификатор); + Если ПеременнаяСодержитСвойство(Контекст, "ПутьКФайлуПолный") Тогда + Контекст.ПутьКФайлуПолный = ФайлОбработки.ПолноеИмя; + КонецЕсли; + + Возврат Контекст; +КонецФункции + +&НаКлиенте +Функция ПолучитьСерверныйКонтекст(КонтекстЯдра, Путь) + ФайлОбработки = Новый Файл(Путь); + ПроверитьКорректностьФайла(ФайлОбработки); + КонтекстЯдра.ПодключитьВнешнююОбработку(ФайлОбработки); + Контекст = КонтекстЯдра.ПолучитьОписаниеКонтекстаВыполнения(ФайлОбработки.ИмяБезРасширения); + + Возврат Контекст; +КонецФункции + +&НаКлиенте +Процедура ПроверитьКорректностьФайла(Файл) + Если Не Файл.Существует() Тогда + ВызватьИсключение "Переданный файл не существует файл <" + Файл.ПолноеИмя + ">"; + КонецЕсли; + Если Файл.ЭтоКаталог() Тогда + ВызватьИсключение "Передан каталог вместо файла <" + Файл.ПолноеИмя + ">"; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ЗагрузитьФайлНаСервере(ПолныйПутьКОбработкеНаКлиенте) + + КонтекстЯдра = ПолучитьКонтекстЯдраНаСервере(); + + ПостроительДереваТестов = КонтекстЯдра.СоздатьОбъектПлагина("ПостроительДереваТестов"); + ФайлОбработки = Новый Файл(ПолныйПутьКОбработкеНаКлиенте); + Контейнер = ЭтотОбъектНаСервере().ЗагрузитьФайл(ПостроительДереваТестов, ФайлОбработки); + + Возврат Контейнер; +КонецФункции + +&НаКлиенте +Функция ЗагрузитьФайлНаКлиенте(ПостроительДереваТестов, ФайлОбработки) + + ЭтоФайлОтчета = (НРег(ФайлОбработки.Расширение) = ".erf"); + + Если ЭтоФайлОтчета Тогда + ФормаОбработки = ПолучитьФорму("ВнешнийОтчет." + ФайлОбработки.ИмяБезРасширения + ".Форма"); + Иначе + ФормаОбработки = ПолучитьФорму("ВнешняяОбработка." + ФайлОбработки.ИмяБезРасширения + ".Форма"); + КонецЕсли; + + Попытка + Контейнер = ЗагрузитьТестыВНовомФормате_НаКлиенте(ПостроительДереваТестов, ФормаОбработки, ФайлОбработки); + Исключение + ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + Если ЭтоНовыйФорматОбработки(ТекстОшибки) Тогда + ВызватьИсключение; + Иначе + Контейнер = ЗагрузитьТестыВСтаромФормате_НаКлиенте(ПостроительДереваТестов, ФормаОбработки, ФайлОбработки); + КонецЕсли; + КонецПопытки; + + Возврат Контейнер; +КонецФункции + +&НаКлиенте +Функция ЗагрузитьТестыВНовомФормате_НаКлиенте(ПостроительДереваТестов, ФормаОбработки, ФайлОбработки) + ЗагружаемыйПуть = ФайлОбработки.ПолноеИмя; + КэшПостроительДереваТестов = ПостроительДереваТестов; + КонтейнерТестов = ПостроительДереваТестов.СоздатьКонтейнер(ПрефиксПутейСФормами() + ФайлОбработки.ИмяБезРасширения, ПостроительДереваТестов.Объект.ИконкиУзловДереваТестов.Форма); + ФормаОбработки.ЗаполнитьНаборТестов(ЭтаФорма); + Результат = КонтейнерТестов; + КонтейнерТестов = Неопределено; + ТекущаяГруппа = Неопределено; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция ЭтоНовыйФорматОбработки(Знач ТекстОшибки) + ЭтоНовыйФорматОбработки = Не ЕстьОшибка_МетодОбъектаНеОбнаружен(ТекстОшибки, "ЗаполнитьНаборТестов"); + + Возврат ЭтоНовыйФорматОбработки; +КонецФункции + +&НаКлиенте +Функция ЗагрузитьТестыВСтаромФормате_НаКлиенте(ПостроительДереваТестов, ФормаОбработки, ФайлОбработки) + Попытка + СписокТестов = ФормаОбработки.ПолучитьСписокТестов(); + Исключение + Описание = ОписаниеОшибки(); + Если Найти(Описание, "Недостаточно фактических параметров") > 0 Тогда + ВызватьИсключение "Старый формат тестов в обработке тестов <"+ФайлОбработки.ПолноеИмя+">."+Символы.ПС+ + "Метод ПолучитьСписокТестов сейчас не принимает параметров"; + КонецЕсли; + + Если Найти(Описание, "Метод объекта не обнаружен (ПолучитьСписокТестов)") = 0 Тогда + ВызватьИсключение Описание; + КонецЕсли; + КонецПопытки; + СлучайныйПорядокВыполнения = Истина; + Попытка + СлучайныйПорядокВыполнения = ФормаОбработки.РазрешенСлучайныйПорядокВыполненияТестов(); + Исключение + КонецПопытки; + + ИмяКонтейнера = ПрефиксПутейСФормами() + ФайлОбработки.ИмяБезРасширения; + Путь = ПрефиксПутейСФормами() + ФайлОбработки.ПолноеИмя; + Контейнер = ПолучитьКонтейнерДереваТестовПоСпискуТестовНаСервере(СписокТестов, ИмяКонтейнера, Путь, СлучайныйПорядокВыполнения); + Контейнер.ИконкаУзла = ПостроительДереваТестов.Объект.ИконкиУзловДереваТестов.Форма; + + Возврат Контейнер; +КонецФункции + +&НаСервере +Функция ПолучитьКонтейнерДереваТестовПоСпискуТестовНаСервере(СписокТестов, ИмяКонтейнера, Путь, СлучайныйПорядокВыполнения = Истина) + + КонтекстЯдра = ПолучитьКонтекстЯдраНаСервере(); + + ПостроительДереваТестов = КонтекстЯдра.СоздатьОбъектПлагина("ПостроительДереваТестов"); + Контейнер = ЭтотОбъектНаСервере().ПолучитьКонтейнерДереваТестовПоСпискуТестов(ПостроительДереваТестов, СписокТестов, ИмяКонтейнера, Путь, СлучайныйПорядокВыполнения); + + Возврат Контейнер; +КонецФункции + +&НаКлиенте +Функция ЭтоПутьККлиентскомуКонтексту(Путь) + ПрефиксПутейСФормами = ПрефиксПутейСФормами(); + Результат = (Найти(Путь, ПрефиксПутейСФормами) = 1); + + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция ПрефиксПутейСФормами() + Возврат "УпрФорма # "; +КонецФункции + +// { API нового формата +&НаКлиенте +Процедура СлучайныйПорядокВыполнения() Экспорт + Если ЗначениеЗаполнено(КонтейнерТестов) Тогда + КонтейнерТестов.СлучайныйПорядокВыполнения = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СтрогийПорядокВыполнения() Экспорт + Если ЗначениеЗаполнено(КонтейнерТестов) Тогда + КонтейнерТестов.СлучайныйПорядокВыполнения = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура НачатьГруппу(Знач ИмяГруппы, Знач СтрогийПорядокВыполнения = Ложь) Экспорт + ТекущаяГруппа = КэшПостроительДереваТестов.СоздатьКонтейнер(ИмяГруппы, КэшПостроительДереваТестов.Объект.ИконкиУзловДереваТестов.Группа); + ТекущаяГруппа.СлучайныйПорядокВыполнения = Не СтрогийПорядокВыполнения; + КонтейнерТестов.Строки.Добавить(ТекущаяГруппа); +КонецПроцедуры + +&НаКлиенте +Функция Добавить(Знач ИмяМетода, Знач Параметры = Неопределено, Знач Представление = "") Экспорт + Элемент = КэшПостроительДереваТестов.СоздатьЭлемент(ПрефиксПутейСФормами() + ЗагружаемыйПуть, ИмяМетода, Представление); + Если ЗначениеЗаполнено(Параметры) И ТипЗнч(Параметры) = Тип("Массив") Тогда + Элемент.Параметры = Параметры; + КонецЕсли; + Если ЗначениеЗаполнено(ТекущаяГруппа) Тогда + ТекущаяГруппа.Строки.Добавить(Элемент); + Иначе + КонтейнерТестов.Строки.Добавить(Элемент); + КонецЕсли; + + Возврат Элемент; +КонецФункции + +&НаКлиенте +Функция ПараметрыТеста(Знач Парам1, Знач Парам2 = Неопределено, Знач Парам3 = Неопределено, Знач Парам4 = Неопределено, Знач Парам5 = Неопределено, Знач Парам6 = Неопределено, Знач Парам7 = Неопределено, Знач Парам8 = Неопределено, Знач Парам9 = Неопределено) Экспорт + ВсеПараметры = Новый Массив; + ВсеПараметры.Добавить(Парам1); + ВсеПараметры.Добавить(Парам2); + ВсеПараметры.Добавить(Парам3); + ВсеПараметры.Добавить(Парам4); + ВсеПараметры.Добавить(Парам5); + ВсеПараметры.Добавить(Парам6); + ВсеПараметры.Добавить(Парам7); + ВсеПараметры.Добавить(Парам8); + ВсеПараметры.Добавить(Парам9); + + ИндексСПоследнимПараметром = 0; + Для Сч = 0 По ВсеПараметры.ВГраница() Цикл + Индекс = ВсеПараметры.ВГраница() - Сч; + Если ВсеПараметры[Индекс] <> Неопределено Тогда + ИндексСПоследнимПараметром = Индекс; + Прервать; + КонецЕсли; + КонецЦикла; + + ПараметрыТеста = Новый Массив; + Для Сч = 0 По ИндексСПоследнимПараметром Цикл + ПараметрыТеста.Добавить(ВсеПараметры[Сч]); + КонецЦикла; + + Возврат ПараметрыТеста; +КонецФункции +// } API нового формата + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции + +&НаКлиенте +Функция ЕстьОшибка_МетодОбъектаНеОбнаружен(Знач ТекстОшибки, Знач ИмяМетода) + Результат = Ложь; + Если Найти(текстОшибки, "Метод объекта не обнаружен (" + ИмяМетода + ")") > 0 + ИЛИ Найти(текстОшибки, "Object method not found (" + ИмяМетода + ")") > 0 Тогда + Результат = Истина; + КонецЕсли; + + Возврат Результат; +КонецФункции +// } Helpers + +// Универсальная функция для проверки наличия +// свойств у значения любого типа данных +// Переменные: +// 1. Переменная - переменная любого типа, +// для которой необходимо проверить наличие свойства +// 2. ИмяСвойства - переменная типа "Строка", +// содержащая искомое свойства +// +&НаКлиентеНаСервереБезКонтекста +Функция ПеременнаяСодержитСвойство(Переменная, ИмяСвойства) + // Инициализируем структуру для теста + // с ключом (значение переменной "ИмяСвойства") + // и значением произвольного GUID'а + GUIDПроверка = Новый УникальныйИдентификатор; + СтруктураПроверка = Новый Структура; + СтруктураПроверка.Вставить(ИмяСвойства, GUIDПроверка); + // Заполняем созданную структуру из переданного + // значения переменной + ЗаполнитьЗначенияСвойств(СтруктураПроверка, Переменная); + // Если значение для свойства структуры осталось + // NULL, то искомое свойство не найдено, + // и наоборот. + Если СтруктураПроверка[ИмяСвойства] = GUIDПроверка Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; +КонецФункции + +&НаСервере +Функция ПолучитьКонтекстЯдраНаСервере() + + // Получаем доступ к серверному контексту обработки с использованием + // полного имени метаданных браузера тестов. Иначе нет возможности получить + // доступ к серверному контексту ядра, т.к. изначально вызов был выполнен на клиенте. + // При передаче на сервер клиентский контекст теряется. + КонтекстЯдра = Неопределено; + МетаданныеЯдра = Метаданные.НайтиПоПолномуИмени(ПолноеИмяБраузераТестов); + Если НЕ МетаданныеЯдра = Неопределено + И Метаданные.Обработки.Содержит(МетаданныеЯдра) Тогда + ИмяОбработкиКонекстаЯдра = СтрЗаменить(ПолноеИмяБраузераТестов, "Обработка", "Обработки"); + Выполнить("КонтекстЯдра = " + ИмяОбработкиКонекстаЯдра + ".Создать()"); + Иначе + ИмяОбработкиКонекстаЯдра = СтрЗаменить(ПолноеИмяБраузераТестов, "ВнешняяОбработка", "ВнешниеОбработки"); + ИмяОбработкиКонекстаЯдра = СтрЗаменить(ИмяОбработкиКонекстаЯдра, ".", Символы.ПС); + МенеджерОбъектов = СтрПолучитьСтроку(ИмяОбработкиКонекстаЯдра, 1); + ИмяОбъекта = СтрПолучитьСтроку(ИмяОбработкиКонекстаЯдра, 2); + Выполнить("КонтекстЯдра = " + МенеджерОбъектов + ".Создать("""+ИмяОбъекта+""")"); + КонецЕсли; + + Возврат КонтекстЯдра; + +КонецФункции + +// } Подсистема конфигурации xUnitFor1C + +// { Вспомогательные методы +&НаКлиенте +Процедура ВыбратьПутьИнтерактивноЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт + + ДиалогВыбораТеста = ДополнительныеПараметры.ДиалогВыбораТеста; + Результат = ДополнительныеПараметры.Результат; + КонтекстЯдра = ДополнительныеПараметры.КонтекстЯдра; + + Если (ВыбранныеФайлы <> Неопределено) Тогда + Для каждого ПолноеИмяФайла Из ДиалогВыбораТеста.ВыбранныеФайлы Цикл + Результат.ДобавитьСтроку(ПолноеИмяФайла); + КонецЦикла; + КонецЕсли; + Текст = Результат.ПолучитьТекст(); + + Текст = Лев(Текст, СтрДлина(Текст) - 1); + + Описание = ОписаниеПлагина(КонтекстЯдра.Объект.ТипыПлагинов); + КонтекстЯдра.ЗагрузитьТесты(Описание.Идентификатор, Текст); + +КонецПроцедуры +// } Вспомогательные методы \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224.xml" new file mode 100644 index 000000000..8be63d09e --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224.xml" @@ -0,0 +1,34 @@ + + + + + + 5fab865a-4384-4e3d-b8c2-8f9c92c65caa + cb644038-fe47-438d-806d-93c31854abcb + + + 25ff583c-aaa2-4a53-8947-5c46c6f40b13 + 9eafe761-cfc9-43c9-974a-f4858337649e + + + + ЗапросыИзБД + + + ru + Запросы из БД + + + + false + DataProcessor.ЗапросыИзБД.Form.Форма + + false + + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..707628c56 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Ext/ObjectModule.bsl" @@ -0,0 +1,260 @@ +//TODO раскомментировать утверждения во всех методах после решения Архитектура взаимодействия плагинов/утилит между собой #568 https://github.com/xDrivenDevelopment/xUnitFor1C/issues/568 + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Утилита); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "ЗапросыИзБД"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры +// } Plugin interface + +//{ Методы проверки таблиц метаданных +Функция ПолучитьКоличествоДокументовПоОтбору(видДокумента, Дата1, дата2, структураОтбора = Неопределено) Экспорт + //ПроверитьЗаполненность(видДокумента, "видДокумента"); + //ПроверитьЗаполненность(Дата1, "Дата1"); + //ПроверитьЗаполненность(Дата2, "Дата2"); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Доки.Ссылка) КАК КоличествоДокументов + |ИЗ + | Документ."+видДокумента+" КАК Доки + |ГДЕ + | Доки.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 + |"; + Запрос.УстановитьПараметр("Дата1", Дата1); + Запрос.УстановитьПараметр("Дата2", КонецДня(Дата2)); + + Если ЗначениеЗаполнено(структураОтбора) Тогда + Для каждого ключЗначение Из структураОтбора Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Доки."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат выборка.КоличествоДокументов; +КонецФункции + +Функция ПолучитьКоличествоЭлементовСправочникаПоОтбору(видСправочника, структураОтбора = Неопределено) Экспорт + //ПроверитьЗаполненность(видСправочника, "видСправочника"); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Спр.Ссылка) КАК КоличествоЭлементов + |ИЗ + | Справочник."+видСправочника+" КАК Спр + |ГДЕ + | Истина + |"; + + Если ЗначениеЗаполнено(структураОтбора) Тогда + Для каждого ключЗначение Из структураОтбора Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Спр."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат выборка.КоличествоЭлементов; +КонецФункции + +Функция ПолучитьКоличествоСтрокВДокументахПоОтбору(видДокумента, имяТабличнойЧасти, Дата1, дата2, структураОтбораШапки = Неопределено, структураОтбораТабличнойЧасти = Неопределено) Экспорт + //ПроверитьЗаполненность(видДокумента, "видДокумента"); + //ПроверитьЗаполненность(Дата1, "Дата1"); + //ПроверитьЗаполненность(Дата2, "Дата2"); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | КОЛИЧЕСТВО(Доки.Ссылка) КАК КоличествоДокументов + |ИЗ + | Документ."+видДокумента+"."+имяТабличнойЧасти+" КАК Доки + |ГДЕ + | Доки.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 + |"; + Запрос.УстановитьПараметр("Дата1", Дата1); + Запрос.УстановитьПараметр("Дата2", КонецДня(Дата2)); + + Если ЗначениеЗаполнено(структураОтбораШапки) Тогда + Для каждого ключЗначение Из структураОтбораШапки Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Доки.Ссылка."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + Если ЗначениеЗаполнено(структураОтбораТабличнойЧасти) Тогда + Для каждого ключЗначение Из структураОтбораТабличнойЧасти Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Доки."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат выборка.КоличествоДокументов; +КонецФункции + +Функция ПолучитьИтоговуюСуммуТабличнойЧастиДокументовПоОтбору(видДокумента, имяТабличнойЧасти, имяРеквизита, Дата1, дата2, структураОтбораШапки = Неопределено, структураОтбораТабличнойЧасти = Неопределено) Экспорт + //ПроверитьЗаполненность(видДокумента, "видДокумента"); + //ПроверитьЗаполненность(Дата1, "Дата1"); + //ПроверитьЗаполненность(Дата2, "Дата2"); + Запрос = Новый Запрос; + текстТабличнаяЧасть = ?(НЕ ЗначениеЗаполнено(имяТабличнойЧасти), "", "."+имяТабличнойЧасти); + Запрос.Текст = "ВЫБРАТЬ + | ЕСТЬNULL(СУММА(Доки."+имяРеквизита+"), 0) КАК Сумма + |ИЗ + | Документ."+видДокумента+текстТабличнаяЧасть+" КАК Доки + |ГДЕ + | Доки.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 + |"; + Запрос.УстановитьПараметр("Дата1", Дата1); + Запрос.УстановитьПараметр("Дата2", КонецДня(Дата2)); + + Если ЗначениеЗаполнено(структураОтбораШапки) Тогда + Для каждого ключЗначение Из структураОтбораШапки Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Доки.Ссылка."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + //ПроверитьИстину(НЕ (имяТабличнойЧасти = "" И ЗначениеЗаполнено(структураОтбораТабличнойЧасти)), "табличная часть не должна быть указана"); + Если ЗначениеЗаполнено(структураОтбораТабличнойЧасти) Тогда + Для каждого ключЗначение Из структураОтбораТабличнойЧасти Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Доки."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат выборка.Сумма; +КонецФункции + +Функция ПолучитьИтоговуюСуммуДокументовПоОтбору(видДокумента, имяРеквизита, Дата1, дата2, структураОтбораШапки = Неопределено, структураОтбораТабличнойЧасти = Неопределено) Экспорт + Возврат ПолучитьИтоговуюСуммуТабличнойЧастиДокументовПоОтбору(видДокумента, "", имяРеквизита, Дата1, дата2, структураОтбораШапки, структураОтбораТабличнойЧасти); +КонецФункции + +Функция ПолучитьКоличествоЭлементовМетаданногоПоОтбору(типМетаданного, видМетаданного, структураОтбора = Неопределено) Экспорт + //ПроверитьЗаполненность(типМетаданного, "типМетаданного"); + //ПроверитьЗаполненность(видМетаданного, "видМетаданного"); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Таб.Ссылка) КАК КоличествоЭлементов + |ИЗ + | "+типМетаданного+"."+видМетаданного+" КАК Таб + |ГДЕ + | Истина + |"; + + Если ЗначениеЗаполнено(структураОтбора) Тогда + Для каждого ключЗначение Из структураОтбора Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Таб."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат выборка.КоличествоЭлементов; +КонецФункции + +Функция ПолучитьКоличествоБизнесПроцессовПоОтбору(видМетаданного, структураОтбора = Неопределено) Экспорт + Возврат ПолучитьКоличествоЭлементовМетаданногоПоОтбору("БизнесПроцесс", видМетаданного, структураОтбора); +КонецФункции + +Функция ПолучитьКоличествоЗадачПоОтбору(видМетаданного, структураОтбора = Неопределено) Экспорт + Возврат ПолучитьКоличествоЭлементовМетаданногоПоОтбору("Задача", видМетаданного, структураОтбора); +КонецФункции + +Функция ПолучитьКоличествоЭлементовРегистраПоОтбору(типМетаданного, видМетаданного, структураОтбора = Неопределено) Экспорт + //ПроверитьЗаполненность(типМетаданного, "типМетаданного"); + //ПроверитьЗаполненность(видМетаданного, "видМетаданного"); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК КоличествоЭлементов + |ИЗ + | "+типМетаданного+"."+видМетаданного+" КАК Таб + |ГДЕ + | Истина + |"; + + Если ЗначениеЗаполнено(структураОтбора) Тогда + Для каждого ключЗначение Из структураОтбора Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Таб."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат выборка.КоличествоЭлементов; +КонецФункции + +Функция ПолучитьЭлементыМетаданногоПоОтбору(типМетаданного, видМетаданного, Количество=1, структураОтбора = Неопределено) Экспорт + //ПроверитьЗаполненность(типМетаданного, "типМетаданного"); + //ПроверитьЗаполненность(видМетаданного, "видМетаданного"); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ "+Количество+" + | * + |ИЗ + | "+типМетаданного+"."+видМетаданного+" КАК Таб + |ГДЕ + | Истина + |"; + + Если ЗначениеЗаполнено(структураОтбора) Тогда + Для каждого ключЗначение Из структураОтбора Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Таб."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + ТЗ = РезультатЗапроса.Выгрузить(); + + Возврат ТЗ; +КонецФункции + +//} diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..5a3f06ae6 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..d52777a3c --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.ЗапросыИзБД + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..c8ecf2899 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\267\320\221\320\224/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,19 @@ + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции +// } Helpers diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273.xml" new file mode 100644 index 000000000..0f112afd9 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273.xml" @@ -0,0 +1,34 @@ + + + + + + a64d7630-e34d-44c3-96a7-2f74e52fb59b + e0ef74f8-574b-4d5c-83ee-02531ff65b1e + + + 53d7acbc-cc5a-4622-b402-a4fa191e451f + 0b3276c2-2aff-41f0-b1d4-9a6fe5b75fb2 + + + + КомандныйФайл + + + ru + Командный файл + + + + false + DataProcessor.КомандныйФайл.Form.Форма + + false + + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..2d51cdf26 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273/Ext/ObjectModule.bsl" @@ -0,0 +1,74 @@ + +////////////////////////////////////////////////////////////////////////// +// Работа с командными файлами + +//#Использовать tempfiles + +Перем мЗаписьТекста; +Перем мПуть; + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Утилита); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "КомандныйФайл"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры +// } Plugin interface + +Функция Открыть(Знач Путь = "") Экспорт + + Если ПустаяСтрока(Путь) Тогда + мПуть = ПолучитьИмяВременногоФайла(".bat"); + //мПуть = ВременныеФайлы.НовоеИмяФайла(".bat"); + Иначе + мПуть = Путь; + КонецЕсли; + + мЗаписьТекста = Новый ЗаписьТекста(мПуть, "cp866"); + + Возврат мПуть; + +КонецФункции + +Процедура Добавить(Знач Команда) Экспорт + ПроверитьЧтоФайлОткрыт(); + мЗаписьТекста.ЗаписатьСтроку(Команда); +КонецПроцедуры + +Функция ВыполнитьКоманду() Экспорт + + Закрыть(); + + ПутьПакетногоФайла = мПуть; + + СтрокаЗапуска = "cmd.exe /C """ + ПутьПакетногоФайла + """"; + + КодВозврата = ""; + ЗапуститьПриложение(СтрокаЗапуска,, Истина, КодВозврата); + + Возврат КодВозврата; + +КонецФункции + +Функция Закрыть() Экспорт + + Если мЗаписьТекста <> Неопределено Тогда + мЗаписьТекста.Закрыть(); + мЗаписьТекста = Неопределено; + КонецЕсли; + + Возврат мПуть; + +КонецФункции + +Процедура ПроверитьЧтоФайлОткрыт() + Если мЗаписьТекста = Неопределено Тогда + Открыть(); + КонецЕсли; +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..b3cc3bb8f --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..87cf36438 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.КомандныйФайл + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..c8ecf2899 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\244\320\260\320\271\320\273/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,19 @@ + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции +// } Helpers diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270.xml" new file mode 100644 index 000000000..30b7a1a14 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270.xml" @@ -0,0 +1,66 @@ + + + + + + 91794e78-eca2-4d8d-9525-5eb66cd4a3d5 + af3aa04f-2b24-44b8-8358-3e7a109d4784 + + + 3a637603-c3b3-49b4-9034-812a5f1a0247 + a23e0fbb-a44b-4e58-9a35-889fbe9fb549 + + + + ПарсерКоманднойСтроки + + + ru + Парсер командной строки + + + + false + DataProcessor.ПарсерКоманднойСтроки.Form.Форма + + false + + + + + + + ВозможныеКлючи + + + ru + Возможные ключи + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..d2b7e09f5 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270/Ext/ObjectModule.bsl" @@ -0,0 +1,145 @@ +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Утилита); + МетаданныеПлагина = Метаданные(); + Результат.Вставить("Идентификатор", МетаданныеПлагина.Имя); + Результат.Вставить("Представление", МетаданныеПлагина.Синоним); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + НачальнаяНастройка(); +КонецПроцедуры +// } Plugin interface + +Процедура НачальнаяНастройка() Экспорт + ВозможныеКлючи = ВозможныеКлючиКоманднойСтроки(); +КонецПроцедуры + +Функция Разобрать(СтрокаПараметров) Экспорт + Результат = Новый Структура; + + МассивСтрокПараметров = РазложитьСтрокуВМассивПодстрок(СтрокаПараметров, ";"); + Для каждого СтрокаПараметра Из МассивСтрокПараметров Цикл + КлючИПараметры = РаспознатьКлючИЕгоПараметры(СтрокаПараметра); + Если КлючИПараметры <> Неопределено Тогда + Результат.Вставить(КлючИПараметры.Ключ, КлючИПараметры.Параметры); + КонецЕсли; + КонецЦикла; + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт + + Результат = Новый Массив; + + // для обеспечения обратной совместимости + Если ПропускатьПустыеСтроки = Неопределено Тогда + ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); + Если ПустаяСтрока(Строка) Тогда + Если Разделитель = " " Тогда + Результат.Добавить(""); + КонецЕсли; + Возврат Результат; + КонецЕсли; + КонецЕсли; + // + + Позиция = Найти(Строка, Разделитель); + Пока Позиция > 0 Цикл + Подстрока = Лев(Строка, Позиция - 1); + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда + Результат.Добавить(Подстрока); + КонецЕсли; + Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); + Позиция = Найти(Строка, Разделитель); + КонецЦикла; + + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда + Результат.Добавить(Строка); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция РаспознатьКлючИЕгоПараметры(Знач СтрокаПараметра) + Результат = Неопределено; + СтрокаПараметра = НРег(СокрЛП(СтрокаПараметра)); + Разделитель = " "; + КлючКоманднойСтроки = ПолучитьКлюч(СтрокаПараметра, Разделитель); + Если ЗначениеЗаполнено(КлючКоманднойСтроки) И ЭтоДопустимыйКлюч(КлючКоманднойСтроки) Тогда + ПараметрыКлюча = ВыделитьПараметрыКлюча(СтрокаПараметра, Разделитель); + Результат = Новый Структура("Ключ, Параметры", КлючКоманднойСтроки, ПараметрыКлюча); + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ПолучитьКлюч(СтрокаПараметра, Разделитель) + МассивПодстрок = РазложитьСтрокуВМассивПодстрок(СтрокаПараметра, Разделитель); + КлючКоманднойСтроки = МассивПодстрок[0]; + + Возврат КлючКоманднойСтроки; +КонецФункции + +Функция ВыделитьПараметрыКлюча(Знач СтрокаПараметра, Разделитель); + Результат = Новый Массив; + Кавычка = """"; + ВнутриКавычки = Ложь; + + ИскатьПодстроки = Истина; + Пока ИскатьПодстроки Цикл + ПозицияРазделителя = Найти(СтрокаПараметра, Разделитель); + ПозицияКавычки = Найти(СтрокаПараметра, Кавычка); + ВнутриКавычки = (ПозицияКавычки > 0) И (ПозицияРазделителя > ПозицияКавычки) Или (ПозицияРазделителя = 0); + Позиция = ?(ВнутриКавычки, ПозицияКавычки, ПозицияРазделителя); + ИскатьПодстроки = Позиция > 0; + Если ИскатьПодстроки Тогда + Если ВнутриКавычки Тогда + СтрокаПараметра = Сред(СтрокаПараметра, Позиция + СтрДлина(Кавычка)); + ПозицияКонца = Найти(СтрокаПараметра, Кавычка); + Подстрока = Лев(СтрокаПараметра, ПозицияКонца - 1); + СтрокаПараметра = Сред(СтрокаПараметра, ПозицияКонца + СтрДлина(Кавычка)); + Иначе + Подстрока = Лев(СтрокаПараметра, Позиция - 1); + СтрокаПараметра = Сред(СтрокаПараметра, Позиция + СтрДлина(Разделитель)); + КонецЕсли; + Результат.Добавить(Подстрока); + КонецЕсли; + КонецЦикла; + + Если Не ПустаяСтрока(СтрокаПараметра) Тогда + Результат.Добавить(СтрокаПараметра); + КонецЕсли; + + Результат.Удалить(0); + + Возврат Новый ФиксированныйМассив(Результат); +КонецФункции + +Функция ВозможныеКлючиКоманднойСтроки() + ВозможныеКлючиКоманднойСтроки = Новый Структура; + ВозможныеКлючиКоманднойСтроки.Вставить("xddRun", "xddRun"); + ВозможныеКлючиКоманднойСтроки.Вставить("xddShutdown", "xddShutdown"); + ВозможныеКлючиКоманднойСтроки.Вставить("xddReport", "xddReport"); + + Возврат Новый ФиксированнаяСтруктура(ВозможныеКлючиКоманднойСтроки); +КонецФункции + +Функция ЭтоДопустимыйКлюч(Знач Ключ) + Результат = Истина; + ВозможныеКлючиКоманднойСтроки = ВозможныеКлючиКоманднойСтроки(); + Попытка + ПредставлениеКлюча = ВозможныеКлючиКоманднойСтроки[Ключ]; + Исключение + Результат = Ложь; + КонецПопытки; + + Возврат Результат; +КонецФункции + +НачальнаяНастройка(); diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..29915e231 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..4ee0eb18e --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.ПарсерКоманднойСтроки + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..dc9c9f503 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\260\321\200\321\201\320\265\321\200\320\232\320\276\320\274\320\260\320\275\320\264\320\275\320\276\320\271\320\241\321\202\321\200\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,29 @@ + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +&НаКлиенте +Функция Разобрать(СтрокаПараметров) Экспорт + Возврат РазобратьНаСервере(СтрокаПараметров); +КонецФункции + +&НаСервере +Функция РазобратьНаСервере(СтрокаПараметров) + Возврат ЭтотОбъектНаСервере().Разобрать(СтрокаПараметров); +КонецФункции + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции +// } Helpers diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262.xml" new file mode 100644 index 000000000..3d49678a0 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262.xml" @@ -0,0 +1,98 @@ + + + + + + f61c3304-384c-4760-9816-fc6f841ba34b + 9d336a8a-8389-402b-b725-c58bbc63cc07 + + + 8ddeef82-83e4-4ee3-b16d-4b7a0764bd75 + 430c556b-a880-405b-812f-690953191b37 + + + + ПостроительДереваТестов + + + ru + Построитель дерева тестов + + + + false + DataProcessor.ПостроительДереваТестов.Form.Форма + + false + + + + + + + ИконкиУзловДереваТестов + + + ru + Иконки узлов дерева тестов + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ТипыУзловДереваТестов + + + ru + Типы узлов дерева тестов + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..377977a4a --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262/Ext/ObjectModule.bsl" @@ -0,0 +1,72 @@ + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Утилита); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "Построитель дерева тестов"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + НачальнаяНастройка(); +КонецПроцедуры +// } Plugin interface + +Процедура НачальнаяНастройка() Экспорт + ЭтотОбъект.ИконкиУзловДереваТестов = ИконкиУзловДереваТестов(); + ЭтотОбъект.ТипыУзловДереваТестов = ТипыУзловДереваТестов(); +КонецПроцедуры + +Функция ИконкиУзловДереваТестов() + Результат = Новый Структура; + Результат.Вставить("Папка", 0); + Результат.Вставить("Обработка", 1); + Результат.Вставить("Функция", 2); + Результат.Вставить("Подсистема", 3); + Результат.Вставить("Форма", 4); + Результат.Вставить("ФункцияНаФорме", 5); + Результат.Вставить("Группа", 6); + Результат.Вставить("Отчет", 7); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Функция ТипыУзловДереваТестов() + Результат = Новый Структура; + Результат.Вставить("Контейнер", "Контейнер"); + Результат.Вставить("Элемент", "Элемент"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Функция СоздатьКонтейнер(ИмяКонтейнера, ИконкаУзла = Неопределено) Экспорт + Контейнер = Новый Структура; + Контейнер.Вставить("Ключ", Новый УникальныйИдентификатор); + Контейнер.Вставить("Тип", ТипыУзловДереваТестов.Контейнер); + Контейнер.Вставить("Имя", ИмяКонтейнера); + Контейнер.Вставить("Строки", Новый Массив); + Контейнер.Вставить("ИконкаУзла", ?(ИконкаУзла = Неопределено, ИконкиУзловДереваТестов.Папка, ИконкаУзла)); + Контейнер.Вставить("СлучайныйПорядокВыполнения", Истина); + Контейнер.Вставить("Контекст", Неопределено); + + Возврат Контейнер; +КонецФункции + +Функция СоздатьЭлемент(Путь, ИмяМетода, Представление = "", ИконкаУзла = Неопределено) Экспорт + Элемент = Новый Структура; + Элемент.Вставить("Ключ", Новый УникальныйИдентификатор); + Элемент.Вставить("Тип", ТипыУзловДереваТестов.Элемент); + Элемент.Вставить("Путь", Путь); + Элемент.Вставить("ИмяМетода", ИмяМетода); + Элемент.Вставить("Представление", ?(ПустаяСтрока(Представление), ИмяМетода, Представление)); + Элемент.Вставить("ИконкаУзла", ?(ИконкаУзла = Неопределено, ИконкиУзловДереваТестов.Функция, ИконкаУзла)); + Элемент.Вставить("Параметры", Новый Массив); + Элемент.Вставить("ПередЗапускомТеста", "ПередЗапускомТеста"); + Элемент.Вставить("ПослеЗапускаТеста", "ПослеЗапускаТеста"); + + Возврат Элемент; +КонецФункции + +НачальнаяНастройка(); diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..84465f702 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..c15015c31 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.ПостроительДереваТестов + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..3be6f2963 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\321\200\320\265\320\262\320\260\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,39 @@ + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +&НаКлиенте +Функция СоздатьКонтейнер(ИмяКонтейнера, ИконкаУзла = Неопределено) Экспорт + Возврат СоздатьКонтейнерНаСервере(ИмяКонтейнера, ИконкаУзла); +КонецФункции + +&НаСервере +Функция СоздатьКонтейнерНаСервере(ИмяКонтейнера, ИконкаУзла) + Возврат ЭтотОбъектНаСервере().СоздатьКонтейнер(ИмяКонтейнера, ИконкаУзла); +КонецФункции + +&НаКлиенте +Функция СоздатьЭлемент(Путь, ИмяМетода, Представление = "", ИконкаУзла = Неопределено) Экспорт + Возврат СоздатьЭлементНаСервере(Путь, ИмяМетода, Представление, ИконкаУзла); +КонецФункции + +&НаСервере +Функция СоздатьЭлементНаСервере(Путь, ИмяМетода, Представление, ИконкаУзла) + Возврат ЭтотОбъектНаСервере().СоздатьЭлемент(Путь, ИмяМетода, Представление, ИконкаУзла); +КонецФункции + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции +// } Helpers \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217.xml" new file mode 100644 index 000000000..f26239e1e --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217.xml" @@ -0,0 +1,551 @@ + + + + + + b5b2dd06-2a38-4ae3-8df1-3af7302520df + dfb232a5-8b21-4e37-9299-04e0d6af944b + + + 219d2bd2-4b55-4f10-beae-42860bfba8bd + a6611ca0-c2bb-4fc6-9364-e37786c1585a + + + + ПреобразованиеЖурналаДействийПользователя + + + en + User action log convertor + + + ru + Преобразование журнала действий пользователя + + + + false + DataProcessor.ПреобразованиеЖурналаДействийПользователя.Form.DefaultForm + + false + + + + + + + CreatedProcedures + + + en + Created procedures + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + WindowBeingProcessed + + + en + Window being processed + + + ru + Обрабатываемое окно + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + FormBeingProcessed + + + en + Form being processed + + + ru + Обрабатываемая форма + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + WindowClosed + + + en + Window was closed + + + ru + Окно было закрыто + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + LastProcessedCommand + + + en + Last processed command + + + ru + Последняя обработанная команда + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + LastProcessedControl + + + en + Last processed control + + + ru + Последний обработанный элемент управления + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + MainProcedureName + + + en + Main procedure name + + + ru + Имя основной процедуры + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + ShowError + Items + + + Auto + Auto + + + Auto + + + + + GenerateClientConnectionScript + + + en + Generate client connection script + + + ru + Гененировать код подключения к клиенту + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ScriptVariant + + + ru + Генерировать сценарий в варианте встроенного языка + + + en + 1C:Enterprise script language + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + ShowError + Items + + + Auto + Auto + + + Auto + + + + + ConversionVariant + + + en + Convert + + + ru + Преобразовывать + + + + + xs:decimal + + 1 + 0 + Nonnegative + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + SplitScriptIntoProcedures + + + en + Split scenario into procedures by application windows + + + ru + Разбивать результат на процедуры по "границам" окон + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + GetFullHierarchy + + + en + Get full object hierarchy + + + ru + Генерировать получение родительских объектов в иерархии + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ObjectSearch + + + en + Object search + + + ru + Поиск объектов + + + + + xs:decimal + + 1 + 0 + Nonnegative + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + +
DefaultForm
+ + + +
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help.xml" new file mode 100644 index 000000000..aaa8b4844 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help.xml" @@ -0,0 +1,4 @@ + + + ru + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/_files/DataProcessor.UserActionLogConversion.Help.Start.png.png" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/_files/DataProcessor.UserActionLogConversion.Help.Start.png.png" new file mode 100644 index 000000000..de5e79e04 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/_files/DataProcessor.UserActionLogConversion.Help.Start.png.png" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/_files/DataProcessor.UserActionLogConversion.Help.Start.png1.png" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/_files/DataProcessor.UserActionLogConversion.Help.Start.png1.png" new file mode 100644 index 000000000..de5e79e04 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/_files/DataProcessor.UserActionLogConversion.Help.Start.png1.png" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/_files/DataProcessor.UserActionLogConversion.Help.Stop.png.png" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/_files/DataProcessor.UserActionLogConversion.Help.Stop.png.png" new file mode 100644 index 000000000..b33e4a642 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/_files/DataProcessor.UserActionLogConversion.Help.Stop.png.png" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/_files/DataProcessor.UserActionLogConversion.Help.Stop.png1.png" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/_files/DataProcessor.UserActionLogConversion.Help.Stop.png1.png" new file mode 100644 index 000000000..b33e4a642 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/_files/DataProcessor.UserActionLogConversion.Help.Stop.png1.png" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/ru.html" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/ru.html" new file mode 100644 index 000000000..bda2a269d --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/Help/ru.html" @@ -0,0 +1,9 @@ + +

Преобразование журнала действий пользователя во встроенный язык

+

Обработка предназначена для преобразования журнала действий пользователя в программу на встроенном языке.

+

Обработка позволяет преобразовывать указанные файлы или непосредственно введённый текст. Выберите нужный вам вариант в переключателе "Преобразовывать".

+

Формирование программы возможно на английском или русском варианте встроенного языка. По умолчанию используется вариант языка используемый в конфигурации. При необходимости сгенерировать программу в другом варианте укажите необходимый в поле "Генерировать сценарий в варианте встроенного языка".

+

В поле "Имя основной процедуры" указывается имя процедуры, которая будет являться точкой входа в сценарий.

+

Если планируется использовать сгенерированную процедуру самостоятельно (например, во внешней обработке), имеется возможность сгенерировать код подключения к тестируемому клиенту, отметив флажок "Генерировать код подключения к клиенту". В противном случае для процедуры будет сформирован параметр ТестируемоеПриложение, в который при вызове будет необходимо передать существующий объект типа ТестируемоеПриложение, который уже установил соединение с тестируемым клиентом.

+

Для упрощения чтения получаемого кода сгенерированная программа разбивается по "границам" окон приложения на подпрограммы. Если отметить флажок "Разбивать результат на процедуры по "границам" окон" будет сформирована одна большая процедура.

+

Отметка флажка "Генерировать получение родительских объектов в иерархии" позволяет при вызове метода какого-либо объекта сгенерировать получение всех родительских тестируемых объектов, которые находятся между текущим тестируемым объектом и формой. Если флажок сброшен - генерируется поиск объектов непосредственно через объект тестируемой формы.

\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..937002c4a --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Ext/ObjectModule.bsl" @@ -0,0 +1,1282 @@ +Var CreatedInWindowAndFormVariables; +Var Indent; + +Function Convert(TextToConvert) Export + + Reader = New XMLReader(); + Reader.SetString(TextToConvert); + + CreatedProcedures = New Array(); + CreatedInWindowAndFormVariables = New Map(); + + Writer = New TextDocument; + + Reader.MoveToContent(); + Indent = 0; + + // Converting the file + If Reader.NodeType = XMLNodeType.StartElement And + Reader.Name = "uilog" Then + + ConvertIntoScenario(Reader, Writer); + + EndIf; + + Return Writer.GetText(); + +EndFunction + +//////////////////////////////////////////////////////////////////////////////// +// AUXILIARY PROCEDURES AND FUNCTIONS +Procedure AddLine(Writer, OutputString, AddGoTo = False) + + // Adding required number of spaces to the string from the left + Result = ""; + For Index = 1 To Indent Do + Result = Result + " "; + EndDo; + Result = Result + OutputString; + + // Adding the string to the end of the result + Writer.AddLine(Result); + If AddGoTo Then + Writer.AddLine(""); + EndIf; + +EndProcedure + +Procedure InsertLine(Writer, LineNumber, OutputString) + + // Adding required number of spaces to the string from the left + Result = ""; + For Index = 1 To Indent Do + Result = Result + " "; + EndDo; + Result = Result + OutputString; + + // Adding the string to the result + Writer.InsertLine(LineNumber, Result); + +EndProcedure + +Function DoubleQuotationMarks(OutputString) + + // Doubling quotation marks for correctness during export to a file. + Return StrReplace(OutputString, """", """"""); + +EndFunction + +Function SearchValuesForTitle(Title, Name, Val SearchType) + + // Search 'by title' or 'by name and title' + If SearchType = 0 Or SearchType = 2 Then + If Not Title = Undefined Then + Return """" + DoubleQuotationMarks(Title) + """"; + EndIf; + If SearchType = 2 And Name = Undefined Then + Raise NStr("en = 'Specify the title or name of the object'; ru = 'У объекта должны быть заполнены заголовок или имя'"); + EndIf; + Return ""; + // Search 'by name' + ElsIf SearchType = 1 Then + If Name = Undefined Then + Return """" + DoubleQuotationMarks(Title) + """"; + EndIf; + Return ""; + // Search 'by name and title' + Else + Raise NStr("en = 'Unexpected object search type: '; ru = 'Неожиданный тип поиска объектов: '") + ObjectSearch; + EndIf; + +EndFunction + +Function SearchValuesForName(Title, Name, Val SearchType, TitleEmpty) + + If (SearchType = 0 And TitleEmpty) Then + SearchType = 1; + EndIf; + + // Search 'by title' + If SearchType = 0 Then + Return ""; + // Search 'by name' or 'by name and title' + ElsIf SearchType = 1 Or SearchType = 2 Then + If Not Name = Undefined Then + Return """" + Name + """"; + EndIf; + If SearchType = 2 And Title = Undefined Then + Raise NStr("en = 'Specify the title or name of the object'; ru = 'У объекта должны быть заполнены заголовок или имя'"); + EndIf; + Return ""; + Else + Raise NStr("en = 'Unexpected object search type: '; ru = 'Неожиданный тип поиска объектов: '") + ObjectSearch; + EndIf; + +EndFunction + +Function ConvertTitleIntoVariableName(ObjectType, ObjectTitle) + + // Variable name starts with a type name + If ObjectType = "ClientApplicationWindow" Then + + VariableName = ? (ScriptVariant = "en", "ClientWindow", "ОкноПриложения"); + ElsIf ObjectType = "Form" Then + VariableName = ? (ScriptVariant = "en", "Form", "Форма"); + ElsIf ObjectType = "FormField" Then + VariableName = ? (ScriptVariant = "en", "Field", "Поле"); + ElsIf ObjectType = "FormButton" Then + VariableName = ? (ScriptVariant = "en", "Button", "Кнопка"); + ElsIf ObjectType = "FormGroup" Then + VariableName = ? (ScriptVariant = "en", "Group", "Группа"); + ElsIf ObjectType = "FormTable" Then + VariableName = ? (ScriptVariant = "en", "Table", "Таблица"); + ElsIf ObjectType = "FormDecoration" Then + VariableName = ? (ScriptVariant = "en", "Decoration", "Декорация"); + ElsIf ObjectType = "CommandInterface" Then + VariableName = ? (ScriptVariant = "en", "CommandInterface", "КомандныйИнтерфейс"); + ElsIf ObjectType = "CommandInterfaceGroup" Then + VariableName = ? (ScriptVariant = "en", "CommandInterfaceGroup", "ГруппаКомандногоИнтерфейса"); + ElsIf ObjectType = "CommandInterfaceButton" Then + VariableName = ? (ScriptVariant = "en", "CommandInterfaceButton", "КнопкаКомандногоИнтерфейса"); + Else + Raise NStr("en = 'Unknown node: '; ru = 'Неопознанный узел '") + ObjectType; + EndIf; + + // Cutting characters except letters and digits + PreviousCharIsSpace = True; + StringLength = StrLen(ObjectTitle); + For Index = 1 To StringLength Do + NextChar = Mid(ObjectTitle,Index, 1); + If IsLetter(NextChar) Or IsDigit(NextChar) Then + VariableName = VariableName + ? (PreviousCharIsSpace, Upper(NextChar), NextChar); + PreviousCharIsSpace = False; + Else + PreviousCharIsSpace = True; + EndIf; + EndDo; + + Return VariableName; + +EndFunction + +Function IsDigit(Char) + + Code = CharCode(Char); + Return Code >= 48 And Code <= 57; + +EndFunction + +Function IsLetter(Char) + + // All non-literal character codes are considered equal + Return CharCode(Lower(Char)) <> CharCode(Upper(Char)); + +EndFunction + +//////////////////////////////////////////////////////////////////////////////// +// Convert procedures +Procedure ConvertIntoScenario(Reader, Writer) + + If GenerateClientConnectionScript Then + + AddLine(Writer, ? (ScriptVariant = "en", "&AtClient", "&НаКлиенте")); + AddLine(Writer, ? (ScriptVariant = "en", "Procedure ", "Процедура ") + MainProcedureName + "()", True); + + Indent = Indent + 1; + + AddLine(Writer, ? (ScriptVariant = "en", "TestApplication = New TestedApplication();", "ТестовоеПриложение = Новый ТестируемоеПриложение();")); + AddLine(Writer, ? (ScriptVariant = "en", "TimeOut = CurrentDate() + 60;", "ВремяОкончанияОжидания = ТекущаяДата() + 60;")); + AddLine(Writer, ? (ScriptVariant = "en", "Connected = False;", "Подключен = Ложь;")); + AddLine(Writer, ? (ScriptVariant = "en", "ConnectionErrorDescription = """";", "ОписаниеОшибкиСоединения = """";")); + AddLine(Writer, ? (ScriptVariant = "en", "While Not CurrentDate() >= TimeOut Do", "Пока Не ТекущаяДата() >= ВремяОкончанияОжидания Цикл")); + AddLine(Writer, ? (ScriptVariant = "en", " Try", " Попытка")); + AddLine(Writer, ? (ScriptVariant = "en", " TestApplication.Connect();", " ТестовоеПриложение.УстановитьСоединение();")); + AddLine(Writer, ? (ScriptVariant = "en", " Connected = True;", " Подключен = Истина;")); + AddLine(Writer, ? (ScriptVariant = "en", " Break;", " Прервать;")); + AddLine(Writer, ? (ScriptVariant = "en", " Except", " Исключение")); + AddLine(Writer, ? (ScriptVariant = "en", " ConnectionErrorDescription = ErrorDescription();", " ОписаниеОшибкиСоединения = ОписаниеОшибки();")); + AddLine(Writer, ? (ScriptVariant = "en", " EndTry;", " КонецПопытки;")); + AddLine(Writer, ? (ScriptVariant = "en", "EndDo;", "КонецЦикла;")); + AddLine(Writer, ? (ScriptVariant = "en", "If Not Connected Then", "Если Не Подключен Тогда")); + AddLine(Writer, ? (ScriptVariant = "en", " TestApplication = Undefined;", " ТестовоеПриложение = Неопределено;")); + AddLine(Writer, ? (ScriptVariant = "en", " Message(""Connection cannot be established. "" + Chars.LF + ConnectionErrorDescription);", " Сообщить(""Не смогли установить соединение! "" + Символы.ПС + ОписаниеОшибкиСоединения);")); + AddLine(Writer, ? (ScriptVariant = "en", " Return;", " Возврат;")); + AddLine(Writer, ? (ScriptVariant = "en", "EndIf;", "КонецЕсли;"), True); + + Indent = Indent - 1; + + Else + + AddLine(Writer, ? (ScriptVariant = "en", "&AtClient", "&НаКлиенте")); + AddLine(Writer, ? (ScriptVariant = "en", "Procedure ", "Процедура ") + MainProcedureName + ? (ScriptVariant = "en", "(TestApplication)", "(ТестовоеПриложение)"), True); + + EndIf; + + Reader.Read(); + + LocalWriter = Writer; + If SplitScriptIntoProcedures Then + LocalWriter = New TextDocument(); + EndIf; + + While Reader.NodeType <> XMLNodeType.EndElement Do + + If Reader.Name = "ClientApplicationWindow" Then + + LocalProcedureName = ""; + ConvertWindow(Reader, LocalWriter, LocalProcedureName); + + If SplitScriptIntoProcedures Then + + Indent = Indent + 1; + AddLine(Writer, LocalProcedureName + ? (ScriptVariant = "en", "(TestApplication);", "(ТестовоеПриложение);")); + Indent = Indent - 1 ; + + EndIf; + + ElsIf Reader.Name = "Form" Then + + AddLine(Writer, ""); + + Indent = Indent + 1; + + WindowBeingProcessed = ""; + CreatedInWindowAndFormVariables.Insert(WindowBeingProcessed, New Map()); + ConvertForm(Reader, Writer, ? (ScriptVariant = "en", "TestApplication", "ТестовоеПриложение")); + + Indent = Indent - 1; + + Else + + Raise NStr("en = 'Unknown node '; ru = 'Неопознанный узел '") + Reader.Name + ": " + Reader.Value; + + EndIf; + + EndDo; + + If SplitScriptIntoProcedures Then + AddLine(Writer, ""); + EndIf; + AddLine(Writer, ? (ScriptVariant = "en", "EndProcedure", "КонецПроцедуры")); + + If SplitScriptIntoProcedures Then + AddLine(Writer, LocalWriter.GetText()); + EndIf; + +EndProcedure + +Procedure ConvertWindow(Reader, Writer, LocalProcedureName) + + ObjectType = Reader.Name; + ObjectTitle = ""; + IsMainWindow = False; + While Reader.ReadAttribute() Do + If Reader.Name = "caption" Then + ObjectTitle = Reader.Value; + ElsIf Reader.Name = "isMain" Then + IsMainWindow = Boolean(Reader.Value); + EndIf; + EndDo; + + VariableName = ConvertTitleIntoVariableName(ObjectType, ? (IsMainWindow, ? (ScriptVariant = "en", "Main", "Основное"), ObjectTitle)); + + WindowBeingProcessed = VariableName; + + If SplitScriptIntoProcedures Then + LineCountBeforeProcess = Writer.LineCount(); + EndIf; + + Indent = Indent + 1; + + If CreatedInWindowAndFormVariables.Get(WindowBeingProcessed) = Undefined Then + + CreatedInWindowAndFormVariables.Insert(WindowBeingProcessed, New Map()); + + If IsMainWindow Then + AddLine(Writer, ""); + AddLine(Writer, VariableName + ? (ScriptVariant = "en", " = Undefined;", " = Неопределено;")); + AddLine(Writer, ? (ScriptVariant = "en", "ClientWindowsOfApplicationBeingTested = TestApplication.GetChildObjects();", "КлиентсткиеОкнаТестируемогоПриложения = ТестовоеПриложение.ПолучитьПодчиненныеОбъекты();")); + AddLine(Writer, ? (ScriptVariant = "en", "For Each WindowBeingTested In ClientWindowsOfApplicationBeingTested Do", "Для Каждого ТестируемоеОкно Из КлиентсткиеОкнаТестируемогоПриложения Цикл")); + AddLine(Writer, ? (ScriptVariant = "en", " If WindowBeingTested.IsMain Then", " Если ТестируемоеОкно.Основное Тогда")); + AddLine(Writer, " " + VariableName + ? (ScriptVariant = "en", " = WindowBeingTested;", " = ТестируемоеОкно;")); + AddLine(Writer, ? (ScriptVariant = "en", " Break;", " Прервать;")); + AddLine(Writer, ? (ScriptVariant = "en", " EndIf;", " КонецЕсли;")); + AddLine(Writer, ? (ScriptVariant = "en", "EndDo;", "КонецЦикла;")); + Else + + AddLine(Writer, VariableName + ? (ScriptVariant = "en", " = TestApplication.FindObject(Type(""TestedClientApplicationWindow""), """, " = ТестовоеПриложение.НайтиОбъект(Тип(""ТестируемоеОкноКлиентскогоПриложения""), """) + DoubleQuotationMarks(ObjectTitle) + """, , 30);"); + + EndIf; + + EndIf; + WindowClosed = False; + + Reader.Read(); + While Reader.NodeType <> XMLNodeType.EndElement Do + + If Reader.Name = "Form" Then + ConvertForm(Reader, Writer, VariableName); + ElsIf Reader.Name = "CommandInterface" Then + ConvertWindowCommandInterface(Reader, Writer, VariableName); + ElsIf Not ConvertCommand(Reader, Writer, VariableName) Then + Raise NStr("en = 'Unknown node '; ru = 'Неопознанный узел '") + Reader.Name + ": " + Reader.Value; + EndIf; + + EndDo; + + Indent = Indent - 1; + Reader.Read(); + + If WindowClosed Or SplitScriptIntoProcedures Then + CreatedInWindowAndFormVariables.Delete(WindowBeingProcessed); + EndIf; + + If SplitScriptIntoProcedures Then + + ProcedureCount = 0; + While True Do + LocalProcedureName = VariableName + LastProcessedControl + LastProcessedCommand + ? (ProcedureCount = 0, "", ProcedureCount); + Prologue = ? (ScriptVariant = "en", "Procedure ", "Процедура ") + LocalProcedureName + ? (ScriptVariant = "en", "(TestApplication)", "(ТестовоеПриложение)"); + If CreatedProcedures.Find(Prologue) = Undefined Then + CreatedProcedures.Add(Prologue); + Break; + EndIf; + ProcedureCount = ProcedureCount + 1; + EndDo; + + InsertLine(Writer, LineCountBeforeProcess, Prologue); + InsertLine(Writer, LineCountBeforeProcess, ? (ScriptVariant = "en", "&AtClient", "&НаКлиенте")); + InsertLine(Writer, LineCountBeforeProcess, ""); + + AddLine(Writer, ? (ScriptVariant = "en", "EndProcedure", "КонецПроцедуры"), True); + + EndIf; + +EndProcedure + +Procedure ConvertWindowCommandInterface(Reader, Writer, ParentVariable) + + ObjectType = Reader.Name; + ObjectTitle = ""; + + While Reader.ReadAttribute() Do + If Reader.Name = "title" Then + ObjectTitle = Reader.Value; + EndIf; + EndDo; + + LastProcessedControl = ConvertTitleIntoVariableName(ObjectType, ObjectTitle); + VariableName = ParentVariable + "CommandInterface"; + + + WindowForms = CreatedInWindowAndFormVariables.Get(WindowBeingProcessed); + If WindowForms.Get(FormBeingProcessed) = Undefined Then + + WindowForms.Insert(FormBeingProcessed, New Array()); + + AddLine(Writer, VariableName + " = " + ParentVariable + ? (ScriptVariant = "en", ".GetCommandInterface();", ".ПолучитьКомандныйИнтерфейс();")); + + EndIf; + + Reader.Read(); + + While Reader.NodeType <> XMLNodeType.EndElement Do + If Reader.Name = "CommandInterfaceButton" Then + ConvertCommandInterfaceButton(Reader, Writer, VariableName); + ElsIf Reader.Name = "CommandInterfaceGroup" Then + ConvertCommandInterfaceGroup(Reader, Writer, VariableName); + ElsIf Not ConvertCommand(Reader, Writer, VariableName) Then + Raise NStr("en = 'Unknown node '; ru = 'Неопознанный узел '") + Reader.Name + ": " + Reader.Value; + EndIf; + + EndDo; + + Reader.Read(); + +EndProcedure + +Procedure ConvertCommandInterfaceButton(Reader, Writer, ParentVariable) + + ObjectType = Reader.Name; + ObjectTitle = ""; + + While Reader.ReadAttribute() Do + If Reader.Name = "title" Then + ObjectTitle = Reader.Value; + EndIf; + EndDo; + + LastProcessedControl = ConvertTitleIntoVariableName(ObjectType, ObjectTitle); + VariableName = ? (SplitScriptIntoProcedures, "", ParentVariable) + LastProcessedControl; + + LineCountBeforeProcess = Writer.LineCount(); + + Reader.Read(); + + CommandConverted = False; + While Reader.NodeType <> XMLNodeType.EndElement Do + + If ConvertCommand(Reader, Writer, VariableName) Then + CommandConverted = True; + Else + Raise NStr("en = 'Unknown node '; ru = 'Неопознанный узел '") + Reader.Name + ": " + Reader.Value; + EndIf; + + EndDo; + + If CommandConverted Or GetFullHierarchy Then + InsertLine(Writer, LineCountBeforeProcess + 1, VariableName + " = " + ParentVariable + ? (ScriptVariant = "en", ".FindObject(Type(""TestedCommandInterfaceButton""), """, ".НайтиОбъект(Тип(""ТестируемаяКнопкаКомандногоИнтерфейса""), """) + DoubleQuotationMarks(ObjectTitle) + """);"); + EndIf; + + Reader.Read(); + +EndProcedure + +Procedure ConvertCommandInterfaceGroup(Reader, Writer, ParentVariable) + + ObjectType = Reader.Name; + ObjectTitle = ""; + + While Reader.ReadAttribute() Do + If Reader.Name = "title" Then + ObjectTitle = Reader.Value; + EndIf; + EndDo; + + LastProcessedControl = ConvertTitleIntoVariableName(ObjectType, ObjectTitle); + VariableName = ? (SplitScriptIntoProcedures, "", ParentVariable) + LastProcessedControl; + + LineCountBeforeProcess = Writer.LineCount(); + + Reader.Read(); + + While Reader.NodeType <> XMLNodeType.EndElement Do + + If Reader.Name = "CommandInterfaceButton" Then + ConvertCommandInterfaceButton(Reader, Writer, ? (GetFullHierarchy, VariableName, ParentVariable)); + ElsIf Reader.Name = "CommandInterfaceGroup" Then + ConvertCommandInterfaceGroup(Reader, Writer, ? (GetFullHierarchy, VariableName, ParentVariable)); + Else + Raise NStr("en = 'Unknown node '; ru = 'Неопознанный узел '") + Reader.Name + ": " + Reader.Value; + EndIf; + + EndDo; + + If GetFullHierarchy Then + InsertLine(Writer, LineCountBeforeProcess + 1, VariableName + " = " + ParentVariable + ? (ScriptVariant = "en", ".FindObject(Type(""TestedCommandInterfaceGroup""), """, ".НайтиОбъект(Тип(""ТестируемаяГруппаКомандногоИнтерфейса""), """) + DoubleQuotationMarks(ObjectTitle) + """);"); + EndIf; + + Reader.Read(); + +EndProcedure + +Procedure ConvertForm(Reader, Writer, ParentVariable) + + ObjectType = Reader.Name; + ObjectTitle = ""; + + While Reader.ReadAttribute() Do + If Reader.Name = "title" Then + ObjectTitle = Reader.Value; + EndIf; + EndDo; + + LastProcessedControl = ConvertTitleIntoVariableName(ObjectType, ObjectTitle); + VariableName = ParentVariable + LastProcessedControl; + FormBeingProcessed = VariableName; + + WindowForms = CreatedInWindowAndFormVariables.Get(WindowBeingProcessed); + If WindowForms.Get(FormBeingProcessed) = Undefined Then + + WindowForms.Insert(FormBeingProcessed, New Array()); + + AddLine(Writer, VariableName + " = " + ParentVariable + ? (ScriptVariant = "en", ".FindObject(Type(""TestedForm""), """, ".НайтиОбъект(Тип(""ТестируемаяФорма""), """) + DoubleQuotationMarks(ObjectTitle) + """);"); + + EndIf; + + Reader.Read(); + + While Reader.NodeType <> XMLNodeType.EndElement Do + If Reader.Name = "FormField" Then + ConvertField(Reader, Writer, VariableName); + ElsIf Reader.Name = "FormTable" Then + ConvertTable(Reader, Writer, VariableName); + ElsIf Reader.Name = "FormDecoration" Then + ConvertDecoration(Reader, Writer, VariableName); + ElsIf Reader.Name = "FormButton" Then + ConvertButton(Reader, Writer, VariableName); + ElsIf Reader.Name = "FormGroup" Then + ConvertGroup(Reader, Writer, VariableName); + ElsIf Not ConvertCommand(Reader, Writer, VariableName) Then + Raise NStr("en = 'Unknown node '; ru = 'Неопознанный узел '") + Reader.Name + ": " + Reader.Value; + EndIf; + + EndDo; + + Reader.Read(); + +EndProcedure + +Procedure ConvertTable(Reader, Writer, ParentVariable) + + ObjectType = Reader.Name; + ObjectName = Undefined; + ObjectTitle = Undefined; + While Reader.ReadAttribute() Do + If Reader.Name = "name" Then + ObjectName = Reader.Value; + ElsIf Reader.Name = "title" Then + ObjectTitle = Reader.Value; + EndIf; + EndDo; + + LastProcessedControl = ConvertTitleIntoVariableName(ObjectType, ? (ObjectTitle = Undefined, ObjectName, ObjectTitle)); + + VariableName = ? (SplitScriptIntoProcedures, "", ParentVariable) + LastProcessedControl; + + LineCountBeforeProcess = Writer.LineCount(); + Reader.Read(); + + CommandConverted = False; + While Reader.NodeType <> XMLNodeType.EndElement Do + + If Reader.Name = "FormField" Then + ConvertField(Reader, Writer, ? (GetFullHierarchy, VariableName, ParentVariable)); + + ElsIf Reader.Name = "FormGroup" Then + ConvertGroup(Reader, Writer, ? (GetFullHierarchy, VariableName, ParentVariable)); + ElsIf ConvertCommand(Reader, Writer, VariableName, ObjectType) Then + CommandConverted = True; + Else + Raise NStr("en = 'Unknown node '; ru = 'Неопознанный узел '") + Reader.Name + ": " + Reader.Value; + EndIf; + + EndDo; + + If CommandConverted Or GetFullHierarchy Then + ConvertFieldInsertFindObjectLine(LineCountBeforeProcess, ObjectName, ObjectTitle, ParentVariable, VariableName, Writer, "TestedFormTable", "ТестируемаяТаблицаФормы"); + EndIf; + + Reader.Read(); + +EndProcedure + +Procedure ConvertField(Reader, Writer, ParentVariable) + + ObjectType = Reader.Name; + ObjectName = Undefined; + ObjectTitle = Undefined; + While Reader.ReadAttribute() Do + If Reader.Name = "name" Then + ObjectName = Reader.Value; + ElsIf Reader.Name = "title" Then + ObjectTitle = Reader.Value; + EndIf; + EndDo; + + LastProcessedControl = ConvertTitleIntoVariableName(ObjectType, ? (ObjectTitle = Undefined, ObjectName, ObjectTitle)); + VariableName = ? (SplitScriptIntoProcedures, "", ParentVariable) + LastProcessedControl; + + LineCountBeforeProcess = Writer.LineCount(); + + Reader.Read(); + + CommandConverted = False; + While Reader.NodeType <> XMLNodeType.EndElement Do + + If Reader.Name = "FormField" Then + ConvertField(Reader, Writer, ? (GetFullHierarchy, VariableName, ParentVariable)); + ElsIf ConvertCommand(Reader, Writer, VariableName) Then + CommandConverted = True; + Else + Raise NStr("en = 'Unknown node'; ru = 'Неопознанный узел '") + Reader.Name + ": " + Reader.Value; + EndIf; + + EndDo; + + If CommandConverted Or GetFullHierarchy Then + ConvertFieldInsertFindObjectLine(LineCountBeforeProcess, ObjectName, ObjectTitle, ParentVariable, VariableName, Writer, "TestedFormField", "ТестируемоеПолеФормы"); + EndIf; + + Reader.Read(); + +EndProcedure + +Procedure ConvertFieldInsertFindObjectLine(LineCountBeforeProcess, ObjectName, ObjectTitle, ParentVariable, VariableName, Writer, TypeNameEn, TypeNameRu) + + TitleValue = SearchValuesForTitle(ObjectTitle, ObjectName, ObjectSearch); + NameValue = SearchValuesForName(ObjectTitle, ObjectName, ObjectSearch, TitleValue = ""); + InsertLine(Writer, LineCountBeforeProcess + 1, + VariableName + + " = " + + ParentVariable + + ? (ScriptVariant = "en", ".FindObject(Type(""" + TypeNameEn + """), ", ".НайтиОбъект(Тип(""" + TypeNameRu + """), ") + + ? (TitleValue <> "" Or NameValue <> "", TitleValue, "") + + ? (NameValue <> "", ", " + NameValue, "") + + ");"); + +EndProcedure + +Procedure ConvertButton(Reader, Writer, ParentVariable) + + ObjectType = Reader.Name; + ObjectName = Undefined; + ObjectTitle = Undefined; + While Reader.ReadAttribute() Do + If Reader.Name = "name" Then + ObjectName = Reader.Value; + ElsIf Reader.Name = "title" Then + ObjectTitle = Reader.Value; + EndIf; + EndDo; + + LastProcessedControl = ConvertTitleIntoVariableName(ObjectType, ? (ObjectTitle = Undefined, ObjectName, ObjectTitle)); + VariableName = ? (SplitScriptIntoProcedures, "", ParentVariable) + LastProcessedControl; + + LineCountBeforeProcess = Writer.LineCount(); + + Reader.Read(); + + CommandConverted = False; + While Reader.NodeType <> XMLNodeType.EndElement Do + + If ConvertCommand(Reader, Writer, VariableName) Then + CommandConverted = True; + Else + Raise NStr("en = 'Unknown node '; ru = 'Неопознанный узел '") + Reader.Name + ": " + Reader.Value; + EndIf; + + EndDo; + + If CommandConverted Or GetFullHierarchy Then + ConvertFieldInsertFindObjectLine(LineCountBeforeProcess, ObjectName, ObjectTitle, ParentVariable, VariableName, Writer, "TestedFormButton", "ТестируемаяКнопкаФормы"); + EndIf; + + Reader.Read(); + +EndProcedure + +Procedure ConvertDecoration(Reader, Writer, ParentVariable) + + ObjectType = Reader.Name; + ObjectName = Undefined; + ObjectTitle = Undefined; + While Reader.ReadAttribute() Do + If Reader.Name = "name" Then + ObjectName = Reader.Value; + ElsIf Reader.Name = "title" Then + ObjectTitle = Reader.Value; + EndIf; + EndDo; + + LastProcessedControl = ConvertTitleIntoVariableName(ObjectType, ? (ObjectTitle = Undefined, ObjectName, ObjectTitle)); + VariableName = ? (SplitScriptIntoProcedures, "", ParentVariable) + LastProcessedControl; + + LineCountBeforeProcess = Writer.LineCount(); + + Reader.Read(); + + CommandConverted = False; + While Reader.NodeType <> XMLNodeType.EndElement Do + + If ConvertCommand(Reader, Writer, VariableName) Then + CommandConverted = True; + Else + Raise NStr("en = 'Unknown node '; ru = 'Неопознанный узел '") + Reader.Name + ": " + Reader.Value; + EndIf; + + EndDo; + + If CommandConverted Or GetFullHierarchy Then + ConvertFieldInsertFindObjectLine(LineCountBeforeProcess, ObjectName, ObjectTitle, ParentVariable, VariableName, Writer, "TestedFormDecoration", "ТестируемаяДекорацияФормы"); + EndIf; + + Reader.Read(); + +EndProcedure + +Procedure ConvertGroup(Reader, Writer, ParentVariable) + + ObjectType = Reader.Name; + ObjectName = Undefined; + ObjectTitle = Undefined; + While Reader.ReadAttribute() Do + If Reader.Name = "name" Then + ObjectName = Reader.Value; + ElsIf Reader.Name = "title" Then + ObjectTitle = Reader.Value; + EndIf; + EndDo; + + LastProcessedControl = ConvertTitleIntoVariableName(ObjectType, ? (ObjectTitle = Undefined, ObjectName, ObjectTitle)); + VariableName = ? (SplitScriptIntoProcedures, "", ParentVariable) + LastProcessedControl; + + LineCountBeforeProcess = Writer.LineCount(); + + Reader.Read(); + + CommandConverted = False; + While Reader.NodeType <> XMLNodeType.EndElement Do + + If Reader.Name = "FormField" Then + ConvertField(Reader, Writer, ? (GetFullHierarchy, VariableName, ParentVariable)); + ElsIf Reader.Name = "FormTable" Then + ConvertTable(Reader, Writer, ? (GetFullHierarchy, VariableName, ParentVariable)); + ElsIf Reader.Name = "FormDecoration" Then + ConvertDecoration(Reader, Writer, ? (GetFullHierarchy, VariableName, ParentVariable)); + ElsIf Reader.Name = "FormButton" Then + ConvertButton(Reader, Writer, ? (GetFullHierarchy, VariableName, ParentVariable)); + ElsIf Reader.Name = "FormGroup" Then + ConvertGroup(Reader, Writer, ? (GetFullHierarchy, VariableName, ParentVariable)); + ElsIf ConvertCommand(Reader, Writer, VariableName, ObjectType) Then + CommandConverted = True; + Else + Raise NStr("en = 'Unknown node '; ru = 'Неопознанный узел '") + Reader.Name + ": " + Reader.Value; + EndIf; + + EndDo; + + If CommandConverted Or GetFullHierarchy Then + ConvertFieldInsertFindObjectLine(LineCountBeforeProcess, ObjectName, ObjectTitle, ParentVariable, VariableName, Writer, "TestedFormGroup", "ТестируемаяГруппаФормы"); + EndIf; + + Reader.Read(); + +EndProcedure + +Function ConvertCommand(Reader, Writer, VariableName, ObjectType = "") + + If Reader.Name = "activate" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".Activate();", ".Активизировать();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "Activate", "Активизировать"); + Reader.Read(); + + ElsIf Reader.Name = "inputText" Then + OutputText = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "text" Then + OutputText = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".InputText(""", ".ВвестиТекст(""") + DoubleQuotationMarks(OutputText) + """);", True); + LastProcessedCommand = ? (ScriptVariant = "en", "InputText", "ВвестиТекст"); + Reader.Read(); + + ElsIf Reader.Name = "click" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".Click();", ".Нажать();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "Click", "Нажать"); + Reader.Read(); + + ElsIf Reader.Name = "clear" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".Clear();", ".Очистить();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "Clear", "Очистить"); + Reader.Read(); + + ElsIf Reader.Name = "create" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".Create();", ".Создать();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "Create", "Создать"); + Reader.Read(); + + ElsIf Reader.Name = "cancel" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".CancelEdit();", ".ОтменитьРедактирование();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "CancelEdit", "ОтменитьРедактирование"); + Reader.Read(); + + ElsIf Reader.Name = "open" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".Open();", ".Открыть();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "Open", "Открыть"); + Reader.Read(); + + ElsIf Reader.Name = "startChoosing" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".StartChoosing();", ".Выбрать();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "StartChoosing", "Выбрать"); + Reader.Read(); + + ElsIf Reader.Name = "startChoosingFromChoiceList" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".StartChoosingFromChoiceList();", ".ВыбратьИзСпискаВыбора();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "StartChoosingFromChoiceList", "ВыбратьИзСпискаВыбора"); + Reader.Read(); + + ElsIf Reader.Name = "executeChoiceFromChoiceList" Then + Presentation = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "presentation" Then + Presentation = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".WaitForDropDownListGeneration();", ".ОжидатьФормированияВыпадающегоСписка();"), True); + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".ExecuteChoiceFromChoiceList(""", ".ВыполнитьВыборИзСпискаВыбора(""") + DoubleQuotationMarks(Presentation) + """);", True); + LastProcessedCommand = ? (ScriptVariant = "en", "ExecuteChoiceFromChoiceList", "ВыполнитьВыборИзСпискаВыбора"); + Reader.Read(); + + ElsIf Reader.Name = "openDropList" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".OpenDropList();", ".ОткрытьВыпадающийСписок();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "OpenDropList", "ОткрытьВыпадающийСписок"); + Reader.Read(); + + ElsIf Reader.Name = "closeDropList" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".CloseDropList();", ".ЗакрытьВыпадающийСписок();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "CloseDropList", "ЗакрытьВыпадающийСписок"); + Reader.Read(); + + ElsIf Reader.Name = "executeChoiceFromDropList" Then + Presentation = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "presentation" Then + Presentation = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".WaitForDropDownListGeneration();", ".ОжидатьФормированияВыпадающегоСписка();"), True); + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".ExecuteChoiceFromDropList(""", ".ВыполнитьВыборИзВыпадающегоСписка(""") + DoubleQuotationMarks(Presentation) + """);", True); + LastProcessedCommand = ? (ScriptVariant = "en", "ExecuteChoiceFromDropList", "ВыполнитьВыборИзВыпадающегоСписка"); + Reader.Read(); + + ElsIf Reader.Name = "increaseValue" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".IncreaseValue();", ".УвеличитьЗначение();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "IncreaseValue", "УвеличитьЗначение"); + Reader.Read(); + + ElsIf Reader.Name = "decreaseValue" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".DecreaseValue();", ".УменьшитьЗначение();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "DecreaseValue", "УменьшитьЗначение"); + Reader.Read(); + + ElsIf Reader.Name = "setCheck" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".SetCheck();", ".УстановитьОтметку();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "SetCheck", "УстановитьОтметку"); + Reader.Read(); + + ElsIf Reader.Name = "selectOption" Then + Presentation = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "presentation" Then + Presentation = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".SelectOption(""", ".ВыбратьВариант(""") + DoubleQuotationMarks(Presentation) + """);", True); + LastProcessedCommand = ? (ScriptVariant = "en", "SelectOption", "ВыбратьВариант"); + Reader.Read(); + + ElsIf Reader.Name = "gotoValue" Then + Presentation = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "value" Then + Presentation = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GotoValue(""", ".ПерейтиКЗначению(""") + DoubleQuotationMarks(Presentation) + """);", True); + LastProcessedCommand = ? (ScriptVariant = "en", "GotoValue", "ПерейтиКЗначению"); + Reader.Read(); + + ElsIf Reader.Name = "gotoNextMonth" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GotoNextMonth();", ".ПерейтиНаМесяцВперед();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "GotoNextMonth", "ПерейтиНаМесяцВперед"); + Reader.Read(); + + ElsIf Reader.Name = "gotoPreviousMonth" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GotoPreviousMonth();", ".ПерейтиНаМесяцНазад();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "GotoPreviousMonth", "ПерейтиНаМесяцНазад"); + Reader.Read(); + + ElsIf Reader.Name = "gotoNextYear" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GotoNextYear();", ".ПерейтиНаГодВперед();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "GotoNextYear", "ПерейтиНаГодВперед"); + Reader.Read(); + + ElsIf Reader.Name = "gotoPreviousYear" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GotoPreviousYear();", ".ПерейтиНаГодНазад();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "GotoPreviousYear", "ПерейтиНаГодНазад"); + Reader.Read(); + + ElsIf Reader.Name = "gotoDate" Then + Presentation = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "date" Then + Presentation = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; 'ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GotoDate(XMLValue(Type(""Date""), """, ".ПерейтиКДате(XMLЗначение(Тип(""Дата""), """) + Presentation + """));", True); + LastProcessedCommand = ? (ScriptVariant = "en", "GoToDate", "ПерейтиКДате"); + Reader.Read(); + + ElsIf Reader.Name = "setCurrentArea" Then + Area = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "area" Then + Area = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".SetCurrentArea(""", ".УстановитьТекущуюОбласть(""") + Area + """);", True); + LastProcessedCommand = ? (ScriptVariant = "en", "SetCurrentArea", "УстановитьТекущуюОбласть"); + Reader.Read(); + + ElsIf Reader.Name = "beginEditingCurrentArea" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".BeginEditingCurrentArea();", ".НачатьРедактированиеТекущейОбласти();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "BeginEditingCurrentArea", "НачатьРедактированиеТекущейОбласти"); + Reader.Read(); + + ElsIf Reader.Name = "finishEditingCurrentArea" Then + CancelFlag = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "cancel" Then + CancelFlag = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".EndEditingCurrentArea(", ".ЗавершитьРедактированиеТекущейОбласти(") + CancelFlag + ");", True); + LastProcessedCommand = ? (ScriptVariant = "en", "EndEditingCurrentArea", "ЗавершитьРедактированиеТекущейОбласти"); + Reader.Read(); + + ElsIf Reader.Name = "gotoNextItem" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GotoNextItem();", ".ПерейтиКСледующемуЭлементу();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "GotoNextItem", "ПерейтиКСледующемуЭлементу"); + Reader.Read(); + + ElsIf Reader.Name = "gotoPreviousItem" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GotoPreviousItem();", ".ПерейтиКПредыдущемуЭлементу();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "GotoPreviousItem", "ПерейтиКПредыдущемуЭлементу"); + Reader.Read(); + + ElsIf Reader.Name = "goOneLevelUp" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GoOneLevelUp();", ".ПерейтиНаУровеньВверх();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "GoOneLevelUp", "ПерейтиНаУровеньВверх"); + Reader.Read(); + + ElsIf Reader.Name = "goOneLevelDown" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GoOneLevelDown();", ".ПерейтиНаУровеньВниз();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "GoOneLevelDown", "ПерейтиНаУровеньВниз"); + Reader.Read(); + + ElsIf Reader.Name = "gotoNextRow" Then + ConvertCommandPartGotoSpecificRow(Reader, VariableName, Writer, "GotoNextRow", "ПерейтиКСледующейСтроке"); + + ElsIf Reader.Name = "gotoPreviousRow" Then + ConvertCommandPartGotoSpecificRow(Reader, VariableName, Writer, "GotoPreviousRow", "ПерейтиКПредыдущейСтроке"); + + ElsIf Reader.Name = "gotoFirstRow" Then + ConvertCommandPartGotoSpecificRow(Reader, VariableName, Writer, "GotoFirstRow", "ПерейтиКПервойСтроке"); + + ElsIf Reader.Name = "gotoLastRow" Then + ConvertCommandPartGotoSpecificRow(Reader, VariableName, Writer, "GotoLastRow", "ПерейтиКПоследнейСтроке"); + + ElsIf Reader.Name = "gotoRow" Then + Direction = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "direction" Then + Direction = ? (ScriptVariant = "en", ? (Reader.Value = "up", "RowGotoDirection.Up", "RowGotoDirection.Down"), ? (Reader.Value = "up", "НаправлениеПереходаКСтроке.Вверх", "НаправлениеПереходаКСтроке.Вниз")); + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + Reader.Read(); + ConvertCommandPartRowDescriptionPartInt(Reader, Writer); + AddLine(Writer, + VariableName + ? (ScriptVariant = "en", ".GotoRow(RowDescription", ".ПерейтиКСтроке(ОписаниеСтроки") + ? (Direction = "", "", ", " + Direction) + ");", + True); + LastProcessedCommand = ? (ScriptVariant = "en", "GotoRow", "ПерейтиКСтроке"); + + ElsIf Reader.Name = "setOrder" Then + ColumnTitle = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "columnTitle" Then + ColumnTitle = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".SetOrder(""", ".УстановитьПорядок(""") + DoubleQuotationMarks(ColumnTitle) + """);", True); + LastProcessedCommand = ? (ScriptVariant = "en", "SetOrder", "УстановитьПорядок"); + Reader.Read(); + + ElsIf Reader.Name = "choose" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".Choose();", ".Выбрать();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "Choose", "Выбрать"); + Reader.Read(); + + ElsIf Reader.Name = "selectAllRows" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".SelectAllRows();", ".ВыделитьВсеСтроки();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "SelectAllRows", "ВыделитьВсеСтроки"); + Reader.Read(); + + ElsIf Reader.Name = "changeRow" Then + AddLine(Writer, VariableName +? (ScriptVariant = "en", ".ChangeRow();", ".ИзменитьСтроку();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "ChangeRow", "ИзменитьСтроку"); + Reader.Read(); + + ElsIf Reader.Name = "endEditRow" Then + CancelFlag = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "cancel" Then + CancelFlag = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".EndEditRow(", ".ЗакончитьРедактированиеСтроки(") + CancelFlag + ");", True); + LastProcessedCommand = ? (ScriptVariant = "en", "EndEditRow", "ЗакончитьРедактированиеСтроки"); + Reader.Read(); + + ElsIf Reader.Name = "addRow" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".AddRow();", ".ДобавитьСтроку();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "AddRow", "ДобавитьСтроку"); + Reader.Read(); + + ElsIf Reader.Name = "deleteRow" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".DeleteRow();", ".УдалитьСтроку();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "DeleteRow", "УдалитьСтроку"); + Reader.Read(); + + ElsIf Reader.Name = "switchRowDeleteMark" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".SwitchRowDeleteMark();", ".ПереключитьПометкуУдаленияСтроки();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "SwitchRowDeleteMark", "ПереключитьПометкуУдаленияСтроки"); + Reader.Read(); + + ElsIf Reader.Name = "expand" Then + If ObjectType = "FormGroup" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".Expand();", ".Развернуть();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "Expand", "Развернуть"); + Reader.Read(); + Else + ConvertCommandPartRowDescription(Reader, VariableName, Writer, "Expand", "Развернуть"); + Endif; + LastProcessedCommand = ? (ScriptVariant = "en", "Expand", "Развернуть"); + + ElsIf Reader.Name = "collapse" Then + If ObjectType = "FormGroup" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".Collapse();", ".Свернуть();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "Collapse", "Свернуть"); + Reader.Read(); + Else + ConvertCommandPartRowDescription(Reader, VariableName, Writer, "Collapse", "Свернуть"); + EndIf; + LastProcessedCommand = ? (ScriptVariant = "en", "Collapse", "Свернуть"); + + ElsIf Reader.Name = "close" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".Close();", ".Закрыть();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "Close", "Закрыть"); + WindowClosed = True; + Reader.Read(); + + ElsIf Reader.Name = "chooseUserMessage" Then + MessageText = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "messageText" Then + MessageText = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".ChooseUserMessage(""", ".ВыбратьСообщениеПользователю(""") + MessageText + """);", True); + LastProcessedCommand = ? (ScriptVariant = "en", "ChooseUserMessage", "ВыбратьСообщениеПользователю"); + Reader.Read(); + + ElsIf Reader.Name = "closeUserMessagesPanel" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".CloseUserMessagesPanel();", ".ЗакрытьПанельСообщенийПользователю();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "CloseUserMessagesPanel", "ЗакрытьПанельСообщенийПользователю"); + WindowClosed = True; + Reader.Read(); + + ElsIf Reader.Name = "gotoStartPage" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GotoStartPage();", ".ПерейтиКНачальнойСтранице();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "GotoStartPage", "ПерейтиКНачальнойСтранице"); + WindowClosed = True; + Reader.Read(); + + ElsIf Reader.Name = "gotoNextWindow" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GotoNextWindow();", ".ПерейтиКСледующемуОкну();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "GotoNextWindow", "ПерейтиКСледующемуОкну"); + WindowClosed = True; + Reader.Read(); + + ElsIf Reader.Name = "gotoPreviousWindow" Then + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".GotoPreviousWindow();", ".ПерейтиКПредыдущемуОкну();"), True); + LastProcessedCommand = ? (ScriptVariant = "en", "GotoPreviousWindow", "ПерейтиКПредыдущемуОкну"); + WindowClosed = True; + Reader.Read(); + + ElsIf Reader.Name = "executeCommand" Then + CommandRef = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "url" Then + CommandRef = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", ".ExecuteCommand(""", ".ВыполнитьКоманду(""") + CommandRef + """);", True); + LastProcessedCommand = ? (ScriptVariant = "en", "ExecureCommand", "ВыполнитьКоманду"); + Reader.Read(); + + Else + Return False; + EndIf; + + Reader.Read(); + + Return True; + +EndFunction + +Procedure ConvertCommandPartGotoSpecificRow(Val Reader, Val VariableName, Val Writer, Val TermInt, Val TermRus) + + SwitchSelection = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "switchSelection" Then + SwitchSelection = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, VariableName + ? (ScriptVariant = "en", "." + TermInt + "(", "." + TermRus + "(") + SwitchSelection + ");", True); + LastProcessedCommand = ? (ScriptVariant = "en", TermInt, TermRus); + Reader.Read(); + +EndProcedure + +Procedure ConvertCommandPartRowDescription(Val Reader, Val VariableName, Val Writer, Val TermInt, Val TermRus) + + Reader.Read(); + If Reader.NodeType = XMLNodeType.StartElement And Reader.Name = "Field" Then + ConvertCommandPartRowDescriptionPartInt(Reader, Writer); + AddLine(Writer, VariableName + ? (ScriptVariant = "en", "." + TermInt + "(RowDescription);", "." + TermRus + "(ОписаниеСтроки);"), True); + Else + AddLine(Writer, VariableName + ? (ScriptVariant = "en", "." + TermInt +"();", "." + TermRus + "();"), True); + EndIf; + +EndProcedure + +Procedure ConvertCommandPartRowDescriptionPartInt(Val Reader, Val Writer) + + AddLine(Writer, ? (ScriptVariant = "en", "RowDescription = New Map();", "ОписаниеСтроки = Новый Соответствие();")); + + While Reader.NodeType <> XMLNodeType.EndElement Do + If Reader.Name = "Field" Then + ColumnTitle = ""; + CellText = ""; + While Reader.ReadAttribute() Do + If Reader.Name = "title" Then + ColumnTitle = Reader.Value; + ElsIf Reader.Name = "cellText" Then + CellText = Reader.Value; + Else + Raise NStr("en = 'Unknown attribute '; ru = 'Неопознанный атрибут '") + Reader.Name + ": " + Reader.Value; + EndIf; + EndDo; + AddLine(Writer, ? (ScriptVariant = "en", "RowDescription.Insert(""", "ОписаниеСтроки.Вставить(""") + + ColumnTitle + """, """ + DoubleQuotationMarks(CellText) + """);"); + Reader.Read(); + Else + Raise NStr("en = 'Unknown node '; ru = 'Неопознанный узел '") + Reader.Name + ": " + Reader.Value; + EndIf; + Reader.Read(); + EndDo; + +EndProcedure + +// { xUnitFor1C + +Функция Initialization() + + TempFilesDir = TempFilesDir(); + + BinaryDataUnpacker = GetTemplate("UnpackV8"); + BinaryDataDLL=ThisObject.GetTemplate("zlib1"); + BinaryDataUnpacker.Write(TempFilesDir+"UnpackV8.exe"); + BinaryDataDLL.Write(TempFilesDir+"zlib1.dll"); + FileUnpackApplication = Новый File(TempFilesDir+"UnpackV8.exe"); + FileDLL=Новый File(TempFilesDir+"zlib1.dll"); + + Возврат FileUnpackApplication; + +КонецФункции + +Функция CreateDataProcessor(TextToConvert) Экспорт + + TextProcedure = Convert(TextToConvert); + TextProcedure = StrReplace(TextProcedure, """", """"""); + + FileUnpackApplication = Initialization(); + + GlobalKey = "" + Новый UUID; + + localPathToExternalDataProcessor = TempFilesDir() + GlobalKey; + File = Новый File(GetTempFileName()); + + GetTemplate("ШаблонТеста_ВнешняяОбработка").Write(File.FullName); + + TempFile = GetTempFileName("epf"); + + StringCommand = """"+FileUnpackApplication.FullName+""" -parse """+File.FullName+""" """+localPathToExternalDataProcessor+""""; + RunApp(StringCommand, , Истина); + + ParsedFiles = НайтиФайлы(localPathToExternalDataProcessor, "*.*"); + Если ParsedFiles.Количество() = 0 Тогда + NewMessage = New UserMessage(); + NewMessage.Text = NStr("ru = 'Не удалось разобрать макет внешней обработки теста командой <"+StringCommand+">'"); + NewMessage.Message(); + Возврат ""; + КонецЕсли; + + // Replace text + FileTextModule = Новый File(localPathToExternalDataProcessor + "\8401ee62-68b8-43ea-8738-0c08cbc8c901.0"); + TextDocumentModule = Новый TextDocument; + TextDocumentModule.Прочитать(FileTextModule.FullName); + TextModule = TextDocumentModule.GetText(); + + TextModule = СтрЗаменить(TextModule, "Процедура НазваниеПроцедуры_ТестовыйСценарий(тестовоеПриложение) КонецПроцедуры", Chars.LF); + TextModule = СтрЗаменить(TextModule, "НазваниеПроцедуры_Тест_ГУИ_83", "Тест_"+MainProcedureName); + TextModule = СтрЗаменить(TextModule, "НазваниеПроцедуры_ТестовыйСценарий", MainProcedureName); + TextModule = СтрЗаменить(TextModule, "//ЗАМЕНИТЬТЕСТОВОЙПРОЦЕДУРОЙ", TextProcedure); + + TextDocumentModule.SetText(TextModule); + TextDocumentModule.Write(FileTextModule.FullName); + + // Сохраним в макет наш файл. + + TextWriter = Новый TextWriter; + TextWriter.Open(localPathToExternalDataProcessor + "\1b3a3d0f-5dc6-47e8-bad6-38c097bc00d4.0"); + TextWriter.Write(TextToConvert); + TextWriter.Close(); + + // Replace names + FileTextHeaders = Новый File(localPathToExternalDataProcessor + "\4e93fd08-5eda-44dd-92ef-b84867283b1e"); + TextDocumentHeaders = Новый TextDocument; + TextDocumentHeaders.Read(FileTextHeaders.FullName); + Text = TextDocumentHeaders.GetText(); + Text = StrReplace(Text, "ИмяВнешнейОбработки", "Тест"+MainProcedureName); + TextDocumentHeaders.SetText(Text); + TextDocumentHeaders.Write(FileTextHeaders.FullName); + + // Pack + TempFile = GetTempFileName("epf"); + + StringCommand = """"+FileUnpackApplication.FullName+""" -build """+localPathToExternalDataProcessor+""" """+TempFile+""""; + RunApp(StringCommand, , Истина); + + ResultString = ""; + File = Новый File(TempFile); + Если File.Exist() Тогда + BinaryData = Новый BinaryData(File.FullName); + ResultString = Base64String(BinaryData); + КонецЕсли; + + Возврат ResultString; + +КонецФункции + +// } xUnitFor1C \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Forms/DefaultForm.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Forms/DefaultForm.xml" new file mode 100644 index 000000000..bb431bb1a --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Forms/DefaultForm.xml" @@ -0,0 +1,26 @@ + + +
+ + DefaultForm + + + en + Default form + + + ru + Основная форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Forms/DefaultForm/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Forms/DefaultForm/Ext/Form.xml" new file mode 100644 index 000000000..8cd7f7e0d --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Forms/DefaultForm/Ext/Form.xml" @@ -0,0 +1,413 @@ + +
+ Use + useIfNecessary + + false + + + + + + + OnOpen + OnCreateAtServer + FillCheckProcessingAtServer + + + + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Conversion parameters</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Параметры преобразования</v8:content> + </v8:item> + + + + en + Conversion parameters + + + ru + Параметры преобразования + + + Vertical + StrongSeparation + + + + Object.ScriptVariant + true + + + + ScriptVariantOnChange + ScriptVariantClearing + + + + Object.MainProcedureName + + + en + Name of the procedure required for starting the scenario. + + + ru + Имя процедуры, которую необходимо вызвать для запуска сценария. + + + + + + + Object.GenerateClientConnectionScript + + + en + Include the script to establish test client connection into the procedure. + + + ru + Вставлять процедуру код устанавливающий соединение с тестируемым клиентом. + + + Auto + + + + + Object.SplitScriptIntoProcedures + + + en + Split the script scenario into procedures. Each procedure contains actions with a single window. + + + ru + Разделять сценарий на процедуры, в каждой из которых есть только действия относящиеся к одному окну. + + + Auto + + + + + Object.GetFullHierarchy + Auto + + + + + Object.ObjectSearch + Auto + + + + + + + Object.ConversionVariant + Auto + + + + ConversionVariantOnChange + + + + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Source data</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Исходные данные</v8:content> + </v8:item> + + + + en + Source data + + + None + + + + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Source files</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Исходные файлы</v8:content> + </v8:item> + + + + en + Source files + + + ru + Исходные файлы + + + + + + SourceFile + true + true + + + + SourceFileOnStartChoice + SourceFileOnOpen + + + + ResultFile + true + true + + + + ResultFileOnStartChoice + ResultFileOnOpen + + + + + + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Source texts</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Исходные тексты</v8:content> + </v8:item> + + + + en + Source texts + + + ru + Исходные тексты + + + Horizontal + + + + SourceText + + + + + ResultText + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Generate file by text</v8:content> + </v8:item> + + + + ru + Generate file by text + + + Horizontal + + + + SourceText + + + + + ResultFile + true + true + + + + ResultFileOnStartChoice + ResultFileOnOpen + + + + + + + + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Version 1.0.3.3</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Версия 1.0.3.1</v8:content> + </v8:item> + <v8:item> + <v8:lang>sys</v8:lang> + <v8:content>Версия 1.0.3.1</v8:content> + </v8:item> + + + + + + + + + cfg:DataProcessorObject.ПреобразованиеЖурналаДействийПользователя + + true + + Object.SplitScriptIntoProcedures + Object.ScriptVariant + Object.ObjectSearch + Object.MainProcedureName + Object.GetFullHierarchy + Object.GenerateClientConnectionScript + Object.ConversionVariant + + + + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Source file</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Преобразовывать журнал</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + SourceFile + + + + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Result file</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сохранять результат в</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + ResultFile + + + + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>User action log</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Журнал действий пользователя</v8:content> + </v8:item> + + + d5p1:TextDocument + + + + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Scenario</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сценарий</v8:content> + </v8:item> + + + d5p1:TextDocument + + + + + + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Convert</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Преобразовать</v8:content> + </v8:item> + + + + en + Convert the user action log into the 1C:Enterprise script scenario + + + ru + Преобразовать журнал действий во встроенный язык + + + + StdPicture.GenerateReport + true + + Convert + TextPicture + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Forms/DefaultForm/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Forms/DefaultForm/Ext/Form/Module.bsl" new file mode 100644 index 000000000..0c40b79b1 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Forms/DefaultForm/Ext/Form/Module.bsl" @@ -0,0 +1,300 @@ + +//////////////////////////////////////////////////////////////////////////////// +// FORM EVENT HANDLERS +&AtServer +Procedure OnCreateAtServer(Cancel, StandardProcessing) + + // Setting up initial values + Object.SplitScriptIntoProcedures = True; + + Object.ScriptVariant = ? (String(Metadata.ScriptVariant) = "English", "en", "ru"); + + + Items.ScriptVariant.ChoiceList.Add("en", NStr("en = 'English'; ru = 'Английский'")); + Items.ScriptVariant.ChoiceList.Add("ru", NStr("en = 'Russian'; ru = 'Русский'")); + + Items.ObjectSearch.ChoiceList.Add(0, NStr("en = 'By presentation'; ru = 'По представлению'")); + Items.ObjectSearch.ChoiceList.Add(1, NStr("en = 'By name'; ru = 'По имени'")); + Items.ObjectSearch.ChoiceList.Add(2, NStr("en = 'By name and presentation'; ru = 'По имени и представлению'")); + + Items.ConversionVariant.ChoiceList.Add(0, NStr("en = 'Log'; ru = 'Журнал'")); + Items.ConversionVariant.ChoiceList.Add(1, NStr("en = 'Text'; ru = 'Текст'")); + + // { xUnitFor1C - Дополнительные команды + Items.ConversionVariant.ChoiceList.Add(2, NStr("ru = 'Из журнала в обработку-тест для xUnitFor1C'")); + Items.ConversionVariant.ChoiceList.Add(3, NStr("ru = 'Из текста в обработку-тест для xUnitFor1C'")); + // } xUnitFor1C - Дополнительные команды + +EndProcedure + +&AtClient +Procedure OnOpen(Cancel) + + Object.MainProcedureName = ?(Object.ScriptVariant = "en", "TestScenario_", "ТестовыйСценарий_") + ClearDate(Format(CurrentDate(), "DLF=D")); + + Items.SourceData.CurrentPage = ?(Object.ConversionVariant = 0,Items.SourceFiles, Items.SourceTexts); + + // { xUnitFor1C + SetVisibleOptionsForConvertionType(); + // } xUnitFor1C + +EndProcedure + +&AtServer +Procedure FillCheckProcessingAtServer(Cancel, AttributesToCheck) + + // Adding check fields according to the transform variant + If Object.ConversionVariant = 0 Then + + AttributesToCheck.Add("SourceFile"); + AttributesToCheck.Add("ResultFile"); + + Else + + If Not ValueIsFilled(SourceText.GetText()) Then + + Cancel = True; + + NewMessage = New UserMessage(); + NewMessage.Text = NStr("en = 'User action log is not specified.'; ru = 'Поле ""Журнал действий пользователя"" не заполнено.'"); + NewMessage.DataPath = "SourceText"; + NewMessage.Message(); + + EndIf; + + EndIf; + +EndProcedure + +//////////////////////////////////////////////////////////////////////////////// +// CONTROL EVENT HANDLERS +&AtClient +Procedure ConversionVariantOnChange(Item) + + Items.SourceData.CurrentPage = ? (Object.ConversionVariant = 0, Items.SourceFiles, Items.SourceTexts); + + // { xUnitFor1C + SetVisibleOptionsForConvertionType(); + // } xUnitFor1C + +EndProcedure + +&AtClient +Procedure ScriptVariantClearing(Item, StandardProcessing) + + StandardProcessing = False; + +EndProcedure + +&AtClient +Procedure ScriptVariantOnChange(Item) + + Object.MainProcedureName = ? (Object.ScriptVariant = "en", "TestScenario_", "ТестовыйСценарий_") + ClearDate(Format(CurrentDate(), "DLF=D")); + +EndProcedure + +&AtClient +Procedure SourceFileOnStartChoice(Item, ChoiceData, StandardProcessing) + + StandardProcessing = False; + + Dialog = New FileDialog(FileDialogMode.Open); + + Dialog.FullFileName = SourceFile; + Dialog.Title = NStr("en = 'Specify the user action log file.'; ru = 'Укажите файл журнала действий пользователя'"); + Dialog.Filter = NStr("en = 'User action log file (*.uil,*.txt,*.xml)|*.uil;*.txt;*.xml|All files (*.*)|*.*'; ru = 'Файлы журнала действий пользователя (*.uil,*.txt,*.xml)|*.uil;*.txt;*.xml|Все файлы (*.*)|*.*'"); + Dialog.DefaultExt= "uil"; + + If Dialog.Choose() Then + + SourceFile = Dialog.FullFileName; + + If Not ValueIsFilled(ResultFile) Then + + ResultFile = Left(Dialog.FullFileName, StrLen(Dialog.FullFileName) - StrLen(Dialog.DefaultExt)) + NStr("en = 'ModuleText'; ru = 'ТекстМодуля'") + ".txt" + + EndIf; + + EndIf; + +EndProcedure + +&AtClient +Procedure SourceFileOnOpen(Item, StandardProcessing) + + StandardProcessing = False; + + DocumentToView = New TextDocument(); + DocumentToView.Read(SourceFile); + DocumentToView.Show(SourceFile); + +EndProcedure + +&AtClient +Procedure ResultFileOnStartChoice(Item, ChoiceData, StandardProcessing) + + StandardProcessing = False; + + Dialog = New FileDialog(FileDialogMode.Save); + + Dialog.FullFileName = ResultFile; + Dialog.Title = NStr("en = 'Specify the file where the conversion result will be saved.'; ru = 'Укажите файл для сохранения результата преобразования'"); + Dialog.Filter= NStr("en = 'Text files (*.txt)|*.txt|All files (*.*)|*.*'; ru = 'Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*'"); + + // { xUnitFor1C + If Object.ConversionVariant >= 2 Then + Dialog.Filter= NStr("ru = 'Внешние обработки (*.epf)|*.epf|Все файлы (*.*)|*.*'"); + EndIf; + // { xUnitFor1C + + If Dialog.Choose() Then + + ResultFile = Dialog.FullFileName; + + EndIf; + +EndProcedure + +&AtClient +Procedure ResultFileOnOpen(Item, StandardProcessing) + + StandardProcessing = False; + + DocumentToView = New TextDocument(); + DocumentToView.Read(ResultFile); + DocumentToView.Show(ResultFile); + +EndProcedure + +//////////////////////////////////////////////////////////////////////////////// +// AUXILIARY PROCEDURES AND FUNCTIONS +&AtClient +Function IsDigit(Char) + + Code = CharCode (Char); + Return Code >= 48 And Code <= 57; + +EndFunction + +&AtClient +Function IsLetter(Char) + + // All non-literal character codes are considered equal + Return CharCode(Lower(Char)) <> CharCode(Upper(Char)); + +EndFunction + +&AtClient +Function ClearDate(DateToClear) + + Result = ""; + + StringLength = StrLen(DateToClear); + For Index = 1 To StringLength Do + NextChar = Mid(DateToClear,Index, 1); + If IsDigit(NextChar) Then + Result = Result + NextChar; + Else + Result = Result + "_"; + EndIf; + EndDo; + + Return Result; + +EndFunction + +//////////////////////////////////////////////////////////////////////////////// +// Conversion procedures +&AtServer +Function ConvertAtServer(TextToConvert) + + ThisDataProcessor = FormAttributeToValue("Object"); + + // { xUnitFor1C + If Object.ConversionVariant >= 2 Then + StringBase64 = ThisDataProcessor.CreateDataProcessor(TextToConvert); + Return StringBase64; + EndIf; + // } xUnitFor1C + + Return ThisDataProcessor.Convert(TextToConvert); + +EndFunction + +&AtClient +Procedure Convert(Command) + + // Preparing data to be converted + ClearMessages(); + If Not CheckFilling() Then + Return; + EndIf; + + TextToConvert = ""; + If Object.ConversionVariant = 0 Then + + Reader = New TextDocument(); + Reader.Read(SourceFile); + TextToConvert = Reader.GetText(); + Reader = Undefined; + + Else + + TextToConvert = SourceText.GetText(); + + EndIf; + + ConversionResult = ConvertAtServer(TextToConvert); + + If Not ValueIsFilled(ConversionResult) Then + Message(NStr("en = 'Cannot convert data'; ru = 'Не удалось выполнить преобразование'")); + Return; + EndIf; + + If Object.ConversionVariant = 0 Then + + Writer = New TextDocument(); + Writer.AddLine(ConversionResult); + Writer.Write(ResultFile); + Writer.Show(ResultFile); + + // { xUnitFor1C + ElsIf Object.ConversionVariant >= 2 Then + Try + BinaryData = Base64Value(ConversionResult); + BinaryData.Write(ResultFile); + Except + NewMessage = New UserMessage(); + NewMessage.Text = NStr("ru = 'Не удалось сохранить base64 внешнией обработки в файл'; en = 'Can''t save base64 of data processor to file'"); + NewMessage.Message(); + EndTry; + // } xUnitFor1C + + Else + + ResultText.Clear(); + ResultText.AddLine(ConversionResult); + + EndIf; + +EndProcedure + +// { xUnitFor1C + +&AtClient +Procedure SetVisibleOptionsForConvertionType() + + // { xUnitFor1C - Настройка текущей страницы для доп. вариантов преобразования действий пользователя + If Object.ConversionVariant = 2 Then + Items.SourceData.CurrentPage = Items.SourceFiles; + ElsIf Object.ConversionVariant = 3 Then + Items.SourceData.CurrentPage = Items.GenerateFileByText; + EndIf; + StandartChoice = (Object.ConversionVariant < 2); + Object.GenerateClientConnectionScript = StandartChoice; + Items.GenerateClientConnectionScript.Enabled = StandartChoice; + // } xUnitFor1C - Настройка текущей страницы для доп. вариантов преобразования действий пользователя + +EndProcedure + +// } xUnitFor1C \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/UnpackV8.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/UnpackV8.xml" new file mode 100644 index 000000000..2a307ed68 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/UnpackV8.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/UnpackV8/Ext/Template.bin" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/UnpackV8/Ext/Template.bin" new file mode 100644 index 000000000..af7ade9a3 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/UnpackV8/Ext/Template.bin" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/zlib1.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/zlib1.xml" new file mode 100644 index 000000000..e4face994 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/zlib1.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/zlib1/Ext/Template.bin" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/zlib1/Ext/Template.bin" new file mode 100644 index 000000000..1cf8a476e Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/zlib1/Ext/Template.bin" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/\320\250\320\260\320\261\320\273\320\276\320\275\320\242\320\265\321\201\321\202\320\260_\320\222\320\275\320\265\321\210\320\275\321\217\321\217\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/\320\250\320\260\320\261\320\273\320\276\320\275\320\242\320\265\321\201\321\202\320\260_\320\222\320\275\320\265\321\210\320\275\321\217\321\217\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260.xml" new file mode 100644 index 000000000..f7045222e --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/\320\250\320\260\320\261\320\273\320\276\320\275\320\242\320\265\321\201\321\202\320\260_\320\222\320\275\320\265\321\210\320\275\321\217\321\217\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/\320\250\320\260\320\261\320\273\320\276\320\275\320\242\320\265\321\201\321\202\320\260_\320\222\320\275\320\265\321\210\320\275\321\217\321\217\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Ext/Template.bin" "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/\320\250\320\260\320\261\320\273\320\276\320\275\320\242\320\265\321\201\321\202\320\260_\320\222\320\275\320\265\321\210\320\275\321\217\321\217\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Ext/Template.bin" new file mode 100644 index 000000000..1aee250ab Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/\320\237\321\200\320\265\320\276\320\261\321\200\320\260\320\267\320\276\320\262\320\260\320\275\320\270\320\265\320\226\321\203\321\200\320\275\320\260\320\273\320\260\320\224\320\265\320\271\321\201\321\202\320\262\320\270\320\271\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\217/Templates/\320\250\320\260\320\261\320\273\320\276\320\275\320\242\320\265\321\201\321\202\320\260_\320\222\320\275\320\265\321\210\320\275\321\217\321\217\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Ext/Template.bin" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL.xml" new file mode 100644 index 000000000..68da6ee80 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL.xml" @@ -0,0 +1,1322 @@ + + + + + + 8628a45d-32b1-493e-b3af-968215ed801c + 72c2682f-e766-4235-9b11-14779c7fb494 + + + 4228cab3-bbbc-4c6c-a71e-a020d5f991ad + 240e5a24-0cb2-4fd1-92f5-849f2d7c1a97 + + + + СериализаторMXL + + + ru + Генерация макета на базе реальных данных для xUnitFor1C + + + Автор - Артур Аюханов aka artbear + false + DataProcessor.СериализаторMXL.Form.УправляемаяФорма + DataProcessor.СериализаторMXL.Form.Форма + false + + + + + + + ЭтоВстроеннаяОбработка + + + ru + Это встроенная обработка + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ДеревоМетаданных + + + ru + Дерево метаданных + + + + + v8:ValueTree + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ДатаНачала + + + ru + Дата начала + + + + + xs:dateTime + + DateTime + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ДатаОкончания + + + ru + Дата окончания + + + + + xs:dateTime + + DateTime + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ИспользоватьОтборПоДатеДляВсехОбъектов + + + ru + Использовать отбор по дате для всех объектов + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ВыгружатьСДокументомЕгоДвижения + + + ru + Выгружать с документом его движения + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ТипВыгрузкиПериодическихРегистров + + + ru + Тип выгрузки периодических регистров + + + + + xs:decimal + + 10 + 0 + Nonnegative + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + КомпоновщикНастроекКомпоновкиДанных + + + ru + Компоновщик настроек компоновки данных + + + + + dcsset:SettingsComposer + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ВыгружатьКод + + + ru + Выгружать код / номер в макет + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ВыгружатьСсылку + + + ru + Выгружать ссылку + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + СвязьПоГуид + + + ru + Связь по гуид + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ТолькоСоздание + + + ru + Только создание + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ОбменДанными + + + ru + Обмен данными + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + НаборРолей + + + ru + Набор ролей + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + НаборПользователей + + + ru + Набор пользователей + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ВариантВстроенногоЯзыкаАнглийский + + + en + Script Variant English + + + ru + Вариант встроенного языка английский + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + + 29b6a235-8506-4b28-9b61-48d9cb0967ae + 919246ed-32b9-445e-9c45-3e047f2daf19 + + + 7c5bdc43-0bd6-4bef-8492-201e042d0482 + f7083211-0feb-4a89-a306-1a6e85f921a9 + + + + ТаблицаДанных + + + ru + Таблица данных + + + + + ShowError + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + + + + Ссылка + + + ru + Ссылка + + + + + cfg:BusinessProcessRef + cfg:DocumentRef + cfg:CatalogRef + + false + + + + false + + false + false + + + false + + ShowError + Items + + + Auto + Auto + + + Auto + + + + + Метаданное + + + ru + Метаданное + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + ShowError + Items + + + Auto + Auto + + + Auto + + + + + ИмяПеременной + + + ru + Имя переменной + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ВыгружатьКод + + + ru + Выгружать код/номер + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + РежимПоиска + + + ru + Режим поиска + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + РежимСоздания + + + ru + Режим создания + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + + + + 8c4a53bd-2ffc-4f04-a9c8-f69b557900f6 + 1e722b87-fd7d-4176-845f-a53848ae4624 + + + 3a2d98be-6474-4724-bc33-50c18c5a075f + 56f770bb-0ed6-4c97-bfc1-2ca517545e9c + + + + ПользователиИБ + + + ru + Пользователи ИБ + + + + + DontCheck + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + + + + Имя + + + ru + Имя + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ПолноеИмя + + + ru + Полное имя + + + + + xs:string + + 255 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Роли + + + ru + Роли + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + АутентификацияСтандартная + + + ru + Аутентификация стандартная + + + + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + АутентификацияОС + + + ru + Аутентификация ОС + + + + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ПользовательОС + + + ru + Пользователь ОС + + + + + xs:string + + 10 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + + + + 98b04553-a240-4611-9cc9-f584c76122c4 + 8998c2d2-88e2-4c8c-ac76-4121360670bd + + + 61764040-7ea2-4942-8c1a-f857c1b12938 + 30ed2094-6a49-44bd-a322-9de060fe6fab + + + + ДополнительныеСвойства + + + ru + Дополнительные свойства + + + + + DontCheck + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + + + + Имя + + + ru + Имя + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + ShowError + Items + + + Auto + Auto + + + Auto + + + + + Значение + + + ru + Значение + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + +
УправляемаяФорма
+
Форма
+ + + + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\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/lib/CF/83xddNoSync/DataProcessors/\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" new file mode 100644 index 000000000..82890d07a --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\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" @@ -0,0 +1,5446 @@ +Перем ТестовыеДанныхДляУдаления; + +Перем МассивИмен; + +Перем МетаданныеОписание Экспорт; +Перем СсылочныеТипы Экспорт; +Перем СоответствиеОбъектовМетаданныхИСсылочныхТипов; + +// массив строк дерева метаданных, имеющих признак Выгружать +Перем СоставПолнойВыгрузки Экспорт; + +Перем мВыгруженныеОбъекты; + +Перем мНаличиеВыгрузкиПодчиненныхОбъектов; +Перем мТипРезультатЗапроса; +Перем мСоответствиеКолонокДвижений; +Перем ОбработанныхКонстант Экспорт; +Перем ОбработанныхНаборовЗаписей Экспорт; +Перем СоставВспомогательнойВыгрузки; + +Перем АнглийскоеСоответствие; + + +Функция Версия() Экспорт + Возврат "3.0.0.5"; +КонецФункции + +Функция ЗаголовокФормы() Экспорт + Возврат СокрЛП(Метаданные().Синоним) + ", версия " + Версия();; +КонецФункции + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Утилита); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "Сериализация и десериализация данных в MXL формате"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры +// } Plugin interface + +//{ Десериализация тестовых данных +Функция СоздатьДанныеПоМакетам(ТестОбъект, ИменаМакетов) Экспорт + МассивИменМакетов = РазложитьСтрокуВМассивПодстрок(ИменаМакетов); + МассивМакетов = Новый Массив; + Для каждого ИмяМакета Из МассивИменМакетов Цикл + МассивМакетов.Добавить(ТестОбъект.ПолучитьМакет(ИмяМакета)); + КонецЦикла; + Возврат СоздатьДанныеПоТабличномуДокументу(МассивМакетов); +КонецФункции + +Функция СоздатьДанныеПоТабличномуДокументу(ТабличныйДокументИлиМассивТабличныхДокументов, РежимыЗагрузкиИлиИмяКолонкиЗамещения = Неопределено, ИмяКолонкиЗамещения = Неопределено) Экспорт + Перем РежимыЗагрузки; + + Если ТипЗнч(РежимыЗагрузкиИлиИмяКолонкиЗамещения) = Тип("Строка") Тогда + ИмяКолонкиЗамещения = РежимыЗагрузкиИлиИмяКолонкиЗамещения; + Иначе + РежимыЗагрузки = РежимыЗагрузкиИлиИмяКолонкиЗамещения; + Если РежимыЗагрузки <> Неопределено Тогда + ТипПараметра = ТипЗнч(РежимыЗагрузки); + Если ТипПараметра <> Тип("Структура") Тогда + ВызватьИсключение ("Ожидали, что вторым параметром будет передана структура параметров для метода <СоздатьДанныеПоТабличномуДокументу>, а получили другой объект с типом <"+ТипПараметра+">"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + МассивТабличныхДокументов = Новый Массив(); + Если ТипЗнч(ТабличныйДокументИлиМассивТабличныхДокументов) = Тип("ТабличныйДокумент") Тогда + МассивТабличныхДокументов.Добавить(ТабличныйДокументИлиМассивТабличныхДокументов); + ИначеЕсли ТипЗнч(ТабличныйДокументИлиМассивТабличныхДокументов) = Тип("Массив") Тогда + МассивТабличныхДокументов = ТабличныйДокументИлиМассивТабличныхДокументов; + КонецЕсли; + Возврат СоздатьДанныеИзМакетов(МассивТабличныхДокументов, РежимыЗагрузки, ИмяКолонкиЗамещения); +КонецФункции + +// удаляет созданные элементы (Справочники, Документы, Пользователи ИБ), регистры сведений не чистит - есть тесты +Функция УдалитьСозданныеДанные(Данные) Экспорт + // обратный порядок нужен для получения правильного количества удаленных элементов, т.к Владелец.Удалить удаляет и подчиненные элементы из подчиненных справочников + массивВОбратномПорядке = Новый Массив; + Для каждого ключЗначение Из Данные Цикл + массивВОбратномПорядке.Вставить(0, КлючЗначение.Значение); + КонецЦикла; + + количествоУдаленных = 0; + Для каждого элем Из массивВОбратномПорядке Цикл + типЭлемента = ТипЗнч(элем); + Если Справочники.ТипВсеСсылки().СодержитТип(типЭлемента) Тогда + объект = элем.ПолучитьОбъект(); + Если объект <> Неопределено Тогда + Попытка + объект.Удалить(); + количествоУдаленных = количествоУдаленных + 1; + Исключение + Сообщить(ОписаниеОшибки()); + КонецПопытки; + КонецЕсли; + ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(типЭлемента) Тогда + объект = элем.ПолучитьОбъект(); + Если объект <> Неопределено Тогда + Попытка + объект.Удалить(); + количествоУдаленных = количествоУдаленных + 1; + Исключение + Сообщить(ОписаниеОшибки()); + КонецПопытки; + КонецЕсли; + ИначеЕсли типЭлемента = Тип("ПользовательИнформационнойБазы") Тогда + Попытка + элем.Удалить(); + количествоУдаленных = количествоУдаленных + 1; + Исключение + Сообщить(ОписаниеОшибки()); + КонецПопытки; + КонецЕсли; + КонецЦикла; + Возврат количествоУдаленных; +КонецФункции + +Функция СоздатьДанныеИзМакетов(МассивТабличныхДокументов, РежимыЗагрузки, ИмяКолонкиЗамещения) + ПротоДанные = Новый Структура; + Для каждого ТабличныйДокумент Из МассивТабличныхДокументов Цикл + ПрочитатьДанныеИзМакета(ПротоДанные,ТабличныйДокумент,ИмяКолонкиЗамещения); + КонецЦикла; + ЗаменитьРежимыЗагрузки(ПротоДанные, РежимыЗагрузки); + Данные = СоздатьТестовыеДанныеПоПротоДанным(ПротоДанные); + Возврат Данные; +КонецФункции + +Функция ПрочитатьДанныеИзМакета(ПротоДанные,ТабличныйДокумент,ИмяКолонкиЗамещения) + + СтрокаМакета = 1; + НомерКолонкиМакета = 0; + КолонкиМакета = КолонкиМакетаДанных(); + Пока НомерКолонкиМакета<ТабличныйДокумент.ШиринаТаблицы Цикл + НомерКолонкиМакета = НомерКолонкиМакета + 1; + ИмяКолонки = ТабличныйДокумент.Область("R" + 1 + "C" + НомерКолонкиМакета).Текст; + Если Не ПустаяСтрока(ИмяКолонки) Тогда + КолонкиМакета.Вставить(ИмяКолонки,НомерКолонкиМакета); + КонецЕсли; + КонецЦикла; + + ПроверитьКолонки(КолонкиМакета,ИмяКолонкиЗамещения); + + ДействиеТекущейСтроки = Неопределено; + Пока СтрокаМакета<ТабличныйДокумент.ВысотаТаблицы Цикл + СтрокаМакета = СтрокаМакета + 1; + НомерСтроки = Формат(СтрокаМакета, "ЧГ="); + + //Если новый объект + ИмяПеременной = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.ИмяПеременной); + Если Не ПустаяСтрока(ИмяПеременной) Тогда + Если ПротоДанные.Свойство(ИмяПеременной) Тогда + ВызватьИсключение "Ошибка при создании данных из макета! Неуникальное имя переменной: ["+ИмяПеременной+"]"; + КонецЕсли; + + Тип = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.Тип); + Вид = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.Вид); + Режим = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.Режим); + Значение = ПрочитатьЗначениеДанныхСтроки(ТабличныйДокумент,НомерСтроки,КолонкиМакета,ИмяКолонкиЗамещения); + + ПротоОбъект = СоздатьСтруктуруОписанияОбъекта(); + ПротоОбъект.ИмяПеременной = ИмяПеременной; + ПротоОбъект.Тип = Тип; + ПротоОбъект.Вид = Вид; + ПротоОбъект.ИмяПредопределенного = Значение; + ПротоОбъект.ПоляОбъекта = СоздатьТаблицуОписанияПолей(); + Если Не ПустаяСтрока(Режим) Тогда + Если ПротоОбъект.Режимы.Свойство(Режим) Тогда + ПротоОбъект.Режимы[Режим] = Истина; + КонецЕсли; + КонецЕсли; + + ПротоДанные.Вставить(ИмяПеременной,ПротоОбъект); + ДействиеТекущейСтроки = "ЧитаемПоляОбъекта"; + Продолжить; + КонецЕсли; + + //Табличные части + ИмяТабЧасти = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.ТЧ); + Если Не ПустаяСтрока(ИмяТабЧасти) Тогда + Если ВРег(ИмяТабЧасти)="XDDMODS" или ВРег(ИмяТабЧасти)="XDDDATAGEN" Тогда + ДействиеТекущейСтроки = "ЧитаемРежимы"; + Продолжить; + КонецЕсли; + Если ВРег(ИмяТабЧасти)="ДОПОЛНИТЕЛЬНЫЕСВОЙСТВА" Тогда + ДействиеТекущейСтроки = "ЧитаемДопСвойства"; + Продолжить; + КонецЕсли; + Если ВРег(ИмяТабЧасти)="ОБМЕНДАННЫМИ" Тогда + ДействиеТекущейСтроки = "ЧитаемОбменДанными"; + Продолжить; + КонецЕсли; + + ТабЧасть = Неопределено; + Если Не ПротоОбъект.ТабличныеЧасти.Свойство(ИмяТабЧасти,ТабЧасть) Тогда + //Новая ТабЧасть + ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей(); + ТабЧасть = Новый Массив; + ТабЧасть.Добавить(ОписаниеПолейТЧ); + ПротоОбъект.ТабличныеЧасти.Вставить(ИмяТабЧасти,ТабЧасть); + ДействиеТекущейСтроки = "ЧитаемТабЧасть"; + Продолжить; + Иначе + //Новая строка ТабЧасти + ОписаниеПолейТЧ = СоздатьТаблицуОписанияПолей(); + ТабЧасть.Добавить(ОписаниеПолейТЧ); + ДействиеТекущейСтроки = "ЧитаемТабЧасть"; + Продолжить; + КонецЕсли; + КонецЕсли; + + //Поля объекта + Если ДействиеТекущейСтроки = "ЧитаемПоляОбъекта" Тогда + ИмяРеквизита = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент, НомерСтроки, КолонкиМакета.Реквизит); + Если Не ПустаяСтрока(ИмяРеквизита) Тогда + НовоеПолеОбъекта = ПротоОбъект.ПоляОбъекта.Добавить(); + НовоеПолеОбъекта.Имя = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.Реквизит); + НовоеПолеОбъекта.Значение = ПрочитатьЗначениеДанныхСтроки(ТабличныйДокумент,НомерСтроки,КолонкиМакета,ИмяКолонкиЗамещения); + НовоеПолеОбъекта.Режим = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.Режим); + НовоеПолеОбъекта.ДополнительныйТип = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.ДополнительныйТипЗначения); + + Ключ = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.Ключ); + Если ВРег(Ключ) = "КЛЮЧ" Тогда + ПротоОбъект.Ключи.Вставить(НовоеПолеОбъекта.Имя, НовоеПолеОбъекта.Значение); + КонецЕсли; + Продолжить; + КонецЕсли; + КонецЕсли; + + //Поля табличной части + Если ДействиеТекущейСтроки = "ЧитаемТабЧасть" Тогда + ИмяРеквизитаТЧ = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент, НомерСтроки, КолонкиМакета.Реквизит); + Если Не ПустаяСтрока(ИмяРеквизитаТЧ) Тогда + НовоеПолеТЧ = ОписаниеПолейТЧ.Добавить(); + НовоеПолеТЧ.Имя = ИмяРеквизитаТЧ; + НовоеПолеТЧ.Значение = ПрочитатьЗначениеДанныхСтроки(ТабличныйДокумент,НомерСтроки,КолонкиМакета,ИмяКолонкиЗамещения); + НовоеПолеТЧ.Режим = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.Режим); + НовоеПолеТЧ.ДополнительныйТип = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.ДополнительныйТипЗначения); + Продолжить; + КонецЕсли; + КонецЕсли; + + //Режимы объекта + Если ДействиеТекущейСтроки = "ЧитаемРежимы" Тогда + КодРежима = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.Реквизит); + Режим = ПрочитатьЗначениеДанныхСтроки(ТабличныйДокумент,НомерСтроки,КолонкиМакета,ИмяКолонкиЗамещения); + Если ВРег(КодРежима)="РЕЖИМ" Тогда + Если ПротоОбъект.Режимы.Свойство(Режим) Тогда + ПротоОбъект.Режимы[Режим] = Истина; + КонецЕсли; + КонецЕсли; + Продолжить; + КонецЕсли; + + //Дополнительные свойства + Если ДействиеТекущейСтроки = "ЧитаемДопСвойства" Тогда + ИмяДопСвойства = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент, НомерСтроки, КолонкиМакета.Реквизит); + Если Не ПустаяСтрока(ИмяДопСвойства) Тогда + НовоеПолеДопСвойств = ПротоОбъект.ДопСвойства.Добавить(); + НовоеПолеДопСвойств.Имя = ИмяДопСвойства; + НовоеПолеДопСвойств.Значение = ПрочитатьЗначениеДанныхСтроки(ТабличныйДокумент,НомерСтроки,КолонкиМакета,ИмяКолонкиЗамещения); + НовоеПолеДопСвойств.Режим = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.Режим); + НовоеПолеДопСвойств.ДополнительныйТип = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.ДополнительныйТипЗначения); + Продолжить; + КонецЕсли; + КонецЕсли; + + Если ДействиеТекущейСтроки = "ЧитаемОбменДанными" Тогда + ИмяОбменДанными = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент, НомерСтроки, КолонкиМакета.Реквизит); + Если Не ПустаяСтрока(ИмяОбменДанными) Тогда + НовоеПолеОбменаДанными = ПротоОбъект.ОбменДанными.Добавить(); + НовоеПолеОбменаДанными.Имя = ИмяОбменДанными; + НовоеПолеОбменаДанными.Значение = ПрочитатьЗначениеДанныхСтроки(ТабличныйДокумент,НомерСтроки,КолонкиМакета,ИмяКолонкиЗамещения); + НовоеПолеОбменаДанными.Режим = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.Режим); + НовоеПолеОбменаДанными.ДополнительныйТип = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.ДополнительныйТипЗначения); + Продолжить; + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецФункции + +Функция ПроверитьКолонки(КолонкиМакета,ИмяКолонкиЗамещения) + Для каждого Колонка Из КолонкиМакета Цикл + Если Колонка.Значение = "0" Тогда + Если Колонка.Ключ = "ДополнительныйТипЗначения" или Колонка.Ключ = "Ключ" Тогда + //Это не обязательная колонка - может быть и не заполнена + Иначе + ВызватьИсключение "Неверно задан макет. Неверная колонка в первой строке. Не указана обязательная колонка с именем ["+Колонка.Ключ+"]"; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если ЗначениеЗаполнено(ИмяКолонкиЗамещения) Тогда + Если не КолонкиМакета.Свойство(ИмяКолонкиЗамещения) Тогда + ВызватьИсключение "Указанное Имя колонки замещения ["+ИмяКолонкиЗамещения+"] не существует в макете."; + КонецЕсли; + КонецЕсли; +КонецФункции + +Функция ПрочитатьЗначениеДанныхСтроки(ТабличныйДокумент,НомерСтроки,КолонкиМакета,ИмяКолонкиЗамещения) + Значение = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета.Значение); + Если ЗначениеЗаполнено(ИмяКолонкиЗамещения) Тогда + ПриоритетноеЗначение = ПрочитатьЗначениеЯчейкиМакета(ТабличныйДокумент,НомерСтроки,КолонкиМакета[ИмяКолонкиЗамещения]); + Если ЗначениеЗаполнено(ПриоритетноеЗначение) Тогда + Значение = ПриоритетноеЗначение; + КонецЕсли; + КонецЕсли; + Возврат Значение; +КонецФункции + +Функция ПрочитатьЗначениеЯчейкиМакета(Макет,НомерСтроки,НомерКолонки); + ТекстЯчейки = Неопределено; + Если НомерСтроки<> "0" И НомерКолонки <> "0" Тогда + ТекстЯчейки = Макет.Область("R" + НомерСтроки + "C" + НомерКолонки).Текст; + КонецЕсли; + Возврат ТекстЯчейки; +КонецФункции + +Функция СоздатьСтруктуруОписанияОбъекта() + СтруктураОписанияОбъекта = Новый Структура(); + СтруктураОписанияОбъекта.Вставить("Объект",Неопределено); + СтруктураОписанияОбъекта.Вставить("Тип",Неопределено); + СтруктураОписанияОбъекта.Вставить("Вид",Неопределено); + СтруктураОписанияОбъекта.Вставить("ИмяПредопределенного",Неопределено); + СтруктураОписанияОбъекта.Вставить("ИмяПеременной",Неопределено); + СтруктураОписанияОбъекта.Вставить("Режимы",СоздатьСтруктуруРежимовОбъекта()); + СтруктураОписанияОбъекта.Вставить("Ключи", новый Структура); + СтруктураОписанияОбъекта.Вставить("ПоляОбъекта",СоздатьТаблицуОписанияПолей()); + СтруктураОписанияОбъекта.Вставить("ТабличныеЧасти",Новый Структура); + СтруктураОписанияОбъекта.Вставить("ДопСвойства",СоздатьТаблицуОписанияПолей()); + СтруктураОписанияОбъекта.Вставить("ОбменДанными",СоздатьТаблицуОписанияПолей()); + Возврат СтруктураОписанияОбъекта; +КонецФункции + +Функция СоздатьСтруктуруРежимовОбъекта() + Режимы = Новый Структура; + Режимы.Вставить("Предопределенный",Ложь); + Режимы.Вставить("СоздатьПоГуид",Ложь); + Режимы.Вставить("ТолькоСоздание",Ложь); + Режимы.Вставить("Проведение",Ложь); + Режимы.Вставить("ОбменДанными",Ложь); + Режимы.Вставить("Объект",Ложь); + Режимы.Вставить("Группа",Ложь); + Режимы.Вставить("ЭтотУзел",Ложь); + Возврат Режимы; +КонецФункции + +Функция СоздатьТаблицуОписанияПолей() + тзОписаниеПолей = Новый ТаблицаЗначений; + тзОписаниеПолей.Колонки.Добавить("Имя"); + тзОписаниеПолей.Колонки.Добавить("Значение"); + тзОписаниеПолей.Колонки.Добавить("Режим"); + тзОписаниеПолей.Колонки.Добавить("ДополнительныйТип"); + Возврат тзОписаниеПолей; +КонецФункции + +Функция МенеджерыМетаданных() + Менеджеры = Новый Структура; + Менеджеры.Вставить("ПланОбмена",ПланыОбмена); + Менеджеры.Вставить("Справочник",Справочники); + Менеджеры.Вставить("Документ",Документы); + Менеджеры.Вставить("БизнесПроцесс",БизнесПроцессы); + Менеджеры.Вставить("Задача",Задачи); + Менеджеры.Вставить("РегистрСведений",РегистрыСведений); + Менеджеры.Вставить("РегистрНакопления",РегистрыНакопления); + Менеджеры.Вставить("РегистрыБухгалтерии",РегистрыБухгалтерии); + Менеджеры.Вставить("ПланВидовХарактеристик",ПланыВидовХарактеристик); + Менеджеры.Вставить("ПользовательИБ",ПользователиИнформационнойБазы); + Возврат Новый ФиксированнаяСтруктура(Менеджеры); +КонецФункции + +Процедура ЗаменитьРежимыЗагрузки(ПротоДанные, РежимыЗагрузки) + Если ЗначениеЗаполнено(РежимыЗагрузки) Тогда + Для каждого КлючЗначение Из ПротоДанные Цикл + ПротоОбъект = КлючЗначение.Значение; + ЗаполнитьЗначенияСвойств(ПротоОбъект.Режимы, РежимыЗагрузки); + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +Функция СоздатьТестовыеДанныеПоПротоДанным(ПротоДанные) + Данные = Новый Структура; + МенеджерыМетаданных = МенеджерыМетаданных(); + Для каждого ПротоОбъект из ПротоДанные Цикл + ОбъектСсылка = ПолучитьОбъект(ПротоДанные,ПротоОбъект.Значение); + Данные.Вставить(ПротоОбъект.Значение.ИмяПеременной,ОбъектСсылка); + КонецЦикла; + Возврат Данные; +КонецФункции + +Функция ПолучитьОбъект(ПротоДанные,ПротоОбъект) + ОбъектСсылка = Неопределено; + Если ПротоОбъект.Объект<>Неопределено Тогда + Возврат ПротоОбъект.Объект; + ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("Справочник") Тогда + ОбъектСсылка = СоздатьОбъект_Справочник(ПротоДанные,ПротоОбъект); + + ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("Документ") Тогда + ОбъектСсылка = СоздатьОбъект_Документ_или_БизнесПроцесс_или_Задача(Документы, ПротоДанные,ПротоОбъект); + + ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("РегистрСведений") Тогда + ОбъектСсылка = СоздатьОбъект_Регистр(РегистрыСведений, ПротоДанные,ПротоОбъект); + ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("РегистрНакопления") Тогда + ОбъектСсылка = СоздатьОбъект_Регистр(РегистрыНакопления, ПротоДанные,ПротоОбъект); + ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда + ОбъектСсылка = СоздатьОбъект_Регистр(РегистрыБухгалтерии, ПротоДанные,ПротоОбъект); + + ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("ПользовательИБ") Тогда + ОбъектСсылка = СоздатьОбъект_ПользовательИБ(ПротоДанные,ПротоОбъект); + + ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("БизнесПроцесс") Тогда + ОбъектСсылка = СоздатьОбъект_Документ_или_БизнесПроцесс_или_Задача(БизнесПроцессы, ПротоДанные,ПротоОбъект); + ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("Задача") Тогда + ОбъектСсылка = СоздатьОбъект_Документ_или_БизнесПроцесс_или_Задача(Задачи, ПротоДанные,ПротоОбъект); + ИначеЕсли ПротоОбъект.Тип = ВернутьЗначениеСоответствия("ПланОбмена") Тогда + ОбъектСсылка = СоздатьОбъект_УзелПланаОбмена(ПротоДанные,ПротоОбъект); + КонецЕсли; + ПротоОбъект.Объект = ОбъектСсылка; + Возврат ОбъектСсылка; +КонецФункции + +Функция СоздатьОбъект_УзелПланаОбмена(ПротоДанные, ПротоОбъект) + ПланОбменаМенеджер = ПланыОбмена[ПротоОбъект.Вид]; + + //Подготовим ПротоОбъект + Объект = ПолучитьОбъектЕслиВПротоДанныеПереданаСсылка(ПланОбменаМенеджер, ПротоОбъект); + Если Объект = Неопределено И ЗначениеЗаполнено(ПротоОбъект.Ключи) Тогда + Объект = НайтиОбъектПоКлючам(ПротоОбъект, ПланОбменаМенеджер, ПротоОбъект.Ключи); + КонецЕсли; + + Если ПротоОбъект.Режимы.ТолькоСоздание И Объект <> Неопределено Тогда + Возврат ПротоОбъект.Объект; + КонецЕсли; + + //Создание узла плана обмена + Если Объект = Неопределено Тогда + Если ПротоОбъект.Режимы.ЭтотУзел Тогда + Попытка + Объект = ПланОбменаМенеджер.ЭтотУзел().ПолучитьОбъект(); + Исключение + Ошибка = ОписаниеОшибки(); + ВызватьИсключение "ПланОбмена." + ПротоОбъект.Вид + " не удалось получить узел этой ИБ." + Символы.ПС + Ошибка; + КонецПопытки; + ИначеЕсли ПротоОбъект.Режимы.СоздатьПоГуид Тогда + ВызватьИсключение "Устарело и больше не поддерживается: https://github.com/xDrivenDevelopment/xUnitFor1C/issues/332"; + Иначе + Попытка + Объект = ПланОбменаМенеджер.СоздатьУзел(); + Исключение + Ошибка = ОписаниеОшибки(); + ВызватьИсключение "ПланОбмена." + ПротоОбъект.Вид + " не удалось создать новый узел." + Символы.ПС + Ошибка; + КонецПопытки; + КонецЕсли; + + Если Объект.ЭтоНовый() Тогда + Если Не ЗначениеЗаполнено(ПротоОбъект.Объект) Тогда + ПротоОбъект.Объект = ПланОбменаМенеджер.ПолучитьСсылку(Новый УникальныйИдентификатор); + КонецЕсли; + Объект.УстановитьСсылкуНового(ПротоОбъект.Объект); + Иначе + ПротоОбъект.Объект = Объект.Ссылка; + КонецЕсли; + КонецЕсли; + + //Заполняем реквизиты узла плана обмена + НаборМдРеквизитов = НаборРеквизитовМетаданных(ПротоОбъект.Тип, Объект.Метаданные()); + Для каждого стрПоле Из ПротоОбъект.ПоляОбъекта Цикл + Объект[стрПоле.Имя] = ПолучитьЗначениеПоля(ПротоДанные, стрПоле, НаборМдРеквизитов); + КонецЦикла; + + Для каждого ТабЧасть из ПротоОбъект.ТабличныеЧасти Цикл + Для каждого СтрокаТабЧасти Из ТабЧасть.Значение Цикл + СтрокаТабЧастиОбъекта = Объект[ТабЧасть.Ключ].Добавить(); + объектМетаданныеТабличнаяЧасть = Объект.Метаданные().ТабличныеЧасти[ТабЧасть.Ключ]; + НаборМдРеквизитовТЧ = объектМетаданныеТабличнаяЧасть.Реквизиты; + Для каждого стрПоле Из СтрокаТабЧасти Цикл + СтрокаТабЧастиОбъекта[стрПоле.Имя] = ПолучитьЗначениеПоля(ПротоДанные, стрПоле, НаборМдРеквизитовТЧ); + КонецЦикла; + КонецЦикла; + КонецЦикла; + + //Служебные поля и значения + Если Не ЗначениеЗаполнено(Объект.Код) тогда + Объект.УстановитьНовыйКод(); + КонецЕсли; + + ЗаполнитьДополнительныеСвойства(Объект, ПротоДанные, ПротоОбъект); + + ПредставлениеМетаданного = "узел плана обмена"; + Результат = ЗаписатьОбъектПриНеобходимости(Объект, ПротоОбъект, ПредставлениеМетаданного, Истина); + + Возврат Результат; +КонецФункции + +Функция СоздатьОбъект_Справочник(ПротоДанные,ПротоОбъект) + СпрМенеджер = Справочники[ПротоОбъект.Вид]; + + //Подготовим ПротоОбъект + стрПолеЭтоГруппа = ПротоОбъект.ПоляОбъекта.Найти("ЭтоГруппа","Имя"); + Если стрПолеЭтоГруппа<>Неопределено Тогда + ПротоОбъект.Режимы.Группа = Булево(стрПолеЭтоГруппа.Значение); + ПротоОбъект.ПоляОбъекта.Удалить(стрПолеЭтоГруппа); + КонецЕсли; + + Объект = ПолучитьОбъектЕслиВПротоДанныеПереданаСсылка(СпрМенеджер, ПротоОбъект); + Если Объект=Неопределено И ЗначениеЗаполнено(ПротоОбъект.Ключи) Тогда + Объект = НайтиОбъектПоКлючам(ПротоОбъект, СпрМенеджер, ПротоОбъект.Ключи); + КонецЕсли; + + Если ПротоОбъект.Режимы.ТолькоСоздание И Объект<>Неопределено Тогда + Возврат ПротоОбъект.Объект; + КонецЕсли; + + //Создание объекта справочника + Если Объект=Неопределено Тогда + Если ПротоОбъект.Режимы.Предопределенный Тогда + Попытка + Объект = СпрМенеджер[ПротоОбъект.ИмяПредопределенного].ПолучитьОбъект(); + Исключение + Ошибка = ОписаниеОшибки(); + ВызватьИсключение "Справочник."+ПротоОбъект.Вид+" не удалось найти предопределенный элемент/группу ["+ПротоОбъект.ИмяПредопределенного+"]."+Символы.ПС+Ошибка; + КонецПопытки; + ИначеЕсли ПротоОбъект.Режимы.СоздатьПоГуид Тогда + ВызватьИсключение "Устарело и больше не поддерживается: https://github.com/xDrivenDevelopment/xUnitFor1C/issues/332"; + ИначеЕсли ПротоОбъект.Режимы.Группа Тогда + Попытка + Объект = СпрМенеджер.СоздатьГруппу(); + Исключение + Ошибка = ОписаниеОшибки(); + ВызватьИсключение "Справочник."+ПротоОбъект.Вид+" не удалось создать новую группу."+Символы.ПС+Ошибка; + КонецПопытки; + Иначе + Попытка + Объект = СпрМенеджер.СоздатьЭлемент(); + Исключение + Ошибка = ОписаниеОшибки(); + ВызватьИсключение "Справочник."+ПротоОбъект.Вид+" не удалось создать новый элемент."+Символы.ПС+Ошибка; + КонецПопытки; + КонецЕсли; + + Если Объект.ЭтоНовый() Тогда + Если Не ЗначениеЗаполнено(ПротоОбъект.Объект) Тогда + ПротоОбъект.Объект = СпрМенеджер.ПолучитьСсылку(Новый УникальныйИдентификатор); + КонецЕсли; + Объект.УстановитьСсылкуНового(ПротоОбъект.Объект); + Иначе + ПротоОбъект.Объект = Объект.Ссылка; + КонецЕсли; + КонецЕсли; + + //Заполняем реквизиты справочника + НаборМдРеквизитов = НаборРеквизитовМетаданных(ПротоОбъект.Тип, Объект.Метаданные()); + Для каждого стрПоле Из ПротоОбъект.ПоляОбъекта Цикл + Объект[стрПоле.Имя] = ПолучитьЗначениеПоля(ПротоДанные,стрПоле,НаборМдРеквизитов); + КонецЦикла; + + Для каждого мдТабЧасть из Объект.Метаданные().ТабличныеЧасти Цикл + ЭтоРежимГруппа = ПротоОбъект.Режимы.Группа; + Если (ЭтоРежимГруппа И мдТабЧасть.Использование<>Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляЭлемента) + Или (Не ЭтоРежимГруппа И мдТабЧасть.Использование<>Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппы) Тогда + + Объект[мдТабЧасть.Имя].Очистить(); + КонецЕсли; + + КонецЦикла; + Для каждого ТабЧасть из ПротоОбъект.ТабличныеЧасти Цикл + Для каждого СтрокаТабЧасти Из ТабЧасть.Значение Цикл + СтрокаТабЧастиОбъекта = Объект[ТабЧасть.Ключ].Добавить(); + объектМетаданныеТабличнаяЧасть = Объект.Метаданные().ТабличныеЧасти[ТабЧасть.Ключ]; + НаборМдРеквизитовТЧ = объектМетаданныеТабличнаяЧасть.Реквизиты; + Для каждого стрПоле Из СтрокаТабЧасти Цикл + СтрокаТабЧастиОбъекта[стрПоле.Имя] = ПолучитьЗначениеПоля(ПротоДанные,стрПоле,НаборМдРеквизитовТЧ); + КонецЦикла; + КонецЦикла; + КонецЦикла; + + //Служебные поля и значения + Если Не ЗначениеЗаполнено(Объект.Код) тогда + Объект.УстановитьНовыйКод(); + КонецЕсли; + + ЗаполнитьОбменДанными(Объект, ПротоДанные, ПротоОбъект); + ЗаполнитьДополнительныеСвойства(Объект, ПротоДанные, ПротоОбъект); + + ПредставлениеМетаданного = "справочника"; + Результат = ЗаписатьОбъектПриНеобходимости(Объект, ПротоОбъект, ПредставлениеМетаданного, Истина); + + Возврат Результат; +КонецФункции + +Функция НайтиОбъектПоКлючам(ПротоОбъект, МенеджерОбъекта, СтруктураРеквизитовКлючей) + Рез = Неопределено; + МдОбъект = МенеджерОбъекта.ПустаяСсылка().Метаданные(); + МдПолноеИмя = МдОбъект.ПолноеИмя(); + МдРеквизиты = МдОбъект.Реквизиты; + МдСтандартныеРеквизиты = МдОбъект.СтандартныеРеквизиты; + + ТекстЗапроса = "Выбрать Первые 1 Т.Ссылка Из "+МдПолноеИмя+" КАК Т Где Истина "; + Запрос = Новый Запрос; + Для каждого КлючЗначение Из СтруктураРеквизитовКлючей Цикл + ИмяРеквизита = КлючЗначение.Ключ; + ЗначениеРеквизита = КлючЗначение.Значение; + Если МдРеквизиты.Найти(ИмяРеквизита) = Неопределено и Не ЕстьСтандартныйРеквизит(МдСтандартныеРеквизиты, ИмяРеквизита) Тогда + ВызватьИсключение "В метаданных "+МдПолноеИмя+" не найден реквизит-ключ <"+ИмяРеквизита+">. Ошибка в макете данных"; + КонецЕсли; + ТекстЗапроса = ТекстЗапроса + " И "+ИмяРеквизита+" = &"+ИмяРеквизита; + Запрос.УстановитьПараметр(ИмяРеквизита, ЗначениеРеквизита); + КонецЦикла; + Запрос.Текст = ТекстЗапроса; + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ПротоОбъект.Объект = Выборка.Ссылка; + Рез = ПротоОбъект.Объект.ПолучитьОбъект(); + КонецЕсли; + + Возврат Рез; +КонецФункции + +Функция ЕстьСтандартныйРеквизит(МдСтандартныеРеквизиты, ИмяРеквизита) + Для каждого РеквизитМд Из МдСтандартныеРеквизиты Цикл + Если РеквизитМд.Имя = ИмяРеквизита Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь; +КонецФункции + +Функция СоздатьОбъект_Документ_или_БизнесПроцесс_или_Задача(МенеджерВсехВидов, ПротоДанные, ПротоОбъект) + ЭтоДокумент = МенеджерВсехВидов = Документы; + ЭтоБизнесПроцесс = МенеджерВсехВидов = БизнесПроцессы; + ЭтоЗадача = МенеджерВсехВидов = Задачи; + + Если ЭтоДокумент Тогда + ПредставлениеМенеджера = "Документы"; + ИначеЕсли ЭтоБизнесПроцесс Тогда + ПредставлениеМенеджера = "БизнесПроцессы"; + ИначеЕсли ЭтоЗадача Тогда + ПредставлениеМенеджера = "Задачи"; + Иначе + ВызватьИсключение "Требуется документ, бизнес-процесс или задача. Неизвестный менеджер "+ПротоОбъект.Тип+"."+ПротоОбъект.Вид+" . Переменная "+ПротоОбъект.ИмяПеременной; + КонецЕсли; + + МенеджерОбъекта = МенеджерВсехВидов[ПротоОбъект.Вид]; + Объект = ПолучитьОбъектЕслиВПротоДанныеПереданаСсылка(МенеджерОбъекта, ПротоОбъект); + Если Объект=Неопределено И ЗначениеЗаполнено(ПротоОбъект.Ключи) Тогда + Объект = НайтиОбъектПоКлючам(ПротоОбъект, МенеджерОбъекта, ПротоОбъект.Ключи); + КонецЕсли; + + Если ПротоОбъект.Режимы.ТолькоСоздание И Объект<>Неопределено Тогда + Возврат ПротоОбъект.Объект; + КонецЕсли; + + //Создание объекта + Если Объект = Неопределено Тогда + Попытка + Если ЭтоДокумент Тогда + Объект = МенеджерОбъекта.СоздатьДокумент(); + ИначеЕсли ЭтоБизнесПроцесс Тогда + Объект = МенеджерОбъекта.СоздатьБизнесПроцесс(); + ИначеЕсли ЭтоЗадача Тогда + Объект = МенеджерОбъекта.СоздатьЗадачу(); + КонецЕсли; + Исключение + Ошибка = ОписаниеОшибки(); + ВызватьИсключение ПредставлениеМенеджера+"."+ПротоОбъект.Вид+" не удалось создать новый элемент."+Символы.ПС+Ошибка; + КонецПопытки; + + //Установка ссылки + Если Объект.ЭтоНовый() Тогда + Если Не ЗначениеЗаполнено(ПротоОбъект.Объект) Тогда + ПротоОбъект.Объект = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор); + КонецЕсли; + Объект.УстановитьСсылкуНового(ПротоОбъект.Объект); + КонецЕсли; + КонецЕсли; + + //Заполняем реквизиты + НаборМдРеквизитов = НаборРеквизитовМетаданных(ПротоОбъект.Тип, Объект.Метаданные()); + Для каждого стрПоле Из ПротоОбъект.ПоляОбъекта Цикл + Объект[стрПоле.Имя] = ПолучитьЗначениеПоля(ПротоДанные,стрПоле,НаборМдРеквизитов); + КонецЦикла; + + Для каждого мдТабЧасть из Объект.Метаданные().ТабличныеЧасти Цикл + Объект[мдТабЧасть.Имя].Очистить(); + КонецЦикла; + Для каждого ТабЧасть из ПротоОбъект.ТабличныеЧасти Цикл + Для каждого СтрокаТабЧасти Из ТабЧасть.Значение Цикл + СтрокаТабЧастиОбъекта = Объект[ТабЧасть.Ключ].Добавить(); + объектМетаданныеТабличнаяЧасть = Объект.Метаданные().ТабличныеЧасти[ТабЧасть.Ключ]; + НаборМдРеквизитовТЧ = объектМетаданныеТабличнаяЧасть.Реквизиты; + Для каждого стрПоле Из СтрокаТабЧасти Цикл + СтрокаТабЧастиОбъекта[стрПоле.Имя] = ПолучитьЗначениеПоля(ПротоДанные,стрПоле,НаборМдРеквизитовТЧ); + КонецЦикла; + КонецЦикла; + КонецЦикла; + + //Служебные поля и значения + Если Не ЗначениеЗаполнено(Объект.Дата) Тогда + Объект.Дата = ТекущаяДата(); + КонецЕсли; + Если Не ЗначениеЗаполнено(Объект.Номер) тогда + Объект.УстановитьНовыйНомер(); + КонецЕсли; + + ЗаполнитьОбменДанными(Объект, ПротоДанные, ПротоОбъект); + ЗаполнитьДополнительныеСвойства(Объект, ПротоДанные, ПротоОбъект); + + РежимЗаписи = Неопределено; + Если ЭтоДокумент И Не ПротоОбъект.Режимы.Объект Тогда + РежимЗаписи = РежимЗаписиДокумента.Запись; + Если ПротоОбъект.Режимы.Проведение Тогда + РежимЗаписи = РежимЗаписиДокумента.Проведение; + КонецЕсли; + КонецЕсли; + Результат = ЗаписатьОбъектПриНеобходимости(Объект, ПротоОбъект, ПредставлениеМенеджера, Истина, РежимЗаписи); + + Возврат Результат; +КонецФункции + +Функция СоздатьОбъект_Регистр(МенеджерРегистра, ПротоДанные, ПротоОбъект) + ЭтоРегистрСведения = МенеджерРегистра = РегистрыСведений; + ЭтоРегистрБухгалтерии = МенеджерРегистра = РегистрыБухгалтерии; + ЭтоРегистрНакопления = МенеджерРегистра = РегистрыНакопления; + + Если ЭтоРегистрСведения Тогда + ПредставлениеМдМенеджераРегистра = "РегистрыСведения"; + ИначеЕсли ЭтоРегистрБухгалтерии Тогда + ПредставлениеМдМенеджераРегистра = "РегистрыБухгалтерии"; + ИначеЕсли ЭтоРегистрНакопления Тогда + ПредставлениеМдМенеджераРегистра = "РегистрыНакопления"; + Иначе + ВызватьИсключение "Неизвестный менеджер регистра "+ПротоОбъект.Тип+"."+ПротоОбъект.Вид+" . Переменная "+ПротоОбъект.ИмяПеременной; + КонецЕсли; + Если ЗначениеЗаполнено(ПротоОбъект.Ключи) Тогда + ВызватьИсключение "Работа с ключами для "+ПредставлениеМдМенеджераРегистра+" пока не поддерживается"; + КонецЕсли; + + //Создание объекта + ПротоНаборЗаписей = Неопределено; + Если ПротоОбъект.ТабличныеЧасти.Свойство("Запись",ПротоНаборЗаписей) Тогда + Попытка + Объект = МенеджерРегистра[ПротоОбъект.Вид].СоздатьНаборЗаписей(); + Исключение + Ошибка = ОписаниеОшибки(); + ВызватьИсключение ПредставлениеМдМенеджераРегистра+"."+ПротоОбъект.Вид+" не удалось создать новый НаборЗаписей."+Символы.ПС+Ошибка; + КонецПопытки; + + МетаданныеНабора = Объект.Метаданные(); + НаборМдРеквизитов = НаборРеквизитовМетаданных(ПротоОбъект.Тип, МетаданныеНабора); + + РегистрСведенийПодчиненРегистратору = Истина; + Если ЭтоРегистрСведения Тогда + РегистрСведенийПодчиненРегистратору = МетаданныеНабора.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору; + + ИначеЕсли ЭтоРегистрБухгалтерии Тогда + НаборВидовСубконто = Новый Структура; + + ПостфиксыСчетов = Новый Массив; + Если МетаданныеНабора.Корреспонденция Тогда + ПостфиксыСчетов.Добавить("Дт"); + ПостфиксыСчетов.Добавить("Кт"); + Иначе + ПостфиксыСчетов.Добавить(""); + КонецЕсли; + Для каждого ПостфиксСчета Из ПостфиксыСчетов Цикл + НаборМдРеквизитов.Вставить("Счет"+ПостфиксСчета, МетаданныеНабора.ПланСчетов); + Для НомерВидаСубконто = 1 По МетаданныеНабора.ПланСчетов.МаксКоличествоСубконто Цикл + ОписаниеСубконто = Новый Структура("ИмяРеквизитаСчет,ИмяРеквизитаСубконто,НомерВидаСубконто", "Счет"+ПостфиксСчета, "Субконто"+ПостфиксСчета, НомерВидаСубконто-1); + НаборВидовСубконто.Вставить("Субконто"+ПостфиксСчета+НомерВидаСубконто, ОписаниеСубконто); + КонецЦикла; + КонецЦикла; + КонецЕсли; + + Для каждого СтрокаЗаписи Из ПротоНаборЗаписей Цикл + ЗаписьНабора = Объект.Добавить(); + Для каждого стрПоле Из СтрокаЗаписи Цикл + ЗначениеПоля = ПолучитьЗначениеПоля(ПротоДанные,стрПоле,НаборМдРеквизитов); + + ОписаниеСубконто = Неопределено; + Если ЭтоРегистрБухгалтерии И НаборВидовСубконто.Свойство(стрПоле.Имя, ОписаниеСубконто) Тогда + ВидСубконто = ЗаписьНабора[ОписаниеСубконто.ИмяРеквизитаСчет].ВидыСубконто[ОписаниеСубконто.НомерВидаСубконто].ВидСубконто; + ЗаписьНабора[ОписаниеСубконто.ИмяРеквизитаСубконто].Вставить(ВидСубконто, ЗначениеПоля); + Иначе + ЗаписьНабора[стрПоле.Имя] = ЗначениеПоля; + КонецЕсли; + КонецЦикла; + + Если РегистрСведенийПодчиненРегистратору Тогда + Если Не ЗначениеЗаполнено(ЗаписьНабора.Регистратор) Тогда + ВызватьИсключение "Не задан регистратор для записей регистра "+ПредставлениеМдМенеджераРегистра+". Переменная "+ПротоОбъект.ИмяПеременной; + КонецЕсли; + Если НЕ ЗначениеЗаполнено(ЗаписьНабора.Период) Тогда + ЗаписьНабора.Период = ЗаписьНабора.Регистратор.Дата; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ЗаписьНабора = Объект[0]; + Если РегистрСведенийПодчиненРегистратору Тогда + Объект.Отбор.Регистратор.Установить(ЗаписьНабора.Регистратор); + Иначе + Для каждого МетаИзмерение Из МетаданныеНабора.Измерения Цикл + ИмяИзмерения = МетаИзмерение.Имя; + Если Объект.Отбор.Найти(ИмяИзмерения) <> Неопределено Тогда + Объект.Отбор[ИмяИзмерения].Установить(ЗаписьНабора[ИмяИзмерения]); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ЗаполнитьОбменДанными(Объект, ПротоДанные, ПротоОбъект); + ЗаполнитьДополнительныеСвойства(Объект, ПротоДанные, ПротоОбъект); + + ИначеЕсли ЭтоРегистрСведения Тогда + Попытка + Объект = РегистрыСведений[ПротоОбъект.Вид].СоздатьМенеджерЗаписи(); + Исключение + Ошибка = ОписаниеОшибки(); + ВызватьИсключение ПредставлениеМдМенеджераРегистра+"."+ПротоОбъект.Вид+" не удалось создать новый набор записей"+Символы.ПС+Ошибка; + КонецПопытки; + + НаборМдРеквизитов = НаборРеквизитовМетаданных(ПротоОбъект.Тип, РегистрыСведений[ПротоОбъект.Вид].СоздатьНаборЗаписей().Метаданные()); + Для каждого стрПоле Из ПротоОбъект.ПоляОбъекта Цикл + Объект[стрПоле.Имя] = ПолучитьЗначениеПоля(ПротоДанные,стрПоле,НаборМдРеквизитов); + КонецЦикла; + Иначе + ВызватьИсключение ПредставлениеМдМенеджераРегистра+"."+ПротоОбъект.Вид+" в макете нет записей для регистра "+ПредставлениеМдМенеджераРегистра; + КонецЕсли; + + ПредставлениеМетаданного = "набора записей "+ПредставлениеМдМенеджераРегистра; + ЗаписатьОбъектПриНеобходимости(Объект, ПротоОбъект, ПредставлениеМетаданного, Ложь); + + Возврат Объект; +КонецФункции + +Функция СоздатьОбъект_ПользовательИБ(ПротоДанные,ПротоОбъект) + Если ЗначениеЗаполнено(ПротоОбъект.Ключи) Тогда + ВызватьИсключение "Работа с ключами при создании пользователя ИБ пока не поддерживается"; + КонецЕсли; + Объект = ПользователиИнформационнойБазы.СоздатьПользователя(); + + параметрыПользователя = Новый Структура; + параметрыПользователя.Вставить("Имя", ""); + параметрыПользователя.Вставить("ПолноеИмя", ""); + параметрыПользователя.Вставить("АутентификацияСтандартная", Истина); + параметрыПользователя.Вставить("АутентификацияОС", Ложь); + параметрыПользователя.Вставить("ПользовательОС", ""); + параметрыПользователя.Вставить("ОсновнойИнтерфейс", ""); //Метаданные.Интерфейсы.Администратор); + параметрыПользователя.Вставить("Пароль", "пароль"); + параметрыПользователя.Вставить("ПоказыватьВСпискеВыбора", Истина); + параметрыПользователя.Вставить("РежимЗапуска", РежимЗапускаКлиентскогоПриложения.Авто); + параметрыПользователя.Вставить("Язык", Метаданные.Языки.Русский); + массивРолей = Новый Массив; + параметрыПользователя.Вставить("Роли", массивРолей); + + //Заполняем реквизиты справочника + Для каждого стрПоле Из ПротоОбъект.ПоляОбъекта Цикл + параметрыПользователя[стрПоле.Имя] = ПолучитьЗначениеПоля(ПротоДанные,стрПоле,Неопределено); + КонецЦикла; + ЗаполнитьЗначенияСвойств(Объект, параметрыПользователя,, "ОсновнойИнтерфейс,РежимЗапуска"); + + ПротоНаборРолей = Неопределено; + Если ПротоОбъект.ТабличныеЧасти.Свойство("Роли",ПротоНаборРолей) Тогда + Для каждого СтрокаРоли Из ПротоНаборРолей Цикл + Для каждого стрПоле Из СтрокаРоли Цикл + Роль = Метаданные.Роли.Найти(ПолучитьЗначениеПоля(ПротоДанные,стрПоле,Неопределено)); + параметрыПользователя.Роли.Добавить(Роль); + КонецЦикла; + КонецЦикла; + КонецЕсли; + + НашлиРежимЗапуска = Ложь; + Для каждого ЗначениеРежимаЗапуска Из РежимЗапускаКлиентскогоПриложения Цикл + Если НРег(""+ЗначениеРежимаЗапуска) = НРег(параметрыПользователя.РежимЗапуска) Тогда + НашлиРежимЗапуска = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если НашлиРежимЗапуска Тогда + Объект.РежимЗапуска = ЗначениеРежимаЗапуска; + Иначе + ВызватьИсключение "Не нашли режим запуска <"+параметрыПользователя.РежимЗапуска+">. Возможно, нужно указать с пробелом, например, ""Управляемое приложение"""; + КонецЕсли; + + Если ЗначениеЗаполнено(параметрыПользователя.ОсновнойИнтерфейс) Тогда + Объект.ОсновнойИнтерфейс = Метаданные.Интерфейсы.Найти(параметрыПользователя.ОсновнойИнтерфейс); + КонецЕсли; + Для каждого роль Из параметрыПользователя.Роли Цикл + Объект.Роли.Добавить(роль); + КонецЦикла; + + ПредставлениеМетаданного = "пользователя ИБ "; + ЗаписатьОбъектПриНеобходимости(Объект, ПротоОбъект, ПредставлениеМетаданного, Ложь); + + Возврат Объект; +КонецФункции + +Функция ПолучитьОбъектЕслиВПротоДанныеПереданаСсылка(МенеджерОбъекта, ПротоОбъект) + Перем Объект; + стрПолеСсылка = ПротоОбъект.ПоляОбъекта.Найти(ВернутьЗначениеСоответствия("Ссылка"),"Имя"); + Если стрПолеСсылка<>Неопределено Тогда + ПротоОбъект.Объект = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(стрПолеСсылка.Значение)); + ПротоОбъект.ПоляОбъекта.Удалить(стрПолеСсылка); + Объект = ПротоОбъект.Объект.ПолучитьОбъект(); + КонецЕсли; + Возврат Объект; +КонецФункции + +Процедура ЗаполнитьОбменДанными(Объект, ПротоДанные, ПротоОбъект) + Объект.ОбменДанными.Загрузка = ПротоОбъект.Режимы.ОбменДанными; + + //Дополнительные Свойства + Для каждого стрДопСвойство Из ПротоОбъект.ДопСвойства Цикл + Значение = ПолучитьЗначениеПоля(ПротоДанные,стрДопСвойство,Неопределено); + Объект.ДополнительныеСвойства.Вставить(стрДопСвойство.Имя,Значение); + КонецЦикла; + Для каждого стрДопСвойство Из ПротоОбъект.ОбменДанными Цикл + Значение = ПолучитьЗначениеПоля(ПротоДанные,стрДопСвойство,Неопределено); + Объект.ОбменДанными[стрДопСвойство.Имя] = Значение; + КонецЦикла; +КонецПроцедуры + +Функция ЗаписатьОбъектПриНеобходимости(Объект, ПротоОбъект, ПредставлениеМетаданного, ЭтоСсылочныйОбъект, РежимЗаписи = Неопределено) + Перем Результат; + Если Не ПротоОбъект.Режимы.Объект Тогда + Попытка + Если РежимЗаписи = Неопределено Тогда + Объект.Записать(); + Иначе + Объект.Записать(РежимЗаписи); + КонецЕсли; + Если ЭтоСсылочныйОбъект Тогда + Результат = Объект.Ссылка; + КонецЕсли; + Исключение + Ошибка = ОписаниеОшибки(); + Ошибка = "Ошибка записи "+ПредставлениеМетаданного+" "+ПротоОбъект.Вид+", переменная "+ПротоОбъект.ИмяПеременной + Символы.ПС + Ошибка; + ВызватьИсключение Ошибка; + КонецПопытки; + ИначеЕсли ЭтоСсылочныйОбъект Тогда + Результат = Объект; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Процедура ЗаполнитьДополнительныеСвойства(Объект, ПротоДанные, ПротоОбъект) + Для каждого стрДопСвойство Из ПротоОбъект.ДопСвойства Цикл + Значение = ПолучитьЗначениеПоля(ПротоДанные,стрДопСвойство,Неопределено); + Объект.ДополнительныеСвойства.Вставить(стрДопСвойство.Имя,Значение); + КонецЦикла; +КонецПроцедуры + +Функция ПолучитьЗначениеПоля(ПротоДанные,стрПоле,НаборМдРеквизитов) + Значение = Неопределено; + Если ПустаяСтрока(стрПоле.Режим) Тогда + Если ЗначениеЗаполнено(стрПоле.ДополнительныйТип) Тогда + ТипЗначения = Новый ОписаниеТипов(стрПоле.ДополнительныйТип); + Значение = ТипЗначения.ПривестиЗначение(стрПоле.Значение); + Иначе + Значение = стрПоле.Значение; + КонецЕсли; + ИначеЕсли ВРег(стрПоле.Режим) = "ПЕРЕМ" Тогда + Значение = ПротоДанные[стрПоле.Значение].Объект; + Если Не ЗначениеЗаполнено(Значение) Тогда + Значение = ПолучитьОбъект(ПротоДанные, ПротоДанные[стрПоле.Значение]); + КонецЕсли; + + Если Не ЗначениеЗаполнено(Значение) Тогда + ВызватьИсключение "ЗначениеНеНайдено: Реквизит <"+стрПоле.Имя+">: Искали значение <"+стрПоле.Значение+">, но не нашли!"; + КонецЕсли; + ИначеЕсли ВРег(стрПоле.Режим) = "ТЕКУЩАЯДАТА" Тогда + Значение = ТекущаяДата(); + ИначеЕсли ВРег(стрПоле.Режим) = "ВЫРАЖЕНИЕ" Тогда + Значение = Вычислить(стрПоле.Значение); + Иначе + Значение = ВычислитьЗначениеПоТипуПоля(НаборМдРеквизитов,стрПоле); + КонецЕсли; + Возврат Значение; +КонецФункции + +Функция ВычислитьЗначениеПоТипуПоля(НаборМдРеквизитов,стрПоле) + Значение = Неопределено; + Режим = ВРег(стрПоле.Режим); + + Попытка + Если НаборМдРеквизитов = Неопределено Тогда + Если НЕ ЗначениеЗаполнено(стрПоле.ДополнительныйТип) Тогда + ВызватьИсключение "Не указан дополнительный тип значения"; + КонецЕсли; + МетаданныеРеквизита = Неопределено; + Иначе + МетаданныеРеквизита = НаборМдРеквизитов[стрПоле.Имя]; + КонецЕсли; + УжеВычислилиЗначение = Ложь; + ЕстьМетаданныеРеквизита = Ложь; + Если Режим = "ГУИД" И МетаданныеРеквизита <> Неопределено И МетаданныеРеквизита.Тип.СодержитТип(Тип("УникальныйИдентификатор")) Тогда + Значение = Новый УникальныйИдентификатор(стрПоле.Значение); + УжеВычислилиЗначение = Истина; + Иначе + + Если ЗначениеЗаполнено(стрПоле.ДополнительныйТип) Тогда + ТипЗначения = Новый ОписаниеТипов(стрПоле.ДополнительныйТип); + Иначе + Если Метаданные.ПланыСчетов.Найти(МетаданныеРеквизита) <> Неопределено Тогда + ТипЗначения = Новый ОписаниеТипов("ПланСчетовСсылка."+МетаданныеРеквизита.Имя); + Иначе + ТипЗначения = МетаданныеРеквизита.Тип; + КонецЕсли; + КонецЕсли; + ЗначениеПоУмолчанию = ТипЗначения.ПривестиЗначение(); + Попытка + МетаданныеТипаРеквизита = ЗначениеПоУмолчанию.Метаданные(); + ЕстьМетаданныеРеквизита = Истина; + Исключение + КонецПопытки; + + Если Не ЕстьМетаданныеРеквизита И Режим = "ПРЕДОПРЕДЕЛЕННЫЙ" Тогда + Если БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().СодержитТип( ТипЗначения.Типы()[0] ) Тогда + Значение = ПолучитьЗначениеТочкиБизнесПроцесса(стрПоле.Значение); + УжеВычислилиЗначение = Истина; + Иначе + Значение = Неопределено; + СтрокаДляВыполнения = "Значение = "+ТипЗначения+"["""+стрПоле.Значение+"""];"; + Выполнить(СтрокаДляВыполнения); + УжеВычислилиЗначение = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Не УжеВычислилиЗначение и ЕстьМетаданныеРеквизита Тогда + ПолноеИмяТипаРеквизита = МетаданныеТипаРеквизита.ПолноеИмя(); + Если Найти(ПолноеИмяТипаРеквизита, ВернутьЗначениеСоответствия("Справочник")) = 1 Тогда + менеджерОбъекта = Справочники[МетаданныеТипаРеквизита.Имя]; + ИначеЕсли Найти(ПолноеИмяТипаРеквизита, ВернутьЗначениеСоответствия("Документ")) = 1 Тогда + менеджерОбъекта = Документы[МетаданныеТипаРеквизита.Имя]; + ИначеЕсли Найти(ПолноеИмяТипаРеквизита, ВернутьЗначениеСоответствия("Перечисление")) = 1 Тогда + менеджерОбъекта = Перечисления[МетаданныеТипаРеквизита.Имя]; + ИначеЕсли Найти(ПолноеИмяТипаРеквизита, ВернутьЗначениеСоответствия("ПланСчетов")) = 1 Тогда + менеджерОбъекта = ПланыСчетов[МетаданныеТипаРеквизита.Имя]; + ИначеЕсли Найти(ПолноеИмяТипаРеквизита, ВернутьЗначениеСоответствия("ПланВидовХарактеристик")) = 1 Тогда + менеджерОбъекта = ПланыВидовХарактеристик[МетаданныеТипаРеквизита.Имя]; + КонецЕсли; + Если менеджерОбъекта = Неопределено Тогда + ВызватьИсключение "Не найден менеджерОбъекта"; + КонецЕсли; + Если Режим = "ПРЕДОПРЕДЕЛЕННЫЙ" Тогда + //Значение = менеджерОбъекта[стрПоле.Значение]; + Если ЗначениеЗаполнено(стрПоле.Значение) Тогда + Значение = менеджерОбъекта[стрПоле.Значение]; + Иначе + Значение = менеджерОбъекта.ПустаяСсылка(); + КонецЕсли; + ИначеЕсли Режим = "КОД" Тогда + Значение = менеджерОбъекта.НайтиПоКоду(стрПоле.Значение); + ИначеЕсли Режим = "НОМЕР" Тогда + Значение = НайтиБлижайшийДокументПоНомеру(МетаданныеТипаРеквизита, стрПоле.Значение); + ИначеЕсли Режим = "НАИМЕНОВАНИЕ" Тогда + Значение = менеджерОбъекта.НайтиПоНаименованию(стрПоле.Значение, Истина); + ИначеЕсли Режим = "ГУИД" Тогда + Значение = менеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(стрПоле.Значение)); + Иначе + ВызватьИсключение "НеверныйРежимПоиска: Не поддерживаемый режим поиска. Реквизит <"+стрПоле.Имя+">: Искали значение <"+стрПоле.Значение+">"; + КонецЕсли; + + Если ЗначениеЗаполнено(стрПоле.Значение) И Не ЗначениеЗаполнено(Значение) Тогда //Если Не ЗначениеЗаполнено(Значение) Тогда + ВызватьИсключение "ЗначениеНеНайдено: Реквизит <"+стрПоле.Имя+">: Искали значение <"+стрПоле.Значение+">, но не нашли!"; + КонецЕсли; + КонецЕсли; + Исключение + ошибка = ОписаниеОшибки(); + Если Найти(ошибка, "НеверныйРежимПоиска") = 0 Тогда + ошибка = "ОшибкаПоиска: Реквизит <"+стрПоле.Имя+">: Искали значение <"+стрПоле.Значение+"> " + ошибка; + КонецЕсли; + ВызватьИсключение ошибка; + КонецПопытки; + + Возврат Значение; +КонецФункции + +Функция СоздатьПользователяИБ(параметры) Экспорт + НовыйПользователь = ПользователиИнформационнойБазы.СоздатьПользователя(); + + ЗаполнитьЗначенияСвойств(НовыйПользователь, параметры,, "ОсновнойИнтерфейс"); + Если ЗначениеЗаполнено(параметры.ОсновнойИнтерфейс) Тогда + НовыйПользователь.ОсновнойИнтерфейс = Метаданные.Интерфейсы.Найти(параметры.ОсновнойИнтерфейс); + КонецЕсли; + Для каждого роль Из параметры.Роли Цикл + НовыйПользователь.Роли.Добавить(роль); + КонецЦикла; + + НовыйПользователь.Записать(); + Возврат НовыйПользователь; +КонецФункции + +Функция КолонкиМакетаДанных() + КолонкиМакета = Новый Структура(); + СтрокаЗеро = "0"; + КолонкиМакета.Вставить("Тип", СтрокаЗеро); + КолонкиМакета.Вставить("Вид", СтрокаЗеро); + КолонкиМакета.Вставить("ИмяПеременной", СтрокаЗеро); + КолонкиМакета.Вставить("ТЧ", СтрокаЗеро); + КолонкиМакета.Вставить("Реквизит", СтрокаЗеро); + КолонкиМакета.Вставить("Значение", СтрокаЗеро); + КолонкиМакета.Вставить("Режим", СтрокаЗеро); + КолонкиМакета.Вставить("ДополнительныйТипЗначения", СтрокаЗеро); + КолонкиМакета.Вставить("Ключ", СтрокаЗеро); + Возврат КолонкиМакета; +КонецФункции + +Функция ПолучитьЗначениеТочкиБизнесПроцесса(Значение_Строкой) + Значение = Неопределено; + Для каждого БизнесПроцессМенеджер из БизнесПроцессы Цикл + ТочкиМаршрута = БизнесПроцессМенеджер.ТочкиМаршрута; + Для каждого ТочкаМаршрута Из ТочкиМаршрута Цикл + Если ВРег(ТочкаМаршрута.Имя) = ВРег(Значение_Строкой) Тогда + Значение = ТочкаМаршрута; + Возврат Значение; + КонецЕсли; + КонецЦикла; + КонецЦикла; + Возврат Значение; +КонецФункции + +Функция НайтиБлижайшийДокументПоНомеру(МетаданныеДокумента, Значение_Строкой) + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Доки.Ссылка, + | Доки.Дата + |ИЗ + | Документ."+МетаданныеДокумента.Имя+" КАК Доки + |ГДЕ + | Доки.Номер = &Номер + | + |УПОРЯДОЧИТЬ ПО + | Доки.Дата УБЫВ"; + Запрос = Новый Запрос(ТекстЗапроса); + Если МетаданныеДокумента.ТипНомера = Метаданные.СвойстваОбъектов.ТипНомераДокумента.Число Тогда + Номер = Число(Значение_Строкой); + Иначе + Номер = Значение_Строкой; + КонецЕсли; + Запрос.УстановитьПараметр("Номер", Номер); + + Результат = Запрос.Выполнить(); + + Значение = Неопределено; + + ВыборкаДетальныеЗаписи = Результат.Выбрать(); + Если ВыборкаДетальныеЗаписи.Следующий() Тогда + Значение = ВыборкаДетальныеЗаписи.Ссылка; + Иначе + ВызватьИсключение "Не удалось найти документ по номеру <"+Значение_Строкой+">. Тип Документ."+МетаданныеДокумента.Имя; + КонецЕсли; + + Возврат Значение; +КонецФункции + +Функция НаборРеквизитовМетаданных(КорневойТип, МетаданныеОбъекта) + НаборМдРеквизитов = Новый Структура; + Если КорневойТип = ВернутьЗначениеСоответствия("Справочник") + или КорневойТип = ВернутьЗначениеСоответствия("Документ") + или КорневойТип = ВернутьЗначениеСоответствия("ПланВидовХарактеристик") + или КорневойТип = ВернутьЗначениеСоответствия("БизнесПроцесс") + или КорневойТип = ВернутьЗначениеСоответствия("ПланОбмена") Тогда + + ДобавитьРеквизитыМетаданныхВНаборРеквизитов(МетаданныеОбъекта.СтандартныеРеквизиты, НаборМдРеквизитов); + ДобавитьРеквизитыМетаданныхВНаборРеквизитов(МетаданныеОбъекта.Реквизиты, НаборМдРеквизитов); + ИначеЕсли КорневойТип = ВернутьЗначениеСоответствия("Задача") Тогда + ДобавитьРеквизитыМетаданныхВНаборРеквизитов(МетаданныеОбъекта.СтандартныеРеквизиты, НаборМдРеквизитов); + ДобавитьРеквизитыМетаданныхВНаборРеквизитов(МетаданныеОбъекта.Реквизиты, НаборМдРеквизитов); + ДобавитьРеквизитыМетаданныхВНаборРеквизитов(МетаданныеОбъекта.РеквизитыАдресации, НаборМдРеквизитов); + + ИначеЕсли КорневойТип = ВернутьЗначениеСоответствия("РегистрСведений") + или КорневойТип = ВернутьЗначениеСоответствия("РегистрНакопления") + или КорневойТип = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда + + ДобавитьРеквизитыМетаданныхВНаборРеквизитов(МетаданныеОбъекта.СтандартныеРеквизиты, НаборМдРеквизитов); + ДобавитьРеквизитыМетаданныхВНаборРеквизитов(МетаданныеОбъекта.Измерения, НаборМдРеквизитов, КорневойТип); + ДобавитьРеквизитыМетаданныхВНаборРеквизитов(МетаданныеОбъекта.Ресурсы, НаборМдРеквизитов); + ДобавитьРеквизитыМетаданныхВНаборРеквизитов(МетаданныеОбъекта.Реквизиты, НаборМдРеквизитов); + + Иначе + ВызватьИсключение "Необрабатываемый корневой тип <"+КорневойТип+">"; + КонецЕсли; + Возврат НаборМдРеквизитов; +КонецФункции + +Процедура ДобавитьРеквизитыМетаданныхВНаборРеквизитов(МдРеквизиты, НаборМдРеквизитов, КорневойТип = "") + Для каждого МдРеквизит Из МдРеквизиты Цикл + Если КорневойТип = "РегистрБухгалтерии" И Не МдРеквизит.Балансовый Тогда + НаборМдРеквизитов.Вставить(МдРеквизит.Имя + "Дт", МдРеквизит); + НаборМдРеквизитов.Вставить(МдРеквизит.Имя + "Кт", МдРеквизит); + Иначе + НаборМдРеквизитов.Вставить(МдРеквизит.Имя, МдРеквизит); + КонецЕсли; + КонецЦикла; +КонецПроцедуры +// } Десериализация тестовых данных + +// { Методы проверки таблиц метаданных +Функция ПолучитьКоличествоДокументовПоОтбору(видДокумента, Дата1, дата2, структураОтбора = Неопределено) Экспорт + Если Не ЗначениеЗаполнено(видДокумента) Тогда + ВызватьИсключение "Вид документа должен быть заполнен"; + КонецЕсли; + Если Не ЗначениеЗаполнено(Дата1) Тогда + ВызватьИсключение "Дата1 должнна быть заполнена"; + КонецЕсли; + Если Не ЗначениеЗаполнено(Дата2) Тогда + ВызватьИсключение "Дата2 должнна быть заполнена"; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Доки.Ссылка) КАК КоличествоДокументов + |ИЗ + | Документ."+видДокумента+" КАК Доки + |ГДЕ + | Доки.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 + |"; + Запрос.УстановитьПараметр("Дата1", Дата1); + Запрос.УстановитьПараметр("Дата2", КонецДня(Дата2)); + + Если ЗначениеЗаполнено(структураОтбора) Тогда + Для каждого ключЗначение Из структураОтбора Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Доки."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат выборка.КоличествоДокументов; +КонецФункции + +Функция ПолучитьКоличествоЭлементовСправочникаПоОтбору(видСправочника, структураОтбора = Неопределено) Экспорт + Если Не ЗначениеЗаполнено(видСправочника) Тогда + ВызватьИсключение "Вид справочника должен быть заполнен"; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Спр.Ссылка) КАК КоличествоЭлементов + |ИЗ + | Справочник."+видСправочника+" КАК Спр + |ГДЕ + | Истина + |"; + + Если ЗначениеЗаполнено(структураОтбора) Тогда + Для каждого ключЗначение Из структураОтбора Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Спр."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат выборка.КоличествоЭлементов; +КонецФункции + +Функция ПолучитьКоличествоСтрокВДокументахПоОтбору(видДокумента, имяТабличнойЧасти, Дата1, дата2, структураОтбораШапки = Неопределено, структураОтбораТабличнойЧасти = Неопределено) Экспорт + Если Не ЗначениеЗаполнено(видДокумента) Тогда + ВызватьИсключение "Вид документа должен быть заполнен"; + КонецЕсли; + Если Не ЗначениеЗаполнено(Дата1) Тогда + ВызватьИсключение "Дата1 должнна быть заполнена"; + КонецЕсли; + Если Не ЗначениеЗаполнено(Дата2) Тогда + ВызватьИсключение "Дата2 должнна быть заполнена"; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | КОЛИЧЕСТВО(Доки.Ссылка) КАК КоличествоДокументов + |ИЗ + | Документ."+видДокумента+"."+имяТабличнойЧасти+" КАК Доки + |ГДЕ + | Доки.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 + |"; + Запрос.УстановитьПараметр("Дата1", Дата1); + Запрос.УстановитьПараметр("Дата2", КонецДня(Дата2)); + + Если ЗначениеЗаполнено(структураОтбораШапки) Тогда + Для каждого ключЗначение Из структураОтбораШапки Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Доки.Ссылка."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + Если ЗначениеЗаполнено(структураОтбораТабличнойЧасти) Тогда + Для каждого ключЗначение Из структураОтбораТабличнойЧасти Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Доки."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат выборка.КоличествоДокументов; +КонецФункции + +Функция ПолучитьИтоговуюСуммуТабличнойЧастиДокументовПоОтбору(видДокумента, имяТабличнойЧасти, имяРеквизита, Дата1, дата2, структураОтбораШапки = Неопределено, структураОтбораТабличнойЧасти = Неопределено) Экспорт + Если Не ЗначениеЗаполнено(видДокумента) Тогда + ВызватьИсключение "Вид документа должен быть заполнен"; + КонецЕсли; + Если Не ЗначениеЗаполнено(Дата1) Тогда + ВызватьИсключение "Дата1 должнна быть заполнена"; + КонецЕсли; + Если Не ЗначениеЗаполнено(Дата2) Тогда + ВызватьИсключение "Дата2 должнна быть заполнена"; + КонецЕсли; + Если имяТабличнойЧасти = "" И ЗначениеЗаполнено(структураОтбораТабличнойЧасти) Тогда + ВызватьИсключение "Если не указана табличная часть, то структура отбора табличной части не должна быть указана"; + КонецЕсли; + + Запрос = Новый Запрос; + текстТабличнаяЧасть = ?(НЕ ЗначениеЗаполнено(имяТабличнойЧасти), "", "."+имяТабличнойЧасти); + Запрос.Текст = "ВЫБРАТЬ + | ЕСТЬNULL(СУММА(Доки."+имяРеквизита+"), 0) КАК Сумма + |ИЗ + | Документ."+видДокумента+текстТабличнаяЧасть+" КАК Доки + |ГДЕ + | Доки.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 + |"; + Запрос.УстановитьПараметр("Дата1", Дата1); + Запрос.УстановитьПараметр("Дата2", КонецДня(Дата2)); + + Если ЗначениеЗаполнено(структураОтбораШапки) Тогда + Для каждого ключЗначение Из структураОтбораШапки Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Доки.Ссылка."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + Если ЗначениеЗаполнено(структураОтбораТабличнойЧасти) Тогда + Для каждого ключЗначение Из структураОтбораТабличнойЧасти Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Доки."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат выборка.Сумма; +КонецФункции + +Функция ПолучитьИтоговуюСуммуДокументовПоОтбору(видДокумента, имяРеквизита, Дата1, дата2, структураОтбораШапки = Неопределено, структураОтбораТабличнойЧасти = Неопределено) Экспорт + Возврат ПолучитьИтоговуюСуммуТабличнойЧастиДокументовПоОтбору(видДокумента, "", имяРеквизита, Дата1, дата2, структураОтбораШапки, структураОтбораТабличнойЧасти); +КонецФункции + +Функция ПолучитьКоличествоЭлементовМетаданногоПоОтбору(типМетаданного, видМетаданного, структураОтбора = Неопределено) Экспорт + Если Не ЗначениеЗаполнено(типМетаданного) Тогда + ВызватьИсключение "Тип метаданного должен быть заполнен"; + КонецЕсли; + Если Не ЗначениеЗаполнено(видМетаданного) Тогда + ВызватьИсключение "Вид метаданного должен быть заполнен"; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Таб.Ссылка) КАК КоличествоЭлементов + |ИЗ + | "+типМетаданного+"."+видМетаданного+" КАК Таб + |ГДЕ + | Истина + |"; + + Если ЗначениеЗаполнено(структураОтбора) Тогда + Для каждого ключЗначение Из структураОтбора Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Таб."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат выборка.КоличествоЭлементов; +КонецФункции + +Функция ПолучитьКоличествоБизнесПроцессовПоОтбору(видМетаданного, структураОтбора = Неопределено) Экспорт + Возврат ПолучитьКоличествоЭлементовМетаданногоПоОтбору("БизнесПроцесс", видМетаданного, структураОтбора); +КонецФункции + +Функция ПолучитьКоличествоЗадачПоОтбору(видМетаданного, структураОтбора = Неопределено) Экспорт + Возврат ПолучитьКоличествоЭлементовМетаданногоПоОтбору("Задача", видМетаданного, структураОтбора); +КонецФункции + +Функция ПолучитьКоличествоЭлементовРегистраПоОтбору(типМетаданного, видМетаданного, структураОтбора = Неопределено) Экспорт + Если Не ЗначениеЗаполнено(типМетаданного) Тогда + ВызватьИсключение "Тип метаданного должен быть заполнен"; + КонецЕсли; + Если Не ЗначениеЗаполнено(видМетаданного) Тогда + ВызватьИсключение "Вид метаданного должен быть заполнен"; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК КоличествоЭлементов + |ИЗ + | "+типМетаданного+"."+видМетаданного+" КАК Таб + |ГДЕ + | Истина + |"; + + Если ЗначениеЗаполнено(структураОтбора) Тогда + Для каждого ключЗначение Из структураОтбора Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Таб."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат 0; + КонецЕсли; + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + Возврат выборка.КоличествоЭлементов; +КонецФункции + +Функция ПолучитьЭлементыМетаданногоПоОтбору(типМетаданного, видМетаданного, Количество=1, структураОтбора = Неопределено) Экспорт + Если Не ЗначениеЗаполнено(типМетаданного) Тогда + ВызватьИсключение "Тип метаданного должен быть заполнен"; + КонецЕсли; + Если Не ЗначениеЗаполнено(видМетаданного) Тогда + ВызватьИсключение "Вид метаданного должен быть заполнен"; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ "+Количество+" + | * + |ИЗ + | "+типМетаданного+"."+видМетаданного+" КАК Таб + |ГДЕ + | Истина + |"; + + Если ЗначениеЗаполнено(структураОтбора) Тогда + Для каждого ключЗначение Из структураОтбора Цикл + имяРеквизита = ключЗначение.Ключ; + Запрос.Текст = Запрос.Текст + " И Таб."+имяРеквизита+" = &"+имяРеквизита+" "; + Запрос.УстановитьПараметр(имяРеквизита, ключЗначение.Значение); + КонецЦикла; + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + ТЗ = РезультатЗапроса.Выгрузить(); + + Возврат ТЗ; +КонецФункции +// } Методы проверки таблиц метаданных + +// { Helpers +Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт + + Результат = Новый Массив; + + // для обеспечения обратной совместимости + Если ПропускатьПустыеСтроки = Неопределено Тогда + ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); + Если ПустаяСтрока(Строка) Тогда + Если Разделитель = " " Тогда + Результат.Добавить(""); + КонецЕсли; + Возврат Результат; + КонецЕсли; + КонецЕсли; + // + + Позиция = Найти(Строка, Разделитель); + Пока Позиция > 0 Цикл + Подстрока = Лев(Строка, Позиция - 1); + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда + Если СокращатьНепечатаемыеСимволы Тогда + Результат.Добавить(СокрЛП(Подстрока)); + Иначе + Результат.Добавить(Подстрока); + КонецЕсли; + КонецЕсли; + Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); + Позиция = Найти(Строка, Разделитель); + КонецЦикла; + + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда + Если СокращатьНепечатаемыеСимволы Тогда + Результат.Добавить(СокрЛП(Строка)); + Иначе + Результат.Добавить(Строка); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции +// } Helpers + +//{ ОСНОВНОЙ БЛОК +Функция СоздатьМакетДляГенерацииДанных(МассивДанных) Экспорт + ШапкаДанных = ШапкаДанныхВМакете(); + Макет = Новый ТабличныйДокумент; + номерКолонки = 0; + Для каждого ключЗначение Из ШапкаДанных Цикл + номерКолонки = номерКолонки + 1; + имяПоля = ключЗначение.Ключ; + Макет.Область(1, номерКолонки, 1, номерКолонки).Текст = имяПоля ; + КонецЦикла; + + Для каждого ОписательОбъекта Из МассивДанных Цикл + ПользовательИБ = Неопределено; + Если ЭтоОписательПользователяИБ(ОписательОбъекта, ПользовательИБ) Тогда + + ДобавитьПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных); + + Иначе + + ДобавитьОбъектВМакет(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных); + + КонецЕсли; + КонецЦикла; + Возврат Макет; +КонецФункции + +//{ Пример вызова из внешнего кода: +// Путь_xUnitFor1C = "C:\Projects\GitHub\xUnitFor1C\"; +// ПутьГенератораМакета = Путь_xUnitFor1C + "ГенерацияМакетаДанных_На_БазеРеальныхДанных.epf"; +// Запрос = Новый Запрос; +// запрос.Текст = " +// |ВЫБРАТЬ +// | ""РегистрыСведений.РегистрСведений1.СоздатьНаборЗаписей().Метаданные()"" КАК __Метаданные, +// | ""ЗаписьРегистра"" КАК __Префикс, +// | РегистрСведений1.ПростойСправочник, +// | РегистрСведений1.ПростойСправочник2, +// | РегистрСведений1.РесурсЧисло, +// | РегистрСведений1.РесурсБулево +// |ИЗ +// | РегистрСведений.РегистрСведений1 КАК РегистрСведений1 +// |УПОРЯДОЧИТЬ ПО +// | ПростойСправочник2"; +// + //или Запрос.Текст = + // "ВЫБРАТЬ + // | """" КАК __Метаданные, + // | ""ПростойСправочник"" КАК __Префикс, + // | ПростойСправочник.Ссылка, + // | ПростойСправочник.Код, + // | ПростойСправочник.Наименование, + // | ПростойСправочник.РеквизитБулево, + // | ПростойСправочник.РеквизитПеречисление + // |ИЗ + // | Справочник.ПростойСправочник КАК ПростойСправочник + // |Где РеквизитБулево И ПростойСправочник.Наименование = ""Тестовое наименование"" "; +// +// РезультатЗапроса = Запрос.Выполнить(); +// +// ГенераторМакетаДанных = ВнешниеОбработки.Создать(ПутьГенератораМакета); +// Макет = ГенераторМакетаДанных.СоздатьМакетДанныхНаОснованииЗапроса(РезультатЗапроса); +// Макет.Показать(); +//} +Функция СоздатьМакетДанныхНаОснованииЗапроса(РезультатЗапроса) Экспорт + Таблица = РезультатЗапроса.Выгрузить(); + + МассивПропускаемыхКолонок = Новый Массив; + МассивПропускаемыхКолонок.Добавить("__Метаданные"); + МассивПропускаемыхКолонок.Добавить("__Префикс"); + СтрокаПропускаемыхКолонок = ""; + Для каждого Колонка Из МассивПропускаемыхКолонок Цикл + СтрокаПропускаемыхКолонок = СтрокаПропускаемыхКолонок + Колонка+", "; + КонецЦикла; + + КоличествоСлужебныхКолонок = МассивПропускаемыхКолонок.Количество(); + + СтруктураДанных = Новый Структура(); + для каждого КолонкаЗапроса из Таблица.Колонки цикл + Если МассивПропускаемыхКолонок.Найти(КолонкаЗапроса.Имя) <> Неопределено Тогда + КоличествоСлужебныхКолонок = КоличествоСлужебныхКолонок - 1; + Продолжить; + КонецЕсли; + + имяКолонки = КолонкаЗапроса.имя; + СтруктураДанных.Вставить(имяКолонки); + КонецЦикла; + + Если КоличествоСлужебныхКолонок <> 0 Тогда + ВызватьИсключение "Не все служебные колонки заданы! В запросе обязательно должны быть колонки "+СтрокаПропускаемыхКолонок; + КонецЕсли; + + МассивДанных = Новый Массив; + + номер = 1; + индекс = 1; + Для каждого Строка из Таблица Цикл + номер = номер + 1; + + ИмяПеременной = Строка.__Префикс + XMLСтрока(индекс); + РеквизитыЗаписи = Новый Структура(); + Для каждого ключЗначение Из СтруктураДанных Цикл + РеквизитыЗаписи.Вставить(ключЗначение.Ключ) + КонецЦикла; + ЗаполнитьЗначенияСвойств(РеквизитыЗаписи, Строка); + + описаниеЗаписиРегистраСведений1 = СоздатьОписательЭлемента(); + описаниеЗаписиРегистраСведений1.Вставить("ИмяПеременной", ИмяПеременной); + описаниеЗаписиРегистраСведений1.Вставить("Реквизиты", РеквизитыЗаписи); + + Если ПустаяСтрока(Строка.__Метаданные) Тогда + описаниеЗаписиРегистраСведений1.Вставить(ВернутьЗначениеСоответствия("Ссылка"), Строка.Ссылка); + Иначе + Мета = Неопределено; + Выполнить("Мета = "+Строка.__Метаданные); + + описаниеЗаписиРегистраСведений1.Вставить("Метаданное", Мета); + КонецЕсли; + + МассивДанных.Добавить(описаниеЗаписиРегистраСведений1); + + индекс = индекс + 1; + КонецЦикла; + + Макет = ЭтотОбъект.СоздатьМакетДляГенерацииДанных(массивДанных); + + Возврат Макет; +КонецФункции + +Функция СоздатьОписательЭлементаПоСсылке(Ссылка, МассивИмен, ДанныеОбъекта = Неопределено) Экспорт + ОписательЭлемента = СоздатьОписательЭлемента(); + ОписательЭлемента[ВернутьЗначениеСоответствия("Ссылка")] = Ссылка; + ОписательЭлемента.ИмяПеременной = УникальноеИмяПеременнойПоСсылке(Ссылка, МассивИмен); + МетаСсылка = Ссылка.Метаданные(); + ОписательЭлемента.Метаданное = МетаСсылка; + ОписательЭлемента.РежимПоиска = "Перем"; + ОписательЭлемента.ВыгружатьКод = ВыгружатьКод; + МенеджерОбъекта = ПолучитьМенеджерОбъекта_ирЛкс(МетаСсылка); + Если Метаданные.Справочники.Содержит(МетаСсылка) И Ссылка.ЭтоГруппа Тогда + ОписательЭлемента.РежимСоздания = "Группа"; + ИначеЕсли Метаданные.ПланыОбмена.Содержит(МетаСсылка) И Ссылка = МенеджерОбъекта.ЭтотУзел() Тогда + ОписательЭлемента.РежимСоздания = "ЭтотУзел"; + Иначе + ОписательЭлемента.РежимСоздания = ""; + КонецЕсли; + Если ДанныеОбъекта <> Неопределено Тогда + Если ДанныеОбъекта.Свойство("Предопределенный") Тогда + ЭтоПредопределенноеЗначение = ДанныеОбъекта.Предопределенный; + Иначе + ЭтоПредопределенноеЗначение = Ложь; + КонецЕсли; + Если ЭтоПредопределенноеЗначение Тогда + Если ЭтоПлатформа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'"), "%1", СтрокаВерсии1); + Иначе + Для Инекс = Версия1.Количество() По 4 Цикл + Версия1.Добавить("0"); + КонецЦикла; + КонецЕсли; + Версия2 = РазложитьСтрокуВМассивПодстрок(Строка2, "."); + Если Версия2.Количество() > 4 Тогда + ВызватьИсключение СтрЗаменить(НСтр("ru = 'Неправильный формат параметра СтрокаВерсии2: %1'"), "%1", СтрокаВерсии2); + Иначе + Для Инекс = Версия2.Количество() По 4 Цикл + Версия2.Добавить("0"); + КонецЦикла; + КонецЕсли; + + Результат = 0; + Для Разряд = 0 По 3 Цикл + Результат = Число(Версия1[Разряд]) - Число(Версия2[Разряд]); + Если Результат <> 0 Тогда + Возврат Результат; + КонецЕсли; + КонецЦикла; + Возврат Результат; + +КонецФункции + +Функция СоздатьОписательЭлементаПоНаборуЗаписей(НаборЗаписей, МассивИмен) Экспорт + Мд = НаборЗаписей.Метаданные(); + ОписательЭлемента = СоздатьОписательЭлемента(); + ОписательЭлемента.ИмяПеременной = ПолучитьУникальноеИмяПеременной(МассивИмен, Мд.Имя); + МассивИмен.Добавить(НРег(ОписательЭлемента.ИмяПеременной)); + + ОписательЭлемента.Реквизиты = НаборЗаписей; + ОписательЭлемента[ВернутьЗначениеСоответствия("Ссылка")] = Неопределено; + ОписательЭлемента.Метаданное = Мд; + Возврат ОписательЭлемента; +КонецФункции + +Функция СоздатьОписательЭлементаПользовательИБ(ПользовательИБ, МассивИмен, ДанныеОбъекта = Неопределено) Экспорт + ОписательЭлемента = СоздатьОписательЭлемента(); + ОписательЭлемента.ПользовательИБ = ПользовательИБ; + ОписательЭлемента.ИмяПеременной = ПолучитьИдентификаторИзПредставления_Лкс(ПользовательИБ.Имя, "_"); //УникальноеИмяПеременнойПоСсылке(ПользовательИБ, МассивИмен); + ОписательЭлемента.РежимПоиска = "Перем"; + Возврат ОписательЭлемента; +КонецФункции + +Функция ЭтоОписательПользователяИБ(ОписательОбъекта, РезПользовательИБ = Неопределено) + + ЭтоПользовательИБ = ОписательОбъекта.Свойство("ПользовательИБ", РезПользовательИБ) И РезПользовательИБ <> Неопределено; + Возврат ЭтоПользовательИБ; + +КонецФункции + +Функция СоздатьОписательЭлемента() Экспорт + ОписательЭлемента = Новый Структура; + ОписательЭлемента.Вставить(ВернутьЗначениеСоответствия("Ссылка")); + ОписательЭлемента.Вставить("ИмяПеременной", ""); + ОписательЭлемента.Вставить("Значение", Неопределено); + ОписательЭлемента.Вставить("Метаданное"); + ОписательЭлемента.Вставить("ВыгружатьКод", Ложь); + ОписательЭлемента.Вставить("РежимПоиска", ""); + ОписательЭлемента.Вставить("РежимСоздания", ""); + ОписательЭлемента.Вставить("ГуидСсылки", Неопределено); + ОписательЭлемента.Вставить("Реквизиты", Неопределено); + ОписательЭлемента.Вставить("ПользовательИБ", Неопределено); + Возврат ОписательЭлемента; +КонецФункции + +Функция УникальноеИмяПеременнойПоСсылке(Ссылка, МассивИмен) + ИмяПеременной = ПолучитьИдентификаторПредставленияПоСсылке(Ссылка); + ИмяПеременной = ПолучитьУникальноеИмяПеременной(МассивИмен, ИмяПеременной); + МассивИмен.Добавить(НРег(ИмяПеременной)); + Возврат ИмяПеременной; +КонецФункции + +Функция ПолучитьУникальноеИмяПеременной(МассивИмен, Знач Имя) + Если Не ЗначениеЗаполнено(МассивИмен) Тогда + Возврат Имя; + КонецЕсли; + + ПоменялиИмя = Ложь; + Индекс = 1; + ИсходноеИмя = Имя + "_"; // для генерации нормальных имен типа Перем_1, Перем_2, Перем_3 + Пока МассивИмен.Найти(НРег(Имя)) <> Неопределено Цикл + Имя = ИсходноеИмя + XMLСтрока(Индекс); + Индекс = Индекс + 1; + ПоменялиИмя = Истина; + КонецЦикла; + Возврат Имя; +КонецФункции + +Функция ПолучитьИдентификаторПредставленияПоСсылке(Ссылка) //Экспорт + Мд = Ссылка.Метаданные(); + + менеджерОбъекта = ПолучитьМенеджерОбъекта_ирЛкс(Мд); + КорневойТипКонфигурации = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд); + + Представление = ""; + Если КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Справочник") Тогда + Представление = Ссылка.Наименование; + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Документ") Тогда + Представление = ""+Ссылка; + //ИначеЕсли КорневойТипКонфигурации = "РегистрСведений" Тогда + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("БизнесПроцесс") Тогда + Представление = ""+Ссылка; + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Задача") Тогда + Представление = ""+Ссылка; + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланОбмена") Тогда + Представление = ""+Ссылка; + Иначе + ВызватьИсключение "ПолучитьИдентификаторПредставленияПоСсылке() : Неизвестный КорневойТипКонфигурации <"+КорневойТипКонфигурации+">"; + КонецЕсли; + рез = ПолучитьИдентификаторИзПредставления_Лкс(Представление, "_"); + Возврат рез; +КонецФункции + +Процедура ДобавитьПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных) + ДобавитьШапкуПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных); + + ДобавитьРеквизитыПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных); + ДобавитьРолиПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных); +КонецПроцедуры + +Процедура ДобавитьШапкуПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных) + ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, "", ОписательОбъекта.Значение); + + НомерСтрокиМакета = Макет.ВысотаТаблицы; + + НомерКолонкиМакета_Тип = ШапкаДанных.Тип; + ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Тип, НомерСтрокиМакета, НомерКолонкиМакета_Тип); + ОбластьМакета.Текст = "ПользовательИБ"; + + НомерКолонкиМакета_ИмяПеременной = ШапкаДанных.ИмяПеременной; + ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ИмяПеременной, НомерСтрокиМакета, НомерКолонкиМакета_ИмяПеременной); + ОбластьМакета.Текст = ОписательОбъекта.ИмяПеременной; +КонецПроцедуры + +Процедура ДобавитьРеквизитыПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных) + + параметрыПользователя = Новый Структура; + параметрыПользователя.Вставить("Имя", ""); + параметрыПользователя.Вставить("ПолноеИмя", ""); + параметрыПользователя.Вставить("АутентификацияСтандартная", Истина); + параметрыПользователя.Вставить("АутентификацияОС", Ложь); + параметрыПользователя.Вставить("ПользовательОС", ""); + параметрыПользователя.Вставить("ОсновнойИнтерфейс", ""); //Метаданные.Интерфейсы.Администратор); + параметрыПользователя.Вставить("ПоказыватьВСпискеВыбора", Истина); + параметрыПользователя.Вставить("РежимЗапуска", РежимЗапускаКлиентскогоПриложения.Авто); + //параметрыПользователя.Вставить("Язык", Метаданные.Языки.Русский); + + ЗаполнитьЗначенияСвойств(параметрыПользователя, ОписательОбъекта.ПользовательИБ); + + параметрыПользователя.Вставить("Пароль", ""); + + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + Для Каждого КлючЗначение Из параметрыПользователя Цикл + ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, КлючЗначение.Ключ, КлючЗначение.Значение); + + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + КонецЦикла; +КонецПроцедуры + +Процедура ДобавитьРолиПользователяИБ_ВМакет(Макет, ОписательОбъекта, ШапкаДанных) + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ; + ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ТЧ, НомерСтрокиМакета, НомерКолонкиМакета_ТЧ); + ОбластьМакета.Текст = "Роли"; + + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + + Роли = ОписательОбъекта.ПользовательИБ.Роли; + Для Каждого Роль Из Роли Цикл + ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, "Роль", Роль.Имя); + + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + КонецЦикла; +КонецПроцедуры + +Процедура ДобавитьОбъектВМакет(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных) + Ссылка = Неопределено; + Мд = Неопределено; + ЭтоСсылочныйОбъект = ЭтоОписательОбъектаСсылки(ОписательОбъекта, Ссылка); + Если ЭтоСсылочныйОбъект Тогда + ЭтоСсылочныйОбъект = Истина; + Мд = Ссылка.Метаданные(); + ИначеЕсли ОписательОбъекта.Свойство("Метаданное", Мд) Тогда + КонецЕсли; + + ДобавитьМетаданныеВМакетДляДобавляемогоОбъекта(Макет, ОписательОбъекта, ШапкаДанных, Макет.ВысотаТаблицы+1, Мд); + + менеджерОбъекта = ПолучитьМенеджерОбъекта_ирЛкс(Мд); + КорневойТипКонфигурации = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд); + Если КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Справочник") Тогда + Если ЗначениеЗаполнено(Ссылка) и Ссылка.ЭтоГруппа Тогда + Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда + лПустойОбъект = менеджерОбъекта.СоздатьГруппу(); + Иначе + лПустойОбъект = менеджерОбъекта.CreateFolder(); + КонецЕсли; + Иначе + Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда + лПустойОбъект = менеджерОбъекта.СоздатьЭлемент(); + Иначе + лПустойОбъект = менеджерОбъекта.CreateItem(); + КонецЕсли; + КонецЕсли; + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Документ") Тогда + лПустойОбъект = менеджерОбъекта.СоздатьДокумент(); + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("БизнесПроцесс") Тогда + лПустойОбъект = менеджерОбъекта.СоздатьБизнесПроцесс(); + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Задача") Тогда + лПустойОбъект = менеджерОбъекта.СоздатьЗадачу(); + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") Тогда + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрНакопления") Тогда + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланОбмена") Тогда + лПустойОбъект = менеджерОбъекта.СоздатьУзел(); + Иначе + ВызватьИсключение "Неизвестный КорневойТипКонфигурации <"+КорневойТипКонфигурации+">"; + КонецЕсли; + + ВыгружаемыеСтандартныеРеквизиты = ВыгружаемыеСтандартныеРеквизиты(ОписательОбъекта, КорневойТипКонфигурации); + + Если ЗначениеЗаполнено(Ссылка) Тогда + объект = Ссылка.ПолучитьОбъект(); + + Если Не ВыгружатьСсылку И ЗначениеЗаполнено(ОписательОбъекта.ГуидСсылки) Тогда + Для каждого РеквизитМд Из Мд.СтандартныеРеквизиты Цикл + Если РеквизитМд.Имя = ВернутьЗначениеСоответствия("Ссылка") Тогда + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, РеквизитМд, ОписательОбъекта.ГуидСсылки, Мд, НомерСтрокиМакета, ШапкаДанных); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, Мд.СтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты); + ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, Мд.Реквизиты, Неопределено); + + ОбработатьТабличныеЧастиОбъекта(Макет, Мд.ТабличныеЧасти, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект); + ОбработатьРежимыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект); + ДобавитьДополнительныеСвойства(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект); + + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") и ТипЗнч(ОписательОбъекта.Реквизиты) = Тип("Структура") Тогда + ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.СтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты); + ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Измерения, Неопределено); + ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Ресурсы, Неопределено); + ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Реквизиты, Неопределено); + + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") + Или КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрНакопления") + Или КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда + + ЭтоРегистрБухгалтерии = КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии"); + + НаборЗаписейРегистра = ОписательОбъекта.Реквизиты; + Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл + Макет.Область(Макет.ВысотаТаблицы+1, ШапкаДанных.ТЧ).Текст = "Запись"; + ОписательОбъекта.Реквизиты = ЗаписьРегистра; + + НаборСтандартныеРеквизиты = Мд.СтандартныеРеквизиты; + Если ЭтоРегистрБухгалтерии Тогда + ДанныеСчета = Новый Структура; + Если Мд.Корреспонденция Тогда + ДанныеСчета.Вставить("СчетДт", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "СубконтоДт")); + ДанныеСчета.Вставить("СчетКт", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "СубконтоКт")); + Иначе + ДанныеСчета.Вставить("Счет", Новый Структура("НомераВидовСубконто, НаименованиеРеквизитаСубконто", Новый Массив, "Субконто")); + КонецЕсли; + + НаборСтандартныеРеквизиты = Новый Массив; + для каждого МдРеквизит из Мд.СтандартныеРеквизиты Цикл + ИмяРеквизита = МдРеквизит.Имя; + Если Лев(ИмяРеквизита, СтрДлина("ВидСубконто")) = "ВидСубконто" Тогда + Продолжить; + КонецЕсли; + Если Лев(ИмяРеквизита, СтрДлина("Субконто")) = "Субконто" Тогда + Продолжить; + КонецЕсли; + НаборСтандартныеРеквизиты.Добавить(МдРеквизит); + КонецЦикла; + КонецЕсли; + + ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, НаборСтандартныеРеквизиты, ВыгружаемыеСтандартныеРеквизиты); + ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Измерения, Неопределено, КорневойТипКонфигурации); + ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Ресурсы, Неопределено, КорневойТипКонфигурации); + ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, Мд.Реквизиты, Неопределено); + + Если ЭтоРегистрБухгалтерии Тогда + ВыгружаемыеРеквизиты = Новый Массив; + МассивИмитаторРеквизитовМд = Новый Массив; + Для каждого КлючЗначение Из ДанныеСчета Цикл + ИмяРеквизита = КлючЗначение.Ключ; + ВыгружаемыеРеквизиты.Добавить(ИмяРеквизита); + Структура = Новый Структура("Имя,Субконто", ИмяРеквизита, КлючЗначение.Значение); + МассивИмитаторРеквизитовМд.Добавить(Структура); + КонецЦикла; + + ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Мд, Неопределено, МассивИмитаторРеквизитовМд, ВыгружаемыеРеквизиты, КорневойТипКонфигурации); + КонецЕсли; + КонецЦикла; + + Иначе + ВызватьИсключение "Неизвестный вариант работы - метод <ДобавитьОбъектВМакет>"; + КонецЕсли; +КонецПроцедуры + +Процедура ДобавитьДополнительныеСвойства(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект) + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + + ДопСвойства = Новый Структура(); + Для Каждого СтрокаТЧ Из ЭтотОбъект.ДополнительныеСвойства Цикл + ДопСвойства.Вставить(СтрокаТЧ.Имя, СтрокаТЧ.Значение); + КонецЦикла; + Если ДопСвойства.Количество() > 0 Тогда + НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ; + ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ТЧ, НомерСтрокиМакета, НомерКолонкиМакета_ТЧ); + ОбластьМакета.Текст = "ДополнительныеСвойства"; + КонецЕсли; + + ДобавитьДопСвойстваВМакет(Макет, ШапкаДанных, "Режим", ДопСвойства); +КонецПроцедуры + +Процедура ДобавитьМетаданныеВМакетДляДобавляемогоОбъекта(Макет, ОписательОбъекта, ШапкаДанных, НомерСтрокиМакета, Мд) + НомерКолонкиМакета_Тип = ШапкаДанных.Тип; + ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Тип, НомерСтрокиМакета, НомерКолонкиМакета_Тип); + ОбластьМакета.Текст = ПолучитьКорневойТипКонфигурации_ирЛкс(Мд); + + НомерКолонкиМакета_Вид = ШапкаДанных.Вид; + ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Вид, НомерСтрокиМакета, НомерКолонкиМакета_Вид); + ОбластьМакета.Текст = Мд.Имя; + + НомерКолонкиМакета_ИмяПеременной = ШапкаДанных.ИмяПеременной; + ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ИмяПеременной, НомерСтрокиМакета, НомерКолонкиМакета_ИмяПеременной); + + ИмяПеременной = ИмяПеременнойИзОписателяОбъекта(Мд, ОписательОбъекта); + ОбластьМакета.Текст = ИмяПеременной; + + НомерКолонкиМакета_Режим = ШапкаДанных.Режим; + ОбластьМакета_Режим = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Режим, НомерСтрокиМакета, НомерКолонкиМакета_Режим); + ОбластьМакета_Режим.Текст = ОписательОбъекта.РежимСоздания; + + НомерКолонкиМакета_Значение = ШапкаДанных.Значение; + ОбластьМакета_Значение = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Значение, НомерСтрокиМакета, НомерКолонкиМакета_Значение); + ОбластьМакета_Значение.Текст = ОписательОбъекта.Значение; +КонецПроцедуры + +Функция ВыгружаемыеСтандартныеРеквизиты(ОписательОбъекта, КорневойТипКонфигурации) + ВыгружаемыеСтандартныеРеквизиты = Новый Массив; + Если КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Справочник") Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Наименование")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("ПометкаУдаления")); + ВыгружатьКод = Ложь; + Если ОписательОбъекта.Свойство("ВыгружатьКод", ВыгружатьКод) и ВыгружатьКод Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Код")); + КонецЕсли; + Если ВыгружатьСсылку Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Ссылка")); + КонецЕсли; + + МетаданныеСправочника = ОписательОбъекта[ВернутьЗначениеСоответствия("Ссылка")].Метаданные(); + Если МетаданныеСправочника.Владельцы.Количество() > 0 Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Владелец")); + КонецЕсли; + Если МетаданныеСправочника.Иерархический Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Родитель")); + КонецЕсли; + + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Документ") Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Дата")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("ПометкаУдаления")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Проведен")); + ВыгружатьКод = Ложь; + Если ОписательОбъекта.Свойство("ВыгружатьКод", ВыгружатьКод) и ВыгружатьКод Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Номер")); + КонецЕсли; + Если ВыгружатьСсылку Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Ссылка")); + КонецЕсли; + + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("БизнесПроцесс") Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Дата")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("ПометкаУдаления")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Стартован")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Завершен")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("ВедущаяЗадача")); + ВыгружатьКод = Ложь; + Если ОписательОбъекта.Свойство("ВыгружатьКод", ВыгружатьКод) и ВыгружатьКод Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Номер")); + КонецЕсли; + Если ВыгружатьСсылку Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Ссылка")); + КонецЕсли; + + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("Задача") Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Дата")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("ПометкаУдаления")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("БизнесПроцесс")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("ТочкаМаршрута")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Наименование")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Выполнена")); + ВыгружатьКод = Ложь; + Если ОписательОбъекта.Свойство("ВыгружатьКод", ВыгружатьКод) и ВыгружатьКод Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Номер")); + КонецЕсли; + Если ВыгружатьСсылку Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Ссылка")); + КонецЕсли; + + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрСведений") Тогда + Если Не ОписательОбъекта.Метаданное.ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Период")); + КонецЕсли; + Если ОписательОбъекта.Метаданное.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Регистратор")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Активность")); + КонецЕсли; + + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрНакопления") или КорневойТипКонфигурации = ВернутьЗначениеСоответствия("РегистрБухгалтерии") Тогда + Для Каждого ОписаниеСтандартногоРеквизита Из ОписательОбъекта.Метаданное.СтандартныеРеквизиты Цикл + Если ОписаниеСтандартногоРеквизита.Имя = ВернутьЗначениеСоответствия("НомерСтроки") Тогда + Продолжить; + КонецЕсли; + ВыгружаемыеСтандартныеРеквизиты.Добавить(ОписаниеСтандартногоРеквизита.Имя); + КонецЦикла; + + ИначеЕсли КорневойТипКонфигурации = ВернутьЗначениеСоответствия("ПланОбмена") Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Наименование")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("ПометкаУдаления")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("НомерОтправленного")); + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("НомерПринятого")); + ВыгружатьКод = Ложь; + Если ОписательОбъекта.Свойство("ВыгружатьКод", ВыгружатьКод) и ВыгружатьКод Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Код")); + КонецЕсли; + Если ВыгружатьСсылку Тогда + ВыгружаемыеСтандартныеРеквизиты.Добавить(ВернутьЗначениеСоответствия("Ссылка")); + КонецЕсли; + + Иначе + ВызватьИсключение "Неизвестный КорневойТипКонфигурации <"+КорневойТипКонфигурации+"> КорневойТипКонфигурации()"; + КонецЕсли; + + Возврат ВыгружаемыеСтандартныеРеквизиты; +КонецФункции + +Процедура ОбработатьРеквизитыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, лПустойОбъект, МдРеквизиты, ВыгружаемыеРеквизиты, КорневойТипКонфигурации = "") + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + + ЭтоСсылочныйОбъект = ЭтоОписательОбъектаСсылки(ОписательОбъекта); + Если ЭтоСсылочныйОбъект Тогда + Мд = Объект.Метаданные(); + Иначе + Мд = Объект; + КонецЕсли; + + Для каждого РеквизитМд Из МдРеквизиты Цикл + имяРеквизита = РеквизитМд.Имя; + Если ВыгружаемыеРеквизиты <> Неопределено и ВыгружаемыеРеквизиты.Найти(имяРеквизита) = Неопределено Тогда + Продолжить; + КонецЕсли; + + БылДобавленСчетДляЗаписиРегистраБухгалтерии = Ложь; + + Если ЭтоСсылочныйОбъект Тогда + ЗначениеРеквизита = объект[имяРеквизита]; + + этоЗначениеБудетСозданоПоУмолчанию = лПустойОбъект[имяРеквизита] = ЗначениеРеквизита; + Если этоЗначениеБудетСозданоПоУмолчанию Тогда + Продолжить; + КонецЕсли; + Иначе + Если КорневойТипКонфигурации = "РегистрБухгалтерии" Тогда + Если Лев(ИмяРеквизита, СтрДлина("Счет")) = "Счет" Тогда + БылДобавленСчетДляЗаписиРегистраБухгалтерии = Истина; + ИмяРеквизитаСчет = имяРеквизита; + ИначеЕсли Не РеквизитМд.Балансовый Тогда + Суффиксы = Новый Массив; + Суффиксы.Добавить("Дт"); + Суффиксы.Добавить("Кт"); + Для Каждого Суффикс Из Суффиксы Цикл + ЗначениеРеквизита = ОписательОбъекта.Реквизиты[имяРеквизита + Суффикс]; + ИмитаторРеквизитаМд = Новый Структура("Имя, Тип", имяРеквизита + Суффикс, РеквизитМд.Тип); + ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, ИмитаторРеквизитаМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных); + Если ДобавилиРеквизит Тогда + НомерСтрокиМакета = НомерСтрокиМакета + 1; + КонецЕсли; + КонецЦикла; + Продолжить; + КонецЕсли; + КонецЕсли; + ЗначениеРеквизита = ОписательОбъекта.Реквизиты[имяРеквизита]; + КонецЕсли; + + ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных); + + Если ДобавилиРеквизит Тогда + НомерСтрокиМакета = НомерСтрокиМакета + 1; + КонецЕсли; + + Если БылДобавленСчетДляЗаписиРегистраБухгалтерии Тогда + Для Каждого ОписаниеВидаСубконто Из ОписательОбъекта.Реквизиты[ИмяРеквизитаСчет].ВидыСубконто Цикл + ВидСубконто = ОписаниеВидаСубконто.ВидСубконто; + НаименованиеРеквизитаСубконто = РеквизитМд.Субконто.НаименованиеРеквизитаСубконто; + ЗначениеРеквизита = ОписательОбъекта.Реквизиты[НаименованиеРеквизитаСубконто][ВидСубконто]; + Если ЗначениеРеквизита = Неопределено Тогда + Продолжить; + КонецЕсли; + + ИмитаторРеквизитаМд = Новый Структура("Имя, Тип", НаименованиеРеквизитаСубконто + ОписаниеВидаСубконто.НомерСтроки, ВидСубконто.ТипЗначения); + + ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, ИмитаторРеквизитаМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных); + + Если ДобавилиРеквизит Тогда + НомерСтрокиМакета = НомерСтрокиМакета + 1; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +Процедура ОбработатьТабличныеЧастиОбъекта(Макет, МдТабличныеЧасти, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект) + Для каждого МдТч Из МдТабличныеЧасти Цикл + МдРеквизиты = МдТч.Реквизиты; + ИмяТЧ = МдТч.Имя; + + НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ; + + Для каждого строкаТчОбъекта Из объект[ИмяТЧ] Цикл + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ТЧ, НомерСтрокиМакета, НомерКолонкиМакета_ТЧ); + ОбластьМакета.Текст = ИмяТЧ; + + ОбработатьРеквизитыТабличнойЧастиОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, строкаТчОбъекта, МдРеквизиты); + КонецЦикла; + КонецЦикла; +КонецПроцедуры + +Процедура ОбработатьРежимыОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект) + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + Режимы = новый Массив; + Если ТолькоСоздание Тогда + Режимы.Добавить("ТолькоСоздание"); + КонецЕсли; + Если ОбменДанными Тогда + Режимы.Добавить("ОбменДанными"); + КонецЕсли; + Мета = Объект.Метаданные(); + Если Метаданные.Справочники.Содержит(Мета) И Объект.ЭтоГруппа Тогда + Режимы.Добавить("Группа"); + КонецЕсли; + + Если Режимы.Количество()>0 Тогда + НомерКолонкиМакета_ТЧ = ШапкаДанных.ТЧ; + ОбластьМакета = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ТЧ, НомерСтрокиМакета, НомерКолонкиМакета_ТЧ); + ОбластьМакета.Текст = "xddMods"; + + Для каждого Режим Из Режимы Цикл + ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, "Режим", Режим); + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +Процедура ОбработатьРеквизитыТабличнойЧастиОбъекта(Макет, ОписательОбъекта, ШапкаДанных, МассивДанных, Объект, строкаТчОбъекта, МдРеквизиты) + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + + Мд = Объект.Метаданные(); + + Для каждого РеквизитМд Из МдРеквизиты Цикл + имяРеквизита = РеквизитМд.Имя; + + ЗначениеРеквизита = строкаТчОбъекта[имяРеквизита]; + + ДобавилиРеквизит = ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных); + + Если ДобавилиРеквизит Тогда + НомерСтрокиМакета = НомерСтрокиМакета + 1; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +Функция ОбработатьРеквизитОбъекта(Макет, МассивДанных, Объект, РеквизитМд, ЗначениеРеквизита, Мд, НомерСтрокиМакета, ШапкаДанных) + имяРеквизита = РеквизитМд.Имя; + ЕстьТипы = Ложь; + Попытка + Тип = РеквизитМд.Тип.Типы(); + ЕстьТипы = Истина; + Исключение + КонецПопытки; + + Если ЕстьТипы И Не ЗначениеЗаполнено(ЗначениеРеквизита) И РеквизитМд.Тип.Типы().Количество() = 1 Тогда + Возврат Ложь; + КонецЕсли; + ТипРеквизита = ТипЗнч(ЗначениеРеквизита); + Если ТипРеквизита = ТипЗнч(Неопределено) Тогда + Возврат Ложь; + КонецЕсли; + + ПредставлениеЗначенияРеквизита = ""; + РежимПоиска = ""; + ДополнительныйТипЗначения = ""; + Попытка + ПолучитьПредставлениеИРежимПоискаПоЗначениюРеквизита(Объект, ЗначениеРеквизита, ТипРеквизита, МассивДанных, ПредставлениеЗначенияРеквизита, РежимПоиска, ДополнительныйТипЗначения); + Исключение + описаниеОшибки = ОписаниеОшибки(); + ВызватьИсключение описаниеОшибки + " Не умею обрабатывать реквизит <"+имяРеквизита+"> у объекта <"+Мд.ПолноеИмя()+">"; + КонецПопытки; + + Если ЕстьТипы И РеквизитМд.Тип.Типы().Количество() = 1 Тогда + ДополнительныйТипЗначения = ""; + КонецЕсли; + + ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита); + + НомерКолонкиМакета_Режим = ШапкаДанных.Режим; + ОбластьМакета_Режим = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Режим, НомерСтрокиМакета, НомерКолонкиМакета_Режим); + Если РежимПоиска <> "" Тогда + ОбластьМакета_Режим.Текст = РежимПоиска; + КонецЕсли; + + НомерКолонкиМакета_ДополнительныйТипЗначения = ШапкаДанных.ДополнительныйТипЗначения; + ОбластьМакета_ДополнительныйТипЗначения = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_ДополнительныйТипЗначения, НомерСтрокиМакета, НомерКолонкиМакета_ДополнительныйТипЗначения); + ОбластьМакета_ДополнительныйТипЗначения.Текст = ДополнительныйТипЗначения; + + Возврат Истина; +КонецФункции + +Процедура ДобавитьПростойРеквизитВМакет(Макет, ШапкаДанных, ИмяРеквизита, ПредставлениеЗначенияРеквизита) + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + + НомерКолонкиМакета_Реквизит = ШапкаДанных.Реквизит; + НомерКолонкиМакета_Значение = ШапкаДанных.Значение; + + ОбластьМакета_Реквизит = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Реквизит, НомерСтрокиМакета, НомерКолонкиМакета_Реквизит); + ОбластьМакета_Реквизит.Текст = ИмяРеквизита; + + ОбластьМакета_Значение = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Значение, НомерСтрокиМакета, НомерКолонкиМакета_Значение); + ОбластьМакета_Значение.Текст = ПредставлениеЗначенияРеквизита; + +КонецПроцедуры + +Процедура ДобавитьДопСвойстваВМакет(Макет, ШапкаДанных, ИмяРеквизита, СтруктураДопСвойств) + Для Каждого ДопСвойство Из СтруктураДопСвойств Цикл + НомерСтрокиМакета = Макет.ВысотаТаблицы+1; + + НомерКолонкиМакета_Реквизит = ШапкаДанных.Реквизит; + НомерКолонкиМакета_Значение = ШапкаДанных.Значение; + + ОбластьМакета_Реквизит = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Реквизит, НомерСтрокиМакета, НомерКолонкиМакета_Реквизит); + ОбластьМакета_Реквизит.Текст = ДопСвойство.Ключ; + + ОбластьМакета_Значение = Макет.Область(НомерСтрокиМакета, НомерКолонкиМакета_Значение, НомерСтрокиМакета, НомерКолонкиМакета_Значение); + ОбластьМакета_Значение.Текст = ДопСвойство.Значение; + КонецЦикла; +КонецПроцедуры + +Процедура ПолучитьПредставлениеИРежимПоискаПоЗначениюРеквизита(Объект, ЗначениеРеквизита, ТипРеквизита, МассивДанных, резПредставлениеЗначенияРеквизита, резРежимПоиска, резДополнительныйТипЗначения) + резДополнительныйТипЗначения = ""; + Если ТипРеквизита = Тип("Число") Тогда + ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "ЧГ="); + резДополнительныйТипЗначения = "Число"; + ИначеЕсли ТипРеквизита = Тип("Строка") Тогда + ПредставлениеЗначенияРеквизита = ЗначениеРеквизита; + резДополнительныйТипЗначения = "Строка"; + ИначеЕсли ТипРеквизита = Тип("Дата") Тогда + ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "ДФ=yyyyMMddЧЧммсс"); // важно ЧЧ + резДополнительныйТипЗначения = "Дата"; + ИначеЕсли ТипРеквизита = Тип("Булево") Тогда + ПредставлениеЗначенияРеквизита = Формат(ЗначениеРеквизита, "БЛ=Ложь; БИ=Истина"); + резДополнительныйТипЗначения = "Булево"; + + ИначеЕсли ЛиСсылкаНаОбъектБД_ирЛкс(ЗначениеРеквизита) Тогда + ОписательЗначенияРеквизита = НайтиОписательОбъектаПоСсылке(МассивДанных, ЗначениеРеквизита); //МассивДанных.Найти(ЗначениеРеквизита); + Если ОписательЗначенияРеквизита <> Неопределено Тогда + ЕстьРеквизитСсылка = Истина; + Если ТипЗнч(Объект) = Тип("ОбъектМетаданных") Тогда + ЕстьРеквизитСсылка = Ложь; + Для каждого РеквизитМд Из Объект.СтандартныеРеквизиты Цикл + Если РеквизитМд.Имя = ВернутьЗначениеСоответствия("Ссылка") Тогда + ЕстьРеквизитСсылка = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ЕстьРеквизитСсылка И ЗначениеРеквизита = Объект.Ссылка Тогда + ПредставлениеЗначенияРеквизита = Строка(ЗначениеРеквизита.УникальныйИдентификатор()); + РежимПоиска = ""; + Иначе + ИмяПеременнойИзОписателяОбъекта = ИмяПеременнойИзОписателяОбъекта(ЗначениеРеквизита.Метаданные(), ОписательЗначенияРеквизита); + ИскатьПоГуид = Ложь; + Если СвязьПоГуид Тогда + Для каждого Элемент Из МассивДанных Цикл + Если Элемент.ИмяПеременной = ИмяПеременнойИзОписателяОбъекта Тогда + ИскатьПоГуид = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ИскатьПоГуид Тогда + ПредставлениеЗначенияРеквизита = Строка(ЗначениеРеквизита.УникальныйИдентификатор()); + РежимПоиска = "Гуид"; + Иначе + ПредставлениеЗначенияРеквизита = ИмяПеременнойИзОписателяОбъекта; + РежимПоиска = "Перем"; + КонецЕсли; + КонецЕсли; + Иначе + ПредставлениеЗначенияРеквизита = ЗначениеРеквизита; + Если БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().СодержитТип(ТипРеквизита) Тогда + ПредставлениеЗначенияРеквизита = ЗначениеРеквизита.Имя; + РежимПоиска = "Предопределенный"; + Иначе + Если СвязьПоГуид Тогда + ПредставлениеЗначенияРеквизита = Строка(ЗначениеРеквизита.УникальныйИдентификатор()); + РежимПоиска = "Гуид"; + Иначе + МетаданныеСсылки = ЗначениеРеквизита.Метаданные(); + Если Метаданные.Справочники.Содержит(МетаданныеСсылки) Тогда + ОсновноеПредставлениеСсылки = МетаданныеСсылки.ОсновноеПредставление; + Если ЗначениеРеквизита.Предопределенный Тогда + РежимПоиска = "Предопределенный"; + ПредставлениеЗначенияРеквизита = Справочники[МетаданныеСсылки.Имя].ПолучитьИмяПредопределенного(ЗначениеРеквизита); + ИначеЕсли ОсновноеПредставлениеСсылки = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеСправочника.ВВидеНаименования Тогда + РежимПоиска = "Наименование"; + Иначе + РежимПоиска = "Код"; + КонецЕсли; + резДополнительныйТипЗначения = "СправочникСсылка."+МетаданныеСсылки.Имя; + ИначеЕсли Метаданные.Документы.Содержит(МетаданныеСсылки) Тогда + ПредставлениеЗначенияРеквизита = ЗначениеРеквизита.Номер; + РежимПоиска = "Номер"; + резДополнительныйТипЗначения = "ДокументСсылка."+МетаданныеСсылки.Имя; + ИначеЕсли Метаданные.ПланыСчетов.Содержит(МетаданныеСсылки) Тогда + ОсновноеПредставлениеСсылки = МетаданныеСсылки.ОсновноеПредставление; + Если ЗначениеРеквизита.Предопределенный Тогда + РежимПоиска = "Предопределенный"; + ПредставлениеЗначенияРеквизита = ПланыСчетов[МетаданныеСсылки.Имя].ПолучитьИмяПредопределенного(ЗначениеРеквизита); + ИначеЕсли ОсновноеПредставлениеСсылки = Метаданные.СвойстваОбъектов.ОсновноеПредставлениеСчета.ВВидеНаименования Тогда + РежимПоиска = "Наименование"; + Иначе + РежимПоиска = "Код"; + КонецЕсли; + резДополнительныйТипЗначения = "ПланСчетовСсылка."+МетаданныеСсылки.Имя; + Иначе + // пока так. надо добавить остальные типы + РежимПоиска = "Наименование"; + КонецЕсли; + Если ЗначениеРеквизита.Пустая() Тогда + РежимПоиска = ""; + КонецЕсли; + КонецЕсли; // СвязьПоГуид + + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ЛиСсылкаНаПеречисление_ирЛкс(ЗначениеРеквизита) Тогда + ПредставлениеЗначенияРеквизита = ""; + ИмяПеречисления = ЗначениеРеквизита.Метаданные().Имя; + Если ЗначениеЗаполнено(ЗначениеРеквизита) Тогда + ИндексЗначения = Перечисления[ИмяПеречисления].Индекс(ЗначениеРеквизита); + ИмяЗначения = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначения].Имя; + КонецЕсли; + ПредставлениеЗначенияРеквизита = ИмяЗначения; + РежимПоиска = "Предопределенный"; + резДополнительныйТипЗначения = "ПеречислениеСсылка."+ИмяПеречисления; + + ИначеЕсли ТипРеквизита = Тип("УникальныйИдентификатор") Тогда + ПредставлениеЗначенияРеквизита = ""+ЗначениеРеквизита; + РежимПоиска = "Гуид"; + ИначеЕсли ТипРеквизита = Тип("ХранилищеЗначения") Тогда + ПредставлениеЗначенияРеквизита = ""+ЗначениеРеквизита; + + Иначе + УжеВычислилиЗначение = Ложь; + ПредставлениеЗначенияРеквизита = Неопределено; + СтрокаДляВыполнения = "ПредставлениеЗначенияРеквизита = "+ТипРеквизита+"["""+ЗначениеРеквизита+"""];"; + Попытка + Выполнить(СтрокаДляВыполнения); + УжеВычислилиЗначение = Истина; + РежимПоиска = "Предопределенный"; + Исключение + КонецПопытки; + Если Не УжеВычислилиЗначение Тогда + ВызватьИсключение "Генератор макета из реальных данных: Не умею обрабатывать такой тип <"+ТипРеквизита+">"; + КонецЕсли; + КонецЕсли; + резПредставлениеЗначенияРеквизита = ПредставлениеЗначенияРеквизита; + резРежимПоиска = РежимПоиска; +КонецПроцедуры + +Функция НайтиОписательОбъектаПоСсылке(МассивДанных, Ссылка) + Для каждого ОписательОбъекта Из МассивДанных Цикл + СсылкаВрем = Неопределено; + Если ЭтоОписательОбъектаСсылки(ОписательОбъекта, СсылкаВрем) и СсылкаВрем = Ссылка Тогда + Возврат ОписательОбъекта; + КонецЕсли; + КонецЦикла; + Возврат Неопределено; +КонецФункции + +Функция ЭтоОписательОбъектаСсылки(ОписательОбъекта, РезСсылка = Неопределено) + + ЭтоСсылочныйОбъект = ОписательОбъекта.Свойство(ВернутьЗначениеСоответствия("Ссылка"), РезСсылка) И РезСсылка <> Неопределено; + Возврат ЭтоСсылочныйОбъект; + +КонецФункции + +Функция ИмяПеременнойИзОписателяОбъекта(Мд, ОписательОбъекта) + ИмяПеременной = ""; + Если НЕ ОписательОбъекта.Свойство("ИмяПеременной", ИмяПеременной) или ПустаяСтрока(ИмяПеременной) Тогда + ИмяПеременной = Мд.Имя; + КонецЕсли; + Возврат ИмяПеременной; +КонецФункции + +Функция ШапкаДанныхВМакете() + рез = Новый Структура(); + рез.Вставить("Тип", 1); + рез.Вставить("Вид", 2); + рез.Вставить("ИмяПеременной", 3); + рез.Вставить("ТЧ", 4); + рез.Вставить("Реквизит", 5); + рез.Вставить("Значение", 6); + рез.Вставить("Режим", 7); + рез.Вставить("ДополнительныйТипЗначения", 8); + Возврат рез; +КонецФункции + +// { БЛОК МЕТОДОВ ИЗ ИР (Инструменты Разработчика, автор TormozIt ) +// +// Определяет корневой тип конфигурации по описанию типов, типу, метаданным, ссылке или объекту. +// Для описания типов берется первый тип массива типов. +// +// Параметры: +// пОбъект – Произвольный – для чего получаем метаданные; +// *пЛиТолькоДляКорневого - Булево, *Ложь - возвращать только для объекта корневого типа. +// +// Возвращаемое значение: +// - Строка – имя типа корневого объекта метаданных; +// Неопределено - не удалось получить имя типа. +// +Функция ПолучитьКорневойТипКонфигурации_ирЛкс(пОбъект, пЛиТолькоДляКорневого = Ложь) Экспорт + + Если ТипЗнч(пОбъект) = Тип("ОбъектМетаданных") Тогда + МетаданныеТипа = пОбъект; + Иначе + МетаданныеТипа = ПолучитьМетаданные_ирЛкс(пОбъект); + КонецЕсли; + Результат = Неопределено; + Если МетаданныеТипа <> Неопределено Тогда + ПолноеИмя = МетаданныеТипа.ПолноеИмя(); + Если пЛиТолькоДляКорневого Тогда + МассивФрагментов = ПолучитьМассивИзСтрокиСРазделителем_ирЛкс(ПолноеИмя); + Если МассивФрагментов.Количество() = 2 Тогда + Результат = МассивФрагментов[0]; + КонецЕсли; + Иначе + Результат = ПолучитьПервыйФрагмент_ирЛкс(ПолноеИмя); + КонецЕсли; + КонецЕсли; + Если Результат = "ТабличнаяЧасть" Тогда + // Баг платформы. У внешних метаданных полное имя не включает сам внешний метаобъект + Результат = Неопределено; + КонецЕсли; + Возврат Результат; + +КонецФункции // ЛксПолучитьКорневойТипКонфигурации() + +// Проверяет, является ли значение ссылкой на объект БД. На базе ЛксЛиСсылкаНаОбъектБД +// +// Параметры: +// пЗначение – ОбъектМетаданных, Произвольный – проверяемое значение. +// +// Возвращаемое значение: +// Истина – значение является ссылкой на объект БД; +// Ложь – значение не является ссылкой на объект БД. +// +Функция ЛиСсылкаНаОбъектБД_ирЛкс(пЗначение) Экспорт + + Возврат ЛиКорневойТипОбъектаБД_ирЛкс(ПолучитьКорневойТипКонфигурации_ирЛкс(пЗначение, Истина)); + +КонецФункции // ЛксЛиСсылкаНаОбъектБД + +// Проверяет, является ли значение ссылкой на значение перечисления. +// +// Параметры: +// пЗначение – Произвольный – проверяемое значение. +// +// Возвращаемое значение: +// Истина – значение является ссылкой на объект БД; +// Ложь – значение не является ссылкой на объект БД. +// +Функция ЛиСсылкаНаПеречисление_ирЛкс(пЗначение) Экспорт + + Возврат (ПолучитьКорневойТипКонфигурации_ирЛкс(пЗначение) = ВернутьЗначениеСоответствия("Перечисление")); + +КонецФункции // ЛксЛиСсылкаНаПеречисление() + +// Проверяет, является ли строка именем корневого типа объекта БД. +// +// Параметры: +// пИмяКорневогоТипа - Строка, Неопределено - имя корневого типа. +// +// Возвращаемое значение: +// Истина – тип является корневым типом объекта БД; +// Ложь – иначе. +// +Функция ЛиКорневойТипОбъектаБД_ирЛкс(КорневойТип) Экспорт + + Если Ложь + ИЛИ КорневойТип = ВернутьЗначениеСоответствия("БизнесПроцесс") + ИЛИ КорневойТип = ВернутьЗначениеСоответствия("Задача") + ИЛИ КорневойТип = ВернутьЗначениеСоответствия("Документ") + ИЛИ КорневойТип = ВернутьЗначениеСоответствия("ПланВидовРасчета") + ИЛИ КорневойТип = ВернутьЗначениеСоответствия("ПланВидовХарактеристик") + ИЛИ КорневойТип = ВернутьЗначениеСоответствия("ПланОбмена") + ИЛИ КорневойТип = ВернутьЗначениеСоответствия("ПланСчетов") + ИЛИ КорневойТип = ВернутьЗначениеСоответствия("Справочник") + + Тогда + Возврат Истина; + КонецЕсли; + Возврат Ложь; + +КонецФункции // ЛксЛиКорневойТипОбъектаБД() + +// Получает менеджер по описанию типов, типу, метаданным, ссылке или объекту. На базе метода ЛксПолучитьМенеджер +// Для описания типов берется первый тип массива типов. +// +// Параметры: +// пОбъект – Произвольный – для чего получаем менеджер. +// +// Возвращаемое значение: +// – МенеджерОбъекта - для ссылки или ссылочного типа; +// Неопределено - не удалось получить. +// +Функция ПолучитьМенеджерОбъекта_ирЛкс(пОбъект) Экспорт + + Если ТипЗнч(пОбъект) = Тип("ОбъектМетаданных") Тогда + МетаданныеОбъекта = пОбъект; + Иначе + МетаданныеОбъекта = ПолучитьМетаданные_ирЛкс(пОбъект); + КонецЕсли; + Если МетаданныеОбъекта = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + МассивФрагментов = ПолучитьМассивИзСтрокиСРазделителем_ирЛкс(МетаданныеОбъекта.ПолноеИмя()); + КорневойТип = МассивФрагментов[0]; + Менеджер = Неопределено; + Если Истина + И МассивФрагментов.Количество() = 4 + И КорневойТип = "ВнешнийИсточникДанных" + Тогда + ИмяТипаМенеджера = МассивФрагментов[0] + "ТаблицаМенеджер." + МассивФрагментов[1] + "." + МассивФрагментов[3]; + Иначе + //КорневойТип = ЛксПолучитьКорневойТипКонфигурации(МетаданныеОбъекта, Истина); // Изменил 02.03.2012 + Если КорневойТип <> Неопределено Тогда + Если НЕ ВариантВстроенногоЯзыкаАнглийский Тогда + ИмяМенеджер = "Менеджер."; + Иначе + ИмяМенеджер = "Manager."; + КонецЕсли; + ИмяТипаМенеджера = КорневойТип + ИмяМенеджер + МетаданныеОбъекта.Имя; + Иначе + ИмяТипаМенеджера = "Неопределено"; + КонецЕсли; + КонецЕсли; + Попытка + Менеджер = Новый (ИмяТипаМенеджера); + Исключение + КонецПопытки; + Возврат Менеджер; + +КонецФункции // ЛксПолучитьМенеджер() + +// Получает метаданные по полному имени, описанию типов, типу, ссылке или объекту. На базе ЛксПолучитьМетаданные +// Для описания типов берется первый тип массива типов. +// +// Параметры: +// пОбъект – Произвольный – для чего получаем метаданные. +// +// Возвращаемое значение: +// – Метаданные - полученные; +// Неопределено - не удалось получить метаданные. +// +Функция ПолучитьМетаданные_ирЛкс(пОбъект) Экспорт + + Если ТипЗнч(пОбъект) = Тип("Строка") Тогда + Если ПустаяСтрока(пОбъект) Тогда + Результат = Неопределено; + Иначе + Фрагменты = ПолучитьМассивИзСтрокиСРазделителем_ирЛкс(пОбъект); + Если Фрагменты.Количество() = 3 Тогда + // ВидыСубконто, Изменения + ПолноеИмяМД = Фрагменты[0] + "." + Фрагменты[1]; + Иначе + ПолноеИмяМД = пОбъект; + КонецЕсли; + Результат = Метаданные.НайтиПоПолномуИмени(ПолноеИмяМД); + КонецЕсли; + Возврат Результат; + КонецЕсли; + ТипОбъекта = ПолучитьТипОбъекта_ирЛкс(пОбъект); + Результат = Метаданные.НайтиПоТипу(ТипОбъекта); + Возврат Результат; + +КонецФункции // ЛксПолучитьМетаданные() + +// Получает тип из описания типов, типа или значения. На базе ЛксПолучитьТипОбъекта +// +// Параметры: +// пОбъект – Тип, ОписаниеТипов, Произвольный – проверяемое значение. +// +// Возвращаемое значение: +// Тип - найденный тип. +// +Функция ПолучитьТипОбъекта_ирЛкс(пОбъект) + + ТипОбъекта = Тип("Неопределено"); + ТипПараметра = ТипЗнч(пОбъект); + Если ТипПараметра = Тип("ОписаниеТипов") Тогда + Если пОбъект.Типы().Количество() > 0 Тогда + ТипОбъекта = пОбъект.Типы()[0]; + КонецЕсли; + ИначеЕсли ТипПараметра <> Тип("Тип") Тогда + ТипОбъекта = ТипПараметра; + Иначе + ТипОбъекта = пОбъект; + КонецЕсли; + + Возврат ТипОбъекта; + +КонецФункции // ЛксПолучитьТипОбъекта() + +// Функция разбивает строку разделителем. На базе ЛксПолучитьМассивИзСтрокиСРазделителем +// +// Параметры: +// пСтрока - Строка - которую разбиваем; +// *пРазделитель - Строка, "." - символ-разделитель; +// *ОбрезатьНепечатныеСимволы - Булево, *Ложь - делать СокрЛП. +// *ОставлятьПустуюСтроку - Булево, *Истина - если передана пустая строка, то добавлять ее в массив. +// +// Возвращаемое значение: +// Массив - фрагментов. +// +Функция ПолучитьМассивИзСтрокиСРазделителем_ирЛкс(Знач Стр, Разделитель = ".", ОбрезатьНепечатныеСимволы = Ложь, ОставлятьПустуюСтроку = Истина) Экспорт + + МассивСтрок = Новый Массив; + Если Истина + И Не ОставлятьПустуюСтроку + И ПустаяСтрока(Стр) + Тогда + Возврат МассивСтрок; + КонецЕсли; + + //лСтрока = СтрЗаменить(Стр, Разделитель, Символы.ПС); + //// Баг платформы. СтрЧислоСтрок не учитывает терминальный перевод строки. + //ЧислоСтрок = СтрЧислоСтрок(лСтрока + " "); + //Для Счетчик = 1 По ЧислоСтрок Цикл + // Фрагмент = СтрПолучитьСтроку(лСтрока, Счетчик); + // Если ОбрезатьНепечатныеСимволы Тогда + // Фрагмент = СокрЛП(Фрагмент); + // КонецЕсли; + // МассивСтрок.Добавить(Фрагмент); + //КонецЦикла; + + Если Разделитель = " " Тогда + Стр = СокрЛП(Стр); + Пока 1=1 Цикл + Поз = Найти(Стр,Разделитель); + Если Поз=0 Тогда + МассивСтрок.Добавить(Стр); + Возврат МассивСтрок; + КонецЕсли; + МассивСтрок.Добавить(Лев(Стр,Поз-1)); + Стр = СокрЛ(Сред(Стр,Поз)); + КонецЦикла; + Иначе + ДлинаРазделителя = СтрДлина(Разделитель); + Пока 1=1 Цикл + Поз = Найти(Стр,Разделитель); + Если Поз=0 Тогда + Фрагмент = Стр; + Если ОбрезатьНепечатныеСимволы Тогда + Фрагмент = СокрЛП(Фрагмент); + КонецЕсли; + МассивСтрок.Добавить(Фрагмент); + Возврат МассивСтрок; + КонецЕсли; + Фрагмент = Лев(Стр,Поз-1); + Если ОбрезатьНепечатныеСимволы Тогда + Фрагмент = СокрЛП(Фрагмент); + КонецЕсли; + МассивСтрок.Добавить(Фрагмент); + Стр = Сред(Стр,Поз+ДлинаРазделителя); + КонецЦикла; + КонецЕсли; + + Возврат МассивСтрок; + +КонецФункции // ЛксПолучитьМассивИзСтрокиСРазделителем() + +// Получает первый фрагмент, отделяемый разделителем от строки. На базе ЛксПолучитьПервыйФрагмент +// Написана для оптимизации по скорости. +// +// Параметры: +// пСтрока - Строка - которую разбиваем; +// *пРазделитель - Строка, "." - символ-разделитель; +// *пЛиИспользоватьГраницуЕслиМаркерНеНайден - Булево, *Истина. +// +// Возвращаемое значение: +// - Строка - первый фрагмент строки; +// Неопределено - в строке не обнаружен разделитель. +// +Функция ПолучитьПервыйФрагмент_ирЛкс(пСтрока, пРазделитель = ".", + пЛиИспользоватьГраницуЕслиМаркерНеНайден = Истина) Экспорт + + Позиция = Найти(пСтрока, пРазделитель); + Если Позиция > 0 Тогда + Возврат Лев(пСтрока, Позиция - 1); + Иначе + Если пЛиИспользоватьГраницуЕслиМаркерНеНайден Тогда + Возврат пСтрока; + Иначе + Возврат пСтрока; + КонецЕсли; + КонецЕсли; + +КонецФункции // ЛксПолучитьПервыйФрагмент() + +// Получает идентификатор из любой строки. +// "3-я Дебиторка По контрагентам с интервалами СНГ (для Руководства)" => "_3_яДебиторкаПоКонтрагентамСИнтерваламиСНГ_дляРуководства_". +// +// Параметры: +// Представление – Строка. +// +// Возвращаемое значение: +// Строка. +// +Функция ПолучитьИдентификаторИзПредставления_Лкс(Знач Представление, ЗаменаПустойСтроки = "_") Экспорт + + Если ПустаяСтрока(Представление) Тогда + Представление = ЗаменаПустойСтроки; + КонецЕсли; + Если СокрЛП(Представление) = Представление и Найти(Представление, ",") = 0 Тогда + Попытка + Пустышка = Новый Структура(Представление); + Возврат Представление; + Исключение КонецПопытки; + КонецЕсли; + НовоеПредставление = СокрЛП(Представление); + ПервыйСимвол = Сред(НовоеПредставление, 1, 1); + Если ЭтоЦифра(ПервыйСимвол) Тогда + НовоеПредставление = "_" + НовоеПредставление; + КонецЕсли; + ПредыдущийСимвол = " "; + ТекущаяСтрока = ""; + Для Счетчик = 1 По СтрДлина(НовоеПредставление) Цикл + ТекущийСимвол = Сред(НовоеПредставление, Счетчик, 1); + Если ЭтоПробельныйСимвол(ПредыдущийСимвол) Тогда + // Предыдущий символ - непечатаемый + ТекущийСимвол = ВРег(ТекущийСимвол); + КонецЕсли; + Если ЭтоВалидныйСимволИдентификатора(ТекущийСимвол) Тогда + ТекущаяСтрока = ТекущаяСтрока + ТекущийСимвол; + ИначеЕсли Не ЭтоПробельныйСимвол(ТекущийСимвол) Тогда + ТекущаяСтрока = ТекущаяСтрока + "_"; + КонецЕсли; + ПредыдущийСимвол = ТекущийСимвол; + + КонецЦикла; + Результат = ТекущаяСтрока; + Возврат ТекущаяСтрока; + +КонецФункции // ПолучитьИдентификаторИзПредставления() + +Функция ЭтоЦифра(Символ) + + Возврат (Найти("0123456789", Символ) > 0); + +КонецФункции + +Функция ЭтоПробельныйСимвол(Символ) + + ПробельныеСимволы = " " + Символы.Таб + Символы.НПП + Символы.ВК + Символы.ВТаб + Символы.ПС + Символы.ПФ; + Возврат (Найти(ПробельныеСимволы, Символ) > 0) + +КонецФункции + +Функция ЭтоВалидныйСимволИдентификатора(Символ) + + Алфавит = "_АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ"; + Возврат (Найти(Алфавит, ВРег(Символ)) > 0 Или ЭтоЦифра(Символ)); + +КонецФункции + +// } Конец блока методов из ИР (Инструменты Разработчика, автор TormozIt ) + +//} КОНЕЦ ОСНОВНОГО БЛОКА + +Процедура ПриИзмененииСсылки(ИдентификаторСтрокиДанных) Экспорт + Перем Ссылка; + ЭлементДанных = ИдентификаторСтрокиДанных; + НовыйМассивИмен = ТаблицаДанных.ВыгрузитьКолонку("ИмяПеременной"); + + Ссылка = ЭлементДанных.Ссылка; + Если ЗначениеЗаполнено(Ссылка) Тогда + ОписательЭлемента = СоздатьОписательЭлементаПоСсылке(Ссылка, НовыйМассивИмен); + ЗаполнитьЗначенияСвойств(ЭлементДанных, ОписательЭлемента); + // ЭлементДанных.ИмяПеременной = УникальноеИмяПеременнойПоСсылке(Ссылка, НовыйМассивИмен); + // + // Мета = Ссылка.Метаданные(); + // ЭлементДанных.Метаданное = Мета.ПолноеИмя(); + // ЭлементДанных.РежимПоиска = "Перем"; + // Если Метаданные.Справочники.Содержит(Мета) И Ссылка.ЭтоГруппа Тогда + // ЭлементДанных.РежимСоздания = "Группа"; + // Иначе + // ЭлементДанных.РежимСоздания = ""; + // КонецЕсли; + КонецЕсли; +КонецПроцедуры + +Функция СоздатьМакетДанныхПоТаблицеДанных(Макет) Экспорт + Макет.Очистить(); + + массивДанных = Новый Массив; + + Для каждого строка Из ТаблицаДанных Цикл + ОписательЭлемента = СоздатьОписательЭлемента(); + ЗаполнитьЗначенияСвойств(ОписательЭлемента, строка); + массивДанных.Добавить(ОписательЭлемента); + КонецЦикла; + НовыйМакет = СоздатьМакетДляГенерацииДанных(массивДанных); + Если ТипЗнч(НовыйМакет) = Тип("ТабличныйДокумент") Тогда + Макет.Вывести(НовыйМакет); + КонецЕсли; + + Возврат НовыйМакет; +КонецФункции + +Функция СоздатьМакетДанныхПоМетаданным(Макет) Экспорт + Макет.Очистить(); + + массивДанных = Новый Массив; + МассивИмен = ТаблицаДанных.ВыгрузитьКолонку("ИмяПеременной"); + + СоздатьПоМетаданным(массивДанных); + + НовыйМакет = СоздатьМакетДляГенерацииДанных(массивДанных); + Если ТипЗнч(НовыйМакет) = Тип("ТабличныйДокумент") Тогда + Макет.Вывести(НовыйМакет); + КонецЕсли; + + МассивИмен = Неопределено; + + Возврат НовыйМакет; +КонецФункции + +Функция СоздатьМакетДанныхПоПользователямИБ(Макет, МассивИменПользователей) Экспорт + Макет.Очистить(); + + МассивПользователей = Новый Массив; + МассивИмен = Новый Массив; + + Для Каждого ИмяПользователяИБ Из МассивИменПользователей Цикл + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователяИБ); + Если Неопределено = ПользовательИБ Тогда + ВызватьИсключение "Не найден пользователь ИБ по имени <"+ИмяПользователяИБ+">"; + КонецЕсли; + МассивИмен.Добавить(ИмяПользователяИБ); + + ОписательПользователяИБ = СоздатьОписательЭлементаПользовательИБ(ПользовательИБ, МассивИмен); + МассивПользователей.Добавить(ОписательПользователяИБ); + КонецЦикла; + + НовыйМакет = СоздатьМакетДляГенерацииДанных(МассивПользователей); + Если ТипЗнч(НовыйМакет) = Тип("ТабличныйДокумент") Тогда + Макет.Вывести(НовыйМакет); + КонецЕсли; + + МассивИмен = Неопределено; + + Возврат НовыйМакет; +КонецФункции + +Процедура ПроверитьЗагрузкуМакета(ТабличныйДокумент) Экспорт + НачатьТранзакцию(); + + ТестовыеДанные = СоздатьДанныеПоТабличномуДокументу(ТабличныйДокумент); + Если ТестовыеДанные.Количество() = 0 Тогда + ВызватьИсключение "не заполнены тестовые данные. Возможно, макет данных пуст!" ; + КонецЕсли; + + Сообщить("Проверка загрузки объектов в ИБ из макета данных выполнена успешно."); + Сообщить("В ИБ загружены объекты: "+ТестовыеДанные.Количество()+" шт."); + Для каждого ЗагруженныйОбъект Из ТестовыеДанные Цикл + РеальныйОбъект = ЗагруженныйОбъект.Значение; + ДопТекст = ""; + Если ВыгружатьСсылку Тогда + Попытка + ДопТекст = ", ГУИД "+РеальныйОбъект.УникальныйИдентификатор()+""; + Исключение + КонецПопытки; + КонецЕсли; + Попытка + ДопТекст = ", записей "+РеальныйОбъект.Количество()+" шт."; // для регистров + Исключение + КонецПопытки; + Сообщить(" Загружен объект.Имя "+ЗагруженныйОбъект.Ключ+", Тип "+ТипЗнч(РеальныйОбъект)+ДопТекст); + КонецЦикла; + + Если ТранзакцияАктивна() Тогда + ОтменитьТранзакцию(); + КонецЕсли; +КонецПроцедуры + +Функция ПодключитьВнешнююОбработку(АдресХранилища, ИдентификаторОбработки, ПолныйПутьФайлаОбработки) Экспорт + #Если Клиент Тогда + Возврат ПолныйПутьФайлаОбработки; + #Иначе + Возврат ВнешниеОбработки.Подключить(АдресХранилища, ИдентификаторОбработки, Ложь); // подключаю не в безопасном режиме + #КонецЕсли +КонецФункции + +Функция СписокВыбора_РежимПоиска(СписокВыбора_РежимПоиска) Экспорт + СписокВыбора_РежимПоиска.Добавить("Перем"); + СписокВыбора_РежимПоиска.Добавить("Наименование"); + СписокВыбора_РежимПоиска.Добавить("Код"); + //СписокВыбора_РежимПоиска.Добавить("Группа"); + //СписокВыбора_РежимПоиска.Добавить("Объект"); + СписокВыбора_РежимПоиска.Добавить("Гуид"); + СписокВыбора_РежимПоиска.Добавить("Предопределенный"); + СписокВыбора_РежимПоиска.Добавить("ТекущаяДата"); + //СписокВыбора_РежимПоиска.Добавить("Проведение"); + СписокВыбора_РежимПоиска.Добавить("СоздатьПоГуид"); + Возврат СписокВыбора_РежимПоиска; +КонецФункции + +Функция СписокВыбора_РежимСоздания(СписокВыбора_РежимСоздания) Экспорт + //СписокВыбора_РежимПоиска.Добавить("Перем"); + //СписокВыбора_РежимПоиска.Добавить("Наименование"); + //СписокВыбора_РежимПоиска.Добавить("Код"); + СписокВыбора_РежимСоздания.Добавить("Группа"); + СписокВыбора_РежимСоздания.Добавить("Объект"); + //СписокВыбора_РежимПоиска.Добавить("Гуид"); + //СписокВыбора_РежимПоиска.Добавить("Предопределенный"); + //СписокВыбора_РежимПоиска.Добавить("ТекущаяДата"); + СписокВыбора_РежимСоздания.Добавить("Проведение"); + //СписокВыбора_РежимСоздания.Добавить("СоздатьПоГуид"); + Возврат СписокВыбора_РежимСоздания; +КонецФункции + +/////////////////////////////////////////////////////////////////////////////// +// Генерация по метаданным +/////////////////////////////////////////////////////////////////////////////// + +// Процедура производит начальную инициализацию - заполнение дерева описания +// классов объектов метаданных, дерево метаданных, список ссылочных типов +// +// Параметры +// +Процедура НачальнаяИнициализация() Экспорт + + ЗаполнитьПользователейИБ(); + + // Создаем объект, описывающий процессы построения дерева и выгрузку + ЗаполнитьОписаниеМетаданных(); + + МетаданныеОписание = МетаданныеОписание.Строки[0]; + + СсылочныеТипы = Новый Соответствие; + СоответствиеОбъектовМетаданныхИСсылочныхТипов = Новый Соответствие; + + ДеревоМетаданных.Колонки.Очистить(); + // создание необходимых колонок + ДеревоМетаданных.Колонки.Добавить("Выгружать", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный))); + ДеревоМетаданных.Колонки.Добавить("ВыгружатьПриНеобходимости", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный)), "При необходимости"); + ДеревоМетаданных.Колонки.Добавить("Метаданные"); + ДеревоМетаданных.Колонки.Добавить("ЭлементОписания"); + ДеревоМетаданных.Колонки.Добавить("ОбъектМД"); + ДеревоМетаданных.Колонки.Добавить("ПолноеИмяМетаданных"); + ДеревоМетаданных.Колонки.Добавить("НастройкиКомпоновщика"); + ДеревоМетаданных.Колонки.Добавить("ИспользоватьОтбор"); + ДеревоМетаданных.Колонки.Добавить("ИндексКартинки"); + ДеревоМетаданных.Колонки.Добавить("Развернут"); + ДеревоМетаданных.Колонки.Добавить("ПолноеИмяМетаданныхДляПоиска"); + + //ОкноИсполнения = ПолучитьФорму("ОкноИсполнения"); + #Если Клиент Тогда + Состояние("Выполняется анализ метаданных конфигурации..."); + #КонецЕсли + + //ИспользующиеИтоги = Новый Массив; + Корень = ДеревоМетаданных.Строки.Добавить(); + ПостроениеПоддереваОбъекта(Метаданные, Корень, МетаданныеОписание); + СверткаПоддереваОбъекта(Корень); + + Для Каждого Эл Из СсылочныеТипы Цикл + СоответствиеОбъектовМетаданныхИСсылочныхТипов.Вставить(Эл.Значение, Эл.Ключ); + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьПользователейИБ() + НаборПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + + Для Каждого ПользовательИБ Из НаборПользователиИБ Цикл + + НоваяСтрока = ПользователиИБ.Добавить(); + НоваяСтрока.ПолноеИмя = ПользовательИБ.ПолноеИмя; + НоваяСтрока.Имя = ПользовательИБ.Имя; + НоваяСтрока.АутентификацияСтандартная = ПользовательИБ.АутентификацияСтандартная; + НоваяСтрока.АутентификацияОС = ПользовательИБ.АутентификацияОС; + //НоваяСтрока.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; + НоваяСтрока.ПользовательОС = ПользовательИБ.ПользовательОС; + //НоваяСтрока.АутентификацияOpenID = ПользовательИБ.АутентификацияOpenID; + + СтрокаРолей = ""; + Для Каждого Роль Из ПользовательИБ.Роли Цикл + СтрокаРолей = СтрокаРолей + Роль.Имя+", "; + КонецЦикла; + Если Не ПустаяСтрока(СтрокаРолей) Тогда + СтрокаРолей = Лев(СтрокаРолей, СтрДлина(СтрокаРолей)-2); + КонецЕсли; + НоваяСтрока.Роли = СтрокаРолей; + КонецЦикла; + +КонецПроцедуры + +// Процедура производит заполнение дерева описания классов объектов метаданных +// +// Параметры +// +Процедура ЗаполнитьОписаниеМетаданных() + + СтэкДереваЗначенийСтроки = Новый Массив; + МетаданныеОписание = Новый ДеревоЗначений; + МетаданныеОписание.Колонки.Добавить("Выгружаемый", Новый ОписаниеТипов("Булево")); + МетаданныеОписание.Колонки.Добавить("ДляЗапроса", Новый ОписаниеТипов("Строка")); + МетаданныеОписание.Колонки.Добавить("Класс", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100, ДопустимаяДлина.Переменная))); + МетаданныеОписание.Колонки.Добавить("Менеджер"); + МетаданныеОписание.Колонки.Добавить("Свойства", Новый ОписаниеТипов("СписокЗначений")); + МетаданныеОписание.Колонки.Добавить("ИндексКартинки"); + СтэкДереваЗначенийСтроки.Вставить(0, МетаданныеОписание.Строки); + ////////////////////////////////// + // Конфигурации + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Конфигурации"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.ИндексКартинки = 0; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.Константы + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Константы"; + //ОписаниеКласса.Выгружаемый = истина; + //ОписаниеКласса.Менеджер = Константы; + //ОписаниеКласса.ДляЗапроса = ""; + //ОписаниеКласса.ИндексКартинки = 1; + //ОписаниеКласса.Свойства.Добавить("Тип"); + ////////////////////////////////// + // Конфигурации.Справочники + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Справочники"; + ОписаниеКласса.Выгружаемый = истина; + ОписаниеКласса.Менеджер = Справочники; + ОписаниеКласса.ДляЗапроса = ВернутьЗначениеСоответствия("Справочник") + "."; + ОписаниеКласса.Свойства.Добавить("Владельцы"); + ОписаниеКласса.Свойства.Добавить("ВводитсяНаОсновании"); + ОписаниеКласса.ИндексКартинки = 3; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.Справочники.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + ОписаниеКласса.Свойства.Добавить("Использование"); + ////////////////////////////////// + // Конфигурации.Справочники.ТабличныеЧасти + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "ТабличныеЧасти"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Использование"); + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.Справочники.ТабличныеЧасти.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + СтэкДереваЗначенийСтроки.Удалить(0); + СтэкДереваЗначенийСтроки.Удалить(0); + ////////////////////////////////// + // Конфигурации.Документы + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Документы"; + ОписаниеКласса.Выгружаемый = истина; + ОписаниеКласса.Менеджер = Документы; + ОписаниеКласса.ДляЗапроса = ВернутьЗначениеСоответствия("Документ") + "."; + ОписаниеКласса.Свойства.Добавить("ВводитсяНаОсновании"); + ОписаниеКласса.Свойства.Добавить("Движения"); + ОписаниеКласса.ИндексКартинки = 7; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.Документы.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + ////////////////////////////////// + // Конфигурации.Документы.ТабличныеЧасти + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "ТабличныеЧасти"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.Документы.ТабличныеЧасти.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + СтэкДереваЗначенийСтроки.Удалить(0); + СтэкДереваЗначенийСтроки.Удалить(0); + + ////////////////////////////////// + // Конфигурации.Последовательности + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Последовательности"; + //ОписаниеКласса.Выгружаемый = истина; + //ОписаниеКласса.Менеджер = Последовательности; + //ОписаниеКласса.ДляЗапроса = "Последовательность."; + //ОписаниеКласса.Свойства.Добавить("Документы"); + //ОписаниеКласса.Свойства.Добавить("Движения"); + //ОписаниеКласса.ИндексКартинки = 5; + //СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + //////////////////////////////////// + //// Конфигурации.Последовательности.Измерения + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Измерения"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //ОписаниеКласса.Свойства.Добавить("Тип"); + //ОписаниеКласса.Свойства.Добавить("СоответствиеДокументам"); + //ОписаниеКласса.Свойства.Добавить("СоответствиеДвижениям"); + //СтэкДереваЗначенийСтроки.Удалить(0); + //////////////////////////////////// + //// Конфигурации.ПланыВидовХарактеристик + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "ПланыВидовХарактеристик"; + //ОписаниеКласса.Выгружаемый = истина; + //ОписаниеКласса.Менеджер = ПланыВидовХарактеристик; + //ОписаниеКласса.ДляЗапроса = "ПланВидовХарактеристик."; + //ОписаниеКласса.Свойства.Добавить("ДополнительныеЗначенияХарактеристик"); + //ОписаниеКласса.Свойства.Добавить("Тип"); + //ОписаниеКласса.Свойства.Добавить("ВводитсяНаОсновании"); + //ОписаниеКласса.ИндексКартинки = 9; + //СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + //////////////////////////////////// + //// Конфигурации.ПланыВидовХарактеристик.Реквизиты + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Реквизиты"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //ОписаниеКласса.Свойства.Добавить("Тип"); + //ОписаниеКласса.Свойства.Добавить("Использование"); + //////////////////////////////////// + //// Конфигурации.ПланыВидовХарактеристик.ТабличныеЧасти + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "ТабличныеЧасти"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //ОписаниеКласса.Свойства.Добавить("Использование"); + //СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + //////////////////////////////////// + //// Конфигурации.ПланыВидовХарактеристик.ТабличныеЧасти.Реквизиты + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Реквизиты"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //ОписаниеКласса.Свойства.Добавить("Тип"); + //СтэкДереваЗначенийСтроки.Удалить(0); + //СтэкДереваЗначенийСтроки.Удалить(0); + //////////////////////////////////// + //// Конфигурации.ПланыСчетов + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "ПланыСчетов"; + //ОписаниеКласса.Выгружаемый = истина; + //ОписаниеКласса.Менеджер = ПланыСчетов; + //ОписаниеКласса.ДляЗапроса = "ПланСчетов."; + //ОписаниеКласса.Свойства.Добавить("ВводитсяНаОсновании"); + //ОписаниеКласса.Свойства.Добавить("ВидыСубконто"); + //ОписаниеКласса.ИндексКартинки = 11; + //СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + //////////////////////////////////// + //// Конфигурации.ПланыСчетов.Реквизиты + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Реквизиты"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //ОписаниеКласса.Свойства.Добавить("Тип"); + //////////////////////////////////// + //// Конфигурации.ПланыСчетов.ТабличныеЧасти + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "ТабличныеЧасти"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + //////////////////////////////////// + //// Конфигурации.ПланыСчетов.ТабличныеЧасти.Реквизиты + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Реквизиты"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //ОписаниеКласса.Свойства.Добавить("Тип"); + //СтэкДереваЗначенийСтроки.Удалить(0); + //СтэкДереваЗначенийСтроки.Удалить(0); + //////////////////////////////////// + //// Конфигурации.ПланыВидовРасчета + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "ПланыВидовРасчета"; + //ОписаниеКласса.Выгружаемый = истина; + //ОписаниеКласса.Менеджер = ПланыВидовРасчета; + //ОписаниеКласса.ДляЗапроса = "ПланВидовРасчета."; + //ОписаниеКласса.Свойства.Добавить("ВводитсяНаОсновании"); + //ОписаниеКласса.Свойства.Добавить("ЗависимостьОтВидовРасчета"); + //ОписаниеКласса.Свойства.Добавить("БазовыеВидыРасчета"); + //ОписаниеКласса.Свойства.Добавить("ИспользованиеПериодаДействия"); + //ОписаниеКласса.ИндексКартинки = 13; + //СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + //////////////////////////////////// + //// Конфигурации.ПланыВидовРасчета.Реквизиты + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Реквизиты"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //ОписаниеКласса.Свойства.Добавить("Тип"); + //////////////////////////////////// + //// Конфигурации.ПланыВидовРасчета.ТабличныеЧасти + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "ТабличныеЧасти"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + //////////////////////////////////// + //// Конфигурации.ПланыВидовРасчета.ТабличныеЧасти.Реквизиты + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Реквизиты"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //ОписаниеКласса.Свойства.Добавить("Тип"); + //СтэкДереваЗначенийСтроки.Удалить(0); + //СтэкДереваЗначенийСтроки.Удалить(0); + ////////////////////////////////// + // Конфигурации.РегистрыСведений + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "РегистрыСведений"; + ОписаниеКласса.Выгружаемый = истина; + ОписаниеКласса.Менеджер = РегистрыСведений; + ОписаниеКласса.ДляЗапроса = "РегистрСведений."; + ОписаниеКласса.ИндексКартинки = 15; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.РегистрыСведений.Ресурсы + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Ресурсы"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + ////////////////////////////////// + // Конфигурации.РегистрыСведений.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + ////////////////////////////////// + // Конфигурации.РегистрыСведений.Измерения + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Измерения"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + СтэкДереваЗначенийСтроки.Удалить(0); + ////////////////////////////////// + // Конфигурации.РегистрыНакопления + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "РегистрыНакопления"; + ОписаниеКласса.Выгружаемый = истина; + ОписаниеКласса.Менеджер = РегистрыНакопления; + ОписаниеКласса.ДляЗапроса = "РегистрНакопления."; + ОписаниеКласса.ИндексКартинки = 17; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.РегистрыНакопления.Ресурсы + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Ресурсы"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + ////////////////////////////////// + // Конфигурации.РегистрыНакопления.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + ////////////////////////////////// + // Конфигурации.РегистрыНакопления.Измерения + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Измерения"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + СтэкДереваЗначенийСтроки.Удалить(0); + ////////////////////////////////// + // Конфигурации.РегистрыБухгалтерии + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "РегистрыБухгалтерии"; + ОписаниеКласса.Выгружаемый = истина; + ОписаниеКласса.Менеджер = РегистрыБухгалтерии; + ОписаниеКласса.ДляЗапроса = "РегистрБухгалтерии."; + ОписаниеКласса.Свойства.Добавить("ПланСчетов"); + ОписаниеКласса.Свойства.Добавить("Корреспонденция"); + ОписаниеКласса.ИндексКартинки = 19; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.РегистрыБухгалтерии.Измерения + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Измерения"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + ////////////////////////////////// + // Конфигурации.РегистрыБухгалтерии.Ресурсы + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Ресурсы"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + ////////////////////////////////// + // Конфигурации.РегистрыБухгалтерии.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + СтэкДереваЗначенийСтроки.Удалить(0); + //////////////////////////////////// + //// Конфигурации.РегистрыРасчета + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "РегистрыРасчета"; + //ОписаниеКласса.Выгружаемый = истина; + //ОписаниеКласса.Менеджер = РегистрыРасчета; + //ОписаниеКласса.ДляЗапроса = "РегистрРасчета."; + //ОписаниеКласса.Свойства.Добавить("Периодичность"); + //ОписаниеКласса.Свойства.Добавить("ПериодДействия"); + //ОписаниеКласса.Свойства.Добавить("БазовыйПериод"); + //ОписаниеКласса.Свойства.Добавить("График"); + //ОписаниеКласса.Свойства.Добавить("ЗначениеГрафика"); + //ОписаниеКласса.Свойства.Добавить("ДатаГрафика"); + //ОписаниеКласса.Свойства.Добавить("ПланВидовРасчета"); + //ОписаниеКласса.ИндексКартинки = 21; + //СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + //////////////////////////////////// + //// Конфигурации.РегистрыРасчета.Ресурсы + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Ресурсы"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //ОписаниеКласса.Свойства.Добавить("Тип"); + //////////////////////////////////// + //// Конфигурации.РегистрыРасчета.Реквизиты + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Реквизиты"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //ОписаниеКласса.Свойства.Добавить("Тип"); + //ОписаниеКласса.Свойства.Добавить("СвязьСГрафиком"); + //////////////////////////////////// + //// Конфигурации.РегистрыРасчета.Измерения + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Измерения"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.ДляЗапроса = ""; + //ОписаниеКласса.Свойства.Добавить("Тип"); + //ОписаниеКласса.Свойства.Добавить("БазовоеИзмерение"); + //ОписаниеКласса.Свойства.Добавить("СвязьСГрафиком"); + ////////////////////////////////// + // Конфигурации.РегистрыРасчета.Перерасчеты + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Перерасчеты"; + //ОписаниеКласса.Выгружаемый = истина; + //ОписаниеКласса.Менеджер = "РегистрыРасчета.%i.Перерасчеты"; + //ОписаниеКласса.ДляЗапроса = "РегистрРасчета.%i."; + //СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.РегистрыРасчета.Перерасчеты.Измерения + //ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + //ОписаниеКласса.Класс = "Измерения"; + //ОписаниеКласса.Выгружаемый = ложь; + //ОписаниеКласса.Свойства.Добавить("ДанныеВедущихРегистров"); + //ОписаниеКласса.Свойства.Добавить("ИзмерениеРегистра"); + //СтэкДереваЗначенийСтроки.Удалить(0); + //СтэкДереваЗначенийСтроки.Удалить(0); + ////////////////////////////////// + // Конфигурации.БизнесПроцессы + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "БизнесПроцессы"; + ОписаниеКласса.Выгружаемый = истина; + ОписаниеКласса.Менеджер = БизнесПроцессы; + ОписаниеКласса.ДляЗапроса = "БизнесПроцесс."; + ОписаниеКласса.Свойства.Добавить("ВводитсяНаОсновании"); + ОписаниеКласса.Свойства.Добавить("Задача"); + ОписаниеКласса.ИндексКартинки = 23; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.БизнесПроцессы.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + ////////////////////////////////// + // Конфигурации.БизнесПроцессы.ТабличныеЧасти + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "ТабличныеЧасти"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.БизнесПроцессы.ТабличныеЧасти.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + СтэкДереваЗначенийСтроки.Удалить(0); + СтэкДереваЗначенийСтроки.Удалить(0); + ////////////////////////////////// + // Конфигурации.Задачи + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Задачи"; + ОписаниеКласса.Выгружаемый = истина; + ОписаниеКласса.Менеджер = Задачи; + ОписаниеКласса.ДляЗапроса = "Задача."; + ОписаниеКласса.Свойства.Добавить("Адресация"); + ОписаниеКласса.Свойства.Добавить("ОсновнойРеквизитАдресации"); + ОписаниеКласса.Свойства.Добавить("ТекущийИсполнитель"); + ОписаниеКласса.Свойства.Добавить("ВводитсяНаОсновании"); + ОписаниеКласса.ИндексКартинки = 25; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.Задачи.РеквизитыАдресации + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "РеквизитыАдресации"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + ОписаниеКласса.Свойства.Добавить("ИзмерениеАдресации"); + ////////////////////////////////// + // Конфигурации.Задачи.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + ////////////////////////////////// + // Конфигурации.Задачи.ТабличныеЧасти + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "ТабличныеЧасти"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.Задачи.ТабличныеЧасти.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + СтэкДереваЗначенийСтроки.Удалить(0); + СтэкДереваЗначенийСтроки.Удалить(0); + + ////////////////////////////////// + // Конфигурации.ПланыОбмена + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "ПланыОбмена"; + ОписаниеКласса.Выгружаемый = истина; + ОписаниеКласса.Менеджер = ПланыОбмена; + ОписаниеКласса.ДляЗапроса = "ПланОбмена."; + ОписаниеКласса.Свойства.Добавить("ВводитсяНаОсновании"); + ОписаниеКласса.ИндексКартинки = 27; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.ПланыОбмена.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + ////////////////////////////////// + // Конфигурации.ПланыОбмена.ТабличныеЧасти + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "ТабличныеЧасти"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + СтэкДереваЗначенийСтроки.Вставить(0, ОписаниеКласса.Строки); + ////////////////////////////////// + // Конфигурации.ПланыОбмена.ТабличныеЧасти.Реквизиты + ОписаниеКласса = СтэкДереваЗначенийСтроки[0].Добавить(); + ОписаниеКласса.Класс = "Реквизиты"; + ОписаниеКласса.Выгружаемый = ложь; + ОписаниеКласса.ДляЗапроса = ""; + ОписаниеКласса.Свойства.Добавить("Тип"); + СтэкДереваЗначенийСтроки.Удалить(0); + СтэкДереваЗначенийСтроки.Удалить(0); + + СтэкДереваЗначенийСтроки.Удалить(0); + +КонецПроцедуры + +// Процедура заполняет строку дерева метаданных, попутно заполняя соответствие ссылочных типов объектам метаданных +// +// Параметры +// ОбъектМД - описание объекта метаданных +// ЭлементДЗ - заполняемая строка дерева метаданных +// ЭлементОписания - описание класса, к которому принадлежит объект метаданных (свойства, подчиненные классы) +// +Процедура ПостроениеПоддереваОбъекта(ОбъектМД, ЭлементДЗ, ЭлементОписания) + + ЭлементДЗ.Метаданные = ОбъектМД; + ЭлементДЗ.ОбъектМД = ОбъектМД; + ЭлементДЗ.ПолноеИмяМетаданных = ОбъектМД.Имя; + ЭлементДЗ.ЭлементОписания = ЭлементОписания; + ЭлементДЗ.Выгружать = Ложь; + ЭлементДЗ.ВыгружатьПриНеобходимости = Истина; + ЭлементДЗ.ИндексКартинки = ЭлементОписания.ИндексКартинки; + + Если ЭлементОписания.Менеджер <> Неопределено Тогда + + // заполнение соответствия ссылочных типов объектам метаданных + Если ОбъектОбразуетСсылочныйТип(ОбъектМД) Тогда + СсылочныеТипы[ТипЗнч(ЭлементОписания.Менеджер[ОбъектМД.Имя].ПустаяСсылка())] = ОбъектМД; + КонецЕсли; + + //Если Метаданные.РегистрыНакопления.Содержит(ОбъектМД) + // Или Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМД) Тогда + // + // ИспользующиеИтоги.Добавить(ЭлементДЗ); + // + //КонецЕсли; + + КонецЕсли; + + // подчиненные ветви + Для Каждого ПодчиненныйКласс Из ЭлементОписания.Строки Цикл + + Если Не ПодчиненныйКласс.Выгружаемый Тогда + Продолжить; + КонецЕсли; + + ВеткаКласса = ЭлементДЗ.Строки.Добавить(); + ВеткаКласса.Метаданные = ПодчиненныйКласс.Класс; + ВеткаКласса.Выгружать = Ложь; + ВеткаКласса.ВыгружатьПриНеобходимости = Истина; + ВеткаКласса.ПолноеИмяМетаданных = ПодчиненныйКласс.Класс; + ВеткаКласса.ИндексКартинки = ПодчиненныйКласс.ИндексКартинки; + + ПодчиненныеОбъектыДанногоКласса = ОбъектМД[ПодчиненныйКласс.Класс]; + + Для Каждого ПодчиненныйОбъектМД Из ПодчиненныеОбъектыДанногоКласса Цикл + + //Если Метаданные.РегистрыСведений.Содержит(ПодчиненныйОбъектМД) Тогда + // Если ПодчиненныйОбъектМД.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда + // Продолжить; + // КонецЕсли; + //КонецЕсли; + + ПодчиненныйЭлементДЗ = ВеткаКласса.Строки.Добавить(); + ПостроениеПоддереваОбъекта(ПодчиненныйОбъектМД, ПодчиненныйЭлементДЗ, ПодчиненныйКласс); + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Процедура удаляет из дерева метаданных строки, соответствующие метаданным, заведомо не попадающим в выгрузку +// +// Параметры +// ЭлементДЗ - строка дерева метаданных, подчиненные которой рассматриваются +// с точки зрения удаления из списка потенциально выгружаемых +// +Процедура СверткаПоддереваОбъекта(ЭлементДЗ) + + УдаляемыеВеткиКлассов = Новый Массив; + Для Каждого ВеткаКласса Из ЭлементДЗ.Строки Цикл + + УдаляемыеПодчиненныеМД = Новый Массив; + + Для Каждого ПодчиненныйОбъектМД Из ВеткаКласса.Строки Цикл + СверткаПоддереваОбъекта(ПодчиненныйОбъектМД); + Если (ПодчиненныйОбъектМД.Строки.Количество()) = 0 + и (Не ПодчиненныйОбъектМД.ЭлементОписания.Выгружаемый) Тогда + + УдаляемыеПодчиненныеМД.Добавить(ВеткаКласса.Строки.Индекс(ПодчиненныйОбъектМД)); + + КонецЕсли; + + КонецЦикла; + + Для Сч = 1 По УдаляемыеПодчиненныеМД.Количество() Цикл + ВеткаКласса.Строки.Удалить(УдаляемыеПодчиненныеМД[УдаляемыеПодчиненныеМД.Количество() - Сч]); + КонецЦикла; + + Если ВеткаКласса.Строки.Количество() = 0 Тогда + УдаляемыеВеткиКлассов.Добавить(ЭлементДЗ.Строки.Индекс(ВеткаКласса)); + КонецЕсли; + + КонецЦикла; + + Для Сч = 1 По УдаляемыеВеткиКлассов.Количество() Цикл + ЭлементДЗ.Строки.Удалить(УдаляемыеВеткиКлассов[УдаляемыеВеткиКлассов.Количество() - Сч]); + КонецЦикла; + +КонецПроцедуры + +// Функция определяет имеет ли переданный объект метаданных ссылочный тип +// +// Возврат - Истина, если переданный объект метаданных имеет ссылочный тип, Ложь - противном случае +Функция ОбъектОбразуетСсылочныйТип(ОбъектМД) Экспорт + + Если ОбъектМД = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Если Метаданные.Справочники.Содержит(ОбъектМД) + ИЛИ Метаданные.Документы.Содержит(ОбъектМД) + ИЛИ Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМД) + ИЛИ Метаданные.ПланыСчетов.Содержит(ОбъектМД) + ИЛИ Метаданные.ПланыВидовРасчета.Содержит(ОбъектМД) + ИЛИ Метаданные.ПланыОбмена.Содержит(ОбъектМД) + ИЛИ Метаданные.БизнесПроцессы.Содержит(ОбъектМД) + ИЛИ Метаданные.Задачи.Содержит(ОбъектМД) Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; +КонецФункции + +// Процедура обрабатывает состояние признака Выгрузка, проставляя признаки Выгрузка и ВыгружатьПриНеобходимости +// связанным ветвям дерева +// +// Параметры +// ЭлементДЗ - строка дерева метаданных +// +Процедура ОбработкаИзмененияСостоянияВыгружать(ЭлементДЗ) Экспорт + Если ЭлементДЗ.Выгружать = 2 Тогда + ЭлементДЗ.Выгружать = 0; + КонецЕсли; + // Изменяем состояние "вниз" + УстановитьВыгружатьПодчиненным(ЭлементДЗ); + // Изменяем состояние "вверх" + ОбновитьСостояниеВыгружать(ЭлементДЗ.Родитель); +КонецПроцедуры + +// Процедура обрабатывает состояние признака Выгрузка, проставляя признаки Выгрузка и ВыгружатьПриНеобходимости +// связанным ветвям дерева +// +// Параметры +// ЭлементДЗ - строка дерева метаданных +// +Процедура ОбработкаИзмененияСостоянияВыгружатьПриНеобходимости(ЭлементДЗ) Экспорт + + Если ЭлементДЗ.ВыгружатьПриНеобходимости = 2 Тогда + ЭлементДЗ.ВыгружатьПриНеобходимости = 0; + КонецЕсли; + + // Изменяем состояние "вниз" + УстановитьВыгружатьПриНеобходимостиПодчиненным(ЭлементДЗ); + // Изменяем состояние "вверх" + ОбновитьСостояниеВыгружатьПриНеобходимости(ЭлементДЗ.Родитель); + +КонецПроцедуры + +// Процедура проставляет признак Выгрузка строкам дерева метаданных, подчиненных данной, вычисляет и +// выставляет признак выгрузки "по ссылке" другим объектам, ссылки на которые может или должен +// содержать объект, соответствующий данной строке +// +// Параметры +// ЭлементДЗ - строка дерева метаданных +// +Процедура УстановитьВыгружатьПодчиненным(ЭлементДЗ) + Для Каждого ПодчиненнаяСтрока Из ЭлементДЗ.Строки Цикл + ПодчиненнаяСтрока.Выгружать = ЭлементДЗ.Выгружать; + УстановитьВыгружатьПодчиненным(ПодчиненнаяСтрока); + КонецЦикла; +КонецПроцедуры + +// Процедура проставляет признак Выгрузка строке дерева метаданных на основании этого признака подчиненных строк, +// затем вызывает себя же для родителя, обеспечивая отработку до корня дерева +// +// Параметры +// ЭлементДЗ - строка дерева метаданных +// +Процедура ОбновитьСостояниеВыгружать(ЭлементДЗ) + Если ЭлементДЗ = Неопределено Тогда + Возврат; + КонецЕсли; + Если (ЭлементДЗ.ЭлементОписания <> Неопределено) И ЭлементДЗ.ЭлементОписания.Выгружаемый Тогда + Возврат; // обновляем вверх или до корня, или до первого встретившегося выгружаемого + КонецЕсли; + Состояние = Неопределено; + Для Каждого ПодчиненныйЭлементДЗ Из ЭлементДЗ.Строки Цикл + Если Состояние = Неопределено Тогда + Состояние = ПодчиненныйЭлементДЗ.Выгружать; + Иначе + Если Не Состояние = ПодчиненныйЭлементДЗ.Выгружать Тогда + Состояние = 2; + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если Состояние <> Неопределено Тогда + ЭлементДЗ.Выгружать = Состояние; + ОбновитьСостояниеВыгружать(ЭлементДЗ.Родитель); + КонецЕсли; +КонецПроцедуры + +// Процедура проставляет признак Выгрузка строкам дерева метаданных, подчиненных данной, вычисляет и +// выставляет признак выгрузки "по ссылке" другим объектам, ссылки на которые может или должен +// содержать объект, соответствующий данной строке +// +// Параметры +// ЭлементДЗ - строка дерева метаданных +// +Процедура УстановитьВыгружатьПриНеобходимостиПодчиненным(ЭлементДЗ) + + Для Каждого ПодчиненнаяСтрока Из ЭлементДЗ.Строки Цикл + ПодчиненнаяСтрока.ВыгружатьПриНеобходимости = ЭлементДЗ.ВыгружатьПриНеобходимости; + УстановитьВыгружатьПриНеобходимостиПодчиненным(ПодчиненнаяСтрока); + КонецЦикла; + +КонецПроцедуры + +// Процедура проставляет признак Выгрузка строке дерева метаданных на основании этого признака подчиненных строк, +// затем вызывает себя же для родителя, обеспечивая отработку до корня дерева +// +// Параметры +// ЭлементДЗ - строка дерева метаданных +// +Процедура ОбновитьСостояниеВыгружатьПриНеобходимости(ЭлементДЗ) + + Если ЭлементДЗ = Неопределено Тогда + Возврат; + КонецЕсли; + + Если (ЭлементДЗ.ЭлементОписания <> Неопределено) И ЭлементДЗ.ЭлементОписания.Выгружаемый Тогда + Возврат; // обновляем вверх или до корня, или до первого встретившегося выгружаемого + КонецЕсли; + + Состояние = Неопределено; + Для Каждого ПодчиненныйЭлементДЗ Из ЭлементДЗ.Строки Цикл + + Если Состояние = Неопределено Тогда + Состояние = ПодчиненныйЭлементДЗ.ВыгружатьПриНеобходимости; + Иначе + Если Не Состояние = ПодчиненныйЭлементДЗ.ВыгружатьПриНеобходимости Тогда + Состояние = 2; + Прервать; + КонецЕсли; + КонецЕсли; + + КонецЦикла; + + Если Состояние <> Неопределено Тогда + ЭлементДЗ.ВыгружатьПриНеобходимости = Состояние; + ОбновитьСостояниеВыгружатьПриНеобходимости(ЭлементДЗ.Родитель); + КонецЕсли; + +КонецПроцедуры + +Функция ПодготовитьКомпоновщикДляВыгрузки(СтрокаДереваМетаданных, СтрокаПолейДляВыборки = "") Экспорт + + Если ТипЗнч(СтрокаДереваМетаданных.НастройкиКомпоновщика) = Тип("ОтборКомпоновкиДанных") Тогда + ЕстьДопОтборы = Ложь; + Для Каждого ЭлементОтбора Из СтрокаДереваМетаданных.НастройкиКомпоновщика.Элементы Цикл + Если ЭлементОтбора.Использование Тогда + ЕстьДопОтборы = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Иначе + ЕстьДопОтборы = (СтрокаДереваМетаданных.НастройкиКомпоновщика <> Неопределено); + КонецЕсли; + + ИтоговыйТекстЗапроса = ПолучитьТекстЗапросаПоСтроке(СтрокаДереваМетаданных, ЕстьДопОтборы, СтрокаПолейДляВыборки); + + СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; + ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); + ИсточникДанных.Имя = "ТекущаяБаза"; + ИсточникДанных.СтрокаСоединения = ""; + ИсточникДанных.ТипИсточникаДанных = "Local"; + НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); + НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина; + НаборДанных.Запрос = ИтоговыйТекстЗапроса; + НаборДанных.Имя = "ОсновнойЗапрос"; + НаборДанных.ИсточникДанных = "ТекущаяБаза"; + + Если ЕстьДопОтборы Тогда + + НастройкиКомпоновщикаXDTO = СериализаторXDTO.ЗаписатьXDTO(СтрокаДереваМетаданных.НастройкиКомпоновщика); + СКДXDTO = СериализаторXDTO.ЗаписатьXDTO(СхемаКомпоновкиДанных); + СКДXDTO.defaultSettings = СКДXDTO.settingsVariant[0].settings; + СКДXDTO.defaultSettings.filter = НастройкиКомпоновщикаXDTO; + СхемаКомпоновкиДанных = СериализаторXDTO.ПрочитатьXDTO(СКДXDTO); + + КонецЕсли; + + ПараметрДатаНачала = Новый ПараметрКомпоновкиДанных("ДатаНачала"); + ПараметрДатаОкончания = Новый ПараметрКомпоновкиДанных("ДатаОкончания"); + + СхемаКомпоновкиДанных.НастройкиПоУмолчанию.ПараметрыДанных.Элементы.Очистить(); + Параметр = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.ПараметрыДанных.Элементы.Добавить(); + Параметр.Параметр = ПараметрДатаНачала; + Параметр.Значение = ДатаНачала; + Параметр.Использование = Истина; + + Параметр = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.ПараметрыДанных.Элементы.Добавить(); + Параметр.Параметр = ПараметрДатаОкончания; + Параметр.Значение = ДатаОкончания; + Параметр.Использование = Истина; + + Возврат СхемаКомпоновкиДанных; //ПостроительОтчета; + +КонецФункции + +Функция ПолучитьТекстЗапросаПоСтроке(СтрокаДереваМетаданных, ЕстьДопОтборы, СтрокаПолейДляВыборки = "") Экспорт + + Если ТипЗнч(СтрокаДереваМетаданных) = Тип("ДанныеФормыЭлементДерева") Тогда + // Вызов из управляемой формы + РодительскийЭлемент = СтрокаДереваМетаданных.ПолучитьРодителя(); + Иначе //СтрокаДереваЗначений + РодительскийЭлемент = СтрокаДереваМетаданных.Родитель; + КонецЕсли; + //ОбъектМетаданных = СтрокаДереваМетаданных.Метаданные; + ОбъектМетаданных = Метаданные[РодительскийЭлемент.ПолноеИмяМетаданных][СтрокаДереваМетаданных.ПолноеИмяМетаданных]; + ИмяМетаданных = ОбъектМетаданных.ПолноеИмя(); + + Если Метаданные.РегистрыСведений.Содержит(ОбъектМетаданных) Тогда + + ТекстЗапроса = ПолучитьТекстЗапросаДляРегистраСведений(ИмяМетаданных, ОбъектМетаданных, ЕстьДопОтборы, СтрокаПолейДляВыборки); + Возврат ТекстЗапроса; + + ИначеЕсли Метаданные.РегистрыНакопления.Содержит(ОбъектМетаданных) + ИЛИ Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМетаданных) Тогда + + ТекстЗапроса = ПолучитьТекстЗапросаДляРегистра(ИмяМетаданных, ОбъектМетаданных, ЕстьДопОтборы, СтрокаПолейДляВыборки); + Возврат ТекстЗапроса; + + КонецЕсли; + + ЕстьОграничениеПоДатам = ЗначениеЗаполнено(ДатаНачала) Или ЗначениеЗаполнено(ДатаОкончания); + + Если НЕ ЗначениеЗаполнено(СтрокаПолейДляВыборки) Тогда + СтрокаПолейДляВыборки = "_.*"; + КонецЕсли; + + ТекстЗапроса = "ВЫБРАТЬ Разрешенные " + СтрокаПолейДляВыборки + " ИЗ " + ИмяМетаданных + " КАК _ "; + + // возможно нужно ограничение по датам установить + Если ЕстьОграничениеПоДатам Тогда + + Если ЕстьДопОтборы И + НЕ ИспользоватьОтборПоДатеДляВсехОбъектов Тогда + + Возврат ТекстЗапроса; + + КонецЕсли; + + ДопОграничениеПоДате = ""; + + // можно ли для данного объекта МД сторить ограничения по датам + Если Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда + + ДопОграничениеПоДате = ПолучитьСтрокуОграниченияПоДатеДляЗапроса(ОбъектМетаданных, "Документ"); + + ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМетаданных) + ИЛИ Метаданные.РегистрыНакопления.Содержит(ОбъектМетаданных) Тогда + + ДопОграничениеПоДате = ПолучитьСтрокуОграниченияПоДатеДляЗапроса(ОбъектМетаданных, "Регистр"); + + КонецЕсли; + + ТекстЗапроса = ТекстЗапроса + Символы.ПС + ДопОграничениеПоДате; + + КонецЕсли; + + Возврат ТекстЗапроса; + +КонецФункции + +Функция ПолучитьСтрокуОграниченияПоДатеДляЗапроса(Свойства, ИмяТипа) Экспорт + + ИтоговоеОграничениеПоДате = ""; + ИмяАлиасаТаблицы = "_"; + + Если НЕ (ИмяТипа = "Документ" ИЛИ ИмяТипа = "РегистрСведений" ИЛИ ИмяТипа = "Регистр") Тогда + Возврат ИтоговоеОграничениеПоДате; + КонецЕсли; + + ИмяПоляОграничения = ИмяАлиасаТаблицы + "." + ?(ИмяТипа = "Документ", "Дата", "Период"); + + Если ЗначениеЗаполнено(ДатаНачала) Тогда + + ИтоговоеОграничениеПоДате = " + | ГДЕ + | " + ИмяПоляОграничения + " >= &ДатаНачала"; + + КонецЕсли; + + Если ЗначениеЗаполнено(ДатаОкончания) Тогда + + Если ПустаяСтрока(ИтоговоеОграничениеПоДате) Тогда + + ИтоговоеОграничениеПоДате = " + | ГДЕ + | " + ИмяПоляОграничения + " <= &ДатаОкончания"; + + Иначе + + ИтоговоеОграничениеПоДате = ИтоговоеОграничениеПоДате + " + | И + | " + ИмяПоляОграничения + " <= &ДатаОкончания"; + + КонецЕсли; + + КонецЕсли; + + Возврат ИтоговоеОграничениеПоДате; + +КонецФункции + +Функция ПолучитьТекстЗапросаДляРегистраСведений(ИмяМетаданных, ОбъектМетаданных, ЕстьДопОтборы, СтрокаПолейДляВыборки = "") + + ЕстьОграничениеПоДатам = ЗначениеЗаполнено(ДатаНачала) Или ЗначениеЗаполнено(ДатаОкончания); + + ВыбираемВсеПоля = НЕ ЗначениеЗаполнено(СтрокаПолейДляВыборки) или + ОбъектМетаданных.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору и СтрокаПолейДляВыборки = "Регистратор"; + + Если ВыбираемВсеПоля Тогда + МенеджерНабораЗаписей = Неопределено; + Выполнить("МенеджерНабораЗаписей = РегистрыСведений."+ОбъектМетаданных.Имя); + + СтрокаПолейДляВыборки = " Различные " + ПолучитьСтрокуПолейОтбораРегистра(МенеджерНабораЗаписей); + Иначе + СтрокаПолейДляВыборки = " Различные " + СтрокаПолейДляВыборки; + КонецЕсли; + + ТекстЗапроса = "ВЫБРАТЬ Разрешенные " + СтрокаПолейДляВыборки + " ИЗ " + ИмяМетаданных + " КАК _ "; + + Если ОбъектМетаданных.ПериодичностьРегистраСведений = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда + Возврат ТекстЗапроса; + КонецЕсли; + + // 0 - отбор за период + // 1 - срез последних на дату окончания + // 2 - срез первых на дату начала + // 3 - срез последних на дату начала + отбор за период + + Если ТипВыгрузкиПериодическихРегистров = 0 Тогда + + Если ЕстьДопОтборы И + НЕ ИспользоватьОтборПоДатеДляВсехОбъектов Тогда + + Возврат ТекстЗапроса; + + КонецЕсли; + + ДопОграничениеПоДате = ПолучитьСтрокуОграниченияПоДатеДляЗапроса(ОбъектМетаданных, "РегистрСведений"); + + ТекстЗапроса = ТекстЗапроса + Символы.ПС + ДопОграничениеПоДате; + + ИначеЕсли ТипВыгрузкиПериодическихРегистров = 1 Тогда + + ТекстЗапроса = "ВЫБРАТЬ Разрешенные " + СтрокаПолейДляВыборки + " ИЗ " + ИмяМетаданных + ".СрезПоследних(&ДатаОкончания) КАК _ "; + + ИначеЕсли ТипВыгрузкиПериодическихРегистров = 2 Тогда + + ТекстЗапроса = "ВЫБРАТЬ Разрешенные " + СтрокаПолейДляВыборки + " ИЗ " + ИмяМетаданных + ".СрезПервых(&ДатаНачала) КАК _ "; + + ИначеЕсли ТипВыгрузкиПериодическихРегистров = 3 Тогда + + ТекстЗапроса = "ВЫБРАТЬ Разрешенные " + СтрокаПолейДляВыборки + " ИЗ " + ИмяМетаданных + ".СрезПоследних(&ДатаНачала) КАК _ + | + |Объединить все + | + |ВЫБРАТЬ " + СтрокаПолейДляВыборки + " ИЗ " + ИмяМетаданных + " КАК _ "; + + ДопОграничениеПоДате = ПолучитьСтрокуОграниченияПоДатеДляЗапроса(ОбъектМетаданных, "РегистрСведений"); + + ТекстЗапроса = ТекстЗапроса + Символы.ПС + ДопОграничениеПоДате; + + КонецЕсли; + + Возврат ТекстЗапроса; + +КонецФункции + +Функция ПолучитьТекстЗапросаДляРегистра(ИмяМетаданных, ОбъектМетаданных, ЕстьДопОтборы, СтрокаПолейДляВыборки = "") + + ЕстьОграничениеПоДатам = ЗначениеЗаполнено(ДатаНачала) Или ЗначениеЗаполнено(ДатаОкончания); + + ВыбираемВсеПоля = НЕ ЗначениеЗаполнено(СтрокаПолейДляВыборки) или СтрокаПолейДляВыборки = "Регистратор"; + + Если ВыбираемВсеПоля Тогда + МенеджерНабораЗаписей = Неопределено; + Если НЕ (Метаданные.РегистрыНакопления.Содержит(ОбъектМетаданных) + ИЛИ Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМетаданных)) Тогда + ВызватьИсключение "должны были передать либо регистр накопления либо регистр бухгалтерии"; + КонецЕсли; + + ИмяМенеджераРегистра = ?(Метаданные.РегистрыНакопления.Содержит(ОбъектМетаданных), "РегистрыНакопления", "РегистрыБухгалтерии"); + + Выполнить("МенеджерНабораЗаписей = "+ИмяМенеджераРегистра+"."+ОбъектМетаданных.Имя); + + СтрокаПолейДляВыборки = " Различные " + ПолучитьСтрокуПолейОтбораРегистра(МенеджерНабораЗаписей); + Иначе + СтрокаПолейДляВыборки = " РАЗЛИЧНЫЕ " + СтрокаПолейДляВыборки; + КонецЕсли; + + ТекстЗапроса = "ВЫБРАТЬ Разрешенные " + СтрокаПолейДляВыборки + " ИЗ " + ИмяМетаданных + " КАК _ "; + + // возможно нужно ограничение по датам установить + Если ЕстьОграничениеПоДатам Тогда + + Если ЕстьДопОтборы И + НЕ ИспользоватьОтборПоДатеДляВсехОбъектов Тогда + + Возврат ТекстЗапроса; + + КонецЕсли; + + ДопОграничениеПоДате = ПолучитьСтрокуОграниченияПоДатеДляЗапроса(ОбъектМетаданных, "Регистр"); + + ТекстЗапроса = ТекстЗапроса + Символы.ПС + ДопОграничениеПоДате; + + КонецЕсли; + + Возврат ТекстЗапроса; + +КонецФункции + +// Процедура рекурсивно обрабатывает дерево метаданных, образуя списки полной и вспомогательной выгрузки +// +// Параметры +// +Процедура СоставВыгрузки(ПересчитатьВыгружаемыеПоСсылке = Ложь) Экспорт + + СоставПолнойВыгрузки = Новый ТаблицаЗначений; + СоставПолнойВыгрузки.Колонки.Добавить("ОбъектМД"); + СоставПолнойВыгрузки.Колонки.Добавить("СтрокаДерева"); + СоставПолнойВыгрузки.Индексы.Добавить("ОбъектМД"); + + СоставВспомогательнойВыгрузки = Новый ТаблицаЗначений; + СоставВспомогательнойВыгрузки.Колонки.Добавить("ОбъектМД"); + СоставВспомогательнойВыгрузки.Колонки.Добавить("СтрокаДерева"); + СоставВспомогательнойВыгрузки.Индексы.Добавить("ОбъектМД"); + + Для Каждого СтрокаДЗ Из ДеревоМетаданных.Строки Цикл + ДобавитьВыгружаемыеОбъекты(СоставПолнойВыгрузки, СоставВспомогательнойВыгрузки, СтрокаДЗ); + КонецЦикла; + + мНаличиеВыгрузкиПодчиненныхОбъектов = СоставВспомогательнойВыгрузки.Количество() > 0; + + Если ПересчитатьВыгружаемыеПоСсылке Тогда + + ПересчитатьВыгружаемыеПоСсылке(СоставПолнойВыгрузки); + + КонецЕсли; + +КонецПроцедуры + +// Процедура рекурсивно обрабатывает строку дерева метаданных, образуя списки полной и вспомогательной выгрузки +// +// Параметры +// СоставПолнойВыгрузки - список полной выгрузки +// СоставВспомогательнойВыгрузки - список вспомогательной выгрузки +// СтрокаДЗ - обрабатываемая строка дерева метаданных +// +Процедура ДобавитьВыгружаемыеОбъекты(СоставПолнойВыгрузки, СоставВспомогательнойВыгрузки, СтрокаДЗ) + + Если (СтрокаДЗ.ЭлементОписания <> Неопределено) + И СтрокаДЗ.ЭлементОписания.Выгружаемый Тогда + + СтрокаДобавления = Неопределено; + + Если СтрокаДЗ.Выгружать Тогда + + СтрокаДобавления = СоставПолнойВыгрузки.Добавить(); + + КонецЕсли; + Если СтрокаДобавления <> Неопределено Тогда + СтрокаДобавления.ОбъектМД = СтрокаДЗ.ОбъектМД; + СтрокаДобавления.СтрокаДерева = СтрокаДЗ; + + КонецЕсли; + + Если СтрокаДЗ.ВыгружатьПриНеобходимости Тогда // нужно для иерархических метаданных и подгрузки родителей + + СтрокаДобавления = СоставВспомогательнойВыгрузки.Добавить(); + + КонецЕсли; + + Если СтрокаДобавления <> Неопределено Тогда + СтрокаДобавления.ОбъектМД = СтрокаДЗ.ОбъектМД; + СтрокаДобавления.СтрокаДерева = СтрокаДЗ; + + КонецЕсли; + + КонецЕсли; + + Для Каждого ПодчиненнаяСтрокаДЗ Из СтрокаДЗ.Строки Цикл + ДобавитьВыгружаемыеОбъекты(СоставПолнойВыгрузки, СоставВспомогательнойВыгрузки, ПодчиненнаяСтрокаДЗ); + КонецЦикла; + +КонецПроцедуры + +// Процедура определяет, какие типы объектов следует выгружать для сохранения ссылочной целостности +// +// Параметры +// Выгрузка - массив строк - совокупность выгружаемых объектов +Процедура ПересчитатьВыгружаемыеПоСсылке(Выгрузка) Экспорт + + // сброс всех флажков ВыгружатьПриНеобходимости + СтрокаКонфигурации = ДеревоМетаданных.Строки[0]; + СтрокаКонфигурации.ВыгружатьПриНеобходимости = 0; + ОбработкаИзмененияСостоянияВыгружатьПриНеобходимости(СтрокаКонфигурации); + #Если Клиент Тогда + Состояние("Выполняется поиск объектов метаданных, которые могут быть выгружены по ссылкам..."); + #КонецЕсли + + КоллекцияУжеИспользованныхЭлементовДЗ = Новый Соответствие; + + // обработка переданного набора объектов + Для Каждого Выгружаемый Из Выгрузка Цикл + + УстановкаСостоянияВыгружатьПриНеобходимости(Выгружаемый.СтрокаДерева, КоллекцияУжеИспользованныхЭлементовДЗ); + + КонецЦикла; + +КонецПроцедуры + +// Процедура определяет, на какие объект может ссылаться запись, соответствующая объекту метаданных, отображаемому +// данной строкой дерева метаданных и проставляет им признак ВыгружатьПриНеобходимости +// +// Параметры +// ЭлементДЗ - строка дерева метаданных +// +Процедура УстановкаСостоянияВыгружатьПриНеобходимости(ЭлементДЗ, КоллекцияУжеИспользованныхЭлементовДЗ) + Если КоллекцияУжеИспользованныхЭлементовДЗ.Получить(ЭлементДЗ) <> Неопределено Тогда + Возврат; + КонецЕсли; + КоллекцияУжеИспользованныхЭлементовДЗ.Вставить(ЭлементДЗ, ЭлементДЗ); + + ОбновитьСостояниеВыгружатьПриНеобходимости(ЭлементДЗ.Родитель); + Если ЭлементДЗ.Выгружать <> 1 И ЭлементДЗ.ВыгружатьПриНеобходимости <> 1 Тогда + Возврат; + КонецЕсли; + Если ЭлементДЗ.ОбъектМД = Неопределено Тогда + Возврат; + КонецЕсли; + + ВсеТипы = ПолучитьВсеТипы(ЭлементДЗ); + Для Каждого СсылочныйТип Из ВсеТипы Цикл + + ТипИОбъект = СсылочныеТипы.Получить(СсылочныйТип); + Если ТипИОбъект = Неопределено Тогда + + ВызватьИсключение("Внутреняя ошибка. Неполное заполнение структуры ссылочных типов - " + СсылочныйТип); + + КонецЕсли; + + ОбъектМД = ТипИОбъект; + СтрокаДЗ = ЭлементДЗПоОбъектуМД(ОбъектМД); + Если СтрокаДЗ = Неопределено Тогда + + ВызватьИсключение("Внутреняя ошибка. Неполное заполнение дерева метаданных. Отсутствует объект, образующий тип - " + СсылочныйТип); + + КонецЕсли; + + Если СтрокаДЗ.Выгружать = 1 + И СтрокаДЗ.ВыгружатьПриНеобходимости = 1 Тогда + + Продолжить; + + КонецЕсли; + + СтрокаДЗ.ВыгружатьПриНеобходимости = 1; + УстановкаСостоянияВыгружатьПриНеобходимости(СтрокаДЗ, КоллекцияУжеИспользованныхЭлементовДЗ); + + КонецЦикла; + +КонецПроцедуры + +// Функция возвращает массив типов, которые могут иметь поля записи объекта метаданных, соответствующего строке дерева +// +// Параметры +// ЭлементДЗ - строка дерева метаданных +// Возврат - массив потенциально используемых соответствующей записью типов +// +Функция ПолучитьВсеТипы(ЭлементДЗ) + + ОбъектМД = ЭлементДЗ.ОбъектМД; + Если ТипЗнч(ОбъектМД) <> Тип("ОбъектМетаданных") + И ТипЗнч(ОбъектМД) <> Тип("ОбъектМетаданныхКонфигурация") Тогда + + ВызватьИсключение("Внутреняя ошибка обработки выгрузки"); + + КонецЕсли; + + Возврат ПолучитьТипыИспользуемыеОМД(ОбъектМД, ЭлементДЗ.ЭлементОписания); + +КонецФункции + +// Функция возвращает строку дерева метаданных, соответствующую переданному объекту метаданных +// Поиск осуществляется по всему дереву метаданных +// +// Параметры +// ОбъектМД - описание метаданного +// Возврат - строка дерева метаданных +// +Функция ЭлементДЗПоОбъектуМД(ОбъектМД) + Для Каждого СтрокаДЗ Из ДеревоМетаданных.Строки Цикл + ЭлементДЗ = ЭлементДЗПоОбъектуМДИСтроке(СтрокаДЗ, ОбъектМД); + Если ЭлементДЗ <> Неопределено Тогда + Возврат ЭлементДЗ; + КонецЕсли; + КонецЦикла; + Возврат Неопределено; +КонецФункции + +// Функция возвращает массив типов, которые могут иметь поля записи объекта метаданных +// +// Параметры +// ОбъектМД - описание метаданного +// ЭлементОписания - описание класса объекта метаданного +// Возврат - массив потенциально используемых соответствующей записью типов +// +Функция ПолучитьТипыИспользуемыеОМД(ОбъектМД, ЭлементОписания) + + ВсеТипы = Новый Массив; + + Для Каждого Свойство Из ЭлементОписания.Свойства Цикл + + ЗначениеСвойства = ОбъектМД[Свойство.Значение]; + Если ТипЗнч(ЗначениеСвойства) = Тип("КоллекцияЗначенийСвойстваОбъектаМетаданных") И ЗначениеСвойства.Количество() > 0 Тогда + + Для Каждого СтрокаКоллекции Из ЗначениеСвойства Цикл + + СсылочныйТипКлючИЗначение = СоответствиеОбъектовМетаданныхИСсылочныхТипов[СтрокаКоллекции]; + + Если СсылочныйТипКлючИЗначение <> Неопределено Тогда + + ДобавитьВМассивЕслиУникальный(ВсеТипы, СсылочныйТипКлючИЗначение); + + КонецЕсли; + + КонецЦикла; + + ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("ОбъектМетаданных") Тогда + + Для Каждого СсылочныйТипКлючИЗначение Из СсылочныеТипы Цикл + + Если ЗначениеСвойства = СсылочныйТипКлючИЗначение.Значение Тогда + ДобавитьВМассивЕслиУникальный(ВсеТипы, СсылочныйТипКлючИЗначение.Ключ); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + Если КлассМДТипизированный(ЭлементОписания) Тогда + + ОписаниеТипа = ОбъектМД.Тип; + Для Каждого ОдинТип Из ОписаниеТипа.Типы() Цикл + + Если СсылочныйТип(ОдинТип) Тогда + ДобавитьВМассивЕслиУникальный(ВсеТипы, ОдинТип); + КонецЕсли; + + КонецЦикла; + + Иначе + + Если Метаданные.РегистрыСведений.Содержит(ОбъектМД) Или + Метаданные.РегистрыНакопления.Содержит(ОбъектМД) Или + Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМД) Или + Метаданные.РегистрыРасчета.Содержит(ОбъектМД) Тогда + + // какой-то из регистров, ищем в возможных регистраторах + Для Каждого ДокументМД Из Метаданные.Документы Цикл + + Если ДокументМД.Движения.Содержит(ОбъектМД) Тогда + + ДобавитьВМассивЕслиУникальный(ВсеТипы, ТипЗнч(Документы[ДокументМД.Имя].ПустаяСсылка())); + + КонецЕсли; + + КонецЦикла; + + // нужно для иерархических метаданных и подгрузки родителей + ИначеЕсли Метаданные.Справочники.Содержит(ОбъектМД) И ОбъектМД.Иерархический Тогда + ДобавитьВМассивЕслиУникальный(ВсеТипы, ТипЗнч(Справочники[ОбъектМД.Имя].ПустаяСсылка())); + ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМД) И ОбъектМД.Иерархический Тогда + ДобавитьВМассивЕслиУникальный(ВсеТипы, ТипЗнч(ПланыВидовХарактеристик[ОбъектМД.Имя].ПустаяСсылка())); + КонецЕсли; + + КонецЕсли; + + Для Каждого ПодчиненныйКласс Из ЭлементОписания.Строки Цикл + + Для Каждого ПодчиненныйОбъектМД Из ОбъектМД[ПодчиненныйКласс.Класс] Цикл + + ТипыПодчиненного = ПолучитьТипыИспользуемыеОМД(ПодчиненныйОбъектМД, ПодчиненныйКласс); + Для Каждого ОдинТип Из ТипыПодчиненного Цикл + ДобавитьВМассивЕслиУникальный(ВсеТипы, ОдинТип); + КонецЦикла; + + КонецЦикла; + + КонецЦикла; + + Возврат ВсеТипы; + +КонецФункции + +// Функция возвращает строку дерева метаданных, соответствующую переданному объекту метаданных +// Поиск осуществляется среди строк, подчиненных переданной +// +// Параметры +// СтрокаДЗ - строка дерева метаданных, от которй осуществляется поиск +// ОбъектМД - описание метаданного +// Возврат - строка дерева метаданных +// +Функция ЭлементДЗПоОбъектуМДИСтроке(СтрокаДЗ, ОбъектМД) + + Возврат СтрокаДЗ.Строки.Найти(ОбъектМД, "ОбъектМД", Истина); + +КонецФункции + +// Процедура добавляет в массив новый элемент, если он является уникальным +// +// Параметры +// Массив - исследуемый тип +// Элемент - добавляемый элемент +// +Процедура ДобавитьВМассивЕслиУникальный(Массив, Элемент) + + Если Массив.Найти(Элемент) = Неопределено Тогда + Массив.Добавить(Элемент); + КонецЕсли; + +КонецПроцедуры + +// Функция определяет, являются ли объекты данного класса метаданных типизированными +// +// Параметры +// Описание - Описание класса +// Возврат - Истина, если объекты данного класса метаданных типизированы, Ложь в противном случае +// +Функция КлассМДТипизированный(Описание) + + Для Каждого Свойство Из Описание.Свойства Цикл + Если Свойство.Значение = "Тип" Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + Возврат Ложь; + +КонецФункции + +Функция КлассМДИерархический(ОбъектМД) + Рез = Ложь; + Если ОбъектМД = Неопределено Тогда + + ИначеЕсли Метаданные.Справочники.Содержит(ОбъектМД) И ОбъектМД.Иерархический Тогда + Рез = Истина; + ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМД) И ОбъектМД.Иерархический Тогда + Рез = Истина; + КонецЕсли; + + Возврат Рез; +КонецФункции + +// Функция определяет, являются ли тип ссылочным +// +// Параметры +// Тип - исследуемый тип +// Возврат - Истина, если тип ссылочный, Ложь в противном случае +// +Функция СсылочныйТип(Тип) + + МетаданныеТипа = СсылочныеТипы.Получить(Тип); + Возврат МетаданныеТипа <> Неопределено; + +КонецФункции + + +Процедура СоздатьПоМетаданным(массивДанных) + + ОбработанныхКонстант = 0; + ОбработанныхНаборовЗаписей = 0; + + ОбъектыВыгруженныеСОшибками = Новый Соответствие; + СоставВыгрузки(); + + мВыгруженныеОбъекты = Новый ТаблицаЗначений; + мВыгруженныеОбъекты.Колонки.Добавить(ВернутьЗначениеСоответствия("Ссылка")); + мВыгруженныеОбъекты.Индексы.Добавить(ВернутьЗначениеСоответствия("Ссылка")); + + + Если ОбъектыВыгруженныеСОшибками = Неопределено Тогда + ОбъектыВыгруженныеСОшибками = Новый Соответствие; + КонецЕсли; + + //ОкноИсполнения = ПолучитьФорму("ОкноИсполнения"); + //ОкноИсполненияОбщееКоличество = 1; + //ОкноИсполненияОбработано = 0; + //ОкноИсполнения.Открыть(); + + Попытка + + Для Каждого СтрокаТаблицыВыгрузки Из СоставПолнойВыгрузки Цикл + + СтрокаДереваМетаданных = СтрокаТаблицыВыгрузки.СтрокаДерева; + + Если СтрокаДереваМетаданных.ЭлементОписания.Менеджер = Неопределено Тогда + ВызватьИсключение("Выгрузка данных. Внутренняя ошибка"); + КонецЕсли; + + Если Метаданные.Константы.Содержит(СтрокаДереваМетаданных.ОбъектМД) Тогда + + //ЗаписьКонстанты(СтрокаДереваМетаданных.ОбъектМД, ОбъектыВыгруженныеСОшибками); + + ИначеЕсли Метаданные.РегистрыСведений.Содержит(СтрокаДереваМетаданных.ОбъектМД) Или + Метаданные.РегистрыНакопления.Содержит(СтрокаДереваМетаданных.ОбъектМД) Или + Метаданные.РегистрыРасчета.Содержит(СтрокаДереваМетаданных.ОбъектМД) Тогда + + ЗаписьРегистра(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками,, массивДанных); + + ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(СтрокаДереваМетаданных.ОбъектМД) Тогда + + ЗаписьРегистра(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками, Истина, массивДанных); + + ИначеЕсли ТипЗнч(СтрокаДереваМетаданных.ЭлементОписания.Менеджер) = Тип("Строка") Тогда + // специальный случай для перерасчетов + //ЗаписьПерерасчета(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками); + + ИначеЕсли Метаданные.Последовательности.Содержит(СтрокаДереваМетаданных.ОбъектМД) Тогда + + //ЗаписьПоследовательности(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками); + + Иначе + ЗаписьДанныхОбъектногоТипа(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками, массивДанных); + + КонецЕсли; + + #Если Клиент Тогда + ОбработкаПрерыванияПользователя(); + #КонецЕсли + + КонецЦикла; + + //ДополнительныеОбъектыДляВыгрузки.Сортировать("ИмяОбъектаДляЗапроса"); + ТекущийМассивСсылок = Новый Массив(); + ТекущееИмяЗапроса = ""; + + + //Для Каждого СтрокаТаблицыВыгрузки Из ДополнительныеОбъектыДляВыгрузки Цикл + // + // Если НЕ ЗначениеЗаполнено(СтрокаТаблицыВыгрузки.Объект) + // ИЛИ НЕ ЗначениеЗаполнено(СтрокаТаблицыВыгрузки.ИмяОбъектаДляЗапроса) Тогда + // + // Продолжить; + // + // КонецЕсли; + // + // Если ТекущееИмяЗапроса <> СтрокаТаблицыВыгрузки.ИмяОбъектаДляЗапроса Тогда + // + // ВыгрузитьДанныеМассиваСсылок(ТекущийМассивСсылок, ТекущееИмяЗапроса, ОбъектыВыгруженныеСОшибками); + // + // ТекущийМассивСсылок = Новый массив(); + // ТекущееИмяЗапроса = СтрокаТаблицыВыгрузки.ИмяОбъектаДляЗапроса; + // + // КонецЕсли; + // + // ТекущийМассивСсылок.Добавить(СтрокаТаблицыВыгрузки.Объект); + // + //КонецЦикла; + + //ВыгрузитьДанныеМассиваСсылок(ТекущийМассивСсылок, ТекущееИмяЗапроса, ОбъектыВыгруженныеСОшибками); + + Исключение + //ОкноИсполнения.Закрыть(); + ВызватьИсключение; + КонецПопытки; + + //ОкноИсполнения.Закрыть(); + #Если Клиент Тогда + Состояние(); + #КонецЕсли + +КонецПроцедуры + +Процедура ЗаписьДанныхОбъектногоТипа(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками, массивДанных) + + ПодзаголовокОкнаИсполнения = СтрокаДереваМетаданных.ОбъектМД.ПолноеИмя(); + + ОкноИсполненияОбщееКоличество = 1; + //ОкноИсполненияОбработано = 0; + + РезультатЗапроса = ПолучитьРезультатЗапросаСОграничениями(СтрокаДереваМетаданных); + + ЗапросИЗапись(РезультатЗапроса, Истина, ОбъектыВыгруженныеСОшибками, массивДанных); + +КонецПроцедуры + +Функция ПолучитьРезультатЗапросаСОграничениями(СтрокаДереваМетаданных) + + СКД = ПодготовитьКомпоновщикДляВыгрузки(СтрокаДереваМетаданных); + + ТаблицаЗначений = Новый ТаблицаЗначений; + + Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; + Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); + Компоновщик.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию); + + ПолеГруппировки = Компоновщик.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + + СистемныеПоля = Новый ПолеКомпоновкиДанных("СистемныеПоля"); + ПараметрыДанных = Новый ПолеКомпоновкиДанных("ПараметрыДанных"); + Для Каждого ДоступноеПоле Из Компоновщик.Настройки.ДоступныеПоляВыбора.Элементы Цикл + Если ДоступноеПоле.Поле = СистемныеПоля Или ДоступноеПоле.Поле = ПараметрыДанных Тогда + Продолжить; + КонецЕсли; + ПолеНабора = СКД.НаборыДанных[0].Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); + ПолеНабора.Поле = Строка(ДоступноеПоле.Поле); + ПолеНабора.ПутьКДанным = Строка(ДоступноеПоле.Поле); + Если ДоступноеПоле.Папка Тогда + ПолеГруппировкиПапки = Компоновщик.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + Для Каждого ВложенныйЭлемент Из ДоступноеПоле.Элементы Цикл + ПолеНабора = СКД.НаборыДанных[0].Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); + ПолеНабора.Поле = Строка(ВложенныйЭлемент.Поле); + ПолеНабора.ПутьКДанным = Строка(ВложенныйЭлемент.Поле); + ВыбранноеПоле = ПолеГруппировкиПапки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = ВложенныйЭлемент.Поле; + КонецЦикла; + Иначе + ВыбранноеПоле = ПолеГруппировки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПоле.Поле = ДоступноеПоле.Поле; + КонецЕсли; + + КонецЦикла; + + //#Если Клиент Тогда + // + //НастройкиКомпоновщикаXDTO = СериализаторXDTO.ЗаписатьXDTO(Компоновщик.Настройки); + //СКДXDTO = СериализаторXDTO.ЗаписатьXDTO(СКД); + //СКДXDTO.defaultSettings = НастройкиКомпоновщикаXDTO; + //СКД = СериализаторXDTO.ПрочитатьXDTO(СКДXDTO); + // + //КонструкторСКД = Новый КонструкторСхемыКомпоновкиДанных(СКД); + //КонструкторСКД.Редактировать(ПолучитьФорму("Форма")); + //#КонецЕсли + + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Компоновщик.ПолучитьНастройки(),,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); + Запрос = Новый Запрос(МакетКомпоновки.НаборыДанных.ОсновнойЗапрос.Запрос); + ПараметрыЗапроса = Запрос.НайтиПараметры(); + Для Каждого Параметр Из ПараметрыЗапроса Цикл + ПараметрМакетаСКД = МакетКомпоновки.ЗначенияПараметров.Найти(Параметр.Имя); + Запрос.УстановитьПараметр(Параметр.Имя, ПараметрМакетаСКД.Значение); + КонецЦикла; + РезультатЗапроса = Запрос.Выполнить(); + //ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + //ПроцессорКомпоновки.Инициализировать(МакетКомпоновки); + //ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; + //ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений); + //ПроцессорВывода.Вывести(ПроцессорКомпоновки); + + //Возврат ТаблицаЗначений; + //ПостроительОтчета.Выполнить(); + //РезультатЗапроса = ПостроительОтчета.Результат; + // + Возврат РезультатЗапроса; + +КонецФункции + +// Процедура исполняет переданный запрос и записывает полученные через запрос объекты +// +// Параметры +// Запрос - запрос для исполнения, результат содержит выборку объектов для записи +// ЗаписьXML - объект, через которых происходит запись объектов ИБ +// ЗапросВерхнегоУровня - признак необходимости анимации процесса +// +Процедура ЗапросИЗапись(РезультатЗапроса, ЗапросВерхнегоУровня = Ложь, ОбъектыВыгруженныеСОшибками, массивДанных) + + // универсальная процедура выгрузки ссылочных объектов процедура + ОбработкаРезультатаЗапроса(РезультатЗапроса, Истина, ЗапросВерхнегоУровня, ОбъектыВыгруженныеСОшибками, массивДанных, МассивИмен); + +КонецПроцедуры + +// Процедура записывает содержащиеся в выборке результата запроса объекты и необходимые "по ссылке" объекты ИБ +// +// Параметры +// РезультатЗапроса - результат запроса +// ЗаписьXML - объект, через которых происходит запись объектов ИБ +// ЭтоЗапросПоОбъекту - если Истина, выборка должна содержать объекты, на которые может быть ссылка, +// если Ложь, выгружать, как объект не нужно, только обработать возможные ссылки на др. объекты ИБ +// +Процедура ОбработкаРезультатаЗапроса(РезультатЗапроса, ЭтоЗапросПоОбъекту = Ложь, + ЗапросВерхнегоУровня = Ложь, ОбъектыВыгруженныеСОшибками = Неопределено, массивДанных, МассивИмен) + + #Если Клиент Тогда + ОбработкаПрерыванияПользователя(); + #КонецЕсли + + ВыборкаИзРезультатовЗапроса = РезультатЗапроса.Выбрать(); + Если ЗапросВерхнегоУровня Тогда + + ОкноИсполненияОбщееКоличество = ВыборкаИзРезультатовЗапроса.Количество(); + //ОкноИсполнения.ОбновитьВерхнююГраницу(); + + КонецЕсли; + + ВсегоОбработаноОбъектов = 0; + ОбработаноОбъектов = 0; + + Пока ВыборкаИзРезультатовЗапроса.Следующий() Цикл + + ДанныеОбъекта = ВыборкаИзРезультатаЗапросаВСтруктуру(РезультатЗапроса, ВыборкаИзРезультатовЗапроса); + + Если ЭтоЗапросПоОбъекту Тогда + + // выгрузка ссылочных объектов + Ссылка = ДанныеОбъекта[ВернутьЗначениеСоответствия("Ссылка")]; + + Если СсылкаВыгружена(Ссылка) Тогда + + Если ЗапросВерхнегоУровня Тогда + + ОбработаноОбъектов = ОбработаноОбъектов + 1; + Если ОбработаноОбъектов % 100 = 0 Тогда + //ОкноИсполненияОбработано = ОкноИсполненияОбработано + ОбработаноОбъектов; + ОбработаноОбъектов = 0; + КонецЕсли; + + КонецЕсли; + Продолжить; + + КонецЕсли; + + ДобавитьСсылкуКВыгруженным(Ссылка); + + ВсегоОбработаноОбъектов = ВсегоОбработанныхЗаписей(); + + ПоказатьПользователюИнформациюОСостоянииВыгрузки(ВсегоОбработаноОбъектов, ОбъектыВыгруженныеСОшибками); + + КонецЕсли; + + Если мНаличиеВыгрузкиПодчиненныхОбъектов Тогда + + // перебираем колонки запроса в поисках ссылочных значений, которые, возможно, нужно выгрузить + Для Каждого КолонкаЗапроса Из РезультатЗапроса.Колонки Цикл + + ЗначениеКолонки = ДанныеОбъекта[КолонкаЗапроса.Имя]; + + Если ТипЗнч(ЗначениеКолонки) = мТипРезультатЗапроса Тогда + + ОбработкаРезультатаЗапроса(ЗначениеКолонки, , , ОбъектыВыгруженныеСОшибками, массивДанных, МассивИмен); + + Иначе + + ЗаписатьЗначениеПриНеобходимости(ЗначениеКолонки, ОбъектыВыгруженныеСОшибками, массивДанных); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Если ЭтоЗапросПоОбъекту Тогда + + //Объект = Ссылка.ПолучитьОбъект(); + + Попытка + + //ВыполнитьВспомогательныеДействияДляЗаписиXML(ВсегоОбработаноОбъектов); + + //ЗаписатьXML(ЗаписьXML, Объект); + + //НоваяСтрокаТаблицыДанных = ТаблицаДанных.Добавить(); + //НоваяСтрокаТаблицыДанных.Ссылка = Ссылка; + //ПриИзмененииСсылки(НоваяСтрокаТаблицыДанных); + + ОписательЭлемента = СоздатьОписательЭлементаПоСсылке(Ссылка, МассивИмен, ДанныеОбъекта); + //ОписательЭлемента = СоздатьОписательЭлемента(); + //ОписательЭлемента.Ссылка = Ссылка; + //ОписательЭлемента.ИмяПеременной = УникальноеИмяПеременнойПоСсылке(Ссылка, МассивИмен); + //МетаСсылка = Ссылка.Метаданные(); + //ОписательЭлемента.Метаданное = МетаСсылка; + //ОписательЭлемента.РежимПоиска = "Перем"; + //Если Метаданные.Справочники.Содержит(МетаСсылка) И Ссылка.ЭтоГруппа Тогда + // ОписательЭлемента.РежимСоздания = "Группа"; + //Иначе + // ОписательЭлемента.РежимСоздания = ""; + //КонецЕсли; + МассивДанных.Добавить(ОписательЭлемента); + + Если ВыгружатьСДокументомЕгоДвижения + И Метаданные.Документы.Содержит(Ссылка.Метаданные()) Тогда + + Объект = Ссылка.ПолучитьОбъект(); + // выгрузка движений документа + Для Каждого Движение Из Объект.Движения Цикл + + Движение.Прочитать(); + + Если мНаличиеВыгрузкиПодчиненныхОбъектов + И Движение.Количество() > 0 Тогда + + ТипРегистра = Тип(Движение); + + МассивКолонок = мСоответствиеКолонокДвижений.Получить(ТипРегистра); + + Если МассивКолонок = Неопределено Тогда + + ТаблицаДвижений = Движение.Выгрузить(); + РегистрБухгалтерии = Метаданные.РегистрыБухгалтерии.Содержит(Движение.Метаданные()); + МассивКолонок = ПолучитьМассивКолонокДвижения(ТаблицаДвижений, РегистрБухгалтерии); + мСоответствиеКолонокДвижений.Вставить(ТипРегистра, МассивКолонок); + + КонецЕсли; + + ВыгрузитьПодчиненныеЗначенияНабора(Движение, МассивКолонок, ОбъектыВыгруженныеСОшибками, массивДанных); + + КонецЕсли; + + //ЗаписатьXML(ЗаписьXML, Движение); + + ОписательЭлемента = СоздатьОписательЭлементаПоНаборуЗаписей(Движение, МассивИмен); + МассивДанных.Добавить(ОписательЭлемента); + //Мд = Движение.Метаданные(); + ////Для каждого ЗаписьНабора Из Движение Цикл + // ОписательЭлемента = СоздатьОписательЭлемента(); + // ОписательЭлемента.Реквизиты = Движение; //ЗаписьНабора; + // ОписательЭлемента.Ссылка = Неопределено; + // ОписательЭлемента.Метаданное = Мд; + // МассивДанных.Добавить(ОписательЭлемента); + ////КонецЦикла; + + КонецЦикла; + + КонецЕсли; + + Исключение + + СтрокаОписанияОшибки = ОписаниеОшибки(); + //не смогли записать в XML + // возможно проблема с недопустимыми символами в XML + //Если ТолькоПроверкаНедопустимыхСимволов Тогда + // + // Если ОбъектыВыгруженныеСОшибками.Получить(Ссылка) = Неопределено Тогда + // ОбъектыВыгруженныеСОшибками.Вставить(Ссылка, СтрокаОписанияОшибки); + // КонецЕсли; + // + //Иначе + + ИтоговаяСтрокаСообщения = "Ошибка при выгрузке объекта: " + Строка(Ссылка) + " Тип: " + Строка(ТипЗнч(Ссылка)) + " + |" + СтрокаОписанияОшибки; + + Сообщить(ИтоговаяСтрокаСообщения); + + ВызватьИсключение ИтоговаяСтрокаСообщения; + + //КонецЕсли; + + КонецПопытки; + + КонецЕсли; + + Если ЗапросВерхнегоУровня Тогда + + ОбработаноОбъектов = ОбработаноОбъектов + 1; + Если ОбработаноОбъектов % 100 = 0 Тогда + //ОкноИсполненияОбработано = ОкноИсполненияОбработано + ОбработаноОбъектов; + ОбработаноОбъектов = 0; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +// ОкноИсполненияОбработано = ОкноИсполненияОбработано + ОбработаноОбъектов; + +КонецПроцедуры + +Функция СсылкаВыгружена(Ссылка) + + Возврат мВыгруженныеОбъекты.Найти(Ссылка, ВернутьЗначениеСоответствия("Ссылка")) <> Неопределено; + +КонецФункции + +Процедура ДобавитьСсылкуКВыгруженным(Ссылка) + + СтрокаДобавления = мВыгруженныеОбъекты.Добавить(); + СтрокаДобавления[ВернутьЗначениеСоответствия("Ссылка")] = Ссылка; + +КонецПроцедуры + +// Функция определяет общее количество произведенных записей констант + объектного типа + наборов записей +// +// Возврат - общее количество произведенных записей +Функция ВсегоОбработанныхЗаписей() + Возврат 0; + Возврат мВыгруженныеОбъекты.Количество() + ОбработанныхКонстант + ОбработанныхНаборовЗаписей; + +КонецФункции + +// Процедура анализирует необходимость записи объекта "по ссылке" и осуществляет запись +// +// Параметры +// АнализируемоеЗначение - анализируемое значение +// ЗаписьXML - объект, через которых происходит запись объектов ИБ +// +Процедура ЗаписатьЗначениеПриНеобходимости(АнализируемоеЗначение, ОбъектыВыгруженныеСОшибками, массивДанных) + + Если Не ЗначениеЗаполнено(АнализируемоеЗначение) Тогда + Возврат; + КонецЕсли; + + ОбъектМД = СсылочныеТипы.Получить(ТипЗнч(АнализируемоеЗначение)); + + Если ОбъектМД = Неопределено Тогда + Возврат; // это не ссылка + КонецЕсли; + + Если СсылкаВыгружена(АнализируемоеЗначение) Тогда + Возврат; // объект уже был выгружен + КонецЕсли; + + КлассМДИерархический = КлассМДИерархический(ОбъектМД); // нужно для иерархических метаданных и подгрузки родителей + Если Не КлассМДИерархический Тогда + // Проверка того, что данный тип входит в список выгружаемых дополнительно + СтрокаТаблицы = СоставПолнойВыгрузки.Найти(ОбъектМД, "ОбъектМД"); + Если СтрокаТаблицы <> Неопределено Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + СтрокаТаблицы = СоставВспомогательнойВыгрузки.Найти(ОбъектМД, "ОбъектМД"); + Если СтрокаТаблицы <> Неопределено Тогда + + ДопЗапрос = Новый Запрос("ВЫБРАТЬ * ИЗ " + СтрокаТаблицы.СтрокаДерева.ЭлементОписания.ДляЗапроса + ОбъектМД.Имя + + " КАК ТаблицаОбъекта_" + " ГДЕ Ссылка = &Ссылка"); + ДопЗапрос.УстановитьПараметр("Ссылка", АнализируемоеЗначение); + РезультатЗапроса = ДопЗапрос.Выполнить(); + ЗапросИЗапись(РезультатЗапроса, , ОбъектыВыгруженныеСОшибками, массивДанных); + + КонецЕсли; + +КонецПроцедуры + +Функция ПолучитьМассивКолонокДвижения(ТаблицаДвижений, РегистрБухгалтерии = Ложь) + + МассивКолонок = Новый Массив(); + Для Каждого КолонкаТаблицы Из ТаблицаДвижений.Колонки Цикл + + Если КолонкаТаблицы.Имя = "МоментВремени" + ИЛИ Найти(КолонкаТаблицы.Имя, "ВидСубконтоДт") = 1 + ИЛИ Найти(КолонкаТаблицы.Имя, "ВидСубконтоКт") = 1 Тогда + + Продолжить; + + КонецЕсли; + + Если Найти(КолонкаТаблицы.Имя, "СубконтоДт") = 1 И РегистрБухгалтерии Тогда + + Если МассивКолонок.Найти("СубконтоДт") = Неопределено Тогда + МассивКолонок.Добавить("СубконтоДт"); + Конецесли; + + Продолжить; + + КонецЕсли; + + Если Найти(КолонкаТаблицы.Имя, "СубконтоКт") = 1 И РегистрБухгалтерии Тогда + + Если МассивКолонок.Найти("СубконтоКт") = Неопределено Тогда + МассивКолонок.Добавить("СубконтоКт"); + КонецЕсли; + + Продолжить; + + КонецЕсли; + + МассивКолонок.Добавить(КолонкаТаблицы.Имя); + + КонецЦикла; + + Возврат МассивКолонок; + +КонецФункции + +Процедура ВыгрузитьПодчиненныеЗначенияНабора(Движение, МассивКолонок, ОбъектыВыгруженныеСОшибками, массивДанных) + + Для Каждого ЗаписьИзНабора Из Движение Цикл + + Для Каждого Колонка Из МассивКолонок Цикл + + Если Колонка = "СубконтоДт" + ИЛИ Колонка = "СубконтоКт" Тогда + + Значение = ЗаписьИзНабора[Колонка]; + Для Каждого КлючИЗначение Из Значение Цикл + + Если ЗначениеЗаполнено(КлючИЗначение.Значение) Тогда + ЗаписатьЗначениеПриНеобходимости(КлючИЗначение.Значение, ОбъектыВыгруженныеСОшибками, массивДанных); + КонецЕсли; + + КонецЦикла; + + Иначе + + СохраненноеЗначение = ЗаписьИзНабора[Колонка]; + ЗаписатьЗначениеПриНеобходимости(СохраненноеЗначение, ОбъектыВыгруженныеСОшибками, массивДанных); + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Процедура записывает наборы записей регистра (накопления, бухгалтерии...) +// +// Параметры +// ЗаписьXML - объект, через которых происходит запись объектов ИБ +// СтрокаДереваМетаданных - строка дерева метаданных, соответствующая регистру +// +Процедура ЗаписьРегистра(СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками, РегистрБухгалтерии = Ложь, массивДанных) + + ПодзаголовокОкнаИсполнения = СтрокаДереваМетаданных.ОбъектМД.ПолноеИмя(); + ОкноИсполненияОбщееКоличество = 1; + //ОкноИсполненияОбработано = 0; + + МенеджерНабораЗаписей = СтрокаДереваМетаданных.ЭлементОписания.Менеджер[СтрокаДереваМетаданных.ОбъектМД.Имя]; + + ИмяТаблицыДляЗапроса = СтрокаДереваМетаданных.ЭлементОписания.ДляЗапроса; + + ЗаписьЧерезНаборЗаписей(МенеджерНабораЗаписей, ИмяТаблицыДляЗапроса, + СтрокаДереваМетаданных.ОбъектМД.Имя, СтрокаДереваМетаданных, ОбъектыВыгруженныеСОшибками, РегистрБухгалтерии, массивДанных); + +КонецПроцедуры + +// Процедура записывает данные, доступ к которым осуществляется через набор записей +// +// Параметры +// ЗаписьXML - объект, через которых происходит запись объектов ИБ +// СтрокаДереваМетаданных - строка дерева метаданных, соответствующая регистру +// +Процедура ЗаписьЧерезНаборЗаписей(МенеджерНабораЗаписей, ДляЗапроса, ИмяОбъекта, + СтрокаДереваМетаданных = Неопределено, ОбъектыВыгруженныеСОшибками, РегистрБухгалтерии = Ложь, массивДанных) + + // получить состав колонок записи регистра и проверить наличие хотя бы одной записи + Если ДляЗапроса = "РегистрБухгалтерии." Тогда + ИмяТаблицыДляЗапроса = ДляЗапроса + ИмяОбъекта + ".ДвиженияССубконто"; + Иначе + ИмяТаблицыДляЗапроса = ДляЗапроса + ИмяОбъекта; + КонецЕсли; + + Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ " + ИмяТаблицыДляЗапроса + " КАК ТаблицаОбъекта_" + ИмяОбъекта); + РезультатЗапросаПоСоставу = Запрос.Выполнить(); + Если РезультатЗапросаПоСоставу.Пустой() Тогда + Возврат; + КонецЕсли; + + ТаблицаДвижений = РезультатЗапросаПоСоставу.Выгрузить(); + МассивКолонок = ПолучитьМассивКолонокДвижения(ТаблицаДвижений, РегистрБухгалтерии); + + // выгрузка регистров осуществляется через его набор записей + НаборЗаписей = МенеджерНабораЗаписей.СоздатьНаборЗаписей(); + + СтрокаПолейОтбора = ПолучитьСтрокуПолейОтбораРегистра(МенеджерНабораЗаписей); + + СКД = ПодготовитьКомпоновщикДляВыгрузки(СтрокаДереваМетаданных, СтрокаПолейОтбора); + //ПостроительОтчета.Выполнить(); + РезультатЗапросаПоЗначениямОтбора = ПолучитьРезультатЗапросаСКД(СКД); + ВыборкаИзРезультата = РезультатЗапросаПоЗначениямОтбора.Выбрать(); + + ОкноИсполненияОбщееКоличество = ВыборкаИзРезультата.Количество(); + //ОкноИсполненияОбработано = 0; + //ОкноИсполнения.ОбновитьВерхнююГраницу(); + + КоличествоПолейОтбора = НаборЗаписей.Отбор.Количество(); + + // читаем наборы записей с различным составом отбора и записываем их + Пока ВыборкаИзРезультата.Следующий() Цикл + + // Пересоздание набора, чтоб чтоб разные экземпляры объекта в МассивДанных попали + НаборЗаписей = МенеджерНабораЗаписей.СоздатьНаборЗаписей(); + Отбор = НаборЗаписей.Отбор; + + // Отбор устанавливаем для регистров, у которых есть хотя бы один отбор (измерение) + Если КоличествоПолейОтбора <> 0 Тогда + + Для Каждого Колонка Из РезультатЗапросаПоЗначениямОтбора.Колонки Цикл + Отбор[Колонка.Имя].Значение = ВыборкаИзРезультата[Колонка.Имя]; + Отбор[Колонка.Имя].ВидСравнения = ВидСравнения.Равно; + Отбор[Колонка.Имя].Использование = Истина; + КонецЦикла; + + КонецЕсли; + + НаборЗаписей.Прочитать(); + + Если мНаличиеВыгрузкиПодчиненныхОбъектов Тогда + + // проверяем все записанные в наборе значения на необходимость записи "по ссылке" + ВыгрузитьПодчиненныеЗначенияНабора(НаборЗаписей, МассивКолонок, ОбъектыВыгруженныеСОшибками, массивДанных); + + КонецЕсли; + + ВсегоОбработаноОбъектов = ВсегоОбработанныхЗаписей(); + Попытка + + //ВыполнитьВспомогательныеДействияДляЗаписиXML(ВсегоОбработаноОбъектов, ЗаписьXML, ТолькоПроверкаНедопустимыхСимволов); + + //ЗаписатьXML(ЗаписьXML, НаборЗаписей); + + ОписательЭлемента = СоздатьОписательЭлементаПоНаборуЗаписей(НаборЗаписей, МассивИмен); + МассивДанных.Добавить(ОписательЭлемента); + //Мд = НаборЗаписей.Метаданные(); + ////Для каждого ЗаписьНабора Из НаборЗаписей Цикл + // ОписательЭлемента = СоздатьОписательЭлемента(); + // ОписательЭлемента.Реквизиты = НаборЗаписей; //ЗаписьНабора; + // ОписательЭлемента.Ссылка = Неопределено; + // ОписательЭлемента.Метаданное = Мд; + // МассивДанных.Добавить(ОписательЭлемента); + ////КонецЦикла; + + Исключение + + СтрокаОписанияОшибки = ОписаниеОшибки(); + //не смогли записать в XML + // возможно проблема с недопустимыми символами в XML + //Если ТолькоПроверкаНедопустимыхСимволов Тогда + // + // НовыйНабор = МенеджерНабораЗаписей.СоздатьНаборЗаписей(); + // + // Для Каждого СтрокаОтбора Из НаборЗаписей.Отбор Цикл + // + // СтрокаОтбораФормы = НовыйНабор.Отбор.Найти(СтрокаОтбора.Имя); + // + // Если СтрокаОтбораФормы = Неопределено Тогда + // Продолжить; + // КонецЕсли; + // + // СтрокаОтбораФормы.Использование = СтрокаОтбора.Использование; + // СтрокаОтбораФормы.ВидСравнения = СтрокаОтбора.ВидСравнения; + // СтрокаОтбораФормы.Значение = СтрокаОтбора.Значение; + // + // КонецЦикла; + // + // ОбъектыВыгруженныеСОшибками.Вставить(НовыйНабор, СтрокаОписанияОшибки); + // + //Иначе + + ИтоговаяСтрокаСообщения = "Ошибка при выгрузке набора записей регистра: " + ДляЗапроса + ИмяОбъекта + " + |" + СтрокаОписанияОшибки; + + Сообщить(ИтоговаяСтрокаСообщения); + + ВызватьИсключение ИтоговаяСтрокаСообщения; + + //КонецЕсли; + + КонецПопытки; + + ОбработанныхНаборовЗаписей = ОбработанныхНаборовЗаписей + 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"); + +КонецПроцедуры + +//Функция возвращает полученное значение из списка соответствия в зависимости от языка +Функция ВернутьЗначениеСоответствия(ИскомоеЗначение) + ЗначениеСоответствия = ИскомоеЗначение; + Если ВариантВстроенногоЯзыкаАнглийский Тогда + ЭлементСоответствия = АнглийскоеСоответствие.Получить(ИскомоеЗначение); + Если НЕ ЭлементСоответствия = Неопределено Тогда + ЗначениеСоответствия = ЭлементСоответствия + КонецЕсли; + КонецЕсли; + Возврат ЗначениеСоответствия; +КонецФункции + + +мНаличиеВыгрузкиПодчиненныхОбъектов = Ложь; +мТипРезультатЗапроса = Тип("РезультатЗапроса"); +мСоответствиеКолонокДвижений = Новый Соответствие; + +ЗаполнитьСоответствие(); \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\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.xml" "b/lib/CF/83xddNoSync/DataProcessors/\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.xml" new file mode 100644 index 000000000..a6c2ddd4f --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\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.xml" @@ -0,0 +1,22 @@ + + +
+ + УправляемаяФорма + + + ru + Управляемая форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\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/lib/CF/83xddNoSync/DataProcessors/\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" new file mode 100644 index 000000000..5bc67f154 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\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" @@ -0,0 +1,926 @@ + +
+ false + useIfNecessary + + false + + + + + + + + + ПриСозданииНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа настройки</v8:content> + </v8:item> + + + + ru + Группа настройки + + + Horizontal + None + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа страницы</v8:content> + </v8:item> + + + + ru + Группа страницы + + + + + + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Metadata</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Метаданные</v8:content> + </v8:item> + + + + ru + Группа метаданные + + + + + + Horizontal + + + + Объект.ВыгружатьКод + Auto + + + + + Объект.ВыгружатьСсылку + Auto + + + + + Объект.СвязьПоГуид + Auto + + + + + Объект.ТолькоСоздание + Auto + + + + + Объект.ОбменДанными + Auto + + + + + Объект.ВариантВстроенногоЯзыкаАнглийский + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Script variant English</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Язык программирования английский</v8:content> + </v8:item> + + Auto + + + + + + + Horizontal + None + false + + + + Tree + false + false + true + ExpandAllLevels + true + true + Объект.ДеревоМетаданных + Объект.ДеревоМетаданных.ИндексКартинки + + RowsPicture.png + false + + None + None + None + + + false + + + + + + + + ДеревоМетаданных + SearchStringRepresentation + + + + + + + ДеревоМетаданных + ViewStatusRepresentation + + + + + + + ДеревоМетаданных + SearchControl + + + + + + ДеревоМетаданныхПриАктивизацииСтроки + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа выбора объектов</v8:content> + </v8:item> + + + + ru + Группа выбора объектов + + + InCell + + + + Объект.ДеревоМетаданных.Выгружать + EnterOnInput + false + true + + + + ДеревоМетаданныхВыгружатьПриИзменении + + + + Объект.ДеревоМетаданных.ПолноеИмяМетаданных + true + EnterOnInput + + + + + + + Объект.ДеревоМетаданных.ВыгружатьПриНеобходимости + Right + EnterOnInput + true + + + + ДеревоМетаданныхВыгружатьПриНеобходимостиПриИзменении + + + +
+ + Tree + true + ExpandAllLevels + true + true + Объект.КомпоновщикНастроекКомпоновкиДанных.Settings.Filter + None + None + None + All + false + + + + + + + + + + КомпоновщикОтбор + SearchStringRepresentation + + + + + + + КомпоновщикОтбор + ViewStatusRepresentation + + + + + + + КомпоновщикОтбор + SearchControl + + + + + + КомпоновщикОтборПриОкончанииРедактирования + КомпоновщикОтборПослеУдаления + +
+
+
+
+
+ + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Table of data</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Таблица данных</v8:content> + </v8:item> + + + + ru + Группа таблица данных + + + + + + List + true + true + true + Объект.ТаблицаДанных + None + None + None + + + + + + + + + + + ТаблицаДанных + SearchStringRepresentation + + + + + + + ТаблицаДанных + ViewStatusRepresentation + + + + + + + ТаблицаДанных + SearchControl + + + + + + + EnterOnInput + + + + + Объект.ТаблицаДанных.Ссылка + EnterOnInput + + + + ТаблицаДанныхСсылкаПриИзменении + + + + Объект.ТаблицаДанных.Метаданное + EnterOnInput + + + + + Объект.ТаблицаДанных.ИмяПеременной + EnterOnInput + + + + + Объект.ТаблицаДанных.ВыгружатьКод + EnterOnInput + Auto + + + + + Объект.ТаблицаДанных.РежимПоиска + EnterOnInput + + + + + Объект.ТаблицаДанных.РежимСоздания + EnterOnInput + + + + +
+
+
+ + + <v8:item> + <v8:lang>en</v8:lang> + <v8:content>Users of database</v8:content> + </v8:item> + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пользователи ИБ</v8:content> + </v8:item> + + + + ru + Группа пользователи ИБ + + + + + + List + true + true + true + Объект.ПользователиИБ + None + None + None + + + + + + + ПользователиИнфБазы + SearchStringRepresentation + + + + + + + ПользователиИнфБазы + ViewStatusRepresentation + + + + + + + ПользователиИнфБазы + SearchControl + + + + + + + Объект.ПользователиИБ.LineNumber + EnterOnInput + + + + + Объект.ПользователиИБ.Имя + EnterOnInput + + + + + Объект.ПользователиИБ.ПолноеИмя + EnterOnInput + + + + + Объект.ПользователиИБ.Роли + EnterOnInput + + + + + Объект.ПользователиИБ.АутентификацияСтандартная + EnterOnInput + + + + + Объект.ПользователиИБ.АутентификацияОС + EnterOnInput + + + + + Объект.ПользователиИБ.ПользовательОС + EnterOnInput + + + + +
+
+
+
+
+ + Top + 4 + true + true + true + Объект.ДополнительныеСвойства + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительные свойства</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> + + None + DontShow + true + true + true + true + WhenActive + Enable + true + + + +
+ + + + cfg:DataProcessorObject.СериализаторMXL + + true + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Данные для выгрузки</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выгружать</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выгружать при необходимости</v8:content> + </v8:item> + + + xs:decimal + + 1 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Индекс картинки</v8:content> + </v8:item> + + + xs:decimal + + 2 + 0 + Nonnegative + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Развернут</v8:content> + </v8:item> + + + xs:boolean + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Настройки компоновщика</v8:content> + </v8:item> + + + dcsset:Filter + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Использовать отбор</v8:content> + </v8:item> + + + xs:boolean + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Макет</v8:content> + </v8:item> + + + mxl:SpreadsheetDocument + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дерево метаданных предыдущая строка</v8:content> + </v8:item> + + + + + + + + ДеревоМетаданныхПолноеИмяМетаданных + + + + + Объект.ДеревоМетаданных.ИспользоватьОтбор + Equal + true + + + + + Шрифт + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Создать макет данных</v8:content> + </v8:item> + + + + ru + Создать макет данных + + + + StdPicture.DataCompositionSettingsWizard + true + + СоздатьМакетДанных + TextPicture + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Сохранить макет данных в файл</v8:content> + </v8:item> + + + + ru + Сохранить макет данных в файл + + + + StdPicture.SaveFile + true + + СохранитьМакетДанныхВФайл + TextPicture + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Протестировать загрузку макета</v8:content> + </v8:item> + + + + ru + Протестировать загрузку макета + + + + StdPicture.Post + true + + ПротестироватьЗагрузкуМакета + TextPicture + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Очистить</v8:content> + </v8:item> + + + + ru + Очистить таблицу данных + + + + StdPicture.Clear + true + + ОчиститьТаблицуДанных + TextPicture + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пересчитать выгружаемые по ссылке</v8:content> + </v8:item> + + + + ru + Пересчитать выгружаемые по ссылке + + + + StdPicture.CheckAll + true + + ПересчитатьВыгружаемыеПоСсылке + TextPicture + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Показать результат отбора</v8:content> + </v8:item> + + + + ru + Показать результат отбора + + + ПоказатьРезультатОтбора + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дополнительные свойства</v8:content> + </v8:item> + + + + ru + Дополнительные свойства + + + ДополнительныеСвойства + + +
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\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/Items/\320\224\320\265\321\200\320\265\320\262\320\276\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205/RowsPicture.png" "b/lib/CF/83xddNoSync/DataProcessors/\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/Items/\320\224\320\265\321\200\320\265\320\262\320\276\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205/RowsPicture.png" new file mode 100644 index 000000000..bfa6267fe Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/\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/Items/\320\224\320\265\321\200\320\265\320\262\320\276\320\234\320\265\321\202\320\260\320\264\320\260\320\275\320\275\321\213\321\205/RowsPicture.png" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/\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/lib/CF/83xddNoSync/DataProcessors/\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" new file mode 100644 index 000000000..faa586284 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\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" @@ -0,0 +1,490 @@ + + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат Объект().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +// { Методы генерации тестовых данных + +&НаКлиенте +Функция СоздатьДанныеПоТабличномуДокументу(ТабличныйДокумент, РежимыЗагрузкиИлиИмяКолонкиЗамещения = Неопределено, ИмяКолонкиЗамещения = Неопределено) Экспорт + Данные = СоздатьДанныеПоТабличномуДокументуСервер(ТабличныйДокумент, РежимыЗагрузкиИлиИмяКолонкиЗамещения, ИмяКолонкиЗамещения); + Возврат Данные; +КонецФункции + +&НаСервере +Функция СоздатьДанныеПоТабличномуДокументуСервер(ТабличныйДокумент, РежимыЗагрузкиИлиИмяКолонкиЗамещения, ИмяКолонкиЗамещения) + Данные = Объект().СоздатьДанныеПоТабличномуДокументу(ТабличныйДокумент, РежимыЗагрузкиИлиИмяКолонкиЗамещения, ИмяКолонкиЗамещения); + Возврат Неопределено; //Данные; +КонецФункции +//} + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаДанных + +&НаКлиенте +Процедура ТаблицаДанныхСсылкаПриИзменении(Элемент) + ТаблицаДанныхСсылкаПриИзмененииСервер(Элементы.ТаблицаДанных.ТекущаяСтрока); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СоздатьМакетДанных(Команда) + ПанельИсточников = Элементы.ГруппаСтраницы; + Если ПанельИсточников.ТекущаяСтраница = ПанельИсточников.ПодчиненныеЭлементы.ГруппаМетаданные Тогда + КоманднаяПанель1СоздатьМакетДанныхПоМетаданным(); + ИначеЕсли ПанельИсточников.ТекущаяСтраница = ПанельИсточников.ПодчиненныеЭлементы.ГруппаТаблицаДанных Тогда + КоманднаяПанель1СоздатьМакетДанныхПоТаблицеДанных(); + ИначеЕсли ПанельИсточников.ТекущаяСтраница = ПанельИсточников.ПодчиненныеЭлементы.ГруппаПользователиИБ Тогда + КоманднаяПанель1СоздатьМакетДанныхДляПользователейИБ(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура КоманднаяПанель1СоздатьМакетДанныхПоТаблицеДанных() + Если ПроверитьЗаполнение() Тогда + НовыйМакет = СоздатьМакетДанныхПоТаблицеДанныхСервер(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура КоманднаяПанель1СоздатьМакетДанныхПоМетаданным() + + СохранитьОтображениеДерева(Объект.ДеревоМетаданных.ПолучитьЭлементы()); + НовыйМакет = СоздатьМакетДанныхПоМетаданнымСервер(); + ВосстановитьОтображениеДерева(Объект.ДеревоМетаданных.ПолучитьЭлементы()); + +КонецПроцедуры + +&НаКлиенте +Процедура КоманднаяПанель1СоздатьМакетДанныхДляПользователейИБ() + + МассивИменПользователей = Новый Массив; + Для Каждого ИдентификаторСтроки Из Элементы.ПользователиИнфБазы.ВыделенныеСтроки Цикл + Строка = Объект.ПользователиИБ.НайтиПоИдентификатору(ИдентификаторСтроки); + МассивИменПользователей.Добавить(Строка.Имя); + КонецЦикла; + НовыйМакет = СоздатьМакетДанныхПоПользователямИБСервер(МассивИменПользователей); + +КонецПроцедуры + +&НаКлиенте +Процедура ПротестироватьЗагрузкуМакета(Команда) + ПроверитьЗагрузкуМакетаСервер(Макет); +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьМакетДанныхВФайл(Команда) + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + ДиалогВыбораФайла.ПолноеИмяФайла = ""; + ДиалогВыбораФайла.Фильтр = "Табличный документ (*.mxl)|*.mxl|Все файлы (*.*)|*.*"; + ДиалогВыбораФайла.Заголовок = "Выберите файл"; + Если Не ДиалогВыбораФайла.Выбрать() Тогда + Возврат; + КонецЕсли; + + Макет.Записать(ДиалогВыбораФайла.ПолноеИмяФайла); +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьТаблицуДанных(Команда) + Объект.ТаблицаДанных.Очистить(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Функция Объект() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции + +&НаСервере +Процедура ТаблицаДанныхСсылкаПриИзмененииСервер(ИдентификаторСтрокиДанных) + ЭлементДанных = Объект.ТаблицаДанных.НайтиПоИдентификатору(ИдентификаторСтрокиДанных); + Объект().ПриИзмененииСсылки(ЭлементДанных); +КонецПроцедуры + +&НаСервере +Функция СоздатьМакетДанныхПоТаблицеДанныхСервер() + Возврат Объект().СоздатьМакетДанныхПоТаблицеДанных(Макет); +КонецФункции + +&НаСервере +Функция СоздатьМакетДанныхПоМетаданнымСервер() + + ОбъектНаСервере = Объект(); + ЗаполнитьДеревоМетаданныхНаСервере(ОбъектНаСервере); + НовыйМакет = ОбъектНаСервере.СоздатьМакетДанныхПоМетаданным(Макет); + ЗначениеВРеквизитФормы(ОбъектНаСервере.ДеревоМетаданных, "Объект.ДеревоМетаданных"); + + Возврат НовыйМакет; + +КонецФункции + +Функция СоздатьМакетДанныхПоПользователямИБСервер(МассивИменПользователей) + Возврат Объект().СоздатьМакетДанныхПоПользователямИБ(Макет, МассивИменПользователей); +КонецФункции + +&НаСервере +Процедура ПроверитьЗагрузкуМакетаСервер(ТабличныйДокумент) + Объект().ПроверитьЗагрузкуМакета(ТабличныйДокумент); +КонецПроцедуры + + + + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ОбъектНаСервере = Объект(); + ЭтаФорма.Заголовок = ОбъектНаСервере.ЗаголовокФормы(); + + ОбъектНаСервере.НачальнаяИнициализация(); + ЗначениеВРеквизитФормы(ОбъектНаСервере.ДеревоМетаданных, "Объект.ДеревоМетаданных"); + ЗначениеВРеквизитФормы(ОбъектНаСервере.ПользователиИБ, "Объект.ПользователиИБ"); + + ОбъектНаСервере.СписокВыбора_РежимПоиска(Элементы.ТаблицаДанныхРежимПоиска.СписокВыбора); + ОбъектНаСервере.СписокВыбора_РежимСоздания(Элементы.ТаблицаДанныхРежимСоздания.СписокВыбора); + + Объект.ВыгружатьСсылку = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ПересчитатьВыгружаемыеПоСсылке(Команда) + + Состояние(Нстр("ru = 'Выполняется поиск объектов метаданных, которые могут быть выгружены по ссылкам...'")); + СохранитьОтображениеДерева(Объект.ДеревоМетаданных.ПолучитьЭлементы()); + ПересчитатьВыгружаемыеПоСсылкеНаСервере(); + ВосстановитьОтображениеДерева(Объект.ДеревоМетаданных.ПолучитьЭлементы()); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьОтображениеДерева(СтрокиДерева) + + Для Каждого Строка Из СтрокиДерева Цикл + + ИдентификаторСтроки=Строка.ПолучитьИдентификатор(); + Строка.Развернут = Элементы.ДеревоМетаданных.Развернут(ИдентификаторСтроки); + + СохранитьОтображениеДерева(Строка.ПолучитьЭлементы()); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ВосстановитьОтображениеДерева(СтрокиДерева) + + Для Каждого Строка Из СтрокиДерева Цикл + + ИдентификаторСтроки=Строка.ПолучитьИдентификатор(); + Если Строка.Развернут Тогда + Элементы.ДеревоМетаданных.Развернуть(ИдентификаторСтроки); + КонецЕсли; + + ВосстановитьОтображениеДерева(Строка.ПолучитьЭлементы()); + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПересчитатьВыгружаемыеПоСсылкеНаСервере() + + ОбъектНаСервере = Объект(); + ЗаполнитьДеревоМетаданныхНаСервере(ОбъектНаСервере); + ОбъектНаСервере.СоставВыгрузки(Истина); + ЗначениеВРеквизитФормы(ОбъектНаСервере.ДеревоМетаданных, "Объект.ДеревоМетаданных"); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьДеревоМетаданныхНаСервере(ОбъектНаСервере) + + ДеревоМетаданных = РеквизитФормыВЗначение("Объект.ДеревоМетаданных"); + + ОбъектНаСервере.НачальнаяИнициализация(); + + ПроставитьПометкиВыгружаемыхДанных(ОбъектНаСервере.ДеревоМетаданных.Строки, ДеревоМетаданных.Строки); + +КонецПроцедуры + +&НаСервере +Процедура ПроставитьПометкиВыгружаемыхДанных(СтрокиИсходногоДерева, СтрокиЗаменяемогоДерева) + + КолонкаВыгружать = СтрокиЗаменяемогоДерева.ВыгрузитьКолонку("Выгружать"); + СтрокиИсходногоДерева.ЗагрузитьКолонку(КолонкаВыгружать, "Выгружать"); + + КолонкаВыгружатьПриНеобходимости = СтрокиЗаменяемогоДерева.ВыгрузитьКолонку("ВыгружатьПриНеобходимости"); + СтрокиИсходногоДерева.ЗагрузитьКолонку(КолонкаВыгружатьПриНеобходимости, "ВыгружатьПриНеобходимости"); + + КолонкаРазвернут = СтрокиЗаменяемогоДерева.ВыгрузитьКолонку("Развернут"); + СтрокиИсходногоДерева.ЗагрузитьКолонку(КолонкаРазвернут, "Развернут"); + + КолонкаНастройкиКомпоновщика = СтрокиЗаменяемогоДерева.ВыгрузитьКолонку("НастройкиКомпоновщика"); + СтрокиИсходногоДерева.ЗагрузитьКолонку(КолонкаНастройкиКомпоновщика, "НастройкиКомпоновщика"); + + КолонкаИспользоватьОтбор = СтрокиЗаменяемогоДерева.ВыгрузитьКолонку("ИспользоватьОтбор"); + СтрокиИсходногоДерева.ЗагрузитьКолонку(КолонкаИспользоватьОтбор, "ИспользоватьОтбор"); + + Для Каждого СтрокаИсходногоДерева Из СтрокиИсходногоДерева Цикл + + ИндексСтроки = СтрокиИсходногоДерева.Индекс(СтрокаИсходногоДерева); + СтрокаИзменяемогоДерева = СтрокиЗаменяемогоДерева.Получить(ИндексСтроки); + + ПроставитьПометкиВыгружаемыхДанных(СтрокаИсходногоДерева.Строки, СтрокаИзменяемогоДерева.Строки); + + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоМетаданных + +&НаКлиенте +Процедура ДеревоМетаданныхВыгружатьПриИзменении(Элемент) + + ТекущиеДанные = Элементы.ДеревоМетаданных.ТекущиеДанные; + + Если ТекущиеДанные.Выгружать = 2 Тогда + ТекущиеДанные.Выгружать = 0; + КонецЕсли; + + УстановитьПометкиПодчиненных(ТекущиеДанные, "Выгружать"); + УстановитьПометкиРодителей(ТекущиеДанные, "Выгружать"); + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоМетаданныхВыгружатьПриНеобходимостиПриИзменении(Элемент) + + ТекущиеДанные = Элементы.ДеревоМетаданных.ТекущиеДанные; + + Если ТекущиеДанные.ВыгружатьПриНеобходимости = 2 Тогда + ТекущиеДанные.ВыгружатьПриНеобходимости = 0; + КонецЕсли; + + УстановитьПометкиПодчиненных(ТекущиеДанные, "ВыгружатьПриНеобходимости"); + УстановитьПометкиРодителей(ТекущиеДанные, "ВыгружатьПриНеобходимости"); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПометкиПодчиненных(ТекСтрока, ИмяФлажка) + + Подчиненные = ТекСтрока.ПолучитьЭлементы(); + + Если Подчиненные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого Строка из Подчиненные Цикл + + Строка[ИмяФлажка] = ТекСтрока[ИмяФлажка]; + + УстановитьПометкиПодчиненных(Строка, ИмяФлажка); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПометкиРодителей(ТекСтрока, ИмяФлажка) + + Родитель = ТекСтрока.ПолучитьРодителя(); + Если Родитель = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекСостояние = Родитель[ИмяФлажка]; + + НайденыВключенные = Ложь; + НайденыВыключенные = Ложь; + + Для Каждого Строка из Родитель.ПолучитьЭлементы() Цикл + Если Строка[ИмяФлажка] = 0 Тогда + НайденыВыключенные = Истина; + ИначеЕсли Строка[ИмяФлажка] = 1 + ИЛИ Строка[ИмяФлажка] = 2 Тогда + НайденыВключенные = Истина; + КонецЕсли; + Если НайденыВключенные И НайденыВыключенные Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Если НайденыВключенные И НайденыВыключенные Тогда + Включить = 2; + ИначеЕсли НайденыВключенные И (Не НайденыВыключенные) Тогда + Включить = 1; + ИначеЕсли (Не НайденыВключенные) И НайденыВыключенные Тогда + Включить = 0; + ИначеЕсли (Не НайденыВключенные) И (Не НайденыВыключенные) Тогда + Включить = 2; + КонецЕсли; + + Если Включить = ТекСостояние Тогда + Возврат; + Иначе + Родитель[ИмяФлажка] = Включить; + УстановитьПометкиРодителей(Родитель, ИмяФлажка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоМетаданныхПриАктивизацииСтроки(Элемент) + + Если Элемент.ТекущаяСтрока = ДеревоМетаданныхПредыдущаяСтрока Тогда + Возврат; + КонецЕсли; + ДеревоМетаданныхПредыдущаяСтрока = Элемент.ТекущаяСтрока; + + НастроитьКомпоновщик(); + +КонецПроцедуры + +// Служит для настройки построителя при отборе данных +// +// Параметры: +// +&НаКлиенте +Процедура НастроитьКомпоновщик() + + ТекущаяСтрока = Элементы.ДеревоМетаданных.ТекущиеДанные; + + Если ТекущаяСтрока = Неопределено Тогда + Возврат; + КонецЕсли; + + Если НЕ ОпределитьПоСтрокеДереваДоступенПостроитель(ТекущаяСтрока) Тогда + + ДоступностьКомпоновщика = ЛОЖЬ; + УдалитьОтборыКомпоновщика(Объект.КомпоновщикНастроекКомпоновкиДанных); + + Иначе + + Попытка + + НастроитьКомпоновщикНаСервере(Элементы.ДеревоМетаданных.ТекущаяСтрока); + + ДоступностьКомпоновщика = Истина; + + Исключение + ДоступностьКомпоновщика = ЛОЖЬ; + УдалитьОтборыКомпоновщика(Объект.КомпоновщикНастроекКомпоновкиДанных); + КонецПопытки; + + КонецЕсли; + + Элементы.КомпоновщикОтбор.Доступность = ДоступностьКомпоновщика; + //Элементы.КоманднаяПанельКомпоновщикОтбор.Доступность = ДоступностьКомпоновщика; + +КонецПроцедуры + +&НаКлиенте +Функция ОпределитьПоСтрокеДереваДоступенПостроитель(СтрокаДерева) + + Если СтрокаДерева.ПолучитьЭлементы().Количество() > 0 Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; + +КонецФункции + +&НаКлиенте +Процедура УдалитьОтборыКомпоновщика(Компоновщик) + + Компоновщик.Настройки.Отбор.Элементы.Очистить(); + +КонецПроцедуры + +&НаСервере +Процедура НастроитьКомпоновщикНаСервере(ТекущаяСтрока) + + СтрокаДерева = Объект.ДеревоМетаданных.НайтиПоИдентификатору(ТекущаяСтрока); + СхемаКомпоновкиДанных = Объект().ПодготовитьКомпоновщикДляВыгрузки(СтрокаДерева); + АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор); + Объект.КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); + Объект.КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); + +КонецПроцедуры // НастроитьКомпоновщикНаСервере() + +&НаКлиенте +Процедура КомпоновщикОтборПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) + + ОбновитьНастройкиПостроителяВТаблицеДляВыгрузки(); + +КонецПроцедуры + +&НаКлиенте +Процедура КомпоновщикОтборПослеУдаления(Элемент) + + ОбновитьНастройкиПостроителяВТаблицеДляВыгрузки(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьНастройкиПостроителяВТаблицеДляВыгрузки() + + ТекущаяСтрока = Элементы.ДеревоМетаданных.ТекущиеДанные; + Если Объект.КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.Элементы.Количество() > 0 Тогда + + ТекущаяСтрока.НастройкиКомпоновщика = Объект.КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор;//Объект.КомпоновщикНастроекКомпоновкиДанных.ПолучитьНастройки(); + ТекущаяСтрока.ИспользоватьОтбор = ИСТИНА; + ТекущаяСтрока.Выгружать = Истина; + + Иначе + + ТекущаяСтрока.НастройкиКомпоновщика = Неопределено; + ТекущаяСтрока.ИспользоватьОтбор = ЛОЖЬ; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьРезультатОтбора(Команда) + + // показать выбранные записи + Если Элементы.КомпоновщикОтбор.Доступность <> Истина + ИЛИ Элементы.ДеревоМетаданных.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ТабличныйДокумент = ПолучитьРезультатОтбораНаСервере(); + ТабличныйДокумент.Показать(НСтр("ru = 'Выбранные объекты'")); + +КонецПроцедуры + +&НаСервере +Функция ПолучитьРезультатОтбораНаСервере() + + СтрокаДерева = Объект.ДеревоМетаданных.НайтиПоИдентификатору(Элементы.ДеревоМетаданных.ТекущаяСтрока); + ТабличныйДокумент = Объект().СформироватьОтчетПоОтобраннымДанным(СтрокаДерева); + + Возврат ТабличныйДокумент; + +КонецФункции // ПолучитьРезультатОтбораНаСервере() + +&НаКлиенте +Процедура ДополнительныеСвойства(Команда) + Элементы.ФормаДополнительныеСвойства.Пометка = НЕ Элементы.ФормаДополнительныеСвойства.Пометка; + Элементы.ДополнительныеСвойства.Видимость = Элементы.ФормаДополнительныеСвойства.Пометка; +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/DataProcessors/\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.xml" "b/lib/CF/83xddNoSync/DataProcessors/\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.xml" new file mode 100644 index 000000000..7ee263131 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\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.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Ordinary + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\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/lib/CF/83xddNoSync/DataProcessors/\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" new file mode 100644 index 000000000..715929170 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\222\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\265\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\222\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\265\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271.xml" new file mode 100644 index 000000000..97b1b1954 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\222\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\265\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/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\222\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\265\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\222\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\265\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271/Ext/Template.xml" new file mode 100644 index 000000000..1b4d6e133 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\222\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\265\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271/Ext/Template.xml" @@ -0,0 +1,971 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 2 + + + + 5 + + 3 + + + + 6 + + 5 + + + + + 0 + + + + 6 + + + ru + Тип + + + + + + + 7 + + + ru + Вид + + + + + + + 8 + + + ru + ИмяПеременной + + + + + + + 4 + + + ru + ТЧ + + + + + + + 9 + + + ru + Реквизит + + + + + + + 10 + + + ru + Значение + + + + + + + 11 + + + ru + Режим + + + + + + + + 1 + + + + 6 + + + ru + Справочник + + + + + + + 7 + + + ru + ПростойСправочник + + + + + + + 8 + + + ru + ПростойСправочник + + + + + + + 4 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + + 2 + + + + 6 + + + + + 7 + + + + + 8 + + + + + 4 + + + + + 9 + + + ru + Наименование + + + + + + + 10 + + + ru + Тест + + + + + + + 11 + + + + + + 3 + + + + 6 + + + ru + Справочник + + + + + + + 0 + + + ru + ПростойСправочник2 + + + + + + + 0 + + + ru + ПростойСправочник21 + + + + + + 5 + + 0 + + + + + + + 4 + + + 4 + + 9 + + + ru + Наименование + + + + + + + 10 + + + ru + Тест1 + + + + + + + + 5 + + + + 6 + + + ru + Справочник + + + + + + + 7 + + + ru + ПростойСправочник2 + + + + + + + 12 + + + ru + ПростойСправочник22 + + + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 5 + + + + + + 6 + + + + 6 + + + + + 7 + + + + + 12 + + + + + 13 + + + + + 9 + + + ru + Наименование + + + + + + + 10 + + + ru + Тест2 + + + + + + + 5 + + + + + + 7 + + + + 6 + + + ru + РегистрСведений + + + + + + + 0 + + + ru + РегистрСведений1 + + + + + + + 0 + + + ru + ЗаписьРегистра1 + + + + + + 5 + + 0 + + + + + + 0 + + + + + + + 8 + + + 4 + + 16 + + + ru + ПростойСправочник + + + + + + + 8 + + + ru + ПростойСправочник + + + + + + + 5 + + + ru + Перем + + + + + + + + 9 + + + 3 + + 0 + + + + + 0 + + + ru + ПростойСправочник2 + + + + + + + 8 + + + ru + ПростойСправочник21 + + + + + + + 5 + + + ru + Перем + + + + + + + + 10 + + + 3 + + 0 + + + + + 0 + + + ru + РесурсЧисло + + + + + + + 0 + + + ru + 300 + + + + + + + + 11 + + + 4 + + 0 + + + ru + РесурсБулево + + + + + + + 0 + + + ru + Ложь + + + + + + + + 12 + + + + 6 + + + ru + РегистрСведений + + + + + + + 17 + + + ru + РегистрСведений1 + + + + + + + 12 + + + ru + ЗаписьРегистра2 + + + + + + + 18 + + + + + 16 + + + + + 19 + + + + + + 5 + + + + + + + 13 + + + + 1 + + + + + 17 + + + + + 12 + + + + + 18 + + + + + 16 + + + ru + ПростойСправочник + + + + + + + 8 + + + ru + ПростойСправочник + + + + + + + 5 + + + ru + Перем + + + + + + + + 14 + + + + 1 + + + + + 17 + + + + + 12 + + + + + 18 + + + + + 16 + + + ru + ПростойСправочник2 + + + + + + + 8 + + + ru + ПростойСправочник22 + + + + + + + 5 + + + ru + Перем + + + + + + + + 15 + + + + 1 + + + + + 17 + + + + + 12 + + + + + 18 + + + + + 16 + + + ru + РесурсЧисло + + + + + + + 19 + + + ru + 400 + + + + + + + 5 + + + + + + 16 + + + + 1 + + + + + 17 + + + + + 12 + + + + + 18 + + + + + 16 + + + ru + РесурсБулево + + + + + + + 19 + + + ru + Истина + + + + + + + 5 + + + + + true + 20 + 17 + 17 + + 113 + + + 136 + + + 143 + + + 24 + + + 49 + + + 80 + + + 202 + + + 129 + + + 97 + + + 155 + + + 123 + + + 109 + + + 54 + + + 240 + + + 88 + + + 104 + + + 137 + + + 41 + + + 102 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\320\221\321\203\321\205\320\263\320\260\320\273\321\202\320\265\321\200\320\270\320\270.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\320\221\321\203\321\205\320\263\320\260\320\273\321\202\320\265\321\200\320\270\320\270.xml" new file mode 100644 index 000000000..4d36921f5 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\320\221\321\203\321\205\320\263\320\260\320\273\321\202\320\265\321\200\320\270\320\270.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\320\221\321\203\321\205\320\263\320\260\320\273\321\202\320\265\321\200\320\270\320\270/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\320\221\321\203\321\205\320\263\320\260\320\273\321\202\320\265\321\200\320\270\320\270/Ext/Template.xml" new file mode 100644 index 000000000..c2c9a0bf9 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\320\221\321\203\321\205\320\263\320\260\320\273\321\202\320\265\321\200\320\270\320\270/Ext/Template.xml" @@ -0,0 +1,1706 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 8 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 5 + + + + 5 + + 3 + + + + 6 + + 6 + + + + + 0 + + + + 7 + + + ru + Тип + + + + + + + 8 + + + ru + Вид + + + + + + + 9 + + + ru + ИмяПеременной + + + + + + + 10 + + + ru + ТЧ + + + + + + + 11 + + + ru + Реквизит + + + + + + + 12 + + + ru + Значение + + + + + + + 13 + + + ru + Режим + + + + + + + 14 + + + ru + ДополнительныйТипЗначения + + + + + + + + 1 + + + + 7 + + + ru + Справочник + + + + + + + 8 + + + ru + ПростойСправочник + + + + + + + 9 + + + ru + ПростойСправочник + + + + + + + 10 + + + + + 11 + + + + + 12 + + + + + 13 + + + + + + 2 + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + ru + Наименование + + + + + + + 12 + + + ru + Тест + + + + + + + 13 + + + + + + 3 + + + + 7 + + + ru + Справочник + + + + + + + 0 + + + ru + ПростойСправочник2 + + + + + + + 0 + + + ru + ПростойСправочник21 + + + + + + 5 + + 0 + + + + + + + 4 + + + 4 + + 11 + + + ru + Наименование + + + + + + + 12 + + + ru + Тест1 + + + + + + + + 5 + + + + 7 + + + ru + Справочник + + + + + + + 8 + + + ru + ПростойСправочник2 + + + + + + + 15 + + + ru + ПростойСправочник22 + + + + + + + 4 + + + + + 16 + + + + + 17 + + + + + 18 + + + + + + 6 + + + + 7 + + + + + 8 + + + + + 15 + + + + + 4 + + + + + 11 + + + ru + Наименование + + + + + + + 12 + + + ru + Тест2 + + + + + + + 18 + + + + + + 7 + + + + 7 + + + ru + Документ + + + + + + + 0 + + + ru + Документ2 + + + + + + + 0 + + + ru + Документ + + + + + + 5 + + 0 + + + + + + 0 + + + + + + + 8 + + + 4 + + 11 + + + ru + Дата + + + + + + + 12 + + + + + 6 + + + ru + ТекущаяДата + + + + + + + + 9 + + + 3 + + 0 + + + + + 0 + + + ru + ПростойСправочник + + + + + + + 9 + + + ru + ПростойСправочник + + + + + + + 18 + + + ru + Перем + + + + + + + + 10 + + + 3 + + 0 + + + ru + Состав + + + + + + + + 11 + + + 4 + + 15 + + + ru + РеквизитЧисло + + + + + + + 15 + + + ru + 150 + + + + + + + 18 + + + + + + 12 + + + 4 + + 0 + + + ru + ПростойСправочник2 + + + + + + + 9 + + + ru + ПростойСправочник21 + + + + + + + 18 + + + ru + Перем + + + + + + + + 13 + + + 4 + + 0 + + + ru + РеквизитБулево + + + + + + + 0 + + + ru + Ложь + + + + + + + + 14 + + + 3 + + 4 + + + ru + Состав + + + + + + + 16 + + + + + 17 + + + + + 18 + + + + + + 15 + + + 3 + + 4 + + + + + 16 + + + ru + ПростойСправочник2 + + + + + + + 9 + + + ru + ПростойСправочник22 + + + + + + + 18 + + + ru + Перем + + + + + + + + 16 + + + 3 + + 4 + + + + + 15 + + + ru + РеквизитЧисло + + + + + + + 15 + + + ru + 0 + + + + + + + 18 + + + + + + 17 + + + 3 + + 4 + + + + + 16 + + + ru + РеквизитБулево + + + + + + + 17 + + + ru + Истина + + + + + + + 18 + + + + + + 18 + + + + 7 + + + ru + РегистрБухгалтерии + + + + + + + 2 + + + ru + РегистрБухгалтерии1 + + + + + + + 0 + + + ru + ЗаписьРегистра2 + + + + + + 5 + + 0 + + + + + + 0 + + + + + + + 19 + + + 3 + + 0 + + + ru + Запись + + + + + + + 19 + + + + + 9 + + + + + 18 + + + + + + 20 + + + 4 + + 19 + + + ru + Регистратор + + + + + + + 9 + + + ru + Документ + + + + + + + 18 + + + ru + Перем + + + + + + + + 21 + + + 4 + + 19 + + + ru + Период + + + + + + + 9 + + + + + 18 + + + + + + 22 + + + 4 + + 0 + + + ru + СчетДт + + + + + + + 0 + + + ru + Счет01 + + + + + + + 13 + + + ru + Предопределенный + + + + + + + 14 + + + ru + ПланСчетовСсылка.ПланСчетов1 + + + + + + + + 23 + + + 4 + + 0 + + + ru + СчетКт + + + + + + + 0 + + + ru + Счет02 + + + + + + + 13 + + + ru + Предопределенный + + + + + + + 14 + + + ru + ПланСчетовСсылка.ПланСчетов1 + + + + + + + + 24 + + + 4 + + 19 + + + ru + ПростойСправочник + + + + + + + 9 + + + ru + ПростойСправочник + + + + + + + 18 + + + ru + Перем + + + + + + + + 25 + + + 3 + + 0 + + + + + 0 + + + ru + ПростойСправочник2Дт + + + + + + + 9 + + + ru + ПростойСправочник21 + + + + + + + 18 + + + ru + Перем + + + + + + + + 26 + + + 3 + + 0 + + + + + 2 + + + ru + РесурсЧисло + + + + + + + 0 + + + ru + 150 + + + + + + + + 27 + + + 4 + + 2 + + + ru + РесурсЧисло1Дт + + + + + + + 0 + + + + + + 28 + + + 4 + + 2 + + + ru + РеквизитБулево + + + + + + + 0 + + + ru + Ложь + + + + + + + + 29 + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + ru + Запись + + + + + + + 16 + + + + + 17 + + + + + 18 + + + + + + 30 + + + 4 + + 19 + + + ru + Регистратор + + + + + + + 9 + + + ru + Документ + + + + + + + 18 + + + ru + Перем + + + + + + + + 31 + + + 4 + + 19 + + + ru + Период + + + + + + + 9 + + + + + 18 + + + ru + ТекущаяДата + + + + + + + + 32 + + + 4 + + 0 + + + ru + СчетДт + + + + + + + 0 + + + ru + Счет02 + + + + + + + 0 + + + ru + Наименование + + + + + + + + 33 + + + 4 + + 0 + + + ru + СчетКт + + + + + + + 0 + + + ru + Счет01 + + + + + + + 0 + + + ru + Наименование + + + + + + + + 34 + + + 4 + + 19 + + + ru + ПростойСправочник + + + + + + + 9 + + + ru + ПростойСправочник + + + + + + + 18 + + + ru + Перем + + + + + + + + 35 + + + 3 + + 4 + + + + + 16 + + + ru + ПростойСправочник2Кт + + + + + + + 9 + + + ru + ПростойСправочник22 + + + + + + + 18 + + + ru + Перем + + + + + + + + 36 + + + 3 + + 4 + + + + + 2 + + + ru + РесурсЧисло + + + + + + + 15 + + + ru + 0 + + + + + + + 18 + + + + + + 37 + + + 3 + + 4 + + + + + 2 + + + ru + РесурсЧисло1Кт + + + + + + + 17 + + + + + 18 + + + + + + 38 + + + 3 + + 4 + + + + + 2 + + + ru + РеквизитБулево + + + + + + + 17 + + + ru + Истина + + + + + + + 18 + + + + + true + 20 + 39 + 39 + + 125 + + + 136 + + + 143 + + + 54 + + + 177 + + + 89 + + + 80 + + + 202 + + + 129 + + + 24 + + + 97 + + + 155 + + + 123 + + + 208 + + + 109 + + + 240 + + + 88 + + + 49 + + + 104 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\320\235\320\260\320\272\320\276\320\277\320\273\320\265\320\275\320\270\321\217.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\320\235\320\260\320\272\320\276\320\277\320\273\320\265\320\275\320\270\321\217.xml" new file mode 100644 index 000000000..e6732e9ee --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\320\235\320\260\320\272\320\276\320\277\320\273\320\265\320\275\320\270\321\217.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\320\235\320\260\320\272\320\276\320\277\320\273\320\265\320\275\320\270\321\217/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\320\235\320\260\320\272\320\276\320\277\320\273\320\265\320\275\320\270\321\217/Ext/Template.xml" new file mode 100644 index 000000000..e7aab2ccb --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\320\235\320\260\320\272\320\276\320\277\320\273\320\265\320\275\320\270\321\217/Ext/Template.xml" @@ -0,0 +1,1457 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 2 + + + + 5 + + 3 + + + + 6 + + 5 + + + + + 0 + + + + 6 + + + ru + Тип + + + + + + + 7 + + + ru + Вид + + + + + + + 8 + + + ru + ИмяПеременной + + + + + + + 9 + + + ru + ТЧ + + + + + + + 10 + + + ru + Реквизит + + + + + + + 11 + + + ru + Значение + + + + + + + 12 + + + ru + Режим + + + + + + + + 1 + + + + 6 + + + ru + Справочник + + + + + + + 7 + + + ru + ПростойСправочник + + + + + + + 8 + + + ru + ПростойСправочник + + + + + + + 9 + + + + + 10 + + + + + 11 + + + + + 12 + + + + + + 2 + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + ru + Наименование + + + + + + + 11 + + + ru + Тест + + + + + + + 12 + + + + + + 3 + + + + 6 + + + ru + Справочник + + + + + + + 0 + + + ru + ПростойСправочник2 + + + + + + + 0 + + + ru + ПростойСправочник21 + + + + + + 5 + + 0 + + + + + + + 4 + + + 4 + + 10 + + + ru + Наименование + + + + + + + 11 + + + ru + Тест1 + + + + + + + + 5 + + + + 6 + + + ru + Справочник + + + + + + + 7 + + + ru + ПростойСправочник2 + + + + + + + 13 + + + ru + ПростойСправочник22 + + + + + + + 4 + + + + + 14 + + + + + 15 + + + + + 16 + + + + + + 6 + + + + 6 + + + + + 7 + + + + + 13 + + + + + 4 + + + + + 10 + + + ru + Наименование + + + + + + + 11 + + + ru + Тест2 + + + + + + + 16 + + + + + + 7 + + + + 6 + + + ru + Документ + + + + + + + 0 + + + ru + Документ2 + + + + + + + 0 + + + ru + Документ + + + + + + 5 + + 0 + + + + + + 0 + + + + + + + 8 + + + 4 + + 10 + + + ru + Дата + + + + + + + 11 + + + + + 5 + + + ru + ТекущаяДата + + + + + + + + 9 + + + 3 + + 0 + + + + + 0 + + + ru + ПростойСправочник + + + + + + + 8 + + + ru + ПростойСправочник + + + + + + + 16 + + + ru + Перем + + + + + + + + 10 + + + 3 + + 0 + + + ru + Состав + + + + + + + + 11 + + + 4 + + 13 + + + ru + РеквизитЧисло + + + + + + + 13 + + + ru + 150 + + + + + + + 16 + + + + + + 12 + + + 4 + + 0 + + + ru + ПростойСправочник2 + + + + + + + 8 + + + ru + ПростойСправочник21 + + + + + + + 16 + + + ru + Перем + + + + + + + + 13 + + + 4 + + 0 + + + ru + РеквизитБулево + + + + + + + 0 + + + ru + Ложь + + + + + + + + 14 + + + 3 + + 4 + + + ru + Состав + + + + + + + 14 + + + + + 15 + + + + + 16 + + + + + + 15 + + + 3 + + 4 + + + + + 14 + + + ru + ПростойСправочник2 + + + + + + + 8 + + + ru + ПростойСправочник22 + + + + + + + 16 + + + ru + Перем + + + + + + + + 16 + + + 3 + + 4 + + + + + 13 + + + ru + РеквизитЧисло + + + + + + + 13 + + + ru + 0 + + + + + + + 16 + + + + + + 17 + + + 3 + + 4 + + + + + 14 + + + ru + РеквизитБулево + + + + + + + 15 + + + ru + Истина + + + + + + + 16 + + + + + + 18 + + + + 6 + + + ru + РегистрНакопления + + + + + + + 0 + + + ru + РегистрНакопления2 + + + + + + + 0 + + + ru + ЗаписьРегистра2 + + + + + + 5 + + 0 + + + + + + 0 + + + + + + + 19 + + + 3 + + 0 + + + ru + Запись + + + + + + + 17 + + + + + 8 + + + + + 16 + + + + + + 20 + + + 4 + + 17 + + + ru + Регистратор + + + + + + + 8 + + + ru + Документ + + + + + + + 16 + + + ru + Перем + + + + + + + + 21 + + + 4 + + 17 + + + ru + Период + + + + + + + 8 + + + + + 16 + + + + + + 22 + + + 4 + + 17 + + + ru + ПростойСправочник + + + + + + + 8 + + + ru + ПростойСправочник + + + + + + + 16 + + + ru + Перем + + + + + + + + 23 + + + 3 + + 0 + + + + + 0 + + + ru + ПростойСправочник2 + + + + + + + 8 + + + ru + ПростойСправочник21 + + + + + + + 16 + + + ru + Перем + + + + + + + + 24 + + + 3 + + 0 + + + + + 2 + + + ru + РесурсЧисло + + + + + + + 0 + + + ru + 150 + + + + + + + + 25 + + + 4 + + 2 + + + ru + РеквизитБулево + + + + + + + 0 + + + ru + Ложь + + + + + + + + 26 + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + ru + Запись + + + + + + + 14 + + + + + 15 + + + + + 16 + + + + + + 27 + + + 4 + + 17 + + + ru + Регистратор + + + + + + + 8 + + + ru + Документ + + + + + + + 16 + + + ru + Перем + + + + + + + + 28 + + + 4 + + 17 + + + ru + Период + + + + + + + 8 + + + + + 16 + + + ru + ТекущаяДата + + + + + + + + 29 + + + 4 + + 17 + + + ru + ПростойСправочник + + + + + + + 8 + + + ru + ПростойСправочник + + + + + + + 16 + + + ru + Перем + + + + + + + + 30 + + + 3 + + 4 + + + + + 14 + + + ru + ПростойСправочник2 + + + + + + + 8 + + + ru + ПростойСправочник22 + + + + + + + 16 + + + ru + Перем + + + + + + + + 31 + + + 3 + + 4 + + + + + 2 + + + ru + РесурсЧисло + + + + + + + 13 + + + ru + 0 + + + + + + + 16 + + + + + + 32 + + + 3 + + 4 + + + + + 2 + + + ru + РеквизитБулево + + + + + + + 15 + + + ru + Истина + + + + + + + 16 + + + + + true + 18 + 33 + 33 + + 125 + + + 136 + + + 143 + + + 54 + + + 89 + + + 80 + + + 202 + + + 129 + + + 24 + + + 97 + + + 155 + + + 123 + + + 109 + + + 240 + + + 88 + + + 49 + + + 104 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\237\321\200\320\276\321\201\321\202\321\213\321\205\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\276\320\262.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\237\321\200\320\276\321\201\321\202\321\213\321\205\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\276\320\262.xml" new file mode 100644 index 000000000..52291b1c1 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\237\321\200\320\276\321\201\321\202\321\213\321\205\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\276\320\262.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\237\321\200\320\276\321\201\321\202\321\213\321\205\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\276\320\262/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\237\321\200\320\276\321\201\321\202\321\213\321\205\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\276\320\262/Ext/Template.xml" new file mode 100644 index 000000000..70833130d --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\262\321\203\321\205\320\237\321\200\320\276\321\201\321\202\321\213\321\205\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\276\320\262/Ext/Template.xml" @@ -0,0 +1,412 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 5 + + + + 5 + + 6 + + + + 6 + + 7 + + + + + 0 + + + + 1 + + + ru + Тип + + + + + + + 8 + + + ru + Вид + + + + + + + 9 + + + ru + ИмяПеременной + + + + + + + 10 + + + ru + ТЧ + + + + + + + 11 + + + ru + Реквизит + + + + + + + 12 + + + ru + Значение + + + + + + + 7 + + + ru + Режим + + + + + + + + 1 + + + + 1 + + + ru + Справочник + + + + + + + 8 + + + ru + ПростойСправочник + + + + + + + 9 + + + ru + ПростойСправочник + + + + + + + 10 + + + + + 11 + + + + + 12 + + + + + 7 + + + + + + 2 + + + + 1 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + ru + Наименование + + + + + + + 12 + + + ru + Тестовое наименование + + + + + + + 7 + + + + + + 3 + + + + 1 + + + + + 0 + + + + + 0 + + + + 4 + + 11 + + + ru + РеквизитБулево + + + + + + + 12 + + + ru + Ложь + + + + + + + + 4 + + + + 1 + + + ru + Справочник + + + + + + + 0 + + + ru + ПростойСправочник2 + + + + + + + 0 + + + ru + ПростойСправочник2 + + + + + + 4 + + 11 + + + + + 0 + + + + + + 5 + + + 4 + + 11 + + + ru + Наименование + + + + + + + 12 + + + ru + Тестовое наименование + + + + + + + true + 13 + 6 + 6 + + 80 + + + 139 + + + 137 + + + 31 + + + 107 + + + 200 + + + 90 + + + 104 + + + 129 + + + 24 + + + 97 + + + 155 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\241\321\202\321\200\320\276\320\272\320\260\320\274\320\270\320\222\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\271\320\247\320\260\321\201\321\202\320\270.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\241\321\202\321\200\320\276\320\272\320\260\320\274\320\270\320\222\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\271\320\247\320\260\321\201\321\202\320\270.xml" new file mode 100644 index 000000000..556eff31d --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\241\321\202\321\200\320\276\320\272\320\260\320\274\320\270\320\222\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\271\320\247\320\260\321\201\321\202\320\270.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\241\321\202\321\200\320\276\320\272\320\260\320\274\320\270\320\222\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\271\320\247\320\260\321\201\321\202\320\270/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\241\321\202\321\200\320\276\320\272\320\260\320\274\320\270\320\222\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\271\320\247\320\260\321\201\321\202\320\270/Ext/Template.xml" new file mode 100644 index 000000000..787b232ac --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\241\321\202\321\200\320\276\320\272\320\260\320\274\320\270\320\222\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\271\320\247\320\260\321\201\321\202\320\270/Ext/Template.xml" @@ -0,0 +1,1005 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 2 + + + + 5 + + 3 + + + + 6 + + 5 + + + + + 0 + + + + 1 + + + ru + Тип + + + + + + + 6 + + + ru + Вид + + + + + + + 7 + + + ru + ИмяПеременной + + + + + + + 8 + + + ru + ТЧ + + + + + + + 9 + + + ru + Реквизит + + + + + + + 10 + + + ru + Значение + + + + + + + 11 + + + ru + Режим + + + + + + + + 1 + + + + 1 + + + ru + Справочник + + + + + + + 6 + + + ru + ПростойСправочник + + + + + + + 7 + + + ru + ПростойСправочник + + + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + + 2 + + + + 1 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + ru + Наименование + + + + + + + 10 + + + ru + Тест + + + + + + + 11 + + + + + + 3 + + + + 1 + + + + + 0 + + + + + 0 + + + + 4 + + 0 + + + ru + Код + + + + + + + 0 + + + ru + 5 + + + + + + + + 4 + + + + 1 + + + ru + Справочник + + + + + + + 0 + + + ru + ПростойСправочник2 + + + + + + + 0 + + + ru + ПростойСправочник21 + + + + + + 5 + + 0 + + + + + + + 5 + + + 4 + + 9 + + + ru + Наименование + + + + + + + 10 + + + ru + Тест1 + + + + + + + + 6 + + + + 1 + + + + + 0 + + + + + 0 + + + + 4 + + 0 + + + ru + Код + + + + + + + 0 + + + ru + 5 + + + + + + + + 7 + + + + 1 + + + ru + Справочник + + + + + + + 6 + + + ru + ПростойСправочник2 + + + + + + + 12 + + + ru + ПростойСправочник22 + + + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 5 + + + + + + 8 + + + + 1 + + + + + 6 + + + + + 12 + + + + + 13 + + + + + 9 + + + ru + Наименование + + + + + + + 10 + + + ru + Тест2 + + + + + + + 5 + + + + + + 9 + + + + 1 + + + + + 0 + + + + + 0 + + + + 4 + + 0 + + + ru + Код + + + + + + + 0 + + + ru + 6 + + + + + + + + 10 + + + + 1 + + + ru + Документ + + + + + + + 0 + + + ru + Документ1 + + + + + + + 0 + + + ru + Документ + + + + + + 5 + + 0 + + + + + + 0 + + + + + + + 11 + + + 4 + + 9 + + + ru + Дата + + + + + + + 10 + + + ru + 20140401 + + + + + + + + 12 + + + 3 + + 0 + + + + + 0 + + + ru + ПростойСправочник + + + + + + + 7 + + + ru + ПростойСправочник + + + + + + + 5 + + + ru + Перем + + + + + + + + 13 + + + 3 + + 0 + + + ru + Состав + + + + + + + + 14 + + + 4 + + 12 + + + ru + РеквизитЧисло + + + + + + + 12 + + + ru + 150 + + + + + + + 5 + + + + + + 15 + + + 4 + + 0 + + + ru + ПростойСправочник2 + + + + + + + 7 + + + ru + Тест1 + + + + + + + 0 + + + ru + Наименование + + + + + + + + 16 + + + 4 + + 0 + + + ru + РеквизитБулево + + + + + + + 0 + + + ru + Ложь + + + + + + + + 17 + + + 3 + + 13 + + + ru + Состав + + + + + + + 14 + + + + + 15 + + + + + 5 + + + + + + 18 + + + 3 + + 13 + + + + + 14 + + + ru + ПростойСправочник2 + + + + + + + 7 + + + ru + ПростойСправочник22 + + + + + + + 5 + + + ru + Перем + + + + + + + + 19 + + + 3 + + 13 + + + + + 12 + + + ru + РеквизитЧисло + + + + + + + 12 + + + ru + 0 + + + + + + + 5 + + + + + + 20 + + + 3 + + 13 + + + + + 14 + + + ru + РеквизитБулево + + + + + + + 15 + + + ru + Истина + + + + + + + 5 + + + + + true + 16 + 21 + 21 + + 80 + + + 136 + + + 143 + + + 41 + + + 49 + + + 202 + + + 129 + + + 24 + + + 97 + + + 155 + + + 123 + + + 109 + + + 54 + + + 240 + + + 88 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\274\320\270\320\247\320\260\321\201\321\202\321\217\320\274\320\270.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\274\320\270\320\247\320\260\321\201\321\202\321\217\320\274\320\270.xml" new file mode 100644 index 000000000..1ace777be --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\274\320\270\320\247\320\260\321\201\321\202\321\217\320\274\320\270.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\274\320\270\320\247\320\260\321\201\321\202\321\217\320\274\320\270/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\274\320\270\320\247\320\260\321\201\321\202\321\217\320\274\320\270/Ext/Template.xml" new file mode 100644 index 000000000..0fb82ba57 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\242\320\260\320\261\320\273\320\270\321\207\320\275\321\213\320\274\320\270\320\247\320\260\321\201\321\202\321\217\320\274\320\270/Ext/Template.xml" @@ -0,0 +1,1016 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 8 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 2 + + + + 5 + + 3 + + + + 6 + + 5 + + + + + 0 + + + + 1 + + + ru + Тип + + + + + + + 6 + + + ru + Вид + + + + + + + 7 + + + ru + ИмяПеременной + + + + + + + 8 + + + ru + ТЧ + + + + + + + 9 + + + ru + Реквизит + + + + + + + 10 + + + ru + Значение + + + + + + + 11 + + + ru + Режим + + + + + + + + 1 + + + + 1 + + + ru + Справочник + + + + + + + 6 + + + ru + ПростойСправочник + + + + + + + 7 + + + ru + ПростойСправочник + + + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + + 2 + + + + 1 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + ru + Наименование + + + + + + + 10 + + + ru + Тест + + + + + + + 11 + + + + + + 3 + + + + 1 + + + + + 0 + + + + + 0 + + + + 4 + + 0 + + + ru + Код + + + + + + + 0 + + + ru + 5 + + + + + + + + 4 + + + + 1 + + + ru + Справочник + + + + + + + 0 + + + ru + ПростойСправочник2 + + + + + + + 0 + + + ru + ПростойСправочник21 + + + + + + 5 + + 0 + + + + + + + 5 + + + 4 + + 9 + + + ru + Наименование + + + + + + + 10 + + + ru + Тест1 + + + + + + + + 6 + + + + 1 + + + + + 0 + + + + + 0 + + + + 4 + + 0 + + + ru + Код + + + + + + + 0 + + + ru + 5 + + + + + + + + 7 + + + + 1 + + + ru + Справочник + + + + + + + 6 + + + ru + ПростойСправочник2 + + + + + + + 12 + + + ru + ПростойСправочник22 + + + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 5 + + + + + + 8 + + + + 1 + + + + + 6 + + + + + 12 + + + + + 13 + + + + + 9 + + + ru + Наименование + + + + + + + 10 + + + ru + Тест2 + + + + + + + 5 + + + + + + 9 + + + + 1 + + + + + 0 + + + + + 0 + + + + 4 + + 0 + + + ru + Код + + + + + + + 0 + + + ru + 6 + + + + + + + + 10 + + + + 1 + + + ru + Документ + + + + + + + 0 + + + ru + Документ2 + + + + + + + 0 + + + ru + Документ + + + + + + 5 + + 0 + + + + + + 0 + + + + + + + 11 + + + 4 + + 9 + + + ru + Дата + + + + + + + 10 + + + ru + 20140401 + + + + + + + + 12 + + + 3 + + 0 + + + + + 0 + + + ru + ПростойСправочник + + + + + + + 7 + + + ru + ПростойСправочник + + + + + + + 5 + + + ru + Перем + + + + + + + + 13 + + + 3 + + 0 + + + ru + Состав + + + + + + + + 14 + + + 4 + + 12 + + + ru + РеквизитЧисло + + + + + + + 12 + + + ru + 150 + + + + + + + 5 + + + + + + 15 + + + 4 + + 0 + + + ru + ПростойСправочник2 + + + + + + + 7 + + + ru + Тест1 + + + + + + + 0 + + + ru + Наименование + + + + + + + + 16 + + + 4 + + 0 + + + ru + РеквизитБулево + + + + + + + 0 + + + ru + Ложь + + + + + + + + 17 + + + 3 + + 13 + + + ru + Состав2 + + + + + + + 14 + + + + + 15 + + + + + 5 + + + + + + 18 + + + 3 + + 13 + + + + + 12 + + + ru + РеквизитУИД + + + + + + + 12 + + + ru + 39c2b68f-b7c8-11e4-b736-080027b785c3 + + + + + + + 5 + + + ru + Гуид + + + + + + + + 19 + + 16 + + 4 + + 0 + + + ru + ХранилищеЗначения + + + + + + + 0 + + + ru + ХранилищеЗначения + + + + + + + 0 + + + + + 0 + + + + + + + 20 + + + 3 + + 13 + + + + + 14 + + + ru + ЛюбаяСсылка + + + + + + + 7 + + + ru + ПростойСправочник22 + + + + + + + 5 + + + ru + Перем + + + + + + + true + 17 + 21 + 21 + + 80 + + + 136 + + + 143 + + + 41 + + + 49 + + + 202 + + + 129 + + + 24 + + + 97 + + + 155 + + + 123 + + + 109 + + + 54 + + + 240 + + + 88 + + + 48 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\243\320\267\320\273\320\276\320\262\320\237\320\273\320\260\320\275\320\260\320\236\320\261\320\274\320\265\320\275\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\243\320\267\320\273\320\276\320\262\320\237\320\273\320\260\320\275\320\260\320\236\320\261\320\274\320\265\320\275\320\260.xml" new file mode 100644 index 000000000..a7f467ee4 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\243\320\267\320\273\320\276\320\262\320\237\320\273\320\260\320\275\320\260\320\236\320\261\320\274\320\265\320\275\320\260.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\243\320\267\320\273\320\276\320\262\320\237\320\273\320\260\320\275\320\260\320\236\320\261\320\274\320\265\320\275\320\260/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\243\320\267\320\273\320\276\320\262\320\237\320\273\320\260\320\275\320\260\320\236\320\261\320\274\320\265\320\275\320\260/Ext/Template.xml" new file mode 100644 index 000000000..ade20bb50 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\270\320\265\320\243\320\267\320\273\320\276\320\262\320\237\320\273\320\260\320\275\320\260\320\236\320\261\320\274\320\265\320\275\320\260/Ext/Template.xml" @@ -0,0 +1,484 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 8 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 5 + + + + 5 + + 6 + + + + 6 + + 7 + + + + + 0 + + + + 0 + + + ru + Тип + + + + + + + 0 + + + ru + Вид + + + + + + + 0 + + + ru + ИмяПеременной + + + + + + + 0 + + + ru + ТЧ + + + + + + + 0 + + + ru + Реквизит + + + + + + + 0 + + + ru + Значение + + + + + + + 0 + + + ru + Режим + + + + + + + 0 + + + ru + ДополнительныйТипЗначения + + + + + + + + 1 + + + + 0 + + + ru + ПланОбмена + + + + + + + 0 + + + ru + ПланОбмена1 + + + + + + + 0 + + + ru + ЭтаИнформационнаяБаза + + + + + + 5 + + 0 + + + + + 0 + + + ru + ЭтотУзел + + + + + + + + 2 + + + 4 + + 0 + + + ru + Наименование + + + + + + + 0 + + + ru + Эта информационная база + + + + + + + 0 + + + + + 0 + + + + + + + 3 + + + 4 + + 0 + + + ru + Код + + + + + + + 0 + + + ru + 000000001 + + + + + + + 0 + + + + + 0 + + + + + + + 4 + + + + 0 + + + ru + ПланОбмена + + + + + + + 0 + + + ru + ПланОбмена1 + + + + + + + 0 + + + ru + Узел1 + + + + + + 5 + + 0 + + + + + 0 + + + + + + + 5 + + + 4 + + 0 + + + ru + Наименование + + + + + + + 0 + + + ru + Узел 1 + + + + + + + 0 + + + + + 0 + + + + + + + 6 + + + 4 + + 0 + + + ru + РеквизитБулево + + + + + + + 0 + + + ru + Истина + + + + + + + 0 + + + + + 0 + + + + + + + 7 + + + 4 + + 0 + + + ru + РеквизитПеречисление + + + + + + + 0 + + + ru + ЗначениеПеречисления2 + + + + + + + 0 + + + ru + Предопределенный + + + + + + + 0 + + + + + + true + 8 + 8 + 8 + + 85 + + + 91 + + + 165 + + + 24 + + + 147 + + + 167 + + + 123 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\235\320\265\321\201\320\272\320\276\320\273\321\214\320\272\320\270\321\205\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\230\320\221.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\235\320\265\321\201\320\272\320\276\320\273\321\214\320\272\320\270\321\205\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\230\320\221.xml" new file mode 100644 index 000000000..f072996a1 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\235\320\265\321\201\320\272\320\276\320\273\321\214\320\272\320\270\321\205\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\230\320\221.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\235\320\265\321\201\320\272\320\276\320\273\321\214\320\272\320\270\321\205\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\230\320\221/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\235\320\265\321\201\320\272\320\276\320\273\321\214\320\272\320\270\321\205\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\230\320\221/Ext/Template.xml" new file mode 100644 index 000000000..1569566ad --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\235\320\265\321\201\320\272\320\276\320\273\321\214\320\272\320\270\321\205\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\320\265\320\271\320\230\320\221/Ext/Template.xml" @@ -0,0 +1,860 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 5 + + + + 5 + + 6 + + + + 6 + + 7 + + + + + 0 + + + + 0 + + + ru + Тип + + + + + + + 0 + + + ru + Вид + + + + + + + 0 + + + ru + ИмяПеременной + + + + + + + 0 + + + ru + ТЧ + + + + + + + 0 + + + ru + Реквизит + + + + + + + 0 + + + ru + Значение + + + + + + + 0 + + + ru + Режим + + + + + + + + 1 + + + + 0 + + + ru + ПользовательИБ + + + + + + + 0 + + + + + + 0 + + + ru + Пользователь1 + + + + + + + + 2 + + + 4 + + 0 + + + ru + Имя + + + + + + + 8 + ПользовательПоУмолчанию + + + + + 0 + + + + + + + 3 + + + 4 + + 0 + + + ru + ПолноеИмя + + + + + + + 0 + + + + + + + 4 + + + 4 + + 0 + + + ru + АутентификацияСтандартная + + + + + + + 0 + + + ru + Да + + + + + + + + 5 + + + 4 + + 0 + + + ru + АутентификацияОС + + + + + + + 0 + + + ru + Нет + + + + + + + + 6 + + + 4 + + 0 + + + ru + ПользовательОС + + + + + + + 0 + + + + + + + 7 + + + 4 + + 0 + + + ru + ОсновнойИнтерфейс + + + + + + + 0 + + + + + + 8 + + + 4 + + 0 + + + ru + ПоказыватьВСпискеВыбора + + + + + + + 0 + + + ru + Да + + + + + + + + 9 + + + 4 + + 0 + + + ru + РежимЗапуска + + + + + + + 0 + + + ru + Обычное приложение + + + + + + + + 10 + + + 4 + + 0 + + + ru + Пароль + + + + + + + 0 + + + + + + + 11 + + + 3 + + 0 + + + ru + Роли + + + + + + + + 12 + + + 4 + + 0 + + + ru + Роль + + + + + + + 8 + Роль1 + + + + + + 13 + + + + 0 + + + + + 0 + + + + + 0 + + + + 4 + + 9 + + + ru + Роль + + + + + + + 8 + ПраваНеобходимыеДляТестирования + + + + + + 14 + + + + 0 + + + ru + ПользовательИБ + + + + + + + 0 + + + + + + 0 + + + ru + Пользователь2 + + + + + + + + 15 + + + 4 + + 0 + + + ru + Имя + + + + + + + 8 + Пользователь2 + + + + + 0 + + + + + + + 16 + + + 4 + + 0 + + + ru + ПолноеИмя + + + + + + + 0 + + + + + + + 17 + + + 4 + + 0 + + + ru + АутентификацияСтандартная + + + + + + + 0 + + + ru + Да + + + + + + + + 18 + + + 4 + + 0 + + + ru + АутентификацияОС + + + + + + + 0 + + + ru + Нет + + + + + + + + 19 + + + 4 + + 0 + + + ru + ПользовательОС + + + + + + + 0 + + + + + + + 20 + + + 4 + + 0 + + + ru + ОсновнойИнтерфейс + + + + + + + 0 + + + + + + 21 + + + 4 + + 0 + + + ru + ПоказыватьВСпискеВыбора + + + + + + + 0 + + + ru + Да + + + + + + + + 22 + + + 4 + + 0 + + + ru + РежимЗапуска + + + + + + + 0 + + + ru + Обычное приложение + + + + + + + + 23 + + + 4 + + 0 + + + ru + Пароль + + + + + + + 0 + + + + + + + 24 + + + 3 + + 0 + + + ru + Роли + + + + + + + + 25 + + + 4 + + 0 + + + ru + Роль + + + + + + + 8 + Роль1 + + + + + + 26 + + + + 0 + + + + + 0 + + + + + 0 + + + + 4 + + 9 + + + ru + Роль + + + + + + + 8 + ПраваНеобходимыеДляТестирования + + + + + true + 10 + 27 + 27 + + 80 + + + 104 + + + 129 + + + 24 + + + 186 + + + 155 + + + 90 + + + 155 + Parameter + + + 97 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\236\320\261\321\212\320\265\320\272\321\202\320\260\320\241\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274\320\242\320\270\320\277\320\260\320\237\320\265\321\200\320\265\321\207\320\270\321\201\320\273\320\265\320\275\320\270\320\265.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\236\320\261\321\212\320\265\320\272\321\202\320\260\320\241\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274\320\242\320\270\320\277\320\260\320\237\320\265\321\200\320\265\321\207\320\270\321\201\320\273\320\265\320\275\320\270\320\265.xml" new file mode 100644 index 000000000..96d4f3da9 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\236\320\261\321\212\320\265\320\272\321\202\320\260\320\241\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274\320\242\320\270\320\277\320\260\320\237\320\265\321\200\320\265\321\207\320\270\321\201\320\273\320\265\320\275\320\270\320\265.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\236\320\261\321\212\320\265\320\272\321\202\320\260\320\241\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274\320\242\320\270\320\277\320\260\320\237\320\265\321\200\320\265\321\207\320\270\321\201\320\273\320\265\320\275\320\270\320\265/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\236\320\261\321\212\320\265\320\272\321\202\320\260\320\241\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274\320\242\320\270\320\277\320\260\320\237\320\265\321\200\320\265\321\207\320\270\321\201\320\273\320\265\320\275\320\270\320\265/Ext/Template.xml" new file mode 100644 index 000000000..068c93ce3 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\236\320\261\321\212\320\265\320\272\321\202\320\260\320\241\320\227\320\260\320\277\320\276\320\273\320\275\320\265\320\275\320\275\321\213\320\274\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274\320\242\320\270\320\277\320\260\320\237\320\265\321\200\320\265\321\207\320\270\321\201\320\273\320\265\320\275\320\270\320\265/Ext/Template.xml" @@ -0,0 +1,283 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 8 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 2 + + + + 3 + + 3 + + + + 4 + + 4 + + + + 5 + + 5 + + + + 6 + + 6 + + + + + 0 + + + + 0 + + + ru + Тип + + + + + + + 0 + + + ru + Вид + + + + + + + 0 + + + ru + ИмяПеременной + + + + + + + 0 + + + ru + ТЧ + + + + + + + 0 + + + ru + Реквизит + + + + + + + 0 + + + ru + Значение + + + + + + + 0 + + + ru + Режим + + + + + + + 7 + + + ru + ДополнительныйТипЗначения + + + + + + + + 1 + + + + 0 + + + ru + Справочник + + + + + + + 0 + + + ru + ПростойСправочник + + + + + + + 0 + + + ru + ПростойСправочник + + + + + + + + 2 + + + 4 + + 0 + + + ru + Наименование + + + + + + + 0 + + + ru + тЗначениеПеречисления1 + + + + + + + + 3 + + + 4 + + 0 + + + ru + РеквизитПеречисление + + + + + + + 0 + + + ru + ЗначениеПеречисления1 + + + + + + + 0 + + + ru + Предопределенный + + + + + + + true + 8 + 4 + 4 + + 80 + + + 129 + + + 24 + + + 147 + + + 305 + + + 123 + + + 208 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260.xml" new file mode 100644 index 000000000..2603a6540 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260/Ext/Template.xml" new file mode 100644 index 000000000..89e251f05 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260/Ext/Template.xml" @@ -0,0 +1,332 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 5 + + + + 5 + + 6 + + + + 6 + + 5 + + + + + 0 + + + + 7 + + + ru + Тип + + + + + + + 7 + + + ru + Вид + + + + + + + 7 + + + ru + ИмяПеременной + + + + + + + 7 + + + ru + ТЧ + + + + + + + 7 + + + ru + Реквизит + + + + + + + 7 + + + ru + Значение + + + + + + + 7 + + + ru + Режим + + + + + + + + 1 + + + + 7 + + + ru + Справочник + + + + + + + 7 + + + ru + ПодчиненныйСправочник + + + + + + + 7 + + + ru + ПодчиненныйЭлемент + + + + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + + 2 + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + ru + Владелец + + + + + + + 7 + + + ru + Предопределенное значение + + + + + + + 7 + + + ru + Наименование + + + + + + + + 3 + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + ru + Наименование + + + + + + + 7 + + + ru + Подчиненный элемент + + + + + + + 7 + + + + + true + 7 + 4 + 4 + + 80 + + + 159 + + + 142 + + + 24 + + + 97 + + + 178 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260.xml" new file mode 100644 index 000000000..1c789c413 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260/Ext/Template.xml" new file mode 100644 index 000000000..e955a0611 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260/Ext/Template.xml" @@ -0,0 +1,258 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 2 + + + + 3 + + 3 + + + + 4 + + 4 + + + + 5 + + 5 + + + + 6 + + 6 + + + + + 0 + + + + 0 + + + ru + Тип + + + + + + + 0 + + + ru + Вид + + + + + + + 0 + + + ru + ИмяПеременной + + + + + + + 0 + + + ru + ТЧ + + + + + + + 0 + + + ru + Реквизит + + + + + + + 0 + + + ru + Значение + + + + + + + 0 + + + ru + Режим + + + + + + + + 1 + + + + 0 + + + ru + Справочник + + + + + + + 0 + + + ru + ПростойСправочник + + + + + + + 0 + + + ru + ПростойСправочник + + + + + + + + 2 + + + 4 + + 0 + + + ru + Наименование + + + + + + + 0 + + + ru + Тестовое наименование + + + + + + + + 3 + + + 4 + + 0 + + + ru + РеквизитБулево + + + + + + + 0 + + + ru + Истина + + + + + + + true + 7 + 4 + 4 + + 80 + + + 129 + + + 24 + + + 107 + + + 155 + + + 90 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260_\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\235\320\265\320\230\320\264\320\265\320\275\321\202\320\270\321\204\320\270\320\272\320\260\321\202\320\276\321\200.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260_\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\235\320\265\320\230\320\264\320\265\320\275\321\202\320\270\321\204\320\270\320\272\320\260\321\202\320\276\321\200.xml" new file mode 100644 index 000000000..697e22503 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260_\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\235\320\265\320\230\320\264\320\265\320\275\321\202\320\270\321\204\320\270\320\272\320\260\321\202\320\276\321\200.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260_\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\235\320\265\320\230\320\264\320\265\320\275\321\202\320\270\321\204\320\270\320\272\320\260\321\202\320\276\321\200/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260_\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\235\320\265\320\230\320\264\320\265\320\275\321\202\320\270\321\204\320\270\320\272\320\260\321\202\320\276\321\200/Ext/Template.xml" new file mode 100644 index 000000000..9e0b0212d --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260_\320\237\321\200\320\265\320\264\321\201\321\202\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\235\320\265\320\230\320\264\320\265\320\275\321\202\320\270\321\204\320\270\320\272\320\260\321\202\320\276\321\200/Ext/Template.xml" @@ -0,0 +1,258 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 2 + + + + 3 + + 3 + + + + 4 + + 4 + + + + 5 + + 5 + + + + 6 + + 6 + + + + + 0 + + + + 0 + + + ru + Тип + + + + + + + 0 + + + ru + Вид + + + + + + + 0 + + + ru + ИмяПеременной + + + + + + + 0 + + + ru + ТЧ + + + + + + + 0 + + + ru + Реквизит + + + + + + + 0 + + + ru + Значение + + + + + + + 0 + + + ru + Режим + + + + + + + + 1 + + + + 0 + + + ru + Справочник + + + + + + + 0 + + + ru + ПростойСправочник + + + + + + + 0 + + + ru + ПростойСправочник + + + + + + + + 2 + + + 4 + + 0 + + + ru + Наименование + + + + + + + 0 + + + ru + Тестовое,. наименование + + + + + + + + 3 + + + 4 + + 0 + + + ru + РеквизитБулево + + + + + + + 0 + + + ru + Истина + + + + + + + true + 7 + 4 + 4 + + 80 + + + 129 + + + 24 + + + 107 + + + 155 + + + 90 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\262\321\217\320\267\320\260\320\275\320\275\321\213\321\205\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\276\320\262.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\262\321\217\320\267\320\260\320\275\320\275\321\213\321\205\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\276\320\262.xml" new file mode 100644 index 000000000..19c22dfd4 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\262\321\217\320\267\320\260\320\275\320\275\321\213\321\205\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\276\320\262.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\262\321\217\320\267\320\260\320\275\320\275\321\213\321\205\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\276\320\262/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\262\321\217\320\267\320\260\320\275\320\275\321\213\321\205\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\276\320\262/Ext/Template.xml" new file mode 100644 index 000000000..6bf85f8d2 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\262\321\217\320\267\320\260\320\275\320\275\321\213\321\205\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\276\320\262/Ext/Template.xml" @@ -0,0 +1,448 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 5 + + + + 5 + + 6 + + + + 6 + + 7 + + + + + 0 + + + + 1 + + + ru + Тип + + + + + + + 2 + + + ru + Вид + + + + + + + 5 + + + ru + ИмяПеременной + + + + + + + 4 + + + ru + ТЧ + + + + + + + 8 + + + ru + Реквизит + + + + + + + 9 + + + ru + Значение + + + + + + + 10 + + + ru + Режим + + + + + + + + 1 + + + + 1 + + + ru + Справочник + + + + + + + 2 + + + ru + ПростойСправочник + + + + + + + 5 + + + ru + ПростойСправочник + + + + + + + 4 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + + 2 + + + + 1 + + + + + 2 + + + + + 5 + + + + + 4 + + + + + 8 + + + ru + Наименование + + + + + + + 9 + + + ru + Тестовое наименование + + + + + + + 10 + + + + + + 3 + + + + 1 + + + + + 0 + + + + + 0 + + + + 4 + + 8 + + + ru + РеквизитБулево + + + + + + + 9 + + + ru + Ложь + + + + + + + + 4 + + + + 1 + + + ru + Справочник + + + + + + + 0 + + + ru + ИерархическийСправочник + + + + + + + 0 + + + ru + ИерархическийСправочник + + + + + + 4 + + 8 + + + + + 0 + + + + + + 5 + + + 4 + + 8 + + + ru + Наименование + + + + + + + 11 + + + ru + Тестовое наименование + + + + + + + + 6 + + + 4 + + 0 + + + ru + ПростойСправочник + + + + + + + 0 + + + ru + ПростойСправочник + + + + + + + 0 + + + ru + Перем + + + + + + + true + 12 + 7 + 7 + + 80 + + + 104 + + + 109 + + + 24 + + + 129 + + + 162 + + + 49 + + + 97 + + + 155 + + + 90 + + + 200 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\222\320\223\321\200\321\203\320\277\320\277\320\265.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\222\320\223\321\200\321\203\320\277\320\277\320\265.xml" new file mode 100644 index 000000000..5eac5b51c --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\222\320\223\321\200\321\203\320\277\320\277\320\265.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\222\320\223\321\200\321\203\320\277\320\277\320\265/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\222\320\223\321\200\321\203\320\277\320\277\320\265/Ext/Template.xml" new file mode 100644 index 000000000..cfdced25c --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\222\320\223\321\200\321\203\320\277\320\277\320\265/Ext/Template.xml" @@ -0,0 +1,332 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 5 + + + + 5 + + 6 + + + + 6 + + 5 + + + + + 0 + + + + 7 + + + ru + Тип + + + + + + + 7 + + + ru + Вид + + + + + + + 7 + + + ru + ИмяПеременной + + + + + + + 7 + + + ru + ТЧ + + + + + + + 7 + + + ru + Реквизит + + + + + + + 7 + + + ru + Значение + + + + + + + 7 + + + ru + Режим + + + + + + + + 1 + + + + 7 + + + ru + Справочник + + + + + + + 7 + + + ru + ИерархическийСправочник + + + + + + + 7 + + + ru + ЭлементВГруппе + + + + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + + 2 + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + ru + Родитель + + + + + + + 7 + + + ru + Группа1 + + + + + + + 7 + + + ru + Наименование + + + + + + + + 3 + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + + + 7 + + + ru + Наименование + + + + + + + 7 + + + ru + Элемент в группе + + + + + + + 7 + + + + + true + 7 + 4 + 4 + + 80 + + + 171 + + + 112 + + + 24 + + + 97 + + + 117 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\241\321\202\321\200\320\276\320\272\320\260\320\274\320\270\320\222\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\271\320\247\320\260\321\201\321\202\320\270.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\241\321\202\321\200\320\276\320\272\320\260\320\274\320\270\320\222\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\271\320\247\320\260\321\201\321\202\320\270.xml" new file mode 100644 index 000000000..d051aff78 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\241\321\202\321\200\320\276\320\272\320\260\320\274\320\270\320\222\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\271\320\247\320\260\321\201\321\202\320\270.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\241\321\202\321\200\320\276\320\272\320\260\320\274\320\270\320\222\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\271\320\247\320\260\321\201\321\202\320\270/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\241\321\202\321\200\320\276\320\272\320\260\320\274\320\270\320\222\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\271\320\247\320\260\321\201\321\202\320\270/Ext/Template.xml" new file mode 100644 index 000000000..e8abb48a8 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\224\320\262\321\203\320\274\321\217\320\241\321\202\321\200\320\276\320\272\320\260\320\274\320\270\320\222\320\242\320\260\320\261\320\273\320\270\321\207\320\275\320\276\320\271\320\247\320\260\321\201\321\202\320\270/Ext/Template.xml" @@ -0,0 +1,954 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 2 + + + + 3 + + 3 + + + + 4 + + 4 + + + + 5 + + 5 + + + + 6 + + 6 + + + + + 0 + + + + 1 + + + ru + Тип + + + + + + + 7 + + + ru + Вид + + + + + + + 8 + + + ru + ИмяПеременной + + + + + + + 9 + + + ru + ТЧ + + + + + + + 10 + + + ru + Реквизит + + + + + + + 11 + + + ru + Значение + + + + + + + 12 + + + ru + Режим + + + + + + + + 1 + + + + 1 + + + ru + Справочник + + + + + + + 7 + + + ru + ПростойСправочник + + + + + + + 8 + + + ru + ПростойСправочник + + + + + + + 9 + + + + + 10 + + + + + 11 + + + + + 12 + + + + + + 2 + + + + 1 + + + + + 7 + + + + + 8 + + + + + + 9 + + + + + 10 + + + ru + Наименование + + + + + + + 11 + + + ru + Тест + + + + + + + 12 + + + + + + 3 + + + + 1 + + + + + 0 + + + + + 0 + + + + 4 + + 0 + + + ru + Код + + + + + + + 0 + + + ru + 5 + + + + + + + + 4 + + + + 1 + + + ru + Справочник + + + + + + + 0 + + + ru + ПростойСправочник2 + + + + + + + 0 + + + ru + ПростойСправочник2_1 + + + + + + + + 5 + + + 4 + + 10 + + + ru + Наименование + + + + + + + 11 + + + ru + Тест1 + + + + + + + + 6 + + + + 1 + + + + + 0 + + + + + 0 + + + + 4 + + 0 + + + ru + Код + + + + + + + 0 + + + ru + 5 + + + + + + + + 7 + + + + 1 + + + ru + Справочник + + + + + + + 7 + + + ru + ПростойСправочник2 + + + + + + + 13 + + + ru + ПростойСправочник2_2 + + + + + + + 3 + + + + + 14 + + + + + 15 + + + + + 6 + + + + + + 8 + + + + 1 + + + + + 7 + + + + + 13 + + + + + 3 + + + + + 10 + + + ru + Наименование + + + + + + + 11 + + + ru + Тест2 + + + + + + + 6 + + + + + + 9 + + + + 1 + + + + + 0 + + + + + 0 + + + + 4 + + 0 + + + ru + Код + + + + + + + 0 + + + ru + 6 + + + + + + + + 10 + + + + 1 + + + ru + Справочник + + + + + + + 0 + + + ru + СправочникСТабЧастью + + + + + + + 0 + + + ru + СправочникСТабЧастью + + + + + + + + 11 + + + 4 + + 10 + + + ru + Наименование + + + + + + + 11 + + + ru + Тестовое наименование + + + + + + + + 12 + + + 3 + + 0 + + + ru + Состав + + + + + + + + 13 + + + 4 + + 0 + + + ru + ПростойСправочник + + + + + + + 8 + + + ru + ПростойСправочник + + + + + + + 0 + + + ru + Перем + + + + + + + + 14 + + + 4 + + 13 + + + ru + ПростойСправочник2 + + + + + + + 13 + + + ru + ПростойСправочник2_1 + + + + + + + 6 + + + ru + Перем + + + + + + + + 15 + + + 4 + + 0 + + + ru + РеквизитБулево + + + + + + + 0 + + + ru + Истина + + + + + + + + 16 + + + 3 + + 3 + + + ru + Состав + + + + + + + 14 + + + + + 15 + + + + + 6 + + + + + + 17 + + + 3 + + 3 + + + + + 14 + + + ru + ПростойСправочник + + + + + + + 8 + + + ru + ПростойСправочник + + + + + + + 6 + + + ru + Перем + + + + + + + + 18 + + + 3 + + 3 + + + + + 13 + + + ru + ПростойСправочник2 + + + + + + + 13 + + + ru + ПростойСправочник2_2 + + + + + + + 6 + + + ru + Перем + + + + + + + + 19 + + + 3 + + 3 + + + + + 14 + + + ru + РеквизитБулево + + + + + + + 15 + + + ru + Ложь + + + + + + + 6 + + + + + true + 16 + 20 + 20 + + 80 + + + 152 + + + 54 + + + 136 + + + 150 + + + 49 + + + 202 + + + 129 + + + 24 + + + 97 + + + 155 + + + 123 + + + 109 + + + 240 + + + 88 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\237\321\203\321\201\321\202\320\276\320\271\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\260\320\241\320\276\321\201\321\202\320\260\320\262\320\275\320\276\320\263\320\276\320\242\320\270\320\277\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\237\321\203\321\201\321\202\320\276\320\271\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\260\320\241\320\276\321\201\321\202\320\260\320\262\320\275\320\276\320\263\320\276\320\242\320\270\320\277\320\260.xml" new file mode 100644 index 000000000..ec5d06630 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\237\321\203\321\201\321\202\320\276\320\271\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\260\320\241\320\276\321\201\321\202\320\260\320\262\320\275\320\276\320\263\320\276\320\242\320\270\320\277\320\260.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\237\321\203\321\201\321\202\320\276\320\271\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\260\320\241\320\276\321\201\321\202\320\260\320\262\320\275\320\276\320\263\320\276\320\242\320\270\320\277\320\260/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\237\321\203\321\201\321\202\320\276\320\271\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\260\320\241\320\276\321\201\321\202\320\260\320\262\320\275\320\276\320\263\320\276\320\242\320\270\320\277\320\260/Ext/Template.xml" new file mode 100644 index 000000000..6eca0204f --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\237\321\203\321\201\321\202\320\276\320\271\320\241\321\201\321\213\320\273\320\272\320\276\320\271\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\260\320\241\320\276\321\201\321\202\320\260\320\262\320\275\320\276\320\263\320\276\320\242\320\270\320\277\320\260/Ext/Template.xml" @@ -0,0 +1,334 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 8 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 5 + + + + 5 + + 6 + + + + 6 + + 7 + + + + 7 + + 8 + + + + + 0 + + + + 0 + + + ru + Тип + + + + + + + 0 + + + ru + Вид + + + + + + + 0 + + + ru + ИмяПеременной + + + + + + + 0 + + + ru + ТЧ + + + + + + + 0 + + + ru + Реквизит + + + + + + + 0 + + + ru + Значение + + + + + + + 0 + + + ru + Режим + + + + + + + 0 + + + ru + ДополнительныйТипЗначения + + + + + + + + 1 + + + + 0 + + + ru + Справочник + + + + + + + 0 + + + ru + СправочникСТабЧастью + + + + + + + 2 + + + ru + СправочникСТабЧастью + + + + + + 5 + + 0 + + + + + 0 + + + + + + + 2 + + + 4 + + 0 + + + ru + Наименование + + + + + + + 6 + + + ru + Тест пустые рекв + + + + + + + 0 + + + + + 0 + + + + + + + 3 + + + 4 + + 0 + + + ru + РеквизитСоставногоТипа + + + + + + 7 + + 0 + + + ru + СправочникСсылка.ПростойСправочник + + + + + + + + 4 + + + 4 + + 0 + + + ru + РеквизитСоставногоТипа2 + + + + + + 7 + + 0 + + + ru + СправочникСсылка.ПростойСправочник2 + + + + + + + true + 9 + 5 + 5 + + 80 + + + 152 + + + 177 + + + 24 + + + 167 + + + 183 + + + 49 + + + 246 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274\320\241\321\201\321\213\320\273\320\272\320\260_\320\240\320\265\320\266\320\270\320\274\320\237\320\276\320\270\321\201\320\272\320\260\320\232\320\276\320\264.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274\320\241\321\201\321\213\320\273\320\272\320\260_\320\240\320\265\320\266\320\270\320\274\320\237\320\276\320\270\321\201\320\272\320\260\320\232\320\276\320\264.xml" new file mode 100644 index 000000000..4f88b818d --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274\320\241\321\201\321\213\320\273\320\272\320\260_\320\240\320\265\320\266\320\270\320\274\320\237\320\276\320\270\321\201\320\272\320\260\320\232\320\276\320\264.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274\320\241\321\201\321\213\320\273\320\272\320\260_\320\240\320\265\320\266\320\270\320\274\320\237\320\276\320\270\321\201\320\272\320\260\320\232\320\276\320\264/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274\320\241\321\201\321\213\320\273\320\272\320\260_\320\240\320\265\320\266\320\270\320\274\320\237\320\276\320\270\321\201\320\272\320\260\320\232\320\276\320\264/Ext/Template.xml" new file mode 100644 index 000000000..230f47b28 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\241\320\276\320\267\320\264\320\260\320\275\320\270\320\265\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260\320\241\320\240\320\265\320\272\320\262\320\270\320\267\320\270\321\202\320\276\320\274\320\241\321\201\321\213\320\273\320\272\320\260_\320\240\320\265\320\266\320\270\320\274\320\237\320\276\320\270\321\201\320\272\320\260\320\232\320\276\320\264/Ext/Template.xml" @@ -0,0 +1,295 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 7 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 5 + + + + 5 + + 6 + + + + 6 + + 7 + + + + + 0 + + + + 1 + + + ru + Тип + + + + + + + 2 + + + ru + Вид + + + + + + + 5 + + + ru + ИмяПеременной + + + + + + + 4 + + + ru + ТЧ + + + + + + + 8 + + + ru + Реквизит + + + + + + + 9 + + + ru + Значение + + + + + + + 10 + + + ru + Режим + + + + + + + + 1 + + + + 1 + + + ru + Справочник + + + + + + + 0 + + + ru + ИерархическийСправочник + + + + + + + 0 + + + ru + ИерархическийСправочник + + + + + + 4 + + 8 + + + + + 0 + + + + + + 2 + + + 4 + + 8 + + + ru + Наименование + + + + + + + 11 + + + ru + Тестовое наименование + + + + + + + + 3 + + + 4 + + 0 + + + ru + ПростойСправочник + + + + + + + 9 + + + ru + Тестовое наименование + + + + + + + 0 + + + ru + Наименование + + + + + + + true + 12 + 4 + 4 + + 80 + + + 104 + + + 109 + + + 24 + + + 129 + + + 162 + + + 49 + + + 97 + + + 155 + + + 90 + + + 200 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\255\321\202\320\260\320\273\320\276\320\275\320\234\320\260\320\272\320\265\321\202\320\260\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\222\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\265\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\255\321\202\320\260\320\273\320\276\320\275\320\234\320\260\320\272\320\265\321\202\320\260\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\222\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\265\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271.xml" new file mode 100644 index 000000000..10a34be1a --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\255\321\202\320\260\320\273\320\276\320\275\320\234\320\260\320\272\320\265\321\202\320\260\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\222\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\265\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/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\255\321\202\320\260\320\273\320\276\320\275\320\234\320\260\320\272\320\265\321\202\320\260\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\222\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\265\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\255\321\202\320\260\320\273\320\276\320\275\320\234\320\260\320\272\320\265\321\202\320\260\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\222\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\265\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271/Ext/Template.xml" new file mode 100644 index 000000000..26cfb7d4a --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\255\321\202\320\260\320\273\320\276\320\275\320\234\320\260\320\272\320\265\321\202\320\260\320\224\320\262\321\203\321\205\320\227\320\260\320\277\320\270\321\201\320\265\320\271\320\222\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\265\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\271/Ext/Template.xml" @@ -0,0 +1,689 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 8 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 5 + + + + 5 + + 6 + + + + 6 + + 7 + + + + + 0 + + + + 8 + + + ru + Тип + + + + + + + 9 + + + ru + Вид + + + + + + + 10 + + + ru + ИмяПеременной + + + + + + + 4 + + + ru + ТЧ + + + + + + + 7 + + + ru + Реквизит + + + + + + + 11 + + + ru + Значение + + + + + + + 12 + + + ru + Режим + + + + + + + 13 + + + ru + ДополнительныйТипЗначения + + + + + + + + 1 + + + + 8 + + + ru + РегистрСведений + + + + + + + 0 + + + ru + РегистрСведений1 + + + + + + + 0 + + + ru + ЗаписьРегистра1 + + + + + + 5 + + 0 + + + + + + 0 + + + + + + + 2 + + + 4 + + 14 + + + ru + ПростойСправочник + + + + + + + 11 + + + ru + Тест + + + + + + + 15 + + + ru + Наименование + + + + + + + + 3 + + + 3 + + 0 + + + + + 0 + + + ru + ПростойСправочник2 + + + + + + + 11 + + + ru + Тест1 + + + + + + + 15 + + + ru + Наименование + + + + + + + + 4 + + + 3 + + 0 + + + + + 0 + + + ru + РесурсЧисло + + + + + + + 0 + + + ru + 300 + + + + + + + + 5 + + + 4 + + 0 + + + ru + РесурсБулево + + + + + + + 0 + + + ru + Ложь + + + + + + + + 6 + + + + 8 + + + ru + РегистрСведений + + + + + + + 16 + + + ru + РегистрСведений1 + + + + + + + 17 + + + ru + ЗаписьРегистра2 + + + + + + + 18 + + + + + 14 + + + + + 19 + + + + + + 15 + + + + + + + 7 + + + + 1 + + + + + 16 + + + + + 17 + + + + + 18 + + + + + 14 + + + ru + ПростойСправочник + + + + + + + 11 + + + ru + Тест + + + + + + + 15 + + + ru + Наименование + + + + + + + + 8 + + + + 1 + + + + + 16 + + + + + 17 + + + + + 18 + + + + + 14 + + + ru + ПростойСправочник2 + + + + + + + 10 + + + ru + Тест2 + + + + + + + 15 + + + ru + Наименование + + + + + + + + 9 + + + + 1 + + + + + 16 + + + + + 17 + + + + + 18 + + + + + 14 + + + ru + РесурсЧисло + + + + + + + 19 + + + ru + 400 + + + + + + + 15 + + + + + + 10 + + + + 1 + + + + + 16 + + + + + 17 + + + + + 18 + + + + + 14 + + + ru + РесурсБулево + + + + + + + 19 + + + ru + Истина + + + + + + + 15 + + + + + true + 20 + 11 + 11 + + 113 + + + 120 + + + 112 + + + 24 + + + 136 + + + 66 + + + 97 + + + 80 + + + 202 + + + 129 + + + 155 + + + 123 + + + 187 + + + 104 + + + 49 + + + 137 + + + 109 + + + 41 + + + 102 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\255\321\202\320\260\320\273\320\276\320\275\320\234\320\260\320\272\320\265\321\202\320\260\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\255\321\202\320\260\320\273\320\276\320\275\320\234\320\260\320\272\320\265\321\202\320\260\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260.xml" new file mode 100644 index 000000000..dd6e503f6 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\255\321\202\320\260\320\273\320\276\320\275\320\234\320\260\320\272\320\265\321\202\320\260\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\255\321\202\320\260\320\273\320\276\320\275\320\234\320\260\320\272\320\265\321\202\320\260\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260/Ext/Template.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\255\321\202\320\260\320\273\320\276\320\275\320\234\320\260\320\272\320\265\321\202\320\260\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260/Ext/Template.xml" new file mode 100644 index 000000000..2f61c9170 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\320\265\321\200\320\270\320\260\320\273\320\270\320\267\320\260\321\202\320\276\321\200MXL/Templates/\320\255\321\202\320\260\320\273\320\276\320\275\320\234\320\260\320\272\320\265\321\202\320\260\320\237\321\200\320\276\321\201\321\202\320\276\320\263\320\276\320\241\320\277\321\200\320\260\320\262\320\276\321\207\320\275\320\270\320\272\320\260/Ext/Template.xml" @@ -0,0 +1,272 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 8 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 2 + + + + 3 + + 3 + + + + 4 + + 4 + + + + 5 + + 5 + + + + 6 + + 6 + + + + + 0 + + + + 0 + + + ru + Тип + + + + + + + 0 + + + ru + Вид + + + + + + + 0 + + + ru + ИмяПеременной + + + + + + + 0 + + + ru + ТЧ + + + + + + + 0 + + + ru + Реквизит + + + + + + + 0 + + + ru + Значение + + + + + + + 0 + + + ru + Режим + + + + + + + 7 + + + ru + ДополнительныйТипЗначения + + + + + + + + 1 + + + + 0 + + + ru + Справочник + + + + + + + 0 + + + ru + ПростойСправочник + + + + + + + 0 + + + ru + ПростойСправочник1 + + + + + + + + 2 + + + 4 + + 0 + + + ru + Наименование + + + + + + + 0 + + + ru + Тестовое наименование + + + + + + + + 3 + + + 4 + + 0 + + + ru + РеквизитБулево + + + + + + + 0 + + + ru + Истина + + + + + + + true + 8 + 4 + 4 + + 80 + + + 129 + + + 24 + + + 107 + + + 155 + + + 90 + + + 187 + + + 72 + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213.xml" new file mode 100644 index 000000000..3c552da46 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213.xml" @@ -0,0 +1,34 @@ + + + + + + dfd8c3fb-8053-4dd6-808e-66185a6de41d + 11bbac6c-68e6-4dd6-80cf-054f9435cfcc + + + abb67565-5b31-4ab1-afdf-e69a3ff9101c + 985b2405-6f68-45ae-b7bb-b082258d189b + + + + СтроковыеУтилиты + + + ru + Строковые утилиты + + + + false + DataProcessor.СтроковыеУтилиты.Form.Форма + + false + + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..9fa2ab21c --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213/Ext/ObjectModule.bsl" @@ -0,0 +1,1239 @@ + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Утилита); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "Строковые утилиты"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + +КонецПроцедуры +// } Plugin interface + + +// { Функции работы со строками + +// Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину. +// +// Параметры: +// Строка - Строка - текст с разделителями; +// Разделитель - Строка - разделитель строк текста, минимум 1 символ; +// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк. +// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: +// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки +// включаются в результат. +// Е если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в +// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а +// при других разделителях результатом функции будет пустой массив. +// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок. +// +// Возвращаемое значение: +// Массив - массив строк. +// +// Примеры: +// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые +// строки; +// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов; +// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов; +// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив; +// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой); +// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой); +// +Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт + + Результат = Новый Массив; + + // Для обеспечения обратной совместимости. + Если ПропускатьПустыеСтроки = Неопределено Тогда + ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); + Если ПустаяСтрока(Строка) Тогда + Если Разделитель = " " Тогда + Результат.Добавить(""); + КонецЕсли; + Возврат Результат; + КонецЕсли; + КонецЕсли; + // + + Позиция = Найти(Строка, Разделитель); + Пока Позиция > 0 Цикл + Подстрока = Лев(Строка, Позиция - 1); + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда + Если СокращатьНепечатаемыеСимволы Тогда + Результат.Добавить(СокрЛП(Подстрока)); + Иначе + Результат.Добавить(Подстрока); + КонецЕсли; + КонецЕсли; + Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); + Позиция = Найти(Строка, Разделитель); + КонецЦикла; + + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда + Если СокращатьНепечатаемыеСимволы Тогда + Результат.Добавить(СокрЛП(Строка)); + Иначе + Результат.Добавить(Строка); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +/// Объединяет строки из массива в строку с разделителями. +// +// Параметры: +// Массив - Массив - массив строк которые необходимо объединить в одну строку; +// Разделитель - Строка - любой набор символов, который будет использован в качестве разделителя. +// +// Возвращаемое значение: +// Строка - строка с разделителями. +// +Функция СтрокаИзМассиваПодстрок(Массив, Разделитель = ",", СокращатьНепечатаемыеСимволы = Ложь) Экспорт + + Результат = ""; + + Для Индекс = 0 По Массив.ВГраница() Цикл + Подстрока = Массив[Индекс]; + + Если СокращатьНепечатаемыеСимволы Тогда + Подстрока = СокрЛП(Подстрока); + КонецЕсли; + + Если ТипЗнч(Подстрока) <> Тип("Строка") Тогда + Подстрока = Строка(Подстрока); + КонецЕсли; + + Если Индекс > 0 Тогда + Результат = Результат + Разделитель; + КонецЕсли; + + Результат = Результат + Подстрока; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Определяет, является ли символ разделителем. +// +// Параметры: +// КодСимвола - Число - код проверяемого символа; +// РазделителиСлов - Строка - символы разделителей. +// +// Возвращаемое значение: +// Булево - истина, если символ является разделителем. +// +Функция ЭтоРазделительСлов(КодСимвола, РазделителиСлов = Неопределено) Экспорт + + Если РазделителиСлов <> Неопределено Тогда + Возврат Найти(РазделителиСлов, Символ(КодСимвола)) > 0; + КонецЕсли; + + Диапазоны = Новый Массив; + Диапазоны.Добавить(Новый Структура("Мин,Макс", 48, 57)); // цифры + Диапазоны.Добавить(Новый Структура("Мин,Макс", 65, 90)); // латиница большие + Диапазоны.Добавить(Новый Структура("Мин,Макс", 97, 122)); // латиница маленькие + Диапазоны.Добавить(Новый Структура("Мин,Макс", 1040, 1103)); // кириллица + Диапазоны.Добавить(Новый Структура("Мин,Макс", 1025, 1025)); // символ "Ё" + Диапазоны.Добавить(Новый Структура("Мин,Макс", 1105, 1105)); // символ "ё" + Диапазоны.Добавить(Новый Структура("Мин,Макс", 95, 95)); // символ "_" + + Для Каждого Диапазон Из Диапазоны Цикл + Если КодСимвола >= Диапазон.Мин И КодСимвола <= Диапазон.Макс Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Разбивает строку на несколько строк, используя заданный набор разделителей. +// Если параметр РазделителиСлов не задан, то разделителем слов считается любой из символов, +// не относящихся к символам латиницы, кириллицы, цифры, подчеркивания. +// +// Параметры: +// Строка - Строка - строка, которую необходимо разложить на слова. +// РазделителиСлов - Строка - строка, содержащая символы-разделители. +// +// Возвращаемое значение: +// массив значений, элементы которого - отдельные слова. +// +// Пример: +// РазложитьСтрокуВМассивСлов("один-@#два2_!три") возвратит массив значений: "один", "два2_", "три"; +// РазложитьСтрокуВМассивСлов("один-@#два2_!три", "#@!_") возвратит массив значений: "один-", "два2", "три". +// +Функция РазложитьСтрокуВМассивСлов(Знач Строка, РазделителиСлов = Неопределено) Экспорт + + Слова = Новый Массив; + + РазмерТекста = СтрДлина(Строка); + НачалоСлова = 1; + Для Позиция = 1 По РазмерТекста Цикл + КодСимвола = КодСимвола(Строка, Позиция); + Если ЭтоРазделительСлов(КодСимвола, РазделителиСлов) Тогда + Если Позиция <> НачалоСлова Тогда + Слова.Добавить(Сред(Строка, НачалоСлова, Позиция - НачалоСлова)); + КонецЕсли; + НачалоСлова = Позиция + 1; + КонецЕсли; + КонецЦикла; + + Если Позиция <> НачалоСлова Тогда + Слова.Добавить(Сред(Строка, НачалоСлова, Позиция - НачалоСлова)); + КонецЕсли; + + Возврат Слова; + +КонецФункции + +// Подставляет параметры в строку. Максимально возможное число параметров - 9. +// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. +// +// Параметры: +// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); +// Параметр - Строка - подставляемый параметр. +// +// Возвращаемое значение: +// Строка - текстовая строка с подставленными параметрами. +// +// Пример: +// ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". +// +Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, + Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, + Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт + + ИспользоватьАльтернативныйАлгоритм = + Найти(Параметр1, "%") + Или Найти(Параметр2, "%") + Или Найти(Параметр3, "%") + Или Найти(Параметр4, "%") + Или Найти(Параметр5, "%") + Или Найти(Параметр6, "%") + Или Найти(Параметр7, "%") + Или Найти(Параметр8, "%") + Или Найти(Параметр9, "%"); + + Если ИспользоватьАльтернативныйАлгоритм Тогда + СтрокаПодстановки = ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(СтрокаПодстановки, Параметр1, + Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9); + Иначе + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%4", Параметр4); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%5", Параметр5); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%6", Параметр6); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%7", Параметр7); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%8", Параметр8); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%9", Параметр9); + КонецЕсли; + + Возврат СтрокаПодстановки; +КонецФункции + +// Подставляет параметры в строку. Число параметров в строке не ограничено. +// Параметры в строке задаются как %<номер параметра>. Нумерация параметров +// начинается с единицы. +// +// Параметры +// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%1"); +// МассивПараметров - Массив - массив строк, которые соответствуют параметрам в строке подстановки. +// +// Возвращаемое значение: +// Строка - строка с подставленными параметрами. +// +// Пример: +// МассивПараметров = Новый Массив; +// МассивПараметров = МассивПараметров.Добавить("Вася"); +// МассивПараметров = МассивПараметров.Добавить("Зоопарк"); +// +// Строка = ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), МассивПараметров); +// +Функция ПодставитьПараметрыВСтрокуИзМассива(Знач СтрокаПодстановки, Знач МассивПараметров) Экспорт + + СтрокаРезультата = СтрокаПодстановки; + + Индекс = МассивПараметров.Количество(); + Пока Индекс > 0 Цикл + Значение = МассивПараметров[Индекс-1]; + Если Не ПустаяСтрока(Значение) Тогда + СтрокаРезультата = СтрЗаменить(СтрокаРезультата, "%" + Формат(Индекс, "ЧГ="), Значение); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + + Возврат СтрокаРезультата; + +КонецФункции + +// Заменяет в шаблоне строки имена параметров на их значения. Параметры в строке выделяются с двух сторон квадратными +// скобками. +// +// Параметры: +// +// ШаблонСтроки - Строка - строка, в которую необходимо вставить значения. +// ВставляемыеЗначения - Структура - структура значений, где ключ - имя параметра без спецсимволов, +// значение - вставляемое значение. +// +// Возвращаемое значение: +// Строка - строка со вставленными значениями. +// +// Пример использования: +// ВставитьПараметрыВСтроку("Здравствуй, [Имя] [Фамилия].", Новый Структура("Фамилия,Имя", "Пупкин", "Вася")); +// Возвращает: "Здравствуй, Вася Пупкин". +Функция ВставитьПараметрыВСтроку(Знач ШаблонСтроки, ВставляемыеЗначения) Экспорт + Результат = ШаблонСтроки; + Для Каждого Параметр Из ВставляемыеЗначения Цикл + Результат = СтрЗаменить(Результат, "[" + Параметр.Ключ + "]", Параметр.Значение); + КонецЦикла; + Возврат Результат; +КонецФункции + +// Получает значения параметров из строки. +// +// Параметры: +// СтрокаПараметров - Строка - строка, содержащая параметры, каждый из которых представляет собой +// фрагмент вида <Имя параметра>=<Значение>, где: +// Имя параметра - имя параметра; +// Значение - его значение. +// Фрагменты отделяются друг от друга символами ';'. +// Если значение содержит пробельные символы, то оно должно быть заключено в двойные +// кавычки ("). +// Например: +// "File=""c:\InfoBases\Trade""; Usr=""Director"";" +// +// Возвращаемое значение: +// Структура - структура параметров, где ключ - имя параметра, значение - значение параметра. +// +Функция ПолучитьПараметрыИзСтроки(Знач СтрокаПараметров) Экспорт + + Результат = Новый Структура; + + СимволДвойныеКавычки = Символ(34); // (") + + МассивПодстрок = РазложитьСтрокуВМассивПодстрок(СтрокаПараметров, ";"); + + Для Каждого СтрокаПараметра Из МассивПодстрок Цикл + + ПозицияПервогоЗнакаРавенства = Найти(СтрокаПараметра, "="); + + // Получаем имя параметра + ИмяПараметра = СокрЛП(Лев(СтрокаПараметра, ПозицияПервогоЗнакаРавенства - 1)); + + // Получаем значение параметра + ЗначениеПараметра = СокрЛП(Сред(СтрокаПараметра, ПозицияПервогоЗнакаРавенства + 1)); + + Если Лев(ЗначениеПараметра, 1) = СимволДвойныеКавычки + И Прав(ЗначениеПараметра, 1) = СимволДвойныеКавычки Тогда + + ЗначениеПараметра = Сред(ЗначениеПараметра, 2, СтрДлина(ЗначениеПараметра) - 2); + + КонецЕсли; + + Если Не ПустаяСтрока(ИмяПараметра) Тогда + + Результат.Вставить(ИмяПараметра, ЗначениеПараметра); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Проверяет, содержит ли строка только цифры. +// +// Параметры: +// СтрокаПроверки - Строка - Строка для проверки. +// УчитыватьЛидирующиеНули - Булево - Флаг учета лидирующих нулей, если Истина, то ведущие нули пропускаются. +// УчитыватьПробелы - Булево - Флаг учета пробелов, если Истина, то пробелы при проверке игнорируются. +// +// Возвращаемое значение: +// Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы. +// +Функция ТолькоЦифрыВСтроке(Знач СтрокаПроверки, Знач УчитыватьЛидирующиеНули = Истина, Знач УчитыватьПробелы = Истина) Экспорт + + Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если Не УчитыватьПробелы Тогда + СтрокаПроверки = СтрЗаменить(СтрокаПроверки, " ", ""); + КонецЕсли; + + Если ПустаяСтрока(СтрокаПроверки) Тогда + Возврат Истина; + КонецЕсли; + + Если Не УчитыватьЛидирующиеНули Тогда + Позиция = 1; + // Взятие символа за границей строки возвращает пустую строку. + Пока Сред(СтрокаПроверки, Позиция, 1) = "0" Цикл + Позиция = Позиция + 1; + КонецЦикла; + СтрокаПроверки = Сред(СтрокаПроверки, Позиция); + КонецЕсли; + + // Если содержит только цифры, то в результате замен должна быть получена пустая строка. + // Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы. + Возврат СтрДлина( + СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( + СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( + СтрокаПроверки, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "") + ) = 0; + +КонецФункции + +// Проверяет, содержит ли строка только символы кириллического алфавита. +// +// Параметры: +// УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением. +// ДопустимыеСимволы - строка для проверки. +// +// Возвращаемое значение: +// Булево - Истина, если строка содержит только кириллические (или допустимые) символы или пустая; +// Ложь, если строка содержит иные символы. +// +Функция ТолькоКириллицаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт + + Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда + Возврат Истина; + КонецЕсли; + + КодыДопустимыхСимволов = Новый Массив; + КодыДопустимыхСимволов.Добавить(1105); // "ё" + КодыДопустимыхСимволов.Добавить(1025); // "Ё" + + Для а = 1 По СтрДлина(ДопустимыеСимволы) Цикл + КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, а, 1))); + КонецЦикла; + + Для а = 1 По СтрДлина(СтрокаПроверки) Цикл + КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1)); + Если ((КодСимвола < 1040) Или (КодСимвола > 1103)) + И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) + И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Проверяет, содержит ли строка только символы латинского алфавита. +// +// Параметры: +// УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением. +// ДопустимыеСимволы - строка для проверки. +// +// Возвращаемое значение: +// Булево - Истина, если строка содержит только латинские (или допустимые) символы; +// - Ложь, если строка содержит иные символы. +// +Функция ТолькоЛатиницаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт + + Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда + Возврат Истина; + КонецЕсли; + + КодыДопустимыхСимволов = Новый Массив; + + Для а = 1 По СтрДлина(ДопустимыеСимволы) Цикл + КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, а, 1))); + КонецЦикла; + + Для а = 1 По СтрДлина(СтрокаПроверки) Цикл + КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1)); + Если ((КодСимвола < 65) Или (КодСимвола > 90 И КодСимвола < 97) Или (КодСимвола > 122)) + И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) + И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Удаляет двойные кавычки с начала и конца строки, если они есть. +// +// Параметры: +// Строка - входная строка; +// +// Возвращаемое значение: +// Строка - строка без двойных кавычек. +// +Функция СократитьДвойныеКавычки(Знач Строка) Экспорт + + Пока Лев(Строка, 1) = """" Цикл + Строка = Сред(Строка, 2); + КонецЦикла; + + Пока Прав(Строка, 1) = """" Цикл + Строка = Лев(Строка, СтрДлина(Строка) - 1); + КонецЦикла; + + Возврат Строка; + +КонецФункции + +// Удаляет из строки указанное количество символов справа. +// +// Параметры: +// Текст - Строка - строка, в которой необходимо удалить последние символы; +// ЧислоСимволов - Число - количество удаляемых символов. +// +Процедура УдалитьПоследнийСимволВСтроке(Текст, ЧислоСимволов = 1) Экспорт + + Текст = Лев(Текст, СтрДлина(Текст) - ЧислоСимволов); + +КонецПроцедуры + +// Осуществляет поиск символа, начиная с конца строки. +// +// Параметры: +// Строка - Строка - строка, в которой осуществляется поиск; +// Символ - Строка - искомый символ. Допускается искать строку, содержащую более одного символа. +// +// Возвращаемое значение: +// Число - позиция символа в строке. +// Если строка не содержит указанного символа, то возвращается 0. +// +Функция НайтиСимволСКонца(Знач Строка, Знач Символ) Экспорт + + Для Позиция = -СтрДлина(Строка) По -1 Цикл + Если Сред(Строка, -Позиция, СтрДлина(Символ)) = Символ Тогда + Возврат -Позиция; + КонецЕсли; + КонецЦикла; + + Возврат 0; + +КонецФункции + +// Проверяет, является ли строка уникальным идентификатором. +// В качестве уникального идентификатора предполагается строка вида +// "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где X = [0..9,a..f]. +// +// Параметры: +// ИдентификаторСтрока - Строка - проверяемая строка. +// +// Возвращаемое значение: +// Булево - Истина, если переданная строка является уникальным идентификатором. +Функция ЭтоУникальныйИдентификатор(Знач Строка) Экспорт + + Шаблон = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"; + + Если СтрДлина(Шаблон) <> СтрДлина(Строка) Тогда + Возврат Ложь; + КонецЕсли; + Для Позиция = 1 По СтрДлина(Строка) Цикл + Если КодСимвола(Шаблон, Позиция) = 88 // X + И ((КодСимвола(Строка, Позиция) < 48 Или КодСимвола(Строка, Позиция) > 57) // 0..9 + И (КодСимвола(Строка, Позиция) < 97 Или КодСимвола(Строка, Позиция) > 102) // a..f + И (КодСимвола(Строка, Позиция) < 65 Или КодСимвола(Строка, Позиция) > 70)) // A..F + Или КодСимвола(Шаблон, Позиция) = 45 И КодСимвола(Строка, Позиция) <> 45 Тогда // - + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Формирует строку повторяющихся символов заданной длины. +// +// Параметры: +// Символ - Строка - символ, из которого будет формироваться строка. +// ДлинаСтроки - Число - требуемая длина результирующей строки. +// +// Возвращаемое значение: +// Строка - строка, состоящая из повторяющихся символов. +// +Функция СформироватьСтрокуСимволов(Знач Символ, Знач ДлинаСтроки) Экспорт + + Результат = ""; + Для Счетчик = 1 По ДлинаСтроки Цикл + Результат = Результат + Символ; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Дополняет строку символами слева или справа до заданной длины и возвращает ее. +// Незначащие символы слева и справа удаляются. По умолчанию функция дополняет строку символами "0" (ноль) слева. +// +// Параметры: +// Строка - Строка - исходная строка, которую необходимо дополнить символами; +// ДлинаСтроки - Число - требуемая результирующая длина строки; +// Символ - Строка - символ, которым необходимо дополнить строку; +// Режим - Строка - "Слева" или "Справа" - режим добавления символов к исходной строке. +// +// Возвращаемое значение: +// Строка - строка, дополненная символами. +// +// Пример 1: +// Строка = "1234"; ДлинаСтроки = 10; Символ = "0"; Режим = "Слева" +// Возврат: "0000001234" +// +// Пример 2: +// Строка = " 1234 "; ДлинаСтроки = 10; Символ = "#"; Режим = "Справа" +// Возврат: "1234######" +// +Функция ДополнитьСтроку(Знач Строка, Знач ДлинаСтроки, Знач Символ = "0", Знач Режим = "Слева") Экспорт + + // Длина символа не должна превышать единицы. + Символ = Лев(Символ, 1); + + // Удаляем крайние пробелы слева и справа строки. + Строка = СокрЛП(Строка); + + КоличествоСимволовНадоДобавить = ДлинаСтроки - СтрДлина(Строка); + + Если КоличествоСимволовНадоДобавить > 0 Тогда + + СтрокаДляДобавления = СформироватьСтрокуСимволов(Символ, КоличествоСимволовНадоДобавить); + + Если ВРег(Режим) = "СЛЕВА" Тогда + + Строка = СтрокаДляДобавления + Строка; + + ИначеЕсли ВРег(Режим) = "СПРАВА" Тогда + + Строка = Строка + СтрокаДляДобавления; + + КонецЕсли; + + КонецЕсли; + + Возврат Строка; + +КонецФункции + +// Удаляет крайние повторяющиеся символы слева или справа в строке. +// +// Параметры: +// Строка - Строка - исходная строка, из которой необходимо удалить крайние повторяющиеся символы; +// Символ - Строка - искомый символ для удаления; +// Режим - Строка - "Слева" или "Справа" - режим удаления символов в исходной строке. +// +// Возвращаемое значение: +// Строка - обрезанная строка. +// +Функция УдалитьПовторяющиесяСимволы(Знач Строка, Знач Символ, Знач Режим = "Слева") Экспорт + + Если ВРег(Режим) = "СЛЕВА" Тогда + + Пока Лев(Строка, 1)= Символ Цикл + + Строка = Сред(Строка, 2); + + КонецЦикла; + + ИначеЕсли ВРег(Режим) = "СПРАВА" Тогда + + Пока Прав(Строка, 1)= Символ Цикл + + Строка = Лев(Строка, СтрДлина(Строка) - 1); + + КонецЦикла; + + КонецЕсли; + + Возврат Строка; +КонецФункции + +// Выполняет замену символов в строке. +// +// Параметры: +// ЗаменяемыеСимволы - Строка - строка символов, каждый из которых требует замены; +// Строка - Строка - исходная строка, в которой требуется замена символов; +// СимволыЗамены - Строка - строка символов, на каждый из которых нужно заменить символы параметра +// ЗаменяемыеСимволы. +// +// Возвращаемое значение: +// Строка - строка после замены символов. +// +// Примечание: функция предназначена для простых случаев, например, для замены латиницы на похожие кириллические +// символы. +// +Функция ЗаменитьОдниСимволыДругими(ЗаменяемыеСимволы, Строка, СимволыЗамены) Экспорт + + Результат = Строка; + + Для НомерСимвола = 1 По СтрДлина(ЗаменяемыеСимволы) Цикл + Результат = СтрЗаменить(Результат, Сред(ЗаменяемыеСимволы, НомерСимвола, 1), Сред(СимволыЗамены, НомерСимвола, 1)); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Выполняет преобразование арабского числа в римское. +// +// Параметры: +// АрабскоеЧисло - число, целое, от 0 до 999; +// ИспользоватьКириллицу - булево, использовать в качестве арабских цифр кириллицу или латиницу. +// +// Возвращаемое значение: +// Строка - число в римской нотации. +// +// Пример: +// ПреобразоватьЧислоВРимскуюНотацию(17) = "ХVII". +// +Функция ПреобразоватьЧислоВРимскуюНотацию(АрабскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт + + РимскоеЧисло = ""; + АрабскоеЧисло = ДополнитьСтроку(АрабскоеЧисло, 3); + + Если ИспользоватьКириллицу Тогда + c1 = "1"; c5 = "У"; c10 = "Х"; c50 = "Л"; c100 ="С"; c500 = "Д"; c1000 = "М"; + + Иначе + c1 = "I"; c5 = "V"; c10 = "X"; c50 = "L"; c100 ="C"; c500 = "D"; c1000 = "M"; + + КонецЕсли; + + Единицы = Число(Сред(АрабскоеЧисло, 3, 1)); + Десятки = Число(Сред(АрабскоеЧисло, 2, 1)); + Сотни = Число(Сред(АрабскоеЧисло, 1, 1)); + + РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Сотни, c100, c500, c1000); + РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Десятки, c10, c50, c100); + РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Единицы, c1, c5, c10); + + Возврат РимскоеЧисло; + +КонецФункции + +// Выполняет преобразование римского числа в арабское. +// +// Параметры: +// РимскоеЧисло - Строка - число, записанное римскими цифрами; +// ИспользоватьКириллицу - Булево - использовать в качестве арабских цифр кириллицу или латиницу. +// +// Возвращаемое значение: +// Число. +// +// Пример: +// ПреобразоватьЧислоВАрабскуюНотацию("ХVII") = 17. +// +Функция ПреобразоватьЧислоВАрабскуюНотацию(РимскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт + + АрабскоеЧисло=0; + + Если ИспользоватьКириллицу Тогда + c1 = "1"; c5 = "У"; c10 = "Х"; c50 = "Л"; c100 ="С"; c500 = "Д"; c1000 = "М"; + + Иначе + c1 = "I"; c5 = "V"; c10 = "X"; c50 = "L"; c100 ="C"; c500 = "D"; c1000 = "M"; + + КонецЕсли; + + РимскоеЧисло = СокрЛП(РимскоеЧисло); + ЧислоСимволов = СтрДлина(РимскоеЧисло); + + Для Сч=1 По ЧислоСимволов Цикл + Если Сред(РимскоеЧисло,Сч,1) = c1000 Тогда + АрабскоеЧисло = АрабскоеЧисло+1000; + ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c500 Тогда + АрабскоеЧисло = АрабскоеЧисло+500; + ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c100 Тогда + Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c500) ИЛИ (Сред(РимскоеЧисло,Сч+1,1) = c1000)) Тогда + АрабскоеЧисло = АрабскоеЧисло-100; + Иначе + АрабскоеЧисло = АрабскоеЧисло+100; + КонецЕсли; + ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c50 Тогда + АрабскоеЧисло = АрабскоеЧисло+50; + ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c10 Тогда + Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c50) ИЛИ (Сред(РимскоеЧисло,Сч+1,1) = c100)) Тогда + АрабскоеЧисло = АрабскоеЧисло-10; + Иначе + АрабскоеЧисло = АрабскоеЧисло+10; + КонецЕсли; + ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c5 Тогда + АрабскоеЧисло = АрабскоеЧисло+5; + ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c1 Тогда + Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c5) ИЛИ (Сред(РимскоеЧисло,Сч+1,1) = c10)) Тогда + АрабскоеЧисло = АрабскоеЧисло-1; + Иначе + АрабскоеЧисло = АрабскоеЧисло+1; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат АрабскоеЧисло; + +КонецФункции + +// Возвращает текстовое представление числа с единицей измерения в правильном склонении и числе. +// +// Параметры: +// Число - Число - любое целое число. +// ПараметрыПредметаИсчисления - Строка - варианты написания единицы измерения в родительном падеже для одной, +// для двух и для пяти единиц, разделитель - запятая. +// +// Возвращаемое значение: +// Строка - текстовое представление количества единиц, число записывается цифрами. +// +// Примеры: +// ЧислоЦифрамиПредметИсчисленияПрописью(23, "минуту,минуты,минут") = "23 минуты"; +// ЧислоЦифрамиПредметИсчисленияПрописью(15, "минуту,минуты,минут") = "15 минут". +Функция ЧислоЦифрамиПредметИсчисленияПрописью(Знач Число, Знач ПараметрыПредметаИсчисления) Экспорт + + Результат = Формат(Число,"ЧН=0"); + + МассивПредставлений = Новый Массив; + + Позиция = Найти(ПараметрыПредметаИсчисления, ","); + Пока Позиция > 0 Цикл + Значение = СокрЛП(Лев(ПараметрыПредметаИсчисления, Позиция-1)); + ПараметрыПредметаИсчисления = Сред(ПараметрыПредметаИсчисления, Позиция + 1); + МассивПредставлений.Добавить(Значение); + Позиция = Найти(ПараметрыПредметаИсчисления, ","); + КонецЦикла; + + Если СтрДлина(ПараметрыПредметаИсчисления) > 0 Тогда + Значение = СокрЛП(ПараметрыПредметаИсчисления); + МассивПредставлений.Добавить(Значение); + КонецЕсли; + + Если Число >= 100 Тогда + Число = Число - Цел(Число / 100)*100; + КонецЕсли; + + Если Число > 20 Тогда + Число = Число - Цел(Число/10)*10; + КонецЕсли; + + Если Число = 1 Тогда + Результат = Результат + " " + МассивПредставлений[0]; + ИначеЕсли Число > 1 И Число < 5 Тогда + Результат = Результат + " " + МассивПредставлений[1]; + Иначе + Результат = Результат + " " + МассивПредставлений[2]; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Очищает текст в формате HTML от тегов и возвращает неформатированный текст. +// +// Параметры: +// ИсходныйТекст - Строка - текст в формате HTML. +// +// Возвращаемое значение: +// Строка - текст, очищенный от тегов, скриптов и заголовков. +// +Функция ИзвлечьТекстИзHTML(Знач ИсходныйТекст) Экспорт + Результат = ""; + + Текст = НРег(ИсходныйТекст); + + // отрезаем все что не body + Позиция = Найти(Текст, " 0 Тогда + Текст = Сред(Текст, Позиция + 5); + ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 5); + Позиция = Найти(Текст, ">"); + Если Позиция > 0 Тогда + Текст = Сред(Текст, Позиция + 1); + ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1); + КонецЕсли; + КонецЕсли; + + Позиция = Найти(Текст, ""); + Если Позиция > 0 Тогда + Текст = Лев(Текст, Позиция - 1); + ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1); + КонецЕсли; + + // вырезаем скрипты + Позиция = Найти(Текст, " 0 Цикл + ПозицияЗакрывающегоТега = Найти(Текст, ""); + Если ПозицияЗакрывающегоТега = 0 Тогда + // Не найден закрывающий тег - вырезаем оставшийся текст. + ПозицияЗакрывающегоТега = СтрДлина(Текст); + КонецЕсли; + Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 9); + ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 9); + Позиция = Найти(Текст, " 0 Цикл + ПозицияЗакрывающегоТега = Найти(Текст, ""); + Если ПозицияЗакрывающегоТега = 0 Тогда + // Не найден закрывающий тег - вырезаем оставшийся текст. + ПозицияЗакрывающегоТега = СтрДлина(Текст); + КонецЕсли; + Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 8); + ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 8); + Позиция = Найти(Текст, " 0 Цикл + Результат = Результат + Лев(ИсходныйТекст, Позиция-1); + Текст = Сред(Текст, Позиция + 1); + ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1); + Позиция = Найти(Текст, ">"); + Если Позиция > 0 Тогда + Текст = Сред(Текст, Позиция + 1); + ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1); + КонецЕсли; + Позиция = Найти(Текст, "<"); + КонецЦикла; + Результат = Результат + ИсходныйТекст; + МассивСтрок = РазложитьСтрокуВМассивПодстрок(Результат, Символы.ПС, Истина, Истина); + Возврат СокрЛП(СтрокаИзМассиваПодстрок(МассивСтрок, Символы.ПС)); +КонецФункции + +// Преобразует исходную строку в транслит. +Функция СтрокаЛатиницей(Знач Строка) Экспорт + + Результат = ""; + + Соответствие = СоответствиеКириллицыИЛатиницы(); + + ПредыдущийСимвол = ""; + Для Позиция = 1 По СтрДлина(Строка) Цикл + Символ = Сред(Строка, Позиция, 1); + СимволЛатиницей = Соответствие[НРег(Символ)]; // Поиск соответствия без учета регистра. + Если СимволЛатиницей = Неопределено Тогда + // Другие символы остаются "как есть". + СимволЛатиницей = Символ; + Иначе + Если Символ = ВРег(Символ) Тогда + СимволЛатиницей = ТРег(СимволЛатиницей); // восстанавливаем регистр + КонецЕсли; + КонецЕсли; + Результат = Результат + СимволЛатиницей; + ПредыдущийСимвол = СимволЛатиницей; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Форматирует строку в соответствии с заданным шаблоном. +// Возможные значения тегов выделения: +// Строка - выделяет строку жирным шрифтом +// Строка +// +// Пример: +// Минимальная версия программы 1.1. Обновите программу. +// +// Возвращаемое значение: +// ФорматированнаяСтрока +Функция ФорматированнаяСтрока(Знач Строка) Экспорт + + СтрокиСВыделением = Новый СписокЗначений; + Пока Найти(Строка, "") <> 0 Цикл + НачалоВыделения = Найти(Строка, ""); + СтрокаДоОткрывающегоТега = Лев(Строка, НачалоВыделения - 1); + СтрокиСВыделением.Добавить(СтрокаДоОткрывающегоТега); + СтрокаПослеОткрывающегоТега = Сред(Строка, НачалоВыделения + 3); + КонецВыделения = Найти(СтрокаПослеОткрывающегоТега, ""); + ВыделенныйФрагмент = Лев(СтрокаПослеОткрывающегоТега, КонецВыделения - 1); + СтрокиСВыделением.Добавить(ВыделенныйФрагмент,, Истина); + СтрокаПослеВыделения = Сред(СтрокаПослеОткрывающегоТега, КонецВыделения + 4); + Строка = СтрокаПослеВыделения; + КонецЦикла; + СтрокиСВыделением.Добавить(Строка); + + СтрокиСоСсылками = Новый СписокЗначений; + Для Каждого ЧастьСтроки Из СтрокиСВыделением Цикл + + Строка = ЧастьСтроки.Значение; + + Если ЧастьСтроки.Пометка Тогда + СтрокиСоСсылками.Добавить(Строка,, Истина); + Продолжить; + КонецЕсли; + + НачалоВыделения = Найти(Строка, ""); + + Ссылка = СокрЛП(Лев(СтрокаПослеОткрывающегоТега, ЗакрывающийТег - 2)); + Если Лев(Ссылка, 1) = """" Тогда + Ссылка = Сред(Ссылка, 2, СтрДлина(Ссылка) - 1); + КонецЕсли; + Если Прав(Ссылка, 1) = """" Тогда + Ссылка = Сред(Ссылка, 1, СтрДлина(Ссылка) - 1); + КонецЕсли; + + СтрокаПослеСсылки = Сред(СтрокаПослеОткрывающегоТега, ЗакрывающийТег + 1); + КонецВыделения = Найти(СтрокаПослеСсылки, ""); + ТекстСсылки = Лев(СтрокаПослеСсылки, КонецВыделения - 1); + СтрокиСоСсылками.Добавить(ТекстСсылки, Ссылка); + + СтрокаПослеВыделения = Сред(СтрокаПослеСсылки, КонецВыделения + 4); + Строка = СтрокаПослеВыделения; + + НачалоВыделения = Найти(Строка, " 0 Тогда + Возврат Неопределено; + КонецЕсли; + ЗнакОтрицательный = Истина; + ИначеЕсли КодСимвола = 41 Тогда // Закрывающая скобка. + Если Не ЗнакОтрицательный Или Результат = 0 Тогда // Не было открывающей скобки или нет числа. + Возврат Неопределено; + КонецЕсли; + // Пропуск (действие не требуется). + ИначеЕсли КодСимвола = 44 Или КодСимвола = 46 Тогда // Запятая или точка. + Если ЗнаковПослеЗапятой <> -1 Тогда + Возврат Неопределено; // Разделитель уже был, следовательно это не число. + КонецЕсли; + ЗнаковПослеЗапятой = 0; // Запуск отсчета знаков после запятой. + ИначеЕсли КодСимвола > 47 И КодСимвола < 58 Тогда // Число. + Если ЗнаковПослеЗапятой <> -1 Тогда + ЗнаковПослеЗапятой = ЗнаковПослеЗапятой + 1; + КонецЕсли; + Число = КодСимвола - 48; + Результат = Результат * 10 + Число; + Иначе + Возврат Неопределено; + КонецЕсли; + КонецЦикла; + + Если ЗнаковПослеЗапятой > 0 Тогда + Результат = Результат / Pow(10, ЗнаковПослеЗапятой); + КонецЕсли; + Если ЗнакОтрицательный Тогда + Результат = -Результат; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Выполняет преобразование цифры в римскую нотацию. +// +// Параметры +// Цифра - Число - цифра от 0 до 9. +// РимскаяЕдиница, РимскаяПятерка, РимскаяДесятка - Строка - символы, соответствующие римским цифрам. +// +// Возвращаемое значение +// Строка - цифра в римской нотации. +// +// Пример: +// ПреобразоватьЦифруВРимскуюНотацию(7,"I","V","X") = "VII". +// +Функция ПреобразоватьЦифруВРимскуюНотацию(Цифра, РимскаяЕдиница, РимскаяПятерка, РимскаяДесятка) + + РимскаяЦифра=""; + Если Цифра = 1 Тогда + РимскаяЦифра = РимскаяЕдиница + ИначеЕсли Цифра = 2 Тогда + РимскаяЦифра = РимскаяЕдиница + РимскаяЕдиница; + ИначеЕсли Цифра = 3 Тогда + РимскаяЦифра = РимскаяЕдиница + РимскаяЕдиница + РимскаяЕдиница; + ИначеЕсли Цифра = 4 Тогда + РимскаяЦифра = РимскаяЕдиница + РимскаяПятерка; + ИначеЕсли Цифра = 5 Тогда + РимскаяЦифра = РимскаяПятерка; + ИначеЕсли Цифра = 6 Тогда + РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница; + ИначеЕсли Цифра = 7 Тогда + РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница + РимскаяЕдиница; + ИначеЕсли Цифра = 8 Тогда + РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница + РимскаяЕдиница + РимскаяЕдиница; + ИначеЕсли Цифра = 9 Тогда + РимскаяЦифра = РимскаяЕдиница + РимскаяДесятка; + КонецЕсли; + Возврат РимскаяЦифра; + +КонецФункции + +// Вставляет параметры в строку, учитывая, что в параметрах могут использоваться подстановочные слова %1, %2 и т.д. +Функция ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(Знач СтрокаПодстановки, + Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, + Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) + + Результат = ""; + Позиция = Найти(СтрокаПодстановки, "%"); + Пока Позиция > 0 Цикл + Результат = Результат + Лев(СтрокаПодстановки, Позиция - 1); + СимволПослеПроцента = Сред(СтрокаПодстановки, Позиция + 1, 1); + ПодставляемыйПараметр = ""; + Если СимволПослеПроцента = "1" Тогда + ПодставляемыйПараметр = Параметр1; + ИначеЕсли СимволПослеПроцента = "2" Тогда + ПодставляемыйПараметр = Параметр2; + ИначеЕсли СимволПослеПроцента = "3" Тогда + ПодставляемыйПараметр = Параметр3; + ИначеЕсли СимволПослеПроцента = "4" Тогда + ПодставляемыйПараметр = Параметр4; + ИначеЕсли СимволПослеПроцента = "5" Тогда + ПодставляемыйПараметр = Параметр5; + ИначеЕсли СимволПослеПроцента = "6" Тогда + ПодставляемыйПараметр = Параметр6; + ИначеЕсли СимволПослеПроцента = "7" Тогда + ПодставляемыйПараметр = Параметр7 + ИначеЕсли СимволПослеПроцента = "8" Тогда + ПодставляемыйПараметр = Параметр8; + ИначеЕсли СимволПослеПроцента = "9" Тогда + ПодставляемыйПараметр = Параметр9; + КонецЕсли; + Если ПодставляемыйПараметр = "" Тогда + Результат = Результат + "%"; + СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 1); + Иначе + Результат = Результат + ПодставляемыйПараметр; + СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 2); + КонецЕсли; + Позиция = Найти(СтрокаПодстановки, "%"); + КонецЦикла; + Результат = Результат + СтрокаПодстановки; + + Возврат Результат; +КонецФункции + +Функция СоответствиеКириллицыИЛатиницы() + // Транслитерация, используемая в загранпаспортах 1997-2010. + Соответствие = Новый Соответствие; + Соответствие.Вставить("а","a"); + Соответствие.Вставить("б","b"); + Соответствие.Вставить("в","v"); + Соответствие.Вставить("г","g"); + Соответствие.Вставить("д","d"); + Соответствие.Вставить("е","e"); + Соответствие.Вставить("ё","e"); + Соответствие.Вставить("ж","zh"); + Соответствие.Вставить("з","z"); + Соответствие.Вставить("и","i"); + Соответствие.Вставить("й","y"); + Соответствие.Вставить("к","k"); + Соответствие.Вставить("л","l"); + Соответствие.Вставить("м","m"); + Соответствие.Вставить("н","n"); + Соответствие.Вставить("о","o"); + Соответствие.Вставить("п","p"); + Соответствие.Вставить("р","r"); + Соответствие.Вставить("с","s"); + Соответствие.Вставить("т","t"); + Соответствие.Вставить("у","u"); + Соответствие.Вставить("ф","f"); + Соответствие.Вставить("х","kh"); + Соответствие.Вставить("ц","ts"); + Соответствие.Вставить("ч","ch"); + Соответствие.Вставить("ш","sh"); + Соответствие.Вставить("щ","shch"); + Соответствие.Вставить("ъ",""""); + Соответствие.Вставить("ы","y"); + Соответствие.Вставить("ь",""); // пропускается + Соответствие.Вставить("э","e"); + Соответствие.Вставить("ю","yu"); + Соответствие.Вставить("я","ya"); + + Возврат Соответствие; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// УСТАРЕВШИЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Устарела. Следует использовать СтрокаИзМассиваПодстрок. +// +// Объединяет строки из массива в строку с разделителями. +// +// Параметры: +// Массив - Массив - массив строк которые необходимо объединить в одну строку; +// Разделитель - Строка - любой набор символов, который будет использован в качестве разделителя. +// +// Возвращаемое значение: +// Строка - строка с разделителями. +// +Функция ПолучитьСтрокуИзМассиваПодстрок(Массив, Разделитель = ",") Экспорт + + // Возвращаемое значение функции. + Результат = ""; + + Для Каждого Элемент Из Массив Цикл + + Подстрока = ?(ТипЗнч(Элемент) = Тип("Строка"), Элемент, Строка(Элемент)); + + РазделительПодстрок = ?(ПустаяСтрока(Результат), "", Разделитель); + + Результат = Результат + РазделительПодстрок + Подстрока; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// } Функции работы со строками diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..85c609cf1 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..573bed731 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.СтроковыеУтилиты + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..b8115f777 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\241\321\202\321\200\320\276\320\272\320\276\320\262\321\213\320\265\320\243\321\202\320\270\320\273\320\270\321\202\321\213/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,1274 @@ + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + + +// { Функции работы со строками + +// Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину. +// +// Параметры: +// Строка - Строка - текст с разделителями; +// Разделитель - Строка - разделитель строк текста, минимум 1 символ; +// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк. +// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: +// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки +// включаются в результат. +// Е если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в +// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а +// при других разделителях результатом функции будет пустой массив. +// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок. +// +// Возвращаемое значение: +// Массив - массив строк. +// +// Примеры: +// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые +// строки; +// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов; +// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов; +// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив; +// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой); +// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой); +// +&НаКлиенте +Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, СокращатьНепечатаемыеСимволы = Ложь) Экспорт + + Результат = Новый Массив; + + // Для обеспечения обратной совместимости. + Если ПропускатьПустыеСтроки = Неопределено Тогда + ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); + Если ПустаяСтрока(Строка) Тогда + Если Разделитель = " " Тогда + Результат.Добавить(""); + КонецЕсли; + Возврат Результат; + КонецЕсли; + КонецЕсли; + // + + Позиция = Найти(Строка, Разделитель); + Пока Позиция > 0 Цикл + Подстрока = Лев(Строка, Позиция - 1); + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда + Если СокращатьНепечатаемыеСимволы Тогда + Результат.Добавить(СокрЛП(Подстрока)); + Иначе + Результат.Добавить(Подстрока); + КонецЕсли; + КонецЕсли; + Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); + Позиция = Найти(Строка, Разделитель); + КонецЦикла; + + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда + Если СокращатьНепечатаемыеСимволы Тогда + Результат.Добавить(СокрЛП(Строка)); + Иначе + Результат.Добавить(Строка); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +/// Объединяет строки из массива в строку с разделителями. +// +// Параметры: +// Массив - Массив - массив строк которые необходимо объединить в одну строку; +// Разделитель - Строка - любой набор символов, который будет использован в качестве разделителя. +// +// Возвращаемое значение: +// Строка - строка с разделителями. +// +&НаКлиенте +Функция СтрокаИзМассиваПодстрок(Массив, Разделитель = ",", СокращатьНепечатаемыеСимволы = Ложь) Экспорт + + Результат = ""; + + Для Индекс = 0 По Массив.ВГраница() Цикл + Подстрока = Массив[Индекс]; + + Если СокращатьНепечатаемыеСимволы Тогда + Подстрока = СокрЛП(Подстрока); + КонецЕсли; + + Если ТипЗнч(Подстрока) <> Тип("Строка") Тогда + Подстрока = Строка(Подстрока); + КонецЕсли; + + Если Индекс > 0 Тогда + Результат = Результат + Разделитель; + КонецЕсли; + + Результат = Результат + Подстрока; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Определяет, является ли символ разделителем. +// +// Параметры: +// КодСимвола - Число - код проверяемого символа; +// РазделителиСлов - Строка - символы разделителей. +// +// Возвращаемое значение: +// Булево - истина, если символ является разделителем. +// +&НаКлиенте +Функция ЭтоРазделительСлов(КодСимвола, РазделителиСлов = Неопределено) Экспорт + + Если РазделителиСлов <> Неопределено Тогда + Возврат Найти(РазделителиСлов, Символ(КодСимвола)) > 0; + КонецЕсли; + + Диапазоны = Новый Массив; + Диапазоны.Добавить(Новый Структура("Мин,Макс", 48, 57)); // цифры + Диапазоны.Добавить(Новый Структура("Мин,Макс", 65, 90)); // латиница большие + Диапазоны.Добавить(Новый Структура("Мин,Макс", 97, 122)); // латиница маленькие + Диапазоны.Добавить(Новый Структура("Мин,Макс", 1040, 1103)); // кириллица + Диапазоны.Добавить(Новый Структура("Мин,Макс", 1025, 1025)); // символ "Ё" + Диапазоны.Добавить(Новый Структура("Мин,Макс", 1105, 1105)); // символ "ё" + Диапазоны.Добавить(Новый Структура("Мин,Макс", 95, 95)); // символ "_" + + Для Каждого Диапазон Из Диапазоны Цикл + Если КодСимвола >= Диапазон.Мин И КодСимвола <= Диапазон.Макс Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Разбивает строку на несколько строк, используя заданный набор разделителей. +// Если параметр РазделителиСлов не задан, то разделителем слов считается любой из символов, +// не относящихся к символам латиницы, кириллицы, цифры, подчеркивания. +// +// Параметры: +// Строка - Строка - строка, которую необходимо разложить на слова. +// РазделителиСлов - Строка - строка, содержащая символы-разделители. +// +// Возвращаемое значение: +// массив значений, элементы которого - отдельные слова. +// +// Пример: +// РазложитьСтрокуВМассивСлов("один-@#два2_!три") возвратит массив значений: "один", "два2_", "три"; +// РазложитьСтрокуВМассивСлов("один-@#два2_!три", "#@!_") возвратит массив значений: "один-", "два2", "три". +// +&НаКлиенте +Функция РазложитьСтрокуВМассивСлов(Знач Строка, РазделителиСлов = Неопределено) Экспорт + + Слова = Новый Массив; + + РазмерТекста = СтрДлина(Строка); + НачалоСлова = 1; + Для Позиция = 1 По РазмерТекста Цикл + КодСимвола = КодСимвола(Строка, Позиция); + Если ЭтоРазделительСлов(КодСимвола, РазделителиСлов) Тогда + Если Позиция <> НачалоСлова Тогда + Слова.Добавить(Сред(Строка, НачалоСлова, Позиция - НачалоСлова)); + КонецЕсли; + НачалоСлова = Позиция + 1; + КонецЕсли; + КонецЦикла; + + Если Позиция <> НачалоСлова Тогда + Слова.Добавить(Сред(Строка, НачалоСлова, Позиция - НачалоСлова)); + КонецЕсли; + + Возврат Слова; + +КонецФункции + +// Подставляет параметры в строку. Максимально возможное число параметров - 9. +// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. +// +// Параметры: +// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); +// Параметр - Строка - подставляемый параметр. +// +// Возвращаемое значение: +// Строка - текстовая строка с подставленными параметрами. +// +// Пример: +// ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". +// +&НаКлиенте +Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, + Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, + Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт + + ИспользоватьАльтернативныйАлгоритм = + Найти(Параметр1, "%") + Или Найти(Параметр2, "%") + Или Найти(Параметр3, "%") + Или Найти(Параметр4, "%") + Или Найти(Параметр5, "%") + Или Найти(Параметр6, "%") + Или Найти(Параметр7, "%") + Или Найти(Параметр8, "%") + Или Найти(Параметр9, "%"); + + Если ИспользоватьАльтернативныйАлгоритм Тогда + СтрокаПодстановки = ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(СтрокаПодстановки, Параметр1, + Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9); + Иначе + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%1", Параметр1); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%2", Параметр2); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%3", Параметр3); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%4", Параметр4); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%5", Параметр5); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%6", Параметр6); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%7", Параметр7); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%8", Параметр8); + СтрокаПодстановки = СтрЗаменить(СтрокаПодстановки, "%9", Параметр9); + КонецЕсли; + + Возврат СтрокаПодстановки; +КонецФункции + +// Подставляет параметры в строку. Число параметров в строке не ограничено. +// Параметры в строке задаются как %<номер параметра>. Нумерация параметров +// начинается с единицы. +// +// Параметры +// СтрокаПодстановки - Строка - шаблон строки с параметрами (вхождениями вида "%1"); +// МассивПараметров - Массив - массив строк, которые соответствуют параметрам в строке подстановки. +// +// Возвращаемое значение: +// Строка - строка с подставленными параметрами. +// +// Пример: +// МассивПараметров = Новый Массив; +// МассивПараметров = МассивПараметров.Добавить("Вася"); +// МассивПараметров = МассивПараметров.Добавить("Зоопарк"); +// +// Строка = ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), МассивПараметров); +// +&НаКлиенте +Функция ПодставитьПараметрыВСтрокуИзМассива(Знач СтрокаПодстановки, Знач МассивПараметров) Экспорт + + СтрокаРезультата = СтрокаПодстановки; + + Индекс = МассивПараметров.Количество(); + Пока Индекс > 0 Цикл + Значение = МассивПараметров[Индекс-1]; + Если Не ПустаяСтрока(Значение) Тогда + СтрокаРезультата = СтрЗаменить(СтрокаРезультата, "%" + Формат(Индекс, "ЧГ="), Значение); + КонецЕсли; + Индекс = Индекс - 1; + КонецЦикла; + + Возврат СтрокаРезультата; + +КонецФункции + +// Заменяет в шаблоне строки имена параметров на их значения. Параметры в строке выделяются с двух сторон квадратными +// скобками. +// +// Параметры: +// +// ШаблонСтроки - Строка - строка, в которую необходимо вставить значения. +// ВставляемыеЗначения - Структура - структура значений, где ключ - имя параметра без спецсимволов, +// значение - вставляемое значение. +// +// Возвращаемое значение: +// Строка - строка со вставленными значениями. +// +// Пример использования: +// ВставитьПараметрыВСтроку("Здравствуй, [Имя] [Фамилия].", Новый Структура("Фамилия,Имя", "Пупкин", "Вася")); +// Возвращает: "Здравствуй, Вася Пупкин". +&НаКлиенте +Функция ВставитьПараметрыВСтроку(Знач ШаблонСтроки, ВставляемыеЗначения) Экспорт + Результат = ШаблонСтроки; + Для Каждого Параметр Из ВставляемыеЗначения Цикл + Результат = СтрЗаменить(Результат, "[" + Параметр.Ключ + "]", Параметр.Значение); + КонецЦикла; + Возврат Результат; +КонецФункции + +// Получает значения параметров из строки. +// +// Параметры: +// СтрокаПараметров - Строка - строка, содержащая параметры, каждый из которых представляет собой +// фрагмент вида <Имя параметра>=<Значение>, где: +// Имя параметра - имя параметра; +// Значение - его значение. +// Фрагменты отделяются друг от друга символами ';'. +// Если значение содержит пробельные символы, то оно должно быть заключено в двойные +// кавычки ("). +// Например: +// "File=""c:\InfoBases\Trade""; Usr=""Director"";" +// +// Возвращаемое значение: +// Структура - структура параметров, где ключ - имя параметра, значение - значение параметра. +// +&НаКлиенте +Функция ПолучитьПараметрыИзСтроки(Знач СтрокаПараметров) Экспорт + + Результат = Новый Структура; + + СимволДвойныеКавычки = Символ(34); // (") + + МассивПодстрок = РазложитьСтрокуВМассивПодстрок(СтрокаПараметров, ";"); + + Для Каждого СтрокаПараметра Из МассивПодстрок Цикл + + ПозицияПервогоЗнакаРавенства = Найти(СтрокаПараметра, "="); + + // Получаем имя параметра + ИмяПараметра = СокрЛП(Лев(СтрокаПараметра, ПозицияПервогоЗнакаРавенства - 1)); + + // Получаем значение параметра + ЗначениеПараметра = СокрЛП(Сред(СтрокаПараметра, ПозицияПервогоЗнакаРавенства + 1)); + + Если Лев(ЗначениеПараметра, 1) = СимволДвойныеКавычки + И Прав(ЗначениеПараметра, 1) = СимволДвойныеКавычки Тогда + + ЗначениеПараметра = Сред(ЗначениеПараметра, 2, СтрДлина(ЗначениеПараметра) - 2); + + КонецЕсли; + + Если Не ПустаяСтрока(ИмяПараметра) Тогда + + Результат.Вставить(ИмяПараметра, ЗначениеПараметра); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Проверяет, содержит ли строка только цифры. +// +// Параметры: +// СтрокаПроверки - Строка - Строка для проверки. +// УчитыватьЛидирующиеНули - Булево - Флаг учета лидирующих нулей, если Истина, то ведущие нули пропускаются. +// УчитыватьПробелы - Булево - Флаг учета пробелов, если Истина, то пробелы при проверке игнорируются. +// +// Возвращаемое значение: +// Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы. +// +&НаКлиенте +Функция ТолькоЦифрыВСтроке(Знач СтрокаПроверки, Знач УчитыватьЛидирующиеНули = Истина, Знач УчитыватьПробелы = Истина) Экспорт + + Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если Не УчитыватьПробелы Тогда + СтрокаПроверки = СтрЗаменить(СтрокаПроверки, " ", ""); + КонецЕсли; + + Если ПустаяСтрока(СтрокаПроверки) Тогда + Возврат Истина; + КонецЕсли; + + Если Не УчитыватьЛидирующиеНули Тогда + Позиция = 1; + // Взятие символа за границей строки возвращает пустую строку. + Пока Сред(СтрокаПроверки, Позиция, 1) = "0" Цикл + Позиция = Позиция + 1; + КонецЦикла; + СтрокаПроверки = Сред(СтрокаПроверки, Позиция); + КонецЕсли; + + // Если содержит только цифры, то в результате замен должна быть получена пустая строка. + // Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы. + Возврат СтрДлина( + СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( + СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( + СтрокаПроверки, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "") + ) = 0; + +КонецФункции + +// Проверяет, содержит ли строка только символы кириллического алфавита. +// +// Параметры: +// УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением. +// ДопустимыеСимволы - строка для проверки. +// +// Возвращаемое значение: +// Булево - Истина, если строка содержит только кириллические (или допустимые) символы или пустая; +// Ложь, если строка содержит иные символы. +// +&НаКлиенте +Функция ТолькоКириллицаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт + + Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда + Возврат Истина; + КонецЕсли; + + КодыДопустимыхСимволов = Новый Массив; + КодыДопустимыхСимволов.Добавить(1105); // "ё" + КодыДопустимыхСимволов.Добавить(1025); // "Ё" + + Для а = 1 По СтрДлина(ДопустимыеСимволы) Цикл + КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, а, 1))); + КонецЦикла; + + Для а = 1 По СтрДлина(СтрокаПроверки) Цикл + КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1)); + Если ((КодСимвола < 1040) Или (КодСимвола > 1103)) + И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) + И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Проверяет, содержит ли строка только символы латинского алфавита. +// +// Параметры: +// УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением. +// ДопустимыеСимволы - строка для проверки. +// +// Возвращаемое значение: +// Булево - Истина, если строка содержит только латинские (или допустимые) символы; +// - Ложь, если строка содержит иные символы. +// +&НаКлиенте +Функция ТолькоЛатиницаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт + + Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда + Возврат Истина; + КонецЕсли; + + КодыДопустимыхСимволов = Новый Массив; + + Для а = 1 По СтрДлина(ДопустимыеСимволы) Цикл + КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, а, 1))); + КонецЦикла; + + Для а = 1 По СтрДлина(СтрокаПроверки) Цикл + КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1)); + Если ((КодСимвола < 65) Или (КодСимвола > 90 И КодСимвола < 97) Или (КодСимвола > 122)) + И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) + И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Удаляет двойные кавычки с начала и конца строки, если они есть. +// +// Параметры: +// Строка - входная строка; +// +// Возвращаемое значение: +// Строка - строка без двойных кавычек. +// +&НаКлиенте +Функция СократитьДвойныеКавычки(Знач Строка) Экспорт + + Пока Лев(Строка, 1) = """" Цикл + Строка = Сред(Строка, 2); + КонецЦикла; + + Пока Прав(Строка, 1) = """" Цикл + Строка = Лев(Строка, СтрДлина(Строка) - 1); + КонецЦикла; + + Возврат Строка; + +КонецФункции + +// Удаляет из строки указанное количество символов справа. +// +// Параметры: +// Текст - Строка - строка, в которой необходимо удалить последние символы; +// ЧислоСимволов - Число - количество удаляемых символов. +// +&НаКлиенте +Процедура УдалитьПоследнийСимволВСтроке(Текст, ЧислоСимволов = 1) Экспорт + + Текст = Лев(Текст, СтрДлина(Текст) - ЧислоСимволов); + +КонецПроцедуры + +// Осуществляет поиск символа, начиная с конца строки. +// +// Параметры: +// Строка - Строка - строка, в которой осуществляется поиск; +// Символ - Строка - искомый символ. Допускается искать строку, содержащую более одного символа. +// +// Возвращаемое значение: +// Число - позиция символа в строке. +// Если строка не содержит указанного символа, то возвращается 0. +// +&НаКлиенте +Функция НайтиСимволСКонца(Знач Строка, Знач Символ) Экспорт + + Для Позиция = -СтрДлина(Строка) По -1 Цикл + Если Сред(Строка, -Позиция, СтрДлина(Символ)) = Символ Тогда + Возврат -Позиция; + КонецЕсли; + КонецЦикла; + + Возврат 0; + +КонецФункции + +// Проверяет, является ли строка уникальным идентификатором. +// В качестве уникального идентификатора предполагается строка вида +// "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где X = [0..9,a..f]. +// +// Параметры: +// ИдентификаторСтрока - Строка - проверяемая строка. +// +// Возвращаемое значение: +// Булево - Истина, если переданная строка является уникальным идентификатором. +&НаКлиенте +Функция ЭтоУникальныйИдентификатор(Знач Строка) Экспорт + + Шаблон = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"; + + Если СтрДлина(Шаблон) <> СтрДлина(Строка) Тогда + Возврат Ложь; + КонецЕсли; + Для Позиция = 1 По СтрДлина(Строка) Цикл + Если КодСимвола(Шаблон, Позиция) = 88 // X + И ((КодСимвола(Строка, Позиция) < 48 Или КодСимвола(Строка, Позиция) > 57) // 0..9 + И (КодСимвола(Строка, Позиция) < 97 Или КодСимвола(Строка, Позиция) > 102) // a..f + И (КодСимвола(Строка, Позиция) < 65 Или КодСимвола(Строка, Позиция) > 70)) // A..F + Или КодСимвола(Шаблон, Позиция) = 45 И КодСимвола(Строка, Позиция) <> 45 Тогда // - + Возврат Ложь; + КонецЕсли; + КонецЦикла; + + Возврат Истина; + +КонецФункции + +// Формирует строку повторяющихся символов заданной длины. +// +// Параметры: +// Символ - Строка - символ, из которого будет формироваться строка. +// ДлинаСтроки - Число - требуемая длина результирующей строки. +// +// Возвращаемое значение: +// Строка - строка, состоящая из повторяющихся символов. +// +&НаКлиенте +Функция СформироватьСтрокуСимволов(Знач Символ, Знач ДлинаСтроки) Экспорт + + Результат = ""; + Для Счетчик = 1 По ДлинаСтроки Цикл + Результат = Результат + Символ; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Дополняет строку символами слева или справа до заданной длины и возвращает ее. +// Незначащие символы слева и справа удаляются. По умолчанию функция дополняет строку символами "0" (ноль) слева. +// +// Параметры: +// Строка - Строка - исходная строка, которую необходимо дополнить символами; +// ДлинаСтроки - Число - требуемая результирующая длина строки; +// Символ - Строка - символ, которым необходимо дополнить строку; +// Режим - Строка - "Слева" или "Справа" - режим добавления символов к исходной строке. +// +// Возвращаемое значение: +// Строка - строка, дополненная символами. +// +// Пример 1: +// Строка = "1234"; ДлинаСтроки = 10; Символ = "0"; Режим = "Слева" +// Возврат: "0000001234" +// +// Пример 2: +// Строка = " 1234 "; ДлинаСтроки = 10; Символ = "#"; Режим = "Справа" +// Возврат: "1234######" +// +&НаКлиенте +Функция ДополнитьСтроку(Знач Строка, Знач ДлинаСтроки, Знач Символ = "0", Знач Режим = "Слева") Экспорт + + // Длина символа не должна превышать единицы. + Символ = Лев(Символ, 1); + + // Удаляем крайние пробелы слева и справа строки. + Строка = СокрЛП(Строка); + + КоличествоСимволовНадоДобавить = ДлинаСтроки - СтрДлина(Строка); + + Если КоличествоСимволовНадоДобавить > 0 Тогда + + СтрокаДляДобавления = СформироватьСтрокуСимволов(Символ, КоличествоСимволовНадоДобавить); + + Если ВРег(Режим) = "СЛЕВА" Тогда + + Строка = СтрокаДляДобавления + Строка; + + ИначеЕсли ВРег(Режим) = "СПРАВА" Тогда + + Строка = Строка + СтрокаДляДобавления; + + КонецЕсли; + + КонецЕсли; + + Возврат Строка; + +КонецФункции + +// Удаляет крайние повторяющиеся символы слева или справа в строке. +// +// Параметры: +// Строка - Строка - исходная строка, из которой необходимо удалить крайние повторяющиеся символы; +// Символ - Строка - искомый символ для удаления; +// Режим - Строка - "Слева" или "Справа" - режим удаления символов в исходной строке. +// +// Возвращаемое значение: +// Строка - обрезанная строка. +// +&НаКлиенте +Функция УдалитьПовторяющиесяСимволы(Знач Строка, Знач Символ, Знач Режим = "Слева") Экспорт + + Если ВРег(Режим) = "СЛЕВА" Тогда + + Пока Лев(Строка, 1)= Символ Цикл + + Строка = Сред(Строка, 2); + + КонецЦикла; + + ИначеЕсли ВРег(Режим) = "СПРАВА" Тогда + + Пока Прав(Строка, 1)= Символ Цикл + + Строка = Лев(Строка, СтрДлина(Строка) - 1); + + КонецЦикла; + + КонецЕсли; + + Возврат Строка; +КонецФункции + +// Выполняет замену символов в строке. +// +// Параметры: +// ЗаменяемыеСимволы - Строка - строка символов, каждый из которых требует замены; +// Строка - Строка - исходная строка, в которой требуется замена символов; +// СимволыЗамены - Строка - строка символов, на каждый из которых нужно заменить символы параметра +// ЗаменяемыеСимволы. +// +// Возвращаемое значение: +// Строка - строка после замены символов. +// +// Примечание: функция предназначена для простых случаев, например, для замены латиницы на похожие кириллические +// символы. +// +&НаКлиенте +Функция ЗаменитьОдниСимволыДругими(ЗаменяемыеСимволы, Строка, СимволыЗамены) Экспорт + + Результат = Строка; + + Для НомерСимвола = 1 По СтрДлина(ЗаменяемыеСимволы) Цикл + Результат = СтрЗаменить(Результат, Сред(ЗаменяемыеСимволы, НомерСимвола, 1), Сред(СимволыЗамены, НомерСимвола, 1)); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Выполняет преобразование арабского числа в римское. +// +// Параметры: +// АрабскоеЧисло - число, целое, от 0 до 999; +// ИспользоватьКириллицу - булево, использовать в качестве арабских цифр кириллицу или латиницу. +// +// Возвращаемое значение: +// Строка - число в римской нотации. +// +// Пример: +// ПреобразоватьЧислоВРимскуюНотацию(17) = "ХVII". +// +&НаКлиенте +Функция ПреобразоватьЧислоВРимскуюНотацию(АрабскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт + + РимскоеЧисло = ""; + АрабскоеЧисло = ДополнитьСтроку(АрабскоеЧисло, 3); + + Если ИспользоватьКириллицу Тогда + c1 = "1"; c5 = "У"; c10 = "Х"; c50 = "Л"; c100 ="С"; c500 = "Д"; c1000 = "М"; + + Иначе + c1 = "I"; c5 = "V"; c10 = "X"; c50 = "L"; c100 ="C"; c500 = "D"; c1000 = "M"; + + КонецЕсли; + + Единицы = Число(Сред(АрабскоеЧисло, 3, 1)); + Десятки = Число(Сред(АрабскоеЧисло, 2, 1)); + Сотни = Число(Сред(АрабскоеЧисло, 1, 1)); + + РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Сотни, c100, c500, c1000); + РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Десятки, c10, c50, c100); + РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Единицы, c1, c5, c10); + + Возврат РимскоеЧисло; + +КонецФункции + +// Выполняет преобразование римского числа в арабское. +// +// Параметры: +// РимскоеЧисло - Строка - число, записанное римскими цифрами; +// ИспользоватьКириллицу - Булево - использовать в качестве арабских цифр кириллицу или латиницу. +// +// Возвращаемое значение: +// Число. +// +// Пример: +// ПреобразоватьЧислоВАрабскуюНотацию("ХVII") = 17. +// +&НаКлиенте +Функция ПреобразоватьЧислоВАрабскуюНотацию(РимскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт + + АрабскоеЧисло=0; + + Если ИспользоватьКириллицу Тогда + c1 = "1"; c5 = "У"; c10 = "Х"; c50 = "Л"; c100 ="С"; c500 = "Д"; c1000 = "М"; + + Иначе + c1 = "I"; c5 = "V"; c10 = "X"; c50 = "L"; c100 ="C"; c500 = "D"; c1000 = "M"; + + КонецЕсли; + + РимскоеЧисло = СокрЛП(РимскоеЧисло); + ЧислоСимволов = СтрДлина(РимскоеЧисло); + + Для Сч=1 По ЧислоСимволов Цикл + Если Сред(РимскоеЧисло,Сч,1) = c1000 Тогда + АрабскоеЧисло = АрабскоеЧисло+1000; + ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c500 Тогда + АрабскоеЧисло = АрабскоеЧисло+500; + ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c100 Тогда + Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c500) ИЛИ (Сред(РимскоеЧисло,Сч+1,1) = c1000)) Тогда + АрабскоеЧисло = АрабскоеЧисло-100; + Иначе + АрабскоеЧисло = АрабскоеЧисло+100; + КонецЕсли; + ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c50 Тогда + АрабскоеЧисло = АрабскоеЧисло+50; + ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c10 Тогда + Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c50) ИЛИ (Сред(РимскоеЧисло,Сч+1,1) = c100)) Тогда + АрабскоеЧисло = АрабскоеЧисло-10; + Иначе + АрабскоеЧисло = АрабскоеЧисло+10; + КонецЕсли; + ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c5 Тогда + АрабскоеЧисло = АрабскоеЧисло+5; + ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c1 Тогда + Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c5) ИЛИ (Сред(РимскоеЧисло,Сч+1,1) = c10)) Тогда + АрабскоеЧисло = АрабскоеЧисло-1; + Иначе + АрабскоеЧисло = АрабскоеЧисло+1; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат АрабскоеЧисло; + +КонецФункции + +// Возвращает текстовое представление числа с единицей измерения в правильном склонении и числе. +// +// Параметры: +// Число - Число - любое целое число. +// ПараметрыПредметаИсчисления - Строка - варианты написания единицы измерения в родительном падеже для одной, +// для двух и для пяти единиц, разделитель - запятая. +// +// Возвращаемое значение: +// Строка - текстовое представление количества единиц, число записывается цифрами. +// +// Примеры: +// ЧислоЦифрамиПредметИсчисленияПрописью(23, "минуту,минуты,минут") = "23 минуты"; +// ЧислоЦифрамиПредметИсчисленияПрописью(15, "минуту,минуты,минут") = "15 минут". +&НаКлиенте +Функция ЧислоЦифрамиПредметИсчисленияПрописью(Знач Число, Знач ПараметрыПредметаИсчисления) Экспорт + + Результат = Формат(Число,"ЧН=0"); + + МассивПредставлений = Новый Массив; + + Позиция = Найти(ПараметрыПредметаИсчисления, ","); + Пока Позиция > 0 Цикл + Значение = СокрЛП(Лев(ПараметрыПредметаИсчисления, Позиция-1)); + ПараметрыПредметаИсчисления = Сред(ПараметрыПредметаИсчисления, Позиция + 1); + МассивПредставлений.Добавить(Значение); + Позиция = Найти(ПараметрыПредметаИсчисления, ","); + КонецЦикла; + + Если СтрДлина(ПараметрыПредметаИсчисления) > 0 Тогда + Значение = СокрЛП(ПараметрыПредметаИсчисления); + МассивПредставлений.Добавить(Значение); + КонецЕсли; + + Если Число >= 100 Тогда + Число = Число - Цел(Число / 100)*100; + КонецЕсли; + + Если Число > 20 Тогда + Число = Число - Цел(Число/10)*10; + КонецЕсли; + + Если Число = 1 Тогда + Результат = Результат + " " + МассивПредставлений[0]; + ИначеЕсли Число > 1 И Число < 5 Тогда + Результат = Результат + " " + МассивПредставлений[1]; + Иначе + Результат = Результат + " " + МассивПредставлений[2]; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Очищает текст в формате HTML от тегов и возвращает неформатированный текст. +// +// Параметры: +// ИсходныйТекст - Строка - текст в формате HTML. +// +// Возвращаемое значение: +// Строка - текст, очищенный от тегов, скриптов и заголовков. +// +&НаКлиенте +Функция ИзвлечьТекстИзHTML(Знач ИсходныйТекст) Экспорт + Результат = ""; + + Текст = НРег(ИсходныйТекст); + + // отрезаем все что не body + Позиция = Найти(Текст, " 0 Тогда + Текст = Сред(Текст, Позиция + 5); + ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 5); + Позиция = Найти(Текст, ">"); + Если Позиция > 0 Тогда + Текст = Сред(Текст, Позиция + 1); + ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1); + КонецЕсли; + КонецЕсли; + + Позиция = Найти(Текст, ""); + Если Позиция > 0 Тогда + Текст = Лев(Текст, Позиция - 1); + ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1); + КонецЕсли; + + // вырезаем скрипты + Позиция = Найти(Текст, " 0 Цикл + ПозицияЗакрывающегоТега = Найти(Текст, ""); + Если ПозицияЗакрывающегоТега = 0 Тогда + // Не найден закрывающий тег - вырезаем оставшийся текст. + ПозицияЗакрывающегоТега = СтрДлина(Текст); + КонецЕсли; + Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 9); + ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 9); + Позиция = Найти(Текст, " 0 Цикл + ПозицияЗакрывающегоТега = Найти(Текст, ""); + Если ПозицияЗакрывающегоТега = 0 Тогда + // Не найден закрывающий тег - вырезаем оставшийся текст. + ПозицияЗакрывающегоТега = СтрДлина(Текст); + КонецЕсли; + Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 8); + ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 8); + Позиция = Найти(Текст, " 0 Цикл + Результат = Результат + Лев(ИсходныйТекст, Позиция-1); + Текст = Сред(Текст, Позиция + 1); + ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1); + Позиция = Найти(Текст, ">"); + Если Позиция > 0 Тогда + Текст = Сред(Текст, Позиция + 1); + ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1); + КонецЕсли; + Позиция = Найти(Текст, "<"); + КонецЦикла; + Результат = Результат + ИсходныйТекст; + МассивСтрок = РазложитьСтрокуВМассивПодстрок(Результат, Символы.ПС, Истина, Истина); + Возврат СокрЛП(СтрокаИзМассиваПодстрок(МассивСтрок, Символы.ПС)); +КонецФункции + +// Преобразует исходную строку в транслит. +&НаКлиенте +Функция СтрокаЛатиницей(Знач Строка) Экспорт + + Результат = ""; + + Соответствие = СоответствиеКириллицыИЛатиницы(); + + ПредыдущийСимвол = ""; + Для Позиция = 1 По СтрДлина(Строка) Цикл + Символ = Сред(Строка, Позиция, 1); + СимволЛатиницей = Соответствие[НРег(Символ)]; // Поиск соответствия без учета регистра. + Если СимволЛатиницей = Неопределено Тогда + // Другие символы остаются "как есть". + СимволЛатиницей = Символ; + Иначе + Если Символ = ВРег(Символ) Тогда + СимволЛатиницей = ТРег(СимволЛатиницей); // восстанавливаем регистр + КонецЕсли; + КонецЕсли; + Результат = Результат + СимволЛатиницей; + ПредыдущийСимвол = СимволЛатиницей; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Форматирует строку в соответствии с заданным шаблоном. +// Возможные значения тегов выделения: +// Строка - выделяет строку жирным шрифтом +//
Строка +// +// Пример: +// Минимальная версия программы 1.1. Обновите программу. +// +// Возвращаемое значение: +// ФорматированнаяСтрока +&НаКлиенте +Функция ФорматированнаяСтрока(Знач Строка) Экспорт + + СтрокиСВыделением = Новый СписокЗначений; + Пока Найти(Строка, "") <> 0 Цикл + НачалоВыделения = Найти(Строка, ""); + СтрокаДоОткрывающегоТега = Лев(Строка, НачалоВыделения - 1); + СтрокиСВыделением.Добавить(СтрокаДоОткрывающегоТега); + СтрокаПослеОткрывающегоТега = Сред(Строка, НачалоВыделения + 3); + КонецВыделения = Найти(СтрокаПослеОткрывающегоТега, ""); + ВыделенныйФрагмент = Лев(СтрокаПослеОткрывающегоТега, КонецВыделения - 1); + СтрокиСВыделением.Добавить(ВыделенныйФрагмент,, Истина); + СтрокаПослеВыделения = Сред(СтрокаПослеОткрывающегоТега, КонецВыделения + 4); + Строка = СтрокаПослеВыделения; + КонецЦикла; + СтрокиСВыделением.Добавить(Строка); + + СтрокиСоСсылками = Новый СписокЗначений; + Для Каждого ЧастьСтроки Из СтрокиСВыделением Цикл + + Строка = ЧастьСтроки.Значение; + + Если ЧастьСтроки.Пометка Тогда + СтрокиСоСсылками.Добавить(Строка,, Истина); + Продолжить; + КонецЕсли; + + НачалоВыделения = Найти(Строка, ""); + + Ссылка = СокрЛП(Лев(СтрокаПослеОткрывающегоТега, ЗакрывающийТег - 2)); + Если Лев(Ссылка, 1) = """" Тогда + Ссылка = Сред(Ссылка, 2, СтрДлина(Ссылка) - 1); + КонецЕсли; + Если Прав(Ссылка, 1) = """" Тогда + Ссылка = Сред(Ссылка, 1, СтрДлина(Ссылка) - 1); + КонецЕсли; + + СтрокаПослеСсылки = Сред(СтрокаПослеОткрывающегоТега, ЗакрывающийТег + 1); + КонецВыделения = Найти(СтрокаПослеСсылки, ""); + ТекстСсылки = Лев(СтрокаПослеСсылки, КонецВыделения - 1); + СтрокиСоСсылками.Добавить(ТекстСсылки, Ссылка); + + СтрокаПослеВыделения = Сред(СтрокаПослеСсылки, КонецВыделения + 4); + Строка = СтрокаПослеВыделения; + + НачалоВыделения = Найти(Строка, " 0 Тогда + Возврат Неопределено; + КонецЕсли; + ЗнакОтрицательный = Истина; + ИначеЕсли КодСимвола = 41 Тогда // Закрывающая скобка. + Если Не ЗнакОтрицательный Или Результат = 0 Тогда // Не было открывающей скобки или нет числа. + Возврат Неопределено; + КонецЕсли; + // Пропуск (действие не требуется). + ИначеЕсли КодСимвола = 44 Или КодСимвола = 46 Тогда // Запятая или точка. + Если ЗнаковПослеЗапятой <> -1 Тогда + Возврат Неопределено; // Разделитель уже был, следовательно это не число. + КонецЕсли; + ЗнаковПослеЗапятой = 0; // Запуск отсчета знаков после запятой. + ИначеЕсли КодСимвола > 47 И КодСимвола < 58 Тогда // Число. + Если ЗнаковПослеЗапятой <> -1 Тогда + ЗнаковПослеЗапятой = ЗнаковПослеЗапятой + 1; + КонецЕсли; + Число = КодСимвола - 48; + Результат = Результат * 10 + Число; + Иначе + Возврат Неопределено; + КонецЕсли; + КонецЦикла; + + Если ЗнаковПослеЗапятой > 0 Тогда + Результат = Результат / Pow(10, ЗнаковПослеЗапятой); + КонецЕсли; + Если ЗнакОтрицательный Тогда + Результат = -Результат; + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Выполняет преобразование цифры в римскую нотацию. +// +// Параметры +// Цифра - Число - цифра от 0 до 9. +// РимскаяЕдиница, РимскаяПятерка, РимскаяДесятка - Строка - символы, соответствующие римским цифрам. +// +// Возвращаемое значение +// Строка - цифра в римской нотации. +// +// Пример: +// ПреобразоватьЦифруВРимскуюНотацию(7,"I","V","X") = "VII". +// +&НаКлиенте +Функция ПреобразоватьЦифруВРимскуюНотацию(Цифра, РимскаяЕдиница, РимскаяПятерка, РимскаяДесятка) + + РимскаяЦифра=""; + Если Цифра = 1 Тогда + РимскаяЦифра = РимскаяЕдиница + ИначеЕсли Цифра = 2 Тогда + РимскаяЦифра = РимскаяЕдиница + РимскаяЕдиница; + ИначеЕсли Цифра = 3 Тогда + РимскаяЦифра = РимскаяЕдиница + РимскаяЕдиница + РимскаяЕдиница; + ИначеЕсли Цифра = 4 Тогда + РимскаяЦифра = РимскаяЕдиница + РимскаяПятерка; + ИначеЕсли Цифра = 5 Тогда + РимскаяЦифра = РимскаяПятерка; + ИначеЕсли Цифра = 6 Тогда + РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница; + ИначеЕсли Цифра = 7 Тогда + РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница + РимскаяЕдиница; + ИначеЕсли Цифра = 8 Тогда + РимскаяЦифра = РимскаяПятерка + РимскаяЕдиница + РимскаяЕдиница + РимскаяЕдиница; + ИначеЕсли Цифра = 9 Тогда + РимскаяЦифра = РимскаяЕдиница + РимскаяДесятка; + КонецЕсли; + Возврат РимскаяЦифра; + +КонецФункции + +// Вставляет параметры в строку, учитывая, что в параметрах могут использоваться подстановочные слова %1, %2 и т.д. +&НаКлиенте +Функция ПодставитьПараметрыВСтрокуАльтернативныйАлгоритм(Знач СтрокаПодстановки, + Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, + Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, + Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) + + Результат = ""; + Позиция = Найти(СтрокаПодстановки, "%"); + Пока Позиция > 0 Цикл + Результат = Результат + Лев(СтрокаПодстановки, Позиция - 1); + СимволПослеПроцента = Сред(СтрокаПодстановки, Позиция + 1, 1); + ПодставляемыйПараметр = ""; + Если СимволПослеПроцента = "1" Тогда + ПодставляемыйПараметр = Параметр1; + ИначеЕсли СимволПослеПроцента = "2" Тогда + ПодставляемыйПараметр = Параметр2; + ИначеЕсли СимволПослеПроцента = "3" Тогда + ПодставляемыйПараметр = Параметр3; + ИначеЕсли СимволПослеПроцента = "4" Тогда + ПодставляемыйПараметр = Параметр4; + ИначеЕсли СимволПослеПроцента = "5" Тогда + ПодставляемыйПараметр = Параметр5; + ИначеЕсли СимволПослеПроцента = "6" Тогда + ПодставляемыйПараметр = Параметр6; + ИначеЕсли СимволПослеПроцента = "7" Тогда + ПодставляемыйПараметр = Параметр7 + ИначеЕсли СимволПослеПроцента = "8" Тогда + ПодставляемыйПараметр = Параметр8; + ИначеЕсли СимволПослеПроцента = "9" Тогда + ПодставляемыйПараметр = Параметр9; + КонецЕсли; + Если ПодставляемыйПараметр = "" Тогда + Результат = Результат + "%"; + СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 1); + Иначе + Результат = Результат + ПодставляемыйПараметр; + СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 2); + КонецЕсли; + Позиция = Найти(СтрокаПодстановки, "%"); + КонецЦикла; + Результат = Результат + СтрокаПодстановки; + + Возврат Результат; +КонецФункции + +&НаКлиенте +Функция СоответствиеКириллицыИЛатиницы() + // Транслитерация, используемая в загранпаспортах 1997-2010. + Соответствие = Новый Соответствие; + Соответствие.Вставить("а","a"); + Соответствие.Вставить("б","b"); + Соответствие.Вставить("в","v"); + Соответствие.Вставить("г","g"); + Соответствие.Вставить("д","d"); + Соответствие.Вставить("е","e"); + Соответствие.Вставить("ё","e"); + Соответствие.Вставить("ж","zh"); + Соответствие.Вставить("з","z"); + Соответствие.Вставить("и","i"); + Соответствие.Вставить("й","y"); + Соответствие.Вставить("к","k"); + Соответствие.Вставить("л","l"); + Соответствие.Вставить("м","m"); + Соответствие.Вставить("н","n"); + Соответствие.Вставить("о","o"); + Соответствие.Вставить("п","p"); + Соответствие.Вставить("р","r"); + Соответствие.Вставить("с","s"); + Соответствие.Вставить("т","t"); + Соответствие.Вставить("у","u"); + Соответствие.Вставить("ф","f"); + Соответствие.Вставить("х","kh"); + Соответствие.Вставить("ц","ts"); + Соответствие.Вставить("ч","ch"); + Соответствие.Вставить("ш","sh"); + Соответствие.Вставить("щ","shch"); + Соответствие.Вставить("ъ",""""); + Соответствие.Вставить("ы","y"); + Соответствие.Вставить("ь",""); // пропускается + Соответствие.Вставить("э","e"); + Соответствие.Вставить("ю","yu"); + Соответствие.Вставить("я","ya"); + + Возврат Соответствие; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// УСТАРЕВШИЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Устарела. Следует использовать СтрокаИзМассиваПодстрок. +// +// Объединяет строки из массива в строку с разделителями. +// +// Параметры: +// Массив - Массив - массив строк которые необходимо объединить в одну строку; +// Разделитель - Строка - любой набор символов, который будет использован в качестве разделителя. +// +// Возвращаемое значение: +// Строка - строка с разделителями. +// +&НаКлиенте +Функция ПолучитьСтрокуИзМассиваПодстрок(Массив, Разделитель = ",") Экспорт + + // Возвращаемое значение функции. + Результат = ""; + + Для Каждого Элемент Из Массив Цикл + + Подстрока = ?(ТипЗнч(Элемент) = Тип("Строка"), Элемент, Строка(Элемент)); + + РазделительПодстрок = ?(ПустаяСтрока(Результат), "", Разделитель); + + Результат = Результат + РазделительПодстрок + Подстрока; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// } Функции работы со строками + + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции +// } Helpers diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262.xml" new file mode 100644 index 000000000..5b3dbd6f9 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262.xml" @@ -0,0 +1,34 @@ + + + + + + 7582deee-1eae-4083-870b-3ee5f9453245 + 4cdb2c0e-4b1a-482f-9125-a274bb438a33 + + + c1612d8f-d2dd-46ca-a6b3-da1dcfa424da + bea1e8c0-1c50-4034-bc86-3cb878aad767 + + + + Тест_ЗагрузчикИзПодсистем_НовыйAPIОбъявленияТестов + + + ru + Тесты - загрузчик из подсистем - новый API объявления тестов + + + + false + DataProcessor.Тест_ЗагрузчикИзПодсистем_НовыйAPIОбъявленияТестов.Form.Форма + + false + + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..00f49e7dc --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262/Ext/ObjectModule.bsl" @@ -0,0 +1,62 @@ +Перем КонтекстЯдра; +Перем Ожидаем; + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + КонтекстЯдра = КонтекстЯдраПараметр; + Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD"); +КонецПроцедуры + +Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт + // Устанавливает режим выполнения для контейнера обработки + НаборТестов.СлучайныйПорядокВыполнения(); + //НаборТестов.СтрогийПорядокВыполнения(); + + НаборТестов.Добавить("ТестДолжен_ПроверитьВыполнение_ПростогоТеста"); + + НаборТестов.НачатьГруппу("Группа со случайным порядком выполнения"); + НаборТестов.Добавить("ТестДолжен_ПроверитьВыполнение_ПростогоТеста_СПроизвольнымПредставлением", , "Тест с произвольным представлением"); + НаборТестов.Добавить("ТестДолжен_ПроверитьВыполнение_ТестаСПараметром", НаборТестов.ПараметрыТеста(Истина)); + + НаборТестов.НачатьГруппу("Группа со строгим порядком выполнения", Истина); + НаборТестов.Добавить("ТестДолжен_СохранитьКонтекст"); + НаборТестов.Добавить("ТестДолжен_ПроверитьСохраненныйКонтекст"); + + НаборТестов.НачатьГруппу("Группа параметризированных тестов со строгим порядком выполнения", Истина); + НаборТестов.Добавить("ТестДолжен_СохранитьРезультатСложенияВКонтекст", НаборТестов.ПараметрыТеста(5, 7), "Тест должен сохранить результат сложения (5 + 7) в контекст"); + Тест = НаборТестов.Добавить("ТестДолжен_СравнитьКонтекстСоСвоимПараметром"); + Тест.Параметры.Добавить(12); +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьВыполнение_ПростогоТеста() Экспорт + Ожидаем.Что(Истина).ЭтоИстина(); +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьВыполнение_ПростогоТеста_СПроизвольнымПредставлением() Экспорт + Ожидаем.Что(Истина).ЭтоИстина(); +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьВыполнение_ТестаСПараметром(Параметр) Экспорт + Ожидаем.Что(Параметр).ЭтоИстина(); +КонецПроцедуры + +// { Группа со строгим режимом выполнения +Процедура ТестДолжен_СохранитьКонтекст() Экспорт + КонтекстЯдра.СохранитьКонтекст(10); +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьСохраненныйКонтекст() Экспорт + Контекст = КонтекстЯдра.ПолучитьКонтекст(); + Ожидаем.Что(Контекст).Равно(10); +КонецПроцедуры +// } Группа со строгим режимом выполнения + +// { Группа параметризированных тестов со строгим режимом выполнения +Процедура ТестДолжен_СохранитьРезультатСложенияВКонтекст(Знач1, Знач2) Экспорт + КонтекстЯдра.СохранитьКонтекст(Знач1 + Знач2); +КонецПроцедуры + +Процедура ТестДолжен_СравнитьКонтекстСоСвоимПараметром(Результат) Экспорт + Контекст = КонтекстЯдра.ПолучитьКонтекст(); + Ожидаем.Что(Контекст).Равно(Результат); +КонецПроцедуры +// } Группа параметризированных тестов со строгим режимом выполнения diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..8c86c0f41 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..f74101d40 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.Тест_ЗагрузчикИзПодсистем_НовыйAPIОбъявленияТестов + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..66642f7ae --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\230\320\267\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274_\320\235\320\276\320\262\321\213\320\271API\320\236\320\261\321\212\321\217\320\262\320\273\320\265\320\275\320\270\321\217\320\242\320\265\321\201\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,73 @@ +&НаКлиенте +Перем КонтекстЯдра; +&НаКлиенте +Перем Ожидаем; + +&НаКлиенте +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + КонтекстЯдра = КонтекстЯдраПараметр; + Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD"); +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт + // Устанавливает режим выполнения для контейнера обработки + НаборТестов.СлучайныйПорядокВыполнения(); + //НаборТестов.СтрогийПорядокВыполнения(); + + НаборТестов.Добавить("ТестДолжен_ПроверитьВыполнение_ПростогоТеста"); + + НаборТестов.НачатьГруппу("Группа со случайным порядком выполнения"); + НаборТестов.Добавить("ТестДолжен_ПроверитьВыполнение_ПростогоТеста_СПроизвольнымПредставлением", , "Тест с произвольным представлением"); + НаборТестов.Добавить("ТестДолжен_ПроверитьВыполнение_ТестаСПараметром", НаборТестов.ПараметрыТеста(Истина)); + + НаборТестов.НачатьГруппу("Группа со строгим порядком выполнения", Истина); + НаборТестов.Добавить("ТестДолжен_СохранитьКонтекст"); + НаборТестов.Добавить("ТестДолжен_ПроверитьСохраненныйКонтекст"); + + НаборТестов.НачатьГруппу("Группа параметризированных тестов со строгим порядком выполнения", Истина); + НаборТестов.Добавить("ТестДолжен_СохранитьРезультатСложенияВКонтекст", НаборТестов.ПараметрыТеста(5, 7), "Тест должен сохранить результат сложения (5 + 7) в контекст"); + Тест = НаборТестов.Добавить("ТестДолжен_СравнитьКонтекстСоСвоимПараметром"); + Тест.Параметры.Добавить(12); +КонецПроцедуры + +&НаКлиенте +Процедура ТестДолжен_ПроверитьВыполнение_ПростогоТеста() Экспорт + Ожидаем.Что(Истина).ЭтоИстина(); +КонецПроцедуры + +&НаКлиенте +Процедура ТестДолжен_ПроверитьВыполнение_ПростогоТеста_СПроизвольнымПредставлением() Экспорт + Ожидаем.Что(Истина).ЭтоИстина(); +КонецПроцедуры + +&НаКлиенте +Процедура ТестДолжен_ПроверитьВыполнение_ТестаСПараметром(Параметр) Экспорт + Ожидаем.Что(Параметр).ЭтоИстина(); +КонецПроцедуры + +// { Группа со строгим режимом выполнения +&НаКлиенте +Процедура ТестДолжен_СохранитьКонтекст() Экспорт + КонтекстЯдра.СохранитьКонтекст(10); +КонецПроцедуры + +&НаКлиенте +Процедура ТестДолжен_ПроверитьСохраненныйКонтекст() Экспорт + Контекст = КонтекстЯдра.ПолучитьКонтекст(); + Ожидаем.Что(Контекст).Равно(10); +КонецПроцедуры +// } Группа со строгим режимом выполнения + +// { Группа параметризированных тестов со строгим режимом выполнения +&НаКлиенте +Процедура ТестДолжен_СохранитьРезультатСложенияВКонтекст(Знач1, Знач2) Экспорт + КонтекстЯдра.СохранитьКонтекст(Знач1 + Знач2); +КонецПроцедуры + +&НаКлиенте +Процедура ТестДолжен_СравнитьКонтекстСоСвоимПараметром(Результат) Экспорт + Контекст = КонтекстЯдра.ПолучитьКонтекст(); + Ожидаем.Что(Контекст).Равно(Результат); +КонецПроцедуры +// } Группа параметризированных тестов со строгим режимом выполнения diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260.xml" new file mode 100644 index 000000000..e148934e3 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260.xml" @@ -0,0 +1,34 @@ + + + + + + fa34483b-347a-44a4-861a-3a63dc46e515 + 60439dfc-9973-4ce1-9f6d-d5eedd48dbc7 + + + c512191d-04f1-4deb-b286-8b78d9590224 + 16965601-4cc8-4ebd-93ca-c2549ed11c1e + + + + Тест_Обработка + + + ru + Тест обработка + + + + true + DataProcessor.Тест_Обработка.Form.Форма + + false + + + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..fa13dfa14 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Ext/ObjectModule.bsl" @@ -0,0 +1,18 @@ +Перем КонтекстЯдра; +Перем Ожидаем; + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + КонтекстЯдра = КонтекстЯдраПараметр; + Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD"); +КонецПроцедуры + +Функция ПолучитьСписокТестов() Экспорт + ВсеТесты = Новый Массив; + ВсеТесты.Добавить("ТестДолжен_ПроверитьДваПлюсДваРавноЧетыре"); + + Возврат ВсеТесты; +КонецФункции + +Процедура ТестДолжен_ПроверитьДваПлюсДваРавноЧетыре() Экспорт + Ожидаем.Что(2 + 2).Равно(4); +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..fdfa25f7b --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..88747f04d --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,12 @@ + +
+ + + + + cfg:DataProcessorObject.Тест_Обработка + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..11541518a --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,23 @@ +&НаКлиенте +Перем КонтекстЯдра; +&НаКлиенте +Перем Ожидаем; + +&НаКлиенте +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + КонтекстЯдра = КонтекстЯдраПараметр; + Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD"); +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьСписокТестов() Экспорт + ВсеТесты = Новый Массив; + ВсеТесты.Добавить("ТестДолжен_ПроверитьДваПлюсДваРавноЧетыре_НаФорме"); + + Возврат ВсеТесты; +КонецФункции + +&НаКлиенте +Процедура ТестДолжен_ПроверитьДваПлюсДваРавноЧетыре_НаФорме() Экспорт + Ожидаем.Что(2 + 2).Равно(4); +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270.xml" new file mode 100644 index 000000000..4f0ba6c46 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270.xml" @@ -0,0 +1,35 @@ + + + + + + 180ec78f-ee96-4f83-ab59-3925b9fa0459 + c7085d33-6531-4a51-8d74-7ec7d8eca33b + + + 56cc0c9c-bcb8-4a3c-bf89-ff167f1e15aa + e0c0f210-399b-4f28-9789-54e56c254095 + + + + ТестОбработка_Форма_ИсключениеПриОткрытии + + + ru + Тест обработка форма исключение при открытии + + + баг https://github.com/xDrivenDevelopment/xUnitFor1C/issues/154 + true + DataProcessor.ТестОбработка_Форма_ИсключениеПриОткрытии.Form.ОбычнаяФорма + DataProcessor.ТестОбработка_Форма_ИсключениеПриОткрытии.Form.УправляемаяФорма + false + + + + +
УправляемаяФорма
+
ОбычнаяФорма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..d7690f34a --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/Ext/ObjectModule.bsl" @@ -0,0 +1,39 @@ + +//{ основная процедура для юнит-тестирования 1CUnit +Перем _тестируем; // для тестирования +Перем юТест; + +Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт + + юТест = ЮнитТестирование; + + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("ТестДолжен_ПроверитьДваПлюсДваРавноЧетыре"); + + Возврат ВсеТесты; + +КонецФункции +//} + +//{ ОСНОВНОЙ БЛОК + +//} КОНЕЦ ОСНОВНОГО БЛОКА + +//{ БЛОК ЮНИТ-ТЕСТОВ - сами тесты + +Процедура ПередЗапускомТеста() Экспорт + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьДваПлюсДваРавноЧетыре() Экспорт + юТест.ПроверитьРавенство(2 + 2, 4); +КонецПроцедуры + +_тестируем = Ложь; + +//} КОНЕЦ БЛОКА ЮНИТ-ТЕСТОВ \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/Forms/\320\236\320\261\321\213\321\207\320\275\320\260\321\217\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/Forms/\320\236\320\261\321\213\321\207\320\275\320\260\321\217\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..a91b9eb52 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/Forms/\320\236\320\261\321\213\321\207\320\275\320\260\321\217\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + ОбычнаяФорма + + + ru + Обычная форма + + + + Ordinary + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/Forms/\320\236\320\261\321\213\321\207\320\275\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/Forms/\320\236\320\261\321\213\321\207\320\275\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" new file mode 100644 index 000000000..f00364834 Binary files /dev/null and "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/Forms/\320\236\320\261\321\213\321\207\320\275\320\260\321\217\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" differ diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/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.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/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.xml" new file mode 100644 index 000000000..174efae5d --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/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.xml" @@ -0,0 +1,22 @@ + + +
+ + УправляемаяФорма + + + ru + Управляемая форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/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/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/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" new file mode 100644 index 000000000..4b3040364 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/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" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.ТестОбработка_Форма_ИсключениеПриОткрытии + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/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/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/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" new file mode 100644 index 000000000..1df71e4fa --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260_\320\244\320\276\321\200\320\274\320\260_\320\230\321\201\320\272\320\273\321\216\321\207\320\265\320\275\320\270\320\265\320\237\321\200\320\270\320\236\321\202\320\272\321\200\321\213\321\202\320\270\320\270/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" @@ -0,0 +1,2 @@ +//ВызватьИсключение "Ошибка при открытии формы"; +Специальная Синтакс-ошибка \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\237\320\260\320\264\320\260\321\216\321\211\320\270\320\271_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\237\320\260\320\264\320\260\321\216\321\211\320\270\320\271_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260.xml" new file mode 100644 index 000000000..8002f0312 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\237\320\260\320\264\320\260\321\216\321\211\320\270\320\271_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260.xml" @@ -0,0 +1,32 @@ + + + + + + afbcd6f2-f468-449a-8f68-0aedc73cea41 + 62c7ee0e-3ce0-49b8-a6aa-ec75b1a3b13e + + + e17ac2c9-4ccb-49ec-bc84-03eba8b3ed35 + 209b6ba8-0ec5-470e-8062-941a25c93227 + + + + ТестПадающий_Обработка + + + ru + Тест падающий обработка + + + + true + + + false + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\237\320\260\320\264\320\260\321\216\321\211\320\270\320\271_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\237\320\260\320\264\320\260\321\216\321\211\320\270\320\271_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..f7b8b3786 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\242\320\265\321\201\321\202\320\237\320\260\320\264\320\260\321\216\321\211\320\270\320\271_\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260/Ext/ObjectModule.bsl" @@ -0,0 +1,39 @@ + +//{ основная процедура для юнит-тестирования 1CUnit +Перем _тестируем; // для тестирования +Перем юТест; + +Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт + + юТест = ЮнитТестирование; + + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("ТестДолженУпасть"); + + Возврат ВсеТесты; + +КонецФункции +//} + +//{ ОСНОВНОЙ БЛОК + +//} КОНЕЦ ОСНОВНОГО БЛОКА + +//{ БЛОК ЮНИТ-ТЕСТОВ - сами тесты + +Процедура ПередЗапускомТеста() Экспорт + +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт + +КонецПроцедуры + +Процедура ТестДолженУпасть() Экспорт + юТест.ПроверитьРавенство(2 + 2, 5); +КонецПроцедуры + +_тестируем = Ложь; + +//} КОНЕЦ БЛОКА ЮНИТ-ТЕСТОВ \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD.xml" new file mode 100644 index 000000000..70f9ab003 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD.xml" @@ -0,0 +1,208 @@ + + + + + + af32ecd2-3f3c-4d2c-8b67-ca6380b4f322 + ce9adda6-851a-4163-8f31-bad0f654f05d + + + d70f17da-c898-47c4-a57f-a791299d49f4 + 1f45089a-50fb-4f89-b1b1-59cdfbc2739f + + + + УтвержденияBDD + + + ru + Утверждения BDD + + + + false + DataProcessor.УтвержденияBDD.Form.Форма + + false + + + + + + + ДопСообщениеОшибки + + + ru + Доп сообщение ошибки + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ИмяМетода + + + ru + Имя метода + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ПараметрыМетода + + + ru + Параметры метода + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ПроверяемоеЗначение + + + ru + Проверяемое значение + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ФлагОтрицания + + + ru + Флаг отрицания + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..4e8d53932 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Ext/ObjectModule.bsl" @@ -0,0 +1,306 @@ +Перем СтатусыРезультатаТестирования; +Перем ФлагОтрицанияДляСообщения; + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Утилита); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "УтвержденияBDD"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры +// } Plugin interface + +Функция Что(Знач ПроверяемоеЗначение, Знач Сообщение = "") Экспорт + ЭтотОбъект.ПроверяемоеЗначение = ПроверяемоеЗначение; + ЭтотОбъект.ДопСообщениеОшибки = Сообщение; + ЭтотОбъект.ФлагОтрицания = Ложь; + + Возврат ЭтотОбъект; +КонецФункции + +Функция Не_() Экспорт + ЭтотОбъект.ФлагОтрицания = Истина; + + Возврат ЭтотОбъект; +КонецФункции + +Функция ЭтоНе() Экспорт + Возврат Не_(); +КонецФункции + +Функция Метод(Знач ИмяМетода, Знач ПараметрыМетода = Неопределено) Экспорт + ЭтотОбъект.ИмяМетода = ИмяМетода; + ЭтотОбъект.ПараметрыМетода = ПараметрыМетода; + + Возврат ЭтотОбъект; +КонецФункции + +Функция ЭтоИстина() Экспорт + Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение = Истина) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Формат(ПроверяемоеЗначение, "БЛ=Ложь; БИ=Истина"), "является ИСТИНОЙ."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция ЕстьИстина() Экспорт + Возврат ЭтоИстина(); +КонецФункции + +Функция ЭтоЛожь() Экспорт + Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение = Ложь) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(Формат(ПроверяемоеЗначение, "БЛ=Ложь; БИ=Истина"), "является ЛОЖЬЮ."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция ЕстьЛожь() Экспорт + Возврат ЭтоЛожь(); +КонецФункции + +Функция Равно(Знач ОжидаемоеЗначение) Экспорт + Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение = ОжидаемоеЗначение) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "РАВНО (" + ОжидаемоеЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция Больше(Знач МеньшееЗначение) Экспорт + Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение > МеньшееЗначение) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "БОЛЬШЕ (" + МеньшееЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция БольшеИлиРавно(Знач МеньшееИлиРавноеЗначение) Экспорт + Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение >= МеньшееИлиРавноеЗначение) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "БОЛЬШЕ ИЛИ РАВНО (" + МеньшееИлиРавноеЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция Минимум(Знач МинимальноеЗначение) Экспорт + Возврат БольшеИлиРавно(МинимальноеЗначение); +КонецФункции + +Функция МеньшеИлиРавно(Знач БольшееИлиРавноеЗначение) Экспорт + Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение <= БольшееИлиРавноеЗначение) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "МЕНЬШЕ ИЛИ РАВНО (" + БольшееИлиРавноеЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция Максимум(Знач МаксимальноеЗначение) Экспорт + Возврат МеньшеИлиРавно(МаксимальноеЗначение); +КонецФункции + +Функция Меньше(Знач БольшееЗначение) Экспорт + Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение < БольшееЗначение) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "МЕНЬШЕ (" + БольшееЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция Заполнено() Экспорт + Если Не ЛогическоеВыражениеВерно(ЗначениеЗаполнено(ПроверяемоеЗначение)) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "является ЗАПОЛНЕННЫМ."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция Существует() Экспорт + Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение <> Неопределено И ПроверяемоеЗначение <> Null) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "СУЩЕСТВУЕТ."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция ЭтоНеопределено() Экспорт + Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение = Неопределено) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "является НЕОПРЕДЕЛЕНО."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция ЕстьНеопределено() Экспорт + Возврат ЭтоНеопределено(); +КонецФункции + +Функция ЭтоNull() Экспорт + Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение = Null) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "является NULL."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция ЕстьNull() Экспорт + Возврат ЭтоNull(); +КонецФункции + +Функция ИмеетТип(Знач ТипИлиИмяТипа) Экспорт + ОжидаемыйТип = ?(ТипЗнч(ТипИлиИмяТипа) = Тип("Строка"), Тип(ТипИлиИмяТипа), ТипИлиИмяТипа); + ТипПроверяемогоЗначения = ТипЗнч(ПроверяемоеЗначение); + Если Не ЛогическоеВыражениеВерно(ТипПроверяемогоЗначения = ОжидаемыйТип) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке("тип - " + ТипПроверяемогоЗначения, "имеет тип (" + ОжидаемыйТип + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция Между(Знач НачальноеЗначение, Знач КонечноеЗначение) Экспорт + Если Не ЛогическоеВыражениеВерно(ПроверяемоеЗначение >= НачальноеЗначение И ПроверяемоеЗначение <= КонечноеЗначение) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "МЕЖДУ (" + НачальноеЗначение + ") и (" + КонечноеЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция Содержит(Знач ИскомоеЗначение) Экспорт + Перем ИскомоеЗначениеНайдено; + + ТипПроверяемоегоЗначения = ТипЗнч(ПроверяемоеЗначение); + Если ТипПроверяемоегоЗначения = Тип("Строка") Тогда + ИскомоеЗначениеНайдено = Найти(ПроверяемоеЗначение, ИскомоеЗначение) > 0; + ИначеЕсли ТипПроверяемоегоЗначения = Тип("Массив") Или ТипПроверяемоегоЗначения = Тип("ФиксированныйМассив") Тогда + ИскомоеЗначениеНайдено = ПроверяемоеЗначение.Найти(ИскомоеЗначение) <> Неопределено; + ИначеЕсли ТипПроверяемоегоЗначения = Тип("Структура") Или ТипПроверяемоегоЗначения = Тип("ФиксированнаяСтруктура") + Или ТипПроверяемоегоЗначения = Тип("Соответствие") Или ТипПроверяемоегоЗначения = Тип("ФиксированноеСоответствие") Тогда + Для каждого КлючЗначение Из ПроверяемоеЗначение Цикл + ИскомоеЗначениеНайдено = КлючЗначение.Значение = ИскомоеЗначение; + Если ИскомоеЗначениеНайдено Тогда + Прервать; + КонецЕсли; + КонецЦикла; + ИначеЕсли ТипПроверяемоегоЗначения = Тип("СписокЗначений") Тогда + ИскомоеЗначениеНайдено = ПроверяемоеЗначение.НайтиПоЗначению(ИскомоеЗначение) <> Неопределено; + КонецЕсли; + + Если ИскомоеЗначениеНайдено = Неопределено Тогда + СообщениеОшибки = "Утверждение ""Содержит"" не умеет работать с типом <" + ТипПроверяемоегоЗначения + ">." + ФорматДСО(ДопСообщениеОшибки); + ВызватьИсключение СообщениеОшибки; + КонецЕсли; + + Если Не ЛогическоеВыражениеВерно(ИскомоеЗначениеНайдено) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке(ПроверяемоеЗначение, "СОДЕРЖИТ (" + ИскомоеЗначение + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция ИмеетДлину(Знач ОжидаемаяДлина) Экспорт + Перем ФактическаяДлина; + + ТипПроверяемоегоЗначения = ТипЗнч(ПроверяемоеЗначение); + Если ТипПроверяемоегоЗначения = Тип("Строка") Тогда + ФактическаяДлина = СтрДлина(ПроверяемоеЗначение); + ИначеЕсли ТипПроверяемоегоЗначения = Тип("Массив") Или ТипПроверяемоегоЗначения = Тип("ФиксированныйМассив") + Или ТипПроверяемоегоЗначения = Тип("Структура") Или ТипПроверяемоегоЗначения = Тип("ФиксированнаяСтруктура") + Или ТипПроверяемоегоЗначения = Тип("Соответствие") Или ТипПроверяемоегоЗначения = Тип("ФиксированноеСоответствие") + Или ТипПроверяемоегоЗначения = Тип("СписокЗначений") Тогда + ФактическаяДлина = ПроверяемоеЗначение.Количество(); + КонецЕсли; + + Если ФактическаяДлина = Неопределено Тогда + СообщениеОшибки = "Утверждение ""ИмеетДлину"" не умеет работать с типом <" + ТипПроверяемоегоЗначения + ">." + ФорматДСО(ДопСообщениеОшибки); + ВызватьИсключение СообщениеОшибки; + КонецЕсли; + + Если Не ЛогическоеВыражениеВерно(ФактическаяДлина = ОжидаемаяДлина) Тогда + СообщениеОшибки = СформироватьСообщениеОбОшибке("<" +ПроверяемоеЗначение + "> с длиной " + ФактическаяДлина, "ИМЕЕТ ДЛИНУ (" + ОжидаемаяДлина + ")."); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +Функция ВыбрасываетИсключение(Знач ФрагментИсключения = "") Экспорт + Контекст = ПроверяемоеЗначение; + СтрокаПараметры = ""; + Если ТипЗнч(ПараметрыМетода) = Тип("Массив") Тогда + Для Сч = 0 По ПараметрыМетода.Количество() - 1 Цикл + СтрокаПараметры = СтрокаПараметры + ",ПараметрыМетода[" + Сч + "]"; + КонецЦикла; + СтрокаПараметры = Сред(СтрокаПараметры, 2); + КонецЕсли; + СтрокаДляВыполнения = "Контекст." + ИмяМетода + "(" + СтрокаПараметры + ")"; + + ИсключениеВозникло = Ложь; + Попытка + Выполнить(СтрокаДляВыполнения); + Исключение + ИсключениеВозникло = Истина; + ТекстИсключения = ОписаниеОшибки(); + КонецПопытки; + + Если Не ЛогическоеВыражениеВерно(ИсключениеВозникло И Найти(ТекстИсключения, ФрагментИсключения) > 0) Тогда + СообщениеОшибки = "Ожидали, что " + СтрокаДляВыполнения + + ?(ФлагОтрицания, " НЕ ", " ") + + "ВЫБРОСИТ ИСКЛЮЧЕНИЕ" + + ?(ЗначениеЗаполнено(ФрагментИсключения), " СОДЕРЖАЩЕЕ ТЕКСТ <" + ФрагментИсключения + ">, а был текст <" + ТекстИсключения + ">.", ""); + ВызватьОшибкуПроверки(СообщениеОшибки); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + +// { Helpers +Функция ФорматДСО(Знач ДопСообщениеОшибки) + Если ДопСообщениеОшибки = "" Тогда + Возврат ""; + КонецЕсли; + + Возврат Символы.ПС + ДопСообщениеОшибки; +КонецФункции + +Процедура ВызватьОшибкуПроверки(Знач СообщениеОшибки) + Префикс = "["+ СтатусыРезультатаТестирования.ОшибкаПроверки + "]"; + ВызватьИсключение Префикс + " " + СообщениеОшибки; +КонецПроцедуры + +Функция ЛогическоеВыражениеВерно(Знач ЛогическоеВыражение) + Результат = ФлагОтрицания <> ЛогическоеВыражение; + ФлагОтрицанияДляСообщения = ФлагОтрицания; + ФлагОтрицания = Ложь; + + Возврат Результат; +КонецФункции + +Функция СформироватьСообщениеОбОшибке(Знач ПроверяемоеЗначение, Знач Ожидание) + Возврат "Ожидали, что проверяемое значение (" + ПроверяемоеЗначение + ")" + ?(ФлагОтрицанияДляСообщения, " НЕ ", " ") + Ожидание + ФорматДСО(ДопСообщениеОшибки); +КонецФункции +// } Helpers + +СтатусыРезультатаТестирования = Новый Структура; +СтатусыРезультатаТестирования.Вставить("ОшибкаПроверки", "Failed"); +СтатусыРезультатаТестирования.Вставить("НеизвестнаяОшибка", "Broken"); +СтатусыРезультатаТестирования.Вставить("ТестПропущен", "Pending"); +СтатусыРезультатаТестирования = Новый ФиксированнаяСтруктура(СтатусыРезультатаТестирования); diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..94014b583 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..8e886e956 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.УтвержденияBDD + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..e66f67731 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217BDD/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,208 @@ + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +&НаКлиенте +Функция Что(Знач ПроверяемоеЗначениеПараметр, Знач Сообщение = "") Экспорт + ВыполнитьМетодОбъектаНаСервере("Что", 2, ПроверяемоеЗначениеПараметр, Сообщение); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция Не_() Экспорт + ВыполнитьМетодОбъектаНаСервере("Не_", 0); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция ЭтоНе() Экспорт + Возврат Не_(); +КонецФункции + +&НаКлиенте +Функция Метод(Знач ИмяМетода, Знач ПараметрыМетода = Неопределено) Экспорт + ВыполнитьМетодОбъектаНаСервере("Метод", 2, ИмяМетода, ПараметрыМетода); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция ЭтоИстина() Экспорт + ВыполнитьМетодОбъектаНаСервере("ЭтоИстина", 0); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция ЕстьИстина() Экспорт + Возврат ЭтоИстина(); +КонецФункции + +&НаКлиенте +Функция ЭтоЛожь() Экспорт + ВыполнитьМетодОбъектаНаСервере("ЭтоЛожь", 0); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция ЕстьЛожь() Экспорт + Возврат ЭтоЛожь(); +КонецФункции + +&НаКлиенте +Функция Равно(Знач ОжидаемоеЗначение) Экспорт + ВыполнитьМетодОбъектаНаСервере("Равно", 1, ОжидаемоеЗначение); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция Больше(Знач МеньшееЗначение) Экспорт + ВыполнитьМетодОбъектаНаСервере("Больше", 1, МеньшееЗначение); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция БольшеИлиРавно(Знач МеньшееИлиРавноеЗначение) Экспорт + ВыполнитьМетодОбъектаНаСервере("БольшеИлиРавно", 1, МеньшееИлиРавноеЗначение); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция Минимум(Знач МинимальноеЗначение) Экспорт + Возврат БольшеИлиРавно(МинимальноеЗначение); +КонецФункции + +&НаКлиенте +Функция МеньшеИлиРавно(Знач БольшееИлиРавноеЗначение) Экспорт + ВыполнитьМетодОбъектаНаСервере("МеньшеИлиРавно", 1, БольшееИлиРавноеЗначение); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция Максимум(Знач МаксимальноеЗначение) Экспорт + Возврат МеньшеИлиРавно(МаксимальноеЗначение); +КонецФункции + +&НаКлиенте +Функция Меньше(Знач БольшееЗначение) Экспорт + ВыполнитьМетодОбъектаНаСервере("Меньше", 1, БольшееЗначение); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция Заполнено() Экспорт + ВыполнитьМетодОбъектаНаСервере("Заполнено", 0); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция Существует() Экспорт + ВыполнитьМетодОбъектаНаСервере("Существует", 0); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция ЭтоНеопределено() Экспорт + ВыполнитьМетодОбъектаНаСервере("ЭтоНеопределено", 0); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция ЕстьНеопределено() Экспорт + Возврат ЭтоНеопределено(); +КонецФункции + +&НаКлиенте +Функция ЭтоNull() Экспорт + ВыполнитьМетодОбъектаНаСервере("ЭтоNull", 0); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция ЕстьNull() Экспорт + Возврат ЭтоNull(); +КонецФункции + +&НаКлиенте +Функция ИмеетТип(Знач ТипИлиИмяТипа) Экспорт + ВыполнитьМетодОбъектаНаСервере("ИмеетТип", 1, ТипИлиИмяТипа); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция Между(Знач НачальноеЗначение, Знач КонечноеЗначение) Экспорт + ВыполнитьМетодОбъектаНаСервере("Между", 2, НачальноеЗначение, КонечноеЗначение); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция Содержит(Знач ИскомоеЗначение) Экспорт + ВыполнитьМетодОбъектаНаСервере("Содержит", 1, ИскомоеЗначение); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция ИмеетДлину(Знач ОжидаемаяДлина) Экспорт + ВыполнитьМетодОбъектаНаСервере("ИмеетДлину", 1, ОжидаемаяДлина); + + Возврат ЭтаФорма; +КонецФункции + +&НаКлиенте +Функция ВыбрасываетИсключение(Знач ФрагментИсключения = "") Экспорт + ВыполнитьМетодОбъектаНаСервере("ВыбрасываетИсключение", 1, ФрагментИсключения); + + Возврат ЭтаФорма; +КонецФункции + +// { Helpers +&НаСервере +Процедура ВыполнитьМетодОбъектаНаСервере(Знач ИмяМетода, Знач КоличествоПараметров, Знач Параметр1 = Неопределено, Знач Параметр2 = Неопределено) + ОбъектНаСервере = ЭтотОбъектНаСервере(); + + СтрокаПараметры = ""; + Если КоличествоПараметров = 1 Тогда + СтрокаПараметры = "Параметр1"; + ИначеЕсли КоличествоПараметров = 2 Тогда + СтрокаПараметры = "Параметр1, Параметр2"; + КонецЕсли; + + Попытка + Выполнить("ОбъектНаСервере." + ИмяМетода + "(" + СтрокаПараметры + ")"); + Исключение + ОписаниеОшибки = ОписаниеОшибки(); + ВызватьИсключение "Вызов метода <" + ИмяМетода +">: " + ОписаниеОшибки; + КонецПопытки; + + ЗначениеВРеквизитФормы(ОбъектНаСервере, "Объект"); +КонецПроцедуры + +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции +// } Helpers diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206.xml" new file mode 100644 index 000000000..fe78d8ab6 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206.xml" @@ -0,0 +1,66 @@ + + + + + + 05820258-54a2-459c-9980-0219c767f3ce + eac6c3a1-43d4-4310-93ee-0e311ce6b695 + + + 3c905996-92ff-498f-b7d5-81e1264469a7 + 325cc8b8-cda1-4cf3-933a-cacdfedd2bc8 + + + + УтвержденияПроверкаТаблиц + + + ru + Утверждения проверка таблиц + + + + false + DataProcessor.УтвержденияПроверкаТаблиц.Form.Форма + + false + + + + + + + РезультатыСравненияТаблиц + + + ru + Результаты сравнения таблиц + + + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + + +
Форма
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..a7fba43b9 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Ext/ObjectModule.bsl" @@ -0,0 +1,219 @@ + +// { Plugin interface +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Результат = Новый Структура; + Результат.Вставить("Тип", ВозможныеТипыПлагинов.Утилита); + Результат.Вставить("Идентификатор", Метаданные().Имя); + Результат.Вставить("Представление", "УтвержденияПроверкаТаблиц"); + + Возврат Новый ФиксированнаяСтруктура(Результат); +КонецФункции + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры +// } Plugin interface + +Процедура ПроверитьРавенствоТаблиц(Таб1, Таб2, ДопСообщениеОшибки = "") Экспорт + + Если ТипЗнч(Таб1) <> Тип("ТаблицаЗначений") Тогда + ВызватьИсключение "ПроверитьРавенствоТаблиц: Первый параметр-таблица таблицей не является"; + КонецЕсли; + Если ТипЗнч(Таб1) <> Тип("ТаблицаЗначений") Тогда + ВызватьИсключение "ПроверитьРавенствоТаблиц: Второй параметр-таблица таблицей не является"; + КонецЕсли; + + Различия = Новый ТаблицаЗначений; + РезультатСравнения = СравнитьТаблицы(Таб1, Таб2, Различия); + + Если РезультатыСравненияТаблиц.ТаблицыСовпадают <> РезультатСравнения Тогда + + ИменаРезультатов = Новый Соответствие; + Для Каждого КлючЗначение Из РезультатыСравненияТаблиц Цикл + ИменаРезультатов.Вставить(КлючЗначение.Значение, КлючЗначение.Ключ); + КонецЦикла; + СтрокаОшибок = "Различия в таблицах:" + Символы.ПС; + СтрокаОшибок = СтрокаОшибок + "Ожидали статус <" + ИменаРезультатов[РезультатыСравненияТаблиц.ТаблицыСовпадают] + ">, а получили <" + ИменаРезультатов[РезультатСравнения] + ">" + Символы.ПС; + Для Каждого Строка Из Различия Цикл + СтрокаОшибок = СтрокаОшибок + "Значение [" + Строка.Колонка + ":" + Строка.Строка + "]. Ожидали <" + Строка.Ожидание + ">, а получили <" + Строка.Результат + ">" + Символы.ПС; + КонецЦикла; + + ВызватьОшибкуПроверки("Таблицы должны совпадать, а они различны" + Символы.ПС + СтрокаОшибок + Символы.ПС + ДопСообщениеОшибки); + + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениям(ТабДок1, ТабДок2, УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки = Ложь, УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки = Ложь, Знач ДопСообщениеОшибки = "") Экспорт + + Если ТипЗнч(ТабДок1) <> Тип("ТабличныйДокумент") Тогда + ВызватьИсключение "ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениям: Первый параметр-таблица не является табличным документов"; + КонецЕсли; + Если ТипЗнч(ТабДок2) <> Тип("ТабличныйДокумент") Тогда + ВызватьИсключение "ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениям: Второй параметр-таблица не является табличным документов"; + КонецЕсли; + + УчитыватьТолькоВидимыеКолонки = Ложь; + Если ТипЗнч(УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки) = Тип("Булево") Тогда + УчитыватьТолькоВидимыеКолонки = УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки; + ИначеЕсли ТипЗнч(УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки) = Тип("Строка") Тогда + ДопСообщениеОшибки = УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки; + КонецЕсли; + УчитыватьТолькоВидимыеСтроки = Ложь; + Если ТипЗнч(УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки) = Тип("Булево") Тогда + УчитыватьТолькоВидимыеСтроки = УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки; + ИначеЕсли ТипЗнч(УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки) = Тип("Строка") Тогда + ДопСообщениеОшибки = УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки; + КонецЕсли; + + Таб1 = ПолучитьТаблицуЗначенийИзТабличногоДокумента(ТабДок1, УчитыватьТолькоВидимыеКолонки, УчитыватьТолькоВидимыеСтроки); + Таб2 = ПолучитьТаблицуЗначенийИзТабличногоДокумента(ТабДок2, УчитыватьТолькоВидимыеКолонки, УчитыватьТолькоВидимыеСтроки); + + ПроверитьРавенствоТаблиц(Таб1, Таб2, ДопСообщениеОшибки); + +КонецПроцедуры + +// портирован из Functest +Функция ПолучитьТаблицуЗначенийИзТабличногоДокумента(ТабличныйДокумент, УчитыватьТолькоВидимыеКолонки = Ложь, УчитыватьТолькоВидимыеСтроки = Ложь) Экспорт + + ТипТабличногоДокумента = ТипЗнч(ТабличныйДокумент); + Если ТипТабличногоДокумента <> Тип("ТабличныйДокумент") И ТипТабличногоДокумента <> Тип("ПолеТабличногоДокумента") Тогда + ВызватьИсключение "ПолучитьТаблицуЗначенийИзТабличногоДокумента: Требуется тип ТабличныйДокумент или ПолеТабличногоДокумента"; + КонецЕсли; + + НомерПоследнейКолонки = ТабличныйДокумент.ШиринаТаблицы; + НомерПоследнейСтроки = ТабличныйДокумент.ВысотаТаблицы; + + НоваяТаблицаЗначений = Новый ТаблицаЗначений; + Колонки = НоваяТаблицаЗначений.Колонки; + ТипСтрока = Новый ОписаниеТипов("Строка"); + + // TODO При определении видимости не учитывается наличие нескольких форматов строк, сейчас видимоcть колонки определяется по формату первой строки + УчитываемыеКолонки = Новый Массив; + Для НомерКолонки = 1 По НомерПоследнейКолонки Цикл + ОбластьКолонки = ТабличныйДокумент.Область(0, НомерКолонки, 1, НомерКолонки); + + УчитыватьКолонку = Не УчитыватьТолькоВидимыеКолонки Или ОбластьКолонки.Видимость; + Если УчитыватьКолонку Тогда + УчитываемыеКолонки.Добавить(НомерКолонки); + ШиринаКолонки = ОбластьКолонки.ШиринаКолонки; + Если ШиринаКолонки <= 1 Тогда + ШиринаКолонки = 1; + КонецЕсли; + ИмяКолонки = "К" + Формат(Колонки.Количество() + 1, "ЧН=; ЧГ=0"); + Колонки.Добавить(ИмяКолонки, ТипСтрока, ИмяКолонки, ШиринаКолонки); + КонецЕсли; + КонецЦикла; + + ГраницаКолонок = УчитываемыеКолонки.ВГраница(); + Для НомерСтроки = 1 По НомерПоследнейСтроки Цикл + + Если УчитыватьТолькоВидимыеСтроки И Не ТабличныйДокумент.Область(НомерСтроки,, НомерСтроки).Видимость Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = НоваяТаблицаЗначений.Добавить(); + + Для Индекс = 0 По ГраницаКолонок Цикл + НомерКолонки = УчитываемыеКолонки[Индекс]; + Область = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); + НоваяСтрока[Индекс] = Область.Текст; + КонецЦикла; + КонецЦикла; + + Возврат НоваяТаблицаЗначений; + +КонецФункции + +// портирован из Functest +Функция СравнитьТаблицы(ТаблицаОжиданий, ТаблицаРезультатов, ТаблицаРазличий) + + Если ТаблицаОжиданий.Количество() <> ТаблицаРезультатов.Количество() Тогда + Возврат РезультатыСравненияТаблиц.РазноеКоличествоСтрок; + КонецЕсли; + + Если ТаблицаОжиданий.Количество() = 0 Тогда + Возврат РезультатыСравненияТаблиц.ТаблицыСовпадают; //Пустые таблицы всегда одинаковы + КонецЕсли; + + //Проверим структуру колонок + + //TODO При этом сравнении в структуре ТаблицаРезультатов может оказаться больше колонок, чем в ТаблицаОжиданий, + // так что для абсолютного точного сравнения нужно добавить проверку совпадения количества колонок. + ОжидаемыеКолонки = ТаблицаОжиданий.Колонки; + КолонкиРезультата = ТаблицаРезультатов.Колонки; + Для Каждого Колонка Из ОжидаемыеКолонки Цикл + Если КолонкиРезультата.Найти(Колонка.Имя) = Неопределено Тогда + Возврат РезультатыСравненияТаблиц.РазличаютсяКолонки; + КонецЕсли; + КонецЦикла; + + Возврат СравнитьЗначенияТаблиц(ТаблицаОжиданий, ТаблицаРезультатов, ТаблицаРазличий); + +КонецФункции + +// портирован из Functest +Функция СравнитьЗначенияТаблиц(ТаблицаОжиданий, ТаблицаРезультатов, Различия) + + Различия = Новый ТаблицаЗначений; + Различия.Колонки.Очистить(); + Различия.Колонки.Добавить("Строка",Новый ОписаниеТипов("Число")); + Различия.Колонки.Добавить("Колонка",Новый ОписаниеТипов("Строка")); + Различия.Колонки.Добавить("Ожидание"); + Различия.Колонки.Добавить("Результат"); + + РезультатСравнения = РезультатыСравненияТаблиц.ТаблицыСовпадают; + + Колонки = ТаблицаОжиданий.Колонки; + ГраницаСтрок = ТаблицаОжиданий.Количество() - 1; + Для Индекс = 0 По ГраницаСтрок Цикл + + ОжидаемаяСтрока = ТаблицаОжиданий[Индекс]; + СтрокаРезультата = ТаблицаРезультатов[Индекс]; + + Для Каждого Колонка Из Колонки Цикл + ИмяКолонки = Колонка.Имя; + + ОжидаемоеЗначение = ОжидаемаяСтрока[ИмяКолонки]; + ЗначениеРезультата = СтрокаРезультата[ИмяКолонки]; + Если ОжидаемоеЗначение = ЗначениеРезультата + Или (Не ЗначениеЗаполнено(ОжидаемоеЗначение) И Не ЗначениеЗаполнено(ЗначениеРезультата)) Тогда //Пустые значения разных типов 1С-м не считаются равными :( + Продолжить; + КонецЕсли; + + Различие = Различия.Добавить(); + Различие.Строка = Индекс + 1; + Различие.Колонка = ИмяКолонки; + Различие.Ожидание = ОжидаемоеЗначение; + Различие.Результат = ЗначениеРезультата; + РезультатСравнения = РезультатыСравненияТаблиц.НеСовпадаютЗначенияВЯчейкеТаблицы; + + КонецЦикла; + + КонецЦикла; + + Возврат РезультатСравнения; + +КонецФункции + +Процедура ВызватьОшибкуПроверки(СообщениеОшибки = "") + + Префикс = "["+ СтатусыРезультатаТестирования().ОшибкаПроверки + "]"; + ВызватьИсключение Префикс + " " + СообщениеОшибки; + +КонецПроцедуры + +Функция СтатусыРезультатаТестирования() + СтатусыРезультатаТестирования = Новый Структура; + СтатусыРезультатаТестирования.Вставить("ОшибкаПроверки", "Failed"); + СтатусыРезультатаТестирования.Вставить("НеизвестнаяОшибка", "Broken"); + СтатусыРезультатаТестирования.Вставить("ТестПропущен", "Pending"); + + Возврат Новый ФиксированнаяСтруктура(СтатусыРезультатаТестирования); +КонецФункции + +РезультатыСравненияТаблиц = Новый Структура; +РезультатыСравненияТаблиц.Вставить("ТаблицыСовпадают", 0); +РезультатыСравненияТаблиц.Вставить("НеСовпадаютЗначенияВЯчейкеТаблицы", 1); +РезультатыСравненияТаблиц.Вставить("РазноеКоличествоСтрок", 2); +РезультатыСравненияТаблиц.Вставить("РазличаютсяКолонки", 3); +РезультатыСравненияТаблиц = Новый ФиксированнаяСтруктура(РезультатыСравненияТаблиц); diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..8a24361e5 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..7a381ffb8 --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,13 @@ + +
+ useIfNecessary + + + + + cfg:DataProcessorObject.УтвержденияПроверкаТаблиц + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..7a847029b --- /dev/null +++ "b/lib/CF/83xddNoSync/DataProcessors/\320\243\321\202\320\262\320\265\321\200\320\266\320\264\320\265\320\275\320\270\321\217\320\237\321\200\320\276\320\262\320\265\321\200\320\272\320\260\320\242\320\260\320\261\320\273\320\270\321\206/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,30 @@ + +// { Plugin interface +&НаКлиенте +Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт + Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов); +КонецФункции + +&НаСервере +Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) + Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); +КонецФункции +// } Plugin interface + +// { Helpers +&НаСервере +Функция ЭтотОбъектНаСервере() + Возврат РеквизитФормыВЗначение("Объект"); +КонецФункции +// } Helpers + + +&НаКлиенте +Процедура ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениям(ТабДок1, ТабДок2, УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки = Ложь, УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки = Ложь, Знач ДопСообщениеОшибки = "") Экспорт + ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениямСервер(ТабДок1, ТабДок2, УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки, УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки, ДопСообщениеОшибки); +КонецПроцедуры + +&НаСервере +Процедура ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениямСервер(ТабДок1, ТабДок2, УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки = Ложь, УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки = Ложь, Знач ДопСообщениеОшибки = "") Экспорт + ЭтотОбъектНаСервере().ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениям(ТабДок1, ТабДок2, УчитыватьТолькоВидимыеКолонкиИлиДопСообщениеОшибки, УчитыватьТолькоВидимыеСтрокиИлиДопСообщениеОшибки, ДопСообщениеОшибки); +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021.xml" "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021.xml" new file mode 100644 index 000000000..ee33cc38d --- /dev/null +++ "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021.xml" @@ -0,0 +1,254 @@ + + + + + + 6fa8ecab-d902-4197-b283-bbba237f6769 + 974edf35-649a-470f-b439-f2cd330b0575 + + + e618a7d8-000b-498a-ab7b-c8a27cef015e + 85a0388b-544d-4027-b8eb-62b141f71854 + + + e55bd8ca-ccb9-4218-a494-6d212024afe2 + 442aa968-8804-4b33-b2c7-51bea4fff1e2 + + + 5a995dee-df3e-4b61-878e-6cddf80169ad + d660e75f-5e98-44f5-bdca-28bba21402f6 + + + b73fcbe9-d96a-469c-9225-a7492448b8ad + 85457332-2de9-4ce2-98ae-c93aa4341d35 + + + + Документ1 + + + true + + String + 9 + Variable + Year + true + true + + + + Document.Документ1.StandardAttribute.Number + + Use + Begin + DontUse + Directly + Document.Документ1.Form.ФормаДокумента + Document.Документ1.Form.ФормаСписка + + + + + Allow + Allow + AutoDeleteOnUnpost + WriteSelected + AutoFill + + true + true + false + + Managed + Use + + + + + + Auto + + + + + ПростойСправочник + + + ru + Простой справочник + + + + + cfg:CatalogRef.ПростойСправочник + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + +
ФормаСписка
+
ФормаДокумента
+ + + + ff4aaec8-6384-4ff5-b374-bd19de9fc065 + a8cdd4a7-262f-4c05-b4ce-b9db0f37f590 + + + b2179d81-63f2-4055-aef3-37467cd56dd0 + 418112f1-624f-43d0-bcd7-ece5ebf209d3 + + + + Состав + + + ru + Состав + + + + + DontCheck + + + + + РеквизитЧисло + + + ru + Реквизит число + + + + + xs:decimal + + 10 + 2 + Any + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + РеквизитБулево + + + ru + Реквизит булево + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + ПростойСправочник2 + + + ru + Простой справочник2 + + + + + cfg:CatalogRef.ПростойСправочник2 + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + +
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260.xml" "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260.xml" new file mode 100644 index 000000000..8ff039934 --- /dev/null +++ "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаДокумента + + + ru + Форма документа + + + + Managed + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" new file mode 100644 index 000000000..754ca8497 --- /dev/null +++ "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" @@ -0,0 +1,105 @@ + +
+ useIfNecessary + CurrentOrLast + Auto + true + + + + Объект.Number + EnterOnInput + + + + + Объект.Date + EnterOnInput + + + + + Объект.ПростойСправочник + EnterOnInput + + + + + List + true + true + true + Объект.Состав + None + None + None + + + + + + + Состав + SearchStringRepresentation + + + + + + + Состав + ViewStatusRepresentation + + + + + + + Состав + SearchControl + + + + + + + Объект.Состав.LineNumber + EnterOnInput + + + + + Объект.Состав.РеквизитЧисло + EnterOnInput + + + + + Объект.Состав.РеквизитБулево + EnterOnInput + Auto + + + + + Объект.Состав.ПростойСправочник2 + EnterOnInput + + + + +
+
+ + + + cfg:DocumentObject.Документ1 + + true + true + + Объект.RegisterRecords + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" new file mode 100644 index 000000000..bf08f2ed9 --- /dev/null +++ "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml" new file mode 100644 index 000000000..fecb52c91 --- /dev/null +++ "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml" @@ -0,0 +1,109 @@ + +
+ useIfNecessary + + + + List + None + true + true + ExpandTopLevel + true + Список + Список.DefaultPicture + None + None + None + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Date + true + + + + + Список.Number + + + + + Список.ПростойСправочник + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Document.Документ1 + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022.xml" "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022.xml" new file mode 100644 index 000000000..a0f582438 --- /dev/null +++ "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022.xml" @@ -0,0 +1,546 @@ + + + + + + 60489391-7334-4600-ae76-278a937dd2a2 + 1f273088-a3ad-423e-b0ce-98b3a9092039 + + + f7b4b037-6873-4adf-b13d-20f6f263a49b + d617eb13-83a8-4b8e-bfbd-3b2c58eee082 + + + deb5dec3-338b-4743-b1b9-8e6d20fb9b8e + e44439e2-a108-4626-99a5-df98ff4765f4 + + + 77e5da09-706a-4175-9719-2c24aeae43da + b24bcded-4171-43ce-8044-e2165904ac98 + + + 2f5b5f46-ea29-4c34-b4ef-db2df7df1dd3 + 08d046b0-4a1d-4577-9d01-676634508370 + + + + Документ2 + + + true + + String + 9 + Variable + Year + true + true + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + + + Document.Документ2.StandardAttribute.Number + + Use + Begin + DontUse + Directly + Document.Документ2.Form.ФормаДокумента + Document.Документ2.Form.ФормаСписка + + + + + Allow + Allow + AutoDeleteOnUnpost + WriteSelected + AutoFill + + InformationRegister.РСПодчиненныйРегистратору + AccountingRegister.РегистрБухгалтерии1 + AccumulationRegister.РегистрНакопления2 + + true + true + false + + Managed + Use + + + + + + Auto + + + + + ПростойСправочник + + + ru + Простой справочник + + + + + cfg:CatalogRef.ПростойСправочник + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + +
ФормаСписка
+
ФормаДокумента
+ + + + d846aa98-324e-4dd6-9ee3-2f2c0ef0ce24 + 0f256580-6712-4427-b603-665060cf5a08 + + + b0bc2f4e-7fe9-4b51-ade3-c472f74d3e56 + 21796dd1-9e80-4b95-b097-7294336de995 + + + + Состав + + + ru + Состав + + + + + DontCheck + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + + + + РеквизитЧисло + + + ru + Реквизит число + + + + + xs:decimal + + 10 + 2 + Any + + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + РеквизитБулево + + + ru + Реквизит булево + + + + + xs:boolean + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + ПростойСправочник2 + + + ru + Простой справочник2 + + + + + cfg:CatalogRef.ПростойСправочник2 + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + + + + 6cdcbc4d-2dbd-4316-be1e-afafc026883d + 68242312-b59a-4ece-93ba-c462260f850e + + + b555e694-f1a6-480d-809c-5d12071cafe7 + ee78501f-5e22-442f-a3fe-7b3d2fcd459c + + + + Состав2 + + + ru + Состав2 + + + + + DontCheck + + + + + РеквизитУИД + + + ru + Реквизит УИД + + + + + v8:UUID + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + DontUse + + + + + ХранилищеЗначения + + + ru + Хранилище значения + + + + + v8:ValueStorage + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + ЛюбаяСсылка + + + ru + Любая ссылка + + + + + cfg:AnyRef + + false + + + + false + + false + false + + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + +
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..988f02714 --- /dev/null +++ "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Ext/ObjectModule.bsl" @@ -0,0 +1,63 @@ + +Процедура ОбработкаПроведения(Отказ, Режим) + //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ + // Данный фрагмент построен конструктором. + // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! + + // регистр РСПодчиненныйРегистратору + Движения.РСПодчиненныйРегистратору.Записывать = Истина; + Движения.РСПодчиненныйРегистратору.Очистить(); + Для Каждого ТекСтрокаСостав Из Состав Цикл + Движение = Движения.РСПодчиненныйРегистратору.Добавить(); + Движение.Период = Дата; + Движение.ПростойСправочник = ПростойСправочник; + Движение.ПростойСправочник2 = ТекСтрокаСостав.ПростойСправочник2; + Движение.РесурсЧисло = ТекСтрокаСостав.РеквизитЧисло; + Движение.РеквизитБулево = ТекСтрокаСостав.РеквизитБулево; + КонецЦикла; + + + // регистр РегистрНакопления2 Приход + Движения.РегистрНакопления2.Записывать = Истина; + Движения.РегистрНакопления2.Очистить(); + Для Каждого ТекСтрокаСостав Из Состав Цикл + Движение = Движения.РегистрНакопления2.Добавить(); + Движение.ВидДвижения = ВидДвиженияНакопления.Приход; + Движение.Период = Дата; + Движение.ПростойСправочник = ПростойСправочник; + Движение.ПростойСправочник2 = ТекСтрокаСостав.ПростойСправочник2; + Движение.РесурсЧисло = ТекСтрокаСостав.РеквизитЧисло; + Движение.РеквизитБулево = ТекСтрокаСостав.РеквизитБулево; + КонецЦикла; + + // регистр РегистрБухгалтерии1 + Движения.РегистрБухгалтерии1.Записывать = Истина; + Движения.РегистрБухгалтерии1.Очистить(); + Для Каждого ТекСтрокаСостав Из Состав Цикл + Движение = Движения.РегистрБухгалтерии1.Добавить(); + Движение.СчетДт = ПланыСчетов.ПланСчетов1.Счет01; + Движение.СчетКт = ПланыСчетов.ПланСчетов1.Счет02; + Движение.Период = Дата; + Движение.ПростойСправочник = ПростойСправочник; + Движение.ПростойСправочник2Дт = ТекСтрокаСостав.ПростойСправочник2; + Движение.РесурсЧисло = ТекСтрокаСостав.РеквизитЧисло; + Движение.РесурсЧисло1Дт = ТекСтрокаСостав.РеквизитЧисло; + Движение.РеквизитБулево = ТекСтрокаСостав.РеквизитБулево; + + Движение.СубконтоДт.Вставить(ПланыВидовХарактеристик.ВидыСубконто1.Субконто1, ПростойСправочник); + Движение.СубконтоКт.Вставить(ПланыВидовХарактеристик.ВидыСубконто1.Субконто2, ТекСтрокаСостав.ПростойСправочник2); + Движение.СубконтоКт.Вставить(ПланыВидовХарактеристик.ВидыСубконто1.Субконто1, ПростойСправочник); + + Движение = Движения.РегистрБухгалтерии1.Добавить(); + Движение.СчетДт = ПланыСчетов.ПланСчетов1.СчетБезСубконто; + Движение.Период = Дата; + Движение.ПростойСправочник = ПростойСправочник; + Движение.ПростойСправочник2Кт = ТекСтрокаСостав.ПростойСправочник2; + Движение.РесурсЧисло = ТекСтрокаСостав.РеквизитЧисло; + Движение.РесурсЧисло1Кт = ТекСтрокаСостав.РеквизитЧисло; + Движение.РеквизитБулево = ТекСтрокаСостав.РеквизитБулево; + + КонецЦикла; + + //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Forms/\320\244\320\276\321\200\320\274\320\260\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260.xml" "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Forms/\320\244\320\276\321\200\320\274\320\260\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260.xml" new file mode 100644 index 000000000..5d8dc0fbb --- /dev/null +++ "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Forms/\320\244\320\276\321\200\320\274\320\260\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаДокумента + + + ru + Форма документа + + + + Managed + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Forms/\320\244\320\276\321\200\320\274\320\260\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Forms/\320\244\320\276\321\200\320\274\320\260\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" new file mode 100644 index 000000000..8c2f339a1 --- /dev/null +++ "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Forms/\320\244\320\276\321\200\320\274\320\260\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\202\320\260/Ext/Form.xml" @@ -0,0 +1,156 @@ + +
+ useIfNecessary + CurrentOrLast + Auto + true + + + + Объект.Number + EnterOnInput + + + + + Объект.Date + EnterOnInput + + + + + Объект.ПростойСправочник + EnterOnInput + + + + + List + true + true + true + Объект.Состав + None + None + None + + + + + + + Состав + SearchStringRepresentation + + + + + + + Состав + ViewStatusRepresentation + + + + + + + Состав + SearchControl + + + + + + + Объект.Состав.LineNumber + EnterOnInput + + + + + Объект.Состав.РеквизитЧисло + EnterOnInput + + + + + Объект.Состав.РеквизитБулево + EnterOnInput + Auto + + + + + Объект.Состав.ПростойСправочник2 + EnterOnInput + + + + +
+ + true + true + true + Объект.Состав2 + None + None + None + + + + + + + Состав2 + SearchStringRepresentation + + + + + + + Состав2 + ViewStatusRepresentation + + + + + + + Состав2 + SearchControl + + + + + + + Объект.Состав2.LineNumber + EnterOnInput + + + + + Объект.Состав2.ЛюбаяСсылка + EnterOnInput + + + + +
+
+ + + + cfg:DocumentObject.Документ2 + + true + true + + Объект.RegisterRecords + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" new file mode 100644 index 000000000..831c9c794 --- /dev/null +++ "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260.xml" @@ -0,0 +1,21 @@ + + +
+ + ФормаСписка + + + ru + Форма списка + + + + Managed + false + + PersonalComputer + MobileDevice + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml" new file mode 100644 index 000000000..91e0c7247 --- /dev/null +++ "b/lib/CF/83xddNoSync/Documents/\320\224\320\276\320\272\321\203\320\274\320\265\320\275\321\2022/Forms/\320\244\320\276\321\200\320\274\320\260\320\241\320\277\320\270\321\201\320\272\320\260/Ext/Form.xml" @@ -0,0 +1,109 @@ + +
+ useIfNecessary + + + + List + None + true + true + ExpandTopLevel + true + Список + Список.DefaultPicture + None + None + None + false + 60 + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + Items + false + + true + false + Auto + + + false + + + + + Список + SearchStringRepresentation + + + + + + + Список + ViewStatusRepresentation + + + + + + + Список + SearchControl + + + + + + + Список.Date + true + + + + + Список.Number + + + + + Список.ПростойСправочник + + + + +
+
+ + + + cfg:DynamicList + + true + + false + true + Document.Документ2 + + + Normal + dfcece9d-5077-440b-b6b3-45a5cb4538eb + + + Normal + 88619765-ccb3-46c6-ac52-38e9c992ebd4 + + + Normal + b75fecce-942b-4aed-abc9-e6a02e460fb3 + + Normal + 911b6018-f537-43e8-a417-da56b22f9aec + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Enums/\320\237\320\265\321\200\320\265\321\207\320\270\321\201\320\273\320\265\320\275\320\270\320\2651.xml" "b/lib/CF/83xddNoSync/Enums/\320\237\320\265\321\200\320\265\321\207\320\270\321\201\320\273\320\265\320\275\320\270\320\2651.xml" new file mode 100644 index 000000000..9a26c5487 --- /dev/null +++ "b/lib/CF/83xddNoSync/Enums/\320\237\320\265\321\200\320\265\321\207\320\270\321\201\320\273\320\265\320\275\320\270\320\2651.xml" @@ -0,0 +1,62 @@ + + + + + + 36d03d5a-6911-4160-9183-132c291cc082 + d25b1ed0-a2bc-4f74-bf70-70b6b4b4fee4 + + + 6881f17f-a42c-496c-8652-45aa5aeac609 + 22af477d-392e-472c-adcc-4e96fe7f8b3a + + + f357d68d-9552-49f2-896f-d9fda76aac80 + 5be131c1-9b1d-45e9-9b40-4ee5d1b474d8 + + + + Перечисление1 + + + false + + true + BothWays + + + + + + + + Auto + + + + + ЗначениеПеречисления1 + + + ru + Значение перечисления 1 + + + + + + + + ЗначениеПеречисления2 + + + ru + Значение перечисления 2 + + + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/ExchangePlans/\320\237\320\273\320\260\320\275\320\236\320\261\320\274\320\265\320\275\320\2601.xml" "b/lib/CF/83xddNoSync/ExchangePlans/\320\237\320\273\320\260\320\275\320\236\320\261\320\274\320\265\320\275\320\2601.xml" new file mode 100644 index 000000000..64f0161e0 --- /dev/null +++ "b/lib/CF/83xddNoSync/ExchangePlans/\320\237\320\273\320\260\320\275\320\236\320\261\320\274\320\265\320\275\320\2601.xml" @@ -0,0 +1,323 @@ + + + + + 990b0fe1-e500-4edc-b7c9-537e1a1e543e + + 8c1bc7d5-05fb-4469-abda-f0deca5187dc + 9a3d240e-808e-4ef6-a856-36f823c4752b + + + eb9cb54f-cd63-4b33-812f-3ecdaaee0394 + 4c8f2665-2fec-44a3-b4e4-3bca989681e0 + + + 031ee904-8bf0-47fe-991a-2722debfb96e + 855a885f-6d57-45e5-b637-79c0a5f4faa8 + + + 3bedfcc1-e386-48cb-8af7-04e2e235215a + 52cc4e49-4b02-43c3-ba83-21687fcd0023 + + + 0e3431b6-67df-42f8-a2f3-327f5c1b9d36 + 68876ba6-2e3f-4dd9-b6cd-db425c796eac + + + + ПланОбмена1 + + + false + 9 + Variable + 25 + AsDescription + InDialog + false + BothWays + + ExchangePlan.ПланОбмена1.StandardAttribute.Description + ExchangePlan.ПланОбмена1.StandardAttribute.Code + + Begin + DontUse + Directly + + + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + + false + DontUse + Auto + false + + Managed + Use + + + + + + + + + + РеквизитБулево + + + ru + Реквизит булево + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + РеквизитПеречисление + + + ru + Реквизит перечисление + + + + + cfg:EnumRef.Перечисление1 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + \ No newline at end of file diff --git a/lib/CF/83xddNoSync/Ext/HomePageWorkArea.xml b/lib/CF/83xddNoSync/Ext/HomePageWorkArea.xml new file mode 100644 index 000000000..bd59637fa --- /dev/null +++ b/lib/CF/83xddNoSync/Ext/HomePageWorkArea.xml @@ -0,0 +1,6 @@ + + + TwoColumnsEqualWidth + + + \ No newline at end of file diff --git a/lib/CF/83xddNoSync/Ext/MainSectionCommandInterface.xml b/lib/CF/83xddNoSync/Ext/MainSectionCommandInterface.xml new file mode 100644 index 000000000..f2035d7a2 --- /dev/null +++ b/lib/CF/83xddNoSync/Ext/MainSectionCommandInterface.xml @@ -0,0 +1,34 @@ + + + + + + true + + + + + true + + + + + true + + + + + + NavigationPanelOrdinary + Manual + + + ActionsPanelTools + Manual + + + ActionsPanelTools + Manual + + + \ No newline at end of file diff --git a/lib/CF/83xddNoSync/Ext/ManagedApplicationModule.bsl b/lib/CF/83xddNoSync/Ext/ManagedApplicationModule.bsl new file mode 100644 index 000000000..6901bb746 --- /dev/null +++ b/lib/CF/83xddNoSync/Ext/ManagedApplicationModule.bsl @@ -0,0 +1,12 @@ + +Процедура ПередНачаломРаботыСистемы(Отказ) + + ИмяАдминистратора = ЗапускПриложенияКлиент.ИмяАдминистратораПоУмолчанию(); + Если ЗапускПриложенияСервер.СоздатьПервогоАдминистратораПриНеобходимости(ИмяАдминистратора, ПараметрЗапуска) Тогда + Отказ = Истина; + Если ПустаяСтрока(ПараметрЗапуска) Тогда + ЗапускПриложенияКлиент.ЗапуститьСистемуПовторно(ИмяАдминистратора); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры \ No newline at end of file diff --git a/lib/CF/83xddNoSync/Ext/OrdinaryApplicationModule.bsl b/lib/CF/83xddNoSync/Ext/OrdinaryApplicationModule.bsl new file mode 100644 index 000000000..6901bb746 --- /dev/null +++ b/lib/CF/83xddNoSync/Ext/OrdinaryApplicationModule.bsl @@ -0,0 +1,12 @@ + +Процедура ПередНачаломРаботыСистемы(Отказ) + + ИмяАдминистратора = ЗапускПриложенияКлиент.ИмяАдминистратораПоУмолчанию(); + Если ЗапускПриложенияСервер.СоздатьПервогоАдминистратораПриНеобходимости(ИмяАдминистратора, ПараметрЗапуска) Тогда + Отказ = Истина; + Если ПустаяСтрока(ПараметрЗапуска) Тогда + ЗапускПриложенияКлиент.ЗапуститьСистемуПовторно(ИмяАдминистратора); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/FunctionalOptions/\320\244\321\203\320\275\320\272\321\206\320\270\320\276\320\275\320\260\320\273\321\214\320\275\320\260\321\217\320\236\320\277\321\206\320\270\321\2171.xml" "b/lib/CF/83xddNoSync/FunctionalOptions/\320\244\321\203\320\275\320\272\321\206\320\270\320\276\320\275\320\260\320\273\321\214\320\275\320\260\321\217\320\236\320\277\321\206\320\270\321\2171.xml" new file mode 100644 index 000000000..f1a0c88e8 --- /dev/null +++ "b/lib/CF/83xddNoSync/FunctionalOptions/\320\244\321\203\320\275\320\272\321\206\320\270\320\276\320\275\320\260\320\273\321\214\320\275\320\260\321\217\320\236\320\277\321\206\320\270\321\2171.xml" @@ -0,0 +1,20 @@ + + + + + ФункциональнаяОпция1 + + + ru + Функциональная опция1 + + + + Catalog.ПростойСправочник.Attribute.РеквизитБулево + true + + Report.Отчет1 + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/InformationRegisters/\320\240\320\241\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\202\320\276\321\200\321\203.xml" "b/lib/CF/83xddNoSync/InformationRegisters/\320\240\320\241\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\202\320\276\321\200\321\203.xml" new file mode 100644 index 000000000..de545102f --- /dev/null +++ "b/lib/CF/83xddNoSync/InformationRegisters/\320\240\320\241\320\237\320\276\320\264\321\207\320\270\320\275\320\265\320\275\320\275\321\213\320\271\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\202\320\276\321\200\321\203.xml" @@ -0,0 +1,331 @@ + + + + + + 47736cc3-cf79-4c97-b0a0-c01c8b75d7e2 + 25a68ba8-0bc2-4407-8fc1-de49a3294298 + + + 920e3369-6046-4017-a7e3-f4aabf1b8d00 + e70199fe-16bf-4acf-885e-f69bd7fd1be4 + + + 5f548f5f-7981-4f46-b65c-d8f9b7a965fb + 450fc060-e1f0-46cd-b7f7-dfcd14e54bd1 + + + 1caa8fca-fd34-4875-a481-084dbebefa90 + 341ea0aa-170d-4f18-b002-d8e6ce2f11fa + + + a8d2e908-1c5b-4a56-80ef-6bb4b97dcc4a + 09b0b4f1-a0f2-43d0-b1dc-bced11790535 + + + 10bbbc52-8271-40cb-9db8-0bbb94a6fc57 + 0104e995-704c-4dfa-8699-baf9b7a9b72b + + + 8b64b5f1-0609-4771-a6a1-d985345489f1 + 9f209d4b-33b6-4785-a74e-f06eb57efd2c + + + + РСПодчиненныйРегистратору + + + ru + РСПодчиненный регистратору + + + + false + InDialog + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + RecorderPosition + RecorderSubordinate + false + false + Managed + DontUse + false + false + + + + + + + + + + РесурсЧисло + + + ru + Ресурс число + + + + + xs:decimal + + 10 + 2 + Any + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + РеквизитБулево + + + ru + Реквизит булево + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + ПростойСправочник + + + ru + Простой справочник + + + + + cfg:CatalogRef.ПростойСправочник + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + + + + + ПростойСправочник2 + + + ru + Простой справочник2 + + + + + cfg:CatalogRef.ПростойСправочник2 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/InformationRegisters/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\2711.xml" "b/lib/CF/83xddNoSync/InformationRegisters/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\2711.xml" new file mode 100644 index 000000000..35cc5e0b5 --- /dev/null +++ "b/lib/CF/83xddNoSync/InformationRegisters/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\241\320\262\320\265\320\264\320\265\320\275\320\270\320\2711.xml" @@ -0,0 +1,224 @@ + + + + + + 13a5d355-9a9c-4e75-8e2c-9389edbd5bb0 + 69f24183-0797-4292-bf68-b9618c9d70c7 + + + b71d5607-b293-4885-bc54-23af607a6923 + c5fa3cb4-1067-408d-af40-fd5443fa1682 + + + 7f0c39bd-eaa3-40df-967d-84acad9acd59 + 87ede2c7-e489-4ce5-8bad-b2d86515cb32 + + + a05a272b-6d60-4a8e-aa8f-fc91b1dc964c + ef6b0d43-7455-4bd3-a01e-73e46ddb15f3 + + + 5af24f05-4222-4d82-b311-5547a1385e67 + ca04ab57-1317-4eac-80f1-ed62be1a282c + + + c7e2eeed-4469-4a07-8063-c462c593e239 + 3bd3bc15-22f6-4281-bc39-b3868e3bcbde + + + e0a1ba6d-6e58-4d8c-a923-2e098d22e4bd + f4f235e9-3628-4c32-9b4c-927231b00f99 + + + + РегистрСведений1 + + + true + InDialog + + + + + Nonperiodical + Independent + false + false + Managed + DontUse + false + false + + + + + + + + + + РесурсЧисло + + + ru + Ресурс число + + + + + xs:decimal + + 10 + 2 + Any + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + РесурсБулево + + + ru + Ресурс булево + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + DontIndex + Use + + + + + ПростойСправочник + + + ru + Простой справочник + + + + + cfg:CatalogRef.ПростойСправочник + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + + + + + ПростойСправочник2 + + + ru + Простой справочник2 + + + + + cfg:CatalogRef.ПростойСправочник2 + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + false + true + false + DontIndex + Use + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Languages/\320\240\321\203\321\201\321\201\320\272\320\270\320\271.xml" "b/lib/CF/83xddNoSync/Languages/\320\240\321\203\321\201\321\201\320\272\320\270\320\271.xml" new file mode 100644 index 000000000..92e028e38 --- /dev/null +++ "b/lib/CF/83xddNoSync/Languages/\320\240\321\203\321\201\321\201\320\272\320\270\320\271.xml" @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021.xml" "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021.xml" new file mode 100644 index 000000000..76c964704 --- /dev/null +++ "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021.xml" @@ -0,0 +1,41 @@ + + + + + + 3c4f4a36-42d4-4a2b-af55-a3944a8b17b9 + 0a5edef6-3cb3-4a91-a348-f6963739d97f + + + 2892a6fb-e73b-45ca-9a80-ba37526b5631 + 7240009e-8260-47eb-b732-0bad5ec39f2a + + + + Отчет1 + + + ru + Отчет1 + + + + true + Report.Отчет1.Form.УправляемаяФормаОтчета + Report.Отчет1.Form.ФормаОтчета + + + + + + + false + + + + +
УправляемаяФормаОтчета
+
ФормаОтчета
+
+
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/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\320\236\321\202\321\207\320\265\321\202\320\260.xml" "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/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\320\236\321\202\321\207\320\265\321\202\320\260.xml" new file mode 100644 index 000000000..38aba5d55 --- /dev/null +++ "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/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\320\236\321\202\321\207\320\265\321\202\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + УправляемаяФормаОтчета + + + ru + Управляемая форма отчета + + + + Managed + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/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\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form.xml" "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/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\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form.xml" new file mode 100644 index 000000000..7206c8308 --- /dev/null +++ "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/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\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form.xml" @@ -0,0 +1,24 @@ + +
+ None + useIfNecessary + + + Main + + Auto + + false + + + ПриОткрытии + + + + + cfg:ReportObject.Отчет1 + + true + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/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\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form/Module.bsl" "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/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\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..9611b3fb7 --- /dev/null +++ "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/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\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,6 @@ + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + пустой = Неопределено; // строка нужна для отключения ошибки на пустой обработчик "ПриОткрытии" + //ВызватьИсключение 1; +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260.xml" "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260.xml" new file mode 100644 index 000000000..c09e190f6 --- /dev/null +++ "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + ФормаОтчета + + + ru + Форма отчета + + + + Ordinary + false + + PersonalComputer + MobileDevice + + + +
+
\ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form.bin" "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form.bin" new file mode 100644 index 000000000..0abce4f78 Binary files /dev/null and "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2021/Forms/\320\244\320\276\321\200\320\274\320\260\320\236\321\202\321\207\320\265\321\202\320\260/Ext/Form.bin" differ diff --git "a/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2022.xml" "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2022.xml" new file mode 100644 index 000000000..fb29f8bd3 --- /dev/null +++ "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2022.xml" @@ -0,0 +1,33 @@ + + + + + + 94dcd3c3-42de-41f4-be2e-298df5b08333 + 512e8553-d9c8-4265-aaf1-de84ce239869 + + + 1d1dcdb5-de23-4fd7-b4c5-99f76a4cf23c + 198f840e-76cc-4154-93d6-ec1f05fa466c + + + + Отчет2 + + + true + CommonForm.ФормаОтчета + + + + + + + + false + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2022/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2022/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..5f282702b --- /dev/null +++ "b/lib/CF/83xddNoSync/Reports/\320\236\321\202\321\207\320\265\321\2022/Ext/ObjectModule.bsl" @@ -0,0 +1 @@ + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202_\320\236\321\202\321\207\320\265\321\202.xml" "b/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202_\320\236\321\202\321\207\320\265\321\202.xml" new file mode 100644 index 000000000..61ec456be --- /dev/null +++ "b/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202_\320\236\321\202\321\207\320\265\321\202.xml" @@ -0,0 +1,38 @@ + + + + + + dae83299-9e4a-47b2-a6c0-3f74c78cfc7d + 5301c87d-2ba9-4dc9-a6eb-0008bef12c5a + + + 0d05e678-048b-4470-816b-805e0f9ccfdf + d78c4d7b-364d-4bca-bc72-ff73dd63fb77 + + + + Тест_Отчет + + + ru + Тест отчет + + + + false + + + + + + + + + false + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202_\320\236\321\202\321\207\320\265\321\202/Ext/ObjectModule.bsl" "b/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202_\320\236\321\202\321\207\320\265\321\202/Ext/ObjectModule.bsl" new file mode 100644 index 000000000..100f42067 --- /dev/null +++ "b/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202_\320\236\321\202\321\207\320\265\321\202/Ext/ObjectModule.bsl" @@ -0,0 +1,23 @@ +Перем КонтекстЯдра; +Перем Ожидаем; + +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + КонтекстЯдра = КонтекстЯдраПараметр; + Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD"); +КонецПроцедуры + +Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт + НаборТестов.НачатьГруппу("Выполнение тестов"); + НаборТестов.Добавить("ПростойТест"); +КонецПроцедуры + +Процедура ПередЗапускомТеста() Экспорт +КонецПроцедуры + +Процедура ПослеЗапускаТеста() Экспорт +КонецПроцедуры + +// { Выполнение тестов +Процедура ПростойТест() Экспорт + Ожидаем.Что(1 = 1).ЭтоИстина(); +КонецПроцедуры diff --git "a/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271\320\236\321\202\321\207\320\265\321\202\320\241\320\232\320\224\320\224\320\273\321\217\320\241\321\200\320\260\320\262\320\275\320\265\320\275\320\270\320\265\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274.xml" "b/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271\320\236\321\202\321\207\320\265\321\202\320\241\320\232\320\224\320\224\320\273\321\217\320\241\321\200\320\260\320\262\320\275\320\265\320\275\320\270\320\265\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274.xml" new file mode 100644 index 000000000..c74730872 --- /dev/null +++ "b/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271\320\236\321\202\321\207\320\265\321\202\320\241\320\232\320\224\320\224\320\273\321\217\320\241\321\200\320\260\320\262\320\275\320\265\320\275\320\270\320\265\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274.xml" @@ -0,0 +1,40 @@ + + + + + + cf752bcf-aee4-4966-bad2-61e68ac3cf36 + 2b25b340-bed7-4039-a643-f9e4e535c9e8 + + + 568969d4-1034-4195-923f-f2be2de44da6 + 2852aef7-46be-42df-8f21-87c21bca08de + + + + ТестовыйОтчетСКДДляСравнениеСЭталоном + + + ru + Тестовый отчет СКД для сравнение с эталоном + + + + false + + + Report.ТестовыйОтчетСКДДляСравнениеСЭталоном.Template.ОсновнаяСхемаКомпоновкиДанных + + + + + + false + + + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271\320\236\321\202\321\207\320\265\321\202\320\241\320\232\320\224\320\224\320\273\321\217\320\241\321\200\320\260\320\262\320\275\320\265\320\275\320\270\320\265\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274/Templates/\320\236\321\201\320\275\320\276\320\262\320\275\320\260\321\217\320\241\321\205\320\265\320\274\320\260\320\232\320\276\320\274\320\277\320\276\320\275\320\276\320\262\320\272\320\270\320\224\320\260\320\275\320\275\321\213\321\205.xml" "b/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271\320\236\321\202\321\207\320\265\321\202\320\241\320\232\320\224\320\224\320\273\321\217\320\241\321\200\320\260\320\262\320\275\320\265\320\275\320\270\320\265\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274/Templates/\320\236\321\201\320\275\320\276\320\262\320\275\320\260\321\217\320\241\321\205\320\265\320\274\320\260\320\232\320\276\320\274\320\277\320\276\320\275\320\276\320\262\320\272\320\270\320\224\320\260\320\275\320\275\321\213\321\205.xml" new file mode 100644 index 000000000..6290607c0 --- /dev/null +++ "b/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271\320\236\321\202\321\207\320\265\321\202\320\241\320\232\320\224\320\224\320\273\321\217\320\241\321\200\320\260\320\262\320\275\320\265\320\275\320\270\320\265\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274/Templates/\320\236\321\201\320\275\320\276\320\262\320\275\320\260\321\217\320\241\321\205\320\265\320\274\320\260\320\232\320\276\320\274\320\277\320\276\320\275\320\276\320\262\320\272\320\270\320\224\320\260\320\275\320\275\321\213\321\205.xml" @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271\320\236\321\202\321\207\320\265\321\202\320\241\320\232\320\224\320\224\320\273\321\217\320\241\321\200\320\260\320\262\320\275\320\265\320\275\320\270\320\265\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274/Templates/\320\236\321\201\320\275\320\276\320\262\320\275\320\260\321\217\320\241\321\205\320\265\320\274\320\260\320\232\320\276\320\274\320\277\320\276\320\275\320\276\320\262\320\272\320\270\320\224\320\260\320\275\320\275\321\213\321\205/Ext/Template.xml" "b/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271\320\236\321\202\321\207\320\265\321\202\320\241\320\232\320\224\320\224\320\273\321\217\320\241\321\200\320\260\320\262\320\275\320\265\320\275\320\270\320\265\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274/Templates/\320\236\321\201\320\275\320\276\320\262\320\275\320\260\321\217\320\241\321\205\320\265\320\274\320\260\320\232\320\276\320\274\320\277\320\276\320\275\320\276\320\262\320\272\320\270\320\224\320\260\320\275\320\275\321\213\321\205/Ext/Template.xml" new file mode 100644 index 000000000..43996700c --- /dev/null +++ "b/lib/CF/83xddNoSync/Reports/\320\242\320\265\321\201\321\202\320\276\320\262\321\213\320\271\320\236\321\202\321\207\320\265\321\202\320\241\320\232\320\224\320\224\320\273\321\217\320\241\321\200\320\260\320\262\320\275\320\265\320\275\320\270\320\265\320\241\320\255\321\202\320\260\320\273\320\276\320\275\320\276\320\274/Templates/\320\236\321\201\320\275\320\276\320\262\320\275\320\260\321\217\320\241\321\205\320\265\320\274\320\260\320\232\320\276\320\274\320\277\320\276\320\275\320\276\320\262\320\272\320\270\320\224\320\260\320\275\320\275\321\213\321\205/Ext/Template.xml" @@ -0,0 +1,82 @@ + + + + ИсточникДанных1 + Local + + + НаборДанных1 + + ПростойСправочник + ПростойСправочник + + + ПростойСправочник2 + ПростойСправочник2 + + + РесурсЧисло + РесурсЧисло + + ИсточникДанных1 + ВЫБРАТЬ + РегистрСведений1.ПростойСправочник, + РегистрСведений1.ПростойСправочник2, + РегистрСведений1.РесурсЧисло +ИЗ + РегистрСведений.РегистрСведений1 КАК РегистрСведений1 +ГДЕ + РегистрСведений1.РесурсБулево + И (РегистрСведений1.РесурсЧисло = 5457 + ИЛИ РегистрСведений1.РесурсЧисло = 875) + + + РесурсЧисло + Сумма(РесурсЧисло) + + + Основной + Основной + + + + РесурсЧисло + + + + + + ПростойСправочник + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + ПростойСправочник2 + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Roles/\320\237\320\276\320\273\320\275\321\213\320\265\320\237\321\200\320\260\320\262\320\260.xml" "b/lib/CF/83xddNoSync/Roles/\320\237\320\276\320\273\320\275\321\213\320\265\320\237\321\200\320\260\320\262\320\260.xml" new file mode 100644 index 000000000..6397874f1 --- /dev/null +++ "b/lib/CF/83xddNoSync/Roles/\320\237\320\276\320\273\320\275\321\213\320\265\320\237\321\200\320\260\320\262\320\260.xml" @@ -0,0 +1,15 @@ + + + + + ПолныеПрава + + + ru + Полные права + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Roles/\320\237\320\276\320\273\320\275\321\213\320\265\320\237\321\200\320\260\320\262\320\260/Ext/Rights.xml" "b/lib/CF/83xddNoSync/Roles/\320\237\320\276\320\273\320\275\321\213\320\265\320\237\321\200\320\260\320\262\320\260/Ext/Rights.xml" new file mode 100644 index 000000000..3e4330762 --- /dev/null +++ "b/lib/CF/83xddNoSync/Roles/\320\237\320\276\320\273\320\275\321\213\320\265\320\237\321\200\320\260\320\262\320\260/Ext/Rights.xml" @@ -0,0 +1,6 @@ + + + true + true + false + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Roles/\320\237\321\200\320\260\320\262\320\260\320\235\320\265\320\276\320\261\321\205\320\276\320\264\320\270\320\274\321\213\320\265\320\224\320\273\321\217\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217.xml" "b/lib/CF/83xddNoSync/Roles/\320\237\321\200\320\260\320\262\320\260\320\235\320\265\320\276\320\261\321\205\320\276\320\264\320\270\320\274\321\213\320\265\320\224\320\273\321\217\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217.xml" new file mode 100644 index 000000000..1933c82bc --- /dev/null +++ "b/lib/CF/83xddNoSync/Roles/\320\237\321\200\320\260\320\262\320\260\320\235\320\265\320\276\320\261\321\205\320\276\320\264\320\270\320\274\321\213\320\265\320\224\320\273\321\217\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217.xml" @@ -0,0 +1,15 @@ + + + + + ПраваНеобходимыеДляТестирования + + + ru + Права необходимые для тестирования + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Roles/\320\237\321\200\320\260\320\262\320\260\320\235\320\265\320\276\320\261\321\205\320\276\320\264\320\270\320\274\321\213\320\265\320\224\320\273\321\217\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217/Ext/Rights.xml" "b/lib/CF/83xddNoSync/Roles/\320\237\321\200\320\260\320\262\320\260\320\235\320\265\320\276\320\261\321\205\320\276\320\264\320\270\320\274\321\213\320\265\320\224\320\273\321\217\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217/Ext/Rights.xml" new file mode 100644 index 000000000..3e2a83ab4 --- /dev/null +++ "b/lib/CF/83xddNoSync/Roles/\320\237\321\200\320\260\320\262\320\260\320\235\320\265\320\276\320\261\321\205\320\276\320\264\320\270\320\274\321\213\320\265\320\224\320\273\321\217\320\242\320\265\321\201\321\202\320\270\321\200\320\276\320\262\320\260\320\275\320\270\321\217/Ext/Rights.xml" @@ -0,0 +1,820 @@ + + + false + true + false + + Document.Документ1.Attribute.ПростойСправочник + + View + false + + + Edit + false + + + + InformationRegister.РегистрСведений1.Resource.РесурсБулево + + View + false + + + Edit + false + + + + Document.Документ1.TabularSection.Состав.Attribute.РеквизитБулево + + View + false + + + Edit + false + + + + Document.Документ1.TabularSection.Состав + + View + false + + + Edit + false + + + + InformationRegister.РегистрСведений1.Resource.РесурсЧисло + + View + false + + + Edit + false + + + + Document.Документ1.TabularSection.Состав.Attribute.ПростойСправочник2 + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.TabularSection.Состав.Attribute.РеквизитБулево + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.TabularSection.Состав.Attribute.ПростойСправочник2 + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardAttribute.Order + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardTabularSection.ExtDimensionTypes + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardTabularSection.ExtDimensionTypes.StandardAttribute.TurnoversOnly + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardTabularSection.ExtDimensionTypes.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardTabularSection.ExtDimensionTypes.StandardAttribute.ExtDimensionType + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardTabularSection.ExtDimensionTypes.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardAttribute.OffBalance + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardAttribute.Type + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardAttribute.Description + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardAttribute.Code + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardAttribute.Parent + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + ChartOfAccounts.ПланСчетов1.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник.Attribute.РеквизитБулево + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник2.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник2.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник2.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник2.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник2.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник2.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник2.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник2.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ИерархическийСправочник.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.ИерархическийСправочник.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.ИерархическийСправочник.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.ИерархическийСправочник.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.ИерархическийСправочник.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.ИерархическийСправочник.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.ИерархическийСправочник.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.ИерархическийСправочник.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.Attribute.РеквизитСоставногоТипа + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.TabularSection.Состав.Attribute.ПростойСправочник + + View + false + + + Edit + false + + + + InformationRegister.РегистрСведений1.Dimension.ПростойСправочник + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник.Attribute.РеквизитПеречисление + + View + false + + + Edit + false + + + + Document.Документ1.TabularSection.Состав.Attribute.РеквизитЧисло + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник2.Attribute.Счет + + View + false + + + Edit + false + + + + Catalog.ИерархическийСправочник.Attribute.ПростойСправочник + + View + false + + + Edit + false + + + + Catalog.СправочникСТабЧастью.TabularSection.Состав + + View + false + + + Edit + false + + + + InformationRegister.РегистрСведений1.StandardAttribute.Active + + View + false + + + Edit + false + + + + InformationRegister.РегистрСведений1.StandardAttribute.LineNumber + + View + false + + + Edit + false + + + + InformationRegister.РегистрСведений1.StandardAttribute.Recorder + + View + false + + + Edit + false + + + + InformationRegister.РегистрСведений1.StandardAttribute.Period + + View + false + + + Edit + false + + + + Catalog.ПростойСправочник2.Attribute.РеквизитБулево + + View + false + + + Edit + false + + + + InformationRegister.РегистрСведений1.Dimension.ПростойСправочник2 + + View + false + + + Edit + false + + + + Document.Документ1.StandardAttribute.Posted + + View + false + + + Edit + false + + + + Document.Документ1.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Document.Документ1.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Document.Документ1.StandardAttribute.Date + + View + false + + + Edit + false + + + + Document.Документ1.StandardAttribute.Number + + View + false + + + Edit + false + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Roles/\320\240\320\276\320\273\321\2141.xml" "b/lib/CF/83xddNoSync/Roles/\320\240\320\276\320\273\321\2141.xml" new file mode 100644 index 000000000..8965a2cca --- /dev/null +++ "b/lib/CF/83xddNoSync/Roles/\320\240\320\276\320\273\321\2141.xml" @@ -0,0 +1,10 @@ + + + + + Роль1 + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Roles/\320\240\320\276\320\273\321\2141/Ext/Rights.xml" "b/lib/CF/83xddNoSync/Roles/\320\240\320\276\320\273\321\2141/Ext/Rights.xml" new file mode 100644 index 000000000..55145cfda --- /dev/null +++ "b/lib/CF/83xddNoSync/Roles/\320\240\320\276\320\273\321\2141/Ext/Rights.xml" @@ -0,0 +1,389 @@ + + + false + true + false + + Catalog.ПодчиненныйСправочник + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveDelete + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.ПростойСправочник + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveDelete + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Document.Документ2 + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + Posting + true + + + UndoPosting + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveDelete + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InteractivePosting + true + + + InteractivePostingRegular + true + + + InteractiveUndoPosting + true + + + InteractiveChangeOfPosted + true + + + InputByString + true + + + + DataProcessor.xddGuidShow + + Use + true + + + View + true + + + + Catalog.ПростойСправочник2 + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + Edit + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.ИерархическийСправочник + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveDelete + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.СправочникСТабЧастью + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveDelete + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + AccumulationRegister.РегистрНакопления2 + + Read + true + + + Update + true + + + View + true + + + + Document.Документ1 + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + Posting + true + + + UndoPosting + true + + + View + true + + + Edit + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + \ No newline at end of file diff --git a/lib/CF/83xddNoSync/Subsystems/xUnitFor1C.xml b/lib/CF/83xddNoSync/Subsystems/xUnitFor1C.xml new file mode 100644 index 000000000..44c39b412 --- /dev/null +++ b/lib/CF/83xddNoSync/Subsystems/xUnitFor1C.xml @@ -0,0 +1,27 @@ + + + + + xUnitFor1C + + + ru + xUnitFor1C + + + + true + true + + + + DataProcessor.xddTestRunner + + + + Plugins + Utils + Tests + + + \ No newline at end of file diff --git a/lib/CF/83xddNoSync/Subsystems/xUnitFor1C/Subsystems/Plugins.xml b/lib/CF/83xddNoSync/Subsystems/xUnitFor1C/Subsystems/Plugins.xml new file mode 100644 index 000000000..4b1df3a17 --- /dev/null +++ b/lib/CF/83xddNoSync/Subsystems/xUnitFor1C/Subsystems/Plugins.xml @@ -0,0 +1,37 @@ + + + + + Plugins + + + ru + Плагины + + + + true + true + + + + DataProcessor.БазовыеУтверждения + DataProcessor.УтвержденияПроверкаТаблиц + DataProcessor.УтвержденияBDD + DataProcessor.СтроковыеУтилиты + DataProcessor.СериализаторMXL + DataProcessor.ПостроительДереваТестов + DataProcessor.ПарсерКоманднойСтроки + DataProcessor.КомандныйФайл + DataProcessor.ЗапросыИзБД + DataProcessor.ЗагрузчикФайла + DataProcessor.ЗагрузчикКаталога + DataProcessor.ЗагрузчикИзПодсистемКонфигурации + DataProcessor.ГенераторОтчетаMXL + DataProcessor.ГенераторОтчетаJUnitXML + DataProcessor.ВременныеФайлы + + + + + \ No newline at end of file diff --git a/lib/CF/83xddNoSync/Subsystems/xUnitFor1C/Subsystems/Tests.xml b/lib/CF/83xddNoSync/Subsystems/xUnitFor1C/Subsystems/Tests.xml new file mode 100644 index 000000000..b0bfb6561 --- /dev/null +++ b/lib/CF/83xddNoSync/Subsystems/xUnitFor1C/Subsystems/Tests.xml @@ -0,0 +1,24 @@ + + + + + Tests + + + ru + Тесты + + + + true + true + + + + 6d090e03-2878-4b45-b423-182bc51aaf5b + 5ab91208-983b-4b89-afe4-19c2d385ab5d + + + + + \ No newline at end of file diff --git a/lib/CF/83xddNoSync/Subsystems/xUnitFor1C/Subsystems/Utils.xml b/lib/CF/83xddNoSync/Subsystems/xUnitFor1C/Subsystems/Utils.xml new file mode 100644 index 000000000..b009a4253 --- /dev/null +++ b/lib/CF/83xddNoSync/Subsystems/xUnitFor1C/Subsystems/Utils.xml @@ -0,0 +1,25 @@ + + + + + Utils + + + ru + Утилиты + + + + true + true + + + + DataProcessor.xddGuidShow + DataProcessor.xddTestsConvertIntoRebornFormat + DataProcessor.ПреобразованиеЖурналаДействийПользователя + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Subsystems/\320\237\320\260\320\264\320\260\321\216\321\211\320\260\321\217\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217.xml" "b/lib/CF/83xddNoSync/Subsystems/\320\237\320\260\320\264\320\260\321\216\321\211\320\260\321\217\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217.xml" new file mode 100644 index 000000000..bfa375445 --- /dev/null +++ "b/lib/CF/83xddNoSync/Subsystems/\320\237\320\260\320\264\320\260\321\216\321\211\320\260\321\217\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217.xml" @@ -0,0 +1,23 @@ + + + + + ПадающаяТестовая + + + ru + Падающая тестовая + + + + true + false + + + + DataProcessor.ТестПадающий_Обработка + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Subsystems/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217.xml" "b/lib/CF/83xddNoSync/Subsystems/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217.xml" new file mode 100644 index 000000000..3d47ff4bb --- /dev/null +++ "b/lib/CF/83xddNoSync/Subsystems/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217.xml" @@ -0,0 +1,32 @@ + + + + + Тестовая + + + ru + Тестовая + + + + true + true + + + + DataProcessor.Тест_Обработка + DataProcessor.xddGuidShow + DataProcessor.Тест_ЗагрузчикИзПодсистем_НовыйAPIОбъявленияТестов + DataProcessor.xddTestRunner + Report.Тест_Отчет + 2754acfc-5916-4952-9fea-dbbc69db9399 + Report.Отчет2 + + + + Подсистема1 + ПустаяПодсистема + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Subsystems/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217/Subsystems/\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\2601.xml" "b/lib/CF/83xddNoSync/Subsystems/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217/Subsystems/\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\2601.xml" new file mode 100644 index 000000000..000b2b519 --- /dev/null +++ "b/lib/CF/83xddNoSync/Subsystems/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217/Subsystems/\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\2601.xml" @@ -0,0 +1,21 @@ + + + + + Подсистема1 + + + true + true + + + + DataProcessor.xddGuidShow + DataProcessor.Тест_Обработка + Role.Роль1 + Report.Тест_Отчет + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Subsystems/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217/Subsystems/\320\237\321\203\321\201\321\202\320\260\321\217\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\260.xml" "b/lib/CF/83xddNoSync/Subsystems/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217/Subsystems/\320\237\321\203\321\201\321\202\320\260\321\217\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\260.xml" new file mode 100644 index 000000000..38392516f --- /dev/null +++ "b/lib/CF/83xddNoSync/Subsystems/\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217/Subsystems/\320\237\321\203\321\201\321\202\320\260\321\217\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\320\260.xml" @@ -0,0 +1,21 @@ + + + + + ПустаяПодсистема + + + ru + Пустая подсистема + + + + true + false + + + + + + + \ No newline at end of file diff --git "a/lib/CF/83xddNoSync/Tasks/\320\227\320\260\320\264\320\260\321\207\320\2601.xml" "b/lib/CF/83xddNoSync/Tasks/\320\227\320\260\320\264\320\260\321\207\320\2601.xml" new file mode 100644 index 000000000..cf7371cff --- /dev/null +++ "b/lib/CF/83xddNoSync/Tasks/\320\227\320\260\320\264\320\260\321\207\320\2601.xml" @@ -0,0 +1,274 @@ + + + + + + 3da3d967-e381-4260-93bd-d46904bd1845 + fa494cb1-9b3f-4971-950e-8f16b9cfc484 + + + 1126c2f4-ac83-420c-85cc-9c1cb7dfbbb5 + e201eec8-1d56-42d4-93a7-0e227b0e57bf + + + a237b258-055a-46fa-9adb-ec840d7ab8a4 + 9c6cd382-f7f9-43f4-9803-3e2af677bf04 + + + 29c161c6-3030-4147-8929-1f59a7d11c9c + 0475ec8b-66c3-4b97-b641-a0661e275952 + + + d17feeea-8d8c-44bb-ad86-284cab039fd0 + aefae341-75b0-4233-bc2a-93f56c74b18f + + + + Задача1 + + + false + String + 9 + Variable + true + true + DontUse + 25 + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + ShowError + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + BusinessProcess.БизнесПроцесс1.RoutePoint + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + BusinessProcess.БизнесПроцесс1.EmptyRef + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + false + + + + Use + + + + + + + + AsDescription + InDialog + + Task.Задача1.StandardAttribute.Description + Task.Задача1.StandardAttribute.Number + + Begin + DontUse + Directly + DontUse + + + + + + + Auto + false + + Managed + Use + + + + + + + + + \ No newline at end of file diff --git "a/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 9be859d9f..176a23484 100644 --- "a/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260JUnitXML/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -43,6 +43,43 @@ КонецПроцедуры // } Report generator interface +&НаКлиенте +Процедура НачатьЭкспорт(ОбработкаОповещения, Отчет, ПолныйПутьФайла) Экспорт + + Если ТребуетсяАсинхроннаяЗаписьДокумента() Тогда + Отчет.НачатьЗапись(ОбработкаОповещения, ПолныйПутьФайла); + Иначе + Отчет.Записать(ПолныйПутьФайла); + ВыполнитьОбработкуОповещения(ОбработкаОповещения); + КонецЕсли; + +КонецПроцедуры + +// До 8.3.9 не контролируется метод Записать, а в 8.3.6 вообще нет метода НачатьЗапись +// +&НаКлиенте +Функция ТребуетсяАсинхроннаяЗаписьДокумента() + + СИ = Новый СистемнаяИнформация; + Версия = Сред(СИ.ВерсияПриложения,3); // сразу уберем 8. + Поз = Найти(Версия, "."); + Минор = Число(Лев(Версия, Поз-1)); + Если Минор > 3 Тогда + Возврат Истина; + КонецЕсли; + + Версия = Сред(Версия, Поз+1); + Релиз = Число(Лев(Версия, Найти(Версия, ".")-1)); + + Если Релиз > 8 Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + + // { Helpers &НаСервере Функция ЭтотОбъектНаСервере() diff --git "a/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 60b9b797d..10d6820df 100644 --- "a/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/plugins/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\236\321\202\321\207\320\265\321\202\320\260MXL/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -47,6 +47,12 @@ Отчет.Записать(ПолныйПутьФайла, ПолучитьТипФайлаПоРасширению(ФайлОтчета.Расширение)); КонецЕсли; КонецПроцедуры + +&НаКлиенте +Процедура НачатьЭкспорт(ОбработкаОповещения, Отчет, ПолныйПутьФайла) Экспорт + ВызватьИсключение "Метод не реализован"; +КонецПроцедуры + // } Report generator interface // { Helpers diff --git "a/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 5cc214832..02b56fda7 100644 --- "a/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\232\320\260\321\202\320\260\320\273\320\276\320\263\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -9,6 +9,11 @@ Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов) Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов); КонецФункции + +&НаКлиенте +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт +КонецПроцедуры + // } Plugin interface // { Loader interface @@ -35,6 +40,112 @@ Возврат ДеревоТестов; КонецФункции +#Область АсинхронныйAPI + +&НаКлиенте +Функция НачатьЗагрузку(ОбработчикОповещения, КонтекстЯдра, Путь) Экспорт + + КаталогДляЗагрузки = Новый Файл(Путь); + НачатьЗагрузкуКаталога(ОбработчикОповещения, КаталогДляЗагрузки, КонтекстЯдра); + +КонецФункции + +&НаКлиенте +Процедура НачатьЗагрузкуКаталога(Знач ОбработчикОповещения, Знач КаталогДляЗагрузки, Знач КонтекстЯдра) Экспорт + + КонтейнерКаталога = КонтекстЯдра.Плагин("ПостроительДереваТестов").СоздатьКонтейнер(КаталогДляЗагрузки.Имя); + + ДопПараметры = Новый Структура; + ДопПараметры.Вставить("ОбработкаЗавершения", ОбработчикОповещения); + ДопПараметры.Вставить("КонтейнерКаталога", КонтейнерКаталога); + ДопПараметры.Вставить("КонтекстЯдра", КонтекстЯдра); + + Обработчик = Новый ОписаниеОповещения("ОбработкаПоискаВКорнеКаталога", ЭтаФорма, ДопПараметры); + НачатьПоискФайлов(Обработчик, КаталогДляЗагрузки.ПолноеИмя, "*", Истина); + +КонецПроцедуры + + +&НаКлиенте +Процедура ОбработкаПоискаВКорнеКаталога(Знач НайденныеФайлы, Знач ДополнительныеПараметры) Экспорт + + Итератор = Новый Структура; + Итератор.Вставить("Коллекция", НайденныеФайлы); + Итератор.Вставить("Индекс", -1); + + Контекст = Новый Структура("Итератор, ДополнительныеПараметры", Итератор, ДополнительныеПараметры); + Контекст.Вставить("Результат", ДополнительныеПараметры.КонтейнерКаталога); + + ОбработатьОчереднойФайлНачало(Контекст); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗавершитьОбработкуНайденногоФайла(Знач ЭтоКаталог, Знач ВходящийКонтекст) Экспорт + + ОбработкаПрерыванияПользователя(); + ДополнительныеПараметры = ВходящийКонтекст.ДополнительныеПараметры; + Если ЭтоКаталог Тогда + + Сообщить( НСтр("ru = 'Загрузка вложенных каталогов в асинхронном режиме не поддерживается. Файлы будут загружены без учета каталогов'") ); + ОбработатьОчереднойФайлНачало(ВходящийКонтекст); + + ИначеЕсли НРег(ДополнительныеПараметры.Файл.Расширение) = ".epf" + ИЛИ НРег(ДополнительныеПараметры.Файл.Расширение) = ".erf" Тогда + + Обработчик = Новый ОписаниеОповещения("ОбработчикЗавершенияЗагрузкиФайла", ЭтаФорма, ВходящийКонтекст); + КонтекстЯдра = ДополнительныеПараметры.КонтекстЯдра; + ЗагрузчикФайла = КонтекстЯдра.Плагин("ЗагрузчикФайла"); + ЗагрузчикФайла.НачатьЗагрузку(Обработчик, КонтекстЯдра, ДополнительныеПараметры.Файл.ПолноеИмя); + + Иначе + ОбработатьОчереднойФайлНачало(ВходящийКонтекст); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьОчереднойФайлНачало(Знач ВходящийКонтекст) Экспорт + + Итератор = ВходящийКонтекст.Итератор; + ДополнительныеПараметры = ВходящийКонтекст.ДополнительныеПараметры; + + Итератор.Индекс = Итератор.Индекс+1; + + Если Итератор.Индекс < Итератор.Коллекция.Количество() Тогда + + ТекущийФайл = Итератор.Коллекция[Итератор.Индекс]; + ДополнительныеПараметры.Вставить("Файл", ТекущийФайл); + Обработчик = Новый ОписаниеОповещения("ЗавершитьОбработкуНайденногоФайла", ЭтаФорма, ВходящийКонтекст); + ТекущийФайл.НачатьПроверкуЭтоКаталог(Обработчик); + Иначе + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработкаЗавершения, ВходящийКонтекст.Результат); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикЗавершенияЗагрузкиКаталога(Знач ДеревоТестов, Знач ВходящийКонтекст) Экспорт + + ОбработатьОчереднойФайлНачало(ВходящийКонтекст); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикЗавершенияЗагрузкиФайла(Знач ДеревоТестовФайла, Знач ВходящийКонтекст) Экспорт + + Перем Результат; + Если ДеревоТестовФайла.Строки.Количество() > 0 Тогда + Результат = ДеревоТестовФайла.Строки[0]; + ВходящийКонтекст.ДополнительныеПараметры.КонтейнерКаталога.Строки.Добавить(Результат); + КонецЕсли; + + ОбработатьОчереднойФайлНачало(ВходящийКонтекст); + +КонецПроцедуры + +#КонецОбласти + &НаКлиенте Функция ПолучитьКонтекстПоПути(КонтекстЯдра, Путь) Экспорт ЗагрузчикФайла = КонтекстЯдра.Плагин("ЗагрузчикФайла"); @@ -108,7 +219,17 @@ КонецЕсли; Описание = ОписаниеПлагина(КонтекстЯдра.Объект.ТипыПлагинов); - КонтекстЯдра.ЗагрузитьТесты(Описание.Идентификатор, Результат); + Если КонтекстЯдра.ЕстьПоддержкаАсинхронныхВызовов Тогда + Обр = Новый ОписаниеОповещения("ОкончаниеЗагрузкиТестов", ЭтаФорма); + КонтекстЯдра.НачатьЗагрузкуТестов(Обр, Описание.Идентификатор, Результат); + Иначе + КонтекстЯдра.ЗагрузитьТесты(Описание.Идентификатор, Результат); + КонецЕсли; КонецПроцедуры + +&НаКлиенте +Процедура ОкончаниеЗагрузкиТестов(Результат, Параметры) Экспорт +КонецПроцедуры + // } Вспомогательные методы \ No newline at end of file diff --git "a/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index bf199ffa9..2f3a995bd 100644 --- "a/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/plugins/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/\320\227\320\260\320\263\321\200\321\203\320\267\321\207\320\270\320\272\320\244\320\260\320\271\320\273\320\260/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -8,6 +8,9 @@ &НаКлиенте Перем ТекущаяГруппа; +&НаКлиенте +Перем ЕстьПоддержкаАсинхронныхВызовов; + // { Plugin interface &НаКлиенте Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт @@ -16,6 +19,7 @@ &НаКлиенте Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + ЕстьПоддержкаАсинхронныхВызовов = КонтекстЯдраПараметр.ЕстьПоддержкаАсинхронныхВызовов; КонецПроцедуры &НаСервере @@ -40,6 +44,66 @@ КонецФункции +#Область АсинхронныйAPI + +&НаКлиенте +Процедура НачатьЗагрузку(Знач ОбработчикОповещения, Знач КонтекстЯдра, Знач Путь) Экспорт + Объект.ИспользоватьПрямыеПутиФайлов = КонтекстЯдра.Объект.ИспользоватьПрямыеПутиФайлов; + + ПолноеИмяБраузераТестов = КонтекстЯдра.Объект.ПолноеИмяБраузераТестов; + + ПостроительДереваТестов = КонтекстЯдра.Плагин("ПостроительДереваТестов"); + ДеревоТестов = Неопределено; + + // TODO: Поддержать цикл по нескольким файлам в Пути + ФайлОбработки = Новый Файл(СтрПолучитьСтроку(Путь, 1)); + + Если ДеревоТестов = Неопределено Тогда + ДеревоТестов = ПостроительДереваТестов.СоздатьКонтейнер(ФайлОбработки.Путь); + КонецЕсли; + + ПараметрыОповещения = Новый Структура; + ПараметрыОповещения.Вставить("ФайлОбработки", ФайлОбработки); + ПараметрыОповещения.Вставить("ПостроительДереваТестов", ПостроительДереваТестов); + ПараметрыОповещения.Вставить("ДеревоТестов", ДеревоТестов); + ПараметрыОповещения.Вставить("ОбработчикОповещения", ОбработчикОповещения); + ПараметрыОповещения.Вставить("КонтекстЯдра", КонтекстЯдра); + + Если Объект.ИспользоватьПрямыеПутиФайлов Тогда + ЗагрузкаВнешнейОбработкиЗавершение(, ПараметрыОповещения); + Иначе + Обработчик = Новый ОписаниеОповещения("ЗагрузкаВнешнейОбработкиЗавершение", ЭтаФорма, ПараметрыОповещения); + КонтекстЯдра.НачатьПодключениеВнешнейбработки(Обработчик, ФайлОбработки); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузкаВнешнейОбработкиЗавершение(Знач Результат, Знач ДополнительныеПараметры) Экспорт + + ФайлОбработки = ДополнительныеПараметры.ФайлОбработки; + ПостроительДереваТестов = ДополнительныеПараметры.ПостроительДереваТестов; + ДеревоТестов = ДополнительныеПараметры.ДеревоТестов; + КонтекстЯдра = ДополнительныеПараметры.КонтекстЯдра; + + ИмяОбработки = ""; + + КонтейнерССервернымиТестамиОбработки = ЗагрузитьФайлНаСервере(ФайлОбработки.ПолноеИмя, ИмяОбработки, КонтекстЯдра.Объект); + КонтейнерСКлиентскимиТестамиОбработки = ЗагрузитьФайлНаКлиенте(ПостроительДереваТестов, ФайлОбработки, КонтекстЯдра, ИмяОбработки); + Если КонтейнерСКлиентскимиТестамиОбработки.Строки.Количество() > 0 Тогда + КонтейнерССервернымиТестамиОбработки.Строки.Добавить(КонтейнерСКлиентскимиТестамиОбработки); + КонецЕсли; + Если КонтейнерССервернымиТестамиОбработки.Строки.Количество() > 0 Тогда + ДеревоТестов.Строки.Добавить(КонтейнерССервернымиТестамиОбработки); + КонецЕсли; + + ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОбработчикОповещения, ДеревоТестов); + +КонецПроцедуры + + +#КонецОбласти + &НаКлиенте Функция Загрузить(КонтекстЯдра, Путь) Экспорт Объект.ИспользоватьПрямыеПутиФайлов = КонтекстЯдра.Объект.ИспользоватьПрямыеПутиФайлов; @@ -124,6 +188,11 @@ &НаКлиенте Процедура ПроверитьКорректностьФайла(Файл) + + Если ЕстьПоддержкаАсинхронныхВызовов Тогда + Возврат; + КонецЕсли; + Если Не Файл.Существует() Тогда ВызватьИсключение "Переданный файл не существует файл <" + Файл.ПолноеИмя + ">"; КонецЕсли; @@ -487,10 +556,19 @@ Текст = Лев(Текст, СтрДлина(Текст) - 1); Описание = ОписаниеПлагина(КонтекстЯдра.Объект.ТипыПлагинов); - КонтекстЯдра.ЗагрузитьТесты(Описание.Идентификатор, Текст); + Если ЕстьПоддержкаАсинхронныхВызовов Тогда + Обр = Новый ОписаниеОповещения("ОкончаниеЗагрузкиТестов", ЭтаФорма); + КонтекстЯдра.НачатьЗагрузкуТестов(Обр, Описание.Идентификатор, Результат); + Иначе + КонтекстЯдра.ЗагрузитьТесты(Описание.Идентификатор, Текст); + КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ОкончаниеЗагрузкиТестов(Результат, Параметры) Экспорт +КонецПроцедуры + &НаКлиенте Процедура ПодключитьВнешнююОбработку(КонтекстЯдра, Знач ФайлОбработки) Если Не Объект.ИспользоватьПрямыеПутиФайлов Тогда diff --git "a/plugins/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index f07a42acf..e84ba041e 100644 --- "a/plugins/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/plugins/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270/\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -208,9 +208,24 @@ Функция ПрочитатьНастройкиИзФайлаJSon(Знач ПутьФайлаНастроек) Результат = Новый Структура(); ФайлНастроек = Новый Файл(ПутьФайлаНастроек); - Если ФайлНастроек.Существует() Тогда + ФайлНастроекСуществует = Не ПустаяСтрока(ПутьФайлаНастроек) И + (КонтекстЯдра.ЕстьПоддержкаАсинхронныхВызовов Или ФайлНастроек.Существует()); + + Если ФайлНастроекСуществует Тогда ЧтениеJSON = Новый ЧтениеJSON; - ЧтениеJSON.ОткрытьФайл(ПутьФайлаНастроек); + Попытка + ЧтениеJSON.ОткрытьФайл(ПутьФайлаНастроек); + Исключение + ИнфоОшибки = ИнформацияОбОшибке(); + Если Найти(ИнфоОшибки.Описание, "Неправильный путь к файлу") = 0 Тогда // TODO проверить и исправить на английском интерфейсе + + СообщениеОшибки = СтрШаблон("Не удалось прочитать файл json-настроек %1 + | + |Ошибка: %2" + КраткоеПредставлениеОшибки(ИнфоОшибки), ПутьФайлаНастроек); + + ВызватьИсключение СообщениеОшибки; + КонецЕсли; + КонецПопытки; Соответствие = ПрочитатьJSON(ЧтениеJSON, Истина); Результат = ПреобразоватьСоответствиеВСтруктуру(Соответствие, КоллекцияИсключаемыхКлючей); diff --git "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 49ace8905..5e979efab 100644 --- "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/\321\202\320\265\321\201\321\202\321\213_\320\232\320\276\320\274\320\260\320\275\320\264\320\275\321\213\320\271\320\230\320\275\321\202\320\265\321\200\321\204\320\265\320\271\321\201/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -15,14 +15,23 @@ Инициализация(ПолучитьФорму("ВнешняяОбработка.xddTestRunner.Форма")); - ТестКлиент = КонтекстЯдра.Плагин("ТестКлиенты").ТестКлиентПоУмолчанию(); + ТестКлиент = Неопределено; + Попытка + ТестКлиент = КонтекстЯдра.Плагин("ТестКлиенты").ТестКлиентПоУмолчанию(); + Исключение + ИнфоОшибки = ИнформацияОбОшибке();// ОписаниеОшибки() + Сообщить(ИнфоОшибки.Описание); + Возврат; + КонецПопытки; - Для Каждого КлючЗначение Из ОписаниеДобавляемыхТестов(ТестКлиент) Цикл - Описание = КлючЗначение.Значение; - НоваяСтрока = КнопкиКомандногоИнтерфейса.Добавить(); - НоваяСтрока.ПредставлениеТеста = Описание.ПредставлениеТеста; - НоваяСтрока.НавигационнаяСсылка = Описание.НавигационнаяСсылка; - КонецЦикла; + Если ТестКлиент <> Неопределено Тогда + Для Каждого КлючЗначение Из ОписаниеДобавляемыхТестов(ТестКлиент) Цикл + Описание = КлючЗначение.Значение; + НоваяСтрока = КнопкиКомандногоИнтерфейса.Добавить(); + НоваяСтрока.ПредставлениеТеста = Описание.ПредставлениеТеста; + НоваяСтрока.НавигационнаяСсылка = Описание.НавигационнаяСсылка; + КонецЦикла; + КонецЕсли; КонецПроцедуры @@ -36,15 +45,24 @@ Процедура ЗаполнитьНаборТестов(НаборТестов, КонтекстЯдраПараметр) Экспорт КонтекстЯдра = КонтекстЯдраПараметр; - ТестКлиент = КонтекстЯдра.Плагин("ТестКлиенты").ТестКлиентПоУмолчанию(); + ТестКлиент = Неопределено; + Попытка + ТестКлиент = КонтекстЯдра.Плагин("ТестКлиенты").ТестКлиентПоУмолчанию(); + Исключение + ИнфоОшибки = ИнформацияОбОшибке();// ОписаниеОшибки() + Сообщить(ИнфоОшибки.Описание); + Возврат; + КонецПопытки; - Для Каждого КлючЗначение Из ОписаниеДобавляемыхТестов(ТестКлиент) Цикл - Описание = КлючЗначение.Значение; - НаборТестов.Добавить( - Описание.ИмяТеста, - НаборТестов.ПараметрыТеста(Описание.НавигационнаяСсылка), - Описание.ПредставлениеТеста); - КонецЦикла; + Если ТестКлиент <> Неопределено Тогда + Для Каждого КлючЗначение Из ОписаниеДобавляемыхТестов(ТестКлиент) Цикл + Описание = КлючЗначение.Значение; + НаборТестов.Добавить( + Описание.ИмяТеста, + НаборТестов.ПараметрыТеста(Описание.НавигационнаяСсылка), + Описание.ПредставлениеТеста); + КонецЦикла; + КонецЕсли; КонецПроцедуры diff --git a/tools/JSON/vrunner.json b/tools/JSON/vrunner.json index c83727926..8e6708d75 100644 --- a/tools/JSON/vrunner.json +++ b/tools/JSON/vrunner.json @@ -5,6 +5,7 @@ "--db-user": "", "--db-pwd": "", "--workspace": ".", + "--v8version":"8.3.10", "--additional": "/DisplayAllFunctions /Lru /iTaxi ", // "--additional": "/DisplayAllFunctions /Lru /iTaxi /Debug /DebuggerURL tcp://localhost:1560", "--ordinaryapp": "-1" @@ -14,6 +15,9 @@ "--pathvanessa": "./bddRunner.epf" }, "xunit": { + "--ibconnection": "/F./build/ibservicexdd", + "--db-user": "Admin", + "--db-pwd": "", "--xddConfig": "./tools/JSON/xUnitParams.json", "testsPath": "./tests", "--reportsxunit": "ГенераторОтчетаJUnitXML{build/junit.xml};ГенераторОтчетаAllureXML{build/allure/allure-testsuite.xml}", diff --git a/tools/JSON/xUnitParams.json b/tools/JSON/xUnitParams.json index 0696d4a62..8a768bfd8 100644 --- a/tools/JSON/xUnitParams.json +++ b/tools/JSON/xUnitParams.json @@ -1,5 +1,9 @@ { "$schema":"https://raw.githubusercontent.com/silverbulleters/vanessa-runner/develop/xunit-schema.json", + "Отладка":false, + "ДобавлятьИмяПользователяВПредставлениеТеста":true, + "ДелатьЛогВыполненияСценариевВТекстовыйФайл":true, + "ИмяФайлаЛогВыполненияСценариев": "$workspaceRoot/build/ServiceBases/log-xunit.txt", "smoke": { "СтрогийПорядокВыполнения":true, "ВыводитьСообщенияВЖурналРегистрации":true, @@ -39,9 +43,5 @@ "ОткрытьVanessaBehavior", "ТестОбработка_Форма_ИсключениеПриОткрытии" ] - }, - "Отладка":false, - "ДобавлятьИмяПользователяВПредставлениеТеста":true, - "ДелатьЛогВыполненияСценариевВТекстовыйФайл":true, - "ИмяФайлаЛогВыполненияСценариев": "$workspaceRoot/build/ServiceBases/log-xunit.txt" + } }