Как вывести в отчет СКД поле, добавленное программно, и настроить отображение реквизитов объекта?

Программист 1С v8.3 (Управляемые формы)
← На главную

При работе с Системой Компоновки Данных (СКД) в 1С:Предприятии, особенно когда запросы формируются программно, часто возникает необходимость вывести в отчет поля, которые были добавлены в схему компоновки данных. Также разработчики сталкиваются с задачей корректного отображения множества реквизитов одного объекта в разных колонках, при этом сохраняя интерактивность перехода по ссылке на сам объект. Давайте разберем эти задачи по шагам, используя опыт коллег и обширные возможности СКД.

1. Программное добавление поля и его вывод в отчет СКД

Исходная проблема, с которой столкнулся автор темы, заключалась в том, что после программного добавления нового поля в текст запроса СКД и внесения предварительных правок в настройки, это поле появлялось в пользовательском режиме настроек отчета, но по каким-то причинам не выводилось в итоговый результат. Выясним причину такого поведения и рассмотрим детальное решение.

1.1. Проверка описания поля в схеме СКД при программном формировании запроса

Когда запрос СКД создается программно, критически важно понимать, что одного лишь добавления поля в текст запроса недостаточно. Необходимо также программно описать это поле в самой схеме компоновки данных. Объект СхемаКомпоновкиДанных является основой любого отчета СКД. Именно в нем описываются наборы данных, их поля, доступные ресурсы (поля итогов) и параметры. Если поле добавлено только в текст запроса, но не присутствует в коллекции НаборыДанных.Поля соответствующего набора данных в схеме, СКД просто не будет знать о его существовании как о доступном элементе для вывода и настройки.

Для корректного программного добавления поля в набор данных мы используем объект ПолеНабораДанныхСхемыКомпоновкиДанных. Предположим, у нас есть программно сформированная схема компоновки данных и набор данных с определенным именем (например, "ОсновнойНаборДанных"). Тогда код для добавления нового поля может выглядеть следующим образом:


// Предположим, что СхемаКомпоновкиДанных уже программно загружена или создана,
// а также существует набор данных с именем "ОсновнойНаборДанных".
// Получаем доступ к нужному набору данных:
НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Получить("ОсновнойНаборДанных");

Если НаборДанных <> Неопределено Тогда
    // Создаем новый объект поля для набора данных:
    НовоеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    
    // Указываем имя поля. Оно должно точно соответствовать алиасу поля в тексте запроса.
    НовоеПоле.Имя = "МоеНовоеПоле"; 
    
    // Заголовок поля, который будет отображаться в пользовательских настройках отчета.
    НовоеПоле.Заголовок = "Мое новое поле в отчете"; 
    
    // Путь к данным, обычно совпадает с именем поля, если это простое поле.
    НовоеПоле.ПутьКДанным = "МоеНовоеПоле"; 
    
    // Опционально можно указать тип значения поля.
    // Это поможет СКД правильно интерпретировать и форматировать данные.
    // Например, для числового поля:
    // НовоеПоле.ТипЗначения = Новый ОписаниеТипов("Число");
    // Для строкового:
    // НовоеПоле.ТипЗначения = Новый ОписаниеТипов("Строка", , , , "ДлинаСтроки = 100");
    // Для ссылочного:
    // НовоеПоле.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Контрагенты");

    // Если поле является ресурсом (требует суммирования), его также нужно добавить в коллекцию ресурсов.
    // Если это простое поле для вывода, этот шаг не требуется.
    // Пример добавления ресурса:
    // Ресурс = СхемаКомпоновкиДанных.Ресурсы.Добавить(Тип("РесурсСхемыКомпоновкиДанных"));
    // Ресурс.Поле = "МоеНовоеПоле";
    // Ресурс.Выражение = "Сумма(МоеНовоеПоле)";
    // Ресурс.Использование = Истина;
КонецЕсли;

// После всех программных модификаций, если схема была изменена,
// необходимо обновить компоновщик настроек или использовать новую схему.
// КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); // Пример

После того как поле будет корректно добавлено в коллекцию Поля соответствующего набора данных в схеме, СКД начинает "видеть" это поле, и оно становится доступным для выбора и настройки в пользовательском режиме отчета. Без этого шага, даже если поле есть в запросе, СКД не будет знать, что с ним делать.

1.2. Доступ к расширенным настройкам через кнопку "Эксперт"

Даже если поле корректно описано в схеме СКД и запрос формируется правильно, стандартная форма настроек отчета, которая обычно встраивается непосредственно в форму отчета, может быть упрощена. Она может не отображать все доступные поля или не предоставлять полную гибкость для настройки. Именно с такой ситуацией столкнулся автор темы, и решение нашлось благодаря кнопке "Эксперт".

Когда мы работаем с отчетами СКД, особенно с теми, у которых сложная структура или программно формируемые запросы, стандартная форма настроек предоставляет только базовые опции. Для доступа ко всем возможностям СКД, таким как детальная настройка выбранных полей, тонкая настройка группировок, сортировок, параметров и условного оформления, необходимо открыть полноценный конструктор настроек СКД. Кнопка "Эксперт" в настройках сохраненного варианта отчета как раз и предоставляет такой доступ к стандартной, расширенной форме настроек СКД.

Рассмотрим пошагово, как получить доступ к этой важной функциональности:

  1. Перейдите в отчет в пользовательском режиме 1С:Предприятия.
  2. Откройте настройки отчета. Обычно это делается с помощью кнопки "Настройки" на командной панели отчета или через меню "Еще" -> "Изменить вариант отчета".
  3. Если вы уже сохраняли какие-либо варианты настроек для этого отчета, выберите соответствующий вариант. Если нет, создайте новый вариант, чтобы появилась возможность сохранения.
  4. В открывшейся форме настроек варианта отчета найдите кнопку с надписью "Эксперт". Эта кнопка, как правило, находится в верхней части формы настроек варианта отчета или в группе команд, отвечающих за расширенные настройки. Ее расположение может незначительно отличаться в зависимости от конфигурации и версии платформы, но принцип действия всегда один.
  5. Нажмите кнопку "Эксперт". Перед вами откроется стандартная, расширенная форма настроек СКД. Это та же форма, что и конструктор настроек в конфигураторе, но работающая в пользовательском режиме.
  6. В этой стандартной форме вы получите полный контроль над структурой и содержанием отчета. Вы сможете:
    • Перейти на вкладку "Выбранные поля". Здесь вы найдете список всех полей, доступных из вашей программно сформированной схемы. Явно добавьте ваше новое поле в список выводимых полей, перетащив его из списка доступных полей или нажав кнопку добавления.
    • Настроить группировки, если отчет должен быть структурирован по каким-либо критериям (например, по Покупателю, по Дате).
    • Установить параметры сортировки для полей, чтобы данные отображались в нужном порядке.
    • Настроить условное оформление, если требуется выделить некоторые строки или ячейки отчета цветом, шрифтом или другими стилями.
    • Работать с параметрами отчета, если они используются для фильтрации данных.
  7. После внесения всех необходимых изменений обязательно сохраните их. Вы можете сохранить текущий вариант настроек, обновив его, или создать новый вариант настроек, чтобы иметь несколько предустановленных видов отчета.

После сохранения настроек, ваше программно добавленное поле должно корректно отобразиться в отчете. Понимание того, что "Эксперт" дает доступ к тому же функционалу, что и конструктор настроек СКД в конфигураторе (но уже на уровне пользователя и для конкретного варианта отчета), является ключевым для гибкой настройки сложных отчетов.

2. Вывод нескольких полей из одного объекта и сохранение интерактивности

Второй сложный момент, с которым столкнулся автор в процессе доработки отчета, — это ситуация, когда необходимо вывести несколько реквизитов одного ссылочного объекта (например, ИНН, Наименование и другие поля "Покупателя") в разные колонки отчета. При этом важно сохранить возможность интерактивного перехода по ссылке на сам объект ("Покупатель") из ячейки отчета. Это довольно распространенная задача в СКД, и существует несколько подходов к ее решению. Давайте рассмотрим их подробно.

2.1. Использование параметра "Расположение реквизитов = Отдельно"

Одним из первых и наиболее простых шагов для решения проблемы схлопывания реквизитов объекта в одну колонку является настройка параметра "Расположение реквизитов". Этот параметр указывает СКД, как следует обрабатывать и отображать реквизиты составных типов или ссылочных полей, когда они выбраны для вывода в отчет.

Чтобы воспользоваться этой настройкой, выполните следующие действия:

  1. Откройте настройки отчета через кнопку "Эксперт" (как мы рассмотрели в предыдущем разделе), чтобы получить доступ к расширенным опциям СКД.
  2. Перейдите на вкладку "Другие настройки". Эта вкладка содержит различные параметры, влияющие на общее поведение и представление отчета.
  3. Найдите параметр "Расположение реквизитов". По умолчанию он может быть установлен в "Вместе" или "Авто".
  4. Измените его значение на "Отдельно".

При установке значения "Отдельно" СКД будет стараться выводить реквизиты объекта (если они выбраны в отчет, например, Покупатель.Наименование, Покупатель.ИНН) в отдельные колонки, а не объединять их в одну общую колонку с представлением объекта. Однако, важно понимать, что этот способ может не всегда полностью сохранять интерактивную ссылку на сам объект, если вы выбираете для вывода только отдельные реквизиты (например, только Покупатель.Наименование). СКД по умолчанию делает интерактивным само поле-ссылку (например, поле Покупатель без указания конкретного реквизита).

Если вы просто добавите Покупатель.Наименование и Покупатель.ИНН в выбранные поля, даже с параметром "Расположение реквизитов = Отдельно", сами эти ячейки не будут кликабельны для перехода на карточку "Покупателя". Они будут содержать только текстовое или числовое значение. Для сохранения интерактивности с отдельными колонками требуются более сложные подходы, такие как макеты или вычисляемые поля с расшифровкой.

2.2. Вывод отдельных реквизитов объекта

Самый простой и очевидный способ вывести ИНН, Наименование и другие поля объекта в разные колонки — это явно указать каждый из этих реквизитов в списке выбранных полей отчета. Этот метод гарантирует, что каждый реквизит займет свою собственную колонку.

Чтобы реализовать этот подход:

  1. Откройте настройки отчета через кнопку "Эксперт".
  2. Перейдите на вкладку "Выбранные поля".
  3. В списке доступных полей найдите ваш ссылочный объект (например, "Покупатель") и разверните его, чтобы увидеть доступные реквизиты.
  4. Добавьте нужные реквизиты в список выбранных полей, например:
    • Покупатель.Наименование (для вывода наименования контрагента)
    • Покупатель.ИНН (для вывода идентификационного номера налогоплательщика)
    • Покупатель.Код (или любой другой необходимый реквизит, такой как Покупатель.ПолноеНаименование)

Этот подход успешно выводит каждый реквизит в отдельную колонку. Однако, как верно заметил автор, при таком способе вы потеряете возможность интерактивного перехода на карточку контрагента по клику на ячейку. Ячейки, содержащие `Покупатель.Наименование` или `Покупатель.ИНН`, будут отображать только текст или число и не будут являться гиперссылкой на сам объект "Покупатель". Это происходит потому, что СКД не связывает эти отдельные значения с исходным ссылочным объектом для расшифровки.

2.3. Использование "Выражения представления" для сохранения интерактивности в одной колонке

Если ваша задача — сохранить возможность интерактивного перехода на объект, но при этом отображать в колонке произвольное выражение (например, сочетание нескольких реквизитов или просто более полное наименование), то можно использовать свойство "Выражение представления". Этот метод позволяет настроить отображаемый текст, при этом сохраняя функциональность расшифровки для всего поля.

Последовательность действий будет следующей:

  1. Откройте настройки отчета через кнопку "Эксперт".
  2. На вкладке "Выбранные поля" добавьте само ссылочное поле, которое должно быть интерактивным, например, Покупатель. Именно это поле будет отвечать за возможность перехода по ссылке.
  3. Для этого поля откройте свойства. Это можно сделать двойным кликом по полю в списке выбранных полей или выбрав поле и нажав соответствующую кнопку "Свойства" (обычно в виде пиктограммы карандаша или шестеренки).
  4. В окне свойств поля найдите свойство "Выражение представления".
  5. Укажите в нем выражение, которое будет формировать текст, отображаемый в ячейке. Вы можете комбинировать различные реквизиты объекта, текстовые константы и функции. Например:
    
    Покупатель.Наименование + " (ИНН: " + Покупатель.ИНН + ")"
    

    Или, если вы хотите более полное наименование (также существует способ собрать значения колонки из нескольких строк для компактного вывода):

    
    ВЫБОР КОГДА НЕ Покупатель.НаименованиеПолное ЕСТЬ NULL ТОГДА Покупатель.НаименованиеПолное ИНАЧЕ Покупатель.Наименование КОНЕЦ
    
  6. Сохраните изменения в свойствах поля и в настройках отчета.

В этом случае, в одной колонке отчета будет выводиться текст, сформированный по вашему выражению (например, "ООО Ромашка (ИНН: 1234567890)"). При этом, при клике на любую ячейку этой колонки, будет открываться карточка объекта "Покупатель". Однако, как и в предыдущих методах, все реквизиты будут объединены в одну ячейку, а не разделены по разным колонкам. Если вам нужны именно отдельные колонки с сохранением интерактивности, этот метод не решит проблему полностью, но он очень полезен для форматирования представления одной колонки.

2.4. Применение макетов для поля: гибкое решение с интерактивностью и раздельными колонками

Наиболее мощный и гибкий способ решить проблему вывода нескольких реквизитов объекта в разные "колонки" (или, точнее, ячейки, имитирующие колонки внутри одной логической колонки отчета) с сохранением интерактивности — это использование макетов для поля. Макеты в СКД позволяют полностью контролировать форматирование и содержимое ячеек отчета, а также определять поведение расшифровки.

Мы можем создать макет для поля Покупатель, в котором явно укажем, как должны располагаться его реквизиты (например, ИНН, Наименование) и какая часть макета будет отвечать за расшифровку (переход по ссылке). Это позволит СКД использовать ваш кастомный шаблон отображения, но сохранять исходную ссылочную природу поля для интерактивности.

Последовательность действий для создания макета поля:

  1. Откройте схему компоновки данных. Если отчет имеет свой объект в конфигураторе, откройте его. Если схема формируется программно, то в отладке или программно вы можете получить доступ к объекту СхемаКомпоновкиДанных и модифицировать его. Также, воспользуйтесь кнопкой "Эксперт" в пользовательском режиме и затем перейдите в конструктор макетов (обычно это отдельная вкладка или кнопка в расширенных настройках).
  2. Перейдите на вкладку "Макеты" в схеме компоновки данных.
  3. Добавьте новый макет. В свойствах нового макета укажите:
    • Тип макета: Выберите "Макет поля".
    • Область использования: Выберите из списка полей то поле, для которого создается макет, в нашем случае это будет "Покупатель".
  4. Откройте конструктор макета (обычно это кнопка с изображением листа или табличного документа). Перед вами появится стандартный табличный документ 1С, в котором вы будете рисовать шаблон вывода.
  5. В этом макете вы можете создать несколько ячеек, каждая из которых будет соответствовать одному реквизиту объекта. Например, вы можете создать три ячейки в одной строке, чтобы они выглядели как три колонки:
    
    | [ПредставлениеПокупателя] | [ИННПокупателя] | [ДополнительныйРеквизитПокупателя] |
    

    Для каждой такой ячейки в конструкторе макета необходимо настроить следующие свойства:

    • Параметр: В свойствах ячейки (панель "Параметры" или "Свойства ячейки") укажите имя параметра, который будет заполняться значением из СКД. Например, для первой ячейки это может быть ПредставлениеПокупателя, для второй — ИННПокупателя, и так далее. Имена параметров могут быть произвольными, но должны быть уникальными внутри макета.
    • Заполнение: Установите значение "Параметр".
    • Расшифровка: Самый важный пункт для интерактивности. Для той ячейки (или группы ячеек), по клику на которую должен открываться объект, в свойстве "Расшифровка" укажите само ссылочное поле — "Покупатель". Это гарантирует, что при клике на эту ячейку, СКД будет использовать значение поля "Покупатель" для открытия его карточки. Если вы хотите, чтобы весь макет был кликабельным, установите "Расшифровка" для всего макета поля (если такая опция доступна в вашей версии платформы) или для основной ячейки.
  6. Теперь, когда макет готов, необходимо связать параметры макета с реальными полями данных. Вернитесь на вкладку "Настройки" в схеме компоновки данных или в пользовательских настройках (через "Эксперт").
  7. На вкладке "Выбранные поля", для поля Покупатель, откройте его свойства.
  8. В свойствах поля, в группе "Параметры макета", сопоставьте созданные вами параметры макета (например, ПредставлениеПокупателя, ИННПокупателя) с реальными реквизитами объекта, которые вы хотите в них выводить:
    • ПредставлениеПокупателя = Покупатель.Наименование
    • ИННПокупателя = Покупатель.ИНН
    • ДополнительныйРеквизитПокупателя = Покупатель.ДополнительноеПоле

Таким образом, СКД будет использовать ваш макет для вывода значения поля Покупатель. Макет позволит вам отображать его реквизиты в отдельных ячейках, которые визуально будут выглядеть как отдельные колонки внутри одной логической колонки отчета (или даже как набор из нескольких колонок, если вы построите группировку и макет соответствующим образом), но при этом сохранит возможность перехода по ссылке на объект, указанный в свойстве "Расшифровка" макета. Этот метод требует более глубокого понимания работы с макетами, но предоставляет максимальный контроль над отображением и интерактивностью.

3. Работа с дополнительными реквизитами, отсутствующими в запросе

Автор упомянул еще одну интересную ситуацию: когда дополнительный реквизит выводится в отчете, хотя он явно не упоминается в тексте запроса. Это распространенное явление, связанное с тем, как 1С:Предприятие работает с механизмом дополнительных реквизитов и сведений (характеристик). СКД имеет специальные механизмы для интеграции таких полей.

3.1. Использование вкладки "Характеристики" в СКД

СКД обладает встроенным механизмом для работы с дополнительными реквизитами, который позволяет включать их в отчеты без явного добавления в основной запрос. Этот механизм реализован через вкладку "Характеристики" в схеме компоновки данных. Он используется, когда в конфигурации применяется подсистема "Дополнительные реквизиты и сведения" для хранения пользовательских свойств объектов.

Чтобы понять, как это работает, рассмотрим следующие шаги:

  1. Откройте схему компоновки данных отчета в конфигураторе. Если отчет программно формирует схему, то эта настройка должна быть программно внесена в объект СхемаКомпоновкиДанных.
  2. Перейдите на вкладку "Характеристики".
  3. Здесь вы настраиваете, каким образом СКД будет связывать дополнительные реквизиты с объектами в вашем отчете. Для каждого набора данных, который содержит объекты с дополнительными реквизитами, необходимо указать:
    • Поле объекта: Поле из вашего набора данных, которое является ссылкой на объект, для которого хранятся дополнительные реквизиты (например, Покупатель, Номенклатура, Документ).
    • Поле ссылки на вид характеристики: Это поле будет представлять собой ссылку на элемент справочника "ВидыДополнительныхРеквизитов" (или аналогичного), который определяет тип и наименование дополнительного реквизита. Обычно это виртуальное поле, которое СКД создает автоматически при включении механизма характеристик, или оно может быть программно добавлено в запрос как внешний параметр.
    • Поле значения характеристики: Это поле будет содержать само значение дополнительного реквизита. Оно также может быть виртуальным или программно добавленным.

Если эта вкладка заполнена и настроена правильно, СКД автоматически может подтянуть необходимые данные из регистра сведений "ДополнительныеРеквизитыИСведения" или аналогичного (например, РегистрСведений.ЗначенияСвойствОбъектов), даже если они не указаны в основном запросе. СКД сама формирует необходимые соединения и выбирает данные. Это позволяет создавать очень гибкие отчеты, которые могут выводить произвольные дополнительные реквизиты, заданные пользователем в режиме 1С:Предприятия без переработки запроса отчета.

Пример программного добавления характеристики в схему:


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

// После этого в выбранных полях СКД появятся виртуальные поля,
// которые можно выбирать, например "Объект.ИмяДопРеквизита".

3.2. Программный доступ к дополнительным реквизитам на форме

Если речь идет о программной работе с дополнительными реквизитами на форме отчета (например, для динамического добавления их в выбранные поля или в параметры отчета), то мы можем использовать служебный реквизит Свойства_ОписаниеДополнительныхРеквизитов или методы глобального контекста для получения метаданных о дополнительных реквизитах. Этот механизм позволяет динамически получать список всех дополнительных реквизитов объекта и сведения о них, позволяя программно обращаться к ним по имени.

Пример получения списка дополнительных реквизитов для типа объекта:


// Предположим, мы хотим получить описание доп. реквизитов для справочника "Контрагенты"
ТипОбъектаМетаданных = Метаданные.Справочники.Контрагенты;

// Используем стандартную функцию платформы для получения описания
ОписаниеДопРеквизитов = ДополнительныеРеквизитыИСведения.ПолучитьОписаниеДополнительныхРеквизитов(ТипОбъектаМетаданных);

Для Каждого ОписаниеРеквизита Из ОписаниеДопРеквизитов Цикл
    Сообщить("Имя доп. реквизита: " + ОписаниеРеквизита.Имя);
    Сообщить("Заголовок: " + ОписаниеРеквизита.Заголовок);
    Сообщить("Тип значения: " + ОписаниеРеквизита.ТипЗначения.ТипыСтрокой());
    // И другие полезные свойства, такие как:
    // ОписаниеРеквизита.ИмяПредопределенногоЗначения;
    // ОписаниеРеквизита.ЭтоДополнительныйРеквизит;
    // ОписаниеРеквизита.ЭтоДополнительноеСведение;
КонецЦикла;

Используя эту информацию, вы можете программно добавлять вычисляемые поля в схему СКД, модифицировать текст запроса, чтобы включить нужные дополнительные реквизиты, или динамически формировать элементы формы для выбора дополнительных реквизитов пользователем.

3.3. Добавление через вычисляемые поля или преобразование в запросе

Другой подход к включению дополнительных реквизитов в отчет, особенно если механизм "Характеристики" не используется или не настроен, — это использование вычисляемых полей в СКД или программное изменение текста запроса для включения необходимых данных. Если данные о дополнительных реквизитах хранятся в отдельных таблицах (например, в регистрах сведений), вы можете присоединить их к основному запросу.

  1. Через запрос: Если вы программно формируете текст запроса, вы можете добавить к нему необходимые соединения с таблицами, содержащими дополнительные реквизиты. Например, для контрагентов это может быть регистр сведений "ДополнительныеРеквизитыИСведения" (или РегистрСведений.ЗначенияСвойствОбъектов в старых конфигурациях).
    
    ВЫБРАТЬ
        Контрагенты.Ссылка КАК Контрагент,
        Контрагенты.Наименование,
        ДопСведения.Значение КАК ДополнительныйРеквизитИНН // Алиас для доп. реквизита
    ИЗ
        Справочник.Контрагенты КАК Контрагенты
        // Левое соединение, чтобы получить контрагентов даже без доп. реквизитов
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеРеквизитыИСведения КАК ДопСведения
        ПО ДопСведения.Объект = Контрагенты.Ссылка
        И ДопСведения.Свойство = &ВидДопРеквизитаИНН // Параметр, содержащий ссылку на нужный вид реквизита
    ГДЕ
        Контрагенты.ПометкаУдаления = ЛОЖЬ
    

    Здесь &ВидДопРеквизитаИНН будет параметром запроса, который должен быть установлен программно или пользователем и содержать ссылку на конкретный элемент справочника "ВидыДополнительныхРеквизитов", соответствующий, например, ИНН. Важно добавить эти параметры в коллекцию ПараметрыДанных схемы СКД.

  2. Через вычисляемые поля СКД: Если дополнительные реквизиты могут быть получены через выражения, основанные на уже имеющихся полях (например, через функцию, которая по ссылке на объект возвращает значение дополнительного реквизита), вы можете добавить их как вычисляемые поля на вкладке "Вычисляемые поля" в схеме компоновки данных.
    
    // Пример вычисляемого поля, если есть функция для получения доп. реквизита
    // Имя поля: ДополнительныйИНН
    // Выражение: ВычислитьДополнительныйРеквизит(Контрагент, "ИНН")
    

    Функция ВычислитьДополнительныйРеквизит должна быть реализована в общем модуле и быть доступна для вызова из СКД. Это может быть полезно, когда нельзя напрямую объединить таблицы в запросе или нужно сложное условие для получения доп. реквизита.

Важно помнить, что если вы используете левые соединения для получения дополнительных реквизитов, значения могут быть NULL, если реквизит не заполнен для данного объекта. В таком случае, используйте функцию ЕСТЬNULL в запросе для корректного отображения, например, ЕСТЬNULL(ДопСведения.Значение, ""), чтобы пустые значения отображались как пустая строка, а не как "NULL".

4. Общие принципы СКД и их применение

Система Компоновки Данных — это чрезвычайно мощный и гибкий инструмент для создания самых разнообразных отчетов в 1С:Предприятии. Понимание его основных принципов помогает разработчику эффективно решать широкий круг задач и создавать отчеты, которые легко адаптируются под меняющиеся требования бизнеса. Давайте кратко подытожим основные аспекты СКД:

  1. Декларативное описание: СКД позволяет декларативно описать, какие данные должны быть получены, как они должны быть сгруппированы, отсортированы, отфильтрованы и оформлены. Это кардинально отличает ее от жестко фиксированных макетов и предоставляет беспрецедентные возможности для пользовательской настройки отчетов без вмешательства в код конфигурации. Разработчик описывает "что", а СКД решает "как".
  2. Схема компоновки данных (СКД): Это основной объект, который описывает всю структуру данных, доступную для построения отчета. Она включает в себя:
    • Наборы данных: Определяют источники данных (запросы, объекты, внешние источники).
    • Поля наборов данных: Описывают все поля, которые могут быть получены из набора данных, включая их имена, заголовки, пути к данным и типы.
    • Ресурсы: Определяют поля, для которых могут быть вычислены агрегатные функции (суммы, средние, максимум, минимум и т.д.).
    • Параметры: Позволяют передавать значения в запрос или влиять на логику построения отчета.
    • Вычисляемые поля: Позволяют создавать новые поля на основе выражений из существующих полей.
    • Параметры данных: Передаются в запросы или используются для других целей в отчете.
    Даже при программном формировании запроса, схема СКД остается центральным элементом, через который происходит описание всех доступных полей и их свойств.
  3. Настройки компоновки данных: Определяют, как данные из схемы будут представлены в конкретном отчете. Это то, что видит и чем управляет пользователь. Настройки включают:
    • Выбранные поля: Какие поля будут выведены в отчет.
    • Группировки: Как данные будут сгруппированы, с возможностью иерархических группировок.
    • Сортировки: В каком порядке будут отсортированы данные и группировки.
    • Отборы: По каким критериям будут отфильтрованы данные.
    • Условное оформление: Применение стилей (цвета, шрифты) к данным или ячейкам отчета при выполнении определенных условий.
    • Параметры: Установка значений параметров отчета.
    Доступ к "Экспертному" режиму настроек, как мы выяснили, является ключом к полному контролю над этим аспектом и позволяет тонко настраивать отчет.
  4. Макеты: Являются мощным инструментом для форматирования отчета. Они позволяют настраивать внешний вид заголовков группировок, отдельных полей, выводить несколько значений в одной ячейке и обеспечивать расшифровку. Макеты могут быть использованы для решения сложных задач по выводу информации, например, для вывода нескольких реквизитов объекта в разных ячейках с сохранением интерактивности. Использование макетов позволяет добиться уникального и точно заданного внешнего вида отчета, выходящего за рамки стандартного табличного вывода.
  5. Характеристики: Это специальный механизм для работы с дополнительными реквизитами и сведениями. Он позволяет гибко включать пользовательские свойства объектов в отчеты без изменения основной структуры запроса. Это значительно упрощает разработку и поддержку отчетов, которые должны отображать динамически создаваемые пользователем реквизиты.

Помните, что гибкость СКД означает и необходимость глубокого понимания ее механизмов. Когда стандартные средства не помогают, всегда есть возможность обратиться к более низкоуровневым настройкам через режим "Эксперт" или программно управлять схемой и настройками компоновки данных, чтобы добиться нужного результата. Развивая эти навыки, вы сможете создавать действительно мощные и адаптивные отчеты в 1С:Предприятии.

← На главную