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