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

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

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

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

Вызов (с 1 параметром):
ИнтеграцияМОТПУНФ.ЗаполнитьШтрихкоды(ДанныеПоШтрихкодам);
Объявление (с 2-мя параметрами):
Процедура ЗаполнитьШтрихкоды(ДанныеПоШтрихкодам, ИмяКолонкиЗаполнения) Экспорт
2) "Слишком много фактических параметров":
Ошибка:
Вызов (с 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 они уже её исправили:
ПроизводствоСерверПовтИсп.ПараметрыПроизводственногоПодразделения(Подразделение)
Список конфигураций, на которых проверялся механизм:
- ERP Управление предприятием 2 (2.5.22.106)
- Комплексная автоматизация 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)
Механизм проверялся на технологической платформе 1С:
1С:Предприятие 8.3 (8.3.27.1719)
Операционная система:
Windows 10 Pro
Состав архива публикации:
- ПроверкаКонфигураций_v3.0.cf
- Инструкция v3.docx
- Найденные ошибки стандартных конфигураций 1С.xlsx
- Сводная таблица. Длительность выполнения. Количество отобранных функций и процедур.xlsx
- История версий.txt
Ограничения и необходимые системные требования :
- Скорость выгрузки файлов и обработки отбора процедур и функций зависит от конфигурации ПК, тестировалось на Ryzen 5 3600 + 16 GB + HDD, если у вас ПК слабее, скорее всего будет медленнее :) Сохранение основной конфигурации на HDD занимает от 5 до 30 минут, в зависимости от конфигурации.
- Отбор процедур и функций занимает время. Развернутые (чистые) стандартные конфигурации, выгруженные конфигурации в файлы на жесткий диск и заполненные конфигурации "Проверка конфигураций" занимают место на жестком диске.
- ERP = 120 минут / 16,5 Гб (чистая 4 Гб / файлы 8,5 Гб / заполненная 4 Гб)
- КА = 115 минут / 14,9 Гб (чистая 3,9 Гб / файлы 7,1 Гб / заполненная 3,9 Гб)
- Бухгалтерия = 80 минут / 10,6 Гб (чистая 2,2 Гб / файлы 5,4 Гб / заполненная 3 Гб)
- УНФ/Розница = 50 минут / 6,6 Гб (чистая 1,8 Гб / файлы 2,9 Гб / заполненная 1,9 Гб)
- УТ = 40 минут / 5,8 Гб (чистая 2,3 Гб / файлы 1,9 Гб / заполненная 1,6 Гб)
- ЗУП = 40 минут / 3,8 Гб (чистая 1 Гб / файлы 1,5 Гб / заполненная 1,3 Гб)
- ДО = 15 минут / 2,0 Гб (чистая 700 Мб / файлы 600 Мб / заполненная 700 Гб)
На более мощном ПК (i7+SSD) отбор выполнялся в 2 раза быстрей !
- Из проверки намеренно исключены стандартные методы и свойства объектов конфигурации, такие как "добавить", "вставить", "выгрузить", "количество" и так далее. Список исключений прописаны жестко в коде. Допускаю, что мог прописать не все исключения и в будущих релизах они могут встретиться.
- При повторном перезаполнении процедур и функций файловая база прибавляет в весе, рекомендую выполнять "сжатие таблиц информационной базы" с опцией "тестирование и исправление", это поможет освободить место на диске.
Функционал и история версий:
Версия 1 :
1) Для выполнения регулярных выражений используется компонента: VBScript.RegExp, работает только под Windows
2) Предварительная обработка текстов модулей, для того, что бы поиск по шаблону искал правильно:
- заменить "//" в конструкциях "http://" и "https://" в тексте
- удалить все комментарии
- удалить двойные кавычки
- исключить вызовы из конструкции ВызватьИсключение ""
- исключить вызовы из конструкции НСтр("")
- исключить вызовы из конструкции "ИмяПроцедуры = """
- заменить круглые скобки внутри текстовых параметров функций и процедур (для корректного поиска по шаблонам вызовов)
- заменить символы "запятые" и "равно" внутри текстовых параметров функций и процедур (для корректного определения кол-ва параметров и их обязательности)
3) Русификация мест вызовов.
4) Возможность записи отобранных данных в регистр 2-мя способами - полная и частичная.
5) Исключения:
- исключены "стандартные" методы и свойства объектов, типа "количество()", "добавить()", "вставить()".
- для типа вызовов "вызов из общего модуля" исключены вызовы не относящиеся к общим модулям.
- исключены вызовы процедуры/функции из того же общего модуля (для избежания НЕ экспортного вызова).
- исключены вызовы зашифрованных общих модулей и зашифрованных модулей менеджеров объектов.
6) Рекурсивный поиск вложенных друг в друга вызовов функций и процедур (в стандартных конфигурациях используется до 4х уровней вложенности).
Есть информация об уровне вложенности отобранной функции или процедуре. Есть возможность поиска БЕЗ вложенных функций и процедур (быстрее).
7) Отчеты:
- 1) Отсутствующие экспортные процедуры и функции
- 2) Переданных параметров больше, чем всех вместе взятых
- 3) Переданных параметров меньше, чем обязательных
- 4) Различное количество параметров все обязательные
Версия 2
1) Добавлена возможность выполнять регулярные выражения при помощи компоненты: RegEx1CAddin_14 (работает и под Windows и под Linux).
Ссылка для скачивания: Внешняя компонента для выполнения регулярных выражений (автор KAV2)
2) Оптимизирован программный код (повторяющиеся участки кода вынесены в отдельные функции/процедуры).
Версия 3
1) Добавлена возможность автоматической выгрузки в файлы: основной конфигурации и всех расширений в указанный каталог. Т.е. теперь не придётся вручную выгружать каждую конфигурацию в файлы, вся выгрузка и анализ может выполняется при нажатии 1 кнопки. Поддерживается выгрузка как из файловой базы, так и из клиент-серверной.
2) Добавлен вывод информационного окна о текущем статусе обработки - для визуального контроля.
3) Изменен вид основной формы, добавлено сохранение выбранных параметров выгрузки (кроме пароля), изменен макет оформления на "море".
4) Добавлена возможность выполнять регулярные выражения при помощи стандартного функционала 1С.
Мой комментарий по поводу стоимости в 10 SM, дабы избежать вопросов "почему так дорого?"
На данную разработку и всё тестирование я потратил около 3х недель + 2 раза дорабатывал (версия 2 и версия 3).
Естественно, больше времени ушло на тестирование, определение и исправление нюансов правильного отбора функций и процедур.
1 стартмани это по текущему порядка 150 рублей, т.е. 10 SM это около 1500 рублей, которые нужно еще умудриться вывести из этой системы. Это равносильно примерно 30-60 минутам работы программиста, в зависимости от региона. Если для вас дорого - не качайте. Если понравилось - можете еще пару раз скачать )))
Если механизм будет востребован, тогда буду и дальше дорабатывать, возможно, появится еще несколько проверок.
Всем спасибо за внимание !
Жду обратной связи по найденным ошибкам !
Проверено на следующих конфигурациях и релизах:
- 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
Вступайте в нашу телеграмм-группу Инфостарт