Как автоматически проверить синтаксис в большом количестве внешних обработок

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При обновлении типовых конфигураций (например, 1С:Бухгалтерия 3.0) разработчики часто сталкиваются с проблемой: в новой версии конфигурации удаляются или переименовываются процедуры и функции в Общих модулях. Если у вас в эксплуатации находятся сотни внешних обработок (.epf) или отчетов (.erf), они могут перестать работать в самый неподходящий момент. Стандартный конфигуратор не позволяет проверить синтаксис сразу во всех внешних файлах автоматически. Разберем, как решить эту задачу эффективно.

Проблема стандартного синтакс-контроля

Рассмотрим ситуацию: вы нажимаете Ctrl+F7 во внешней обработке. Система сообщает, что ошибок не обнаружено. Однако при запуске в режиме Предприятия программа выдает ошибку: «Метод объекта не обнаружен». Это происходит потому, что обычная проверка синтаксиса не всегда анализирует наличие процедур в общих модулях, к которым обращается код обработки. Для качественной проверки требуется Расширенная проверка конфигурации, но она работает преимущественно с объектами, включенными в состав метаданных. Выясним, как обойти это ограничение.

Метод 1. Программный перебор и попытка создания объекта

Самый простой способ быстро отсеять явно нерабочие файлы — написать небольшую обработку, которая будет обходить папку с файлами и пытаться создать их программно. Проанализируем, как это работает. Если в модуле объекта обработки или в процедурах, вызываемых при создании, есть обращения к несуществующим модулям, система вызовет исключение.

Рассмотрим пример кода для обхода файлов:


ВыборкаФайлов = НайтиФайлы(ПутьКПапке, "*.epf");
Для Каждого Файл Из ВыборкаФайлов Цикл
    Попытка
        // Пытаемся создать объект обработки
        ИмяОбработки = ВнешниеОбработки.Создать(Файл.ПолноеИмя, Ложь);
        
        // Чтобы проверить модули форм, нужно перебрать метаданные
        МетаданныеОбъекта = ИмяОбработки.Метаданные();
        Для Каждого ТекущаяФорма Из МетаданныеОбъекта.Формы Цикл
            ИмяФормы = ТекущаяФорма.Имя;
            Попытка
                // Пытаемся получить форму, что вызовет компиляцию её модуля
                ФормаОбъект = ВнешниеОбработки.ПолучитьФорму(Файл.ПолноеИмя, ИмяФормы);
            Исключение
                ЗаписатьВЛог(Файл.Имя + " - Ошибка в форме: " + ИмяФормы + ". " + ОписаниеОшибки());
            КонецПопытки;
        КонецЦикла;
        
    Исключение
        ЗаписатьВЛог(Файл.Имя + " - Критическая ошибка: " + ОписаниеОшибки());
    КонецПопытки;
КонецЦикла;

Важный нюанс: этот метод выявит отсутствие ОбщегоМодуля целиком, но может не заметить отсутствие конкретной функции внутри модуля, если она не вызывается непосредственно при инициализации (например, в ПриСозданииНаСервере). Чтобы проверить наличие всех функций, нам потребуются более продвинутые инструменты.

Метод 2. Использование статического анализа (BSL Language Server)

Современный стандарт разработки в сообществе 1С предполагает использование инструментов статического анализа кода без фактического запуска платформы. Одним из самых мощных инструментов является BSL Language Server. Посмотрим, как применить его для нашей задачи.

  1. Распаковка обработок: Внешние обработки — это бинарные файлы. Чтобы проанализировать их код, нужно перевести их в текстовый вид. Используем утилиту v8unpack или встроенную возможность 1С ВыгрузитьКонфигурациюВФайлы (через временную базу).
  2. Настройка анализатора: Мы указываем анализатору путь к папке с распакованными файлами обработок и, что критически важно, путь к исходному коду вашей основной конфигурации.
  3. Запуск проверки: Анализатор видит все зависимости. Если в модуле внешней обработки встречается вызов ОбщегоНазначения.ПолучитьЗначениеРеквизита(), а в коде основной конфигурации этой функции больше нет, инструмент пометит это как ошибку.

Этот способ позволяет проверить тысячи файлов за считанные минуты, предоставляя отчет в текстовом виде или в формате JUnit, который удобно читать программисту.

Метод 3. Дымовые тесты (Smoke-tests) и Vanessa-Automation

Если мы хотим убедиться, что формы обработок хотя бы открываются, не вызывая аварийного завершения, воспользуемся дымовыми тестами. Инструменты типа Vanessa-Automation позволяют автоматизировать этот процесс.

Проанализируем алгоритм автоматического тестирования:

Преимущество этого метода в том, что он проверяет не только синтаксис, но и работоспособность интерфейсной части. Например, если на форме был размещен реквизит, тип которого удален в новом релизе БП, статический анализ может это пропустить, а дымовой тест — нет.

Метод 4. Массовая загрузка в расширение или конфигурацию

Разберем еще один способ, который предложили участники обсуждения: временно загрузить все обработки в состав конфигурации. Поскольку загружать вручную 1000 штук долго, можно использовать OneScript для автоматизации сборки расширения.

После того как все обработки добавлены в одно временное расширение, мы можем запустить штатную процедуру "Конфигурация -> Проверка конфигурации". Обязательно установите флаг "Проверка логической целостности" и "Поиск некорректных ссылок". Конфигуратор сам проверит все связи между модулями ваших обработок и основной базой. Это самый точный метод, так как он использует внутренние алгоритмы платформы 1С для поиска «битых» вызовов процедур и функций.

Резюме и рекомендации

Выясним, какой путь выбрать в зависимости от ситуации:

  1. Если нужно очень быстро: Используйте скрипт с попыткой создания объекта (Метод 1). Это найдет самые грубые ошибки (удаленные модули).
  2. Для профессиональной поддержки: Настройте BSL Language Server. Это даст вам полный контроль над качеством кода и позволит избежать ошибок при каждом обновлении.
  3. Для проверки интерфейса: Запускайте дымовые тесты через Vanessa-Automation. Это гарантирует, что пользователь как минимум сможет открыть обработку.

Помните, что регулярная проверка внешнего кода — это залог стабильной работы информационной системы, особенно в условиях динамично меняющихся типовых решений 1С.

← На главную