Использование аннотации &ИзменениеИКонтроль на примерах

Давайте разберем пример использования аннотации &ИзменениеИКонтроль (изменение и контроль). Для начала работы Вам потребуется создать расширение конфигурации. Для этого откройте список расширений и добавьте в него новое расширение. При этом обратите внимание на правильный выбор варианта назначения расширения конфигурации.

Возможность использования аннотации ИзменениеИКонтроль появилась начиная с версии платформы 8.3.15. В отличии от аннотаций &Перед, &После, &Вместо ​с помощью аннотации &ИзменениеИКонтроль ​Вы сможете делать точечные вставки в код типовой конфигурации. Основная проблема при изменении кода в больших процедурах и функциях с помощью расширений конфигурации — это постоянный контроль за постоянством этого кода. А в случае, если часть кода изменилась — необходимо сразу обновлять расширение. Использование аннотации &ИзменениеИКонтроль​ частично упрощает обновление расширений — теперь платформа будет контролировать неизменность кода в вынесенной в расширение процедуры. 

Давайте разберем основные вставки, которые Вы можете выполнять в процедурах и функциях с аннотацией &ИзменениеИКонтроль:

  1. Для удаления кода типовой конфигурации Вы используете вставки #Удаление и#КонецУдаления. Таким образом, весь код, который будет обрамлен этими вставками будет игнорироваться при компиляции модуля.
  2. Для добавления своего кода Вы используете вставки #Вставка и #КонецВставки.

Теперь давайте рассмотрим, как добавить процедуру в расширение. Для этого на нужной процедуре кликните правой клавишей мыши и вызовите контекстное меню:

В контекстном меню выберите пункт «Добавить в расширение». Далее выберите «Вызывать вместо (с контролем):

В результате в модуль расширения будет добавлен текст процедуры с обрамлением в аннотацию &ИзменениеИКонтроль:

&ИзменениеИКонтроль("ПредупредитьОбОтсутствииСтрокЗаполняемыхПоFEFO")
Процедура Доп_ПредупредитьОбОтсутствииСтрокЗаполняемыхПоFEFO()
	ТекстПредупреждения = НСтр("ru = 'В табличной части нет товаров, по которым серии можно заполнить по FEFO.'");	

	ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
КонецПроцедуры

Теперь давайте внесем изменения в этот код:

&ИзменениеИКонтроль("ПредупредитьОбОтсутствииСтрокЗаполняемыхПоFEFO")
Процедура Доп_ПредупредитьОбОтсутствииСтрокЗаполняемыхПоFEFO()
	
	#Удаление
	ТекстПредупреждения = НСтр("ru = 'В табличной части нет товаров, по которым серии можно заполнить по FEFO.'");
	#КонецУдаления
	
	#Вставка
	ТекстПредупреждения = НСтр("ru = 'Мой текст предупреждения.'");
	#КонецВставки

	ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
КонецПроцедуры

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

{Дополнение ОбщийМодуль.НоменклатураКлиент.Модуль(5,3)}: Ожидается оператор препроцессора
#<<?>>Удалить (Проверка: Тонкий клиент)

Это значит Вы используете неверные операторы препроцессора. В своих пресс-релизах 1С объявило об одних наименованиях, а сделали по другому). Ну ничего — мы быстро адаптируемся!

Наши разработки:
Расширенная форма списка номенклатуры для УТ11, КА2, ERP2

Расширенная форма списка номенклатуры для УТ11, КА2, ERP2

Расширение конфигурации позволяет выводить остатки по всем необходимым складам, отображать цены номенклатуры в списке и применять различные отборы. После установки ...
Далее
Конструктор прайс-листов (прайс-заказов) для УТ11, КА2, ERP2

Конструктор прайс-листов (прайс-заказов) для УТ11, КА2, ERP2

Расширение позволяет формировать произвольные прайс-листы с выгрузкой в Excel и обратной загрузкой в 1С (после обработки прайс-листа клиентом). Конструктор также ...
Далее
Помощник продаж (расширение для УТ11, КА2, ERP2)

Помощник продаж (расширение для УТ11, КА2, ERP2)

Помощник продаж выполнен в виде расширения конфигурации 1С, которое существенно дополняет возможности стандартного списка номенклатуры, превращая его в полноценное рабочее ...
Далее
Розница: Расширенная форма списка номенклатуры

Розница: Расширенная форма списка номенклатуры

Расширение конфигурации изменяет форму списка номенклатуры и добавляет в него функционал, позволяющий выводить остатки по любому складу, цены номенклатуры и ...
Далее
Контроль минимальной цены в заказах и реализациях (УТ11, КА2, ERP2)

Контроль минимальной цены в заказах и реализациях (УТ11, КА2, ERP2)

Расширение конфигурации позволяет быстро решить проблему продажи товара по цене ниже закупочной или цены себестоимости. Контроль будет работать в разрезе ...
Далее
Удаление записей регистра сведений (универсальная обработка)

Удаление записей регистра сведений (универсальная обработка)

Обработка позволяет по расширенному отбору удалять записи в регистре сведений. Если отбор не задан - будет выполнена полная очистка. Поддерживается ...
Далее

Комментарии 7

  • Спасибо!

  • Есть какое нибудь объяснение почему данная возможность применяется только в процедурах? Мне как раз необходимо доработать функцию, но механизм не работает, хотя на сайте ИТС пример демонстрируется как раз на функции

    • Добрый день, Евгений. Спасибо что обратили на это внимание. Пересмотрели возможность использования аннотации ИзменениеИКонтроль в платформе 8.3.16 — ограничений на использование аннотации в функциях нет. Из справки:
      «Для процедур можно указать один из четырех вариантов аннотаций, а для функций — только &Вместо или &ИзменениеИКонтроль».

  • Спасибо. В расширении с назначением «Дополнение» будет работать?

  • Добрый день. Добавил следующий код в расширение
    #Вставка
    Запрос.УстановитьПараметр(«ОтражатьФактурнуюСтоимость», Ложь);
    #КонецВставки
    При проверке применимости возникает ошибка:
    Ошибка применения модуля «Расширение1 Документ.ГТДИмпорт.МодульМенеджера». Текст модуля для метода «ПодготовитьПараметрыПроведения» изменился
    Я только позаимствовал эту функцию и добавил пару строк. Что еще я делаю не так?

    • Добрый день, Николай. Проверьте внимательно текст доработанной процедуры (функции) — возможно, случайным образом Вы внесли другие изменения. Также возможен вариант некорректного переноса метода в расширение.

Добавить комментарий

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

восемнадцать − пять =