Произвольные подписи в документах

28.02.12

Задачи пользователя - Адаптация типовых решений

Если в организации помимо руководителя есть ещё сотрудники с правом подписи, и вас до сих пор ещё не попросили сделать так чтобы можно было выбирать подписантов, которые будут выводиться в печатных формах документов, то это означает лишь одно - скоро попросят. ))

Предлагаю один из возможных вариантов решения данной задачи.


Для начала рассмотрим как реализован вывод подписей в штатном механизме печати.
Обычно для получения ФИО и должностей подписантов вызывается функция ОтветственныеЛицаОрганизаций(Организация, ДатаСреза, Исполнитель = Неопределено) из общего модуля РегламентированнаяОтчетность, например:

Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Док.Организация, Док.Дата);

Данная функция является универсальной для большинства стандартных конфигураций и возвращает структуру с ключами "Руководитель", "РуководительДолжность", "ГлавныйБухгалтер", "Кассир", "Исполнитель", "ИсполнительДолжность", "ОтветственныйЗаРегистры" и соответствующими им значениями (типа Строка), полученными из регистра сведений "Ответственные лица организаций".
У этой функции есть очень полезный для нас параметр Исполнитель: если в этом параметре передать ссылку на физ.лицо, то функция вернёт в элементах структуры с ключами "Исполнитель" и "ИсполнительДолжность" значения, содержащие ФИО и должность переданного физ.лица. Именно таким образом мы и будем получать ФИО и должности наших подписантов.

Теперь нужно определиться как и где мы будем хранить подписантов. Во-первых, для них можно добавить соответствующие реквизиты в документы, а во-вторых, можно завести для документов доп.свойства. При прочих равных я обычно предпочитаю второй вариант, поэтому добавляем два доп.свойства: "Подпись 1 (за руководителя)" и "Подпись 2 (за гл.бухгалтера)" (см. скриншот). В качестве типа доп.свойства можно выбрать как СправочникСсылка.ФизическиеЛица, так и СправочникСсылка.Пользователи (в этом случае у пользователей-подписантов должен быть заполнен реквизит ФизЛицо).
Теперь в интересующих нас процедурах печати документов сразу после стандартного вызова РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(...) вызываем нашу специальную процедуру для замены подписей:

...
Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Док.Организация, Док.Дата);
// +++ Замена подписей руководителей
НАШ_ПечатьДокументов.ПроверитьЗаменитьРуководителей(Док.Организация, Док.Дата, Док, Руководители);
// Замена подписей руководителей +++
...


Код процедуры ПроверитьЗаменитьРуководителей() из нашего общего модуля НАШ_ПечатьДокументов будет примерно такой:

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

Собственно и всё.

Если кто-то может предложить более оптимальный способ решения данной задачи или если у кого-то есть предложения по усовершенствованию описанного способа - пишите комментарии.

 

CC-BY

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4836    10    5    

19

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3221    5    0    

22

Каждому менеджеру нужен свой Excel

Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    4261    dimanich70    15    

18

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    2272    dimanich70    8    

14

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    2244    19    avmartynov    14    

44

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2455    32    progmaster    8    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gutentag 253 28.02.12 04:42 Сейчас в теме
.....на сайте есть ВПФ с выбором подписанта в отдельном окне.
И не зачем в конфигуратор, ИМХО
7. q_i 580 29.02.12 20:02 Сейчас в теме
(1) gutentag, во-первых, никто не мешает этот механизм использовать в ВПФ.
а во-вторых, для себя я определил примерно следующие критерии для выбора "править код"/"делать внешнюю печ.форму": если в печ.форме нужно только добавить статический текст в макет, или, не меняя макета, изменить код для его формирования, и при этом объём необходимых правок не превышает
(примерно) 10-20 строк и сами правки расположены не более чем в 2-3 местах в модуле, то правлю в конфе, иначе - выношу в ВПФ. т.е. до описанного предела я считаю что форма штатная, но с небольшими доработками, и при приходе новой версии печ.формы в обновлении я обновляюсь на новую форму + возвращаю свои доработки (эквивалент поддержки с возможностью редактирования). свыше описанного предела я считаю что печ.форма уже не-штатная, а очень сугубо специфическая, что обновляться она не будет (а если будет - то это будет изготовление новой ВПФ на основе изменённой штатной печ.формы) и поэтому выношу её в ВПФ (эквилент снятия с поддержки). в связи с изложенными соображениями, я считаю, что если все изменение печатной формы сводятся только лишь к добавлению трёх строк (одной строки кода и двух строк комментариев), то выносить печатную форму во внешнюю обработку нецелесообразно.
2. АлексейН 2 28.02.12 08:33 Сейчас в теме
Просто при данном исполнении подписи, кто подписывает документы значение реквизитов сохраняются, что очень необходимо при повторном распечатывании документов.
3. Aleksey-29 29.02.12 08:09 Сейчас в теме
я через внешнюю печ. форму все сделал с диалогом выбора подписанта. Мне так удобнее!
4. Aleksey-29 29.02.12 08:09 Сейчас в теме
Хотя такой вариант тоже хорошо.
5. Рамзес 29 29.02.12 09:39 Сейчас в теме
Идея понравилась. Хорошо, что подписанты сохраняются в документе.
6. Лен75 29.02.12 10:22 Сейчас в теме
Эта статья для программиста, а не для бухгалтера...очень сложно, тем более лезть в настройки самому....А после обновления эти настройки слетают и надо весь путь проделывать заново или сохраняются?
8. q_i 580 29.02.12 20:05 Сейчас в теме
(6) Лен75, да, эта статья для разработчиков. после обновления ничего не слетает, если печать вынесена в отдельные обработки (внешние печатные формы), но сделать это может опять же только разработчик.
9. aks 4 08.11.18 14:09 Сейчас в теме
На днях потребовалось для конфигурации ЗУП 2.5 решать подобную задачу – часть кадровых документов вместо генерального директора стал подписывать заместитель по кадрам. Категорически не хотелось что-то править в конфигурации зарплаты. И создавать кучу внешних печатных форм для разных документов тоже желания не было.
Нашел простой способ, как при помощи одной внешней печатной формы подменить подписи в любом документе.
Основная идея состоит в том, что сначала формируется стандартный Табличный документ со стандартными подписями Руководителя, а затем в этом табличном документе делается поиск и простая текстовая замена ФИО и должности Руководителя, на ФИО и должность Руководителя кадровой службы.

Значения для поиска и замены берем из регистра «Ответственные лица организаций».
Исходный табличный документ формируем стандартной функцией Печать() самого объекта

// Функция Печать() у объекта возвращает открытую на экране форму сформированного табличного документа, которую закрываем
ФормаПечати=Объект.Печать(ИмяПечФормы,0,ложь);
табДок=ФормаПечати.ПечатныйДокумент;
ФормаПечати.закрыть();


//Макет печатной формы (ИмяПечатнойФормы) выбираем из списка, сформированного по структуре печатных форм

СтруктураВнутреннихПечатныхФорм = Объект.ПолучитьСтруктуруПечатныхФорм() ;

//Для того, чтобы не подменить случайно генерального на зама в самом документе область поиска начинаем с области с текстом «Руководитель»


ОбластьПодписи=табДок.НайтиТекст("Руководитель");

ОбластьПодписиДолжность=табДок.НайтиТекст(РуководительПодписьДолжность, ОбластьПодписи);

ОбластьПодписиФИО=табДок.НайтиТекст(РуководительПодписьФИО, ОбластьПодписи);

ОбластьПодписиДолжность.текст=РуководительКадровПодписьДолжность;
ОбластьПодписиФИО.текст=РуководительКадровПодписьФИО;

Получилась одна универсальная внешняя печатная форма для любого документа, при этом ничего не исправлял в самой конфигурации.
Оставьте свое сообщение