В процессе работы с конфигурацией Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с тем, что стандартный расчетный листок выводит одну и ту же услугу (например, Оплата по окладу) в несколько строк. Это происходит из-за того, что внутри одного месяца происходили кадровые переводы или менялись условия оплаты труда. Стандартная настройка Выводить периоды начислений лишь управляет видимостью данных, но не всегда позволяет сгруппировать строки корректно. Давайте разберемся, как решить эту задачу программно.
Система ЗУП 3.1 формирует таблицу начислений на основе регистров расчета. Если в течение месяца у сотрудника меняются параметры, влияющие на расчет (например, график работы или размер оклада), система создает несколько записей. При попытке свернуть эти строки методом ТаблицаЗначений.Свернуть() разработчики часто сталкиваются с ошибкой или отсутствием результата по причине несовпадения типов данных. В колонке Период действия могут одновременно находиться значения типа Дата и Строка, а методы свертки в 1С требуют строгого соответствия типов для группируемых полей.
Для того чтобы добиться объединения строк с одинаковыми видами начислений, необходимо вмешаться в процесс формирования таблицы до того, как она будет выведена в макет. Рассмотрим работу с модулем ЗарплатаКадрыОтчеты и функцией ВывестиТелоРасчетногоЛистка.
Чтобы реализовать желаемую «свертку», выполним следующие шаги:
РабочееМесто.СтрокиНачислений до вызова метода Свернуть.ПериодДействия к единому строковому типу.Пример логики для преобразования таблицы:
// Пример приведения типов перед сверткой
Для Каждого СтрокаТЗ Из РабочееМесто.СтрокиНачислений Цикл
СтрокаТЗ.ПериодДействия = Строка(СтрокаТЗ.ПериодДействия);
КонецЦикла;
// Выполнение свертки по нужным полям
МассивКолонок = Новый Массив;
МассивКолонок.Добавить("Начисление");
МассивКолонок.Добавить("ПериодДействия");
СуммируемыеКолонки = "Результат, ОтработаноДней, ОтработаноЧасов";
РабочееМесто.СтрокиНачислений.Свернуть(СтрСоединить(МассивКолонок, ","), СуммируемыеКолонки);
Прямое редактирование общих модулей — не лучшая практика, так как при обновлении ЗУП ваши изменения будут затерты. Поэтому мы настоятельно рекомендуем использовать расширения конфигурации.
В расширении вы можете создать метод с аннотацией &После или &Вместо для функции ВывестиТелоРасчетногоЛистка. Это позволит безопасно модифицировать таблицу значений, не нарушая целостность типового кода. Если вы используете аннотацию &Вместо, не забудьте вызвать ПродолжитьВызов(), чтобы сохранить стандартную логику формирования листка, а уже после этого программно «схлопнуть» строки в таблице.
РабочееМесто.СтрокиНачислений в отладчике. Убедитесь, что именно поле ПериодДействия является причиной разделения.ТаблицыЗначений может измениться в новых релизах ЗУП.Следуя этим рекомендациям, вы сможете настроить расчетный листок под требования пользователей, сохранив при этом чистоту кода и легкость последующего обслуживания системы.