Генерация сценариев тестирования внешних печатных форм средствами Vanessa Automation

15.06.20

Разработка - Тестирование QA

Предложен способ автоматической генерации сценариев для тестирования внешних печатных форм средствами Vanessa Automation

Файлы

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

Наименование Скачано Купить файл
Генерация сценариев тестирования внешних печатных форм средствами Vanessa Automation:
.cfe 15,95Kb
8 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Для поддержания работоспособности конфигурации необходимо проводить тестирование. В частности, это касается внешних печатных форм. 1С часто переименовывает названия методов в своих общих модулях, после чего внешняя печатная форма становится неработоспособной. Свежий пример: изменение наименования функции с ПолучитьНомерНаПечать() на НомерНаПечать() в общем модуле ПрефиксацияОбъектовКлиентСервер при обновлении ERP на 2.4.12.64. К счастью, нет необходимости вручную формировать все доработанные печатные формы, потому что есть механизмы автоматизации процесса тестирования. Например, Vanessa Automation, которая проводит тестирование по подготовленному скрипту. Но подготовка скрипта тоже отнимает время и силы, и к тому же всегда можно забыть включить в скрипт новую печатную форму. Чтобы автоматизировать создание скриптов и гарантировать, что в базе не появится внешней печатной формы, для которой не будут проводиться тесты, предлагается механизм автоматической генерации скриптов тестирования.

Процедуры генерации размещаются в общем модуле мт_ТестированиеКонфигурации_Служебный. Текст этого модуля:

 

 

#Область ГенераторСценариевТестирования_VanessaAutomation

Функция ТекстФайлаСценариевТестированияПечатныхФорм() Экспорт
	
	//Функция генерирует текст файла сценариев для тестирования средствами Vanessa Automation 
	//Сейчас реализовано для дополнительных печатных форм, планируется сделать для всех модифицированных в расширении печатных форм
	
	ТекстФайлаСценариев = Новый	ТекстовыйДокумент;
	
	ТекстФайлаСценариев.ДобавитьСтроку("#language: ru");
	ТекстФайлаСценариев.ДобавитьСтроку("#encoding: utf-8");
	ТекстФайлаСценариев.ДобавитьСтроку("#Сгенерирован обработкой СоздатьСценарииТестированияПечатныхФорм()");
	ТекстФайлаСценариев.ДобавитьСтроку("");
	ТекстФайлаСценариев.ДобавитьСтроку("Функционал: Проверка печатных форм из дополнительных отчетов и обработок");
	ТекстФайлаСценариев.ДобавитьСтроку("");
	ТекстФайлаСценариев.ДобавитьСтроку("Как Пользователь");
	ТекстФайлаСценариев.ДобавитьСтроку("Я хочу проверить отсутствие синтаксических ошибок в доработанных печатных формах");
	ТекстФайлаСценариев.ДобавитьСтроку("Чтобы ошибки не возникли при работе пользователей");
	ТекстФайлаСценариев.ДобавитьСтроку("");
	ТекстФайлаСценариев.ДобавитьСтроку("Контекст: ");
	ТекстФайлаСценариев.ДобавитьСтроку("	Дано Я запускаю сценарий открытия TestClient или подключаю уже существующий");
	ТекстФайлаСценариев.ДобавитьСтроку("");
	
	СценарииТестирования = ПустаяТаблицаСценариевТестирования();
	
	Запрос = Новый Запрос();
	Запрос.Текст = "ВЫБРАТЬ
	               |	ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка
	               |ИЗ
	               |	Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки
	               |ГДЕ
	               |	ДополнительныеОтчетыИОбработки.Публикация <> ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена)
	               |
	               |УПОРЯДОЧИТЬ ПО
	               |	ДополнительныеОтчетыИОбработки.Наименование";
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		
		ХранилищеОбработки = Выборка.Ссылка.ХранилищеОбработки;
		ДвоичныеДанные = ХранилищеОбработки.Получить();
		ИмяВременногоФайла = ПолучитьИмяВременногоФайла("epf");
		ДвоичныеДанные.Записать(ИмяВременногоФайла);
		ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяВременногоФайла);
		ВнешняяОбработка.ДобавитьСценарииТестирования(СценарииТестирования);
		
	КонецЦикла;
	
	Для Каждого Сценарий Из СценарииТестирования Цикл
		
		ТекстФайлаСценариев.ДобавитьСтроку("");
		ТекстФайлаСценариев.ДобавитьСтроку("Сценарий: " + Сценарий.Наименование);
		ТекстФайлаСценариев.ДобавитьСтроку("");
		Если ЗначениеЗаполнено(Сценарий.Комментарий) Тогда
			ТекстФайлаСценариев.ДобавитьСтроку("	#" + Сценарий.Комментарий);
		КонецЕсли;
		ТекстФайлаСценариев.ДобавитьСтроку("	Когда я открываю навигационную ссылку """ + Сценарий.НавигационнаяСсылка + """");
		
		Для Каждого Команда Из Сценарий.Команды Цикл
			ТекстФайлаСценариев.ДобавитьСтроку("	И я нажимаю на кнопку '" + Команда + "'");
			ТекстФайлаСценариев.ДобавитьСтроку("	Тогда открылось окно '" + Сценарий.ЗаголовокОкнаПечатнойФормы + "'");
			ТекстФайлаСценариев.ДобавитьСтроку("	И Я закрываю окно '" + Сценарий.ЗаголовокОкнаПечатнойФормы + "'");
			ТекстФайлаСценариев.ДобавитьСтроку("	");
		КонецЦикла;
		
	КонецЦикла;
	
	Возврат ТекстФайлаСценариев;
	
КонецФункции

Функция ПустаяТаблицаСценариевТестирования()
	
	ТаблицаСценариев = Новый ТаблицаЗначений;
	ТаблицаСценариев.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)));
	ТаблицаСценариев.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)));
	ТаблицаСценариев.Колонки.Добавить("НавигационнаяСсылка", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)));
	ТаблицаСценариев.Колонки.Добавить("ЗаголовокОкнаПечатнойФормы", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)));
	ТаблицаСценариев.Колонки.Добавить("Команды", Новый ОписаниеТипов("Массив"));
	
	возврат ТаблицаСценариев;
	
КонецФункции

Функция ПроверитьНаличиеСценариевТестирования(ВнешнийОбъект) Экспорт
	
	ТекстСообщенияОбОшибке = "Не указаны сценарии тестирования! См. описание в общем модуле ""мт_ТестированиеКонфигурации_Служебный""";
	
	СценарииТестирования = ПустаяТаблицаСценариевТестирования();
	Попытка
		ВнешнийОбъект.ДобавитьСценарииТестирования(СценарииТестирования);
		Если СценарииТестирования.Количество() = 0 Тогда
			ВызватьИсключение ТекстСообщенияОбОшибке;
		КонецЕсли;
	Исключение
		ВызватьИсключение ТекстСообщенияОбОшибке;
	КонецПопытки;

КонецФункции

#КонецОбласти

 

Данные для генерации скрипта должны быть размещены в процедуре ДобавитьСценарииТестирования() модуля объекта внешней печатной формы:

 

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

Навигационную ссылку объекта информационной базы можно получить через функцию ПолучитьНавигационнуюСсылку. Я вынес вызов этой функции в общую команду мт_ПоказатьНавигационнуюСсылку, и привязал ее вызов к необходимым документам, после чего в форме этих документов появилась соответствующая кнопка:

 

Для генерации скрипта я сделал общую форму "мт_ГенераторСценариевТестирования_VanessaAutomation" с одним полем "Папка скриптов". Вот код этой формы:

 

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

 

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

В результате работы генератора сценариев получается примерно такой файл:

 

 

Вступайте в нашу телеграмм-группу Инфостарт

Vanessa тестирование

См. также

HighLoad оптимизация Тестирование QA Программист 1С 8.3 Бесплатно (free)

Шесть внешних отчётов на боевой базе крупной сети переписали за неделю. По секундомеру ускорились четыре, в акт пошли три: у одного отчёта минус тринадцать процентов оказались выбросом нагрузки прода, а не эффектом кода. Поймал это чередующийся замер до/после в одном окне, обычные три прогона с метрикой "минимум" показывали ускорение уверенно. Дальше в тексте: почему построчная сверка выхода ломается ровно на тех правках, ради которых её заводят; из чего собирается повторяемый слепок результата и почему главную работу в нём делает нормализация, а хеш только сигнализация; где слепок не берётся вовсе и его заменяет по-колоночная сверка; чем проверять пересчёт итогов, чистку данных и операции с кластером. Отдельно - гипотеза, которую замер отклонил, и честный счёт, во что вся эта дисциплина обходится.

вчера в 13:00    176    nedomolkov.ivan    0    

0

Тестирование QA Программист Бесплатно (free)

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

17.08.2026    313    user2181343    0    

1

Тестирование QA Программист 1С 8.3 Россия Бесплатно (free)

Написать тест на 1С несложно. Дорого стоит привести базу в состояние, где прогон вообще стартует: семь шагов, каждый ломает запуск молча — без ошибки, без записи в журнале. И эту цену платит заново каждый новый человек на проекте. Разбираю молчаливый отказ окружения как класс проблем, показываю, почему его не закрывают ни документация, ни скрипт развёртывания, и предлагаю решение — фиксацию состояния в артефакте с машинно-проверяемым критерием приёмки. Подход проверен на сквозной задаче (первая задача экзамена «1С:Специалист по платформе» с юнит- и функциональными тестами), а затем перенесён на пул тестовых баз с типовыми конфигурациями. Отдельно — каталог симптомов и их настоящих причин, который пригодится независимо от инструментария.

13.08.2026    664    chagbig    1    

0

Тестирование QA Программист Бесплатно (free)

Разбираем, как в крупных компаниях регуляторные требования, постмортемы и внутренние ограничения постепенно превращаются в многоуровневую систему инструкций, в которой разработчику все сложнее понять, что и когда нужно проверить. Показываем opensource-сервис внешних проверок для GitLab, который автоматизирует часть этой бюрократии и сводит результат к понятному сигналу: зеленое – все в порядке, красное – нужно обратить внимание на конкретное требование. Объясняем, как такие проверки помогают «сдвинуть влево» контроль задач и снизить риск отказа во внедрении задачи в последний момент перед релизом. А заодно смотрим, может ли связка Autumn + «Вино» + немного разработческого энтузиазма превратить обязательные инструкции в инструмент, который команда сама захочет развивать.

12.08.2026    597    Golovanoff    2    

3

Поиск данных Тестирование QA Программист 1С 8.3 1С 8.5 Бесплатно (free)

Как мы пришли к Юнит-тестированию и почему стоит его использовать. Использование универсальных тестов для проверки работы IS MagicInput в вашей конфигурации.

16.07.2026    1915    Evg-Lylyk    2    

5

Тестирование QA Программист Бесплатно (free)

Tantor Postgres 18 - масштабный релиз СУБД, за которым стоят месяцы тестирования, сотни часов нагрузочных прогонов и десятки исправлений, о которых пользователь никогда не узнает просто потому, что они были найдены и устранены до выхода версии. Александр Симонов, руководитель направления развития 1С в "Тантор Лабс", рассказывает, как устроен процесс тестирования изнутри - почему одного эталонного прогона недостаточно, что делать, когда ванильный PostgreSQL 18 ломает собственные оптимизации, и как Tantor Postgres приближается к той планке, которую MS SQL Server держал годами.

07.07.2026    1345    Tantor    2    

6

Тестирование QA Программист Бесплатно (free)

Юнит-тестирование в 1С – тема, о которой много говорят, но внедряют далеко не везде: для одних это признак зрелой разработки, для других – избыточная формальность или лишняя трата времени. Разбираем, почему классическая пирамида тестирования в 1С часто оказывается перевернутой, какие ограничения накладывает платформа и почему юнит-тесты в реальных проектах нередко смешиваются с интеграционными. Показываем, где юнит-тесты действительно помогают ускорить разработку, упростить проверку логики и повысить качество кода, а где их применение превращается в хрупкую и дорогую поддержку. Отдельно разбираем типичные ошибки: зависимость тестов от данных и окружения, избыточное мокирование, тестирование платформы вместо бизнес-логики и отсутствие негативных кейсов.

29.06.2026    2962    alexandr_yang    6    

12

Тестирование QA Программист 1С:Предприятие 8 Бесплатно (free)

Как мы пришли к использованию Ванессы для автоматизации действий пользователей? Сначала я увидел в интернете лекцию Олега Филиппова про RPA. И когда встал вопрос про автоматизацию небольших процессов, то эта лекция у меня прекрасно соединилась с опытом тестирования программ с помощью Vanessa Automation. Минимум усилий, минимум ручного кода и высокая скорость внедрения. И самое главное, не надо менять программу. А если программа изменится, то алгоритм быстро поправить и дополнить.

19.06.2026    2097    swimdog    3    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Pr-Mex 187 15.06.20 17:48 Сейчас в теме
Спасибо за статью!
2. artbear 1589 18.06.20 09:31 Сейчас в теме
(0) Интересное решение.
В Vanessa-ADD также будет работать.
3. artbear 1589 18.06.20 09:34 Сейчас в теме
(0) Давно размышляю над дымовым тестом печатных форм, без автогенерации.
Несколько лет назад даже в одном платном проекте сделал для компании-заказчика аналогичный дымовой тест на базе Ванесса-АДД, тест кодом, без использования фич.
4. AlexPC 19.06.20 09:14 Сейчас в теме
Для конфигураций на БСП можно обойтись без доработки ВПЧ на первый взгляд.
Данные можно получить из сведений:
Функция ЗаполнитьСценарийТестированияПоДаннымОбработки(СценарииТестирования, СведенияОВнешнейОбработке)
	
	Для Каждого мСтрока Из СведенияОВнешнейОбработке.Назначение Цикл
		
		Запрос = Новый Запрос;
		
		Если СтрНайти(мСтрока, "Документ.") > 0 Тогда
			Запрос.Текст = 
				"ВЫБРАТЬ ПЕРВЫЕ 1
				|	Документ.Ссылка КАК Ссылка,
				|	ПРЕДСТАВЛЕНИЕ(Документ.Ссылка) КАК Представление
				|ИЗ
				|	Документ.АвансовыйОтчет КАК Документ
				|
				|УПОРЯДОЧИТЬ ПО
				|	Документ.Дата УБЫВ";
			
			Запрос.Текст = СтрЗаменить(Запрос.Текст, "Документ.АвансовыйОтчет", мСтрока);
		ИначеЕсли  СтрНайти(мСтрока, "Справочник.") > 0 Тогда
			Запрос.Текст = 
				"ВЫБРАТЬ ПЕРВЫЕ 1
				|	Справочник.Ссылка КАК Ссылка,
				|	ПРЕДСТАВЛЕНИЕ(Справочник.Ссылка) КАК Представление
				|ИЗ
				|	Справочник.Банки КАК Справочник
				|
				|УПОРЯДОЧИТЬ ПО
				|	Справочник.Код УБЫВ";
			
			Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Банки", мСтрока);
		Иначе
			Продолжить;
		КонецЕсли;
		РезультатЗапроса = Запрос.Выполнить();
		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
		Если ВыборкаДетальныеЗаписи.Следующий() Тогда
			
			Сценарий = СценарииТестирования.Добавить();
			Сценарий.Наименование = "Формирование печатной формы """ + СведенияОВнешнейОбработке.Наименование + """ для объекта """ + мСтрока + """";
			Сценарий.Комментарий = ВыборкаДетальныеЗаписи.Представление;
			Сценарий.НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(ВыборкаДетальныеЗаписи.Ссылка);
			Сценарий.ЗаголовокОкнаПечатнойФормы = "Печать документа";
			
			мКоманды = Новый Массив;
			Для Каждого Команда Из СведенияОВнешнейОбработке.Команды Цикл
				мКоманды.Добавить(Команда.Представление);
			КонецЦикла;
			
			Сценарий.Команды = мКоманды;
	
		КонецЕсли;
		
	КонецЦикла;
	
КонецФункции
Показать


а проверку заголовка заменить на проверку имени формы:
	Для Каждого Сценарий Из СценарииТестирования Цикл
		
		ТекстФайлаСценариев.ДобавитьСтроку("");
		ТекстФайлаСценариев.ДобавитьСтроку("Сценарий: " + Сценарий.Наименование);
		ТекстФайлаСценариев.ДобавитьСтроку("");
		Если ЗначениеЗаполнено(Сценарий.Комментарий) Тогда
			ТекстФайлаСценариев.ДобавитьСтроку("	#" + Сценарий.Комментарий);
		КонецЕсли;
		ТекстФайлаСценариев.ДобавитьСтроку("	Когда я открываю навигационную ссылку """ + Сценарий.НавигационнаяСсылка + """");
		
		Для Каждого Команда Из Сценарий.Команды Цикл
			ТекстФайлаСценариев.ДобавитьСтроку("	И я нажимаю на кнопку '" + Команда + "'");
			//ТекстФайлаСценариев.ДобавитьСтроку("	Тогда открылось окно '" + Сценарий.ЗаголовокОкнаПечатнойФормы + "'");
			//ТекстФайлаСценариев.ДобавитьСтроку("	И Я закрываю окно '" + Сценарий.ЗаголовокОкнаПечатнойФормы + "'");
			ТекстФайлаСценариев.ДобавитьСтроку("	Тогда открылась форма с именем  'ОбщаяФорма.ПечатьДокументов'");
			ТекстФайлаСценариев.ДобавитьСтроку("	И Я закрываю текущее окно'");
			ТекстФайлаСценариев.ДобавитьСтроку("	");
		КонецЦикла;
		ТекстФайлаСценариев.ДобавитьСтроку("	И Я закрываю текущее окно'");
		
	КонецЦикла;
Показать


P.S. Понятно, что для красоты нужно докрутить дополнительные проверки - например признак проведения у документов или наличие кода у справочника + игнорирование групп.
5. ipoloskov 165 19.06.20 10:46 Сейчас в теме
(4) дело в том, что печатная форма в общем случае предназначена не для любого первого попавшегося документа. В моем случае есть ряд форм, которые требуют наличия серий в табличной части, определенного покупателя, определенной номенклатуры (у которой есть штрихкод). Поэтому я считаю правильным явно задавать ссылку на объект тестирования.

За подсказку проверки имени формы спасибо. Меня этот момент тоже смущал. Кроме того, кнопку печати тоже лучше искать по наименованию:
И я нажимаю на кнопку с именем 'ПодменюПечатьОбычное_АктОСписанииТоваров_ТОРГ16'

которая будет генерироваться следующим кодом
В процедуре ДобавитьСценарииТестирования:
	мКоманды = Новый Массив;
	Для Каждого Команда Из СведенияОВнешнейОбработке().Команды Цикл
		мКоманды.Добавить(Команда.Идентификатор);
	КонецЦикла;
	
	Сценарий.Команды = мКоманды;

В процедуре ТекстФайлаСценариевТестированияПечатныхФорм:
				ТекстФайлаСценариев.ДобавитьСтроку("	И я нажимаю на кнопку с именем 'ПодменюПечатьОбычное_" + Команда + "'");
Для отправки сообщения требуется регистрация/авторизация