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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Наши разработки:
Конструктор прайс-листов (прайс-заказов) для УТ11, КА2, ERP2, УНФ, Розница

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

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

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

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

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

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

Расширенная форма РМК для УТ 11, КА 2, ERP 2

Расширение конфигурации дорабатывает рабочее место кассира (РМК) и добавляет в нее удобные инструменты для просмотра остатков по складам, остатков по ...
Розница: Расширенная форма списка номенклатуры

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

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

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

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

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

  • Спасибо!

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

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

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

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

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

    • Ошибка в том, что препроцессоры должны быть без пробелов вначале, а у вас там видимо пробелы стоят

  • Добрый день
    Что произойдёт, если при &ИзменениеИКонтроль изменить имя одного из входных параметров процедуры?
    Его будет изменять при обновлении и надо будет обратно каждый раз править?
    Можно ли в строке Процедура … () обрамить #Вставкой этот параметр? Или же это будет некорректно с точки зрения использования команд предпроцессора?

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

  • Юзаю пока старое доброе «&Вместо», с этим потому что возникают непонятные ошибки на ровном месте. Пока что разбираться нет времени, но при каждом обновлении релиза базы — расширения слетали в вот этих самых контролируемых процедурах
    Хотя вроде как бы эти процедуры 1С — никами даже и не трогались. Приходилось заново переписывать код в расширение который в #Вставка и #Удаление, и теряется весь смысл этого механизма, с «Вместо» проблем никаких при этом

    • Поддерживаю. У меня тоже при каждом обновлении слетает этот функционал, хотя проверка применимости не ругается. Может есть какой то секрет, что бы все работало при обновлении?)

  • Приведенный пример не будет работать! Любой добавленный символ (в том числе пробелы и переводы строк) вне «тегов» приведет к тому, что расширение будет молча игнорироваться, а выполняться будет оригинальный код. Слово «Контроль» является большим преувеличением. Фактически о проблеме можно узнать только в конфигураторе, запустив проверку возможности применения. Иначе можно думать, что расширение работает (потому что ошибок нет), а оно не работает.

  • Добрый день!
    Хочу предостеречь. На новой работе были проблемы с использованием расширения, где функции правили с аннотацией «ВМЕСТО». Сам понимаете, что последующие обновления текстовку функции(процедуры) могут изменить. В моём случает так и произошло. Но оценил масштаб и стал потихоньку изменять: вместо «ВМЕСТО» стал вставлять «ИзменениеИКонтроль». В течении 5 месяцев потихоньку почти всё вылизал и… в один прекрасный день ВСЁ ЭТО сломалось. Если бы за этот период в расширение не добавлялись новые объекты, то восстановить было бы просто. Сейчас восстановлению не подлежит именно расширение. При входе в форму просто вываливается из конфигуратора. Одно время можно было удалить форму, а вот добавить уже не получалось. Теперь не даёт и удалить.
    Чуть позже нашёл в инете ссылки, где программеры столкнулись с подобным именно используя «ИзменениеИКонтроль». На данный момент перепробовал всё стандартное и не стандартное. Остаётся просить 1С с отсылкой CF.
    Так что не рискуйте пока. У нас проблема остаётся на 18.11.2022

    • Ещё допишу с чем столкнулся на новой работе. Увидел, что формы в расширении старые, так что надо стандартно нажать кнопку «Обновить», но и тут засада. Форма-то обновляется, но вот стили нет и шрифты нет. И при проверке конфигурации расширения выводятся сообщения на:

      — неразрешимые ссылки на цвета
      — неразрешимые ссылки на шрифты
      — неразрешимые ссылки на картинки
      — неразрешимые ссылки на объекты метаданных

      Хотя ведь формы-то обновились на вид корректно

      • Юрий, добрый день!
        Спасибо что делитесь опытом! Он будет полезен другим программистам.

  • Сегодня добрался до этой статьи. А добрался поскольку тоже налетел на ошибку:
    Ошибка применения модуля «Расширение1 Документ………». Текст модуля для метода «ПодготовитьПараметрыПроведения» изменился. Угрохал немало времени на поиск причины. Она оказалась тривиальной: в одном из комментариев (который был заимствован из оригинального кода) я просто добавил пару восклицательных знаков!
    Таким образом даже комментарии, которые за пределами тегов #Вставка и #КонецВставки нельзя добавить/убавить ни одного символа (даже пробел).
    К стати только в этой статье я наконец в явном виде увидел, что между документацией и реальностью есть расхождение — я про «#Вставка и #КонецВставки» и «#Вставить и #КонецВставить».

  • &ИзменениеИКонтроль — это г… полное, не тратье время, пользуйте &Вместо

Добавить комментарий для Роман Отменить ответ

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