При разработке внешних печатных форм (ВПФ) для документа Кадровый перевод в программе 1С:Зарплата и управление персоналом 3.1 разработчики часто сталкиваются с проблемой: в самом документе (в его табличных частях) зачастую видны только итоговые суммы начислений, а не их исходные показатели, такие как проценты. Например, при переводе сотрудника на работу с вредными условиями труда в приказе необходимо отразить именно размер надбавки в процентах (например, 4%, 10%, 24%), а не итоговую денежную сумму.
В этой статье мы подробно разберем, как устроена архитектура хранения показателей в ЗУП 3.1, и какими программными методами можно воспользоваться, чтобы «вытянуть» нужный процент для вывода в печатную форму.
Прежде всего, проанализируем структуру хранения данных. В отличие от версии 2.5, в ЗУП 3.1 показатели начислений не являются реквизитами табличной части документа в привычном понимании. Они записываются в регистры сведений в момент проведения документа.
Разберем основные регистры, которые могут содержать нужную информацию:
Важный нюанс: Связь в регистре осуществляется не напрямую по ссылке на документ «Кадровый перевод», а по комбинации Сотрудник + Показатель + Период. Поэтому простым запросом к табличной части документа получить процент не получится.
Рассмотрим наиболее правильный с точки зрения архитектуры 1С способ — использование встроенных функций типового решения. В модуле КадровыйУчет существует мощный инструментарий для подготовки данных. Проанализируем функцию ТаблицаНачисленийСотрудниковПоВременнойТаблице.
Этот метод позволяет получить таблицу всех начислений сотрудника на определенную дату, включая значения всех показателей. Для этого нам необходимо подготовить временную таблицу с сотрудниками и периодами. Рассмотрим пример логики построения запроса и вызова функции:
// Подготовка менеджера временных таблиц
МенеджерВТ = Новый МенеджерВременныхТаблиц;
// Формируем запрос для создания ВТ с сотрудником и датой перевода
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст = "ВЫБРАТЬ
| &Сотрудник КАК Сотрудник,
| &ДатаПеревода КАК Период
|ПОМЕСТИТЬ ВТСотрудникиПериоды";
Запрос.УстановитьПараметр("Сотрудник", СсылкаНаОбъект.Сотрудник);
Запрос.УстановитьПараметр("ДатаПеревода", СсылкаНаОбъект.Дата);
Запрос.Выполнить();
// Вызов программного интерфейса ЗУП
ТаблицаНачислений = КадровыйУчет.ТаблицаНачисленийСотрудниковПоВременнойТаблице(МенеджерВТ, "ВТСотрудникиПериоды");
После выполнения этого кода переменная ТаблицаНачислений будет содержать колонки вида Показатель1, Значение1, Показатель2, Значение2 и так далее. Нам остается только перебором найти нужный показатель.
Выясним, как найти именно процент надбавки за вредность среди всех начислений сотрудника. Для этого нам нужно сравнить значение в колонке ПоказательN со ссылкой на предопределенный показатель из справочника ПоказателиРасчетаЗарплаты.
Рассмотрим пример кода для поиска значения:
ПроцентВредности = 0;
СсылкаНаПоказатель = Справочники.ПоказателиРасчетаЗарплаты.ПроцентНадбавкиЗаВредность;
Для Каждого СтрокаНачисления Из ТаблицаНачислений Цикл
// В таблице может быть до 6 показателей для одного начисления
Для Номер = 1 По 6 Цикл
ИмяПоказателя = "Показатель" + Строка(Номер);
ИмяЗначения = "Значение" + Строка(Номер);
Если СтрокаНачисления[ИмяПоказателя] = СсылкаНаПоказатель Тогда
ПроцентВредности = СтрокаНачисления[ИмяЗначения];
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Обратите внимание: Если в настройках показателя в системе установлен признак «используется как коэффициент», то значение в базе может храниться как 0.04 вместо 4. В этом случае при выводе в печатную форму его необходимо умножить на 100.
Если ваша задача — максимально приблизиться к типовой форме Т-5, но с небольшими изменениями, проанализируем, как это делает сама система. В модуле менеджера документа «Кадровый перевод» есть функция СформироватьДанныеДляПечати.
Для ВПФ эффективнее всего вызвать функцию КадровыйУчет.ПодготовитьДанныеДляПечатиПриказаОПереводе. Она возвращает структуру, в которой уже собраны все необходимые данные, включая таблицу начислений, очищенную от лишнего мусора и приведенную к удобному для вывода виду.
Ситуация усложняется, когда нужно вывести процент надбавки, который зависит от стажа (например, выслуга лет или северная надбавка). В этом случае процент не хранится как константа, а вычисляется динамически.
Разберем, как поступить в этой ситуации:
РасчетЗарплатыОбщий.РассчитатьЗначениеПоказателяПоШкале(). В этот метод передается ссылка на шкалу начисления и текущее значение стажа.Чтобы быстро выяснить, какой именно показатель отвечает за нужную вам цифру в печатной форме, рекомендуем воспользоваться Консолью запросов. Выполните запрос к регистру сведений ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников с фильтром по сотруднику. Это позволит вам увидеть точное имя показателя (тип СправочникСсылка.ПоказателиРасчетаЗарплаты) и его числовое значение, которое система хранит в ресурсе Значение.
Подведем итог: для вывода процента в ВПФ Кадрового перевода лучше всего использовать штатные функции модуля КадровыйУчет, так как они учитывают все сложности периодических данных и правильно обрабатывают временные таблицы, что гарантирует получение актуальных данных на дату документа.