Имя: Пароль:
1C
1С v8
СКД: программный вывод в таблицу значений
0 Zhuravlik
 
23.01.14
17:52
Добрый вечер. Не могу понять, в чем трабла: хочу на основе всяческих пользовательских отборов и фильтров по периоду получить таблицу значений. И хочу через СКД, т.к. в одном случае нужна тз, в другом - сформированный табличный документ.
При этом хочу, чтобы все работало в УФ, с настройками по-умолчанию (панель с "авто-заполнением").

Создал отчет, определил схему компоновки, задал параметры, создал форму. Попробовал - результат в табличном документе есть.
Теперь мне нужно получить данные в таблицу значений, пока не думаю как ее передать на клиент, но чую там тоже история.

После нажатия на "Сформировать" выполняются последовательно 3 события:

1) ОбработкаПроверкиЗаполненияНаСервере (Модуль формы)
2) ОбработкаПроверкиЗаполнения (Модуль объекта)
3) ПриКомпоновкеРезультата (МодульОбъекта)

В ПриКомпоновкеРезультата пишу такой вот код:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);

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


Ставлю точку останова в конце процедуры, переменная тз - пустая.
Подскажите пожалуйста, почему, и как с этим бороться?
1 Адский плющ
 
23.01.14
17:54
Группировка в СКД прописана?
2 Zhuravlik
 
23.01.14
17:56
(1) Только детальные записи
3 Zhuravlik
 
23.01.14
17:58
+ И удаление группировки по детальным записям ничего не дает, что из руководства разработчика и следует "Не поддерживается вывод таблиц, диаграмм и вложенных отчетов в универсальную коллекцию значений" - про дет. записи ничего не сказно
4 КРТЩ
 
23.01.14
18:01
(0) ну так ты выполнил компоновку, потом создал новую тз, не заполняя её засунул в процессор вывода с чего она у тя будет заполнена?
5 Zhuravlik
 
23.01.14
18:04
(4) В плане, не заполняя? Я думал, что СКД на основе запроса выдаст мне готовую тз с колонками и строками. Выходит, что колонки я сам должен создать? Или что заполнять?
6 Zhuravlik
 
23.01.14
18:05
+ Табличный же документ не надо заполнять заранее при програмном формировании
7 Zhuravlik
 
23.01.14
18:07
+ Еще, пробовал также вот такой код:
    ПроцессорВывода.НачатьВывод();
    Пока Истина Цикл
        
        Элемент = ПроцессорКомпоновкиДанных.Следующий();
        
        Если Элемент = Неопределено Тогда
            Прервать;
        Иначе
            ПроцессорВывода.Вывести(Элемент);
        КонецЕсли;
        
    КонецЦикла;
    ПроцессорВывода.ЗакончитьВывод();

Элемент - все время неопределено
8 Zhuravlik
 
23.01.14
18:09
Блин, что за бред?))))

    СтандартнаяОбработка = Ложь;
    
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    тз = Новый ТаблицаЗначений;
    тз.Колонки.Добавить("ДатаЗаявки");
    
    ПроцессорВывода.УстановитьОбъект(тз);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
9 Zhuravlik
 
23.01.14
18:10
+ Добавил одну колонку, все получилось, но в ТЗ  вывелись все поля.
10 Zhuravlik
 
23.01.14
18:10
Скажите гуру, это глюк или фича?))
11 Zhuravlik
 
23.01.14
18:21
В общем получается спасибо за (4).
Хочу этот момент понять, смотрите: добавил я поле, типа "Дата" - "ДатаЗаявки". При этом вывелись ВСЕ поля из запроса, причем появилось поле ДатаЗаявки1 - пустое. Еще то что вывелось в других полях - вывелось криво, напр. поле "Сотрудник", которое должно иметь тип "СправочникСсылка.ФизическиеЛица" - вывелось как текстовое, и обрезалось до 10 символов.

Доавляю все нужные поля в тз. Все заполнилось как надо, но там еще появидись их дубли с постфиксом "1" (ДатаЗаявки1, Сотрудник1 и т.д.) - и все пустые.

Что это? Где - нибудь есть описание как правильно нужно с СКД такие вещи делать?
12 Zhuravlik
 
23.01.14
18:23
+ А еще я заметил что все данные не на своем месте... Пожар( Ткните в сторону литературы, где описание посмотреть?
13 Zhuravlik
 
23.01.14
18:40
(4) Не поделитесь примером, как ее заполнять нужно?
14 Zhuravlik
 
23.01.14
18:44
Если в коде в (0) заменить Таблицу значений на дерево значений, все отрабатывает, и получаю данные, как по-идее и должно быть.
Что с заполнением тз - так  и не понял. И почему так - тоже не понял, если кто знает поделитесь опытом?
15 Zhuravlik
 
23.01.14
22:00
ап... чем для СКД тз отличается от дерева?... Или это глюк такой?
16 sanja26
 
23.01.14
22:30
(15) я обычно колонки прописывыю для ТЗ, в которую гружу скд
17 Zhuravlik
 
24.01.14
21:52
(16) А вот попробуй не прописывать. А потом замени тз деревом значений. И попробуй допри, почему так :(
Хоть и понятно, что дерево логичнее подходит под выгрузку из скд, это я про группировки.
Но интуитивно рассуждая: тз - для получения "плоской" таблицы, дерево - сгруппированной.
Однако же, дерево кажет, тз - нет. Вернее "не так как хотелось бы".