Жёлтая тетрадь 📒 Блог программиста 1С 👨‍💻
1K subscribers
41 photos
59 links
В основном небольшие и почти регулярные заметки из будней программиста 1С
Мои инсайты, что-то новое каждый день

@builin
Download Telegram
Расширение методов с контролем &ИзменениеИКонтроль

Замещает текст модуля, контролирует изменение метода в основной конфигурации и помогает обновить блоки исходного кода метода при объединении.

&ИзменениеИКонтроль("ИмяМетода")
Функция Расш1_ИмяМетода()
<исходный код, который не трогаем>
#Удаление
<исходный код, который убираем>
#КонецУдаления
#Вставка
<новый код, который добавляем>
#КонецВставки
<исходный код, который не трогаем>
КонецФункции

Подробнее: ИТС
В Зазеркалье неправильный синтаксис, Зазеркалью верить нельзя

#расширения
Заимствование задействованных реквизитов в расширение

При доработке функциональности объектов мы заимствуем в расширение метод, который будем дорабатывать. Например, заимствуем метод обработчика ОбработкаПроверкиЗаполнения, чтобы добавить проверку заполнения типовых реквизитов - ДатаОтгрузки не может быть меньше ДатаЗаказа.

Для контроля изменения и наличия реквизитов и объектов, задействованных в добавляемой логике, нужно заимствовать эти реквизиты и объекты в расширение. Для примера выше это реквизиты ДатаОтгрузки и ДатаЗаказа. И сделать это программисту нужно самостоятельно.

@yellow_pad | #1С #Расширения
Как расширением сделать функцию экспортной?

Собственно добавить Экспорт нельзя, но можно сделать в расширении новую экспортную функцию, которая будет вызывать исходную.

@yellow_log | #1С #Расширения #ОбщиеМодули
Использование недоступных в расширении событий

Ситуация на скриншоте: не все события ТЧ доступны для использования в расширении. Сделано это было в редакции 8.3.14, чтобы сократить количество заимствованных свойств формы: см. Упрощение работы с расширениями формы в Зазеркалье.

Способ решения - добавить в модуль расширения формы метод нужного обработчика:

&НаКлиенте
Процедура ext_ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)

...

КонецПроцедуры

А в ПриСозданииНаСервере (или в методе программной доработки формы) назначить обработчик события программно:

ЭтаФорма.Элементы.Товары.УстановитьДействие("ПриНачалеРедактирования", "ext_ТоварыПриНачалеРедактирования");

@yellow_pad | #1С #Расширения #Форма #ОбработчикиСобытий
Порядок выполнения кода расширений

Расширения выполняются в порядке приоритетов их назначений. Но это не прямая последовательность выполнения кода, а именно приоритеты применения.

Расширения накрывают друг друга в соответствии с этими приоритетами, создавая новые слои логики. И если, например, в аннотации &После последовательность выполнения - это прямая очередь приоритетов (1-2-3), то в аннотации &Перед - обратная (3-2-1).

@yellow_pad | #1С #Расширения #Аннотации
Заимствование объектов расширения в другое расширение

Такой возможности нет. Что делать, если нужно использовать в реквизите документа одного расширения ссылку на справочник другого расширения?

Программно расширения друг друга видят - можно использовать реквизит с типом УникальныйИдентификатор и программно обработать его заполнение (например из реквизита формы). Это сложно и может нарушить ссылочную целостность, но тоже вариант, если нет других вариантов. Например, когда нельзя добавлять объекты в основную конфигурацию или объединить два расширения в одно.

@yellow_pad | #1С #Расширения