Имя: Пароль:
1C
1С v8
Получение результата запроса из СКД
0 Сергиус
 
21.06.12
10:22
Есть необходимость выполнить запрос и получить результат именно через СКД. Вот пример кода:


ЭлементыФормы.Результат.Очистить();
   
   Запрос = Новый Запрос;
   
   Запрос.Текст = "ВЫБРАТЬ
                  |    РеализацияТоваров.Ссылка,
                  |    РеализацияТоваров.Контрагент
                  |ИЗ
                  |    Документ.РеализацияТоваров КАК РеализацияТоваров";
                 
   Результат = Запрос.Выполнить();
   ТЗ = Результат.Выгрузить();
   
   ВнешниеНаборыДанных = Новый Структура;
   ВнешниеНаборыДанных.Вставить("ТЗ",ТЗ);
                 
   СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

Настройки = КомпоновщикНастроек.Настройки;
   
   ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки, ДанныеРасшифровки);
   
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
   
   ПроцессорВывода.НачатьВывод();
   
   ЭлементРезультата = ПроцессорКомпоновки.Следующий();
   Пока ЭлементРезультата <> Неопределено Цикл
       ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
       ЭлементРезультата = ПроцессорКомпоновки.Следующий();
   КонецЦикла;

Код отрабатывает, все ок, данные в табличное поле выводятся. Вопрос в следующем - как получить данные которые получены этим запросом? Пройтись по ним последовательно..

P.s. Хочу сделать именно так, потому что нужно использовать сложный отбор по любому из реквизитов контрагента(Может возможно это реализовать по-другому..)
1 чувак
 
21.06.12
10:27
Тебе все таки нужен отбор? Есть же в СКД настройка и его компоненты, туда можно программно обратится
2 artbear
 
21.06.12
10:29
ПроцессорВыводаРезультатаКомпоновкиДанныхВТаблицуЗначений
3 Ranger_83
 
21.06.12
10:34
(0)http://its.1c.ru/db/metod81#content:3048:1
смотри "Разработка отчетов со сложным макетом"
4 Сергиус
 
21.06.12
10:34
(2) а что с ней дальше делать?) как из нее данные выудить..
5 Сергиус
 
21.06.12
10:35
(3) к сожалению у меня нет доступа сюда..
6 Сергиус
 
21.06.12
10:36
(1) я вытащил на форму табличное поле, у которого в данных КомпоновщикНастроек.Настройки.Отбор. Соответственно потом я эти настройки запихиваю в компоновщик..
7 Ranger_83
 
21.06.12
10:40
(6)про "Шаблон типового отчета" для СКД слышал?
8 Сергиус
 
21.06.12
10:43
(7) неа.. я по сути только начал с этим работать
9 Ranger_83
 
21.06.12
10:57
(8)Тебе только СКД надо правильно написать,а все интерфейсные возможности по работе с пользователями берет на себя шаблон отчета.Т.е берешь шаблон и загружаешь в него схему.Дальше в режиме предприятия уже настраиваешь мышкой отборы и т.д
10 Сергиус
 
21.06.12
11:38
Получил то что хотел следующим образом:

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