Описание инструмента: «Анализ конфигураций»
Для сильно измененных конфигураций 1С я разработал универсальный механизм автоматической проверки корректности вызова глобальных функций и процедур основной конфигурации, всех подключенных расширений, отчетов и обработок, который позволит выявить следующие ошибки:
Метод объекта не обнаружен.
Недостаточно фактических параметров.
Слишком много фактических параметров.
Назначение: проверка подготовленного обновления очередного релиза измененной конфигурации и расширений на наличие указанных ошибок, проверка дополнительных отчетов и обработок.
Цель: исправить потенциальные ошибки при обновлении заранее, а не в срочном порядке динамически обновлять рабочую базу 1С (в том числе с выгоном всех пользователей).
Механизм был протестирован мной на всех основных конфигурациях:
ERP+КА, Бухгалтерия, УТ, ЗУП, УНФ+Розница, ДО.
Даже на стандартных конфигурациях 1С было выявлено около 50 различных ошибок.
Также механизм был протестирован в достаточно сильно «переписанной» ERP, было выявлено около 70 ошибок.
Механизм реализован в небольшой самописной конфигурации «Проверка конфигураций», которая проверяет по определенной логике любые конфигурации 1С, и стандартные и самописные, а так же отчеты и обработки.
Далее описываю более подробно механизм проверки:
История и причины создания данной проверки:
После очередного обновления на новый релиз переписанной ERP у пользователей стали выходить ошибки:

Пришлось оперативно искать ошибку, исправлять и выполнять динамическое обновление.
Дело в том, что компания 1С в новом релизе перенесла часть процедур и функций для работы с XML в другой глобальный модуль, например функцию «ОбъектXDTOВСтруктуру» перенесли из общего модуля «ИнтеграцияИС» в общий модуль «РаботаСXMLИС». А в нашем дописанном расширении оставался вызов к «старому» глобальному модулю: ИнтеграцияИС.ОбъектXDTOВСтруктуру(...)
Данное перемещение практически невозможно проверить перед обновлением. Ошибки программиста в этом случае нет.
Проблема в том, что 1С НЕ подсвечивает в конфигураторе ошибки в случаях, когда происходит вызов несуществующих экспортных процедур и функций общих модулей и модулей менеджеров (справочников, документов и т.п.).
Помимо этого, 1С так же НЕ проверяет количество параметров вызываемых экспортных функций и процедур. Т.е. в объявлении функции или процедуры может быть указано 2 обязательных параметра, а в вызове быть 1 или 3 параметра, и эту ошибку 1С тоже НЕ подсвечивает в конфигураторе.
У 1С есть стандартный механизм в конфигураторе, меню «Конфигурация» - > «Проверка конфигурации», но он долго ищет, выводит кучу всего лишнего и не даёт нужного результата, не ищет между основной конфигурацией и расширениями. Стандартный механизм выявил лишь несколько ошибок из 70 штук, выявленных при помощи моей проверки.
У меня возникла идея, сделать проверку существования в конфигурации экспортных функций и процедур общих модулей и менеджеров объектов, а так же сравнить количество объявленных и вызываемых параметров.
Для этой цели я сделал свою конфигурацию1С: «Проверка конфигураций», проверил конфигурацию на обновление, ошибки перенесённой функции «ОбъектXDTOВСтруктуру» были успешно выявлены.
Внешний вид конфигурации "Проверка конфигураций (версия 5)":

Принцип работы и результаты механизма проверки:
Файлы проверяемой основной конфигурации, всех расширений и дополнительные отчеты и обработки выгружаем «в файлы» на жесткий диск. Существует 2 варианта выгрузки: ручная и автоматическая.
Разворачиваем конфигурацию «Проверка конфигураций», указываем путь к папке выгруженных файлов.
Запускаем обработку «Отобрать процедуры и функции», которая используя регулярные выражения (компоненты на выбор: Стандарная 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) Использовать аннотацию "вместо"
Для конфигураций с расширениями я разработал механизм позволяющий:
Провести аудит расширений, который позволит оценить объём доработок и сохранить результат в удобной форме (в файл эксель).Появилась возможность сосчитать: количество новых реквизитов, табличных частей, объектов, форм, модулей, макетов и т.д.
Определить пересекающийся фунционал в разных расширения.
Определить модули, где используется аннотация "вместо" и сравнивать с количеством "продолжить вызов" в этих модулях.
Назначение: помощь в оптимизации количества и качества расширений, сокращение количества ошибок при будующих обновлениях.
Принцип работы: анализируются выгруженные в папку файлы объектов расширений, выбирается состав расширения и отчетами выводятся данные:
6) Отчет "Состав расширений"
Желтым - заимствованные объекты, зеленым - новые.
В ресурсах - количество объектов, реквизитов, табличных частей, макетов, форм, модулей и т.д.

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

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

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

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