Расчет количества строк и колонок фиксации для отчетов на СКД

Функции рассчитывают сколько строк или колонок нужно зафиксировать в отчете на СКД, в зависимости от структуры отчета, количество отборов и ресурсов

 

 

 



Функция СтрокФиксироватьСверху(КомпоновщикНастроек, ПоказыватьЗаголовок = Истина) Экспорт


   
СтрокОтборова = 0;
   
ВыводитьПараметрыДанных = КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти(«FilterOutput»);
    Если
ВыводитьПараметрыДанных.Значение = ТипВыводаТекстаКомпоновкиДанных.Авто ИЛИ
        (
ВыводитьПараметрыДанных.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить И ВыводитьПараметрыДанных.Использование = Истина) Тогда

        Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл

            Если ЭлементОтбора.Использование Тогда
               
СтрокОтборова = 3;
                Прервать;
            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    СтрокЗаголовка = 0;

    Если ПоказыватьЗаголовок Тогда
       
СтрокЗаголовка = 3;
    КонецЕсли;

    СтрокГрупировокСтрок = 0;
   
ЭлемСтруктуры = КомпоновщикНастроек.Настройки.Структура[0];
    Если
ТипЗнч(ЭлемСтруктуры) = Тип(«ТаблицаКомпоновкиДанных»)  Тогда

        Если ЭлемСтруктуры.Строки.Количество() > 0 Тогда
           
Узел = ЭлемСтруктуры.Строки[0];
        Иначе
           
Узел = 0;
        КонецЕсли;

    ИначеЕсли ТипЗнч(ЭлемСтруктуры) = Тип(«ГруппировкаКомпоновкиДанных»)  Тогда
       
Узел = ЭлемСтруктуры;
    КонецЕсли;

    Пока Узел <> 0 И Узел.Структура.Количество() > 0 Цикл

        СтрокГрупировокСтрок = СтрокГрупировокСтрок + 1;

        Если ТипЗнч(Узел.Структура[0]) = Тип(«ГруппировкаКомпоновкиДанных») ИЛИ ТипЗнч(Узел.Структура[0]) = Тип(«ГруппировкаТаблицыКомпоновкиДанных») Тогда

            Если НЕ Узел.Структура[0].Использование Тогда
                Прервать;
            КонецЕсли;

            Узел = Узел.Структура[0];

        Иначе
            Прервать;
        КонецЕсли;

    КонецЦикла;

    СтрокГруппПолей = 0;
   
ВыводитьПараметрыДанных = КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти(«РасположениеРесурсов»);
    Если
ВыводитьПараметрыДанных.Значение = РасположениеРесурсовКомпоновкиДанных.Горизонтально Тогда

        Для Каждого ПолеКД Из КомпоновщикНастроек.Настройки.Выбор.Элементы Цикл

            Если ТипЗнч(ПолеКД) = Тип(«ГруппаВыбранныхПолейКомпоновкиДанных») Тогда

                СтрокГруппПолей = 1;
                Прервать;

            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    Возврат СтрокОтборова + СтрокЗаголовка + СтрокГрупировокСтрок + СтрокГруппПолей + ?(СтрокОтборова > 0 И СтрокЗаголовка > 0, 0, 1);

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




Функция
СтрокФиксироватьСлева(КомпоновщикНастроек) Экспорт

    СтрокФиксироватьСлева = 1;

    ВыводитьПараметрыДанных = КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти(«ГоризонтальноеРасположениеОбщихИтогов»);
    Если (
ВыводитьПараметрыДанных.Значение = РасположениеИтоговКомпоновкиДанных.Начало
        ИЛИ ВыводитьПараметрыДанных.Значение = РасположениеИтоговКомпоновкиДанных.НачалоИКонец)
        И
ВыводитьПараметрыДанных.Использование = Истина Тогда

        СтрокФиксироватьСлева = СтрокФиксироватьСлева + 1;

    КонецЕсли;

    ВыводитьПараметрыДанных = КомпоновщикНастроек.Настройки.ПараметрыВывода.Элементы.Найти(«РасположениеРесурсов»);
    Если
ВыводитьПараметрыДанных.Значение = РасположениеРесурсовКомпоновкиДанных.Вертикально
        И ВыводитьПараметрыДанных.Использование = Истина Тогда

        СтрокФиксироватьСлева = СтрокФиксироватьСлева + 1;

    КонецЕсли;

    Возврат СтрокФиксироватьСлева;

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



 

Пользоваться этими функциями очень просто. Достаточно после вывода отчета написать следующий код:

 

ТабличныйДокумент.ФиксацияСверху = СтрокФиксироватьСверху(КомпоновщикНастроек, ПоказыватьЗаголовок);
ТабличныйДокумент.ФиксацияСлева СтрокФиксироватьСлева(КомпоновщикНастроек);
  

 




1 Comment

  1. khaoos

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

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *