... достаточно простая. Нужно создать отчет на СКД, который выводит остатки по номенклатуре в разрезе складов. Рассмотрим два варианта решения.
Первый будет осуществлен стандартными возможностями СКД без единой строчки кода. Второй вариант будет усложнен дополнительным условием при выводе отчета. Но обо всем по порядку.
Система компоновки данных имеет стандартные возможности по фиксации колонок в отчете. Настройки фиксации как таковые отсутствуют, но мы можем влиять на нее через изменение структуры отчета. Например, если нам нужно в отчете, скриншот которого представлен выше, сделать фиксацию для колонки "Номенклатура", то достаточно настроить структуру вывода следующим образом:
Тогда при формировании отчета мы получим необходимый результат. Фиксация будет происходить для всех полей, которые находятся в разделе "Строки".
Таким образом, без единой строчки кода, используя только стандартные возможности СКД, мы решили задачу с фиксацией колонки в отчете. Но что, если нам нужно зафиксировать не только первую колонку "Номенклатура", но и первую колонку склада (в нашем случае это "Главный склад"). Стандартные возможности СКД тут не помогут, пойдем другим путем.
Используя отчет из предыдущей части статьи зафиксируем первую колонку "Склад" в выводимом табличном документе. Для этого программно сформируем отчет в обработке "ПриКомпоновкеРезультата" модуля объекта отчета. Листинг этой процедуры-обработчика представлен на следующем листинге:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; // отключаем стандартный вывод отчета - будем выводить программно Настройки = КомпоновщикНастроек.ПолучитьНастройки() ;// Получаем настройки отчета ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; // Создаем данные расшифровки КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; // Создаем компоновщик макета // Инициализируем макет компоновки используя схему компоновки данных // и созданные ранее настройки и данные расшифровки СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); // Скомпонуем результат ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки); ДокументРезультат.Очистить(); // Выводим результат в табличный документ ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры
Чтобы провести фиксацию первой колонки выводимого склада, выполним вывод отчета в табличный документа. Затем установим фиксацию в табличном документе слева в значение 3 (3 ячейки).
//........ ДокументРезультат.Очистить(); // Выводим результат в табличный документ ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); // Устанавливаем фиксацию в табличном документе ДокументРезультат.ФиксацияСлева = 3; КонецПроцедуры
Почему фиксация имеет значение именно 3? Обратимся к следующему скриншоту:
И так, задача решена. Конечно, не универсальным образом, но пример изначально планировался простым.
На изображении показано количество ячеек от левого края, для которых нужно включить фиксацию.
В результате формирования отчета мы увидим следующий результат:
В предыдущих статьях мы не раз изменяли табличный документ после работы процессора вывода компоновки данных. Этот пример еще раз показывает, что, работая с программным формированием отчета на СКД, мы можем создать отчет практически любой сложности, с любым внешним видом.