В ЗУП 3.1.8 КОРП реализовали возможность вносить определённые изменения в макеты печатных форм и отчётов самим пользователем, без изменения конфигурации. В ПРОФ версии этот механизм остался куцым. Т.е. если вам надо поменять название колонки, добавить надпись - это пожалуйста. А если вам надо вывести дополнительные какие то параметры - тут все немного сложнее.
Так как у меня проект по переходу с переписанной 2.5 на 3.1 то печатные формы - это как раз то, чем мне совсем не хочется заниматься - и без них полно проблем.
Первым делом я заглянула что есть на самом инфостарте: для 3.1.8 подходила только публикация отсюда //infostart.ru/public/783619/ , но есть жирное "НО" - она не редактирует саму СКД, т.е. чтобы подлезть к составу выбранных полей, добавить ещё несколько вычисляемых полей или что угодно другое - необходимо либо программно допиливать, либо ещё как то извращаться, при этом рискую попасть впросак с пользовательскими настройками отчета. Было решено искать обходные пути.
После осмотра списка выбранных полей в СКД обратила внимание, что если воспользоваться теми полями, которых нет на форме - они действительно выводятся, например у нас принято использовать полное наименование организации в Т-1.
Эта возможность уже решает часть задач, но мне надо гораздо больше. Дело в том, что у нас привыкли использовать полное наименование подразделения, где родители подразделения указаны в родительном падеже, например:
Для этого мне потребовалось добавить расширение с назначением "Исправление". Теперь отважно прошествуем в общий модуль ЗарплатаКадрыОтчеты и добавив его в расширение заменяем функцию ПодразделениеНаПечать. Так как у нас действительно везде в документообороте используется в качестве полного наименования это представление подразделения - я решила воспользоваться именно этим вариантом. Возможно в дальнейшем я об этом пожалею, но пока все устраивает. Получилось вот так:
&Вместо("ПодразделениеНаПечать")
Функция Исправ_ПодразделениеНаПечать(Знач Подразделение) Экспорт
Если ЗначениеЗаполнено(Подразделение) Тогда
НастройкиПечатныхФорм = ЗарплатаКадры.НастройкиПечатныхФорм();
Если НастройкиПечатныхФорм.ВыводитьПолнуюИерархиюПодразделений Тогда
//Возврат Подразделение.ПолноеНаименование();
Возврат ПолучитьПолноеНаименованиеПодразделения(Подразделение);
Иначе
Возврат Подразделение;
КонецЕсли;
Иначе
Возврат "";
КонецЕсли;
КонецФункции
Функция ПолучитьПолноеНаименованиеПодразделения(Подразделение)
ТПодразделение = Подразделение.Родитель;
ПодразделениеТекстом = Подразделение.Наименование;
Пока не (ТПодразделение.Родитель = Справочники.ПодразделенияОрганизаций.ПустаяСсылка()) Цикл
ПодразделениеТекстом = ПодразделениеТекстом + " "
+ СклонениеПредставленийОбъектов.ПросклонятьПредставление(ТПодразделение.Наименование, 2, ТПодразделение.Ссылка);
ТПодразделение = ТПодразделение.Родитель;
КонецЦикла;
Возврат ПодразделениеТекстом;
КонецФункции
Мне удобненько: видно, что было раньше и мне все равно какие ещё способы изобретет 1С для формирования краткого и полного наименования - для меня этот способ самый верный.
Следующая проблема - расширить список выбранных полей. Тут встал вопрос, а не получится ли, что у меня у пользователей будут какие-то дополнительные пользовательские настройки. Или вдруг этот отчет вызывается ещё из десятка мест.. или ещё нечто неведомое.. Значит саму СКД трогать даже программно надо аккуратно. Но нам надо возможность добавлять поля и заполнять их чем нашей душе угодно. Лезу проверять процедуры печати отчета, в надежде, что есть возможность что-то подпихнуть перед формированием в СКД.
Если ЗАО 1С выпилила механизм доступных полей с пользовательского интерфейса, то уж со стороны кода он обязательно где-нибудь торчит, например прямо в процедуре Сформировать посреди модуля менеджера отчета:
Процедура Сформировать(ДокументРезультат, РезультатКомпоновки, ОбъектыПечати = Неопределено) Экспорт
КадровыйУчет.ВывестиНаПечатьТ1(
ДокументРезультат,
РезультатКомпоновки.ДанныеОтчета.Строки,
РезультатКомпоновки.МакетПечатнойФормы,
РезультатКомпоновки.ИдентификаторыМакета,
ОбъектыПечати);
КонецПроцедуры
Вот прямо здесь РезультатКомпоновки.ДанныеОтчета.Строки - это и есть наше дерево строк результата. Т.е здесь уже все данные сформированы и там именно то, что в дальнейшем будет выводиться к нам на печать. Значит, не грех добавить ещё пару колонок. Захватываем модуль менеджера отчета и перед Сформировать добавляем свои несколько строк кода:
&Перед("Сформировать")
Процедура Испр_Сформировать(ДокументРезультат, РезультатКомпоновки, ОбъектыПечати)
Для каждого ТДокументы из РезультатКомпоновки.ДанныеОтчета.Строки Цикл
Если ЗначениеЗаполнено(ТДокументы.СсылкаНаОбъект) тогда
Если РезультатКомпоновки.ДанныеОтчета.Колонки.Найти("СсылкаНаОбъектДолжностьРуководителяНаПечать") = неопределено тогда
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Строка"));
КС = Новый КвалификаторыСтроки(250);
ОписаниеСтроки = Новый ОписаниеТипов(МассивТипов,КС);
РезультатКомпоновки.ДанныеОтчета.Колонки.Добавить("СсылкаНаОбъектДолжностьРуководителяНаПечать",
ОписаниеСтроки,
"СсылкаНаОбъект.Должность руководителя на печать",
);
Иначе
КонецЕсли;
Для каждого ТПараметрыДокумента из ТДокументы.Строки Цикл
ТПараметрыДокумента.СсылкаНаОбъектДолжностьРуководителяНаПечать = ЗарплатаКадрыОтчеты.ДолжностьПодписантаНаПечать();//ТПараметрыДокумента.СсылкаНаОбъект.Руководитель);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функцию формирования самого строкового представления я опять вытаскиваю в общий модуль ЗарплатаКадрыОтчеты - он у меня уже захвачен, а специфичное представление должности подписанта мне потребуется ещё пожалуй в нескольких печатных формах для кадров и расчетчиков. Кстати, я могу здесь даже передавать в функции параметром любое выбранное в СКД поле, а так же любой реквизит этого поля. А также можно свободно добавлять сколько угодно дополнительных колонок в структуру дерева, и все эти колонки будут доступны нам в качестве параметров макета в пользовательском режиме:
Итог:
Без нудятины в виде изготовления внешних печатных форм я могу спокойно добавить все необходимые моим драгоценным пользователям реквизиты и дать возможность наиболее структурномыслящим самостоятельно вертеть нужные им формы из этих реквизитов. Я не занимаюсь чепухой - кадры счастливые играют в конструктор и сами переименовывают себе колонки.