Файл тестов для xUnitFor1C: тестирование печатных форм документов

10.08.18

Разработка - Инструментарий разработчика

Автоматическое формирование печатных форм документов с помощью xUnitFor1C.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Файл тестов для xUnitFor1C: тестирование печатных форм документов:
.7z 4,34Kb
7
7 Скачать (1 SM) Купить за 1 850 руб.

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

Проверяет, что печатная форма (табличный документ): а. формируется; б. содержит по крайней мере одну строку (т.е. высота табличного документа > 0).

Работает неидеально!!! Но иногда лучше тупой топор, чем голые руки.

Используются механизмы БСП. Тестировалось на БП 3.0.57.10.

Проект на гитхабе: https://github.com/q-i/tests_for_xUnitFor1C

Рацпредложения приветствуются.

Исходный код модуля обработки файла тестов (лицензия Apache 2.0 для совместимости с проектом xUnitFor1C):

Перем КонтекстЯдра;
Перем Утверждения;

//{ основная процедура для юнит-тестирования xUnitFor1C
Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
	КонтекстЯдра = КонтекстЯдраПараметр;
	Утверждения = КонтекстЯдра.Плагин("БазовыеУтверждения");
КонецПроцедуры

Процедура ЗаполнитьНаборТестов(НаборТестов, КонтекстЯдраПараметр) Экспорт
	КонтекстЯдра = КонтекстЯдраПараметр;
	
	Для Каждого МетаОбъект Из Метаданные.Документы Цикл
		Если ПравоДоступа("Просмотр", МетаОбъект) Тогда
			ДобавитьТестыДляДокумента(НаборТестов, МетаОбъект);
		КонецЕсли; 
	КонецЦикла; 
	
КонецПроцедуры
//}

//{ Блок юнит-тестов
Функция ПолучитьДокументыДляПечати(МетаОбъект, УсловияВидимости = Неопределено)
	
	КолвоТестируемыхДокументов = 1; // здесь можно указать количество документов, для которых нужно проверить каждую форму
	
	Результат = Новый Массив; 
	
	ШаблонТекстаЗапроса = 
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	Док.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.СчетНаОплатуПокупателю КАК Док
	|ГДЕ
	|	&ДопУсловия
	|
	|УПОРЯДОЧИТЬ ПО
	|	ВЫБОР
	|		КОГДА Док.Проведен
	|			ТОГДА 0
	|		КОГДА Док.ПометкаУдаления
	|			ТОГДА 2
	|		ИНАЧЕ 1
	|	КОНЕЦ,
	|	Док.Дата УБЫВ";
	ШаблонТекстаЗапроса = СтрЗаменить(ШаблонТекстаЗапроса, "Документ.СчетНаОплатуПокупателю", "Документ." + МетаОбъект.Имя);
	ШаблонТекстаЗапроса = СтрЗаменить(ШаблонТекстаЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 1", "ВЫБРАТЬ ПЕРВЫЕ " + Формат(КолвоТестируемыхДокументов, "ЧГ="));
	
	Запрос = Новый Запрос;
	Запрос.Текст = ШаблонТекстаЗапроса;
	
	ОперацииУсловий = Новый Соответствие;
	ОперацииУсловий.Вставить(ВидСравнения.Равно, "=");
	ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.Равно, "=");
	ОперацииУсловий.Вставить(ВидСравнения.Больше, ">");
	ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.Больше, ">");
	ОперацииУсловий.Вставить(ВидСравнения.БольшеИлиРавно, ">=");
	ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.БольшеИлиРавно, ">=");
	ОперацииУсловий.Вставить(ВидСравнения.Меньше, "<");
	ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.Меньше, "<");
	ОперацииУсловий.Вставить(ВидСравнения.МеньшеИлиРавно, "<=");
	ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, "<=");
	ОперацииУсловий.Вставить(ВидСравнения.НеРавно, "<>");
	ОперацииУсловий.Вставить(ВидСравненияКомпоновкиДанных.НеРавно, "<>");
	
	ДопУсловия = "";
	Если ТипЗнч(УсловияВидимости) = Тип("Массив") Тогда
		Для Каждого Условие Из УсловияВидимости Цикл
			ТекТекстУсловия = "";
			ТекОперация = ОперацииУсловий.Получить(Условие.ВидСравнения);
			Если ТекОперация <> Неопределено Тогда
				ТекТекстУсловия = Условие.Реквизит + " " + ТекОперация + " &" + Условие.Реквизит;
			ИначеЕсли Условие.ВидСравнения = ВидСравнения.ВСписке
				Или Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда
				ТекТекстУсловия = Условие.Реквизит + " В(&" + Условие.Реквизит + ")";
			ИначеЕсли Условие.ВидСравнения = ВидСравнения.НеВСписке
				Или Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке Тогда
				ТекТекстУсловия = "НЕ " + Условие.Реквизит + " В(&" + Условие.Реквизит + ")";
			ИначеЕсли Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено Тогда
				// TODO: обработать условие видимости "Заполнено"
			ИначеЕсли Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено Тогда
				// TODO: обработать условие видимости "Не заполнено"
			КонецЕсли;
			Если НЕ ПустаяСтрока(ТекТекстУсловия) Тогда
				ДопУсловия = ДопУсловия + ?(ПустаяСтрока(ДопУсловия), "", " И ") + ТекТекстУсловия;
				Запрос.УстановитьПараметр(Условие.Реквизит, Условие.Значение);
			КонецЕсли; 
		КонецЦикла; 
	КонецЕсли;
	
	Если НЕ ПустаяСтрока(ДопУсловия) Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ДопУсловия", ДопУсловия);
	Иначе 
		Запрос.УстановитьПараметр("ДопУсловия", Истина);
	КонецЕсли; 
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если РезультатЗапроса.Пустой() Тогда
		// нет документов для тестирования :(
		Если НЕ ПустаяСтрока(ДопУсловия) Тогда
			// возможно причина пустого результата в доп.условиях:
			// попробуем без них
			Запрос = Новый Запрос;
			Запрос.Текст = ШаблонТекстаЗапроса;
			Запрос.УстановитьПараметр("ДопУсловия", Истина);
			РезультатЗапроса = Запрос.Выполнить();
		КонецЕсли; 
	КонецЕсли; 
	
	Если НЕ РезультатЗапроса.Пустой() Тогда
		Результат = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка");
	КонецЕсли; 

	Возврат Результат;
	
КонецФункции

Процедура ДобавитьТестыДляДокумента(НаборТестов, МетаОбъект)
	
	// TODO: реализовать возможность указания исключаемых объектов, а то у некоторых документов в менеджере нет процедуры ДобавитьКомандыПечати()
	Попытка
		КомандыПечати = УправлениеПечатью.КомандыПечатиОбъекта(МетаОбъект);
	Исключение
		//Сообщить("Не удалось получить команды печати для документа " + МетаОбъект + ": " + ОписаниеОшибки());
		Возврат;
	КонецПопытки; 
	
	Если КомандыПечати.Количество() = 0 Тогда
		Возврат;
	КонецЕсли; 
	
	НаборТестов.НачатьГруппу("Документ." + МетаОбъект.Имя);
	
	Для Каждого ТекущаяКомандаПечати  Из КомандыПечати Цикл
		СтруктураКоманды = Новый Структура;
		Для Каждого Колонка Из КомандыПечати.Колонки Цикл
			ИмяКолонки = Колонка.Имя;
			СтруктураКоманды.Вставить(ИмяКолонки, ТекущаяКомандаПечати[ИмяКолонки]);
		КонецЦикла; 
		ПараметрыТеста = НаборТестов.ПараметрыТеста(МетаОбъект.Имя, СтруктураКоманды);
		ДопИнфо = "Идентификатор = " + ТекущаяКомандаПечати.Идентификатор;
		Если ТекущаяКомандаПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" Тогда
			ДопИнфо = "Ссылка = " + ТекущаяКомандаПечати.ДополнительныеПараметры.Ссылка + "; " + ДопИнфо;
		КонецЕсли;
		ПредставлениеТеста = МетаОбъект.Имя + ": " + ТекущаяКомандаПечати.Представление + " : " + "{" + ДопИнфо + "}";
		НаборТестов.Добавить("Тест_ПолучитьПечатнуюФорму", ПараметрыТеста, ПредставлениеТеста);
	КонецЦикла; 
		
КонецПроцедуры
	
Процедура ПередЗапускомТеста() Экспорт
	//НачатьТранзакцию();
КонецПроцедуры

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

Процедура Тест_ПолучитьПечатнуюФорму(МетаИмя, КомандаПечати) Экспорт
	
	ДокументыДляПечати = ПолучитьДокументыДляПечати(Метаданные.Документы[МетаИмя], КомандаПечати.УсловияВидимости);
	Если ДокументыДляПечати.Количество() = 0 Тогда
		Возврат;
	КонецЕсли; 
	
	Для Каждого ДокСсылка Из ДокументыДляПечати Цикл
		НачалоСообщенияОбОшибке = "Печать документа " + ДокСсылка + ": ";
		КоллекцияПечатныхФорм = ПолучитьКоллекциюПечатныхФорм(КомандаПечати, ДокСсылка);
		Утверждения.Проверить(ТипЗнч(КоллекцияПечатныхФорм) = Тип("ТаблицаЗначений"), НачалоСообщенияОбОшибке + "Ожидалось, что КоллекцияПечатныхФорм будет иметь тип Таблица значений!");
		Утверждения.Проверить(КоллекцияПечатныхФорм.Количество() > 0, НачалоСообщенияОбОшибке + "Ожидалось, что будет количество элементов в КоллекцияПечатныхФорм будет больше 0!");
		Для Каждого СтрокаТаблицы Из КоллекцияПечатныхФорм Цикл
			ТабДок = СтрокаТаблицы.ТабличныйДокумент;
			Утверждения.Проверить(ТабДок <> Неопределено, НачалоСообщенияОбОшибке + "Ожидалось, что будет получен табличный документ, а получено значение <Неопределено>!");
			Утверждения.Проверить(ТабДок.ВысотаТаблицы > 0, НачалоСообщенияОбОшибке + "Ожидалось, что высота полученного табличного документа будет больше 0!");
		КонецЦикла; 
		
	КонецЦикла; 
	
КонецПроцедуры

Функция ПолучитьКоллекциюПечатныхФорм(КомандаПечати, ДокументДляПечати) 
 
	Результат = Неопределено;
	
	ДокументыДляПечати = Новый Массив;
	ДокументыДляПечати.Добавить(ДокументДляПечати);
	
	Если КомандаПечати.МенеджерПечати = "СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки" 
		И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда
			// печать внешней печатной формы
			ДополнительнаяОбработкаСсылка	= КомандаПечати.ДополнительныеПараметры.Ссылка;
			ПараметрыИсточника				= Новый Структура;
			ПараметрыИсточника.Вставить("ИдентификаторКоманды", КомандаПечати.Идентификатор);
			ПараметрыИсточника.Вставить("ОбъектыНазначения",    ДокументыДляПечати);
			КоллекцияПечатныхФорм			= Неопределено;
			ОбъектыПечати					= Новый СписокЗначений;
			ПараметрыВывода					= Неопределено;
			УправлениеПечатью.ПечатьПоВнешнемуИсточнику(
				ДополнительнаяОбработкаСсылка, 
				ПараметрыИсточника, 
				КоллекцияПечатныхФорм,
				ОбъектыПечати, 
				ПараметрыВывода
			);
			Результат = КоллекцияПечатныхФорм;
	Иначе 
		// печать встроенной печатной формы
		ИмяМенеджераПечати              = КомандаПечати.МенеджерПечати;
		ИменаМакетов					= КомандаПечати.Идентификатор;
		МассивОбъектов					= ДокументыДляПечати;
		ПараметрыПечати					= Новый Структура("ДополнительныеПараметры", КомандаПечати.ДополнительныеПараметры);
		ДопустимыеТипыОбъектовПечати	= Неопределено;
		ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы(
			ИмяМенеджераПечати, 
			ИменаМакетов, 
			МассивОбъектов, 
			ПараметрыПечати, 
			ДопустимыеТипыОбъектовПечати
		);
		Результат = ПечатныеФормы.КоллекцияПечатныхФорм;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции
//}

 

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    171923    964    403    

924

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14434    109    46    

108

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    17319    43    15    

75

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27319    96    48    

138

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11924    45    27    

67

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    191302    1153    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18102    7    32    

42

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1139    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1566 10.08.18 13:14 Сейчас в теме
Очень интересные тесты.

Получились некие практически "дымовые" тесты печатных форм для БСП-конфигураций, верно?
2. q_i 584 10.08.18 20:29 Сейчас в теме
(1) Да, идея была именно такая. Понимаю, что реализация не блещет (в частности, есть есть проблемы с запуском "клиентских" печатных форм, т.к. тест работает на сервере), но несколько ошибок мы у себя уже с помощью этих тестов отловили. Возможно, кому-то другому тоже пригодится.
Оставьте свое сообщение