Как в ЗУП 3.1 настроить подсчет итогов ФОТ с учетом штатных единиц в документе изменения штатного расписания?

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

В конфигурации «Зарплата и управление персоналом 3.1» (ЗУП) пользователи часто сталкиваются с тем, что стандартные итоги в документе Изменение штатного расписания отображают общую сумму тарифных ставок без учета количества штатных единиц (ставок). Например, если оклад по позиции составляет 100 000 рублей, а количество ставок равно 2, в строке фонда оплаты труда (ФОТ) мы видим корректные 200 000 рублей. Однако в подвале таблицы система по умолчанию выводит сумму окладов — те самые 100 000 рублей, что вводит бухгалтеров и кадровиков в заблуждение.

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

Почему стандартный механизм итогов не подходит?

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

Решение 1: Локальный пересчет в модуле формы

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


Процедура ОбновитьИтогиФОТПозиции()
    ИтогоПоПозициям = 0;
    Для каждого Строка Из Объект.Позиции Цикл
        // Предполагаем, что ФОТПоПозиции — это реквизит строки ТЧ
        ИтогоПоПозициям = ИтогоПоПозициям + Строка.ФОТПоПозиции;
    КонецЦикла;
    
    // Устанавливаем итоговое значение в текстовое представление подвала
    Элементы.ПозицииФОТПоПозиции.ТекстПодвала = Формат(ИтогоПоПозициям, "ЧЦ=15; ЧДЦ=2; ЧГ=3,0");
КонецПроцедуры

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

Решение 2: Универсальный подход через общий модуль

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

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


&После("ЗаполнитьИтоговыйФОТПоПозициям")
Процедура Расш1_ЗаполнитьИтоговыйФОТПоПозициям(Форма, Позиции) Экспорт
    СуммаФОТПозиций = 0;
    
    Для каждого СтрокаПозиции Из Позиции Цикл
        // Используем данные из колонки ФОТПоПозиции, которая уже содержит Оклад * Ставки
        СуммаФОТПозиций = СуммаФОТПозиций + СтрокаПозиции.ФОТПоПозиции;
    КонецЦикла;
    
    // Форматируем вывод для удобства чтения (добавляем разделители групп и копейки)
    ТекстИтога = Формат(СуммаФОТПозиций, "ЧЦ=15; ЧДЦ=2; ЧГ=3,0");
    Форма.Элементы.ПозицииФОТПоПозиции.ТекстПодвала = ТекстИтога;
КонецПроцедуры

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

Важные нюансы реализации

При внедрении подобных правок следует учитывать несколько критически важных моментов, которые обеспечат стабильную работу программы:

  1. События обновления данных: Убедитесь, что вызов процедуры пересчета итогов привязан к событиям ПриИзменении для колонок с количеством ставок и основными показателями (оклад, надбавки). В типовых формах это часто уже реализовано через вызовы серверных процедур, поэтому расширение общего модуля (как в Решении 2) является наиболее эффективным.
  2. Форматирование чисел: Никогда не используйте простое преобразование Строка(Число) для вывода денежных сумм. Это лишает пользователя разделителей разрядов. Всегда применяйте функцию Формат() с параметром ЧГ=3,0.
  3. Дробные ставки: В ЗУП 3.1 штатные единицы могут быть дробными (например, 0.25 или 0.5). Проверьте, что ваш реквизит ФОТПоПозиции корректно рассчитывается как произведение ФОТ на количество единиц, чтобы итоговая сумма в подвале была точной.
  4. Дублирование в документах: Обратите внимание, что аналогичную доработку, скорее всего, потребуется перенести и в документ Утверждение штатного расписания, так как пользователи ожидают единообразного поведения интерфейса во всех документах подсистемы.

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

← На главную