Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   ТЗ как источник данных в Построителе отчёта (http://forums.kuban.ru/f1040/tz_kak_istochnik_dannyh_v_postroitele_otch%D1%91ta-7942716.html)

MarySue 07.08.2016 08:11

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

Jimbo 07.08.2016 09:56

в скд - внешний источник данных. Построитель это из 8.0 устарело давно

MarySue 07.08.2016 12:49

я знаю, как это сделать в СКД
но СКД не хочу. В УТ 10.3 Универсальный отчёт - самый удобный инструмент для отчётов, хочу в нём сделать.
В отчётах на СКД есть ощутимый косячище - если у пользователей есть сохранённые настройки (а они у нас есть, по 3-5 настроек у каждого), любое изменение схемы компоновки оборачивается гемором. То есть, любая доработка отчёта это всегда приключение с введением.
Может, в других конфигах (которые на УФ) это не так, но у нас так.

VZ 07.08.2016 14:41

[em]ВЫБРАТЬ
ДоговорыКонтрагентов.Ссылка КАК Договор
ПОМЕСТИТЬ ТаблДоговоров
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТаблДоговоров.Договор,
ТаблДоговоровОбороты.ДоговорОбороты,
ТаблДоговоровОбороты.Расход,
ТаблДоговоровОбороты.Приход
ИЗ
ТаблДоговоров КАК ТаблДоговоров
ЛЕВОЕ СОЕДИНЕНИЕ ТаблДоговоровОбороты КАК ТаблДоговоровОбороты
ПО ТаблДоговоров.Договор = ТаблДоговоровОбороты.ДоговорОбороты[/em]

USSR 07.08.2016 14:53

Насколько я знаю. источником данных в универсальном отчете может быть либо регистр, либо запрос. Поэтому видимо пишешь запрос к таблице значений, как в (3)

MarySue 08.08.2016 02:28

(3) вопрос был не про то, как пользоваться временными таблицами.
Ещё раз: есть заполненная ТЗ, её нужно подпихнуть в Построитель Универсального отчёта и сделать к ней запрос (соединив с другими таблицами).

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

BMA, брат, где ты? Я знаю, ты конкретно раскуривал тему! Помоги, брат! Эти люди даже не понимают, о чём я спрашиваю.

iMoxa 08.08.2016 04:59

В универсальном отчете есть штатные процедуры и функции для загрузки таких данных в построитель. Погугли.

MarySue 08.08.2016 06:16

погуглила ещё до создания ветки
нужен конкретный пример

bma1 08.08.2016 08:51

2(5) да все там просто.
Добавляем переменную:
Перем ТаблицаДанных; // в ней будут данные для формирования отчета


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Все...

MarySue 08.08.2016 13:37

(8) спасибо!
спасибище!

MarySue 08.08.2016 13:45

(8) мне кажется, если бы ты оформил свои знания в виде серии коротких зарисовок и выложил на ИС, мог бы иметь большой успех.
Реально, трудно найти нормальные лаконичные примеры.

bma1 08.08.2016 15:41

Только УниверсальныйОтчет плохо работает с источником данных - таблицей значений. Отборы, группировки нельзя сделать по полям реквизитов. Т.ч. СКД тут лучше использовать. А пользовательские настройки и в Универсальном отчете могут не дать открыть пользователю отчет после его изменения. Т.ч. мы имеем наш любимый синоним редьки по части сладости...


Текущее время: 15:41. Часовой пояс GMT +3.