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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Остатки в реализации товаров и услуг (УТ11, КА2, ERP2)

Расширение конфигурации добавляет информацию об остатках в табличную часть Товары документа "Реализация товаров и услуг". Для каждой строки в товарах ...
Розница: Просмотр остатка при подборе номенклатуры

Розница: Просмотр остатка при подборе номенклатуры

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

Автоматическое заполнение склада в заказе клиента (УТ11, КА2, ERP2)

При использовании групп складов в заказе клиента после добавления номенклатуры всегда приходится выбирать склад вручную. Это расширение автоматизирует этот процесс ...
Бухгалтерия 3.0: Расширенная форма списка номенклатуры

Бухгалтерия 3.0: Расширенная форма списка номенклатуры

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

Размер таблиц базы данных 1С (для файловых и серверных баз)

Обработка позволяет быстро оценить размер отдельных таблиц базы данных 1С. Работа возможна как с файловой базой, так и с серверной ...

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

  • Спасибо!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • Полностью поддерживаю… Все очень сырое. Может лет через несколько доработают.

  • не надо тут, нормальный механизм, просто не умеете им пользоваться

    • Ну как-же нормальный, если &ИзменениеИКонтроль не работает если в кластере несколько рабочих серверов…

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

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