Как доработать конфигурацию через расширение в режиме совместимости с версией 8.3.8

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

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

Разберем подробно, почему возникают подобные ограничения, как устроен механизм перехвата в режиме совместимости 8.3.8 и какие существуют пути решения задачи без нарушения типовой поддержки конфигурации.

Причины ограничений расширений в режиме совместимости 8.3.8

Проанализируем архитектуру развития механизма расширений в платформе 1С:Предприятие:

  1. Возможности версии 8.3.8: В этой версии механизм расширений позволял изменять только пользовательский интерфейс — управляемые формы, их реквизиты, элементы и команды. Для управления логикой форм использовались специализированные методы УстановитьВыполнениеОбработчиковСобытия() и УстановитьВыполнениеПослеОбработчиковСобытия(). Внедрение в модули объектов, модули менеджеров, модули наборов записей и общие модули на уровне платформы 8.3.8 не поддерживалось.
  2. Появление аннотаций в 8.3.9: Механизм перехвата серверного кода с помощью директив &Перед, &После и &Вместо для модулей объектов и общих модулей появился только начиная с версии платформы 8.3.9.
  3. Влияние режима совместимости: Если в основной конфигурации включен режим совместимости «Версия 8.3.8», платформа принудительно ограничивает функционал синтаксического анализатора и доступные методы уровнем указанной версии. Попытка применить директивы &Перед или вызвать методы формы в модуле объекта вызовет синтаксическую ошибку компиляции.
  4. Область действия старых методов: Методы УстановитьВыполнениеОбработчиковСобытия() и УстановитьВыполнениеПослеОбработчиковСобытия() предназначены исключительно для контекста управляемых форм в расширении. В модулях объектов они недоступны и никогда не поддерживались.

Вариант 1. Перенос логики в обработчики управляемых форм

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

Рассмотрим порядок действий по шагам:

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

Посмотрим на пример перехвата записи документа в модуле заимствованной формы:


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

Вариант 2. Использование подсистем БСП и внешних обработок

Если бизнес-логику нельзя привязать к интерактивным формам (например, требуется программная обработка данных, групповое проведение или регламентная фоновая задача), рассмотрим альтернативные штатные инструменты Библиотеки Стандартных Подсистем (БСП):

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

Вариант 3. Изменение режима совместимости конфигурации

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

Проанализируем особенности и риски этого подхода:

  1. Включение возможности изменения: Для изменения свойства конфигурации необходимо открыть диалог Настройка поддержки и включить возможность изменения (с сохранением поддержки для всех объектов). Снимать объекты с замка при этом не требуется.
  2. Поведение при обновлении: При установке следующего релиза конфигурации через файл обновления поставщика (.cf) режим совместимости автоматически сбросится на значение, установленное разработчиком конфигурации. Это приведет к ошибке применения расширения при запуске.
  3. Рекомендации вендора: Фирма «1С» не рекомендует вручную менять режим совместимости в рабочих информационных базах типовых конфигураций, так как это может повлиять на транзакционную логику, сериализацию данных и алгоритмы динамических списков. Оптимальным решением является ожидание очередного обновления типовой конфигурации, в котором разработчики официально повысят версию режима совместимости.
← На главную