Чукча не писатель. За ошибки прошу не пинать, и на оригинальность не претендую. Случилось так, что в типовом конструкторе макетов нет этих фишек, которые описаны выше. Но клиенту надо, по одной простой причине - каждый раз платить за каждый макет ВПФ или небольшую корректировку не хочется. Как и что я сделал.
Для решения обеих задач, потребуется один общий модуль "УправлениеПечатью". В расширение добавляем процедуры:
ТекстЗапроса. В конце дописываем вставку
#Вставка
Если ОбъектМетаданных.ПолноеИмя() = "Справочник.Организации" Тогда
Результат = СтрЗаменить(Результат,"ПсевдонимЗаданнойТаблицы.Наименование КАК Наименование,",
"ПсевдонимЗаданнойТаблицы.Наименование КАК Наименование, ВложенныйЗапрос.Руководитель КАК Руководитель,ВложенныйЗапрос.РуководительРП КАК РуководительРП,");
ТекущаяДатаЗапрос = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ДАТАВРЕМЯ(%1, %2, %3)",формат(ТекущаяДата(),"ДФ=yyyy"),формат(ТекущаяДата(),"ДФ=MM"),формат(ТекущаяДата(),"ДФ=dd"));
Подзапрос =
"
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ОтветственныеЛицаОрганизаций.Владелец КАК Владелец,
| ОтветственныеЛицаОрганизаций.ФизическоеЛицо КАК Руководитель,
| isnull(СклоненияПредставленийОбъектов.РодительныйПадеж,""___"") КАК РуководительРП
|ИЗ
| Справочник.ОтветственныеЛицаОрганизаций КАК ОтветственныеЛицаОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СклоненияПредставленийОбъектов КАК СклоненияПредставленийОбъектов
| ПО (ОтветственныеЛицаОрганизаций.ФизическоеЛицо = СклоненияПредставленийОбъектов.Объект)
|ГДЕ
| ОтветственныеЛицаОрганизаций.ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)
| И ОтветственныеЛицаОрганизаций.ДатаНачала <= &ТекущаяДатаЗапрос
| И (ОтветственныеЛицаОрганизаций.ДатаОкончания =ДАТАВРЕМЯ(1,1,1,0,0,0)//ЕСТЬ NULL
| ИЛИ ОтветственныеЛицаОрганизаций.ДатаОкончания >= &ТекущаяДатаЗапрос)) КАК ВложенныйЗапрос
| ПО (ПсевдонимЗаданнойТаблицы.Ссылка = ВложенныйЗапрос.Владелец)";
Подзапрос = СтрЗаменить(Подзапрос,"&ТекущаяДатаЗапрос",ТекущаяДатаЗапрос);
Результат = Результат + Подзапрос;
КонецЕсли;
#КонецВставки
Возврат Результат;
Сделал через вложенный запрос. Главная проблема: найти "действующего руководителя". Здесь знатоки могут меня поправить, если что не так. С датой ДА - извращение получилось ))). Это все для вывода руководителя. Они хранятся в справочнике и нужно отбирать по типу ответственного лица в "рабочем" диапазоне дат.
А для суммы прописью я доработал процедуру СписокОператоров:
&ИзменениеИКонтроль("СписокОператоров")
Функция чд_СписокОператоров()
СписокОператоров = КонструкторФормул.СписокОператоров();
Группа = СписокОператоров.Строки.Найти("СтроковыеФункции");
Если Группа = Неопределено Тогда
Группа = СписокОператоров.Строки.Добавить();
Группа.Идентификатор = "СтроковыеФункции";
Группа.Представление = НСтр("ru = 'Строковые функции'");
Группа.Порядок = 5;
Группа.Картинка = БиблиотекаКартинок.ТипФункция;
КонецЕсли;
Оператор = Группа.Строки.Добавить();
Оператор.Идентификатор = "УправлениеПечатью_СтрокаЛатиницей";
Оператор.Представление = НСтр("ru = 'СтрокаЛатиницей'");
Оператор.ТипЗначения = Новый ОписаниеТипов("Строка");
Оператор.ЭтоФункция = Истина;
Группа = СписокОператоров.Строки.Найти("ПрочиеФункции");
Если Группа = Неопределено Тогда
Группа = СписокОператоров.Строки.Добавить();
Группа.Идентификатор = "ПрочиеФункции";
Группа.Представление = НСтр("ru = 'Прочие функции'");
Группа.Порядок = 6;
Группа.Картинка = БиблиотекаКартинок.ТипФункция;
КонецЕсли;
Оператор = Группа.Строки.Добавить();
Оператор.Идентификатор = "УправлениеПечатью_КоличествоСтрок";
Оператор.Представление = НСтр("ru = 'КоличествоСтрок'");
Оператор.ТипЗначения = Новый ОписаниеТипов("Число");
Оператор.ЭтоФункция = Истина;
#Вставка
Оператор = Группа.Строки.Добавить();
Оператор.Идентификатор = "УправлениеПечатью_СуммаПрописью";
Оператор.Представление = НСтр("ru = 'СуммаПрописью'");
Оператор.ТипЗначения = Новый ОписаниеТипов("Число");
Оператор.ЭтоФункция = Истина;
#КонецВставки
Возврат КонструкторФормул.КоллекцияПолей(СписокОператоров);
КонецФункции
И добавил тут же свою функцию
Функция СуммаПрописью(Число) Экспорт
Если ТипЗнч(Число) = Тип("Число") Тогда
Возврат РаботаСКурсамиВалют.СформироватьСуммуПрописью(Число,Константы.ВалютаРегламентированногоУчета.Получить(),Ложь,"ru_RU");
КонецЕсли;
ВызватьИсключение НСтр("ru = 'Неверно указано значение'");
КонецФункции
Теперь как это работает.
В конструкторе у организации появился Руководитель и Руководитель в родительном падеже:
а в операторах наша сумма прописью
в макете:
на печати:
Как-то так. На этом все. Надеюсь, кому-нибудь пригодится.