From 558539d406898fe1ed565920ad2f194212b85b52 Mon Sep 17 00:00:00 2001 From: monwig Date: Mon, 23 Oct 2023 20:42:50 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD=20=D1=82=D0=B5=D1=81=D1=82=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=8B=5F=D0=A4=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=D0=9F=D0=B5=D1=87=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=D0=A4=D0=BE=D1=80=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/smoke/readme.md | 2 +- tests/smoke/smoke.bsp.json | 2 +- tests/smoke/smoke.example.json | 2 +- ...1\205\320\244\320\276\321\200\320\274.xml" | 11 +- .../Ext/ObjectModule.bsl" | 471 +------------- ...0\244\320\276\321\200\320\274\320\260.xml" | 22 + .../Ext/Form.xml" | 12 + .../Ext/Form/Module.bsl" | 585 ++++++++++++++++++ 8 files changed, 629 insertions(+), 478 deletions(-) create mode 100644 "tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Forms/\320\244\320\276\321\200\320\274\320\260.xml" create mode 100644 "tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" create mode 100644 "tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" diff --git a/tests/smoke/readme.md b/tests/smoke/readme.md index 22e8d8aea..5cf12f881 100644 --- a/tests/smoke/readme.md +++ b/tests/smoke/readme.md @@ -984,7 +984,7 @@ Есть возможность настройки проверяемых печатных форм с помощью json-файла настройки. -- ключ настройки `ФормированиеПечатныхФорм` +- ключ настройки `Тесты_ФормированиеПечатныхФорм` - вложенный ключ `Используется` типа Булево. Отвечает за включение\выключение теста - вложенный ключ `КоличествоДокументов`, отвечающий за количество объектов\документов, для которых проверяются печатные формы - вложенный массив с ключом `ИсключенияПоИдентификатору`, отвечающий за исключение конкретных печатных форм по `идентификатору печатной формы` diff --git a/tests/smoke/smoke.bsp.json b/tests/smoke/smoke.bsp.json index 61b70fe6b..4b7b34fe5 100644 --- a/tests/smoke/smoke.bsp.json +++ b/tests/smoke/smoke.bsp.json @@ -357,7 +357,7 @@ ] }, - "ФормированиеПечатныхФорм":{ + "Тесты_ФормированиеПечатныхФорм":{ "Используется" : true, "КоличествоДокументов" : 1, "ИсключенияПоИдентификатору" : [ diff --git a/tests/smoke/smoke.example.json b/tests/smoke/smoke.example.json index d1dcc4675..468fe53d7 100644 --- a/tests/smoke/smoke.example.json +++ b/tests/smoke/smoke.example.json @@ -221,7 +221,7 @@ ] }, - "ФормированиеПечатныхФорм":{ + "Тесты_ФормированиеПечатныхФорм":{ "Используется" : true, "КоличествоДокументов" : 1, "ПропускатьПустыеФормы": true, diff --git "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274.xml" "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274.xml" index 85585e5c1..931f1bb18 100644 --- "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274.xml" +++ "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274.xml" @@ -1,26 +1,26 @@  - + c3831ec8-d8d5-4f93-8a22-f9bfae07327f 009d3f97-d27d-44dc-b1fa-d8df34984c2c - + 4ca8560a-638c-489a-81c3-1988830b6521 3a012c82-d3f1-4d6f-9e42-08940d7bb729 - тесты_ФормированиеПечатныхФорм + Тесты_ФормированиеПечатныхФорм ru - Формирование печатных форм + smoke # Формирование печатных форм - + ExternalDataProcessor.Тесты_ФормированиеПечатныхФорм.Form.Форма @@ -56,6 +56,7 @@ Auto +
Форма
\ No newline at end of file diff --git "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Ext/ObjectModule.bsl" "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Ext/ObjectModule.bsl" index 088192670..5f282702b 100644 --- "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Ext/ObjectModule.bsl" +++ "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Ext/ObjectModule.bsl" @@ -1,470 +1 @@ -#Область ОписаниеПеременных - -Перем КонтекстЯдра; -Перем Утверждения; - -#КонецОбласти - -#Область ПрограммныйИнтерфейс - -#Область ИнтерфейсТестирования - -// Функция - Ключ настройки -// -// Возвращаемое значение: -// Строка - -// -Функция КлючНастройкиУстаревший() - Возврат "ФормированиеПечатныхФорм"; -КонецФункции - -Функция КлючНастройки() - Возврат ЭтотОбъект.Метаданные().Имя; -КонецФункции - -Процедура Инициализация(КонтекстЯдраПараметр) Экспорт - КонтекстЯдра = КонтекстЯдраПараметр; - Утверждения = КонтекстЯдра.Плагин("БазовыеУтверждения"); - - ЗагрузитьНастройки(); -КонецПроцедуры - -Процедура ЗаполнитьНаборТестов(НаборТестов, КонтекстЯдраПараметр) Экспорт - КонтекстЯдра = КонтекстЯдраПараметр; - - ЗагрузитьНастройки(); - - Если Не НужноВыполнятьТест(КонтекстЯдра) Тогда - Возврат; - КонецЕсли; - - Для Каждого МетаОбъект Из Метаданные.Документы Цикл - Если ПравоДоступа("Просмотр", МетаОбъект) Тогда - ДобавитьТестыДляДокумента(НаборТестов, МетаОбъект); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -#КонецОбласти - -#Область Тесты - -Процедура ПередЗапускомТеста() Экспорт - //НачатьТранзакцию(); -КонецПроцедуры - -Процедура ПослеЗапускаТеста() Экспорт - //Если ТранзакцияАктивна() Тогда - // ОтменитьТранзакцию(); - //КонецЕсли; -КонецПроцедуры - -Процедура Тест_ПолучитьПечатнуюФорму(МетаИмя, КомандаПечати) Экспорт - ПлагинНастройки = КонтекстЯдра.Плагин("Настройки"); - ПропускатьПустыеФормы = Ложь; - Пропустить = Настройки.Свойство("ПропускатьПустыеФормы", ПропускатьПустыеФормы) И ПропускатьПустыеФормы; - - ДокументыДляПечати = ПолучитьДокументыДляПечати(Метаданные.Документы[МетаИмя], КомандаПечати.УсловияВидимости); - Если ДокументыДляПечати.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - Для Каждого ДокСсылка Из ДокументыДляПечати Цикл - НачалоСообщенияОбОшибке = "Печать документа " + ДокСсылка + ": "; - КоллекцияПечатныхФорм = ПолучитьКоллекциюПечатныхФорм(КомандаПечати, ДокСсылка); - - Утверждения.Проверить(ТипЗнч(КоллекцияПечатныхФорм) = Тип("ТаблицаЗначений"), НачалоСообщенияОбОшибке + "Ожидалось, что КоллекцияПечатныхФорм будет иметь тип Таблица значений!"); - Утверждения.Проверить(КоллекцияПечатныхФорм.Количество() > 0, НачалоСообщенияОбОшибке + "Ожидалось, что количество элементов в КоллекцияПечатныхФорм будет больше 0!"); - - Для Каждого СтрокаТаблицы Из КоллекцияПечатныхФорм Цикл - ТабДок = СтрокаТаблицы.ТабличныйДокумент; - Утверждения.Проверить(ТабДок <> Неопределено, НачалоСообщенияОбОшибке + "Ожидалось, что будет получен табличный документ, а получено значение <Неопределено>!"); - - // Высота таб документа = 0 не означает что это ошибка, в типовой форме ПечатьДокументов есть проверка на высоту - // и если высота 0, то просто показывается надпись "Печатная форма недоступна." - // предлагаю пропускать такой тест - Если ТабДок.ВысотаТаблицы = 0 И Пропустить Тогда - КонтекстЯдра.ПропуститьТест(НСтр("ru = 'Тест пропущен: ВысотаТаблицы равна 0'")); - ИначеЕсли Не Пропустить Тогда - Утверждения.Проверить(ТабДок.ВысотаТаблицы > 0, НачалоСообщенияОбОшибке + "Ожидалось, что высота полученного табличного документа будет больше 0!"); - КонецЕсли; - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры - -Процедура Тест_ПропуститьПечатнуюФорму(Знач Сообщение) Экспорт - КонтекстЯдра.ПропуститьТест(Сообщение); -КонецПроцедуры - -#КонецОбласти - -#КонецОбласти - -#Область СлужебныеПроцедурыИФункции - -#Область Настройки - -Процедура ЗагрузитьНастройки() - Если ЗначениеЗаполнено(Настройки) Тогда - Возврат; - КонецЕсли; - - ПлагинНастройки = КонтекстЯдра.Плагин("Настройки"); - ПлагинНастройки.Инициализация(КонтекстЯдра); - - НастройкиПоУмолчанию = НастройкиПоУмолчанию(); - Настройки = ПлагинНастройки.ПолучитьНастройку(КлючНастройки()); - Если Не ЗначениеЗаполнено(Настройки) Тогда - Настройки = ПлагинНастройки.ПолучитьНастройку(КлючНастройкиУстаревший()); // обратная совместимость - КонецЕсли; - - Если ТипЗнч(Настройки) <> Тип("Структура") Then - Настройки = НастройкиПоУмолчанию; - Иначе - ЗаполнитьЗначенияСвойств(НастройкиПоУмолчанию, Настройки); - Настройки = НастройкиПоУмолчанию; - - КонецЕсли; - -КонецПроцедуры - -Функция НастройкиПоУмолчанию() - - Результат = Новый Структура; - Результат.Вставить("Используется", Истина); - Результат.Вставить("КоличествоДокументов", 1); - Результат.Вставить("ПропускатьПустыеФормы", Ложь); - Результат.Вставить("ВыводитьИсключения", Ложь); - Результат.Вставить("ИсключенияПоИдентификатору", Новый Массив); - Результат.Вставить("ИсключенияПоИмени", Новый Массив); - Результат.Вставить("ИсключенияПоОбъекту", Новый Массив); - - Возврат Результат; -КонецФункции - -Функция НужноВыполнятьТест(КонтекстЯдра) - - ЗагрузитьНастройки(); - //Настройки(КонтекстЯдра, ПутьНастройки); - - Если Не ЗначениеЗаполнено(Настройки) Тогда - Возврат Истина; - КонецЕсли; - - //ИмяТеста = ИмяТеста(); - КлючНастройки = КлючНастройки(); - - ВыполнятьТест = Истина; - Если ТипЗнч(Настройки) = Тип("Структура") - И Настройки.Свойство("Используется", ВыполнятьТест) Тогда - //И Настройки.Свойство("Параметры") - //И Настройки.Параметры.Свойство(ИмяТеста) Тогда - - //ВыполнятьТест = Настройки.Параметры[ИмяТеста]; - Возврат ВыполнятьТест = Истина; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -#КонецОбласти - -Процедура ДобавитьТестыДляДокумента(НаборТестов, МетаОбъект) - - // TODO реализовать возможность указания исключаемых объектов, а то у некоторых документов в менеджере нет процедуры ДобавитьКомандыПечати() - КомандыПечати = Неопределено; - Попытка - МодульУправлениеПечатью = Вычислить("УправлениеПечатью"); - КомандыПечати = МодульУправлениеПечатью.КомандыПечатиОбъекта(МетаОбъект); - Исключение - КонтекстЯдра.Отладка("Не удалось получить команды печати для документа " + МетаОбъект + ": " + ОписаниеОшибки()); - Возврат; - КонецПопытки; - - Если КомандыПечати.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ОбъектИсключен = Ложь; - - Если КонтекстЯдра.ЕстьВИсключаемойКоллекции(МетаОбъект.Имя, Настройки.ИсключенияПоОбъекту) Тогда - ПредставлениеТеста = "Печатные формы " + МетаОбъект.Имя; - Сообщение = "Пропускаем из-за исключения по имени объекта - " + ПредставлениеТеста; - КонтекстЯдра.Отладка(Сообщение); - - Если Не Настройки.ВыводитьИсключения Тогда - Возврат; - КонецЕсли; - - ОбъектИсключен = Истина; - КонецЕсли; - - НаборТестов.НачатьГруппу("Печатные формы " + МетаОбъект.Синоним + " - Документ." + МетаОбъект.Имя); - - Для Каждого ТекущаяКомандаПечати Из КомандыПечати Цикл - - Идентификатор = ТекущаяКомандаПечати.Идентификатор; - ИдентификаторДляСравнения = НРег(Идентификатор); - - ДопИнфо = "Идентификатор = " + Идентификатор; - Если ТекущаяКомандаПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" Тогда - ДопИнфо = "Ссылка = " + ТекущаяКомандаПечати.ДополнительныеПараметры.Ссылка + "; " + ДопИнфо; - КонецЕсли; - ПредставлениеТеста = "Печатная форма " + МетаОбъект.Имя + ": " + ТекущаяКомандаПечати.Представление + " : " + "{" + ДопИнфо + "}"; - - ЭтоИсключение = Ложь; - Если КонтекстЯдра.ЕстьВИсключаемойКоллекции(Идентификатор, Настройки.ИсключенияПоИдентификатору) Тогда - Сообщение = "Пропускаем из-за исключения по идентификатору - " + ПредставлениеТеста; - ЭтоИсключение = Истина; - ИначеЕсли КонтекстЯдра.ЕстьВИсключаемойКоллекции(ТекущаяКомандаПечати.Представление, Настройки.ИсключенияПоИмени) Тогда - Сообщение = "Пропускаем из-за исключения по имени - " + ПредставлениеТеста; - ЭтоИсключение = Истина; - ИначеЕсли ОбъектИсключен Тогда - Сообщение = "Пропускаем из-за исключения по имени объекта - " + ПредставлениеТеста; - ЭтоИсключение = Истина; - КонецЕсли; - - Если ЭтоИсключение Тогда - КонтекстЯдра.Отладка(Сообщение); - Если Настройки.ВыводитьИсключения Тогда - ПараметрыТеста = НаборТестов.ПараметрыТеста(Сообщение); - НаборТестов.Добавить("Тест_ПропуститьПечатнуюФорму", ПараметрыТеста, Сообщение); - КонецЕсли; - Продолжить; - КонецЕсли; - - // Фильтр по функциональным опциям. (код взят из типового модуля ПодключаемыеКоманды) - ФункциональныеОпции = СтрРазделить(ТекущаяКомандаПечати.ФункциональныеОпции, ",", Ложь); - ВидимостьКоманды = ФункциональныеОпции.Количество() = 0; - Для Каждого ИмяОпции Из ФункциональныеОпции Цикл - Если ПолучитьФункциональнуюОпцию(СокрЛП(ИмяОпции)) Тогда - ВидимостьКоманды = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - Если Не ВидимостьКоманды Тогда - Сообщение = СтрШаблон("%1. Форма пропущена из-за отключенной функциональной опции ""%2""", ПредставлениеТеста, ТекущаяКомандаПечати.ФункциональныеОпции); - КонтекстЯдра.Отладка(Сообщение); - Если Настройки.ВыводитьИсключения Тогда - ПараметрыТеста = НаборТестов.ПараметрыТеста(Сообщение); - НаборТестов.Добавить("Тест_ПропуститьПечатнуюФорму", ПараметрыТеста, Сообщение); - КонецЕсли; - Продолжить; - КонецЕсли; - - СтруктураКоманды = Новый Структура; - Для Каждого Колонка Из КомандыПечати.Колонки Цикл - ИмяКолонки = Колонка.Имя; - СтруктураКоманды.Вставить(ИмяКолонки, ТекущаяКомандаПечати[ИмяКолонки]); - КонецЦикла; - ПараметрыТеста = НаборТестов.ПараметрыТеста(МетаОбъект.Имя, СтруктураКоманды); - - НаборТестов.Добавить("Тест_ПолучитьПечатнуюФорму", ПараметрыТеста, ПредставлениеТеста); - КонецЦикла; - -КонецПроцедуры - -Функция ПолучитьДокументыДляПечати(МетаОбъект, УсловияВидимости = Неопределено) - - // здесь можно указать количество документов, для которых нужно проверить каждую форму - КолвоТестируемыхДокументов = Настройки.КоличествоДокументов; - - Результат = Новый Массив; - - ШаблонТекстаЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | Док.Ссылка КАК Ссылка - |ИЗ - | Документ.СчетНаОплатуПокупателю КАК Док - |ГДЕ - | &ДопУсловия - | - |УПОРЯДОЧИТЬ ПО - | ВЫБОР - | КОГДА Док.Проведен - | ТОГДА 0 - | КОГДА Док.ПометкаУдаления - | ТОГДА 2 - | ИНАЧЕ 1 - | КОНЕЦ, - | Док.Дата УБЫВ"; - ШаблонТекстаЗапроса = СтрЗаменить(ШаблонТекстаЗапроса, "Документ.СчетНаОплатуПокупателю", "Документ." + МетаОбъект.Имя); - ШаблонТекстаЗапроса = СтрЗаменить(ШаблонТекстаЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 1", "ВЫБРАТЬ ПЕРВЫЕ " + Формат(КолвоТестируемыхДокументов, "ЧГ=")); - - Запрос = Новый Запрос; - Запрос.Текст = ШаблонТекстаЗапроса; - - ОперацииУсловий = Новый Соответствие; - ОперацииУсловий.Вставить(ВидСравнения.Равно, "="); - ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.Равно, "="); - ОперацииУсловий.Вставить(ВидСравнения.Больше, ">"); - ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.Больше, ">"); - ОперацииУсловий.Вставить(ВидСравнения.БольшеИлиРавно, ">="); - ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.БольшеИлиРавно, ">="); - ОперацииУсловий.Вставить(ВидСравнения.Меньше, "<"); - ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.Меньше, "<"); - ОперацииУсловий.Вставить(ВидСравнения.МеньшеИлиРавно, "<="); - ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, "<="); - ОперацииУсловий.Вставить(ВидСравнения.НеРавно, "<>"); - ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.НеРавно, "<>"); - - ДопУсловия = ""; - Если ТипЗнч(УсловияВидимости) = Тип("Массив") Тогда - Для Каждого Условие Из УсловияВидимости Цикл - - // как оказалось в массиве могуть быть реквизиты которых нет у объекта - // в типовом модуле ПодключаемыеКомандыКлиентСервер функция УсловияВыполняются просто пропускает условее - // если у объекта нет такого реквищзита, сделал так же тут, а то сейчас падает на ошибке - Если МетаОбъект.Реквизиты.Найти(Условие.Реквизит) = Неопределено Тогда - Продолжить; - КонецЕсли; - - ТекТекстУсловия = ""; - ТекОперация = ОперацииУсловий.Получить(Условие.ВидСравнения); - Если ТекОперация <> Неопределено Тогда - ТекТекстУсловия = Условие.Реквизит + " " + ТекОперация + " &" + Условие.Реквизит; - ИначеЕсли Условие.ВидСравнения = ВидСравнения.ВСписке - Или Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда - ТекТекстУсловия = Условие.Реквизит + " В(&" + Условие.Реквизит + ")"; - ИначеЕсли Условие.ВидСравнения = ВидСравнения.НеВСписке - Или Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке Тогда - ТекТекстУсловия = "НЕ " + Условие.Реквизит + " В(&" + Условие.Реквизит + ")"; - ИначеЕсли Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено Тогда - // TODO: обработать условие видимости "Заполнено" - ИначеЕсли Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда - // TODO: обработать условие видимости "Не заполнено" - КонецЕсли; - Если НЕ ПустаяСтрока(ТекТекстУсловия) Тогда - ДопУсловия = ДопУсловия + ?(ПустаяСтрока(ДопУсловия), "", " И ") + ТекТекстУсловия; - Запрос.УстановитьПараметр(Условие.Реквизит, Условие.Значение); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если НЕ ПустаяСтрока(ДопУсловия) Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ДопУсловия", ДопУсловия); - Иначе - Запрос.УстановитьПараметр("ДопУсловия", Истина); - КонецЕсли; - - РезультатЗапроса = Запрос.Выполнить(); - - Если РезультатЗапроса.Пустой() Тогда - // нет документов для тестирования :( - Если НЕ ПустаяСтрока(ДопУсловия) Тогда - // возможно причина пустого результата в доп.условиях: - // попробуем без них - Запрос = Новый Запрос; - Запрос.Текст = ШаблонТекстаЗапроса; - Запрос.УстановитьПараметр("ДопУсловия", Истина); - РезультатЗапроса = Запрос.Выполнить(); - КонецЕсли; - КонецЕсли; - - Если НЕ РезультатЗапроса.Пустой() Тогда - Результат = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); - КонецЕсли; - - Возврат Результат; - -КонецФункции - -Функция ПолучитьКоллекциюПечатныхФорм(КомандаПечати, ДокументДляПечати) - - Результат = Неопределено; - - ДокументыДляПечати = Новый Массив; - ДокументыДляПечати.Добавить(ДокументДляПечати); - - Если КомандаПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" - И Вычислить("ОбщегоНазначения.ПодсистемаСуществует(""СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки"")") Тогда - // печать внешней печатной формы - ДополнительнаяОбработкаСсылка = КомандаПечати.ДополнительныеПараметры.Ссылка; - ПараметрыИсточника = Новый Структура; - ПараметрыИсточника.Вставить("ИдентификаторКоманды", КомандаПечати.Идентификатор); - ПараметрыИсточника.Вставить("ОбъектыНазначения", ДокументыДляПечати); - КоллекцияПечатныхФорм = Неопределено; - ОбъектыПечати = Новый СписокЗначений; - ПараметрыВывода = Неопределено; - - МодульУправлениеПечатью = Вычислить("УправлениеПечатью"); - //Попытка - МодульУправлениеПечатью.ПечатьПоВнешнемуИсточнику( - ДополнительнаяОбработкаСсылка, - ПараметрыИсточника, - КоллекцияПечатныхФорм, - ОбъектыПечати, - ПараметрыВывода - ); - - Результат = КоллекцияПечатныхФорм; - //Исключение - // Инфо = ИнформацияОбОшибке(); - // //TODO нужно не костылем исключить печатные формы, которые открываются не в 1С - word и т.п. - // Если (Найти(Инфо.Описание, "Метод объекта не обнаружен (Печать)") > 0 Или - // Найти(Инфо.Описание, "Object method not found (Печать)") > 0) - // //И - // //Найти(Инфо.ИсходнаяСтрока, "ОбъектПлагина.Инициализация(ЭтотОбъект);") > 0 - // //И - // //( Найти(Инфо.ИмяМодуля, "Форма.УправляемаяФорма.Форма") > 0 Или - // ////ExternalDataProcessor.xddTestRunner.Form.УправляемаяФорма.Form - // //Найти(Инфо.ИмяМодуля, "Form.УправляемаяФорма.Form") > 0 ) - // Тогда - // КонтекстЯдра.ПропуститьТест(НСтр("ru = 'Тест пропущен: '") + Инфо.Описание); - // Иначе - // ВызватьИсключение; - // КонецЕсли; - //КонецПопытки; - Иначе - // печать встроенной печатной формы - ИмяМенеджераПечати = КомандаПечати.МенеджерПечати; - ИменаМакетов = КомандаПечати.Идентификатор; - МассивОбъектов = ДокументыДляПечати; - ПараметрыПечати = ?(КомандаПечати.Свойство("ДополнительныеПараметры"), - КомандаПечати.ДополнительныеПараметры, Новый Структура); - ДопустимыеТипыОбъектовПечати = Неопределено; - - МодульУправлениеПечатью = Вычислить("УправлениеПечатью"); - //Попытка - ПечатныеФормы = МодульУправлениеПечатью.СформироватьПечатныеФормы( - ИмяМенеджераПечати, - ИменаМакетов, - МассивОбъектов, - ПараметрыПечати, - ДопустимыеТипыОбъектовПечати - ); - - Результат = ПечатныеФормы.КоллекцияПечатныхФорм; - //Исключение - // Инфо = ИнформацияОбОшибке(); - // //TODO нужно не костылем исключить печатные формы, которые открываются не в 1С - word и т.п. - // Если (Найти(Инфо.Описание, "Метод объекта не обнаружен (Печать)") > 0 Или - // Найти(Инфо.Описание, "Object method not found (Печать)") > 0) - // //И - // //Найти(Инфо.ИсходнаяСтрока, "ОбъектПлагина.Инициализация(ЭтотОбъект);") > 0 - // //И - // //( Найти(Инфо.ИмяМодуля, "Форма.УправляемаяФорма.Форма") > 0 Или - // ////ExternalDataProcessor.xddTestRunner.Form.УправляемаяФорма.Form - // //Найти(Инфо.ИмяМодуля, "Form.УправляемаяФорма.Form") > 0 ) - // Тогда - // КонтекстЯдра.ПропуститьТест(НСтр("ru = 'Тест пропущен: '") + Инфо.Описание); - // Иначе - // ВызватьИсключение; - // КонецЕсли; - //КонецПопытки; - - КонецЕсли; - - Возврат Результат; - -КонецФункции - -Функция ИмяТеста() - Возврат Метаданные().Имя; -КонецФункции - -#КонецОбласти + \ No newline at end of file diff --git "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Forms/\320\244\320\276\321\200\320\274\320\260.xml" new file mode 100644 index 000000000..3d94e8026 --- /dev/null +++ "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Forms/\320\244\320\276\321\200\320\274\320\260.xml" @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" new file mode 100644 index 000000000..437c1479c --- /dev/null +++ "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" @@ -0,0 +1,12 @@ + +
+ + + + + cfg:ExternalDataProcessorObject.Тесты_ФормированиеПечатныхФорм + + true + + + \ No newline at end of file diff --git "a/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/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\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" new file mode 100644 index 000000000..685323275 --- /dev/null +++ "b/tests/smoke/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/\321\202\320\265\321\201\321\202\321\213_\320\244\320\276\321\200\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265\320\237\320\265\321\207\320\260\321\202\320\275\321\213\321\205\320\244\320\276\321\200\320\274/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -0,0 +1,585 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем КонтекстЯдра; + +&НаКлиенте +Перем Утверждения; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +#Область ИнтерфейсТестирования + +&НаКлиенте +Процедура Инициализация(КонтекстЯдраПараметр) Экспорт + + КонтекстЯдра = КонтекстЯдраПараметр; + Утверждения = КонтекстЯдра.Плагин("БазовыеУтверждения"); + + ЗагрузитьНастройки(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьНаборТестов(НаборТестов, КонтекстЯдраПараметр) Экспорт + + КонтекстЯдра = КонтекстЯдраПараметр; + + ЗагрузитьНастройки(); + + Если Не НужноВыполнятьТест() Тогда + Возврат; + КонецЕсли; + + РазрешенныеДокументы = РазрешенныеОбъектыМетаданных(); + + Для каждого ОбъектМетаданных Из РазрешенныеДокументы Цикл + ДобавитьТестыДляДокумента(НаборТестов, ОбъектМетаданных); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Функция КлючНастройки() + Возврат КлючНастройкиНаСервере(); +КонецФункции + +&НаСервере +Функция КлючНастройкиНаСервере() + Возврат РеквизитФормыВЗначение("Объект").Метаданные().Имя; +КонецФункции + +&НаКлиенте +Функция КлючНастройкиУстаревший() + Возврат "ФормированиеПечатныхФорм"; +КонецФункции + +&НаКлиенте +Функция КлючНастройкиУстаревший2() + Возврат "тесты_ФормированиеПечатныхФорм"; +КонецФункции + +#КонецОбласти + +#Область Тесты + +&НаКлиенте +Процедура Тест_ПолучитьПечатнуюФорму(ИмяМетаданного, КомандаПечати) Экспорт + + ПлагинНастройки = КонтекстЯдра.Плагин("Настройки"); + ПропускатьПустыеФормы = Ложь; + Пропустить = Объект.Настройки.Свойство("ПропускатьПустыеФормы", ПропускатьПустыеФормы) И ПропускатьПустыеФормы; + + ДокументыДляПечати = ПолучитьДокументыДляПечати(ИмяМетаданного, КомандаПечати.УсловияВидимости); + Если ДокументыДляПечати.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого СтруктураДокумента Из ДокументыДляПечати Цикл + НачалоСообщенияОбОшибке = "Печать документа " + СтруктураДокумента.ПредставлениеДокумента + ": "; + + КоллекцияПечатныхФорм = ПолучитьКоллекциюПечатныхФорм(КомандаПечати, СтруктураДокумента.АдресСсылки); + + Утверждения.Проверить(КоллекцияПечатныхФорм.КоллекцияЯвляетсяТаблицей = Истина, + НачалоСообщенияОбОшибке + "Ожидалось, что КоллекцияПечатныхФорм будет иметь тип Таблица значений!"); + + Утверждения.Проверить(КоллекцияПечатныхФорм.ТабличныеДокументыПечатныхФорм.Количество() > 0, + НачалоСообщенияОбОшибке + "Ожидалось, что количество элементов в КоллекцияПечатныхФорм будет больше 0!"); + + Для Каждого ТабличныйДокумент Из КоллекцияПечатныхФорм.ТабличныеДокументыПечатныхФорм Цикл + Утверждения.Проверить(ТабличныйДокумент <> Неопределено, + НачалоСообщенияОбОшибке + "Ожидалось, что будет получен табличный документ, а получено значение <Неопределено>!"); + + // Высота таб документа = 0 не означает что это ошибка, в типовой форме ПечатьДокументов есть проверка на высоту + // и если высота 0, то просто показывается надпись "Печатная форма недоступна." + // предлагаю пропускать такой тест + Если ТабличныйДокумент.ВысотаТаблицы = 0 И Пропустить Тогда + КонтекстЯдра.ПропуститьТест(НСтр("ru = 'Тест пропущен: ВысотаТаблицы равна 0'")); + ИначеЕсли Не Пропустить Тогда + Утверждения.Проверить(ТабличныйДокумент.ВысотаТаблицы > 0, + НачалоСообщенияОбОшибке + "Ожидалось, что высота полученного табличного документа будет больше 0!"); + КонецЕсли; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура Тест_ПропуститьПечатнуюФорму(Знач Сообщение) Экспорт + + КонтекстЯдра.ПропуститьТест(Сообщение); + +КонецПроцедуры + +&НаСервере +Процедура ПередЗапускомТеста() Экспорт + //НачатьТранзакцию(); +КонецПроцедуры + +&НаСервере +Процедура ПослеЗапускаТеста() Экспорт + //Если ТранзакцияАктивна() Тогда + // ОтменитьТранзакцию(); + //КонецЕсли; +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область Настройки + +&НаКлиенте +Процедура ЗагрузитьНастройки() + + Если ЗначениеЗаполнено(Объект.Настройки) Тогда + Возврат; + КонецЕсли; + + ПлагинНастройки = КонтекстЯдра.Плагин("Настройки"); + ПлагинНастройки.Инициализация(КонтекстЯдра); + + Настройки = ПлагинНастройки.ПолучитьНастройку(КлючНастройки()); + + // обратная совместимость с именем ФормированиеПечатныхФорм + Если Не ЗначениеЗаполнено(Объект.Настройки) Тогда + Объект.Настройки = ПлагинНастройки.ПолучитьНастройку(КлючНастройкиУстаревший()); + КонецЕсли; + + // обратная совместимость с именем тесты_ФормированиеПечатныхФорм + Если Не ЗначениеЗаполнено(Объект.Настройки) Тогда + Объект.Настройки = ПлагинНастройки.ПолучитьНастройку(КлючНастройкиУстаревший2()); + КонецЕсли; + + НастройкиПоУмолчанию = НастройкиПоУмолчанию(); + + Если ТипЗнч(Объект.Настройки) <> Тип("Структура") Then + Объект.Настройки = НастройкиПоУмолчанию; + Иначе + ЗаполнитьЗначенияСвойств(НастройкиПоУмолчанию, Объект.Настройки); + Объект.Настройки = НастройкиПоУмолчанию; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция НастройкиПоУмолчанию() + + Результат = Новый Структура; + Результат.Вставить("Используется", Истина); + Результат.Вставить("КоличествоДокументов", 1); + Результат.Вставить("ПропускатьПустыеФормы", Ложь); + Результат.Вставить("ВыводитьИсключения", Ложь); + Результат.Вставить("ИсключенияПоИдентификатору", Новый Массив); + Результат.Вставить("ИсключенияПоИмени", Новый Массив); + Результат.Вставить("ИсключенияПоОбъекту", Новый Массив); + Результат.Вставить("Префикс", ""); + Результат.Вставить("ОтборПоПрефиксу", Ложь); + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Функция НужноВыполнятьТест() + + ЗагрузитьНастройки(); + + Если Не ЗначениеЗаполнено(Объект.Настройки) Тогда + Возврат Истина; + КонецЕсли; + + КлючНастройки = КлючНастройки(); + + ВыполнятьТест = Истина; + Если ТипЗнч(Объект.Настройки) = Тип("Структура") + И Объект.Настройки.Свойство("Используется", ВыполнятьТест) Тогда + + Возврат ВыполнятьТест = Истина; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +#КонецОбласти + +&НаКлиенте +Процедура ДобавитьТестыДляДокумента(НаборТестов, СтруктураМетаданных) + + // TODO реализовать возможность указания исключаемых объектов, а то у некоторых документов в менеджере нет процедуры ДобавитьКомандыПечати() + ОбъектИсключен = Ложь; + + Если КонтекстЯдра.ЕстьВИсключаемойКоллекции(СтруктураМетаданных.Имя, Объект.Настройки.ИсключенияПоОбъекту) Тогда + ПредставлениеТеста = "Печатные формы " + СтруктураМетаданных.Имя; + + Сообщение = "Пропускаем из-за исключения по имени объекта - " + ПредставлениеТеста; + КонтекстЯдра.Отладка(Сообщение); + + Если Не Объект.Настройки.ВыводитьИсключения Тогда + Возврат; + КонецЕсли; + + ОбъектИсключен = Истина; + КонецЕсли; + + НаборТестов.НачатьГруппу("Печатные формы " + СтруктураМетаданных.Синоним + " - Документ." + СтруктураМетаданных.Имя); + + КомандыПечатиОбъекта = ПодготовитьКомандыПечатиОбъекта(СтруктураМетаданных); + + Для Каждого ТекущаяКомандаПечати Из КомандыПечатиОбъекта Цикл + + ЭтоИсключение = Ложь; + + Если КонтекстЯдра.ЕстьВИсключаемойКоллекции(ТекущаяКомандаПечати.ИдентификаторКоманды, Объект.Настройки.ИсключенияПоИдентификатору) Тогда + Сообщение = "Пропускаем из-за исключения по идентификатору - " + ТекущаяКомандаПечати.ПредставлениеТеста; + ЭтоИсключение = Истина; + ИначеЕсли КонтекстЯдра.ЕстьВИсключаемойКоллекции(ТекущаяКомандаПечати.ПредставлениеКоманды, Объект.Настройки.ИсключенияПоИмени) Тогда + Сообщение = "Пропускаем из-за исключения по имени - " + ТекущаяКомандаПечати.ПредставлениеТеста; + ЭтоИсключение = Истина; + ИначеЕсли ОбъектИсключен Тогда + Сообщение = "Пропускаем из-за исключения по имени объекта - " + ТекущаяКомандаПечати.ПредставлениеТеста; + ЭтоИсключение = Истина; + КонецЕсли; + + Если ЭтоИсключение Тогда + КонтекстЯдра.Отладка(Сообщение); + + Если Объект.Настройки.ВыводитьИсключения Тогда + ПараметрыТеста = НаборТестов.ПараметрыТеста(Сообщение); + НаборТестов.Добавить("Тест_ПропуститьПечатнуюФорму", ПараметрыТеста, Сообщение); + КонецЕсли; + + Продолжить; + КонецЕсли; + + Если Не ТекущаяКомандаПечати.ВидимостьКоманды Тогда + Сообщение = СтрШаблон("%1. Форма пропущена из-за отключенной функциональной опции ""%2""", + ТекущаяКомандаПечати.ПредставлениеТеста, ТекущаяКомандаПечати.ФункциональныеОпции); + + КонтекстЯдра.Отладка(Сообщение); + + Если Объект.Настройки.ВыводитьИсключения Тогда + ПараметрыТеста = НаборТестов.ПараметрыТеста(Сообщение); + НаборТестов.Добавить("Тест_ПропуститьПечатнуюФорму", ПараметрыТеста, Сообщение); + КонецЕсли; + + Продолжить; + КонецЕсли; + + ПараметрыТеста = НаборТестов.ПараметрыТеста(СтруктураМетаданных.Имя, ТекущаяКомандаПечати.СтруктураКоманды); + + НаборТестов.Добавить("Тест_ПолучитьПечатнуюФорму", ПараметрыТеста, ТекущаяКомандаПечати.ПредставлениеТеста); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ПодготовитьКомандыПечатиОбъекта(СтруктураМетаданных) + + ПодготовленныеКомандыПечати = Новый Массив; + + КомандыПечати = ПолучитьИзВременногоХранилища(СтруктураМетаданных.АдресКомандПечати); + + Для Каждого ТекущаяКомандаПечати Из КомандыПечати Цикл + + ДопИнфо = "Идентификатор = " + ТекущаяКомандаПечати.Идентификатор; + + Если ТекущаяКомандаПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" Тогда + ДопИнфо = "Ссылка = " + ТекущаяКомандаПечати.ДополнительныеПараметры.Ссылка + "; " + ДопИнфо; + КонецЕсли; + + ПредставлениеТеста = "Печатная форма " + СтруктураМетаданных.Имя + ": " + ТекущаяКомандаПечати.Представление + " : " + "{" + ДопИнфо + "}"; + + // Фильтр по функциональным опциям. (код взят из типового модуля ПодключаемыеКоманды) + ФункциональныеОпции = СтрРазделить(ТекущаяКомандаПечати.ФункциональныеОпции, ",", Ложь); + ВидимостьКоманды = ФункциональныеОпции.Количество() = 0; + + Для Каждого ИмяОпции Из ФункциональныеОпции Цикл + Если ПолучитьФункциональнуюОпциюНаСервере(ИмяОпции) Тогда + ВидимостьКоманды = Истина; + + Прервать; + КонецЕсли; + КонецЦикла; + + СтруктураКоманды = Новый Структура; + + Для Каждого Колонка Из КомандыПечати.Колонки Цикл + ИмяКолонки = Колонка.Имя; + СтруктураКоманды.Вставить(ИмяКолонки, ТекущаяКомандаПечати[ИмяКолонки]); + КонецЦикла; + + СтруктураКомандыПечати = Новый Структура; + СтруктураКомандыПечати.Вставить("ПредставлениеТеста", ПредставлениеТеста); + СтруктураКомандыПечати.Вставить("ИдентификаторКоманды", ТекущаяКомандаПечати.Идентификатор); + СтруктураКомандыПечати.Вставить("ПредставлениеКоманды", ТекущаяКомандаПечати.Представление); + СтруктураКомандыПечати.Вставить("ВидимостьКоманды", ВидимостьКоманды); + СтруктураКомандыПечати.Вставить("СтруктураКоманды", СтруктураКоманды); + СтруктураКомандыПечати.Вставить("ФункциональныеОпции", ФункциональныеОпции); + + ПодготовленныеКомандыПечати.Добавить(СтруктураКомандыПечати); + + КонецЦикла; + + Возврат ПодготовленныеКомандыПечати; + +КонецФункции + +&НаСервере +Функция ПолучитьКомандыПечати(МетаданныеОбъекта) + + МодульУправлениеПечатью = Вычислить("УправлениеПечатью"); + КомандыПечати = МодульУправлениеПечатью.КомандыПечатиОбъекта(МетаданныеОбъекта); + + Возврат КомандыПечати; + +КонецФункции + +&НаСервере +Функция ПолучитьДокументыДляПечати(ИмяМетаданного, УсловияВидимости = Неопределено) + + МетаданныеДокумента = Метаданные.Документы[ИмяМетаданного]; + + КоличествоТестируемыхДокументов = Объект.Настройки.КоличествоДокументов; + + Результат = Новый Массив; + + ШаблонТекстаЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВидДокумента.Ссылка КАК Ссылка + |ИЗ + | Документ.СчетНаОплатуПокупателю КАК ВидДокумента + |ГДЕ + | &ДополнительныеУсловия + | + |УПОРЯДОЧИТЬ ПО + | ВЫБОР + | КОГДА ВидДокумента.Проведен + | ТОГДА 0 + | КОГДА ВидДокумента.ПометкаУдаления + | ТОГДА 2 + | ИНАЧЕ 1 + | КОНЕЦ, + | ВидДокумента.Дата УБЫВ"; + + ШаблонТекстаЗапроса = СтрЗаменить(ШаблонТекстаЗапроса, "Документ.СчетНаОплатуПокупателю", "Документ." + МетаданныеДокумента.Имя); + ШаблонТекстаЗапроса = СтрЗаменить(ШаблонТекстаЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 1", "ВЫБРАТЬ ПЕРВЫЕ " + Формат(КоличествоТестируемыхДокументов, "ЧГ=")); + + Запрос = Новый Запрос; + Запрос.Текст = ШаблонТекстаЗапроса; + + ОперацииУсловий = Новый Соответствие; + ОперацииУсловий.Вставить(ВидСравнения.Равно, "="); + ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.Равно, "="); + ОперацииУсловий.Вставить(ВидСравнения.Больше, ">"); + ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.Больше, ">"); + ОперацииУсловий.Вставить(ВидСравнения.БольшеИлиРавно, ">="); + ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.БольшеИлиРавно, ">="); + ОперацииУсловий.Вставить(ВидСравнения.Меньше, "<"); + ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.Меньше, "<"); + ОперацииУсловий.Вставить(ВидСравнения.МеньшеИлиРавно, "<="); + ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, "<="); + ОперацииУсловий.Вставить(ВидСравнения.НеРавно, "<>"); + ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.НеРавно, "<>"); + + ДополнительныеУсловия = ""; + Если ТипЗнч(УсловияВидимости) = Тип("Массив") Тогда + Для Каждого Условие Из УсловияВидимости Цикл + Если МетаданныеДокумента.Реквизиты.Найти(Условие.Реквизит) = Неопределено Тогда + Продолжить; + КонецЕсли; + + ТекущийТекстУсловия = ""; + ТекОперация = ОперацииУсловий.Получить(Условие.ВидСравнения); + + Если ТекОперация <> Неопределено Тогда + ТекущийТекстУсловия = Условие.Реквизит + " " + ТекОперация + " &" + Условие.Реквизит; + ИначеЕсли Условие.ВидСравнения = ВидСравнения.ВСписке + Или Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда + ТекущийТекстУсловия = Условие.Реквизит + " В(&" + Условие.Реквизит + ")"; + ИначеЕсли Условие.ВидСравнения = ВидСравнения.НеВСписке + Или Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке Тогда + ТекущийТекстУсловия = "НЕ " + Условие.Реквизит + " В(&" + Условие.Реквизит + ")"; + ИначеЕсли Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено Тогда + // TODO: обработать условие видимости "Заполнено" + ИначеЕсли Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда + // TODO: обработать условие видимости "Не заполнено" + КонецЕсли; + + Если НЕ ПустаяСтрока(ТекущийТекстУсловия) Тогда + ДополнительныеУсловия = ДополнительныеУсловия + ?(ПустаяСтрока(ДополнительныеУсловия), "", " И ") + ТекущийТекстУсловия; + Запрос.УстановитьПараметр(Условие.Реквизит, Условие.Значение); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если НЕ ПустаяСтрока(ДополнительныеУсловия) Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ДополнительныеУсловия", ДополнительныеУсловия); + Иначе + Запрос.УстановитьПараметр("ДополнительныеУсловия", Истина); + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + + Если РезультатЗапроса.Пустой() Тогда + // нет документов для тестирования :( + Если НЕ ПустаяСтрока(ДополнительныеУсловия) Тогда + // возможно причина пустого результата в доп.условиях: + // попробуем без них + Запрос = Новый Запрос; + Запрос.Текст = ШаблонТекстаЗапроса; + Запрос.УстановитьПараметр("ДополнительныеУсловия", Истина); + + РезультатЗапроса = Запрос.Выполнить(); + КонецЕсли; + КонецЕсли; + + Если НЕ РезультатЗапроса.Пустой() Тогда + ДокументыДляПечати = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Если ДокументыДляПечати.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + МассивДокументов = Новый Массив; + + Для каждого ДокументПечати Из ДокументыДляПечати Цикл + СтруктураДокументов = Новый Структура; + СтруктураДокументов.Вставить("ПредставлениеДокумента", Строка(ДокументПечати)); + СтруктураДокументов.Вставить("АдресСсылки", ПоместитьВоВременноеХранилище(ДокументПечати, ЭтаФорма.УникальныйИдентификатор)); + + МассивДокументов.Добавить(СтруктураДокументов); + КонецЦикла; + + Результат = МассивДокументов; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервере +Функция ПолучитьКоллекциюПечатныхФорм(КомандаПечати, ДокументДляПечати) + + ДокументСсылка = ПолучитьИзВременногоХранилища(ДокументДляПечати); + + Результат = Неопределено; + + ДокументыДляПечати = Новый Массив; + ДокументыДляПечати.Добавить(ДокументСсылка); + + Если КомандаПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" + И Вычислить("ОбщегоНазначения.ПодсистемаСуществует(""СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки"")") Тогда + // печать внешней печатной формы + ДополнительнаяОбработкаСсылка = КомандаПечати.ДополнительныеПараметры.Ссылка; + ПараметрыИсточника = Новый Структура; + ПараметрыИсточника.Вставить("ИдентификаторКоманды", КомандаПечати.Идентификатор); + ПараметрыИсточника.Вставить("ОбъектыНазначения", ДокументыДляПечати); + КоллекцияПечатныхФорм = Неопределено; + ОбъектыПечати = Новый СписокЗначений; + ПараметрыВывода = Неопределено; + + МодульУправлениеПечатью = Вычислить("УправлениеПечатью"); + + МодульУправлениеПечатью.ПечатьПоВнешнемуИсточнику( + ДополнительнаяОбработкаСсылка, + ПараметрыИсточника, + КоллекцияПечатныхФорм, + ОбъектыПечати, + ПараметрыВывода + ); + + Результат = КоллекцияПечатныхФорм; + Иначе + // печать встроенной печатной формы + ИмяМенеджераПечати = КомандаПечати.МенеджерПечати; + ИменаМакетов = КомандаПечати.Идентификатор; + МассивОбъектов = ДокументыДляПечати; + ПараметрыПечати = ?(КомандаПечати.Свойство("ДополнительныеПараметры"), + КомандаПечати.ДополнительныеПараметры, Новый Структура); + ДопустимыеТипыОбъектовПечати = Неопределено; + + МодульУправлениеПечатью = Вычислить("УправлениеПечатью"); + + ПечатныеФормы = МодульУправлениеПечатью.СформироватьПечатныеФормы( + ИмяМенеджераПечати, + ИменаМакетов, + МассивОбъектов, + ПараметрыПечати, + ДопустимыеТипыОбъектовПечати + ); + + Результат = ПечатныеФормы.КоллекцияПечатныхФорм; + КонецЕсли; + + КоллекцияЯвляетсяТаблицей = ТипЗнч(Результат) = Тип("ТаблицаЗначений"); + + СтруктураПечатныхФорм = Новый Структура; + СтруктураПечатныхФорм.Вставить("КоллекцияЯвляетсяТаблицей", КоллекцияЯвляетсяТаблицей); + + ТабличныеДокументыПечатныхФорм = Новый Массив; + + Для каждого СтрокаРезультата Из Результат Цикл + ТабличныеДокументыПечатныхФорм.Добавить(СтрокаРезультата.ТабличныйДокумент); + + СтруктураПечатныхФорм.Вставить("ТабличныеДокументыПечатныхФорм", ТабличныеДокументыПечатныхФорм); + КонецЦикла; + + Возврат СтруктураПечатныхФорм; + +КонецФункции + +&НаСервере +Функция РазрешенныеОбъектыМетаданных() + + РазрешенныеДокументы = Новый Массив; + + Для каждого ОбъектМетаданных Из Метаданные.Документы Цикл + Если Объект.Настройки.ОтборПоПрефиксу + И Не СтрНачинаетсяС(ВРег(ОбъектМетаданных.Имя), ВРег(Объект.Настройки.Префикс)) Тогда + + Продолжить; + КонецЕсли; + + Если ПравоДоступа("Просмотр", ОбъектМетаданных) Тогда + КомандыПечатиОбъекта = Неопределено; + + Попытка + КомандыПечатиОбъекта = ПолучитьКомандыПечати(ОбъектМетаданных); + Исключение + Продолжить; + КонецПопытки; + + Если КомандыПечатиОбъекта.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + СтруктураДокумента = Новый Структура; + СтруктураДокумента.Вставить("Имя", ОбъектМетаданных.Имя); + СтруктураДокумента.Вставить("Синоним", ОбъектМетаданных.Синоним); + + АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(КомандыПечатиОбъекта, ЭтаФорма.УникальныйИдентификатор); + СтруктураДокумента.Вставить("АдресКомандПечати", АдресВоВременномХранилище); + + РазрешенныеДокументы.Добавить(СтруктураДокумента); + КонецЕсли; + КонецЦикла; + + Возврат РазрешенныеДокументы; + +КонецФункции + +&НаСервереБезКонтекста +Функция ПолучитьФункциональнуюОпциюНаСервере(ИмяОпции) + + Возврат ПолучитьФункциональнуюОпцию(СокрЛП(ИмяОпции)); + +КонецФункции + +#КонецОбласти From 86ca4810026af47d84c6c56be0a0700a3fd0a3ef Mon Sep 17 00:00:00 2001 From: monwig Date: Mon, 23 Oct 2023 20:46:55 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BB?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=D1=8B=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BE=D1=82=D0=B1=D0=BE=D1=80=D0=B0=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B5=D1=84=D0=B8=D0=BA=D1=81=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/smoke/smoke.bsp.json | 2 ++ tests/smoke/smoke.example.json | 2 ++ 2 files changed, 4 insertions(+) diff --git a/tests/smoke/smoke.bsp.json b/tests/smoke/smoke.bsp.json index 4b7b34fe5..6645d79e2 100644 --- a/tests/smoke/smoke.bsp.json +++ b/tests/smoke/smoke.bsp.json @@ -360,6 +360,8 @@ "Тесты_ФормированиеПечатныхФорм":{ "Используется" : true, "КоличествоДокументов" : 1, + "Префикс": "Префикс", + "ОтборПоПрефиксу": false, "ИсключенияПоИдентификатору" : [ "Удалить*", "ИдентификаторПечатнойФормы", diff --git a/tests/smoke/smoke.example.json b/tests/smoke/smoke.example.json index 468fe53d7..2863c1997 100644 --- a/tests/smoke/smoke.example.json +++ b/tests/smoke/smoke.example.json @@ -225,6 +225,8 @@ "Используется" : true, "КоличествоДокументов" : 1, "ПропускатьПустыеФормы": true, + "Префикс": "Префикс", + "ОтборПоПрефиксу": false, "ИсключенияПоИдентификатору" : [ "Удалить*", "ИдентификаторПечатнойФормы",