Создается
1. Справочник ГенДов с полями "От" (Дата), "Срок" (Дата) , "Кому" (Строка)
Подчиненность - "Клиент", Уровень - 1
2. Модифицируется форма Элемента "Клиент" - вставляется ТаблицаЗначений "ГенДов" и добавляется код
// =========================================================
Функция Ген_Дов()
ГенДов.УдалитьСтроки();
Спр = СоздатьОбъект("Справочник.ГенДов");
Спр.ИспользоватьВладельца(ТекущийЭлемент());
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если (Спр.ТекущийЭлемент().ПометкаУдаления() = 0) Тогда
ГенДов.НоваяСтрока();
ГенДов.Номер = Спр.ТекущийЭлемент().Наименование;
ГенДов.От = Спр.ТекущийЭлемент().Дата;
ГенДов.До = Спр.ТекущийЭлемент().Срок;
ГенДов.ФИО= Спр.ТекущийЭлемент().ФИО;
КонецЕсли; КонецЦикла;
Возврат "";
КонецФункции
3. Рядом в форме вставляется кнопка с кодом "ОткрытьФорму("Справочник.ГенДов")"
4. В теле модуля Расходного Документа находится процедура печати и в нее добавляется следующее
ГенДов="";
Спр = СоздатьОбъект("Справочник.ГенДов");
Спр.ИспользоватьВладельца(Клиент);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если (ТекущаяДата() >= Спр.ТекущийЭлемент().Дата) И (ДатаДок <= Спр.ТекущийЭлемент().Срок) Тогда
ГенДов=ГенДов + СокрЛП(Спр.ТекущийЭлемент().Наименование) + " від "+Спр.ТекущийЭлемент().Дата + " на "+СокрЛП(Спр.ТекущийЭлемент().ФИО) + ";"; //+"№ "
Если (Нрег(Сред(ГенДов,1,3))<>"за ") Тогда
ГенДов="За "+ГенДов;
КонецЕсли; КонецЕсли; КонецЦикла;
Если ПустоеЗначение(ГенДов)=1
Тогда ГенДов="Отримав " + СокрЛП(Получил) + " за дов. "+СокрЛП(ДовСерия) +" № "+ СокрЛП(ДовНомер) + " від "+ ДовДата;
// Иначе ГенДов="за ген.дов.№ " + Клиент.ГенДов.Получить(ДатаДок).Наименование + " від "+ Клиент.ГенДов.Получить(ДатаДок).Дата +" на "+ Клиент.ГенДов.Получить(ДатаДок).ФИО;
КонецЕсли;
Место вывода в документе этой переменной, мне кажется, несложно..
Заполняется либо паспортными данными, либо собственно доверенностями.
Для "обычных" доверенностей рекомендую добавить в "Клиенте" 2 поля-счетчики
1.- К-во полученных доверенностей
2. - К-во отгруженных накладных.
Автоинкрементация - процесс несложный, выполняемый при проведении документа (с проверкой предыдущего состояния).
Процедура ОбработкаПроведения()
.....
Если Проведен()=0 Тогда
ТекКлиент = СоздатьОбъект("Справочник.Клиенты");
Если ТекКлиент.НайтиЭлемент(Клиент)<>0 Тогда
ТекКлиент.СчетчикРН=Клиент.СчетчикРН + 1;
ТекКлиент.Записать();
КонецЕсли;
КонецЕсли; ......
В моем случае пришлось еще модифицировать глобальный подуль - процедуры отмены проведения
Например
Процедура ПриОтменеПроведенияДокумента(Конт)
.....
Если Конт.ТекущийДокумент().Вид() = "РасходнаяНакладная" Тогда
ТекКлиент = СоздатьОбъект("Справочник.Клиенты");
Если ТекКлиент.НайтиЭлемент(Конт.ТекущийДокумент().Клиент)<>0 Тогда
ТекКлиент.СчетчикРН=Конт.ТекущийДокумент().Клиент.СчетчикРН - 1;
ТекКлиент.Записать();
КонецЕсли;
.....
Процедура ПриУдаленииДокумента(Докум, Режим)
.....
Если Докум.Вид() = "РасходнаяНакладная" Тогда
ТекКлиент = СоздатьОбъект("Справочник.Клиенты");
Если ТекКлиент.НайтиЭлемент(Докум.Клиент)<>0 Тогда
ТекКлиент.СчетчикРН=Докум.Клиент.СчетчикРН - 1;
ТекКлиент.Записать();
КонецЕсли;
КонецЕсли; .....
Аналогично решается вопрос с инкрементацией дополнительного документа - Входящая доверенность.