Как свернуть виды начислений в расчетном листке ЗУП 3.1, если они разбиваются по периодам?

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

В процессе работы с конфигурацией Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с тем, что стандартный расчетный листок выводит одну и ту же услугу (например, Оплата по окладу) в несколько строк. Это происходит из-за того, что внутри одного месяца происходили кадровые переводы или менялись условия оплаты труда. Стандартная настройка Выводить периоды начислений лишь управляет видимостью данных, но не всегда позволяет сгруппировать строки корректно. Давайте разберемся, как решить эту задачу программно.

Анализ причин разделения строк

Система ЗУП 3.1 формирует таблицу начислений на основе регистров расчета. Если в течение месяца у сотрудника меняются параметры, влияющие на расчет (например, график работы или размер оклада), система создает несколько записей. При попытке свернуть эти строки методом ТаблицаЗначений.Свернуть() разработчики часто сталкиваются с ошибкой или отсутствием результата по причине несовпадения типов данных. В колонке Период действия могут одновременно находиться значения типа Дата и Строка, а методы свертки в 1С требуют строгого соответствия типов для группируемых полей.

Программное решение через изменение общего модуля

Для того чтобы добиться объединения строк с одинаковыми видами начислений, необходимо вмешаться в процесс формирования таблицы до того, как она будет выведена в макет. Рассмотрим работу с модулем ЗарплатаКадрыОтчеты и функцией ВывестиТелоРасчетногоЛистка.

Чтобы реализовать желаемую «свертку», выполним следующие шаги:

  1. Перехватим данные объекта РабочееМесто.СтрокиНачислений до вызова метода Свернуть.
  2. Приведем все значения в колонке ПериодДействия к единому строковому типу.
  3. Выполним группировку по набору полей, включая унифицированное поле периода.

Пример логики для преобразования таблицы:


// Пример приведения типов перед сверткой
Для Каждого СтрокаТЗ Из РабочееМесто.СтрокиНачислений Цикл
    СтрокаТЗ.ПериодДействия = Строка(СтрокаТЗ.ПериодДействия);
КонецЦикла;

// Выполнение свертки по нужным полям
МассивКолонок = Новый Массив;
МассивКолонок.Добавить("Начисление");
МассивКолонок.Добавить("ПериодДействия");

СуммируемыеКолонки = "Результат, ОтработаноДней, ОтработаноЧасов";

РабочееМесто.СтрокиНачислений.Свернуть(СтрСоединить(МассивКолонок, ","), СуммируемыеКолонки);

Использование расширений конфигурации

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

В расширении вы можете создать метод с аннотацией &После или &Вместо для функции ВывестиТелоРасчетногоЛистка. Это позволит безопасно модифицировать таблицу значений, не нарушая целостность типового кода. Если вы используете аннотацию &Вместо, не забудьте вызвать ПродолжитьВызов(), чтобы сохранить стандартную логику формирования листка, а уже после этого программно «схлопнуть» строки в таблице.

Важные рекомендации

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

← На главную