Как программно получить отчет по ФОТ из внешней базы ЗУП 3.1

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

При работе с распределенными системами или при необходимости консолидации данных часто возникает задача получения показателей из специализированных баз. Одним из наиболее востребованных, но в то же время сложных показателей является Фонд оплаты труда (ФОТ) в конфигурации «Зарплата и управление персоналом 3.1». Сложность заключается в том, что ФОТ в ЗУП — это не просто значение в регистре, а результат работы сложных механизмов вытеснения, плановых начислений и графиков работы. Рассмотрим подробнее, как можно организовать получение этого отчета из внешней информационной базы.

Метод 1. Использование COM-соединения (классический подход)

Этот метод часто выбирают за его относительную простоту реализации «в коде». Мы создаем подключение к целевой базе ЗУП непосредственно из текущей конфигурации. Для этого используется объект V83.COMConnector. Проанализируем пример кода для установления связи:


// Создаем объект для подключения
Попытка
    COMСоединитель = Новый COMОбъект("V83.COMConnector");
    СтрокаПодключения = "Srvr='ServerName';Ref='BaseName';Usr='Login';Pwd='Password';";
    БазаЗУП = COMСоединитель.Connect(СтрокаПодключения);
Исключение
    Сообщить("Не удалось подключиться: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

После того как соединение установлено, нам нужно получить данные. Важно помнить, что попытка просто прочитать регистры через запрос может привести к неверным цифрам. Правильнее всего будет вызвать экспортную функцию из модуля менеджера отчета или общего модуля на стороне ЗУП, которая вернет нам результат формирования отчета. Разберем шаги:

  1. В базе ЗУП создаем экспортную функцию, которая программно формирует отчет «Анализ ФОТ».
  2. В вызывающей базе через переменную БазаЗУП обращаемся к этой функции.
  3. Передаем полученные данные (например, в виде массива структур или XML) в текущую базу.

Важное ограничение: Технология COM требует наличия одинаковых версий платформы, плохо работает на 64-битных серверах без дополнительной настройки и потребляет одну сеансовую лицензию на каждое подключение.

Метод 2. HTTP-сервисы в расширении (современный подход)

Выясним, почему этот метод считается более предпочтительным. HTTP-сервисы работают быстрее, не зависят от разрядности системы и позволяют передавать данные в легком формате JSON. Рассмотрим алгоритм реализации:

В базе ЗУП 3.1 создадим Расширение, в котором добавим HTTP-сервис. Проанализируем структуру обработчика GET-запроса:


Функция ПолучитьДанныеФОТ(Запрос)
    // Параметры периода получаем из URL
    ДатаНачала = Запрос.ПараметрыЗапроса.Получить("ДатаНачала");
    ДатаОкончания = Запрос.ПараметрыЗапроса.Получить("ДатаОкончания");
    
    // Вызываем программное формирование СКД (рассмотрено ниже)
    ТаблицаРезультат = СформироватьФОТНаСервере(ДатаНачала, ДатаОкончания);
    
    // Сериализуем в JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ТаблицаРезультат);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
    Возврат Ответ;
КонецФункции

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

Метод 3. Программное формирование отчета через СКД

Посмотрим на ситуацию со стороны формирования самих данных. Как уже было сказано, расчет ФОТ — процедура тяжелая. Чтобы не изобретать велосипед, мы должны использовать штатную Систему компоновки данных (СКД) отчета «Анализ ФОТ по сотрудникам».

Проанализируем пример кода, который можно выполнить внутри HTTP-сервиса или через COM, чтобы получить результат отчета программно:


// Получаем схему компоновки штатного отчета
ОтчетОбъект = Отчеты.АнализФОТПоСотрудникам.Создать();
Схема = ОтчетОбъект.СхемаКомпоновкиДанных;

// Настраиваем параметры
Настройки = Схема.НастройкиПоУмолчанию;
ПараметрПериод = Настройки.ПараметрыДанных.Элементы.Найти("Период");
ПараметрПериод.Значение = Новый СтандартныйПериод(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));
ПараметрПериод.Использование = Истина;

// Инициализируем макет и процессор
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТаблицаЗначений = Новый ТаблицаЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

В результате переменная ТаблицаЗначений будет содержать все необходимые расчетные данные по ФОТ, учитывая все внутренние механизмы ЗУП. Именно эту таблицу мы и будем передавать обратно вызывающей стороне.

Сравнение и выбор решения

Выясним, какой метод лучше использовать в конкретных условиях:

Рекомендация: Для получения корректного ФОТ всегда используйте программный вызов ПроцессорКомпоновкиДанных штатных отчетов ЗУП. Это гарантирует, что данные во внешней базе будут на 100% совпадать с тем, что видит бухгалтер в самой ЗУП.

Разберем еще один нюанс: права доступа. При создании HTTP-сервиса или COM-подключения обязательно создайте в целевой базе ЗУП отдельного пользователя с ограниченными правами. Ему должны быть доступны только роли на чтение соответствующих регистров и запуск отчета АнализФОТПоСотрудникам. Это обезопасит конфиденциальные данные о зарплатах от несанкционированного доступа.

Таким образом, мы рассмотрели комплексный подход к интеграции. Сочетание HTTP-сервиса и программного вызова СКД является наиболее надежным и современным способом получения отчетности из внешних баз 1С.

← На главную