скд заголовок отчета с параметром
[ Вопрос дня ] Какие тонкости имеются при программном выводе заголовка отчета на СКД?
В этой статье разберем довольно популярный вопрос, с которым можно столкнуться не только в реальной работе, но и при устройстве на работу.
Чтобы было понятно, о чем далее пойдет речь, посмотрим на проблему глазами пользователя. Есть простейший отчет, построенный при помощи СКД, вид которого представлен на рис.1:
Рис. 1. Исходный демонстрационный отчет
Нам нужно, чтобы отчет имел заголовок «Отчет по продажам» с параметрами, которые бы заполнялись на основе произвольных данных. Для простоты, в нашем случае эти параметры заголовка будем заполнять из параметров самого отчета (Рис. 2):
Рис. 2. Требуемый вид отчета
На нашем курсе один из участников долго исследовал различные варианты, как можно добиться подобного результата, в результате чего и появился, на наш взгляд, интересный вопрос.
Вопрос
Во втором варианте заголовок не меняется на желаемый. Но если исправить одну строчку:
отрабатывает так, как надо.
В общем, комбинации строк дают разные результаты:
Я запутался в разных сущностях с одинаковыми именами и типами. Результата я добиваюсь, но нет чувства, что разобрался полностью. Не проясните?
Ответ
Здесь дело в двух моментах: значении параметра СтандартнаяОбработка (Истина или Ложь) и в значениях переменных, связанных с настройками компоновки.
СтандартнаяОбработка в коде не изменяется, значит, система будет формировать отчет автоматически. Нам нужно только обеспечить, чтобы в компоновщике содержались корректные настройки. Далее система самостоятельно получит эти настройки из компоновщика, выполнит все действия по компоновке отчета.
Поэтому работать надо именно с компоновщиком настроек:
Вы именно так и делаете, всё получается правильно.
СтандартнаяОбработка в коде установлена в значение Ложь. Значит, все действия по компоновке отчета нужно выполнить вручную (создать макет компоновки по схеме и настройкам компоновки, поработать с процессором компоновки и с процессором вывода результата компоновки данных в табличный документ).
У вас получается следующий код (не самые важные строки я отбросил):
Вы получили из компоновщика настройки. Они хранятся в переменной Настройки. Затем в компоновщике устанавливаете новый заголовок, но в переменной Настройки всё осталось без изменений. Это фактически две разные переменные – Настройки (без заголовка) и КомпоновщикНастроек.Настройки (с новым заголовком).
А макет компоновки вы получаете на основании переменной Настройки, где заголовок не установлен. Поэтому на выходе этот заголовок не выводится в отчете.
Попробуйте еще для закрепления поменять порядок строк:
В этом случае заголовок в отчете уже будет выводиться.
Таким образом, можно сделать следующие выводы:
Этим, пожалуй, и завершим разбор сегодняшнего вопроса. Как видите, казалось бы, такая простая задача, как вывод заголовка, которая по сути своей является вспомогательной при решении билетов, при должном рассмотрении является не такой и простой. Но мы надеемся, что после знакомства с нашим материалом у вас немного “просветлело” 🙂
Завтра разберем новый вопрос, в котором внимательная слушательница чуть не подловила нашего тренера, поэтому не переключайтесь!
АйТиБложик
Маленький IT блог с характером 1С.
Настройка шапки отчета в СКД
Создадим внешний отчет, который будет выводить отчетную информацию об остатках номенклатуры и её обороте. Требуемая информация запрашивается запросом с помощью набор данных типа «Запрос», который содержит текст запроса:
ВЫБРАТЬ
_ДемоНоменклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ АктуальнаяНоменклатура
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
НЕ _ДемоНоменклатура.ПометкаУдаления
И НЕ _ДемоНоменклатура.ЭтоГруппа
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
АктуальнаяНоменклатура.Номенклатура,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.МестоХранения,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоНачальныйОстаток,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоКонечныйОстаток,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоПриход,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоРасход,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоОборот
ИЗ
АктуальнаяНоменклатура КАК АктуальнаяНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления._ДемоОстаткиТоваровВМестахХранения.ОстаткиИОбороты КАК _ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты
ПО АктуальнаяНоменклатура.Номенклатура = _ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.Номенклатура
1. Настройка заголовков на вкладке СКД «Наборы данных»
Здесь все просто, ставим галочку напротив свойства поля «Заголовок» (т.е. отменяем автозаголовок) и вводим необходимый текст заголовка (см. рисунок 4).
Рисунок 4. Изменения названия заголовка в наборе данных |
Если требуется задать оформление для всего поля, а не только для его заголовка, то существует свойство поля «Оформление», с помощью которого можно задать некое оформление поля, например, изменить шрифт или задать цвет фона (см. рисунок 5).
Рисунок 5. Оформление полей в наборе данных |
На этом мои знания про вкладку «Наборы данных» заканчиваются.
2. Настройка заголовков полей на вкладке СКД «Настройки»
Для задания заголовка поля, необходимо выделить нужное поле, правой кнопкой мыши вызвать контекстное меню и выбрать пункт «Установить заголовок» (см. рисунок 6)
Рисунок 6. Установка заголовков полей в настройках отчета |
Что бы сгруппировать поля (например, по типу информации), нужно добавить группировочное поле и поместить в него требуемые поля (см. рисунок 7), вложенность неограниченная.
Рисунок 7. Группировка полей в настройках отчета |
Так же можно поиграться со свойством группировочного поля «Расположение», от которого зависит вид группировки полей.
Данные действия можно производить и в режиме 1С:Предприятия, открыв настройки отчета, НО, в состав настроек отчета должен быть включен пункт «Выбранные поля» (см. рисунок 8).
Рисунок 8. Расширение настроек отчета |
После всех проделанных операций внешний вид отчета изменился следующим образом (см. рисунок 9):
Рисунок 9. Внешний вид отчета после настройки СКД |
На этом легкая часть по настройке шапки отчета закончена. Из плюсов выше перечисленных действий: вся настройка выполняется стандартными средствами. Из минусов: отсутствие возможности задания многострочного заголовка поля.
3. Программная установка заголовков полей
Платформа позволяет программно устанавливать заголовки полей, более того, устанавливать многострочные, что в свою очередь дает возможность гибко и динамически задавать заголовки полей при формировании отчета.
Для этого в модуле отчета определим процедуру ПриКомпоновкеРезультата. В этой процедуре напишем код по заданию заголовка полей.
// 1. Получаем пользовательские настройки.
НастройкиКД = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
// 2. Получаем значение параметра «Период» из которого определяем дату начала и окончания периода.
ПараметрПериод = Новый ПараметрКомпоновкиДанных(«Период»);
Период = НастройкиКД.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрПериод).Значение;
НачалоПериода = Период.ДатаНачала;
КонецПериода = Период.ДатаОкончания;
// 4. Получим список полей, который находятся в группировке «Остатки» (см. рисунок 7) и
// зададим новый заголовок, обойдя элементы в цикле.
ВыбранныеПоля = НастройкиКД.Выбор.Элементы; // Первый уровень полей.
ВыбранныеПоляОстатки = ВыбранныеПоля[6].Элементы; // Поля группировки остатки.
Для каждого ВыбранноеПоле Из ВыбранныеПоляОстатки Цикл
Для Каждого ЭлементМассива Из СписокПолей Цикл
ПолеКомпоновки = Новый ПолеКомпоновкиДанных(ЭлементМассива.ИмяПоля);
Если ВыбранноеПоле.Поле = ПолеКомпоновки Тогда
ВыбранноеПоле.Заголовок = ЭлементМассива.Заголовок;
КонецЕсли;
КонецЦикла;
КонецЦикла;
// 5. Загрузим измененный пользовательские настройки обратно.
ЭтотОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД);
Результат отчета (см. рисунок 10):
Рисунок 10. Многострочный текст заголовка |
Способ потяжелее, чем все выше перечисленные, но мне нравится.
4. Задание шапки отчета с помощью макета
Для более гибкой настройки внешнего вида отчета в СКД предусмотрено создание макетов. В настройках отчета создадим еще одну группировку «детальные записи» и установим имя «СтрокаДЗ» для этой группировки (см. рисунок 11).
Рисунок 11. Установка имени для группировки |
На вкладке «Макеты» добавим макет заголовка группировки. Для макета в табличном документе создадим шапку отчета (шапка отчета должна содержать столько заголовков полей, сколько выводит полей детальная запись) и укажем область табличного документа для макета (см. рисунок 12).
Рисунок 12. Маке заголовка группировки |
В итоге отчет имеет следующего вида шапку(см. рисунок 13):
Рисунок 13. Макет СКД в качестве шапки отчета |
По моему мнению, макеты имеют один большой минус, это невозможность перестраиваться под заданную пользовательскую группировку, поэтому их следует использовать в том случае, если отчетная форма регламентированная и не может быть изменена. Попробуйте задать группировку для группировки «СтрокаДЗ» и увидите, что макет сбился.
На сайте информационно-технологического сопровождения приведена статья Использование предопределенных макетов, которая подробно описывает приемы использования макетов в СКД.
5. Доработка результата (табличного документа)
В этом способе используется замечательный метод табличного документа НайтиТекст(), но для применения данного способа требуется отключение стандартной обработки формирования результата отчета.
Рисунок 14. Изменение табличного документа |
Так же для найденной ячейки можно задать форматирование, см. свойства ячейки табличного документа в синтакс-помощнике.
Данный способ я обнаружил для себя недавно, он прост и позволяет очень гибко работать с шапкой отчета, главное, что бы текст ячейки имел уникальный текст.
1С СКД. Параметры и необязательные параметры.
В данной статье мы рассмотрим практически все возможности и множество нюансов, которые относятся к параметрам в Системе Компоновки Данных 1С (в сокращении — СКД). Параметры в запросе СКД, фигурные скобочки в запросе СКД — оно же Расширение языка запросов для СКД, особенности настройки страницы “Параметры” СКД, вывод параметров на форму, программная установка параметров, мягкие и жесткие параметры.
Параметры в запросе 1С СКД.
Параметры могут использоваться практически в любом месте запроса и выполнять самые различные функции.
Параметры обозначаются знаком & после которого следует имя параметра.
Параметр может быть полем запроса, частью произвольного выражения поля запроса, условием для виртуальной таблицы, частью выражения в отборе запроса и так далее:
При построении запроса конструктором на вкладке “Условия” если не стоит галочка “Произвольное”, то конструктор считает что в правом значении параметр и он записывается без символа &.
Таким образом этот блок настраивается в конструкторе.
Если значение параметра не задано, то построение СКД будет невозможно и будет выдана ошибка, поэтому такие параметры называют “обязательными” или “жесткими”.
Расширение языка запросов для СКД.
Выбрать.
Этот блок располагается в запросе типа выборка данных пакета запросов СКД в первом запросе объединения между перечнем полей и “ИЗ” и заключается в фигурные скобки.
В этом блоке мы перечисляем поля, которые пользователь может выбирать для вывода, группировки и упорядочивания. Конструкция «.*» в параметре “Марка.*” позволяет выбирать для вывода, группировки и упорядочивания дочерние поля значения, например, Марка.Код. Слово “КАК” позволяет задать псевдоним, например, “Ссылка КАК Машина”. Поля в этом блоке попадают в перечень полей набора, даже если отключено автозаполнение. Если автозаполнение включено, то упомянутые поля попадают в соответствии с тем, как они настроены расширением кода, то есть если ссылочное поле без конструкции “.*” дочерние поля доступны не будут, если указан псевдоним — именно он попадет в перечень полей набора.
Таким образом этот блок настраивается в конструкторе.
При автоматическом заполнении полей набора данных, для не включенных в блок расширения “ВЫБРАТЬ”, добавляются все поля списка выборки и их дочерние поля. Они становятся доступными для выбора, упорядочивания, группировки, отбора. Также добавляются поля, которые упомянуты в параметре “Условия” виртуальных таблиц как доступные для отбора.
Отбор, установленный в пользовательских настройках, будет действовать не только на основной запрос, но и на все запросы в пакете. Но это не всегда соответствует логике отчета, к примеру, если помимо отобранной номенклатуры и сумм по ней нужно выводить общую сумму продаж для сравнения. В таких случаях нам нужны специфические отборы в каждом запросе пакета.
Блок расширения “ГДЕ” может быть расположен после или вместо обычного блока “ГДЕ” в любом запросе, подзапросе, запросах объединения и заключается в фигурные скобки. Для присвоения отбору псевдонима используется конструкция “КАК”. Псевдоним нужно использовать чтобы отбор производился конструкцией расширения языка запросов, но не происходил автоматически по наименованию поля.
Если автозаполнение полей набора отключено, поля из этого блока попадают в перечень полей набора доступными только для отбора, использование дочерних полей зависит от наличия конструкции “.*”.
Если автозаполнение включено, и это поле включено в блок расширения “ВЫБРАТЬ” тогда настройки обоих блоков объединяются. Если не включено в “ВЫБРАТЬ” то поля попадают доступными для вывода, группировки, отбора и упорядочивания.
В случае если нужно дополнительно установить какое то ограничение полю, то можно вручную установить галочку в соответствующее поле перечня полей набора данных СКД.
Параметры в блоке «ГДЕ» не обязательны для заполнения, поэтому эти параметры называют “необязательными” или “мягкими”.
Также в блоке “ГДЕ” вместо параметра может быть произвольное выражение с использованием конструкции ВЫБОР или параметров со страницы “Параметры” СКД. Правда в последнем случае вид сравнения необходимо указывать конкретно.
Нужно с осторожностью использовать вид сравнения МЕЖДУ поскольку:
Если параметры НачалоПериода и КонецПериода не будут заданы, то система получит документы за весь период.
Если параметры НачалоПериода и КонецПериода будут заданы, то система получит документы за указанный период.
Если какой-то один из параметров не будет задан, то система выдаст ошибку.
Один из вариантов решения это разбить МЕЖДУ на два условия чтобы система не выдавала ошибку в случае одного незаполненного параметра.
Это же замечание относится к любым выражением с использованием нескольких параметров.
Параметры виртуальных таблиц.
В параметрах виртуальных таблиц в отличие от предыдущих блоков, каждый параметр заключается в фигурные скобки. В полях относящихся к периоду название параметра ставится с &. Пример &ДатаНачала. В поле “Условие” параметры оформляются аналогично блоку “ГДЕ”.
Поведение параметров из поля “Условие” при снятии или установке галочки “Автозаполнение” также аналогично блоку «ГДЕ».
Параметры из полей периода попадают на страницу “Параметры” СКД. Если автозаполнение включено и в поле периода параметр не вписан, параметры с именем поля периода будут автоматически созданы на странице “Параметры” СКД.
Таким образом, эти параметры заполняются в конструкторе запроса. Для открытия формы “Параметры виртуальной таблицы” нужно выбрать виртуальную таблицу в списке таблиц и нажать выделенную синим кнопку. Также тут у таблиц есть булевый реквизит “Обязательная” и числовой реквизит “Номер группы”. Если признак обязательности таблицы не установлен, то она будет добавляться в результирующий запрос только в случае, когда хотя бы одно поле из нее задействовано в компоновке. Номер группы заполняется для необязательных таблиц и обозначает группу таблиц, которые будут добавлены в результирующий запрос только, когда из этой группы таблиц задействовано хотя бы одно поле.
В параметрах виртуальных таблиц возможно совместное использование “жестких” параметров запросов и “мягких” параметров компоновки данных.
В этом примере если в настройках установлено значение параметра &НачалоПериода, то будет использоваться его значение. В противном случае в качестве значения параметра виртуальной таблицы будет использоваться значение “жесткого” параметра “&Начало”.
Если автозаполнение включено и в поля периода не вписаны “мягкие” параметры компоновки данных то параметры с именем поля периода будут автоматически созданы на странице “Параметры” СКД и текст запроса:
будет соответствовать следующему:
В этом случае “мягкие” параметры также будут иметь приоритет над “жесткими”.
Особенности настройки страницы “Параметры” СКД.
Обзорный вид страницы.
На эту страницу автоматически добавляются все параметры из запроса. Можно добавлять свой параметр в для использования его в вычисляемых полях например.
Строка параметра имеет следующие реквизиты:
Имя — это имя параметра, с помощью которого к его значению можно обращаться в тексте запроса, в вычисляемых полях и других местах где доступны выражения.
Заголовок — название, выводимое пользователю.
Тип — определяет тип параметра. Иногда при выборе дат периода, пользователю не нужно указывать время. Тогда нажав на “…” можно указать состав даты — Дата.
Таким же образом можно указать формат числа для численного параметра и длину строки для строкового.
Доступные значения — определяет перечень доступных значений. Представляет собой список значений со стандартными полями — значение и представление, где значение типа параметра. Для ссылочного типа доступны для выбора только предопределенные данные.
Доступен список значений — определяет доступность параметру принимать значение “список значения”.
Значение — предустановленное значение параметра. Типа параметра. Для ссылочного типа доступны для выбора только предопределенные данные.
Выражение — выражение, значение которого примет параметр. Что примечательно здесь могут использоваться как функции встроенного языка запросов, так и функции встроенного языка программирования и даже функции из общих модулей. К примеру, параметру ТекДата присваивается значение функции встроенного языка программирования ТекущаяДата().
Также в примере к реквизиту “Тип” можно было в выражениях использовать функции встроенного языка запросов, особенность применения этих функций в данном месте такова, что строковые параметры функций надо брать в кавычки.
и в запросе можно было бы писать проще поскольку в параметрах уже будет содержаться начало и конец периода:
Иногда, для повышения удобства пользователю для выбора периода лучше дать не два поля с типом Дата, а одно поле с типом Стандартный Период. Тогда, к примеру, создаем три параметра: “Период” с типом СтандартныйПериод, “ПериодНачало” и “ПериодОкончание” с типом Дата. Первый параметр без ограничения доступности. Вторые с ним. В выражение “ПериодНачало” пишем “&Период.ДатаНачала”, в “ПериодОкончания” — “&Период.ДатаОкончания”.
Даты начала и конца стандартного периода также содержат и время. ДатаНачала имеет время 00:00:00, а ДатаОкончания 23:59:59. Получится что пользователь выберет стандартный период в “Период” а разработчик будет использовать корректные “ПериодНачало” и “ПериодОкончание”.
Параметр функциональной опции — используется в механизме функциональных опций.
Включать в доступные поля — включает параметр в доступные поля для выбора в настройках.
Ограничение доступности — ограничивает возможность изменения значения параметра пользователем.
Запрещать незаполненные значения — если установлено и значение параметра не заполнено — отчет не сформируется и выдаст ошибку.
Использование — устанавливает использование параметра. Если установлено Авто и параметр используется в запросе или выражениях, а пользователь перед формированием не установит галочку около параметра — отчет при формировании выдаст ошибку. Пользователь может установить эту галочку непосредственно, или она установится автоматически при изменении значения параметра. Если установлено Всегда, то этой проверки на то, что пользователь заполнил этот параметр — не будет.
Параметры редактирования — содержит настройки редактирования как у поля формы.
Страница “Параметры” блока “Настройки” страницы “Настройки”.
В настройках варианта мы можем установить галочку “Отображать недоступные параметры”, это можно использовать если для разных вариантов мы хотим использовать разный набор параметров.
У параметров в табличной части мы можем установить значение по умолчанию для варианта, включить использование по умолчанию установив галочку слева. Нажав на кнопку, расположенную справа внизу, мы открываем окно пользовательских настроек параметра.
В пользовательских настройках мы можем включить параметр в пользовательские настройки. Установим режим редактирования обычный. Тогда он будет доступен в форме, вызываемой кнопкой “Настройки…”.
Если Режим редактирования установить Быстрый доступ, то параметр появится на форме.
Если у параметра “Период” представление заполнить строкой “ПеРиОд”, то вместо название будет показано содержания поля представление.
Параметры СКД на форме.
Если у отчета СКД нет формы, то платформа создаст автоматическую, на которой будут табличный документ результата, кнопки управления и быстрые пользовательские настройки.
Можно создать свою форму для отчета и вывести на нее табличное поле со всеми пользовательскими настройками. Вот так:
Для этого в созданной форме в конфигураторе вытаскиваем на форму Пользовательские настройки из Компоновщика отчета.
В некоторых случаях параметр не прост, и для его расчета нужен некий алгоритм с циклом или ветвлениями. К примеру если отчет формируем в понедельник то в отчете сравниваются продажи по дням позапрошлой и прошлой недели, а в остальные дни недели сравниваются продажи по дням прошлой и текущей недели. Получается у нас от значения дня недели текущего дня зависит сразу четыре параметра: &НачалоПрошлойНедели, &КонецПрошлойНедели, &НачалоТекущейНедели и &КонецТекущейНедели. А еще нам надо дать возможность пользователю формировать отчет как будто он сформирован вчера или неделю назад. В таком случае мы создаем реквизит формы ТекДата типа Дата. Выводим его на форму. В событии ПриИзменении() пишем.
Таким образом можно программно менять параметры из формы.
Резюме.
Параметры это ключевой инструмент для управления отчетом. Использование параметров дает возможность решить множество прикладных задач, таких как калькуляция на основе информации в базе и значений введенных интерактивно для конкретной калькуляции и многих других. В данной статье рассмотрены практически все относящиеся к параметрам механизмы и особенности. Рамках статьи не рассмотрен блок “Характеристики” Расширения языка запросов для СКД поскольку он не касается параметров. Не рассмотрена настройка параметра “Параметр функциональной опции” поскольку ее описание лучше включить в статью по функциональным опциям.