Перейти к содержанию

5. Добавление подбора в документ

Примечание

Пример обработки событий ПриСозданииНаСервере, ОбработкаКомандыФормы и ОбработкаВыбора

Описание примера#

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

Состав Расширения#

Объекты#

Screenshot

Примечание

Ниже приведены полные тексты модулей Расширения. Код, связанный с обработкой событий, выделен отдельным цветом.

Модуль менеджера обработки#

#Область СлужебныйПрограммныйИнтерфейс

#Область ЕХТ

Функция ПолноеИмя() Экспорт
    Возврат Создать().Метаданные().ПолноеИмя();
КонецФункции

Функция Идентификатор() Экспорт
    Возврат "4E85D010-FA2C-45A6-88B4-88E01AC8226F";
КонецФункции

Функция Сведения(Сведения) Экспорт

    Сведения.Версия = "22.10.08.1";
    Сведения.Подписки = Истина;

    Возврат Истина;

КонецФункции    

Функция ОбработкаОбновления(ТекущаяВерсия, НоваяВерсия, НастройкиОбъекта) Экспорт 
    Возврат Истина;
КонецФункции

#КонецОбласти

Функция Подписки(Подписки) Экспорт

    Издатель = "Документ.РеализацияТоваров.Форма.ФормаДокумента";

    Подписка = Подписки.Добавить();
    Подписка.Издатель   = Издатель;
    Подписка.Событие    = "ПослеПриСозданииНаСервере";
    Подписка.Описание   = "Настройка формы: Добавление кнопки Подбор.";

    Подписка = Подписки.Добавить();
    Подписка.Издатель   = Издатель;
    Подписка.Событие    = "ОбработкаКомандыФормы";
    Подписка.Элемент    = ОписаниеКоманды().Имя;
    Подписка.Описание   = "Открытие формы подбора.";

    Подписка = Подписки.Добавить();
    Подписка.Издатель   = Издатель;
    Подписка.Событие    = "ОбработкаВыбора";
    Подписка.Описание   = "Добавление выбранной номенклатуры.";

    Возврат Истина;

КонецФункции

Функция ЕХТ_ПослеПриСозданииНаСервере(Отказ, СтандартнаяОбработка, СвойстваСобытия) Экспорт

    НастройкаФормы(СвойстваСобытия.Объект);
    Возврат Истина;

КонецФункции    

Функция ОписаниеКоманды() Экспорт

    ОписаниеКоманды = Новый Структура("Имя, Заголовок");
    ОписаниеКоманды.Имя = СтрРазделить(ПолноеИмя(), ".")[1];
    ОписаниеКоманды.Заголовок = НСтр("ru = 'Подбор'");

    Возврат ОписаниеКоманды;

КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура НастройкаФормы(Форма)
    ЕХТ_Форма.ДобавитьКомандуИКнопку(Форма, ОписаниеКоманды(), "ТоварыКоманднаяПанель");
КонецПроцедуры

#КонецОбласти

Модуль формы Подписки#

&НаКлиенте
Функция ЕХТ_ОбработкаКомандыФормы(Команда, СвойстваСобытия) Экспорт

    Если Команда.Имя = Имя() Тогда
        ОткрытьФормуПодбора(СвойстваСобытия.Объект);
    КонецЕсли;

    Возврат Истина;

КонецФункции

&НаКлиенте
Процедура ОткрытьФормуПодбора(Знач ФормаДокумента)

    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("РежимВыбора", Истина);
    ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
    ОткрытьФорму(ПолноеИмяФормыПодбораНоменклатуры(), ПараметрыФормы, ФормаДокумента);

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

&НаКлиенте
Функция ПолноеИмяФормыПодбораНоменклатуры()
    Возврат "Справочник.Номенклатура.Форма.ФормаВыбора";    
КонецФункции

&НаКлиенте
Функция ЕХТ_ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора, СвойстваСобытия) Экспорт

    Если ИсточникВыбора.ИмяФормы = ПолноеИмяФормыПодбораНоменклатуры() Тогда
        ДобавитьНоменклатуру(ВыбранноеЗначение, СвойстваСобытия.Объект);
    КонецЕсли;  

    Возврат Истина;

КонецФункции

&НаКлиенте
Процедура ДобавитьНоменклатуру(Знач Номенклатура, ФормаДокумента)

    НоваяСтрока = ФормаДокумента.Объект.Товары.Добавить();
    НоваяСтрока.Номенклатура = Номенклатура;
    НоваяСтрока.Количество = 1;
    НоваяСтрока.Цена = ЕХТ_Ссылка.ЗначениеРеквизита(Номенклатура, "Цена");

    // Перед пересчетом нужно активизировать добавленную строку.
    ФормаДокумента.Элементы.Товары.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор();

    // Вызов неэкспортной процедуры формы документа.
    ФормаДокумента.ЕХТ_ВыполнитьНаКлиенте("ТоварыЦенаПриИзменении(ЭтотОбъект.Элементы.ТоварыЦена)");

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

&НаКлиенте
Функция Имя()
    Возврат СтрРазделить(ЭтотОбъект.ИмяФормы, ".")[1];
КонецФункции

Результат#

Screenshot