К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

ТЗ как источник данных в Построителе отчёта

Гость
0 - 07.08.2016 - 08:11
Уважаемые коллеги, киньте пожалуйста примером использования ТЗ в качестве источника данных в Построителе.
Мне нужно в Универсальный отчёт подсунуть ТЗ.



Гость
1 - 07.08.2016 - 09:56
в скд - внешний источник данных. Построитель это из 8.0 устарело давно
Гость
2 - 07.08.2016 - 12:49
я знаю, как это сделать в СКД
но СКД не хочу. В УТ 10.3 Универсальный отчёт - самый удобный инструмент для отчётов, хочу в нём сделать.
В отчётах на СКД есть ощутимый косячище - если у пользователей есть сохранённые настройки (а они у нас есть, по 3-5 настроек у каждого), любое изменение схемы компоновки оборачивается гемором. То есть, любая доработка отчёта это всегда приключение с введением.
Может, в других конфигах (которые на УФ) это не так, но у нас так.
Гость
3 - 07.08.2016 - 14:41
ВЫБРАТЬ
ДоговорыКонтрагентов.Ссылка КАК Договор
ПОМЕСТИТЬ ТаблДоговоров
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ХозрасчетныйОбороты.Субконто2 КАК ДоговорОбороты,
ХозрасчетныйОбороты.СуммаОборотДт КАК Расход,
ХозрасчетныйОбороты.СуммаОборотКт КАК Приход
ПОМЕСТИТЬ ТаблДоговоровОбороты
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(, , , **(Счет = &Счет)**, , , **(КорСчет = &КорСчет)**, ) КАК ХозрасчетныйОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТаблДоговоров.Договор,
ТаблДоговоровОбороты.ДоговорОбороты,
ТаблДоговоровОбороты.Расход,
ТаблДоговоровОбороты.Приход
ИЗ
ТаблДоговоров КАК ТаблДоговоров
ЛЕВОЕ СОЕДИНЕНИЕ ТаблДоговоровОбороты КАК ТаблДоговоровОбороты
ПО ТаблДоговоров.Договор = ТаблДоговоровОбороты.ДоговорОбороты
Гость
4 - 07.08.2016 - 14:53
Насколько я знаю. источником данных в универсальном отчете может быть либо регистр, либо запрос. Поэтому видимо пишешь запрос к таблице значений, как в (3)
Гость
5 - 08.08.2016 - 02:28
(3) вопрос был не про то, как пользоваться временными таблицами.
Ещё раз: есть заполненная ТЗ, её нужно подпихнуть в Построитель Универсального отчёта и сделать к ней запрос (соединив с другими таблицами).

(4) вопрос именно в том, как в Универсальном отчёте организовать запрос к ТЗ ?

BMA, брат, где ты? Я знаю, ты конкретно раскуривал тему! Помоги, брат! Эти люди даже не понимают, о чём я спрашиваю.
Гость
6 - 08.08.2016 - 04:59
В универсальном отчете есть штатные процедуры и функции для загрузки таких данных в построитель. Погугли.
Гость
7 - 08.08.2016 - 06:16
погуглила ещё до создания ветки
нужен конкретный пример
8 - 08.08.2016 - 08:51
2(5) да все там просто.
Добавляем переменную:
Перем ТаблицаДанных; // в ней будут данные для формирования отчета


В Процедуре УстановитьначальныеНастройки() пишем:
ТаблицаДанных = СформироватьТаблицуДанных(); // здесь задаем только структуру таблицы, без самих данных
ИсточникДанных=Новый ОписаниеИсточникаДанных(ТаблицаДанных);
ИсточникДанных.Колонки.Сотрудник.Измерение=Истина;
ИсточникДанных.Колонки.Подразделение.Измерение=Ист ина;
ИсточникДанных.Колонки.Работал.Итог="СУММА(Работал )";
ИсточникДанных.Колонки.Отпуск.Итог="СУММА(Отпуск)" ;

УниверсальныйОтчет.ВыводитьОбщиеИтоги = Истина;

УниверсальныйОтчет.ПостроительОтчета.ИсточникДанны х=ИсточникДанных;
УниверсальныйОтчет.мНазваниеОтчета = СокрЛП(ЭтотОбъект.Метаданные().Синоним);
УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;
УниверсальныйОтчет.мВыбиратьИспользованиеСвойств = Ложь;
УниверсальныйОтчет.ПоказыватьЗаголовок=Истина;
УниверсальныйОтчет.мНазваниеОтчета="Отработано";
УниверсальныйОтчет.ДобавитьПоказатель("Работал","Р аботал", Истина);
УниверсальныйОтчет.ДобавитьПоказатель("Отпуск","От пуск", Истина);
УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вс тавить("Сотрудник","Сотрудник");
УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вс тавить("Подразделение","Подразделение");
УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вс тавить("Работал","Работал");
УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вс тавить("Отпуск","Отпуск");

УниверсальныйОтчет.УстановитьПредставленияПолей(Ун иверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);

УниверсальныйОтчет.ПостроительОтчета.ИзмеренияСтро ки.Очистить();
УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Подраз деление");
УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Сотруд ник");
УниверсальныйОтчет.ПостроительОтчета.ИзмеренияКоло нки.Очистить();

УниверсальныйОтчет.ДобавитьОтбор("Сотрудник");
УниверсальныйОтчет.ДобавитьОтбор("Подразделение");

УниверсальныйОтчет.УстановитьНачальныеНастройки(Ло жь);

Потом пишем функцию:
Функция СформироватьТаблицуДанных() // для формирования структуры таблицы

Массив = Новый Массив;
Массив.Добавить(Тип("СправочникСсылка.ФизическиеЛи ца"));
ОписаниеТиповФизЛицо = Новый ОписаниеТипов(Массив);

Массив = Новый Массив;
Массив.Добавить(Тип("СправочникСсылка.Подразделени я"));
ОписаниеТиповПодразделение = Новый ОписаниеТипов(Массив);

Массив = Новый Массив;
Массив.Добавить(Тип("Число"));
КЧ = Новый КвалификаторыЧисла(10,0);
ОписаниеТиповРабота = Новый ОписаниеТипов(Массив,,КЧ);

ТЗ2 = Новый ТаблицаЗначений;
ТЗ2.Колонки.Добавить("Сотрудник", ОписаниеТиповФизЛицо);
ТЗ2.Колонки.Добавить("Подразделение", ОписаниеТиповПодразделение);
ТЗ2.Колонки.Добавить("Работал",ОписаниеТиповРабота );
ТЗ2.Колонки.Добавить("Отпуск",ОписаниеТиповРабота) ;

Возврат ТЗ2;
КонецФункции

В процедуре формирования отчета пишет
Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт

// Перед формирование отчета можно установить необходимые параметры универсального отчета.
Если Не ЗначениеЗаполнено(УниверсальныйОтчет.ДатаНач)
ИЛИ Не ЗначениеЗаполнено(УниверсальныйОтчет.ДатаКон) Тогда
Предупреждение("Не задан период отчета!");
Возврат;
КонецЕсли;

ТаблицаДанных.Очистить();

ЗаполнитьТаблицуДанных(); // а в этой процедуре заполняем таблицу ТаблицаДанных чем нам надо. Она выполняется только когда мы запускаем формирование отчета, а функция СформироватьТаблицуДанных() - при открытии, поэтому она должна быть простая и быстрая.

УниверсальныйОтчет.ПостроительОтчета.Параметры.Вст авить("КонДата", КонецДня(Дата(УниверсальныйОтчет.ДатаКон)));
УниверсальныйОтчет.ПостроительОтчета.Параметры.Вст авить("НачДата", Дата(УниверсальныйОтчет.ДатаНач));

УниверсальныйОтчет.СформироватьОтчет(ТабличныйДоку мент);

КонецПроцедуры // СформироватьОтчет()

Все...
Гость
9 - 08.08.2016 - 13:37
(8) спасибо!
спасибище!
Гость
10 - 08.08.2016 - 13:45
(8) мне кажется, если бы ты оформил свои знания в виде серии коротких зарисовок и выложил на ИС, мог бы иметь большой успех.
Реально, трудно найти нормальные лаконичные примеры.
11 - 08.08.2016 - 15:41
Только УниверсальныйОтчет плохо работает с источником данных - таблицей значений. Отборы, группировки нельзя сделать по полям реквизитов. Т.ч. СКД тут лучше использовать. А пользовательские настройки и в Универсальном отчете могут не дать открыть пользователю отчет после его изменения. Т.ч. мы имеем наш любимый синоним редьки по части сладости...


К списку вопросов






Copyright ©, Все права защищены