Описание инструмента: «Анализ конфигураций»

Для сильно измененных конфигураций 1С я разработал универсальный механизм автоматической проверки корректности вызова глобальных функций и процедур основной конфигурации, всех подключенных расширений, отчетов и обработок, который позволит выявить следующие ошибки:

  1. Метод объекта не обнаружен.

  2. Недостаточно фактических параметров.

  3. Слишком много фактических параметров. 

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

Цель: исправить потенциальные ошибки при обновлении заранее, а не в срочном порядке динамически обновлять рабочую базу 1С (в том числе с выгоном всех пользователей).

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

ERP+КА, Бухгалтерия, УТ, ЗУП, УНФ+Розница, ДО.

Даже на стандартных конфигурациях 1С было выявлено около 50 различных ошибок.

Также механизм был протестирован в достаточно сильно «переписанной» ERP, было выявлено около 70 ошибок.

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

Далее описываю более подробно механизм проверки:

История и причины создания данной проверки:

После очередного обновления на новый релиз переписанной ERP у пользователей стали выходить ошибки:

 

Пришлось оперативно искать ошибку, исправлять и выполнять динамическое обновление.
Дело в том, что компания 1С в новом релизе перенесла часть процедур и функций для работы с XML в другой глобальный модуль, например функцию «ОбъектXDTOВСтруктуру» перенесли из общего модуля «ИнтеграцияИС» в общий модуль «РаботаСXMLИС». А в нашем дописанном расширении оставался вызов к «старому» глобальному модулю: ИнтеграцияИС.ОбъектXDTOВСтруктуру(...)

Данное перемещение практически невозможно проверить перед обновлением. Ошибки программиста в этом случае нет.

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

Помимо этого, 1С так же НЕ проверяет количество параметров вызываемых экспортных функций и процедур. Т.е. в объявлении функции или процедуры может быть указано 2 обязательных параметра, а в вызове быть 1 или 3 параметра, и эту ошибку 1С тоже НЕ подсвечивает в конфигураторе.

У 1С есть стандартный механизм в конфигураторе, меню «Конфигурация» - > «Проверка конфигурации», но он долго ищет, выводит кучу всего лишнего и не даёт нужного результата, не ищет между основной конфигурацией и расширениями. Стандартный механизм выявил лишь несколько ошибок из 70 штук, выявленных при помощи моей проверки.

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

Для этой цели я сделал свою конфигурацию1С: «Проверка конфигураций», проверил конфигурацию на обновление, ошибки перенесённой функции «ОбъектXDTOВСтруктуру» были успешно выявлены.

Внешний вид конфигурации "Проверка конфигураций (версия 5)":

Принцип работы и результаты механизма проверки:

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

  2. Разворачиваем конфигурацию «Проверка конфигураций», указываем путь к папке выгруженных файлов.

  3. Запускаем обработку «Отобрать процедуры и функции», которая используя регулярные выражения (компоненты на выбор: Стандарная 1С / VBScript.RegExp / RegEx1CAddin_14) отбирает все экспортные функции и процедуры общих модулей и модулей менеджеров объектов и их вызовы и записывает их 2 соответствующих регистра сведений.
    Вызовы отбираются, в том числе, вложенные друг в друга, например функция2(функция1()), в стандартных конфигурациях используется до четырех уровней вложенности.

На основании данных этих двух регистров формируются отчеты:

1) Отчет «Отсутствующие экспортные процедуры и функции» т.е. в программном модуле есть вызов, а в общем модуле / модуле менеджера нет такой процедуры или функции по разным причинам: перенесли в другой модуль, закомментировали, переименовали, убрали Экспорт, неудачно обновили (^_^) и т.п.

Отчет позволяет определять следующие ошибки:

"Метод объекта не обнаружен"

При вызове отсутствующей процедуры или функции 1С выдаст ошибку:

3 отчета, которые сравнивают количество параметров:

2) Отчет "Переданных параметров больше, чем всех вместе взятых"

3) Отчет "Переданных параметров меньше, чем обязательных"

4) Отчет "Различное количество параметров все обязательные"

 – различается количество параметров в вызове и в объявлении функции и процедуры.

Отчеты позволяют определить 2 ошибки:


1) "Недостаточно фактических параметров":
Ошибка:

Вызов (с 1 параметром):

ИнтеграцияМОТПУНФ.ЗаполнитьШтрихкоды(ДанныеПоШтрихкодам);

Объявление (с 2-мя параметрами):

Процедура ЗаполнитьШтрихкоды(ДанныеПоШтрихкодам, ИмяКолонкиЗаполнения) Экспорт

 

2) "Слишком много фактических параметров":
Ошибка:

Вызов (с 1 параметром):

Запрос.УстановитьПараметр("ТребующиеДействия", Документы.ТТНВходящаяЕГАИС.ВсеТребующиеДействия(Истина));

Объявление (без параметров):

Функция ВсеТребующиеДействия() Экспорт

Пример одного из отчетов:

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

В 4-ой версии конфигурации был добавлен отчет:

5) Сводный отчет по ошибкам (выводит 1-4 отчеты в кратком виде)

 

Результаты проверки 8-ми стандартных конфигураций 1С я поместил в состав публикации, файлы называется «Найденные ошибки стандартных конфигураций 1С». Выявлено 48 потенциальных ошибок. У меня не было цели проверить за 1С вызовы, я лишь демонстрирую то, что по определенному алгоритму эти вызовы не соответствуют объявлениям функций и процедур.

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

Хочу обратить внимание, что механизм проверки выводит ПОТЕНЦИАЛЬНЫЕ ошибки, и не факт, что они вообще будут вызваны в процессе работы.

Я встречал обработчики, у которых кнопка на форме имела видимость Ложь, т.е. не отображалась на форме.

Т.е. в обработчике есть ошибка, но он не вызывается.

Или, например, в коде стандартных релизов встречается следующее:

1) Проверка существование отчета перед вызовом:
Отчеты.РегламентированноеУведомлениеИсключениеПроверки.ПолучитьНазваниеОргана

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

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

2) Вызов в безопасном режиме:
РегламентированнаяОтчетностьПереопределяемый.ИПИспользуетТрудНаемныхРаботников

Исключение
			ОбщегоНазначения.ВыполнитьВБезопасномРежиме("Параметры.ИПИспользуетТрудНаемныхРаботников = РегламентированнаяОтчетностьПереопределяемый.ИПИспользуетТрудНаемныхРаботников(Параметры.Организация)", ПараметрыБР); //BRO118
		КонецПопытки;

Т.е. вызывается несуществующая функция, но в безопасном режиме, поэтому ошибки не будет.

Механизм проверки позволяет выявить такие случаи как опечатки: в данном случае специалисты 1С забыли запятую при вызове:
БюджетнаяОтчетностьВыводСервер.Подключаемый_ПересчитатьПоКурсу

В том же модуле аналогичные вызовы, но уже С ЗАПЯТОЙ:


Также хочу привести пример, выявленной мной ошибки в релизе ERP 2.5.17 и исправленной в релизе 2.5.22 компанией 1С:
Общий модуль: ПроизводствоСерверПовтИсп
Функция: ПараметрыПроизводственногоПодразделения
Место вызова: Обработки\ПомощникИсправленияОстатковТоваровОрганизаций\Формы\ОсновнаяФорма
Текст вызова в 2.5.17: 

ПроизводствоСерверПовтИсп.ПараметрыПроизводственногоПодразделения()

Т.е. вызывается БЕЗ параметров.
А вот в объявлении функции есть 1 обязательный параметр – это Подразделение:

ПараметрыПроизводственногоПодразделения(Подразделение) Экспорт

А в релизе 2.5.22 они уже её исправили:

ПроизводствоСерверПовтИсп.ПараметрыПроизводственногоПодразделения(Подразделение)

Описание инструмента: «Анализ состава расширений»

Предлагаю ознакомиться с несколькими полезными статьями на тему расширений:

Расширения 1С - Когда стоит использовать и чего остерегаться

О расширениях замолвите слово...

Как выжить, если у тебя в базе 1С 50+ расширений

Т.е. при работе с раширениями не рекомендуется:

1) Добавлять новые объекты в расширения.

2) Делать пересечение изменений объекта в разных расширениях.

3) Использовать аннотацию "вместо" 

Для конфигураций с расширениями я разработал механизм позволяющий:

  1. Провести аудит расширений, который позволит оценить объём доработок и сохранить результат в удобной форме (в файл эксель).Появилась возможность сосчитать: количество новых реквизитов, табличных частей, объектов, форм, модулей, макетов и т.д.

  2. Определить пересекающийся фунционал в разных расширения.

  3. Определить модули, где используется аннотация "вместо" и сравнивать с количеством "продолжить вызов" в этих модулях.

Назначение: помощь в оптимизации количества и качества расширений, сокращение количества ошибок при будующих обновлениях.

Принцип работы: анализируются выгруженные в папку файлы объектов расширений, выбирается состав расширения и отчетами выводятся данные:

6) Отчет "Состав расширений"

Желтым - заимствованные объекты, зеленым - новые.

В ресурсах - количество объектов, реквизитов, табличных частей, макетов, форм, модулей и т.д.

 

Подсвечивается оранжевым когда количество в модуле "вместо" НЕ РАВНО количеству "продолжить вызов"

 

7) Отчет "Пересечение функционала в расширениях".

В данном примере макет изменили сразу в 3х разных расширениях, а форму+модуль формы изменили в 2х разных расширениях.

 

8) Отчет ��Пересечение новых объектов в расширениях»

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

Скачать конфигурацию можно по ссылке:
Анализ конфигураций, расширений, отчетов и обработок на наличие ошибок (версия 5). Анализ состава расширений.

Жду обратную связь: найденные ошибки, был ли полезен инструмент, подкидывайте идеи для поиска новых ошибок :-)