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

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

Принцип работы и результаты механизма проверки:
-
Файлы проверяемой основной конфигурации и всех расширений выгружаем в файлы на жесткий диск. Существует 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 расширение, а лучше в основную конфигурацию.

История версий, состав публикации, ограничения, параметры тестирования:
Жду обратную связь: найденные ошибки, был ли полезен инструмент, подкидывайте идеи для поиска новых ошибок :)
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.22.106
- 1С:Комплексная автоматизация 2, релизы 2.5.24.57
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.184.16
- Управление торговлей, редакция 11, релизы 11.5.22.109
- Управление нашей фирмой, редакция 3.0, релизы 3.0.12.185
- Розница, редакция 3.0, релизы 3.0.12.185
- Зарплата и управление персоналом, редакция 3.1, релизы 3.1.35.48
- Документооборот КОРП, редакция 3.0, релизы 3.0.18.19
Вступайте в нашу телеграмм-группу Инфостарт