1с изменение и контроль расширение как работает

от admin

Как правильно делать вставки в &ИзменениеИКонтроль?

Опытом научен, что, как бы банально это ни звучало, для &ИзменениеИКонтроль важен каждый пробел. Обычно для вставки в нужное место встаю в конец строки, жму Enter, вставляю #Вставка #КонецВставки и начинаю работать внутри этого молясь. При этом надо молиться, чтобы лишний пробел за пределы этого блока не воткнуть случайно.
Но сейчас все перепробовал — не получается. Вот даже видос записал:
https://i.imgur.com/FvIL8vU.mp4

0:05 — обновляю конфу, заимствованный модуль содержит оригинальную процедуру (cr_НачатьВнесениеДенег)
0:48 — конфа обновлена. Видно, что мы попали в cr_НачатьВнесениеДенег, все хорошо
1:52 — делаем вставку в cr_НачатьВнесениеДенег, применяем изменения
2:39 — изменения внесли. Видно, что отладчик больше не попадает в cr_НачатьВнесениеДенег. Вместо этого мы получили оригинальную НачатьВнесениеДенег
2:57 — нам любезно говорят, что текст модуля изменился, занавес
маразм.

(2) Последняя Розница2
Режим совместимости стоит 8.3.12
При этом в других местах в этой же конфигурации ИзменениеИКонтроль работает прекрасно. И на вставку, и на удаление.

(4) Мне кажется, я уже все перепробовал. Сейчас попробовал (1) — тот же результат =\

(9) В процедурах работает. Функции еще не пробовал в текущей конфе.

Разве ИзменениеИКонтроль упирается в режим совместимости, а не в версию платформы?

1с изменение и контроль расширение как работает

Очень забавная ошибка, т.к. при сохранении конфигурации система о ней не оповещает.

Поэтому, перед тем как применять измененную конфигурацию расширения с использованием аннотации ИзменениеИКонтроль нужно выполнить проверку применения:

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

Оригинал содержит один символ перевода строки

Как я хотел сделать и получил в итоге ошибку

А вот как правильно вставлять

В этом примере в процедуре нужны были изменения в середине, поэтому вопросы почему я не использовал ВызыватьПосле прошу не задавать.

Случайно увидел ссылки на эту страницу на инфостарте и мисте, поэтому решил еще кое-что добавить

Ввиду наличия расширений часто изменяющихся модулей (НДС и прочие) приходится часто искать различия между оригинальными модулями и измененными, по началу юзал два окна в конфигураторе, но там не все видно, теперь для этого я использую Notepad++ с плагином сравнения

Установка плагина:

После чего создаем два пустых файла, в один кидаем оригинал, во второй измененный, Ctrl+Shift+C и он выведет сравнение с подсветкой. Я обычно развожу сам по областям два файла:

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

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

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

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

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

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

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

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

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

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

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

Наши разработки:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать:
Как передать ctrl alt del по rdp

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

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

Добрый день! Привязки функционала к назначению расширения нет. Подробно про назначение можно прочитать тут https://tnsoft.ru/blog/naznachenie-rasshireniya-konfiguratsii-pravilnyj-vybor-varianta/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Остатки и цены в списках номенклатуры

Если Ваш прайс-лист неотличим от остальных — не ожидайте что он принесёт Вам продажи!

Переопределение процедур и функций в расширении конфигурации

Начиная с версии платформы 8.3.9 в расширениях модулей стало доступно переопределение процедур и функций. Для переопределения существуют специальные конструкции (Аннотации) встроенного языка, которые задают порядок вызова методов.

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

&Перед — означает что процедура "РассчитатьОстаткиСвоя" будет выполнена перед вызовом "РассчитатьОстатки".

&После — означает что процедура "РассчитатьОстаткиСвоя" будет выполнена после вызова "РассчитатьОстатки".

&Вместо — означает что процедура "РассчитатьОстаткиСвоя" будет выполнена вместо "РассчитатьОстатки".

Функции отличаются от процедур тем свойством, что могут возвращать значение. Поэтому для функций может
использоваться только анотация &Вместо и метод ПродолжитьВызов().

Комментарии (0)

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

Похожие статьи