Создание шахматного отчета, или как его часто называют в аналитике — Pivot-таблицы, является классической задачей при подготовке к экзамену «1С:Специалист по платформе» (в частности, задача 2.18 по бухгалтерскому учету). Такой отчет представляет собой таблицу, где одни и те же измерения (например, счета или контрагенты) располагаются одновременно и в строках, и в колонках, а на пересечении выводятся итоговые показатели. Рассмотрим подробнее, какими инструментами платформы 1С:Предприятие 8.3 можно решить эту задачу максимально эффективно.
Это наиболее современный, быстрый и рекомендуемый способ. В СКД уже встроен мощный механизм для построения кросс-таблиц, который позволяет избежать написания сложного программного кода. Проанализируем процесс настройки такого отчета по шагам.
РегистрБухгалтерии.ОборотыДтКт. Она позволяет получить готовые пары «Счет Дебета — Счет Кредита» и соответствующую сумму оборота между ними.СчетДт. В ветку «Колонки» добавим группировку по полю СчетКт. Таким образом, мы создадим каркас будущей шахматки.Сумма (с функцией Сумма()). В настройках самой таблицы, в разделе «Выбранные поля», укажем наш ресурс Сумма.Разберем важный нюанс: если в задаче требуется вывести все счета, даже те, по которым не было движений, нам придется изменить запрос. Вместо прямого обращения к таблице оборотов, мы выполним левое соединение справочника или плана счетов с этой таблицей. Это позволит сформировать пустые ячейки на пересечениях, которые потом можно оформить в СКД.
Иногда возникают ситуации (например, при специфических требованиях к интерфейсу или на старых версиях платформы), когда стандартных средств СКД недостаточно. В этом случае мы воспользуемся программным методом формирования ТабличногоДокумента. Ключевым инструментом здесь выступает метод Присоединить().
Рассмотрим алгоритм реализации:
ТаблицуЗначений для быстрого поиска.Посмотрим на пример кода, реализующего такой обход:
// Получаем макет и создаем табличный документ
Макет = ПолучитьМакет("МакетШахматки");
ТабДок = Новый ТабличныйДокумент;
// Выводим пустой угол (пересечение заголовков)
ОбластьУгол = Макет.ПолучитьОбласть("Шапка|Строка");
ТабДок.Вывести(ОбластьУгол);
// Сначала выводим все заголовки колонок (например, Счета Кредита)
Для Каждого ТекКолонка Из СписокСчетовКт Цикл
ОбластьШапка = Макет.ПолучитьОбласть("Шапка|Ячейка");
ОбластьШапка.Параметры.СчетКт = ТекКолонка;
ТабДок.Присоединить(ОбластьШапка);
КонецЦикла;
// Теперь выводим строки
Для Каждого ТекСтрока Из СписокСчетовДт Цикл
// Выводим заголовок строки
ОбластьЗаголовокСтроки = Макет.ПолучитьОбласть("Строка|Строка");
ОбластьЗаголовокСтроки.Параметры.СчетДт = ТекСтрока;
ТабДок.Вывести(ОбластьЗаголовокСтроки);
// Внутри строки выводим данные для каждой колонки
Для Каждого ТекКолонка Из СписокСчетовКт Цикл
ОбластьДанные = Макет.ПолучитьОбласть("Строка|Ячейка");
// Поиск суммы в заранее подготовленной ТЗ
ПараметрыПоиска = Новый Структура("СчетДт, СчетКт", ТекСтрока, ТекКолонка);
СтрокаДанных = ТаблицаРезультатов.НайтиСтроки(ПараметрыПоиска);
Если СтрокаДанных.Количество() > 0 Тогда
ОбластьДанные.Параметры.Сумма = СтрокаДанных[0].Сумма;
Иначе
ОбластьДанные.Параметры.Сумма = 0;
КонецЕсли;
ТабДок.Присоединить(ОбластьДанные);
КонецЦикла;
КонецЦикла;
В рамках экзамена по платформе задача 2.18 требует не просто вывести «шахматку», а сделать это максимально эффективно. Выясним причину, по которой многие проваливаются на этом этапе: попытка написать один огромный запрос с кучей соединений. Правильный подход — использовать виртуальную таблицу ОборотыДтКт и СКД.
Особенности, на которые обращает внимание экзаменатор:
Проанализируем ситуацию: какой метод выбрать? Если ваша цель — быстрое решение типовой задачи, СКД вне конкуренции. Она автоматически обрабатывает расшифровки, позволяет пользователю менять группировки местами и настраивать отборы. Программный метод (через Присоединить) оправдан только тогда, когда вам нужно создать нестандартный интерфейс, например, интерактивное расписание занятий или планировщик ресурсов, где ячейки должны реагировать на клики специфическим образом или иметь сложную визуальную структуру, которую трудно описать в рамках компоновки.
Подводя итог, отметим: несмотря на скепсис некоторых опытных разработчиков относительно полезности шахматных отчетов в реальном бизнесе, умение их строить — это базовый навык программиста 1С, демонстрирующий глубокое понимание механизмов компоновки данных и владение методами работы с табличными документами.