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