1с построитель отчета источник данных таблица значений
Восьмая версия платформы 1С предлагает достаточно много новых объектов конфигурации, каждый из которых обладает своими методами и свойствами, позволяющими упростить процесс разработки приложений и оптимизировать производительность. Один из них – построитель отчетов.
О том, что такое построитель отчета в 1с, какие функции он выполняет, и какое применение он нашел в программировании, и хотелось бы поговорить в этой статье.
Построитель отчета в 1С – что это?
Это объект конфигурации, который позволяет вывести данные в табличный документ или диаграмму. В качестве источника данных могут выступать:
-
;
- Результат выполнения запроса;
- Область ячеек табличного документа;
- Табличная часть документа или справочника;
- Набор записей регистра.
Кроме этого построитель отчета в 1С имеет реквизит «Текст» в который может передаваться текст запроса, результат которого надо посмотреть.
На Рис.1 представлен участок кода, который позволяет с помощью «Построителя отчета» вывести на экран произвольную таблицу значений
Таким образом, очевидным вариантом использования построителя является проектирование отчетов. Не таким явным направлением использования построителя является его использование для настройки пользователем различных элементов запроса (группировок, отборов и т.д.).
Кстати, результат выполнения кода, указанного на Рис.1 можно увидеть на Рис.2
Настройка построителя
Построитель отчетов в некотором смысле напоминает систему компоновки данных и может использоваться в тех случаях, когда СКД по тем или иным причинам недоступна или существует вероятность, что она отработает неправильно.
Как и СКД построитель включает:
- Группировки (уровни иерархии при выводе информации);
- Показатели (значения, по которым необходимо получить итог);
- Дополнительные рассчитываемые поля (реквизиты элементов, результаты действий со значениями);
- Фильтры (отборы);
- Сортировки.
Настройки макета оформления построителя предполагают различные уровни и точности детализации.
Алгоритм использования построителя
Естественно, в зависимости от ситуации, код программы использования построителя отчета может серьезно различаться. Основной алгоритм использования не меняется:
- Объявляем создание нового объекта типа ПостроительОтчета;
- На этом этапе можно либо использовать ПостроительЗапроса для создания текста выборки, либо, используя объект ОписаниеИсточникаДанных воспользоваться существующей выборкой;
- Настройки построителя отчета можно задать, используя метод объекта построителя ЗаполнитьНастройки();
- Отказаться от использования стандартного макета оформления, создающегося методом автогенерации, можно определив свойство объекта Макет у построителя;
- Если не используется ОписаниеИсточникаДанных, на этом этапе необходимо выполнить запрос, используем метод Выполнить();
- Последним этапом является запуск метода Вывести(), вывод можно осуществить в табличный документ, или в соответствующий элемент формы.
Использование расшифровки в построителе
Третья строчка на Рис.1 включает расшифровку ячеек результата выполнения построителя.
Для этого мы воспользовались свойством ЗаполнениеРасшифровки. Тип этого свойства – ВидЗаполненияРасшифровкиПостроителяОтчета, оно может принимать одно из трех значений:
- ЗначенияГруппировок – при активизации ячейки будет использоваться значение указанной в ней группировки;
- НеЗаполнять – значение по умолчанию, означающее, что для конечного результата расшифровка использоваться не будет;
- Расшифровка – структура расшифровки будет заполнена значениями всех группировок исходной выборки.
Кроме этого пользователь имеет возможность самостоятельно задать расшифровку, используя метод НастроитьРасшифровку(). Участок кода, запускающий этот метод представлен на Рис.3
Пример использования построителя для включения отборов в отчете
Немного практической части. Иногда случается ситуация, когда необходимо создать отчет с некоторыми отборами. Решить эту задачу можно и с использованием СКД, а можно воспользоваться построителем:
- Начнем с создания внешнего отчета и добавление в него реквизита с произвольным именем и типизацией ПостроительОтчета (Рис.4);
- Создаем форму отчета и размещаем на ней интерфейсный объект ТабличноеПоле, типизируем его как Отбор и связываем со свойством Отбор созданного реквизита Рис.5
- Создаем процедуру ПриОткрытии(), связанную с соответствующем событием нашей формы;
- Код, прописанный в ней обязательно должен содержать запрос построителя отчета, пример кода приведен на Рис.6, для создания текста построителя можно воспользоваться конструктором запроса, в конструкторе условия построителя и дополнительные его настройки указываются на соответствующей закладке Рис.7;
Условия отбора, прописанные в фигурных <> скобках текста запроса будут исполняться только в случае если соответствующий отбор активирован и использован пользователем;
Внешний вид созданного нами отчета и его результат показан на Рис.9
Безусловно, в пределах одной статьи достаточно сложно продемонстрировать все возможности нового объекта, но получить о нем представление и начать его использовать с учетом полученных знаний, нам кажется, можно.
Построитель отчета - мощная штука для быстрого написания отчетов.
Однако иногда хочется использовать свои макеты, да и просто хотелось бы иметь "рыбу", которую можно было бы быстро использовать для написания отчета, особенно если данные берутся из таблицы значений.
Это именно такая "рыба".
Я предлагаю функцию обПостроительВывестиПоГруппировкам , которая занимается выводом таблицы значений с помощью построителя отчета с заданными группировками, итогами и параметрами группировок.
Итоги можно использовать любые - количество, сумма, среднее.
Пока еще не поддерживается сортировка, именно поэтому список параметров передается в виде структуры, чтобы можно было добавлять свои параметры.
Используется гибкое управление параметрами:
= Если не задан макет, то замена макета не производится
= Если не заданы параметры построителя, то они и не назначаются
= Может использоваться в качестве источника не только таблица значений, но и результат запроса
= Если не задан табличный документ, то она не выводится
Пример вызова функции:
Структура макета
Строки с уровнями именуются Уровень0, Уровень1, .
Колонки с уровнями именуются кУровень0, кУровень1, …
Детальная информация по строкам именуется кДетали.
Общие итоги именуются ОбщиеИтоги, шапка таблицы - ШапкаТаблицы, подвал таблицы - ПодвалТаблицы.
Может быть на картинке не заметно, но колонки с итогами содержат параметры, которые называются так же, как итоги в таблице значений, т.е. например "Сумма", "Остаток", "Количество".
Кроме измерений и итогов, можно выводить доп.параметры, например на рисунке виден параметр Адрес.
Замечания по коду
Пусть у нас есть некая таблица значений ТЗ.
Построитель отчета, привязанный к этой таблице значений, создается так:
Допустим, в списке значений спзГруппы у нас находится список колонок-группировок для отчета, в структуре спзИтоги - список колонок-итогов (колонки-итоги должны иметь явно указанный тип число, иначе не будет суммироваться итог).
Нужно указать, что колонки спзГруппы будут измерениями построителя - функция обПостроительОтчетаУстановитьИзмерения .
Нужно указать, что колонки спзИтоги будут итогами построителя и назначить им некоторую функцию итогов (Количество,Сумма) - функция обПостроительОтчетаУстановитьИтоги .
Затем вызывает заполнение настроек построителя:
Затем мы выполняем построитель и заполняем параметры вывода макета:
Теперь нужно подставить в построитель наш собственный макет. Но в макете построителя и в нашем названия групп могут не совпадать, поэтому нужно скорректировать названия. В переменной Макет хранится наш макет, мы его обработаем и подставим в макет построителя:
Код 1C v 8.х
Можно также сделать через интерактивное нажатие кнопки. На форму помещаем кнопку, в ее свойствах выставляем "ИсточникДействий" - нужное нам Табл. Поле, в событии "Нажатие" выбираем "Вывести список. "
Похожие FAQ
QR код в 1С 20
Столкнулся с интересной задачей реализации генерации QR-кода в 1С 8.2 ( QR-код — матричный код (двухмерный штрихкод) ) Для генерации было использовано api от google (http://chart.apis.google.com/chart). Вот сайт , который работает с ним. После тог Быстрая загрузка данных большого размера файла Excel в многомерный Массив 0
// OldthiefXXX Перем СерверExcel; Процедура КнопкаВыполнитьНажатие(Кнопка) ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС); КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count; КоличествоКолонокДанных=ФайлХЛС.ActiveSheet Внешние обработки, печатные формы, обработки по заполнению табличных частей 3
Справочник «Внешние обработки, печатные формы, обработки по заполнению табличных частей» содержит список произвольных обработок, произвольных отчетов, дополнительных печатных форм, обработок для заполнения ТЧ объектов, обработок, подключаемых к отч Выбор оптимального алгоритма для разбора строки в массив 0
Столкнулся с проблемой: ПолучитьСтрокуПоНомеру() медленно отрабатывает на входных данных 100 000 строк. Как сделать бытсрее? // Пример Defender aka LINN ВремяНачала = ТекущаяДата(); Сообщить(" Обработка начата: " + ВремяНачала); ТЗ = Новый Та Выбор периода, задать период 8
Посмотреть все результаты поиска похожих
Еще в этой же категории
Как быстро вывести таблицу значений в табличный документ? 96
ТекстЗапроса = " ВЫБРАТЬ * ИЗ Справочник.Пользователи" ; ЗапросаДанных = Новый Запрос(ТекстЗапроса); РезЗапроса = ЗапросаДанных.Выполнить().Выгрузить(); ТабДокумент = Новый ТабличныйДокумент; Построитель = Новый Построит Создание Таблицы значений и описание типов значений ее колонок 29
ТаблицаПериодов = Новый ТаблицаЗначений; ТаблицаПериодов.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число")); ТаблицаПериодов.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.СотрудникиОрганизаций")); ТаблицаП Удаление строк Таблицы Значений 27
// 1. Удаление строк согласно условию НулевыеСтроки = ТаблицаПослеПодмен.НайтиСтроки(Новый Структура(" Сумма" ,0)); Для каждого СтрокаТаблицы Из НулевыеСтроки Цикл ТаблицаПослеПодмен.Удалить(СтрокаТаблицы) КонецЦикла; // Нужно оставить стр Как скопировать, выгрузить данные из одной таблицы значений в другую? 11
Как скопировать или выгрузить данные из одной таблицы значений в другую таблицу значений? 1. Добавление, копирование строк из одной таблицы значений в другую таблицу значений: Для каждого СтрокаТЗ Из Таблица1 Цикл ЗаполнитьЗначенияСвойств(Таблица Объединение 2 таблиц значений 11
// Объединить 2 таблицы значения // тзОсновная - таблица к которой будут изменяться данные // тзПрисоединяемая - таблица из которой будут браться данные // стОтборОдинаковых - стурктура со списком полей по которым определяеться одинаковость запис Посмотреть все в категории Работа с Таблицей Значений
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ХозрасчетныйОбороты.Субконто2 КАК ДоговорОбороты,
ХозрасчетныйОбороты.СуммаОборотДт КАК Расход,
ХозрасчетныйОбороты.СуммаОборотКт КАК Приход
ПОМЕСТИТЬ ТаблДоговоровОбороты
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(, , , **(Счет = &Счет)**, , , **(КорСчет = &КорСчет)**, ) КАК ХозрасчетныйОбороты
;
(4) вопрос именно в том, как в Универсальном отчёте организовать запрос к ТЗ ?
В Процедуре УстановитьначальныеНастройки() пишем:
ТаблицаДанных = СформироватьТаблицуДанных(); // здесь задаем только структуру таблицы, без самих данных
ИсточникДанных=Новый ОписаниеИсточникаДанных(ТаблицаДанных);
ИсточникДанных.Колонки.Сотрудник.Измерение=Истина;
ИсточникДанных.Колонки.Подразделение.Измерение=Ист ина;
ИсточникДанных.Колонки.Работал.Итог="СУММА(Работал )";
ИсточникДанных.Колонки.Отпуск.Итог="СУММА(Отпуск)" ;
УниверсальныйОтчет.ПостроительОтчета.ИсточникДанны х=ИсточникДанных;
УниверсальныйОтчет.мНазваниеОтчета = СокрЛП(ЭтотОбъект.Метаданные().Синоним);
УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;
УниверсальныйОтчет.мВыбиратьИспользованиеСвойств = Ложь;
УниверсальныйОтчет.ПоказыватьЗаголовок=Истина;
УниверсальныйОтчет.мНазваниеОтчета="Отработано";
УниверсальныйОтчет.ДобавитьПоказатель("Работал","Р аботал", Истина);
УниверсальныйОтчет.ДобавитьПоказатель("Отпуск","От пуск", Истина);
УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вс тавить("Сотрудник","Сотрудник");
УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вс тавить("Подразделение","Подразделение");
УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вс тавить("Работал","Работал");
УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вс тавить("Отпуск","Отпуск");
УниверсальныйОтчет.УстановитьПредставленияПолей(Ун иверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);
УниверсальныйОтчет.ПостроительОтчета.ИзмеренияСтро ки.Очистить();
УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Подраз деление");
УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Сотруд ник");
УниверсальныйОтчет.ПостроительОтчета.ИзмеренияКоло нки.Очистить();
Потом пишем функцию:
Функция СформироватьТаблицуДанных() // для формирования структуры таблицы
Массив = Новый Массив;
Массив.Добавить(Тип("СправочникСсылка.ФизическиеЛи ца"));
ОписаниеТиповФизЛицо = Новый ОписаниеТипов(Массив);
Массив = Новый Массив;
Массив.Добавить(Тип("СправочникСсылка.Подразделени я"));
ОписаниеТиповПодразделение = Новый ОписаниеТипов(Массив);
Массив = Новый Массив;
Массив.Добавить(Тип("Число"));
КЧ = Новый КвалификаторыЧисла(10,0);
ОписаниеТиповРабота = Новый ОписаниеТипов(Массив,,КЧ);
ТЗ2 = Новый ТаблицаЗначений;
ТЗ2.Колонки.Добавить("Сотрудник", ОписаниеТиповФизЛицо);
ТЗ2.Колонки.Добавить("Подразделение", ОписаниеТиповПодразделение);
ТЗ2.Колонки.Добавить("Работал",ОписаниеТиповРабота );
ТЗ2.Колонки.Добавить("Отпуск",ОписаниеТиповРабота) ;
Возврат ТЗ2;
КонецФункции
В процедуре формирования отчета пишет
Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт
// Перед формирование отчета можно установить необходимые параметры универсального отчета.
Если Не ЗначениеЗаполнено(УниверсальныйОтчет.ДатаНач)
ИЛИ Не ЗначениеЗаполнено(УниверсальныйОтчет.ДатаКон) Тогда
Предупреждение("Не задан период отчета!");
Возврат;
КонецЕсли;
ЗаполнитьТаблицуДанных(); // а в этой процедуре заполняем таблицу ТаблицаДанных чем нам надо. Она выполняется только когда мы запускаем формирование отчета, а функция СформироватьТаблицуДанных() - при открытии, поэтому она должна быть простая и быстрая.
УниверсальныйОтчет.ПостроительОтчета.Параметры.Вст авить("КонДата", КонецДня(Дата(УниверсальныйОтчет.ДатаКон)));
УниверсальныйОтчет.ПостроительОтчета.Параметры.Вст авить("НачДата", Дата(УниверсальныйОтчет.ДатаНач));
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей. COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Посмотреть все результаты поиска похожих
Еще в этой же категории
Создание Таблицы значений и описание типов значений ее колонок 29
ТаблицаПериодов = Новый ТаблицаЗначений; ТаблицаПериодов.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число")); ТаблицаПериодов.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.СотрудникиОрганизаций")); ТаблицаП Удаление строк Таблицы Значений 27
// 1. Удаление строк согласно условию НулевыеСтроки = ТаблицаПослеПодмен.НайтиСтроки(Новый Структура(" Сумма" ,0)); Для каждого СтрокаТаблицы Из НулевыеСтроки Цикл ТаблицаПослеПодмен.Удалить(СтрокаТаблицы) КонецЦикла; // Нужно оставить стр Как скопировать, выгрузить данные из одной таблицы значений в другую? 11
Как скопировать или выгрузить данные из одной таблицы значений в другую таблицу значений? 1. Добавление, копирование строк из одной таблицы значений в другую таблицу значений: Для каждого СтрокаТЗ Из Таблица1 Цикл ЗаполнитьЗначенияСвойств(Таблица Объединение 2 таблиц значений 11
// Объединить 2 таблицы значения // тзОсновная - таблица к которой будут изменяться данные // тзПрисоединяемая - таблица из которой будут браться данные // стОтборОдинаковых - стурктура со списком полей по которым определяеться одинаковость запис Ускорение поиска в таблице значений - Индексы 10
Для более быстрого поиска в базах данных было придумано свойство индекс. При использовании таблиц значений мы также можем создавать индексы для произвольных колонок. Например, у нас есть таблица с колонками «Номенклатура, Цена, ЕдиницаИзмерения». И Посмотреть все в категории Работа с Таблицей Значений
Читайте также: