Имя: Пароль:
1C
 
СКД. Вывод СКД и в ТЗ и в ТД без двойного выполнения запроса
0 SeiOkami
 
16.02.16
12:26
Здравия!

Такое дело. Кто-нибудь видел механизм, который бы возвращал результат простой СКД и в виде ТЗ и в виде табличного документа ЕДИНОЖДЫ выполняя запрос, указанный в наборе данных?

У меня есть свои наработки, но есть случаи, в которых выпадает ошибка. Хочется понять, может кто уже с таким разобрался.
1 Лодырь
 
16.02.16
12:30
Выполнить запрос, вернуть ТЗ, ее потом скормить обратно СКД и построить отчет.
2 Nuobu
 
16.02.16
12:32
(1) А отборы и настройки?
3 SeiOkami
 
16.02.16
12:33
(1), верно, однако, в ситуациях, когда в отборах участвуют поля, которых нет в выбранных полях, выпадает ошибка. Потому что после "скармливания", СКД пытается наложить отборы на поля, которых нет в ТЗ.

Поэтому хочу глянуть на чей-нить рабочий механизм
4 SeiOkami
 
16.02.16
12:34
(2), что отборы и настройки?
5 Nuobu
 
16.02.16
12:35
(4) Ну, если выполнить просто запрос, то не будут учтены отборы и прочие пользовательские настройки.
6 Матиус
 
16.02.16
12:36
(0) Выполнить СКД программно, со всей кучей зубодробительных объектов. В момент вывода вывести в 2 объекта.
7 SeiOkami
 
16.02.16
12:36
(5), запрос беру из МакетаКомпоновки, а там всё уже учтено
8 SeiOkami
 
16.02.16
12:37
(6), речь о (1) ?
9 Матиус
 
16.02.16
12:37
(8) нет, запрос в СКД
10 SeiOkami
 
16.02.16
12:38
(9), тогда не понимаю. Как это "В момент вывода вывести в 2 объекта." ? Тогда это будет 2 вывода и запрос будет выполняться дважды
11 Матиус
 
16.02.16
12:40
(10) нет, обращение к базе производит компоновщик, результат он может передать как в ТабДок, так и в ТЗ
12 SeiOkami
 
16.02.16
12:41
(11), запрос выполняет именно "ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент"
или "ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений"
13 SeiOkami
 
16.02.16
12:42
(11), запрос выполняется при ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.НачатьВывод()
14 SeiOkami
 
16.02.16
12:45
(11), при этом необходимый тип (ТЗ или ТД) указывается сразу при получении МакетаКомпоновки
15 Матиус
 
16.02.16
12:46
(12) откуда инфа? можно ссылку?
(13) между ...НачатьВывод() и ...ЗакончитьВывод() может пройти не одна секунда, еще и возможны ветвления. Компоновщик порциями данные вытаскивает из БД?
16 SeiOkami
 
16.02.16
12:49
(15), опечатался. ЗАпрос выполняется при :

ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.Вывести()

И эту инфу модно проверить просто в отладке.
17 SeiOkami
 
16.02.16
12:50
(15), а про "НачатьВывод()" просто не знаю - нужно тестить.
18 Матиус
 
16.02.16
12:53
(16) Если это так, то это какой-то ппц
19 SeiOkami
 
16.02.16
13:03
Уточню проблему, которая заставила меня искать (0)

Суть в чем. Реализован механизм так:

Имею СКД и Настройки
1. Получаю МакетКомпоновки
2. Беру из него запрос\параметры
3. Выполняю отдельно запрос
4. В СКД2 (копия СКД) заменяю НаборДанныхЗапрос на НаборДанныхОбъект. В результате в НаборДанныхОбъект есть только те поля, которые есть И в НаборДанныхЗапрос И в результате запроса.
5. Формирую табличный документ обычным программным образом, используя СКД2.

В результате имеем и ТЗ (результат запроса) и ТД (выведен при помощи СКД, поэтому всё как надо)

ОДНАКО!
Если в настройках пользователь укажет отбор по полю, которое не выводится в отчет, то:
1. Запрос не выбирает это поле. А значит его и не будет в ТЗ. А значит его не будет и в НаборДанныхОбъект
2. При выводе СКД2 сама СКД пытается наложить отбор это поле, но его нет в наборе данных объект.


Сейчас нашел решение: перед выводом СКД2 восстанавливать настройки (Компоновщик.Восстановить())
Но и тут есть косяк - тогда в шапке табличного документа инфа о этом отборе появляеться не будет (потому что его фактически и не было при выводе СКД2)

В общем как-то так.
20 SeiOkami
 
16.02.16
13:16
уп
21 SeiOkami
 
16.02.16
13:45
вверх
22 su_mai
 
16.02.16
14:25
(19) Два пути:
1. Включать в вычисляемые поля (они всегда в таблице будут, если выбраны) заведомо все поля. Т.е. делать таблицу "с запасом"
2. В настройках СКД программно удалять отборы по несуществующим колонкам.
23 SeiOkami
 
16.02.16
15:00
(22),
1. Проблема как раз в том, что поле НЕ выбирается
2. Пробовал, описал в (19)

+ Пробовал делать поля "Обязательными", но это тоже не вариант
24 su_mai
 
16.02.16
15:03
(23) Тогда выбери его.
25 SeiOkami
 
16.02.16
15:06
(24), это не решение. Суть в том, что его НЕ нужно выводить
26 SeiOkami
 
17.02.16
14:58
Нашлось решение.
Если вдруг кому понадобится, то здесь: http://forum.infostart.ru/forum86/topic146708/