Первый шаг в 1С — абсолютно бесплатно.

📋 Отчеты в 1С 8.3

Система компоновки данных (СКД)

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

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

1. Что такое СКД и основные понятия

Система компоновки данных отделяет получение данных от их визуального представления. Разработчик описывает набор данных (обычно с помощью SQL-подобного языка запросов 1С), определяет настройки компоновки (структуру вывода), а механизм СКД самостоятельно формирует и заполняет итоговый документ.

Ключевые элементы СКД:

*Схема компоновки данных (СКД): Главная структура отчета, содержащая запросы, наборы данных, связи и параметры.

*Настройки компоновки данных: Описание того, как данные выводятся пользователю (группировки, таблицы, диаграммы).

*Компоновщик макета: Объект, объединяющий схему и настройки в готовый макет для исполнения.

*Процессор компоновки: Выполняет сбор и обработку данных.

*Процессор вывода: Выводит полученный результат в Табличный Документ или другой формат.

2. Основные вкладки настройки в конфигураторе

При создании отчета на СКД разработчик работает с несколькими базовыми вкладками в схеме компоновки:

*Наборы данных: Содержит текст запроса к базе данных или описание объекта/объединения.

*Связи наборов данных: Настраивает соединения между несколькими запросами (аналог LEFT JOIN / FULL JOIN на уровне СКД).

*Параметры: Управляет условиями отбора и передачей значений в запрос (например, Период, Организация).

*Поля ресурсов: Указывает агрегатные функции для итоговых показателей (Сумма, Количество, Среднее).

*Параметры вывода: Задает общие визуальные настройки (Заголовок, Выводить заголовок, Расположение итогов).

*Настройки: Определяет структуру отчета для пользователя (Группировки, Выбранные поля, Отборы, Сортировка).

3. Пользовательские настройки и оформление

СКД позволяет гибко управлять тем, что видит пользователь на форме отчета, без изменения конфигурации.

Выбранные поля и отборы

*Выбранные поля: Определяют, какие колонки будут выведены в итоговую таблицу.

*Отборы: Позволяют фильтровать данные (например, Номенклатура В иерархии ... или Сумма Больше 10000).

 

Условное оформление

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

Пример условного оформления в настройках:

*Оформляемые поля: СуммаОстатка

*Условие: СуммаОстатка < 0

*Оформление: Цвет текста = Красный

4. Программная работа с СКД

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

Полный цикл программного формирования отчета

Ниже приведен базовый алгоритм формирования отчета СКД из модуля объекта без пробелов и табуляций в начале строк:

// В модуле объекта отчета

Процедура ПриКомпоновкеРезультата(ТабличныйДокумент, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

Настройки = КомпоновщикНастроек.ПолучитьНастройки();

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);

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

ПроцессорВывода = Новый ПроцессорВывода

/РезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры

5. Важные продвинутые возможности СКД (Дополнение)

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

А. Вложенные схемы и подчиненные отчеты

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

Б. Внешние наборы данных (Объект)

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

Пример передачи Таблицы Значений в СКД:

// Передача внешней таблицы значений ТЗДанные в СКД

ВнешниеНаборы = Новый Структура;

ВнешниеНаборы.Вставить("ТЗДанные", МояТаблицаЗначений);

ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы, ДанныеРасшифровки);

В. Вычисляемые поля и выражения

Позволяют вычислять значения прямо в СКД, не усложняя текст запроса.

Пример выражения вычисляемого поля:

Выбор Когда КоличествоЗаказано > 0 Тогда СуммаЗаказа / КоличествоЗаказано Иначе 0 Конец

Г. Расшифровка (Drill-down)

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

 

📋 Отчеты в 1С 8.3

Простой отчет (не-СКД)

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

Ниже подробно описана структура, порядок создания, настройки и приведены практические примеры.

 

Порядок создания и работы простого отчета

1. Создание объекта в конфигураторе

*Описание: В дереве конфигурации добавляется новый объект типа Отчет.

*Пример: В ветке «Отчеты» нажимаем Добавить, указываем имя ПростойОтчетПоОстаткам.

2.Формирование макета

*Описание: В структуру отчета добавляется макет типа «Табличный документ». В нем создаются секции (области), которые будут последовательно выводиться в итоговый документ.

*Пример: Добавляем макет ОсновнойМакет. Выделяем строки и задаем имена областей через меню Таблица -> Имена -> Назначить имя:

Область Заголовок

Область Шапка

Область Строка

Область Подвал

 

3.Создание формы отчета

*Описание: Добавляется форма отчета, на которой размещаются элементы управления для выбора параметров (например, период, организация) и кнопка для запуска формирования.

*Пример: На форму выводится реквизит Период (тип СтандартныйПериод) и добавляется кнопка Сформировать, связанная с командой формы.

 

4. Программирование логики (Модуль формы / объекта)

*Описание: Написывается код обработки, который запрашивает данные из базы, выбирает области из макета, заполняет в них параметры и выводит их в итоговый табличный документ.

*Пример: В процедуре обработки кнопки вызывается запрос, результаты которого перебираются в цикле и выводятся методом Вывести().

 

Основные настройки и параметры

1.Параметры заполнения ячеек макета

*Описание: Ячейкам в макете задаются свойства отображения текста: Текст (статичный), Параметр (динамически заполняемый через код) или Шаблон (смешанный).

Пример: В ячейке области Строка устанавливается свойство Заполнение = Параметр, а выражение задается как Номенклатура.

 

2.Настройка вывода и оформления

*Описание: Настройка поведения табличного документа: запрет редактирования, включение отображения сетки, автозаполнение ширины колонок, фиксация шапки.

Пример: Настройка свойств итогового документа в коде:

ТабДок.ОтображатьСетку = Истина;

ТабДок.ФиксацияСверху = 3;

 

3.Группировка и иерархия строк

*Описание: Организация древовидной структуры и группировок данных в отчете с помощью методов табличного документа.

*Пример: Использование методов НачатьГруппуСтрок() и ЗакончитьГруппуСтрок() при переборе иерархических данных.

Примеры кода

Пример 1. Базовый шаблон формирования отчета

Процедура формирования табличного документа из макета

Описание: Стандартный алгоритм получения макета, выполнения запроса к базе данных и последовательного вывода областей. Пример:

&НаСервере

Функция СформироватьОтчетНаСервере()

//Получаем макет отчета

Макет = Отчеты.ПростойОтчетПоОстаткам.

|ПолучитьМакет("ОсновнойМакет");

Создаем итоговый табличный документ

ТабДок = Новый ТабличныйДокумент;

//Получаем области из макета

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

//Выводим заголовок и шапку

ОбластьЗаголовок.Параметры.ДатаФормирования = ТекущаяДата();

ТабДок.Вывести(ОбластьЗаголовок);

ТабДок.Вывести(ОбластьШапка);

//Формируем и выполняем запрос

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,

| ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Количество

|ИЗ

| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки";

Выборка = Запрос.Выполнить().Выбрать();

ИтогКоличество = 0;

//Заполняем и выводим строки

Пока Выборка.Следующий() Цикл

ОбластьСтрока.Параметры.Номенклатура = Выборка.Номенклатура;

ОбластьСтрока.Параметры.Количество = Выборка.Количество;

ТабДок.Вывести(ОбластьСтрока);

ИтогКоличество = ИтогКоличество + Выборка.Количество;

КонецЦикла;

//Выводим подвал с итогами

ОбластьПодвал.Параметры.ИтогКоличество = ИтогКоличество;

ТабДок.Вывести(ОбластьПодвал);

Возврат ТабДок;

КонецФункции

Пример 2. Формирование отчета с группировками (иерархией)

Вывод данных с уровнями группировки

Описание: Использование встроенных функций группировки табличного документа для создания сворачиваемых секций.

Пример:

&НаСервере

Функция СформироватьОтчетСГруппировкой()

Макет = Отчеты.ПростойОтчетПоОстаткам.

|ПолучитьМакет("ОсновнойМакет");

ТабДок = Новый ТабличныйДокумент;

ОбластьГруппа = Макет.ПолучитьОбласть("Группа");

ОбластьЭлемент = Макет.ПолучитьОбласть("Строка");

Запрос = Новый Запрос;

Запрос.Текст =

ВЫБРАТЬ

| Товары.Родитель КАК Группа,

| Товары.Ссылка КАК Номенклатура,

| Товары.Код КАК Код

|ИЗ

| Справочник.Номенклатура КАК Товары

|ГДЕ

| НЕ Товары.ЭтоГруппа

|УПОРЯДОЧИТЬ ПО

| Группа.Наименование ИЕРАРХИЯ";

РезультатЗапроса = Запрос.Выполнить();

ВыборкаГруппы = РезультатЗапроса.

|Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаГруппы.Следующий() Цикл

ОбластьГруппа.Параметры.НаименованиеГруппы = ВыборкаГруппы.Группа;

ТабДок.Вывести(ОбластьГруппа);

Начинаем уровень группировки для элементов

ТабДок.НачатьГруппуСтрок();

ВыборкаЭлементы = ВыборкаГруппы.Выбрать();

Пока ВыборкаЭлементы.Следующий() Цикл

ОбластьЭлемент.Параметры.Код = ВыборкаЭлементы.Код;

ОбластьЭлемент.Параметры.Номенклатура = ВыборкаЭлементы.Номенклатура;

ТабДок.Вывести(ОбластьЭлемент);

КонецЦикла;

Завершаем уровень группировки

ТабДок.ЗакончитьГруппуСтрок();

КонецЦикла;

Возврат ТабДок;

КонецФункции