Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Доработка Универсального отчета в УТ10.3 (http://forums.kuban.ru/f1040/dorabotka_universal-nogo_otcheta_v_ut10_3_a-4529356.html)

bma1 22.07.2013 08:27

Доработка Универсального отчета в УТ10.3
 
Нужно было в УТ10 сделать, чтоб во всех типовых отчетах была автоматическая фиксация колонок слева. Вот результат, если кому пригодится:
Вставляется в модуль Универсального отчета и вызывается из процедуры СформироватьОтчет() этого-же модуля

Процедура УстановитьФиксациюКолонок(ТабличныйДокумент) Экспорт

локКолонокФиксировать = 1; // это пустая колонка в начале

локКолонкиИзмерения = 0;
локВОтдельнойКолонкеПеред = 0;
локВОтдельныхКолонкахПеред = 0;
локВОтдельнойКолонкеПосле = 0;
локВОтдельныхКолонкахПосле = 0;

Для каждого стрСтруктураИзмеренийСтроки Из мСтруктураИзмеренийСтроки Цикл
Если ПостроительОтчета.РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений.Вместе Тогда
локКолонкиИзмерения = 1;
Иначе
локКолонкиИзмерения = локКолонкиИзмерения + 1;
КонецЕсли;

текКолонкиПередВОтдельнойКолонке = стрСтруктураИзмеренийСтроки.Значение.ПередГруппировкой.ВОтдельнойКолонке;
Если текКолонкиПередВОтдельнойКолонке.Количество() > 0 Тогда
Если ПостроительОтчета.РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений.Вместе Тогда
локВОтдельнойКолонкеПеред = 1;
Иначе
локВОтдельнойКолонкеПеред = локВОтдельнойКолонкеПеред + 1;
КонецЕсли;
КонецЕсли;
текКолонкиПередВОтдельныхКолонках = стрСтруктураИзмеренийСтроки.Значение.ПередГруппировкой.ВОтдельныхКолонках;
Если текКолонкиПередВОтдельныхКолонках.Количество() > 0 Тогда
Если ПостроительОтчета.РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений.Вместе Тогда
локВОтдельныхКолонкахПеред = Макс(локВОтдельныхКолонкахПеред,текКолонкиПередВОтдельныхКолонках.Количество());
Иначе
локВОтдельныхКолонкахПеред = локВОтдельныхКолонкахПеред + текКолонкиПередВОтдельныхКолонках.Количество();
КонецЕсли;
КонецЕсли;

текКолонкиПослеВОтдельнойКолонке = стрСтруктураИзмеренийСтроки.Значение.ПослеГруппировки.ВОтдельнойКолонке;
Если текКолонкиПослеВОтдельнойКолонке.Количество() > 0 Тогда
Если ПостроительОтчета.РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений.Вместе Тогда
локВОтдельнойКолонкеПосле = 1;
Иначе
локВОтдельнойКолонкеПосле = локВОтдельнойКолонкеПосле + 1;
КонецЕсли;
КонецЕсли;
текКолонкиПослеВОтдельныхКолонках = стрСтруктураИзмеренийСтроки.Значение.ПослеГруппировки.ВОтдельныхКолонках;
Если текКолонкиПослеВОтдельныхКолонках.Количество() > 0 Тогда
Если ПостроительОтчета.РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений.Вместе Тогда
локВОтдельныхКолонкахПосле = Макс(локВОтдельныхКолонкахПосле,текКолонкиПослеВОтдельныхКолонках.Количество());
Иначе
локВОтдельныхКолонкахПосле = локВОтдельныхКолонкахПосле + текКолонкиПослеВОтдельныхКолонках.Количество();
КонецЕсли;
КонецЕсли;

КонецЦикла;

локКолонокФиксировать = локКолонокФиксировать + локКолонкиИзмерения + локВОтдельнойКолонкеПеред + локВОтдельныхКолонкахПеред + локВОтдельнойКолонкеПосле + локВОтдельныхКолонкахПосле;

ТабличныйДокумент.ФиксацияСлева = локКолонокФиксировать;

КонецПроцедуры // УстановитьФиксацию()

EarlyBird 22.07.2013 10:56

спасибо, это польза!
вообще, явно маловато публикаций на тему, как работать с Универсальным отчётом (и с двумя другими общими отчётами).
нашёл пока только одно внятное описание
[url]http://infostart.ru/public/62223/[/url]

EarlyBird 22.07.2013 14:42

вот щас сижу ломаю мозг: как программно указать ширину колонки в отчёте, формируемом на основе Кросс-таблицы

bma1 22.07.2013 16:12

2(2) Ищи "Профессиональная разработка в системе 1С:Предприятие 8" [u]1-е издание[/u]. Раздел "Работа с построителем отчета".


Текущее время: 21:43. Часовой пояс GMT +3.