5. Добавление подбора в документ
Примечание
Пример обработки событий ПриСозданииНаСервере, ОбработкаКомандыФормы и ОбработкаВыбора
 
Описание примера
В Конфигурации, в документе "Реализация товаров" отсутствует возможность подбора товаров. Расширение, без заимствования формы документа, добавляет кнопку Подбор, добавляет выбранные товары в табличную часть и пересчитывает суммы. 
Состав Расширения
Объекты

Примечание
Ниже приведены полные тексты модулей Расширения. Код, связанный с обработкой событий, выделен отдельным цветом.
 
Модуль менеджера обработки
|  | #Область СлужебныйПрограммныйИнтерфейс
#Область ЕХТ
Функция ПолноеИмя() Экспорт
    Возврат Создать().Метаданные().ПолноеИмя();
КонецФункции
Функция Идентификатор() Экспорт
    Возврат "4E85D010-FA2C-45A6-88B4-88E01AC8226F";
КонецФункции
Функция Сведения(Сведения) Экспорт
    Сведения.Версия = "22.10.08.1";
    Сведения.Подписки = Истина;
    Возврат Истина;
КонецФункции    
Функция ОбработкаОбновления(ТекущаяВерсия, НоваяВерсия, НастройкиОбъекта) Экспорт 
    Возврат Истина;
КонецФункции
#КонецОбласти
Функция Подписки(Подписки) Экспорт
    Издатель = "Документ.РеализацияТоваров.Форма.ФормаДокумента";
    Подписка = Подписки.Добавить();
    Подписка.Издатель   = Издатель;
    Подписка.Событие    = "ПослеПриСозданииНаСервере";
    Подписка.Описание   = "Настройка формы: Добавление кнопки Подбор.";
    Подписка = Подписки.Добавить();
    Подписка.Издатель   = Издатель;
    Подписка.Событие    = "ОбработкаКомандыФормы";
    Подписка.Элемент    = ОписаниеКоманды().Имя;
    Подписка.Описание   = "Открытие формы подбора.";
    Подписка = Подписки.Добавить();
    Подписка.Издатель   = Издатель;
    Подписка.Событие    = "ОбработкаВыбора";
    Подписка.Описание   = "Добавление выбранной номенклатуры.";
    Возврат Истина;
КонецФункции
Функция ЕХТ_ПослеПриСозданииНаСервере(Отказ, СтандартнаяОбработка, СвойстваСобытия) Экспорт
    НастройкаФормы(СвойстваСобытия.Объект);
    Возврат Истина;
КонецФункции    
Функция ОписаниеКоманды() Экспорт
    ОписаниеКоманды = Новый Структура("Имя, Заголовок");
    ОписаниеКоманды.Имя = СтрРазделить(ПолноеИмя(), ".")[1];
    ОписаниеКоманды.Заголовок = НСтр("ru = 'Подбор'");
    Возврат ОписаниеКоманды;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура НастройкаФормы(Форма)
    ЕХТ_Форма.ДобавитьКомандуИКнопку(Форма, ОписаниеКоманды(), "ТоварыКоманднаяПанель");
КонецПроцедуры
#КонецОбласти
 | 
Модуль формы Подписки
|  | &НаКлиенте
Функция ЕХТ_ОбработкаКомандыФормы(Команда, СвойстваСобытия) Экспорт
    Если Команда.Имя = Имя() Тогда
        ОткрытьФормуПодбора(СвойстваСобытия.Объект);
    КонецЕсли;
    Возврат Истина;
КонецФункции
&НаКлиенте
Процедура ОткрытьФормуПодбора(Знач ФормаДокумента)
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("РежимВыбора", Истина);
    ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
    ОткрытьФорму(ПолноеИмяФормыПодбораНоменклатуры(), ПараметрыФормы, ФормаДокумента);
КонецПроцедуры
&НаКлиенте
Функция ПолноеИмяФормыПодбораНоменклатуры()
    Возврат "Справочник.Номенклатура.Форма.ФормаВыбора";    
КонецФункции
&НаКлиенте
Функция ЕХТ_ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора, СвойстваСобытия) Экспорт
    Если ИсточникВыбора.ИмяФормы = ПолноеИмяФормыПодбораНоменклатуры() Тогда
        ДобавитьНоменклатуру(ВыбранноеЗначение, СвойстваСобытия.Объект);
    КонецЕсли;  
    Возврат Истина;
КонецФункции
&НаКлиенте
Процедура ДобавитьНоменклатуру(Знач Номенклатура, ФормаДокумента)
    НоваяСтрока = ФормаДокумента.Объект.Товары.Добавить();
    НоваяСтрока.Номенклатура = Номенклатура;
    НоваяСтрока.Количество = 1;
    НоваяСтрока.Цена = ЕХТ_Ссылка.ЗначениеРеквизита(Номенклатура, "Цена");
    // Перед пересчетом нужно активизировать добавленную строку.
    ФормаДокумента.Элементы.Товары.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();
    // Вызов неэкспортной процедуры формы документа.
    ФормаДокумента.ЕХТ_ВыполнитьНаКлиенте("ТоварыЦенаПриИзменении(ЭтотОбъект.Элементы.ТоварыЦена)");
КонецПроцедуры  
&НаКлиенте
Функция Имя()
    Возврат СтрРазделить(ЭтотОбъект.ИмяФормы, ".")[1];
КонецФункции
 | 
Результат
