Доброго времени суток!
В составе данной публикации уже 3 инструмента! :
А) Анализ конфигураций на наличие ошибок вызова экспортных функций и процедур общих модулей и модулей менеджеров объектов.
Б) Анализ конфигураций на наличие ошибок обращения к отсутствующим в конфигурации объектам метаданных в модулях и запросах.
В) Анализ состава расширений
Описание инструментов А,Б: "Анализ конфигураций"
Для сильно измененных конфигураций 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()), в стандартных конфигурациях используется до четырех уровней вложенности. -
Обновлено в 6 версии: Так же отбираются объекты метаданных (справочники, документы, регистры и т.п.) и обращения к ним, аналогично записываются в 2 соответствующих регистра сведений.
На основании данных регистров формируются отчеты:
1) Отчет «Отсутствующие экспортные процедуры и функции» т.е. в программном модуле есть вызов, а в общем модуле / модуле менеджера нет такой процедуры или функции по разным причинам: перенесли в другой модуль, закомментировали, переименовали, убрали Экспорт, неудачно обновили (^_^) и т.п.
Отчет позволяет определять следующие ошибки:
"Метод объекта не обнаружен"
При вызове отсутствующей процедуры или функции 1С выдаст ошибку:

3 отчета, которые сравнивают количество параметров:
2) Отчет "Переданных параметров больше, чем всех вместе взятых"
3) Отчет "Переданных параметров меньше, чем обязательных"
4) Отчет "Различное количество параметров все обязательные"
– различается количество параметров в вызове и в объявлении функции и процедуры.
Отчеты позволяют определить 2 ошибки:
1) "Недостаточно фактических параметров":
Ошибка:

Вызов (с 1 параметром):
ИнтеграцияМОТПУНФ.ЗаполнитьШтрихкоды(ДанныеПоШтрихкодам);
Объявление (с 2-мя параметрами):
Процедура ЗаполнитьШтрихкоды(ДанныеПоШтрихкодам, ИмяКолонкиЗаполнения) Экспорт
2) "Слишком много фактических параметров":
Ошибка:
Вызов (с 1 параметром):
Запрос.УстановитьПараметр("ТребующиеДействия", Документы.ТТНВходящаяЕГАИС.ВсеТребующиеДействия(Истина));
Объявление (без параметров):
Функция ВсеТребующиеДействия() Экспорт
Пример одного из отчетов:

Удобной особенностью является вывод в отчете всех мест вызова функций/процедур, т.е. потенциальные ошибки даже не нужно искать глобальным поиском по конфигурациям, всё выводится в отчете. Так же выводятся все ключевые поля для визуального контроля, в данном случае это количество обязательных параметров и количество параметров вызов.
В 4-ой версии конфигурации был добавлен отчет:
5) Сводный отчет по ошибкам (выводит 1-4 отчеты в кратком виде)

В 6-ой версии конфигурации был добавлен отчет:
6) Отчет "Не найден объект метаданных"
Позволяющий определить 3 ошибки:
- Таблица не найдена.

- Неверные параметры.

- Поле объекта не обнаружено.

Данный отчет позволяет находить ошибки при обращении к отсутствующих в конфигурации объектам метаданных.
Объекты становятся "отсутствующими" по двум причинам: 1) Удаляются 2) Переименовываются.
Предположим, в очередном релизе 1С переименовала документ "СведенияОбУдержанномНДФЛ" на "УдалитьСведенияОбУдержанномНДФЛ", а у вас в конфигурации остались следующие обращения к данному документу:
А) Документ используется в запросе, например:
"ВЫБРАТЬ * ИЗ Документ.СведенияОбУдержанномНДФЛ"
При выполнении запроса 1С вызовет ошибку:
"Таблица не найдена Документ.СведенияОбУдержанномНДФЛ"
Для поиска таких ошибок добавлена проверка: "Отобрать использование объектов метаданных в запросах". Запросы анализируются как в модулях, так и в макетах.
Б) Есть вызов метода данного документа, например:
НовыйДок = Документы.СведенияОбУдержанномНДФЛ.СоздатьДокумент();
При выполнении метода 1С вызовет ошибку:
"Поле объекта не обнаружено (СведенияОбУдержанномНДФЛ)"
Для поиска таких ошибок добавлена проверка: "Отобрать использование объектов метаданных в модулях"
Хочу обратить внимание, что в стандартных релизах данные проверки находят "потенциальные ошибки".
Возможны 3 случая:
1) Действительно ошибка.
2) Обращение находится в "защищенном" блоке и не вызывает ошибки (например, проверяется программно существование объекта, перед его вызовом).
3) Обращение выполняется к другой конфигурации, где есть эти объекты, но в текущей конфигурации объектов нет, поэтому попадает в ошибки.
К публикации я прикладываю 2 файла (для ERP и для бухгалтерии), где будут перечислены "стандартные" ошибки релизов, что бы вы их пропускали.
В 6-ой версии конфигурации я добавил логирование хода выполнения обработки:

В 6-ой версии конфигурации я изменил интерфейс:

А так же в 6-ой версии:
4) Добавлена возможность очистить данные - меню "Сервис" -> "Очистить все данные" (обработка с возможность выбора регистров для очистки)
5) Уменьшены строковые длины реквизитов регистров сведений - для уменьшения размера файловой базы, удалось добиться сжатия файловой базы анализа ERP в 3 раза, было около 4 Гб, теперь 1.3 Гб.
Размер оптимизирован в том числе для избежания ошибки файловых баз: "Превышен максимально допустимый размер внутреннего файла" (4/6 Гб)
6) Оптимизирован шаблон отбора вызовов модулей менеджеров. Оптимизирован программный код, в код добавлены дополнительные комментарии. В отчеты добавлены столбцы "номер по порядку" и "конфигурация".
Про "потенциальные ошибки" стандартных релизов 1С:
Результаты проверки 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) Использовать аннотацию "вместо"
Для конфигураций с расширениями я разработал механизм позволяющий:
- Провести аудит расширений, который позволит оценить объём доработок и сохранить результат в удобной форме (в файл эксель).
Появилась возможность сосчитать: количество новых реквизитов, табличных частей, объектов, форм, модулей, макетов и т.д. - Определить пересекающийся фунционал в разных расширения.
- Определить модули, где используется аннотация "вместо" и сравнивать с количеством "продолжить вызов" в этих модулях.
Назначение: помощь в оптимизации количества и качества расширений, сокращение количества ошибок при будующих обновлениях.
Принцип работы: анализируются выгруженные в папку файлы объектов расширений, выбирается состав расширения и отчетами выводятся данные:
7) Отчет "Состав расширений"
Желтым - заимствованные объекты, зеленым - новые.
В ресурсах - количество объектов, реквизитов, табличных частей, макетов, форм, модулей и т.д.

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

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

9) Отчет "Пересечение новых объектов в расширениях"
В примере были добавлены новые реквизиты и в "расширение 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
Вступайте в нашу телеграмм-группу Инфостарт