Имя: Пароль:
1C
1С v8
Как реализовать подбор номенклатуры во внешней обработке на управляемых формах?
0 Saari
 
21.08.20
08:31
Есть обработка с табличной частью "Товары" содержащей 2 реквизита: "Наименование", "Количество".
На форме обработки есть кнопка "Подбор".
Пытаюсь сделать подбор номенклатуры в табличную часть по аналогии с подбором в документах: "Реализация товаров и услуг", "Перемещение товаров".
В команде кнопки "Подбор" написал следующее:

&НаКлиенте
Процедура КомандаПодбор(Команда)
    
  ПараметрыПодбора = Новый Структура;
  ПараметрыПодбора.Вставить("ЕстьКоличество"    , Истина);
  ПараметрыПодбора.Вставить("ИмяТаблицы"        , "Товары");
  ПараметрыПодбора.Вставить("ЗакрыватьПриВыборе", Ложь);
  ПараметрыПодбора.Вставить("МножественныйВыбор", Истина);
  ПараметрыПодбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы);
  ОткрытьФорму("Обработка.ПодборНоменклатуры.Форма.Форма", ПараметрыПодбора,
             ЭтаФорма, ЭтаФорма.УникальныйИдентификатор);

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

Форма открывается, выбор номенклатуры с указанием количества происходит.
Но по кнопке "Перенести в документ" выбранная номенклатура не переносится в табличную часть моей обработки.
Что и как сделать, чтобы выбранная номенклатура переносилась в табличную часть обработки?
Помогите, пожалуйста.
1 Галахад
 
гуру
21.08.20
08:39
(0) Почитай про ОбработкаВыбора.
2 FIXXXL
 
21.08.20
08:39
(0) ну посмотри как в типовых доках реализовано
ЕМНИП через ОбработкаВыбора, т.е. ответ от формы подбора разбирать надо в форме твоей обработки
3 Saari
 
21.08.20
09:09
(2) Посмотрел документ "РеализацияТоваровУслуг" и прошелся отладчиком.
В процедуре "ОбработкаВыбора()" вызвываются процедуры, в которой есть строка: ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресПодобраннойНоменклатурыВХранилище);
У себя в обработке создал процедуру "ОбработкаВыбора()" и в ней написал эту строку.
Получаю сообщение об ошибке:
Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища)
    ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресПодобраннойНоменклатурыВХранилище);
по причине:
Ошибка получения значения из временного хранилища
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.2/mngsrv/ws}response    Форма: Элемент    Тип: {http://v8.1c.ru/8.1/data/core}ValueTable

Причем в ВыбранноеЗначение.АдресПодобраннойНоменклатурыВХранилище значение заполнено.
4 Saari
 
21.08.20
09:11
кажется понял. Исправляю...
5 Saari
 
21.08.20
09:20
УРА! Реализовал.
&НаКлиенте
Процедура КомандаПодбор(Команда)
    
    ПараметрыПодбора = Новый Структура;
    ПараметрыПодбора.Вставить("ЕстьКоличество"    , Истина);
    ПараметрыПодбора.Вставить("ИмяТаблицы"        , "Товары");
    ПараметрыПодбора.Вставить("ЗакрыватьПриВыборе", Ложь);
    ПараметрыПодбора.Вставить("МножественныйВыбор", Истина);
    ПараметрыПодбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы);
    ОткрытьФорму("Обработка.ПодборНоменклатуры.Форма.Форма", ПараметрыПодбора,
            ЭтаФорма, ЭтаФорма.УникальныйИдентификатор);

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

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
    
    ОбработкаВыбораПодборВставкаИзБуфераНаСервере(ВыбранноеЗначение, ИсточникВыбора.ИмяТаблицы);
    
КонецПроцедуры

&НаСервере
Процедура ОбработкаВыбораПодборВставкаИзБуфераНаСервере(ВыбранноеЗначение, ИмяТаблицы)

    ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресПодобраннойНоменклатурыВХранилище);
    ОбъектОтчет.Товары.Загрузить(ТаблицаТоваров);

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

Загружает в табличную часть "Товары" обработки выбранные значения на форме подбора.
Всем спасибо!
Закон Брукера: Даже маленькая практика стоит большой теории.