Приветствуем вас! При настройке сложных систем оплаты труда в программе 1С:Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с неочевидным поведением системы. Один из таких сценариев — внедрение сдельно-прогрессивной оплаты труда. Когда мы настраиваем доплаты, зависящие от процента выполнения нормы, программа может безукоризненно производить математический расчет, но при этом перегружать документ «Начисление зарплаты и взносов» лишними нулевыми строками. Сегодня мы подробно разберем, почему возникает эта проблема, проанализируем расчетные формулы и рассмотрим эффективные способы ее решения без внесения изменений в конфигурацию.
Рассмотрим практическую ситуацию. В компании применяется сдельно-прогрессивная система. Сотруднику гарантирован стабильный оклад по дням или часам. Если за месяц его сдельный заработок (выработка) превышает окладную часть, ему полагается дополнительная «Доплата по прогрессивным расценкам». Если же выработка оказалась меньше оклада, сотрудник получает обычный оклад, а размер прогрессивной доплаты должен быть равен нулю.
Для реализации этого алгоритма в системе создается новое плановое начисление с назначением «Повременная оплата труда и начисления» или «Прочие начисления и выплаты». Начисление назначается сотруднику в плановом порядке (например, документом «Прием на работу» или «Изменение оплаты труда»).
Проблема кроется в следующем: когда наступает расчетный период и у сотрудника сдельный заработок оказывается меньше оклада, формула логично рассчитывает результат, равный 0. Но в документе «Начисление зарплаты и взносов» на вкладке «Начисления» все равно появляется строка с этим начислением, где в колонке «Результат» красуется пустота или нулевое значение. Это путает расчетчиков, засоряет расчетные листки и вызывает массу вопросов.
Давайте детально разберем формулу расчета прогрессивной доплаты, которую использует автор темы:
РасчетнаяБаза *
?(СдельныйЗаработок <= Оклад * (ВремяВДняхЧасах - ПереработаноПоСуммированномуУчету) / НормаЧасов, 0,
?(СдельныйЗаработок <= 1.15 * Оклад * (ВремяВДняхЧасах - ПереработаноПоСуммированномуУчету) / НормаЧасов, 10,
?(СдельныйЗаработок <= 1.25 * Оклад * (ВремяВДняхЧасах - ПереработаноПоСуммированномуУчету) / НормаЧасов, 20, 40))) / 100
Проанализируем структуру этого выражения по шагам:
РасчетнаяБаза — это сумма оклада, рассчитанная пропорционально отработанному времени.СдельныйЗаработок — это фактический объем выполненных работ, зарегистрированный документами «Сдельные работы».Оклад * (ВремяВДняхЧасах - ПереработаноПоСуммированномуУчету) / НормаЧасов вычисляет расчетную величину оклада, скорректированную на часы переработок при суммированном учете. Это базовый порог, с которым сравнивается сделка.?() проверяет: если фактическая сделка меньше или равна этому порогу, то возвращается множитель 0. То есть доплаты нет.Математически формула абсолютно верна. Если СдельныйЗаработок составил 36 489 рублей, а расчетный оклад — 36 490 рублей, первое же условие возвращает 0. На выходе мы получаем:
36 490 * 0 / 100 = 0
Поскольку плановое начисление назначено сотруднику «Ежемесячно», программа обязана зафиксировать результат расчета. И она записывает в документ строку с нулевым результатом. Выясним, как обойти это ограничение платформы без программирования.
Это самый элегантный и методологически верный способ в 1С:ЗУП 3.1, позволяющий полностью избежать появления нулевых строк. Вместо того чтобы рассчитывать начисление в безусловном плановом порядке каждый месяц, мы укажем программе, что его нужно считать только при наличии определенных условий.
Выполним следующие настройки:
ПрогрессивныйСдельныйЗаработок или используем предопределенный показатель объема работ.При такой настройке, если по сотруднику в текущем месяце не введен показатель сдельной выработки или если мы не зарегистрировали по нему данные для расчета, программа вообще проигнорирует это начисление. Оно просто не появится в табличной части документа «Начисление зарплаты и взносов», избавив расчетный лист от пустых строк.
Если ваша сдельно-прогрессивная оплата жестко связана с выполнением определенного вида работ в конкретные дни или часы, можно использовать альтернативную настройку по учету времени.
Рассмотрим этот алгоритм подробнее:
Если конфигурацию менять нельзя, а настройки начислений вы перенастраивать опасаетесь, можно воспользоваться штатной возможностью платформы 1С для быстрой очистки табличной части документа от нулевых результатов. Этот способ особенно полезен, когда расчет уже произведен и документ нужно срочно передать на согласование без лишнего визуального мусора.
Разберем процесс очистки по шагам:
0 (или оставим поле пустым, если ячейки незаполнены) и нажмем кнопку поиска. Система мгновенно отфильтрует строки, скрыв все ненулевые начисления.Если ручное удаление кажется вам слишком трудоемким, а автоматизация процесса критически важна, лучшим решением станет использование расширений конфигурации (.cfe). Это современный механизм платформы 1С, который позволяет дорабатывать логику программы, не снимая ее с поддержки и не мешая последующим обновлениям.
Специалисты по сопровождению 1С могут написать простое расширение, которое будет автоматически очищать документ «Начисление зарплаты и взносов» при его записи или расчете. Суть доработки сводится к небольшому алгоритму на встроенном языке:
Для Каждого СтрокаНачисления Из Объект.Начисления Цикл
Если СтрокаНачисления.Результат = 0 Тогда
Объект.Начисления.Удалить(СтрокаНачисления);
КонецЕсли;
КонецЦикла;
Такое расширение подключается администратором базы данных прямо в режиме «1С:Предприятие» через меню Администрирование — Печатные формы, отчеты и обработки — Расширения всего за пару минут и не требует монопольного доступа к базе.
Мы проанализировали проблему вывода нулевых строк при расчете сдельно-прогрессивной оплаты в 1С:ЗУП 3.1. Как выяснилось, это не ошибка программы, а логическое следствие ее архитектуры. Вы можете выбрать наиболее подходящий вам вариант решения: от изменения настроек выполнения начисления («Только если введен показатель») до простого интерактивного удаления строк расчетчиком. Используйте эти методики, чтобы сделать расчет заработной платы простым, понятным и безошибочным!