Автоматическое формирование отчета по качеству кода, используя конфигурацию "Автоматизированная проверка конфигураций"

Обработка позволяет создавать отчет по качеству кода в автоматическом режиме на сервере сборок Jenkins, используя конфигурацию «Автоматизированная проверка конфигураций»

Обработка работает в конфигурации «Автоматизированная проверка конфигураций » версия  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 Тогда
Возврат;
КонецЕсли;

Для Каждого Особенность Из МассивНеактуальныхОсобенностей Цикл
ТаблицаОсобенностей.Удалить(Особенность);
КонецЦикла;

НаборЗаписейОсобенностей = РегистрыСведений.Особенности.СоздатьНаборЗаписей();
НаборЗаписейОсобенностей.Отбор.Конфигурация.Установить(Конфигурация);
НаборЗаписейОсобенностей.Загрузить(ТаблицаОсобенностей);

НаборЗаписейОсобенностей.Записать();

КонецПроцедуры

2 Comments

  1. Stepa86

    1) Путь собственно к базе АПК указывается в строке подключения?

    2) Почему все задается параметрами? Нельзя передавать только ИД конфигурации, которая сохранена и настроена в АПК?

    3) Можешь что нибудь посоветовать для тех, кто в Дженкинсе разбирается примерно так же, как в китайском языке?

    Reply
  2. aleksey_vk

    1 и 2. Обработка позволяет получить отчет ничего не настраивая в конфигурации «Автоматизированная проверка конфигураций». Создали базу. Запустили 1с с нужными параметрами и получили отчет.

    3. Цель публикации как раз в получении отчета в формате html, что бы его можно было прикрепить к результату сборки на jenkins.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *