Top.Mail.Ru

Постобработка отчета 1С СКД

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

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

Чтобы вклиниться в процесс формирования отчета вам необходимо программно получить результат отчета. Поэтому постобработка ВСЕГДА связана с программным формированием отчета. Можно конечно на форме сделать специальную кнопку, чтобы пользователь нажимал ее после формирования отчета, но это будет выглядеть нелепо. Поэтому будем считать, что для постработки отчет на 1С СКД формируется программно всегда.

Есть два способа как можно программно выполнить отчет на СКД:

  • Простой. Из формы отчета (нужно чтобы у отчета была форма) вызвать метод СкомпоноватьРезультат. Вы заменяете стандартную кнопку Сформировать собственной командой. В этой команде вызываете указанный выше метод, передав (в случае управляемой формы) режим компоновки – Непосредственно. Затем выполняете постобработку над полученным табличным документом (обычно это реквизит «Результат»). Метод неудобен тем, что нужно добавлять форму (если ее нет), нужно формировать отчет непосредственно, плюс довольно часто для доработки табличного документа нужно переходить на сервер (что не есть хорошо)
  • Чуть сложнее. В модуле отчета в предопределенной процедуре «ПриКомпоновкеРезультата» программно формируете отчет. Стандартный шаблон (код) для этого приведен ниже. После получения табличного документа вы выполняете свой код постобработки. Для этого подхода существует еще один вариант реализации, когда обработка выполняется не после формирования табличного документа, а в процессе. Делается это с помощью поэлементного вывода в табличный документ с помощью методов процессора компоновки данных – НачатьВывод, Следующий, ВывестиЭлемент.

С помощью этого шаблона вы можете программно формировать отчет на СКД:

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

Теперь рассмотрим конкретные примеры, когда вам может понадобиться постобработка. В этих примерах я не всегда буду приводить полный код решения. Где-то будет достаточно идеи, а где-то ссылки на уже готовый отчет.

Вывод картинок

До недавнего времени только с помощью постобработки в отчетах на СКД можно было вывести картинки в отчете. Начиная с релиза платформы 8.3.14 в СКД  1С:Предприятие 8 появилась возможность вывода картинок без постобработки.

Вот такой кусок кода в ПриКомпоновкеРезультата выводить после программного формирования картинку в колонке прайса:

Для н = ВысотаШапки + 1 По ДокументРезультат.ВысотаТаблицы Цикл

    ОбластьКартинки = ДокументРезультат.Область(н, НомерКолонкиКартинки, н, НомерКолонкиКартинки);

    Если ОбластьКартинки.Текст = "Не задана" Тогда

        ПоляРасшифровки = ДанныеРасшифровки.Элементы.Получить(ОбластьКартинки.Расшифровка).ПолучитьПоля();
        Поле = ПоляРасшифровки.Найти("ПолеКартинки");

        Если Поле <> Неопределено Тогда

            КартинкаНоменклатуры = Поле.Значение.Картинка.Получить();

            Если ТипЗнч(КартинкаНоменклатуры) = Тип("Картинка") Тогда

                ОбластьСтроки = ДокументРезультат.Область(н,,н);

                ОбластьСтроки.ВысотаСтроки = 50;

                КартинкаЯчейки = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
                КартинкаЯчейки.Картинка = КартинкаНоменклатуры;
                КартинкаЯчейки.РазмерКартинки = РазмерКартинки.АвтоРазмер;
                КартинкаЯчейки.Линия = ЛинияКартинки;
                КартинкаЯчейки.Расположить(ОбластьКартинки);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

Отчет прайс лист мы разбирали в нашем курсе по СКД

Нумерация колонок отчета

Здесь мы рассмотрим вариант постобработки из формы отчета

&НаКлиенте
Процедура СформироватьОтчет(Команда)

    СкомпоноватьРезультат(РежимКомпоновкиРезультата.Непосредственно);

    Пронумеровать();

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

&НаСервере
Процедура Пронумеровать()

    СтрокВШапке = Результат.ФиксацияСверху;

    КоличествоКолонок = Результат.ШиринаТаблицы;

    ОбластьШапки = Результат.Область(СтрокВШапке,,СтрокВШапке);
    ОбластьПриемник = Результат.Область(СтрокВШапке+1,,СтрокВШапке+1);
    Результат.ВставитьОбласть(ОбластьШапки,ОбластьПриемник,ТипСмещенияТабличногоДокумента.ПоГоризонтали,Ложь);

    Для Ном = 1 По КоличествоКолонок Цикл

        ТекОбласть = Результат.Область(СтрокВШапке+1,Ном);
        ТекОбласть.Текст = ""+Ном;
        ТекОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;

    КонецЦикла;

    Результат.ФиксацияСверху = Результат.ФиксацияСверху + 1;

КонецПроцедуры // Пронумеровать()

Повторение шапки отчета и вывод колонтитулов

В этой статье на Инфостарте разбирается, как с помощью поэлементного вывода можно повторить шапку отчета на каждой странице и как вывести колонтитулы.

Повторение шапки реализуется кодом:

ОбластьШапки = ТабличныйДокумент.Область(НачальнаяСтрокаШапки, , КонечнаяСтрокаШапки).
ТабличныйДокумент.ПовторятьПриПечатиСтроки = ОбластьШапки.

Вывод колонтитулов реализуется через свойство ВерхнийКолонтитул табличного документа:

ТабДок.ВерхнийКолонтитул.НачальнаяСтраница = 2;
ТабДок.ВерхнийКолонтитул.Шрифт = Новый Шрифт(Результат.ВерхнийКолонтитул.Шрифт, , , , Истина);
ТабДок.ВерхнийКолонтитул.ТекстСлева = "Заголовок отчета";
ТабДок.ВерхнийКолонтитул.ТекстВЦентре = "Стр. [&НомерСтраницы] из [&СтраницВсего]";
ТабДок.ВерхнийКолонтитул.ТекстСправа = "Дата/время печати: [&Дата]/[&Время]";

«Красивые» заголовки для группировок колонок таблицы

Вот так заголовки выводятся совсем некрасиво:

Вот так чуть лучше:

Настройка для такого варианта (для второй и третей группировок колонок):

И только постобработкой (хотя может быть есть какой-то другой секретный способ) можно сделать так:

Файл отчета

Вставить разрыв страницы для группировки

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

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar