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

