|
СКД. Вывод СКД и в ТЗ и в ТД без двойного выполнения запроса | ☑ | ||
---|---|---|---|---|
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/ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |