Имя: Пароль:
1C
 
пакеты запроса из СКД в массив?
0 zippygrill
 
13.05.11
13:38
Всем привет,
ести запрос в СКД. в нем несколько пакета запроса.
если сформировать отчет программно то можно выгрузить эти пакеты запросов в массиве как-то?
1 zippygrill
 
13.05.11
13:40
+(0) для дальнейшей работы с массивом ))
2 detec
 
13.05.11
13:41
1. Выгпузить пакет нельзя.

2. Непонятно, зачем это нужно, если СКД выводит результат в готовом виде.
3 zippygrill
 
13.05.11
13:47
в Хрусталевой написанно что только в дерево значений но ничего про пакетов.
(2)ну вот нужно ))
4 zippygrill
 
13.05.11
13:55
up
5 Necessitudo
 
13.05.11
13:58
РезультатЗапроса (QueryResult)
Выгрузить (Unload)
Синтаксис:

Выгрузить(<ТипОбхода>)
Параметры:

<ТипОбхода> (необязательный)

Тип: ОбходРезультатаЗапроса. Задает тип обхода записей в получаемой выборке.
Значение по умолчанию: Прямой
Возвращаемое значение:

Тип: ТаблицаЗначений; ДеревоЗначений. Если тип обхода задан Прямой, результат выгружается в таблицу значений, в противном случае в дерево значений.
Описание:

Создает таблицу значений (или дерево значений) и копирует в нее все записи набора.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

ТаблицаРезультатов = РезультатЗапроса.Выгрузить();
6 Necessitudo
 
13.05.11
13:59
Другое дело, что можно преобразовать ту же таблицу значений в массив.
7 zippygrill
 
13.05.11
14:02
(6) хорошо а как быть с пакетами запроса из запрос?
8 Necessitudo
 
13.05.11
14:03
Так ты делаешь все через скд или Построитель отчета?
9 zippygrill
 
13.05.11
14:03
скд
10 Necessitudo
 
13.05.11
14:09
Ну а как ты его формируешь? Просто открываешь форму да передаешь параметры?
11 zippygrill
 
13.05.11
14:15
пока что вот так ))

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

//ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
   
ЭлементыФормы.Результат.Очистить();
ДокументРезультат = ЭлементыФормы.Результат;
       
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
12 Necessitudo
 
13.05.11
14:21
Я вот думаю - зачем высасывать результаты запроса из компоновщика , если куда проще создать его заново? Или так уж критично для производительности это?
13 zippygrill
 
13.05.11
14:25
ммммм могу показать как у меня сейчас работает и как хочу делать.
14 Necessitudo
 
13.05.11
14:28
Ну попробуй. Может заодно кто-нить проходящий мимо и подскажет что)
15 zippygrill
 
13.05.11
14:35
Вот как у меня сейчас. Выгружаю пакеты в массив. потом нужный мне пакет и массива выгружаю в тз для дальнеищей работы.
теперь как тот же запрос(который ниже), только в СКД, выгрузить в массиве? ))

Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ВзаиморасчетыСКонтрагентамиОбороты.Контрагент,
   |    ВзаиморасчетыСКонтрагентамиОбороты.ДоговорКонтрагента,
   |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор КАК Документ,
   |    ВзаиморасчетыСКонтрагентамиОбороты.Период,
   |    ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовОборот, 0) КАК Оборот,
   |    ЕСТЬNULL(_СведенияОДокументе.НакладнаяДнейОтсрочки, 0) КАК Отсрочка,
   |    ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиОбороты.Период, ДЕНЬ, ЕСТЬNULL(_СведенияОДокументе.НакладнаяДнейОтсрочки, 0)) КАК ДатаОплатыПоДоговору,
   |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Номер КАК НомерДокРеализации
   |ПОМЕСТИТЬ общданные
   |ИЗ
   |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
   |            &Нач,
   |            &Кон,
   |            Регистратор,
   |            ДоговорКонтрагента.ВидДоговора = &ВидДоговора
   |                И Контрагент В ИЕРАРХИИ (&Контрагент)
   |                И Организация = &Организация
   |                И ДоговорКонтрагента = &Договор) КАК ВзаиморасчетыСКонтрагентамиОбороты
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений._СведенияОДокументе КАК _СведенияОДокументе
   |        ПО ВзаиморасчетыСКонтрагентамиОбороты.Регистратор = _СведенияОДокументе.Документ
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    общданные.Контрагент КАК Контрагент,
   |    общданные.ДоговорКонтрагента,
   |    общданные.Документ КАК Документ,
   |    общданные.Период КАК ДатаДокумента,
   |    общданные.Отсрочка,
   |    общданные.ДатаОплатыПоДоговору,
   |    общданные.Оборот КАК СтоимостьТовара,
   |    общданные.НомерДокРеализации
   |ИЗ
   |    общданные КАК общданные
   |ГДЕ
   |    общданные.Оборот > 0
   |
   |УПОРЯДОЧИТЬ ПО
   |    Контрагент,
   |    ДатаДокумента
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    общданные.Контрагент КАК Контрагент,
   |    общданные.ДоговорКонтрагента,
   |    общданные.Документ КАК ДокПлатежа,
   |    общданные.Период КАК ДатаПлатежа,
   |    -общданные.Оборот КАК СуммаПлатежа
   |ИЗ
   |    общданные КАК общданные
   |ГДЕ
   |    общданные.Оборот < 0
   |
   |УПОРЯДОЧИТЬ ПО
   |    Контрагент,
   |    ДатаПлатежа
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    общданные.Контрагент КАК Контрагент,
   |    общданные.ДоговорКонтрагента,
   |    0 КАК СуммаВзаиморасчетовОстаток
   |ПОМЕСТИТЬ оборотконтрагентидоговор
   |ИЗ
   |    общданные КАК общданные
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    ВложенныйЗапрос.ДоговорКонтрагента,
   |    ВложенныйЗапрос.Контрагент,
   |    СУММА(ЕСТЬNULL(ВложенныйЗапрос.СуммаВзаиморасчетовОстаток, 0)) КАК СуммаВзаиморасчетовОстаток
   |ИЗ
   |    (ВЫБРАТЬ
   |        ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента КАК ДоговорКонтрагента,
   |        ВзаиморасчетыСКонтрагентамиОстатки.Контрагент КАК Контрагент,
   |        ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток
   |    ИЗ
   |        РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(
   |                &ДатаВхОстатков,
   |                ДоговорКонтрагента.ВидДоговора = &ВидДоговора
   |                    И Контрагент В ИЕРАРХИИ (&Контрагент)
   |                    И Организация = &Организация
   |                    И ДоговорКонтрагента = &Договор) КАК ВзаиморасчетыСКонтрагентамиОстатки
   |    
   |    ОБЪЕДИНИТЬ ВСЕ
   |    
   |    ВЫБРАТЬ
   |        оборотконтрагентидоговор.ДоговорКонтрагента,
   |        оборотконтрагентидоговор.Контрагент,
   |        NULL
   |    ИЗ
   |        оборотконтрагентидоговор КАК оборотконтрагентидоговор) КАК ВложенныйЗапрос
   |
   |СГРУППИРОВАТЬ ПО
   |    ВложенныйЗапрос.ДоговорКонтрагента,
   |    ВложенныйЗапрос.Контрагент";
   
   
   Запрос.УстановитьПараметр("ВидДоговора", ВидДоговора);
   Запрос.УстановитьПараметр("Кон", ТекущаяДата());
   Запрос.УстановитьПараметр("Контрагент", Контрагент);
   Запрос.УстановитьПараметр("Нач", Нач);
   Граница = Новый Граница(Нач, ВидГраницы.Исключая);
   Запрос.УстановитьПараметр("ДатаВхОстатков", Граница);
   Запрос.УстановитьПараметр("Организация", Организация);
   Запрос.УстановитьПараметр("Договор", Договор);
   
   МассивРезультатов = Запрос.ВыполнитьПакет();
   
   тзРеализации = МассивРезультатов[1].Выгрузить();
   тзОплаты = МассивРезультатов[2].Выгрузить();
   тзКонтрагентыДоговорыИОстаток = МассивРезультатов[4].Выгрузить();
16 detec
 
13.05.11
15:00
(15) Зачем в снеговике выгружать результаты пакетного запроса в кучу таблиц значений "для дальнейшей работы"? Не будет ли более правильным так построить алгоритм, чтобы в запросе сделать все расчёты и выгрузить в одну итоговую ТЗ, скажем, для заполнения набора записей при проводку?
17 zippygrill
 
13.05.11
15:05
(16) ааааа распределение платежей к документам отгрузке по методу фифо, в запросе, это нереально для меня :)
18 IronDemon
 
13.05.11
15:13
(17) Как два пальца
19 zippygrill
 
13.05.11
15:55
(17) покажите как-то?
20 IronDemon
 
13.05.11
16:03
21 zippygrill
 
13.05.11
16:32
я их уже давно смотрел но это не решение для моего отчета (:
22 Леха Дум
 
13.05.11
16:53
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   Макет = КомпоновщикМакета.Выполнить(СКД, КомпоновщикНастроекСклада.Настройки,,,);
ЗапросСклада = Новый Запрос;
   
   Для каждого Параметр Из Макет.ЗначенияПараметров Цикл
       ЗапросСклада.УстановитьПараметр(Параметр.Имя, Параметр.Значение);
   КонецЦикла;
   
   ЗапросСклада.Текст = Макет.НаборыДанных[0].Запрос;
РезультатСклада = ЗапросСклада.ВыполнитьПакет();
23 zippygrill
 
17.05.11
14:47
(22)четко четко.
а не подскажите еще как временные таблицы выгрузить?
24 detec
 
17.05.11
14:50
(23) СП украли?
25 Aprobator
 
17.05.11
14:56
(23) тоже из СКД что ли? Во народ зажигает вначале недели то.
26 zippygrill
 
17.05.11
15:19
(24)я бы не стал спрашивать если ответ в СП )
(25) нда СКД.
27 Aprobator
 
17.05.11
15:26
(26) а вот нафига? Ни разу такой потребности на свое практике не встречал.
28 zippygrill
 
17.05.11
15:29
конечно это опционально в данном случае, но вот интереса ести).
29 Aprobator
 
17.05.11
15:32
а типа можно ли почесать правой ногой за левым ухом? Попробуй.