Имя: Пароль:
1C
1С v8
Отбор с использованием СКД на форме
0 AlexYura
 
17.11.20
10:09
Доброго времени суток.
Пробую создать универсальный отбор на СКД,
создаю Макет с набором данных запрос

ВЫБРАТЬ
Контрагенты.Ссылка КАК Контрагент,
NULL КАК Номенклатура,
NULL КАК Склад
{ВЫБРАТЬ
Контрагент.*,
Номенклатура.*,
Склад.*}
ИЗ
Справочник.Контрагенты КАК Контрагенты
{ГДЕ
Контрагенты.Ссылка.* КАК Контрагент}

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
NULL,
Номенклатура.Ссылка,
NULL
ИЗ
Справочник.Номенклатура КАК Номенклатура
{ГДЕ
Номенклатура.Ссылка.* КАК Номенклатура}

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
NULL,
NULL,
Склады.Ссылка
ИЗ
Справочник.Склады КАК Склады
{ГДЕ
Склады.Ссылка.* КАК Склад}

называю его основной макет СКД
в макете в настройке вывожу отбор по полям контрагент, номенклатура, склад

добавляю реквизит объекта тип "компоновщик настроек"

вывожу на форму пользовательские настройки компоновщика настроек

пишу на форме


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    АдресСхемыКомпоновкиДанных = ИнициализироватьКомпоновщик(Объект.КомпоновщикНастроек, "ОсновнойМакетСКД", УникальныйИдентификатор);
    
КонецПроцедуры

&НаСервере
Функция ИнициализироватьКомпоновщик(Компоновщик, ИмяМакета, УникальныйИдентификатор)

    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    
    СхемаКомпоновкиДанных = ОбработкаОбъект.ПолучитьМакет(ИмяМакета);
    АдресСКД = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
    
    ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСКД);
    
    Компоновщик.Инициализировать(ИсточникНастроек);
    Компоновщик.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);

    Возврат АдресСКД;
    
КонецФункции // ИнициализироватьКомпоновщик()


&НаКлиенте
Процедура Команда1(Команда)
    // Вставить содержимое обработчика.
    ЗаполнитьНаСервереРаньше()
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервереРаньше()
    
    // Получим данные по настроенной СКД
    СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(АдресСхемыКомпоновкиДанных);
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
                                                  Объект.КомпоновщикНастроек.ПолучитьНастройки(),
                                                  ,
                                                  ,
                                                  Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
                                                  
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
    
    // Таблица с данными, полученными из СКД
    ТаблицаНом = Новый ТаблицаЗначений;
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПроцессорВывода.УстановитьОбъект(ТаблицаНом);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);


    ВремДТ = Новый ТабличныйДокумент;
    Построитель = Новый ПостроительОтчета;
    Построитель.ИсточникДанных=Новый ОписаниеИсточникаДанных(ТаблицаНом);      
    Построитель.Вывести(ВремДТ);
    ЭтаФорма.ТабДокумент.Вывести(ВремДТ);
    
    ЭтаФорма.ТекущийЭлемент = Элементы.Заказник;
    
КонецПроцедуры


Показать


и таблица пустая.
причем если в скд одна таблица, только номенклатура, то тз заполняется.
режим совместимости конфы 8.3.12
подскажите плиз, куда копать.
1 toypaul
 
гуру
17.11.20
10:20
причинно следственная связь в данном повествовании не наблюдается. 3 раза прочитал не смог поймать нить. зато много кода (наверное он должен был нам чем-то помочь)
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой