В процессе работы бухгалтера или кадрового специалиста часто возникает задача предоставить расчетные листки руководству или сотрудникам не общим списком, а персонально. Если в организации работает более 50 человек, ручное формирование и сохранение каждого листка в формат Excel превращается в рутинный и длительный процесс. Стандартный отчет "Расчетный листок" в 1С:ЗУП 3.1 по умолчанию формирует единый документ на всех сотрудников.
В данной статье мы разберем, как автоматизировать этот процесс и получить множество отдельных файлов Excel разом. Мы рассмотрим несколько подходов: от использования штатного функционала рассылок до написания собственной обработки на языке 1С.
Проанализируем самый простой и быстрый способ, который не требует навыков программирования. В типовых конфигурациях 1С, включая ЗУП 3.1, существует мощный инструмент — Рассылка отчетов. Хотя его прямое назначение — отправка документов на почту, мы можем использовать его для генерации персональных файлов.
Рассмотрим пошагово, как настроить этот процесс:
Физические лица. Это критически важный момент: именно этот выбор позволяет системе «понять», что для каждого человека нужно сформировать персональные данные.Excel (.xlsx).После запуска рассылки система сформирует 50+ отдельных писем, в каждом из которых будет прикреплен персональный расчетный листок. Вам останется только сохранить вложения из почтового клиента в нужную папку. Это значительно быстрее, чем формировать каждый отчет вручную.
Если вариант с почтой кажется вам «костыльным», или требуется сохранять файлы напрямую в сетевую папку с определенными именами (например, «Иванов_Январь2024.xlsx»), стоит рассмотреть программный метод. Выясним, как это реализовать, используя экспортные функции типовых отчетов.
Основная идея заключается в том, чтобы в цикле перебирать список сотрудников, программно формировать отчет АнализНачисленийИУдержаний (на базе которого строятся расчетные листки) с отбором по конкретному физлицу и сохранять результат на диск.
Проанализируем пример кода, который можно использовать в модуле внешней обработки:
// Функция вызывает формирование табличного документа расчетного листка
&НаСервере
Функция СформироватьИСохранитьЛисток(СотрудникСсылка, ПериодРегистрации, Организация, ПутьКПапке)
// Подготавливаем массив с одним сотрудником для отчета
МассивФизЛиц = Новый Массив;
МассивФизЛиц.Добавить(СотрудникСсылка);
// Получаем табличный документ расчетного листка
// Используем штатный метод отчета АнализНачисленийИУдержаний
ТабличныйДокумент = СформироватьПечатнуюФормуЛистка(МассивФизЛиц, Организация, ПериодРегистрации);
// Формируем имя файла
ИмяФайла = Строка(СотрудникСсылка) + "_" + Формат(ПериодРегистрации, "ДФ=MM_yyyy") + ".xlsx";
ПолныйПуть = ПутьКПапке + "\" + ИмяФайла;
// Сохраняем в формате Excel
ТабличныйДокумент.Записать(ПолныйПуть, ТипФайлаТабличногоДокумента.XLSX);
Возврат ПолныйПуть;
КонецФункции
Разберем подробнее внутреннюю логику формирования документа. Нам необходимо инициализировать схему компоновки данных (СКД) и загрузить настройки нужного варианта отчета:
&НаСервере
Функция СформироватьПечатнуюФормуЛистка(ФизическиеЛицаОтчета, Организация, Месяц)
ДокументРезультат = Новый ТабличныйДокумент;
// Создаем объект отчета программно
ОтчетОбъект = Отчеты.АнализНачисленийИУдержаний.Создать();
ОтчетОбъект.ИнициализироватьОтчет();
// Загружаем настройки варианта "Расчетный листок"
Настройки = ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.РасчетныйЛисток.Настройки;
ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
// Устанавливаем период
СтандартныйПериод = Новый СтандартныйПериод;
СтандартныйПериод.ДатаНачала = НачалоМесяца(Месяц);
СтандартныйПериод.ДатаОкончания = КонецМесяца(Месяц);
// Заполняем параметры и отборы
ПараметрПериод = ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Период");
Если ПараметрПериод <> Неопределено Тогда
ПараметрПериод.Значение = СтандартныйПериод;
ПараметрПериод.Использование = Истина;
КонецЕсли;
// Добавляем отбор по организации и списку физлиц
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор,
"Организация", ВидСравненияКомпоновкиДанных.Равно, Организация);
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор,
"ФизическоеЛицо", ВидСравненияКомпоновкиДанных.ВСписке, ФизическиеЛицаОтчета);
// Формируем результат
ОтчетОбъект.СкомпоноватьРезультат(ДокументРезультат);
Возврат ДокументРезультат;
КонецФункции
Используя этот код в цикле по списку сотрудников организации, мы получим автоматизированную выгрузку 50 файлов за считанные секунды.
Мало кто знает, что в современных версиях ЗУП (на базе Библиотеки стандартных подсистем) есть скрытая возможность группового сохранения печатных форм. Рассмотрим, как это работает:
Ctrl+A).Лист Microsoft Excel (.xlsx) и обратите внимание на переключатель: «Сохранить в отдельные файлы».Этот способ является наиболее предпочтительным для пользователей, так как не требует ни программирования, ни сложных манипуляций с почтовыми адресами.
Посмотрим на ситуацию со стороны информационной безопасности. Расчетные листки содержат персональные данные и информацию о доходах, что относится к категории конфиденциальной информации.
Помните:
Excel руководителю через открытые сетевые папки или незащищенную почту является нарушением Федерального закона № 152-ФЗ.Таким образом, мы проанализировали три основных способа решения задачи: от простых настроек рассылки до полноценного программного кода. Выбор метода зависит от ваших технических навыков и регулярности выполнения этой задачи.