Использование аннотации #ИзменениеИКонтроль в расширениях конфигураций 1С

Что такое аннотации в 1С

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

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

Существующие типы аннотаций

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

  • &Перед: Код в расширении выполняется до основного метода. Например, для дополнительной проверки данных перед стандартной операцией.
  • &После: Код в расширении выполняется после основного метода. Используется для дообработки результата, формирования отчетов и т.д..
  • &Вместо: Метод в расширении полностью заменяет собой стандартный метод. Выполняется только ваш код, а стандартный игнорируется. Важно: если такой метод изменится в новом обновлении конфигурации, ваша замена продолжит работать по-старому, что может привести к ошибкам.
  • &ИзменениеИКонтроль: Этот тип сочетает в себе и замену, и контроль. Метод из расширения тоже заменяет стандартный, но при этом платформа следит за тем, чтобы код вашего расширения не «устарел» относительно новой версии типовой конфигурации.

Аннотация &ИзменениеИКонтроль: точечная модификация с контролем

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

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

Директивы для модицикации:

  • #Удаление / #КонецУдаления обрамляют строки типового кода, которые не должны выполняться. Платформа просто проигнорирует этот фрагмент.
  • #Вставка / #КонецВставки обрамляют ваш новый код, который должен выполняться вместо удаленного фрагмента или в дополнение к существующему.

Контроль при обновлении конфигурации

Это главное преимущество данного подхода. Когда вы обновляете типовую конфигурацию, и нужный вам метод в ней меняется, платформа обнаружит несовпадение между новым кодом конфигурации и тем «слепком», который был сохранен в вашем расширении.

В этом случае конфигуратор:

  1. Поместит расширение в список ошибок.
  2. Предложит действие «Восстановить соответствие».
  3. При согласии разработчика платформа автоматически попытается объединить изменения: обновит базовый код метода из конфигурации, сохранив при этом ваши вставки #Вставка и #Удаление на прежних местах.

Важные особенности и ограничения

  1. Только один обработчик: С одним методом конфигурации может быть связан только один метод расширения, имеющий аннотацию &ИзменениеИКонтроль.
  2. Необходимость строгого форматирования: Изменения должны вноситься строго с использованием директив #Вставка и #Удаление. Добавление или изменение строк вне этих блоков приведет к тому, что расширение перестанет работать.
  3. Тихий отказ при ошибке: Если код расширения для &ИзменениеИКонтроль изменен некорректно (например, есть лишние строки вне спец-директив), платформа молча отключает вашу модификацию и выполняет стандартный метод, не выдавая явных ошибок. Это важно помнить при отладке.

Пример использования

Представим, что в некой конфигурации в одном из общих модулей существует функция, позволяющая проверить верность заполнения номенклатуры по определенным правилам. В целом функция содержит в себе необходимый функционал, но текст проверки выводится не тот, который нужен. Для такого исправления как раз отлично подойдет рассматриваемая аннотация.

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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Отправьте форму и мы вам перезвоним

Отправляя форму вы соглашаетесь с политикой конфиденциальности и даете согласие на обработку персональных данных компании ИП Рыжиченко Антону Ивановичу
Сайт itviar.ru использует cookie для персонализации и хранения настроек.
Отправляя форму вы соглашаетесь с политикой конфиденциальности и даете согласие на обработку персональных данных компании ИП Рыжиченко Антону Ивановичу