Доброго времени суток!
Для сильно измененных конфигураций 1С я разработал универсальный механизм автоматической проверки корректности вызова глобальных функций и процедур основной конфигурации и всех подключенных расширений, который позволит выявить следующие ошибки:
- Метод объекта не обнаружен.
- Недостаточно фактических параметров.
- Слишком много фактических параметров.
Назначение: проверка подготовленного обновления очередного релиза измененной конфигурации и расширений на наличие указанных ошибок.
Цель: исправить потенциальные ошибки при обновлении заранее, а не в срочном порядке динамически обновлять рабочую базу 1С (в том числе с выгоном всех пользователей).
Механизм был протестирован мной на всех основных конфигурациях:
ERP+КА, Бухгалтерия, УТ, ЗУП, УНФ+Розница, ДО.
Даже на стандартных конфигурациях 1С было выявлено около 45 различных ошибок – файл прикреплён к публикации.
Вы можете сами проверить в коде этих конфигураций выявленные ошибки, скачав указанный в файле релиз.
Также механизм был протестирован в достаточно сильно «переписанной» ERP, было выявлено около 70 ошибок.
Механизм реализован в небольшой самописной конфигурации "Проверка конфигураций", которая проверяет по определенной логике любые конфигурации 1С, и стандартные и самописные.
Далее описываю более подробно механизм проверки:
История и причины создания данной проверки:
После очередного обновления на новый релиз переписанной ERP у пользователей стали выходить ошибки:
Пришлось оперативно искать ошибку, исправлять и выполнять динамическое обновление.
Дело в том, что компания 1С в новом релизе перенесла часть процедур и функций для работы с XML в другой глобальный модуль, например функцию «ОбъектXDTOВСтруктуру» перенесли из общего модуля «ИнтеграцияИС» в общий модуль «РаботаСXMLИС». А в нашем дописанном расширении оставался вызов к «старому» глобальному модулю: ИнтеграцияИС.ОбъектXDTOВСтруктуру(...)
Данное перемещение практически невозможно проверить перед обновлением. Ошибки программиста в этом случае нет.
Проблема в том, что 1С НЕ подсвечивает в конфигураторе ошибки в случаях, когда происходит вызов несуществующих экспортных процедур и функций общих модулей и модулей менеджеров (справочников, документов и т.п.).
Помимо этого, 1С так же НЕ проверяет количество параметров вызываемых экспортных функций и процедур. Т.е. в объявлении функции или процедуры может быть указано 2 обязательных параметра, а в вызове быть 1 или 3 параметра, и эту ошибку 1С тоже НЕ подсвечивает в конфигураторе.
У 1С есть стандартный механизм в конфигураторе, меню «Конфигурация» - > «Проверка конфигурации», но он долго ищет, выводит кучу всего лишнего и не даёт нужного результата, не ищет между основной конфигурацией и расширениями. Стандартный механизм выявил лишь несколько ошибок из 70 штук, выявленных при помощи моей проверки.
У меня возникла идея, сделать проверку существования в конфигурации экспортных функций и процедур общих модулей и менеджеров объектов, а так же сравнить количество объявленных и вызываемых параметров.
Для этой цели я сделал свою конфигурацию 1С: "Проверка конфигураций", проверил конфигурацию на обновление, ошибки перенесённой функции "ОбъектXDTOВСтруктуру" были успешно выявлены.
Внешний вид конфигурации "Проверка конфигураций":
Принцип работы и результаты механизма проверки:
-
Файлы проверяемой основной конфигурации и всех расширений выгружаем в файлы на жесткий диск.
-
Разворачиваем конфигурацию "Проверка конфигураций", указываем путь к папке выгруженных файлов.
-
Запускаем обработку "Отобрать процедуры и функции", которая используя регулярные выражения (компонент VBScript.RegExp) отбирает все экспортные функции и процедуры общих модулей и модулей менеджеров объектов и их вызовы и записывает их 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
Ограничения и необходимые системные требования :
- Работает только на Windows, так как использует встроенную компоненту VBScript.RegExp
- Скорость выгрузки файлов и обработки отбора процедур и функций зависит в том числе от конфигурации ПК, тестировалось на 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 Гб)
- При повторном перезаполнении процедур и функций база прибавляет в весе, рекомендую выполнять "сжатие таблиц информационной базы" с опцией "тестирование и исправление", это поможет освободить место на диске.
Мой комментарий по поводу стоимости в 10 SM, дабы избежать вопросов "почему так дорого?"
На данную разработку и всё тестирование я потратил около 3х недель.
Естественно, больше времени ушло на тестирование и определение и исправление нюансов правильного отбора функций и процедур.
10 стартмани это по текущему порядка 150 рублей, т.е. около 1500 рублей, которые нужно еще умудриться вывести из этой системы. Это равносильно примерно 30 минутам работы программиста. Так что у меня ответ один, дорого - не качайте. Если понравилось - можете еще пару раз скачать )))
Если механизм будет востребован, тогда буду и дальше дорабатывать, возможно, появится еще несколько проверок.
Всем добра и обновлений без ошибок !
Проверено на следующих конфигурациях и релизах:
- 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
Вступайте в нашу телеграмм-группу Инфостарт