Как вывести процент надбавки в печатную форму Кадрового перевода в ЗУП 3.1

Программист
← На главную

При разработке внешних печатных форм (ВПФ) для документа Кадровый перевод в программе 1С:Зарплата и управление персоналом 3.1 разработчики часто сталкиваются с проблемой: в самом документе (в его табличных частях) зачастую видны только итоговые суммы начислений, а не их исходные показатели, такие как проценты. Например, при переводе сотрудника на работу с вредными условиями труда в приказе необходимо отразить именно размер надбавки в процентах (например, 4%, 10%, 24%), а не итоговую денежную сумму.

В этой статье мы подробно разберем, как устроена архитектура хранения показателей в ЗУП 3.1, и какими программными методами можно воспользоваться, чтобы «вытянуть» нужный процент для вывода в печатную форму.

Где физически хранятся данные о процентах

Прежде всего, проанализируем структуру хранения данных. В отличие от версии 2.5, в ЗУП 3.1 показатели начислений не являются реквизитами табличной части документа в привычном понимании. Они записываются в регистры сведений в момент проведения документа.

Разберем основные регистры, которые могут содержать нужную информацию:

  1. Значения периодических показателей расчета зарплаты (сотрудников). Это основной регистр, где хранятся значения, привязанные к конкретному сотруднику и начислению на определенный период. Именно отсюда система «подтягивает» данные при формировании штатных отчетов и приказов.
  2. Плановые начисления. Здесь фиксируется сам факт назначения надбавки и ее влияние на ФОТ (Фонд Оплаты Труда).

Важный нюанс: Связь в регистре осуществляется не напрямую по ссылке на документ «Кадровый перевод», а по комбинации Сотрудник + Показатель + Период. Поэтому простым запросом к табличной части документа получить процент не получится.

Способ 1. Получение данных через программный интерфейс (API) 1С

Рассмотрим наиболее правильный с точки зрения архитектуры 1С способ — использование встроенных функций типового решения. В модуле КадровыйУчет существует мощный инструментарий для подготовки данных. Проанализируем функцию ТаблицаНачисленийСотрудниковПоВременнойТаблице.

Этот метод позволяет получить таблицу всех начислений сотрудника на определенную дату, включая значения всех показателей. Для этого нам необходимо подготовить временную таблицу с сотрудниками и периодами. Рассмотрим пример логики построения запроса и вызова функции:


// Подготовка менеджера временных таблиц
МенеджерВТ = Новый МенеджерВременныхТаблиц;

// Формируем запрос для создания ВТ с сотрудником и датой перевода
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст = "ВЫБРАТЬ
               |    &Сотрудник КАК Сотрудник,
               |    &ДатаПеревода КАК Период
               |ПОМЕСТИТЬ ВТСотрудникиПериоды";
Запрос.УстановитьПараметр("Сотрудник", СсылкаНаОбъект.Сотрудник);
Запрос.УстановитьПараметр("ДатаПеревода", СсылкаНаОбъект.Дата);
Запрос.Выполнить();

// Вызов программного интерфейса ЗУП
ТаблицаНачислений = КадровыйУчет.ТаблицаНачисленийСотрудниковПоВременнойТаблице(МенеджерВТ, "ВТСотрудникиПериоды");

После выполнения этого кода переменная ТаблицаНачислений будет содержать колонки вида Показатель1, Значение1, Показатель2, Значение2 и так далее. Нам остается только перебором найти нужный показатель.

Способ 2. Поиск конкретного показателя (например, вредности)

Выясним, как найти именно процент надбавки за вредность среди всех начислений сотрудника. Для этого нам нужно сравнить значение в колонке ПоказательN со ссылкой на предопределенный показатель из справочника ПоказателиРасчетаЗарплаты.

Рассмотрим пример кода для поиска значения:


ПроцентВредности = 0;
СсылкаНаПоказатель = Справочники.ПоказателиРасчетаЗарплаты.ПроцентНадбавкиЗаВредность;

Для Каждого СтрокаНачисления Из ТаблицаНачислений Цикл
    // В таблице может быть до 6 показателей для одного начисления
    Для Номер = 1 По 6 Цикл
        ИмяПоказателя = "Показатель" + Строка(Номер);
        ИмяЗначения = "Значение" + Строка(Номер);
        
        Если СтрокаНачисления[ИмяПоказателя] = СсылкаНаПоказатель Тогда
            ПроцентВредности = СтрокаНачисления[ИмяЗначения];
            Прервать;
        КонецЕсли;
    КонецЦикла;
КонецЦикла;

Обратите внимание: Если в настройках показателя в системе установлен признак «используется как коэффициент», то значение в базе может храниться как 0.04 вместо 4. В этом случае при выводе в печатную форму его необходимо умножить на 100.

Способ 3. Использование типового механизма печати приказов

Если ваша задача — максимально приблизиться к типовой форме Т-5, но с небольшими изменениями, проанализируем, как это делает сама система. В модуле менеджера документа «Кадровый перевод» есть функция СформироватьДанныеДляПечати.

Для ВПФ эффективнее всего вызвать функцию КадровыйУчет.ПодготовитьДанныеДляПечатиПриказаОПереводе. Она возвращает структуру, в которой уже собраны все необходимые данные, включая таблицу начислений, очищенную от лишнего мусора и приведенную к удобному для вывода виду.

Особенности стажевых надбавок и шкал

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

Разберем, как поступить в этой ситуации:

  1. Проанализируем текущий стаж сотрудника на дату перевода.
  2. Используем метод РасчетЗарплатыОбщий.РассчитатьЗначениеПоказателяПоШкале(). В этот метод передается ссылка на шкалу начисления и текущее значение стажа.
  3. Система вернет актуальный процент, который и будет действовать после перевода.

Рекомендации по отладке

Чтобы быстро выяснить, какой именно показатель отвечает за нужную вам цифру в печатной форме, рекомендуем воспользоваться Консолью запросов. Выполните запрос к регистру сведений ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников с фильтром по сотруднику. Это позволит вам увидеть точное имя показателя (тип СправочникСсылка.ПоказателиРасчетаЗарплаты) и его числовое значение, которое система хранит в ресурсе Значение.

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

← На главную