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

В этой записи подробно разберем использование аннотации &Вместо в общих модулях конфигураций 1С, модулях объектов и их форм. Для начала работы нам потребуется создать расширение конфигурации. Открываем список расширений и добавляем новое расширение. При этом обратите внимание на правильный выбор варианта назначения расширения конфигурации.

Использование аннотации &Вместо в общих модулях

Рассмотрим пример изменения произвольной функции в общем модуле. Совершенно неважно, является функция экспортной или нет. В качестве примера изменим логику функции ДатаСеанса() в модуле ОбщегоНазначенияКлиент (конфигурация Деньги8УчебнаяВерсия). Исходный текст процедуры:

Функция ДатаСеанса() Экспорт Возврат ТекущаяДата() + СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПоправкаКВремениСеанса; КонецФункции

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

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

&Вместо ("ДатаСеанса") Функция ДатаСеансаДоработанная() Экспорт Возврат ТекущаяДата(); КонецФункции

Шаги, которые мы сделали:

  1. Добавили аннотацию &Вместо и в скобках указали имя заменяемой процедуры/функции.
  2. Изменили наименование процедуры/функции.
  3. Изменили логику процедуры/функции на нужную нам.

Все, теперь Вам осталось только обновить конфигурацию базы данных. Теперь при вызове функции ДатаСеанса() вместо нее будет вызвана фукнция ДатаСеансаДоработанная().

Использование аннотации &Вместо в модулях объектов

Чтобы изменить процедуру или функцию в объекте — Вам нужно добавить этот объект в расширение конфигурации. К примеру, Вам нужно изменить логику процедуры ПриЗаписи. В качестве примера будем использовать справочник Валюты. Добавим его в расширение конфигурации:

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

Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; // ДЕНЬГИ // При начальном заполнении справочника валюты учета может и не быть, // следовательно и проверки курсов смысла не имеют ВалютаУчета = Константы.ВалютаУчета.Получить(); Если ЗначениеЗаполнено(ВалютаУчета) Тогда РаботаСКурсамиВалют.ПроверитьКорректностьКурсаНа01_01_1980(Ссылка, ВалютаУчета); Если ДополнительныеСвойства.Свойство("ОбновитьКурсы") Тогда Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда РаботаСКурсамиВалют.ПриОбновленииКурсовВалютВМоделиСервиса(ЭтотОбъект); Иначе ОбновитьКурсВалюты(ЭтотОбъект); КонецЕсли; КонецЕсли; КонецЕсли; // Конец ДЕНЬГИ КонецПроцедуры

Теперь давайте доработаем эту процедуру — добавим аннотацию &Вместо, изменим наименование процедуры и сделаем свою вставку кода:

&Вместо ("ПриЗаписи") Процедура ПриЗаписиДоработанная(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; // ДЕНЬГИ // При начальном заполнении справочника валюты учета может и не быть, // следовательно и проверки курсов смысла не имеют ВалютаУчета = Константы.ВалютаУчета.Получить(); Если ЗначениеЗаполнено(ВалютаУчета) Тогда РаботаСКурсамиВалют.ПроверитьКорректностьКурсаНа01_01_1980(Ссылка, ВалютаУчета); Если ДополнительныеСвойства.Свойство("ОбновитьКурсы") Тогда Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда РаботаСКурсамиВалют.ПриОбновленииКурсовВалютВМоделиСервиса(ЭтотОбъект); Иначе ОбновитьКурсВалюты(ЭтотОбъект); КонецЕсли; КонецЕсли; КонецЕсли; // Конец ДЕНЬГИ // Наш код! Сообщить("Процедура ПриЗаписи изменена!"); // Наш код! КонецПроцедуры

В результате этих простых действий мы полностью оставили логику процедуры ПриЗаписи из типовой конфигурации и дополнили ее своим кодом. После применения изменений к конфигурации БД при записи валюты будет вызываться процедура ПриЗаписиДоработанная().

Использование аннотации &Вместо в формах объектов

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

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

Теперь давайте переопределим событие ПриСозданииНаСервере. Для этого находим это событие в свойствах формы и создаем новое событие. При добавлении нового события выбираем тип вызова — «Вызывать вместо».

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

&НаСервере Процедура Расш1_ПриСозданииНаСервереВместо(Отказ, СтандартнаяОбработка) // Вставить содержимое обработчика. КонецПроцедуры

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

&НаСервере Процедура Расш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)

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

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

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

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

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

5 × один =