Реализуем подбор номенклатуры как на рис. 1:
Рисунок 1 — Пример подбора номенклатуры
Программный код формы документа «Заказ покупателя»:
&НаКлиенте Процедура Подбор(Команда) ОткрытьФорму("Обработка.ПодборНоменклатуры.Форма.Форма",, ЭтаФорма,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) АдресВХ = Параметр; Если ИмяСобытия = "ЗаполнитьПоПодбору" Тогда Объект.Номенклатура.Очистить(); ЗаполнитьПоПодборуНаСервере(АдресВХ); КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗаполнитьПоПодборуНаСервере(АдресВХ) НоменклатураТаблицаЗначений = ПолучитьИзВременногоХранилища(АдресВХ); Объект.Номенклатура.Загрузить(НоменклатураТаблицаЗначений); КонецПроцедуры
Открываем форму обработки подбора номенклатуры, в форме должна присутствовать таблица значений с колонками «Флаг» (булево), «Номенулатура» (ссылка);
Программный код формы подбора номенклатуры, оповещение форм:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Запрос = Новый Запрос( "ВЫБРАТЬ | Номенклатура.Ссылка КАК Номенклатура, | ЛОЖЬ КАК Флаг |ИЗ | Справочник.Номенклатура КАК Номенклатура"); НоменклатураТаблицаЗначений.Загрузить(Запрос.Выполнить().Выгрузить()); КонецПроцедуры &НаКлиенте Процедура Перенести(Команда) АдресВХ = ПеренестиСервере(); Оповестить("ЗаполнитьПоПодбору", АдресВХ); ЭтаФорма.Закрыть(); КонецПроцедуры Функция ПеренестиСервере() УдалитьСтроки = НоменклатураТаблицаЗначений.НайтиСтроки(Новый Структура("Флаг", Ложь)); Для каждого Строка Из УдалитьСтроки Цикл НоменклатураТаблицаЗначений.Удалить(Строка); КонецЦикла; Возврат ПоместитьВоВременноеХранилище(НоменклатураТаблицаЗначений.Выгрузить()); КонецФункции
Спасибо за статью. Помогли разобраться с оповещением.