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