Как выгрузить начисления по зарплате в текстовый файл в 1С:Зарплата и Управление Персоналом?

Программист 1С v8.3 (Обычные формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

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

Где хранятся начисления в 1С:ЗУП 2.5?

Проанализируем структуру хранения данных по начислениям сотрудников. В конфигурации «Зарплата и Управление Персоналом 2.5» начисления разделены по двум основным регистрам расчета:

  1. РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций — содержит оклады, тарифные ставки, оплату по больничным листам, отпускам и другим плановым видам расчетов со сроком действия.
  2. РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций — содержит разовые премии, разовые надбавки, материальную помощь и прочие разовые выплаты.

Сведения о сотрудниках и их табельных номерах хранятся в справочнике СотрудникиОрганизаций (реквизит Код содержит табельный номер). Чтобы собрать полные сведения по всем начислениям за определенный период, в запросе необходимо объединить выборки из обоих регистров расчета с помощью конструкции ОБЪЕДИНИТЬ ВСЕ.

Создание внешней обработки для выгрузки

Разберем процесс создания исполняемого файла выгрузки. В отличие от платформы 1С 7.7, где файлы обработок имели расширение .ert, в 1С 8 используются файлы с расширением .epf.

  1. Открываем базу в режиме Конфигуратор.
  2. В главном меню выбираем Файл → Новый....
  3. В появившемся диалоговом окне выбираем Внешняя обработка и нажимаем ОК.
  4. В окне свойств обработки задаем имя (например, ВыгрузкаНачисленийВТекст).
  5. Добавляем форму обработки и размещаем на ней реквизиты для выбора периода (ДатаНачала, ДатаОкончания), организацию (при необходимости) и кнопку запуска процедуры экспорта.

Программный код формирования текстового файла

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

При формировании строк важно использовать функцию Формат(), чтобы исключить пробелы-разделители триад в суммах (параметр ЧГ=0) и привести дату к единому стандарту.


Процедура ВыгрузитьНачисленияВФайл(ИмяФайла, ДатаНачала, ДатаОкончания)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Основные.ПериодРегистрации КАК ДатаНачисления,
        |   Основные.Сотрудник.Код КАК ТабНомер,
        |   Основные.Сотрудник.Наименование КАК ФИОСотрудника,
        |   Основные.Результат КАК Сумма,
        |   ЕСТЬNULL(Основные.Регистратор.Комментарий, Основные.ВидРасчета.Наименование) КАК ТекстРаспоряжения
        |ИЗ
        |   РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Основные
        |ГДЕ
        |   Основные.ПериодРегистрации МЕЖДУ &ДатаНачала И &ДатаОкончания
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |   Дополнительные.ПериодРегистрации,
        |   Дополнительные.Сотрудник.Код,
        |   Дополнительные.Сотрудник.Наименование,
        |   Дополнительные.Результат,
        |   ЕСТЬNULL(Дополнительные.Регистратор.Комментарий, Дополнительные.ВидРасчета.Наименование)
        |ИЗ
        |   РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК Дополнительные
        |ГДЕ
        |   Дополнительные.ПериодРегистрации МЕЖДУ &ДатаНачала И &ДатаОкончания";
    
    Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));
    Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    // Создаем объект для записи текстового файла с поддержкой кодировки ANSI/Windows
    ТекстФайл = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI);
    
    Пока Выборка.Следующий() Цикл
        
        СтрДата = Формат(Выборка.ДатаНачисления, "ДФ=dd.MM.yyyy");
        СтрТабНомер = СокрЛП(Выборка.ТабНомер);
        СтрФИО = СокрЛП(Выборка.ФИОСотрудника);
        СтрСумма = Формат(Выборка.Сумма, "ЧДЦ=2; ЧРД=.; ЧГ=0");
        
        // Очищаем текст распоряжения от возможных символов переноса строк и разделителей
        СтрРаспоряжение = СтрЗаменить(СокрЛП(Выборка.ТекстРаспоряжения), ";", " ");
        СтрРаспоряжение = СтрЗаменить(СтрРаспоряжение, Символы.ПС, " ");
        
        СтрокаВыгрузки = СтрДата + ";" + СтрТабНомер + ";" + СтрФИО + ";" + СтрСумма + ";" + СтрРаспоряжение;
        
        ТекстФайл.ЗаписатьСтроку(СтрокаВыгрузки);
        
    КонецЦикла;
    
    ТекстФайл.Закрыть();
    
    Предупреждение("Выгрузка успешно завершена!");
    
КонецПроцедуры

Выгрузка без программирования: Универсальный отчет

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

  1. Переходим в меню: Отчеты → Универсальные → Универсальный отчет (по регистрам, документам, справочникам).
  2. В поле типа данных выбираем Регистр расчета.
  3. В качестве объекта выбираем ОсновныеНачисленияРаботниковОрганизаций.
  4. По кнопке Настройка открываем окно настройки отчета и выбираем необходимые поля: ПериодРегистрации, Сотрудник.Код, Сотрудник, Результат, ВидРасчета.
  5. Формируем отчет за выбранный месяц или период.
  6. В главном меню платформы нажимаем Файл → Сохранить как..., в списке типов файлов выбираем Текстовый документ (*.txt) или Лист Excel (*.xls).
  7. Повторяем операцию для объекта ДополнительныеНачисленияРаботниковОрганизаций, если на предприятии начислялись разовые премии или надбавки.

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

← На главную