helpf.pro
Регистрация

Как добавить ячейки в макет отчета

bless18
19.06.2010 15:29Прочитано: 6522
Здравствуйте!
Необходимо сформировать отчет, данные которого берутся из регистра сведений, но еще нужно добавить з ячейки, которые являются расчетными полями, к макету отчета
С обработкой проблем не возникло, получила данные из запроса, затем добавила колонки к ТЧ и все замечательно:
Код 1C v 8.х
 
ЭтотОбъект.ДатаН = НачалоМесяца(ТекущаяДата());
ЭтотОбъект.ДатаК = КонецМесяца(ТекущаяДата());
Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РаспределениеЗадачиСрезПоследних.ИсполнительЗадачи,
| РаспределениеЗадачиСрезПоследних.ДатаВыполнения,
| РаспределениеЗадачиСрезПоследних.ДатаНачалаВыполнения,
| РаспределениеЗадачиСрезПоследних.ДатаВыполненияПоФакту,
| РаспределениеЗадачиСрезПоследних.ЗадачаЗавершена,
| РаспределениеЗадачиСрезПоследних.НаименованиеЗадачи
|ИЗ
| РегистрСведений.РаспределениеЗадачи.СрезПоследних(
| ,
| &ЗадачаЗавершена = ЗадачаЗавершена
| И (Период МЕЖДУ &ДатаН И &ДатаК)) КАК РаспределениеЗадачиСрезПоследних";
Запрос.УстановитьПараметр("ЗадачаЗавершена", Истина);
Запрос.УстановитьПараметр("ДатаН", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаК", КонецМесяца(ТекущаяДата()));
Результат=Запрос.Выполнить().Выгрузить();
Результат.Колонки.Добавить("КоличествоВыполненныхЗадач");
Результат.Колонки.Добавить("КоличествоОпереженныхЗадач");
Результат.Колонки.Добавить("КоличествоСорванныхЗадач");
КоличествоВыполненных = 0;
КоличествоСорванных = 0;
КоличествоОпереженных = 0;

Для Каждого СтрокаРаспределениеЗадачи Из Результат Цикл
СтрокаТабличнойЧасти=ОбработкаОбъект.ДанныеОЗадачах.Добавить();
ДатаВыполнения = СтрокаРаспределениеЗадачи.ДатаВыполнения;
ДатаФакт = СтрокаРаспределениеЗадачи.ДатаВыполненияПоФакту;
Если День(ДатаФакт)-День (ДатаВыполнения) < 0 Тогда
СтрокаРаспределениеЗадачи.КоличествоОпереженныхЗадач = КоличествоОпереженных + 1;
СтрокаРаспределениеЗадачи.КоличествоВыполненныхЗадач= КоличествоВыполненных + 1;
ИначеЕсли День(ДатаФакт)-День (ДатаВыполнения) > 0 Тогда
СтрокаРаспределениеЗадачи.КоличествоСорванныхЗадач = КоличествоСорванных + 1;
СтрокаРаспределениеЗадачи.КоличествоВыполненныхЗадач= КоличествоВыполненных + 1;
ИначеЕсли День(ДатаФакт)-День (ДатаВыполнения) = 0 Тогда
СтрокаРаспределениеЗадачи.КоличествоВыполненныхЗадач= КоличествоВыполненных + 1;
КонецЕсли;
СтрокаТабличнойЧасти.КоличествоВыполненныхЗадач=Строка(СтрокаРаспределениеЗадачи.КоличествоВыполненныхЗадач);
СтрокаТабличнойЧасти.КоличествоОпереженныхЗадач=Строка(СтрокаРаспределениеЗадачи.КоличествоОпереженныхЗадач);
СтрокаТабличнойЧасти.КоличествоСорванныхЗадач=Строка(СтрокаРаспределениеЗадачи.КоличествоСорванныхЗадач);
СтрокаТабличнойЧасти.НаименованиеЗадачи=Строка(СтрокаРаспределениеЗадачи.НаименованиеЗадачи);
СтрокаТабличнойЧасти.ИсполнительЗадачи=Строка(СтрокаРаспределениеЗадачи.ИсполнительЗадачи);
КонецЦикла;
ДанныеОЗадачах.Свернуть("ИсполнительЗадачи, НаименованиеЗадачи","КоличествоВыполненныхЗадач, КоличествоСорванныхЗадач, КоличествоОпереженныхЗадач");

Но теперь то же самое нужно сделать в таком же отчете. Пишу:
Код 1C v 8.х
 
Макет = ОтчетОбъект.ПолучитьМакет("Отчет1");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РаспределениеЗадачиСрезПоследних.ИсполнительЗадачи,
| РаспределениеЗадачиСрезПоследних.ДатаВыполнения,
| РаспределениеЗадачиСрезПоследних.ДатаНачалаВыполнения,
| РаспределениеЗадачиСрезПоследних.ДатаВыполненияПоФакту,
| РаспределениеЗадачиСрезПоследних.ЗадачаЗавершена,
| РаспределениеЗадачиСрезПоследних.НаименованиеЗадачи
|ИЗ
| РегистрСведений.РаспределениеЗадачи.СрезПоследних(
| ,
| &ЗадачаЗавершена = ЗадачаЗавершена
| И (Период МЕЖДУ &ДатаН И &ДатаК)) КАК РаспределениеЗадачиСрезПоследних";

Запрос.УстановитьПараметр("ДатаК", ДатаК);
Запрос.УстановитьПараметр("ДатаН", ДатаН);
Запрос.УстановитьПараметр("ЗадачаЗавершена", Истина);
Результат = Запрос.Выполнить();


//Результат.Колонки..Колонки.Добавить("КоличествоВыполненныхЗадач");
//Результат.Колонки.Добавить("КоличествоОпереженныхЗадач");
//Результат.Колонки.Добавить("КоличествоСорванныхЗадач");
//
КоличествоВыполненных = 0;
КоличествоСорванных = 0;
КоличествоОпереженных = 0;

Для Каждого СтрокаРаспределениеЗадачи Из Результат Цикл
//СтрокаТабличнойЧасти=ТабДок. ОбработкаОбъект.ДанныеОЗадачах.Добавить();
ДатаВыполнения = СтрокаРаспределениеЗадачи.ДатаВыполнения;
ДатаФакт = СтрокаРаспределениеЗадачи.ДатаВыполненияПоФакту;
Если День(ДатаФакт)-День (ДатаВыполнения) < 0 Тогда
СтрокаРаспределениеЗадачи.КоличествоОпереженныхЗадач = КоличествоОпереженных + 1;
СтрокаРаспределениеЗадачи.КоличествоВыполненныхЗадач= КоличествоВыполненных + 1;
ИначеЕсли День(ДатаФакт)-День (ДатаВыполнения) > 0 Тогда
СтрокаРаспределениеЗадачи.КоличествоСорванныхЗадач = КоличествоСорванных + 1;
СтрокаРаспределениеЗадачи.КоличествоВыполненныхЗадач= КоличествоВыполненных + 1;
ИначеЕсли День(ДатаФакт)-День (ДатаВыполнения) = 0 Тогда
СтрокаРаспределениеЗадачи.КоличествоВыполненныхЗадач= КоличествоВыполненных + 1;
КонецЕсли;
//СтрокаТабличнойЧасти.КоличествоВыполненныхЗадач=Строка(СтрокаРаспределениеЗадачи.КоличествоВыполненныхЗадач);
//СтрокаТабличнойЧасти.КоличествоОпереженныхЗадач=Строка(СтрокаРаспределениеЗадачи.КоличествоОпереженныхЗадач);
//СтрокаТабличнойЧасти.КоличествоСорванныхЗадач=Строка(СтрокаРаспределениеЗадачи.КоличествоСорванныхЗадач);
//СтрокаТабличнойЧасти.НаименованиеЗадачи=Строка(СтрокаРаспределениеЗадачи.НаименованиеЗадачи);
//СтрокаТабличнойЧасти.ИсполнительЗадачи=Строка(СтрокаРаспределениеЗадачи.ИсполнительЗадачи);
КонецЦикла;
// ДанныеОЗадачах.Свернуть("ИсполнительЗадачи, НаименованиеЗадачи","КоличествоВыполненныхЗадач, КоличествоСорванныхЗадач, КоличествоОпереженныхЗадач");



ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");

ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();

ВыборкаДетали = Результат.Выбрать();

Пока ВыборкаДетали.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
КонецЦикла;

ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);


Но не знаю, как добавить колонки к макету и вывести их значение, помогите пожалуйста
Yandex
Возможно, вас также заинтересует
Реклама на портале
bless18
19.06.2010 21:12Ответ № 1
Добавила в макет ячейки и все получилось..
Теперь нужно их свернуть, есть ли метод для поля табдок, которые сворачивает колонки
Пишу:
Код 1C v 8.х
 ОбластьДетальныхЗаписей.Область().Сгруппировать("КоличествоОпереженныхЗадач");

но ничего не сворачивается ((
E_Migachev
21.06.2010 11:31Ответ № 2
(0) используй код как и для обработки, только добавление в табл поле
СтрокаТабличнойЧасти=ОбработкаОбъект.ДанныеОЗадачах.Добавить();
нужно заменить на добавление в таблицу значений!

и потом при выводе в макет, делаешь не
Код 1C v 8.х
 ВыборкаДетали = Результат.Выбрать();

Пока ВыборкаДетали.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
КонецЦикла;


А добавляешь перебор созданной ранее Таблицы значений с данными
Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.