Привет, меня зовут Елена, я разработчик 1С.
Типовой функционал «1С:ЗУП» требует подписи руководителя организации перед отправкой приказа сотруднику на ознакомление/подпись в «1С:Кабинет сотрудника». Однако, по регламенту, подпись руководителя нужна далеко не для всех кадровых документов. Это создает неоправданные задержки в согласовании, увеличивает нагрузку на руководителя и усложняет процесс для кадровой службы.
Рассмотрим, как это можно сделать без доработок:
- Нужно сформировать печатную форму и сохранить её на диск в формате pdf.
- Зайти в документы ЭДО («Кадры» — «Документы ЭДО»), создать новую карточку электронного документа, прикрепить печатную форму, убрать галку «Требуется подпись организации» и выбрать сотрудника, которому нужно отправить документ.
- Увидеть, что сотрудник подписал документ, можно также из карточки электронного документа.
Для сотрудника кадровой службы такой процесс не удобен тем, что необходимо совершать дополнительные действия (отправка документа с подписью организации происходит по нажатию одной кнопки), увидеть подписанный документ можно только из карточки.
Например, для документа «Оплата дней ухода за детьми-инвалидами» нужно отправить два документа на подпись: «Приказ о предоставлении дней-ухода» и «Заявление сотрудника о предоставлении дней ухода». Для приказа нужна подпись руководителя, для заявления — нет. В итоге отправить и посмотреть приказ можно из самого документа, а для заявления нужно заходить в документы ЭДО.
Чтобы упростить работу сотруднику нужно автоматизировать этот процесс:
- Для того, чтобы не трогать типовой функционал, была добавлена новая команда «Передать (без подписи) » на форме «ПечатьДокументов».

&НаКлиенте
Процедура КомандаКэдо_ПередатьВКабинетБезПодписи(Команда)
ДополнительныеПараметры = Новый Структура("Действия", "";
ТекстВопроса = НСтр("ru = 'Отправить приказ на подписание сотруднику без подписи организации? ' ");
Оповещение = Новый ОписаниеОповещения("кэдо_ПередатьДокументБезПодписи", ЭтотОбъект, ДполонительныеПараметры);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена);
КонецПроцедуры
&НаКлиенте
Процедура Кэдо_ПередатьДокументБезПодписи(Ответ, ДополнительныеПараметры = Неопределено) Экспорт
Если Ответ = КодВозвратаДиалога.Да Тогда
кэдо_СсылкаНаФайл = кэдо_ПрисоединенныйФайлПоПечатнойФорме();
Если кэдо_СсылкаНаФайл = Неопределено Тогда
кэдо_СообщениеОбОшибке = НСтр("ru = Не удалось отправить файл на подпись сотруднику.' ") ОбщегоНазначенияКлиент.СообщитьПользователю(кэдо_СообщениеОбОшибке)
Иначе
кэдо_ДокументНаПодписьСотруднику(кэдо_СсылкаНаФайл, НастройкиПечатныхФорм[0].ИмяМакета, ТекущаяПечатнаяФорма);
кэдо_СообщениеПользователю = НСтр("ru = 'Документ направлен на подпись сотруднику.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(кэдо_СообщениеПользователю);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Для начала нужно сформировать pdf-файл по печатной форме и добавить его в присоединенные файлы документа. За основу был взят типовой функционал по сохранению файлов.
&НаКлиенте
Процедура кэдо_ПрисоединенныйФайлПоПечатнойФорме()
ОбъектыПрикрепления = ПолучитьОбъектыДляПрикрепления(ОбъектыПечати);
ФорматСохранения = Новый Массив;
ФорматСохранения.Добавить("PDF_A_3");
РезультатВыбора = Новый Структура;
РезультатВыбора.Вставить("УпаковатьВАрхив", Ложь);
РезультатВыбора.Вставить("ФорматыСохранения", ФорматыСохранения);
РезультатВыбора.Вставить("ВариантСохранения", "Присоединить");
РезультатВыбора.Вставить("ПапкаДляСохранения", "");
РезультатВыбора.Вставить("ПереводитьИменаФайловВТранслит", Ложь);
РезультатВыбора.Вставить("Подписать", Ложь);
СтрокаОшибки = "";
ОбъектыДляПрикрепления = Новый Соответствие;
Для Каждого ОбъектПрикрепления Из ОбъектыДляПрикрепления Цикл
Если Не ОбъектПрикрепления.Пометка Тогда
СтрокаОшибки = СтрокаОшибки + ОбъектПрикрепления.Значение;
Иначе
ОбъектыДляПрикрепления.Вставить(ОбъектПрикрепления.Значение, Истина);
КонецЕсли;
КонецЦикла;
РезультатВыбора.Вставить("ОбъектыДляПрикрепления", ОбъектыДляПрикрепления);
ФайлыВоВременноеХранилище = ПоместитьТабличныеДокументыВоВременноеХранилище(РезультатВыбора);
ФайлыВоВременноеХранилище = ПоместитьФайлыВАрхив(ФайлыВоВременноеХранилище, РезультатВыбора);
ЗаписанныеОбъекты = ПрисоединитьПечатныеФормыКОбъекту(ФайлыВоВременноеХранилище);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
МодульРаботаСФайламиСлужебныйКлиент = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйКлиент");
МодульРаботаСФайламиСлужебныйКлиент.ОповеститьОбИзмененииФайлов(ЗаписанныеОбъекты);
КонецЕсли;
Если ЗаписанныеОбъекты.Количество() > 0 Тогда
Возврат ЗаписанныеОбъекты[0];
КонецЕсли;
Возврат Неопределено;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьОбъектыДляПрикрепления(ОбъектыПечати)
Результат = Новый СписокЗначений;
МодульУправлениеДоступом = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
КонецЕсли;
Для Каждого ОбъектПечати Из ОбъектыПечати Цикл
Результат.Добавить(ОбъектПечати.Значение,, ?(МодульУправлениеДоступом <> Неопределено, МодульУправлениеДоступом.ИзменениеРазрешено(ОбъектПечати.Значение), Истина));
КонецЦикла;
Возврат Результат;
КонецФункции
- Следующим шагом необходимо программно создать и заполнить карточку электронного документа:
НовыйДокумент = Документы.ДокументЭДОБЗК.СоздатьДокумент();
СсылкаНового = Документы.ДокументЭДОБЗК.ПолучитьСсылку(Новый УникальныйИдентификатор);
НовыйДокумент.УстановитьСсылкуНового(СсылкаНового);
НовыйДокумент.Дата = ТекущаяДатаСеанса();
НовыйДокумент.ЭлектронныйДокумент = ЭлектронныйДокумент;
НовыйДокумент.НаСписокСотрудников = Ложь;
НовыйДокумент.КатегорияДокумента = Перечисления.КатегорииДокументовЭДОБЗК.КадровыйДокумент;
НовыйДокумент.КраткийСоставДокумента = ФизическоеЛицо;
НовыйДокумент.СодержимоеДокумента = Перечисления.СодержимоеДокументов.НеСодержитЗарплаты;
НовыйДокумент.ВидДокумента = Справочники.ВидыДокументовЭДОБЗК.ПрочиеКЭДО;
НовыйДокумент.ОснованиеДокумента = ЭлектронныйДокумент.ВладелецФайлов;
НовыйДокумент.Внешний = Ложь;
НовыйДокумент.Расширение = "pdf";
НовыйДокумент.ФорматДокументаСоответствуетТребованиям = Истина;
НовыйДокумент.ПроизвольнаяТаблица = Ложь;
НовыйДокумент.ВариантПодписания = Перечисления.ВариантыПодписанияДокуметовЭДОБЗК.Требуется;
НовыйДокумент.ФорматФайлаPDF_A_1 = Ложь;
СтрокаПодписанты = НовыйДокумент.ВнешниеПодписанты.Добавить();
СтрокаПодписанты.ФизическоеЛицо = ФизическоеЛицо;
НовыйДокумент.Организация = Организация;
НовыйДокумент.Ответственный = ПараметрыСеанса.ТекущийПользователь;
НовыйДокумент.Записать();
В ЭлектронныйДокумент записываем ссылку на присоединенный файл документа. Для того, чтобы ЭЦП отображалась сразу после текста, а не в конце страницы, необходимо добавить запись в регистр ПодписанныеПечатныеФормы:
ДанныеПечатнойФормы = Новый Структура;
ДанныеПечатнойФормы.Вставить("ФайлОбъекта", ЭлектронныйДокумент);
ДанныеПечатнойФормы.Вставить("ИдентификаторПечатнойФормы", ИдентификаторПечатнойФормы);
ДанныеПечатнойФормы.Вставить("Название", "");
ДанныеПечатнойФормы.Вставить("Организация", НовыйДокумент.Организация);
ДанныеПечатнойФормы.Вставить("Сотрудник", Сотрудник);
ДанныеПечатнойФормы.Вставить("ФизическоеЛицо", СтрокаПодписанты.ФизическоеЛицо);
ДанныеПечатнойФормы.Вставить("Номер", Номер);
ДанныеПечатнойФормы.Вставить("Дата", Дата);
РегистрыСведений.ПодписанныеПечатныеФормы.ДобавитьПечатнуюФорму(ДанныеПечатнойФормы, ПечатнаяФорма, ТекущаяДатаСеанса());
Чтобы документ ЭДО зарегистрировался к обмену, нужно добавить эти строки:
Действие = ПредопределенноеЗначение("Перечисление.ДействияСФайламиДокументовЭДОБЗК.ПередатьВКабинетСотрудников");
ЭДОБЗКВызовСервера.ЗапланироватьДействияСПечатнымиФормами(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(НовыйДокумент.ЭлектронныйДокумент), Действие);
- Подписанный документ можно будет увидеть в присоединенных файлах.
После реализации этого функционала кадровый сотрудник сможет отправлять без подписи руководителя в один клик и легко отслеживать подписанные документы.
Вступайте в нашу телеграмм-группу Инфостарт