Top.Mail.Ru
Full-time, 5/2
Формат: удаленный
Вакансия «1С-программист»

Оптимизация бизнес-процессов «1С:ЗУП»: отправка приказов в «Кабинет сотрудника» без подписи руководителя

Типовой функционал «1С:ЗУП» требует подписи руководителя организации перед отправкой приказа сотруднику на ознакомление/подпись в «1С:Кабинет сотрудника». Однако, по регламенту, подпись руководителя нужна далеко не для всех кадровых документов. Это создает неоправданные задержки в согласовании, увеличивает нагрузку на руководителя и усложняет процесс для кадровой службы.

Рассмотрим, как это можно сделать без доработок:

  1. Нужно сформировать печатную форму и сохранить её на диск в формате pdf.
  2. Зайти в документы ЭДО («Кадры» — «Документы ЭДО»), создать новую карточку электронного документа, прикрепить печатную форму, убрать галку «Требуется подпись организации» и выбрать сотрудника, которому нужно отправить документ.
  3. Увидеть, что сотрудник подписал документ, можно также из карточки электронного документа.

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

Например, для документа «Оплата дней ухода за детьми-инвалидами» нужно отправить два документа на подпись: «Приказ о предоставлении дней-ухода» и «Заявление сотрудника о предоставлении дней ухода». Для приказа нужна подпись руководителя, для заявления — нет.  В итоге отправить и посмотреть приказ можно из самого документа, а для заявления нужно заходить в документы ЭДО.

Чтобы упростить работу сотруднику нужно автоматизировать этот процесс:

  1. Для того, чтобы не трогать типовой функционал, была добавлена новая команда «Передать (без подписи) » на форме «ПечатьДокументов».
&НаКлиенте
Процедура КомандаКэдо_ПередатьВКабинетБезПодписи(Команда)
	ДополнительныеПараметры = Новый Структура("Действия", "";
	ТекстВопроса = НСтр("ru = 'Отправить приказ на подписание сотруднику без подписи организации? ' ");
	Оповещение = Новый ОписаниеОповещения("кэдо_ПередатьДокументБезПодписи", ЭтотОбъект, ДполонительныеПараметры);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена);
КонецПроцедуры

&НаКлиенте
Процедура Кэдо_ПередатьДокументБезПодписи(Ответ, ДополнительныеПараметры = Неопределено) Экспорт
	Если Ответ = КодВозвратаДиалога.Да Тогда
		кэдо_СсылкаНаФайл = кэдо_ПрисоединенныйФайлПоПечатнойФорме();
		Если кэдо_СсылкаНаФайл = Неопределено Тогда
			кэдо_СообщениеОбОшибке = НСтр("ru = Не удалось отправить файл на подпись сотруднику.' ")						ОбщегоНазначенияКлиент.СообщитьПользователю(кэдо_СообщениеОбОшибке) 
Иначе
            	кэдо_ДокументНаПодписьСотруднику(кэдо_СсылкаНаФайл, НастройкиПечатныхФорм[0].ИмяМакета, ТекущаяПечатнаяФорма);
            	кэдо_СообщениеПользователю = НСтр("ru = 'Документ направлен на подпись сотруднику.'");
         ОбщегоНазначенияКлиент.СообщитьПользователю(кэдо_СообщениеПользователю);
       		КонецЕсли;
    КонецЕсли;
КонецПроцедуры 

Для начала нужно сформировать pdf-файл по печатной форме и добавить его в присоединенные файлы документа. За основу был взят типовой функционал по сохранению файлов.

&НаКлиенте
Процедура кэдо_ПрисоединенныйФайлПоПечатнойФорме()
    	ОбъектыПрикрепления = ПолучитьОбъектыДляПрикрепления(ОбъектыПечати);
    	ФорматСохранения = Новый Массив;
ФорматСохранения.Добавить("PDF_A_3");
    	РезультатВыбора = Новый Структура;
    	РезультатВыбора.Вставить("УпаковатьВАрхив", Ложь);
    	РезультатВыбора.Вставить("ФорматыСохранения", ФорматыСохранения);
    	РезультатВыбора.Вставить("ВариантСохранения", "Присоединить");
    	РезультатВыбора.Вставить("ПапкаДляСохранения", "");
    	РезультатВыбора.Вставить("ПереводитьИменаФайловВТранслит", Ложь);
	РезультатВыбора.Вставить("Подписать", Ложь);
    	
СтрокаОшибки = "";
ОбъектыДляПрикрепления = Новый Соответствие;
Для Каждого ОбъектПрикрепления Из ОбъектыДляПрикрепления Цикл
	Если Не ОбъектПрикрепления.Пометка Тогда
		СтрокаОшибки = СтрокаОшибки + ОбъектПрикрепления.Значение;
	Иначе
		ОбъектыДляПрикрепления.Вставить(ОбъектПрикрепления.Значение, Истина);
	КонецЕсли;
КонецЦикла;
РезультатВыбора.Вставить("ОбъектыДляПрикрепления", ОбъектыДляПрикрепления);

ФайлыВоВременноеХранилище = ПоместитьТабличныеДокументыВоВременноеХранилище(РезультатВыбора);
ФайлыВоВременноеХранилище = ПоместитьФайлыВАрхив(ФайлыВоВременноеХранилище, РезультатВыбора);

	ЗаписанныеОбъекты = ПрисоединитьПечатныеФормыКОбъекту(ФайлыВоВременноеХранилище);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
		МодульРаботаСФайламиСлужебныйКлиент = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйКлиент");
МодульРаботаСФайламиСлужебныйКлиент.ОповеститьОбИзмененииФайлов(ЗаписанныеОбъекты);
	КонецЕсли;
    	Если ЗаписанныеОбъекты.Количество() > 0 Тогда
        		Возврат ЗаписанныеОбъекты[0];
    	КонецЕсли;
    Возврат Неопределено;
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьОбъектыДляПрикрепления(ОбъектыПечати)
	Результат = Новый СписокЗначений;
	МодульУправлениеДоступом = Неопределено;
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
		МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
	КонецЕсли;
	Для Каждого ОбъектПечати Из ОбъектыПечати Цикл
		Результат.Добавить(ОбъектПечати.Значение,, ?(МодульУправлениеДоступом <> Неопределено, МодульУправлениеДоступом.ИзменениеРазрешено(ОбъектПечати.Значение), Истина));
	КонецЦикла;
	Возврат Результат;
КонецФункции

  1. Следующим шагом необходимо программно создать и заполнить карточку электронного документа:
НовыйДокумент = Документы.ДокументЭДОБЗК.СоздатьДокумент();
СсылкаНового = Документы.ДокументЭДОБЗК.ПолучитьСсылку(Новый УникальныйИдентификатор);
НовыйДокумент.УстановитьСсылкуНового(СсылкаНового);

НовыйДокумент.Дата = ТекущаяДатаСеанса();
НовыйДокумент.ЭлектронныйДокумент = ЭлектронныйДокумент;
НовыйДокумент.НаСписокСотрудников = Ложь;
НовыйДокумент.КатегорияДокумента = Перечисления.КатегорииДокументовЭДОБЗК.КадровыйДокумент;
НовыйДокумент.КраткийСоставДокумента = ФизическоеЛицо;
НовыйДокумент.СодержимоеДокумента = Перечисления.СодержимоеДокументов.НеСодержитЗарплаты;
НовыйДокумент.ВидДокумента = Справочники.ВидыДокументовЭДОБЗК.ПрочиеКЭДО;
НовыйДокумент.ОснованиеДокумента = ЭлектронныйДокумент.ВладелецФайлов;
НовыйДокумент.Внешний = Ложь;
НовыйДокумент.Расширение = "pdf";
НовыйДокумент.ФорматДокументаСоответствуетТребованиям = Истина;
НовыйДокумент.ПроизвольнаяТаблица = Ложь;
НовыйДокумент.ВариантПодписания = Перечисления.ВариантыПодписанияДокуметовЭДОБЗК.Требуется;
НовыйДокумент.ФорматФайлаPDF_A_1 = Ложь;

СтрокаПодписанты = НовыйДокумент.ВнешниеПодписанты.Добавить();
СтрокаПодписанты.ФизическоеЛицо = ФизическоеЛицо;

НовыйДокумент.Организация = Организация;
НовыйДокумент.Ответственный = ПараметрыСеанса.ТекущийПользователь;

НовыйДокумент.Записать();


В ЭлектронныйДокумент записываем ссылку на присоединенный файл документа. Для того, чтобы ЭЦП отображалась сразу после текста, а не в конце страницы, необходимо добавить запись в регистр ПодписанныеПечатныеФормы:

ДанныеПечатнойФормы = Новый Структура;
ДанныеПечатнойФормы.Вставить("ФайлОбъекта", ЭлектронныйДокумент);
ДанныеПечатнойФормы.Вставить("ИдентификаторПечатнойФормы", ИдентификаторПечатнойФормы);
ДанныеПечатнойФормы.Вставить("Название", "");
ДанныеПечатнойФормы.Вставить("Организация", НовыйДокумент.Организация);
ДанныеПечатнойФормы.Вставить("Сотрудник", Сотрудник);
ДанныеПечатнойФормы.Вставить("ФизическоеЛицо", СтрокаПодписанты.ФизическоеЛицо);
ДанныеПечатнойФормы.Вставить("Номер", Номер);
ДанныеПечатнойФормы.Вставить("Дата", Дата);
РегистрыСведений.ПодписанныеПечатныеФормы.ДобавитьПечатнуюФорму(ДанныеПечатнойФормы, ПечатнаяФорма, ТекущаяДатаСеанса());

Чтобы документ ЭДО зарегистрировался к обмену, нужно добавить эти строки:

Действие = ПредопределенноеЗначение("Перечисление.ДействияСФайламиДокументовЭДОБЗК.ПередатьВКабинетСотрудников");
ЭДОБЗКВызовСервера.ЗапланироватьДействияСПечатнымиФормами(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(НовыйДокумент.ЭлектронныйДокумент), Действие);
  1. Подписанный документ можно будет увидеть в присоединенных файлах.

После реализации этого функционала кадровый сотрудник сможет отправлять без подписи руководителя в один клик и легко отслеживать подписанные документы.

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar