Имя: Пароль:
1C
1С v8
Как получить доступ к результатам запроса СКД?
0 Dwarrior
 
24.07.16
17:42
Здравствуйте!

Есть отчет, построенный на СКД, выводит номенклатуру с остатками. При формировании отчета нужно сохранить картинки, хранящиеся в номенклатуре, в файлы. Вижу это так - как-то вмешаться в процесс вывода (к набору данных, полученных при выполнении запроса СКД) данных. Если путь правильный - подскажите пожалуйста, как это сделать?
1 hhhh
 
24.07.16
17:46
(0) ПриКомпоновкеРезультата курите
2 Dwarrior
 
24.07.16
17:48
(1) а чуть подробнее?:) Вмешиваться в цикл НачатьВывод()...ЗакончитьВывод()?
3 Chameleon1980
 
24.07.16
17:53
(2) описать в вышеуказанной процедуре
4 Chameleon1980
 
24.07.16
17:54
+ погуглил бы уже "программный вывод отчета скд"
5 hhhh
 
24.07.16
18:01
(2) в модуль объекта идете там есть эта процедура, если нет создаете. Потом смотрите в типовых конфах эту процедуру м в интернете. Скачиваете себе на комп 10 миллионов таких процедур. Выбираете из этих миллионов оду, ее берете как пример.
6 hhhh
 
24.07.16
18:01
одну
7 Dwarrior
 
24.07.16
21:04
Типовое содержимое процедуры нашел, где нужно вмешаться?:)
МакетКомпоновки = КомпоновщикМакета.Выполнить()
или
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки)
или
ПроцессорВывода.Вывести(ПроцессорКомпоновки)
8 Горогуля
 
25.07.16
04:48
на фига при формировании отчёта? найди уже пример вывода картинок в СКД
9 Chameleon1980
 
25.07.16
08:36
(8) все нормально
"...нужно сохранить картинки, хранящиеся в номенклатуре..."

(7) намекну - тут нужно не ПроцессорВывода.Вывести использовать
10 Chameleon1980
 
25.07.16
08:41
+

    Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.НачатьВывод();
    Пока Истина Цикл
        ЭлементРезультата = ПроцессорКомпоновки.Следующий();
        Если ЭлементРезультата = Неопределено Тогда
            Прервать;
        КонецЕсли;
    КонецЦикла;
11 _stay true_
 
25.07.16
08:43
НовыйПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений
12 Chameleon1980
 
25.07.16
08:45
+(11) если не планируется, например, выводить в ТД далее
можно и так - в ТЗ и оттуда перебрать
если так удобнее будет ТС
13 Chameleon1980
 
25.07.16
08:46
=(11) + так-же Вывести и перебрать коллекцию
14 _stay true_
 
25.07.16
08:54
Если тебе не нужен вывод в ТабДок, кури ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений

ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.Вывести (DataCompositionResultValueCollectionOutputProcessor.Output)
ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений (DataCompositionResultValueCollectionOutputProcessor)
Вывести (Output)
Синтаксис:

Вывести(<ПроцессорКомпоновки>, <ВозможностьПрерыванияПользователем>)
Параметры:

<ПроцессорКомпоновки> (обязательный)

Тип: ПроцессорКомпоновкиДанных.
Процессор компоновки данных, из которого будут получаться элементы результата.
<ВозможностьПрерыванияПользователем> (необязательный)

Тип: Булево.
Указывает, может ли пользователь прервать вывод при помощи комбинации клавиш Ctrl + Break.
Значение по умолчанию: Ложь.
Возвращаемое значение:

Тип: ТаблицаЗначений; ДеревоЗначений.

Описание:

Выводит весь результат в объект.
При этом автоматически исполняется метод ПолучитьОбъектПоИдентификатору, перебираются все элементы процессора компоновки и выводятся в результат. После чего исполняется метод ПолучитьИдентификаторПоОбъекту, результат которого возвращается данным методом.

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

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

При выводе результата компоновки данных в коллекцию значений в режиме не совместимости с версией 8.2.16 колонке, в которую выводится вычисляемое поле, устанавливается тип значения, указанный в вычисляемом поле. Если тип значения у вычисляемого поля не указан, то тип колонки определятся автоматически на основании выражения вычисляемого поля.


Алгоримт тебе расписали. Дальше допетришь сам, я думаю)))