Как вывести нужные показатели начислений в расчетном листке 1С:ЗУП 3.1 и ЗКГУ 3.1

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

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

Механизм выбора «основного показателя» в системе

Проанализируем ситуацию: почему программа выбирает именно один показатель? В платформе 1С v8.3 для объектов метаданных ВидыРасчета (Начисления) существует скрытый от пользователя механизм назначения так называемого «основного показателя». Этот показатель определяется программой автоматически в момент записи начисления.

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

  1. Если в формуле используется только один показатель, он безусловно становится основным.
  2. Если показателей несколько, приоритет отдается «постоянным» показателям (тем, что хранятся в кадровых данных).
  3. Если постоянных показателей нет или их несколько, система ищет те, у которых в настройках указано «Запрашивается при вводе».
  4. Если и здесь нет однозначного выбора, система берет первый показатель по алфавиту (часто ориентируясь на его внутреннее имя или идентификатор).

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

Решение 1: Стандартные настройки в современных релизах

Начиная с релизов 3.1.14 и выше, разработчики 1С добавили штатную возможность обойти ограничение «одного показателя». Рассмотрим, как активировать вывод всех составляющих формулы:

  1. Откроем отчет Расчетный листок.
  2. Нажмем кнопку Настройки и перейдем в Расширенный режим.
  3. На закладке Дополнительные настройки найдем флаг Выводить показатели начислений.
  4. В современных версиях здесь можно выбрать вариант отображения: выводить только основной или выводить все показатели, участвующие в расчете.

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

Решение 2: Трюк с временным изменением формулы («Метод перезаписи»)

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

  1. Перейдем в список Начисления и найдем нужное нам начисление (например, «Премия процентом»).
  2. Скопируем текущую сложную формулу в текстовый редактор, чтобы не потерять её.
  3. Очистим поле формулы и оставим там только один показатель — тот, который мы хотим видеть основным (например, ПроцентПремии).
  4. Нажмем кнопку Записать. В этот момент 1С проанализирует формулу и жестко привяжет единственный найденный показатель к реквизиту «Основной».
  5. Вернем исходную сложную формулу обратно в поле.
  6. Снова нажмем Записать и Закрыть.

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

Решение 3: Программная корректировка через расширение

Для программистов 1С наиболее надежным способом будет использование механизма расширений. Мы можем вмешаться в процесс формирования таблицы показателей. Проанализируем пример кода, который можно внедрить в расширение для общего модуля РасчетЗарплатыРасширенный.

Нам необходимо перехватить процедуру ЗаполнитьИнформациюОПоказателяхВидаРасчета. Посмотрим на пример реализации:


&После("ЗаполнитьИнформациюОПоказателяхВидаРасчета")
Процедура Расш_ЗаполнитьИнформациюОПоказателяхВидаРасчета(ВидРасчета, ТаблицаПоказателей)
    
    // Перебираем показатели, чтобы найти нужный нам по смыслу
    Для Каждого СтрокаПоказателя Из ТаблицаПоказателей Цикл
        
        // Если нашли показатель, в имени которого есть "Процент", 
        // принудительно делаем его основным
        Если СтрНайти(СтрокаПоказателя.Показатель.Наименование, "Процент") > 0 Тогда
            
            // Сначала сбросим признак основного у всех остальных
            Для Каждого Стр Из ТаблицаПоказателей Цикл
                Стр.ОсновнойПоказатель = Ложь;
            КонецЦикла;
            
            // Устанавливаем наш показатель основным
            СтрокаПоказателя.ОсновнойПоказатель = Истина;
            Прервать; 
            
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

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

Решение 4: Использование внешних печатных форм

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

Основные преимущества этого подхода:

Резюме и рекомендации

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

  1. Сначала проверьте настройки отчета на предмет возможности вывода всех показателей. Это самый стабильный путь.
  2. Если нужно решение «здесь и сейчас» без программирования — используйте метод временного изменения формулы.
  3. Если проблема массовая и касается множества различных начислений — используйте расширение конфигурации с описанной выше логикой перехвата.

Помните, что «основной показатель» влияет не только на расчетный листок, но и на отчеты АнализНачисленийСотрудникам, поэтому любые изменения в коде или метаданных должны быть протестированы на корректность отображения во всей подсистеме зарплатной отчетности.

← На главную