Как проконтролировать исчезновение функций общих модулей после обновления конфигурации 1С?

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

Обновление типовых конфигураций 1С, находящихся на поддержке с доработками, — это всегда ответственный процесс. Одной из самых неприятных проблем является внезапное исчезновение или перемещение процедур и функций в общих модулях, которые вы использовали в своих кастомизациях. Часто стандартный синтаксический контроль при сохранении конфигурации не выдает ошибок, и проблема обнаруживается уже пользователем в режиме «1С:Предприятие» в виде критической ошибки «Метод объекта не обнаружен». В этой статье мы подробно разберем, как автоматизировать поиск таких проблем и какие превентивные меры помогут минимизировать риски.

Использование расширенной проверки конфигурации

Разберем основной инструмент, встроенный в «Конфигуратор», который часто игнорируют разработчики. Обычный синтаксический контроль проверяет только текущий модуль на соответствие правилам языка. Для поиска «битых» ссылок на функции в других модулях нам потребуется более глубокий анализ. Выполним следующие шаги:

  1. Откроем меню Конфигурация — Проверка конфигурации.
  2. В появившемся окне обязательно установим флаг Синтаксический контроль.
  3. Внутри настроек синтаксического контроля найдем и включим опцию Расширенная проверка.
  4. Проанализируем дополнительные параметры: важно, чтобы стояли галочки проверки для сервера, внешнего соединения и всех типов клиентов, которые используются в вашей системе.

Именно «Расширенная проверка» позволяет системе сопоставить вызовы процедур в ваших модулях с реальным наличием этих процедур в общих модулях типового решения. Если разработчики 1С удалили функцию или переместили ее в другой модуль, проверка выведет список всех некорректных вызовов. Рассмотрим важный нюанс: если вы используете расширения конфигурации, проверку нужно запускать отдельно для каждого расширения, так как контекст основной конфигурации и расширения разделен.

Соблюдение стандартов разработки БСП

Выясним причину, почему функции вообще исчезают. Согласно стандартам 1С (Библиотека стандартных подсистем), все процедуры и функции делятся на «программный интерфейс» и «внутренние». Разработчики типовых решений гарантируют относительную стабильность только для функций, расположенных в области Программный интерфейс.

Проанализируем структуру типового модуля. Если процедура находится вне этой области, она считается вспомогательной, и её могут удалить или переименовать в любой момент без предупреждения. Посмотрим на пример правильного вызова:


// Безопасный вызов из программного интерфейса
ОбщегоНазначения.СообщитьПользователю("Текст сообщения");

// Опасный вызов внутренней процедуры (может пропасть после обновления)
ОбщегоНазначенияКлиентСервер.СформироватьЗаголовокОшибки_Внутренняя();

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

Стратегия копирования функций против использования типовых

Ситуация с копированием кода в свои модули двоякая. Рассмотрим обе стороны этой медали:

  1. Копирование в свои модули: Обеспечивает стабильность работы вашей доработки. Обновление типовой конфигурации никак не затронет ваш код. Однако, если в типовой функции была исправлена критическая ошибка или изменена законодательная логика, ваш скопированный код останется старым и потенциально неверным.
  2. Использование типовых вызовов: Вы всегда используете актуальную логику от вендора. Но вы становитесь зависимы от имен и расположения методов.

Рекомендуется придерживаться правила: если функция выполняет общую техническую задачу (например, преобразование строки в массив), её можно скопировать. Если функция реализует бизнес-логику (например, расчет налога), лучше использовать типовую и контролировать её наличие после обновлений методами расширенной проверки.

Современные инструменты: 1C:EDT и статический анализ

Если вы хотите перейти на профессиональный уровень разработки, стоит рассмотреть переход на 1C:EDT (Enterprise Development Tools). В отличие от классического конфигуратора, EDT выполняет проверку связей в реальном времени.

Разберем преимущества EDT в контексте нашей проблемы:

Также проанализируем возможности внешних инструментов, таких как BSL Language Server или SonarQube. Эти системы позволяют настроить автоматическую проверку кода (CI/CD). После каждого объединения с новым релизом 1С система автоматически просканирует код и пришлет отчет о появившихся «битых» ссылках, даже если разработчик забыл запустить проверку вручную.

Автоматизированное тестирование

Для критически важных участков системы, где ошибка может привести к остановке работы предприятия, рекомендуется использовать автоматизированные тесты (Unit-тесты). С помощью инструментов, таких как Vanessa-Automation, можно написать простые сценарии проверки вызова ключевых функций.

Посмотрим на пример логики теста:


Процедура Тест_НаличиеТиповойФункции() Экспорт
    // Попытка вызова функции, которая часто пропадает
    Попытка
        Результат = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектСсылка, "ИмяРеквизита");
    Исключение
        ВызватьИсключение "Ошибка: Типовая функция ЗначениеРеквизитаОбъекта недоступна!";
    КонецПопытки;
КонецПроцедуры

Такие тесты запускаются после обновления и сразу выявляют проблемы, которые могли быть пропущены синтаксическим контролем (например, если вызов происходит динамически через Вычислить()).

Работа с аннотациями и расширениями

При использовании расширений часто применяются аннотации &Перед, &После или &Вместо. Это самый хрупкий механизм при обновлениях. Если в типовой конфигурации изменится сигнатура функции (добавится новый параметр), расширение просто не применится.

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

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

Подводя итог, можно сказать, что контроль за целостностью кода — это комплексная задача. Использование Расширенной проверки в сочетании с анализом Update.htm (файла с описанием изменений в релизе) и инструментами автоматизации позволяет свести риск ошибок после обновления к минимуму.

← На главную