Версия для печати темы (https://pro1c.org.ua/index.php?s=60ca380a1ecc4d04bafb54237f7d800d&showtopic=66747)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Управляемая форма выбора в обычном приложении

Автор: Sinaps 01.10.21, 13:48

Добрый день !
Конфигурация - доработанная УТП 1.2.64.1
Платформа - 8.3.12

Пытаюсь реализовать свой выбор элемента справочника - для реквизита табличной части документа на обычных формах.
Выбираемый реквизит - НомерРулона, тип справочник, подчиненный справочнику Номенклатура.
Задача - при выборе НомераРулона дать пользователю при заполнении табличной части возможность выбора только тех элементов справочника, по которым есть остатки на текущий момент в регистре накопления "ОстаткиРулонов".

Делал так - по методике, найденной на инфостарте.
В свойствах конфигурации включил возможность использования управляемых форм в обычном приложении.
Для справочника НомераРулонов добавил управляемую форму выбора. Для динамического списка этой формы написал такой запрос:

ВЫБРАТЬ
    СправочникНомераРулонов.Ссылка,
    СправочникНомераРулонов.ПометкаУдаления,
    СправочникНомераРулонов.Предопределенный,
    СправочникНомераРулонов.Владелец,
    СправочникНомераРулонов.Код,
    СправочникНомераРулонов.Наименование,
    СправочникНомераРулонов.Поставщик,
    СправочникНомераРулонов.ДатаПрихода,
    СправочникНомераРулонов.Вес,
    СправочникНомераРулонов.Цена,
    ЕСТЬNULL(ОстаткиРулоновОстатки.КоличествоОстаток,0) КАК Остаток
ИЗ
    Справочник.НомераРулонов КАК СправочникНомераРулонов
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиРулонов.Остатки(
         &ДатаОстатков, Склад= &Склад И Номенклатура= &Номенклатура И Организация= &Организация) КАК ОстаткиРулоновОстатки
        ПО ОстаткиРулоновОстатки.НомерРулона = СправочникНомераРулонов.Ссылка
        И СправочникНомераРулонов.Владелец = ОстаткиРулоновОстатки.Номенклатура



Для события НачалоВыбора реквизита табличной части документа прописал процедуру заполнения параметров.

Процедура МатериалыНомерРулонаНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ТД=ЭлементыФормы.Материалы.ТекущиеДанные;
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("ДатаОстатков", МоментВремени());
    СтруктураПараметров.Вставить("Склад", Константы.СкладРулонов.Получить());
    СтруктураПараметров.Вставить("Организация", Организация);
    СтруктураПараметров.Вставить("Номенклатура", ТД.Номенклатура);
    СтруктураПараметров.Вставить("ТекущаяСтрока", ТД.НомерРулона);
    СтруктураПараметров.Вставить("Отбор", Новый Структура("Владелец",ТД.Номенклатура));
    
    ОткрытьФормуМодально("Справочник.НомераРулонов.ФормаВыбора",СтруктураПараметров);
    
КонецПроцедуры


Отладчиком проверил - СтруктураПараметров заполняется нужными данными.
Запрос в консоли запросов возвращает нужные записи - элементы справочника НомераРулонов с остаткми.
А вот получившаяся форма выбора выходит пустая...
Куда копать ?
Как проверить, корректно ли параметры попадают в запрос ?

Автор: Vofka 01.10.21, 16:31

Sinaps, если вы в форме эти параметры в явном виде не присваиваете, то в запрос они не попадают. Нужно явно установить параметры динамического списка, например, в процедуре ПриСозданииНаСервере. Судя по коду выше у вас, возможно, работает только отбор списка по номенклатуре, но количество будет 0 всегда из-за не установленных параметров.

Автор: Moloko 01.10.21, 17:14

Sinaps @ Сегодня, 13:48 * ,
В УТП для этих целей есть справочники СерииНоменклатуры и СерийныеНомера, подчиненные по отношению к Номенклатуре. Выбирайте, какой больше нравится, там уже все заточено под них.

Автор: Sinaps 05.10.21, 11:53

Vofka @ 01.10.21, 17:31 * ,

Спасибо, все получилось.
В процедуре ПриСозданииНаСервере() прописал заполнение параметров запроса из параметров формы.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua