Как убрать нулевые строки при расчете сдельно-прогрессивной оплаты в 1С:ЗУП 3.1?

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

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

В чем суть проблемы?

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

Для реализации этого алгоритма в системе создается новое плановое начисление с назначением «Повременная оплата труда и начисления» или «Прочие начисления и выплаты». Начисление назначается сотруднику в плановом порядке (например, документом «Прием на работу» или «Изменение оплаты труда»).

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

Анализ расчетной формулы

Давайте детально разберем формулу расчета прогрессивной доплаты, которую использует автор темы:


РасчетнаяБаза *
?(СдельныйЗаработок <= Оклад * (ВремяВДняхЧасах - ПереработаноПоСуммированномуУчету) / НормаЧасов, 0,
?(СдельныйЗаработок <= 1.15 * Оклад * (ВремяВДняхЧасах - ПереработаноПоСуммированномуУчету) / НормаЧасов, 10,
?(СдельныйЗаработок <= 1.25 * Оклад * (ВремяВДняхЧасах - ПереработаноПоСуммированномуУчету) / НормаЧасов, 20, 40))) / 100

Проанализируем структуру этого выражения по шагам:

  1. Показатель РасчетнаяБаза — это сумма оклада, рассчитанная пропорционально отработанному времени.
  2. Переменная СдельныйЗаработок — это фактический объем выполненных работ, зарегистрированный документами «Сдельные работы».
  3. Конструкция Оклад * (ВремяВДняхЧасах - ПереработаноПоСуммированномуУчету) / НормаЧасов вычисляет расчетную величину оклада, скорректированную на часы переработок при суммированном учете. Это базовый порог, с которым сравнивается сделка.
  4. Условный оператор ?() проверяет: если фактическая сделка меньше или равна этому порогу, то возвращается множитель 0. То есть доплаты нет.
  5. Если сделка больше порога, вложенные условия определяют прогрессивный процент доплаты: 10% (если превышение до 15%), 20% (если превышение до 25%) или 40% (при превышении более чем на 25%).

Математически формула абсолютно верна. Если СдельныйЗаработок составил 36 489 рублей, а расчетный оклад — 36 490 рублей, первое же условие возвращает 0. На выходе мы получаем:

36 490 * 0 / 100 = 0

Поскольку плановое начисление назначено сотруднику «Ежемесячно», программа обязана зафиксировать результат расчета. И она записывает в документ строку с нулевым результатом. Выясним, как обойти это ограничение платформы без программирования.

Способ 1. Изменение способа выполнения начисления на «Только если введено значение показателя»

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

Выполним следующие настройки:

  1. Перейдем в раздел Настройка — Начисления и откроем карточку нашей «Доплаты по прогрессивным расценкам».
  2. На вкладке Основное найдем реквизит Начисление выполняется. По умолчанию там установлено значение «Ежемесячно». Изменим его на «Только если введено значение показателя».
  3. В появившемся списке показателей нам необходимо выбрать или создать специальный показатель. Например, назовем его ПрогрессивныйСдельныйЗаработок или используем предопределенный показатель объема работ.
  4. Настроим этот показатель: он должен быть разовым (вводится только в месяце расчета) либо накапливаемым.
  5. Создадим шаблон ввода исходных данных через меню Настройка — Шаблоны ввода исходных данных, чтобы расчетчики могли вносить этот показатель в документе «Данные для расчета зарплаты».

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

Способ 2. Привязка к виду учета времени

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

Рассмотрим этот алгоритм подробнее:

  1. В карточке начисления «Доплата по прогрессивным расценкам» на вкладке Основное в поле Начисление выполняется выберем вариант «Только если введен вид учета времени».
  2. В качестве вида времени укажем специально созданный вид времени (например, «Сдельная работа» с буквенным кодом «СД»).
  3. Теперь данное начисление будет автоматически попадать в расчетный документ только тогда, когда у сотрудника в табеле учета рабочего времени или в графике зафиксирован хотя бы один час по коду «СД». Если в текущем месяце сотрудник работал по обычному графику (код «Явка»), строка с доплатой даже не сформируется.

Способ 3. Быстрое удаление нулевых строк (Лайфхак для пользователя в режиме Предприятия)

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

Разберем процесс очистки по шагам:

  1. Откроем заполненный документ Начисление зарплаты и взносов и перейдем на вкладку Начисления.
  2. Выделим колонку Результат. Кликнем правой кнопкой мыши по любой ячейке и выберем стандартную команду «Найти...» (или нажмем горячие клавиши Ctrl + F).
  3. В поле поиска введем значение 0 (или оставим поле пустым, если ячейки незаполнены) и нажмем кнопку поиска. Система мгновенно отфильтрует строки, скрыв все ненулевые начисления.
  4. Нажмем комбинацию клавиш Ctrl + A, чтобы выделить все отфильтрованные строки с нулевым результатом.
  5. Нажмем клавишу Delete (или кнопку «Удалить» на панели табличной части). Программа удалит все выделенные нулевые строки.
  6. Отменим поиск, нажав на крестик в панели фильтрации. Перед нами останется чистый документ, содержащий только реальные начисления с суммами больше нуля. Все расчеты и проводки по ним сохранятся в первозданном виде.

Способ 4. Использование механизма расширений

Если ручное удаление кажется вам слишком трудоемким, а автоматизация процесса критически важна, лучшим решением станет использование расширений конфигурации (.cfe). Это современный механизм платформы 1С, который позволяет дорабатывать логику программы, не снимая ее с поддержки и не мешая последующим обновлениям.

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


Для Каждого СтрокаНачисления Из Объект.Начисления Цикл
    Если СтрокаНачисления.Результат = 0 Тогда
        Объект.Начисления.Удалить(СтрокаНачисления);
    КонецЕсли;
КонецЦикла;

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

Выводы

Мы проанализировали проблему вывода нулевых строк при расчете сдельно-прогрессивной оплаты в 1С:ЗУП 3.1. Как выяснилось, это не ошибка программы, а логическое следствие ее архитектуры. Вы можете выбрать наиболее подходящий вам вариант решения: от изменения настроек выполнения начисления («Только если введен показатель») до простого интерактивного удаления строк расчетчиком. Используйте эти методики, чтобы сделать расчет заработной платы простым, понятным и безошибочным!

← На главную