Обработка работает в конфигурации «Автоматизированная проверка конфигураций » версия 1.1.12.26 (c более ранними работать не будет).
Как пользоваться конфигурацией читайте здесь. В публикации будут описана только работа с обработкой.
Подготовительный этап:
- В регистре «Особенности» в измерении «Объект» хранится путь до проверяемого объекта, если в конфигурации есть форма с именем «ПоддержкаИОбслуживание» и команда с таким же именем, особенности формы игнорируются. Для исправления нужно изменить процедуру » АктуализироватьОсобенности» в модуле документа » ПроверкаВерсии » (1С обещала исправить в следующем релизе). Код приведен в конце статьи.
Инструкция по работе с обработкой:
Параметры обработки (англоязычный вариант используется в пакетном запуске):
- «Путь к базе / Base» (обязательный) — путь к файловой базе 1с, которую хотите проверить,
- «Путь к словарю / Vocabulary» — путь к словарю, где хранится слова-исключения для проверки орфографических ошибок (формат файла совпадает с форматом, который использует конфигурация при выгрузке регистра «ВерныеСлова»),
- «Путь к особенностям / Specificity» — путь к файлу с особенностями (формат отличается от принятого в конфигурации из-за ошибки с сохранением поля «Уточнение» и для уменьшения размера),
- «Путь к требованиям / Requirements» и «Путь к требованиям исключениям / IgnoreRequirements» — путь к файлам с описанием требований, которые хотим чтобы проверялись. Формат файла — текстовый файл, кодировка UTF8 с наименованием требования, разделитель перевод строки. Сначала программа пытается прочитать требования, если их нет, то читает все требования за исключением требований-исключений и требований, в которых есть этап «ВыполнитьПлатформеннуюПроверкуКонфигурации»,
- «Путь к платформе / Path» — путь к папке, где лежит 1cv8.exe, если не указывать, то использует версию платформы, в которой запущена конфигурации «Автоматизированная проверка конфигураций«.
- «Путь к объектам / Object» — путь к файлу с указанием объектов, которые нужно проверять. Формат файла — текстовый файл, кодировка UTF8, разделитель перевод строки, нужно писать строки следующего вида «cf/DataProcessors/ЖурналРегистрации», программа берет только имя объекта, т.е. ЖурналРегистрации.
- «Путь к объектам исключениям / IgnoreObject» — путь к файлу с указанием объектов, которые проверять не надо. Формат файла — текстовый файл, кодировка ANSI, разделитель перевод строки, писать нужно имя объекта как оно выводится при платформенной проверки конфигурации, например «Обработка.Запросник2_0».
- Report — путь до отчета, который получается после проверки. В интерактивном режиме параметр отсутствует.
Для создания файла с особенностями нужно заполнить регистр «Особенности» как с помощью средств конфигурации так и с помощью кнопки «Добавить особенность» на закладке «Добавление особенностей». После заполнения нужно нажать кнопку «Сохранить особенности в файл»
Для пакетного запуска нужно в командной строке указать запуск 1с в режиме предприятия в толстом клиенте с открытием обработки RunnerAcc.epf и с передачей параметров запуска (формат: имя параметра = значение, разделитель точка с запятой), например: «C:Program Files (x86)1cv88.3.8.2137in1cv8.exe» ENTERPRISE /IBConnectionString File=ACC /RunModeOrdinaryApplication /Execute «RunnerAcc.epf» /C «Base=base;Report=Report.html»
Для вывода отчета в Jenkins используется плагин HTML Publisher plugin, в резульатет получится отчет в html .
P.S. Публикация получилось немного скомканной, поэтому пишите в комментариях не очевидные вещи. Обработка писалась для себя, поэтому если будет интерес и потребуется доработка, готов поправить.
P.P.S. Патч процедуры в тексте статьи не хотел приводить, но Инфостарт запрещает делать файлы бесплатными для скачивания, поэтому пришлось добавить.
Процедура АктуализироватьОсобенности(НайденныеОшибки)
ЗапросПоОсобенностям = Новый Запрос;
ЗапросПоОсобенностям.Текст = "
|ВЫБРАТЬ
| Особенности.*
|ИЗ
| РегистрСведений.Особенности КАК Особенности
|ГДЕ
| Особенности.Конфигурация = &Конфигурация";
ЗапросПоОсобенностям.УстановитьПараметр("Конфигурация", Конфигурация);
ТаблицаОсобенностей = ЗапросПоОсобенностям.Выполнить().Выгрузить();
КоличествоОсобенностей = ТаблицаОсобенностей.Количество();
Если КоличествоОсобенностей = 0 Тогда
Возврат;
КонецЕсли;
МассивНеактуальныхОсобенностей = Новый Массив;
ЗапросПоОбъектам = Новый Запрос;
ЗапросПоОбъектам.Текст = "
|ВЫБРАТЬ
| СтруктураКонфигурации.Ссылка КАК Ссылка,
| СтруктураКонфигурации.Путь КАК Путь
|ИЗ
| Справочник.СтруктураКонфигурации КАК СтруктураКонфигурации
|ГДЕ
| СтруктураКонфигурации.Владелец = &Владелец
| И СтруктураКонфигурации.Путь В(&Путь)";
ЗапросПоОбъектам.УстановитьПараметр("Владелец", Версия);
ЗапросПоОбъектам.УстановитьПараметр("Путь", ТаблицаОсобенностей.ВыгрузитьКолонку("Объект"));
ТаблицаОбъектов = ЗапросПоОбъектам.Выполнить().Выгрузить();
ТаблицаОбъектов.Индексы.Добавить("Путь");
СтруктураОтбораПоПути = Новый Структура("Путь");
Для Каждого Особенность Из ТаблицаОсобенностей Цикл
#Если Клиент Тогда
ОбработкаПрерыванияПользователя();
#КонецЕсли
Ошибка = Особенность.Ошибка;
// Проверяем, что ошибка особенности есть в выбранных требованиях, если нет, то оставляем особенность.
Если НЕ МассивСодержитЗаписьОшибки(ОбнаруживаемыеОшибки, Ошибка) Тогда
Продолжить;
КонецЕсли;
// Если данные о платформенной проверке не собраны, то оставляем особенность по платформенной проверке.
Если МассивСодержитЗаписьОшибки(ОшибкиПлатформеннойПроверки, Ошибка) Тогда
Продолжить;
КонецЕсли;
Уточнение = Особенность.Уточнение;
ОсобенностьАктуальна = Ложь;
// Ищем все объекты в таблице по одному пути, т.к. путь может совпадать, например, для формы и команды.
СтруктураОтбораПоПути.Вставить("Путь", Особенность.Объект);
МассивОбъектов = ТаблицаОбъектов.НайтиСтроки(СтруктураОтбораПоПути);
Для Каждого ЭлементОбъекта Из МассивОбъектов Цикл
Отбор = Новый Структура;
Отбор.Вставить("Ошибка", Ошибка);
Отбор.Вставить("Объект", ЭлементОбъекта.Ссылка);
Отбор.Вставить("Уточнение", Уточнение);
ОшибкиСОбщимиОсобенностями = НайденныеОшибки.НайтиСтроки(Отбор);
Если ОшибкиСОбщимиОсобенностями.Количество() > 0 Тогда
ОсобенностьАктуальна = Истина;
Прервать;
КонецЕсли;
// Уточнение в найденных ошибках может быть сокращено, повторяем поиск.
Отбор.Вставить("Уточнение", СокрЛП(Уточнение));
ОшибкиСОбщимиОсобенностями = НайденныеОшибки.НайтиСтроки(Отбор);
Если ОшибкиСОбщимиОсобенностями.Количество() > 0 Тогда
ОсобенностьАктуальна = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
// Если особенность не актуальна, то добавим ее в массив для удаления особенностей.
Если НЕ ОсобенностьАктуальна Тогда
МассивНеактуальныхОсобенностей.Добавить(Особенность);
КонецЕсли;
КонецЦикла;
// Если нет неактуальных особенностей, то выходим.
Если МассивНеактуальныхОсобенностей.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для Каждого Особенность Из МассивНеактуальныхОсобенностей Цикл
ТаблицаОсобенностей.Удалить(Особенность);
КонецЦикла;
НаборЗаписейОсобенностей = РегистрыСведений.Особенности.СоздатьНаборЗаписей();
НаборЗаписейОсобенностей.Отбор.Конфигурация.Установить(Конфигурация);
НаборЗаписейОсобенностей.Загрузить(ТаблицаОсобенностей);
НаборЗаписейОсобенностей.Записать();
КонецПроцедуры
1) Путь собственно к базе АПК указывается в строке подключения?
2) Почему все задается параметрами? Нельзя передавать только ИД конфигурации, которая сохранена и настроена в АПК?
3) Можешь что нибудь посоветовать для тех, кто в Дженкинсе разбирается примерно так же, как в китайском языке?
1 и 2. Обработка позволяет получить отчет ничего не настраивая в конфигурации «Автоматизированная проверка конфигураций». Создали базу. Запустили 1с с нужными параметрами и получили отчет.
3. Цель публикации как раз в получении отчета в формате html, что бы его можно было прикрепить к результату сборки на jenkins.