Как отключить автоматические расчеты начислений и удержаний в документе "Увольнение" в 1С:ЗиКГУ 3.1.15?

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

При работе с конфигурациями 1С:Зарплата и управление персоналом (ЗУП) и 1С:Зарплата и кадры государственного учреждения (ЗиКГУ) мы часто сталкиваемся с необходимостью адаптировать стандартные механизмы программы под специфические потребности организации. Одним из таких кейсов является отключение автоматических расчетов начислений и удержаний в документе "Увольнение". Разберем эту задачу подробно, выясним причины ее возникновения и найдем оптимальное решение.

Основная проблема, с которой сталкиваются пользователи, заключается в том, что документ "Увольнение" в ЗУП/ЗиКГУ 3.1 по умолчанию выполняет комплексный расчет: зарплаты за отработанное время, компенсаций за неиспользованный отпуск, удержаний (НДФЛ, займы) и страховых взносов. Этот функционал необходим для корректного оформления прекращения трудовых отношений в соответствии с законодательством. Однако в некоторых случаях, как, например, при использовании программы для учета стипендий студентов, стандартные расчеты не требуются и даже мешают. Нам нужен только кадровый документ, фиксирующий факт "увольнения" (отчисления), без каких-либо финансовых движений.

Стандартное поведение документа "Увольнение" и причины возникновения проблемы

Документ "Увольнение" в 1С:ЗУП 3.1 и ЗиКГУ 3.1 разработан как многофункциональный инструмент. Он призван обеспечить полную автоматизацию всех процедур, связанных с прекращением трудовых отношений. Когда мы оформляем увольнение сотрудника, программа автоматически:

  1. Рассчитывает заработную плату за фактически отработанное время до даты увольнения.
  2. Определяет размер компенсации за неиспользованный отпуск или удержания за излишне предоставленный отпуск.
  3. Рассчитывает НДФЛ и страховые взносы со всех начислений.
  4. Формирует проводки по бухгалтерскому и налоговому учету.
  5. Подготавливает необходимые данные для отчетности в СФР (бывшие ПФР и ФСС).

В нашем случае, пользователь применяет 1С:ЗиКГУ для учета стипендий студентов. Когда студент отчисляется, с точки зрения программы это должно быть оформлено как "увольнение". Но студентам не положены компенсации, пособия или зарплата при отчислении. Соответственно, автоматические расчеты в документе "Увольнение" становятся избыточными и требуют ручного обнуления или отключения, что крайне неудобно. Ранее в ЗУП 2.5 такой функционал был реализован более гибко, и часто было возможно оформить только кадровый документ, но в третьей редакции этот механизм стал более интегрированным.

Возможные, но неприменимые в данном случае решения

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

Разделение прав пользователей

Одним из распространенных способов управления расчетами в ЗУП/ЗиКГУ является разграничение прав доступа. Предполагается, что кадровик оформляет документ "Увольнение", а расчетчик (бухгалтер) уже утверждает его и выполняет расчеты. Если у кадровика отключены права на расчет зарплаты (например, посредством роли "Расчет зарплаты расширенный", которая не присвоена), то он может не видеть расчеты или не иметь возможности их изменить. Однако в нашем случае:

  1. Один и тот же человек выполняет как "кадровые" функции (отчисление студентов), так и расчетные (стипендии).
  2. Даже если кадровик не видит расчеты, они все равно будут произведены после утверждения документа расчетчиком.

Постоянное переключение между двумя учетными записями для выполнения разных операций одним и тем же человеком – это скорее "костыль", чем корректное и удобное решение. Оно значительно снижает производительность и комфорт работы.

Предварительное начисление всего другими документами

Теоретически, если все необходимые начисления (например, последняя стипендия, если она была) сделать отдельными документами до оформления "Увольнения", то в самом документе "Увольнение" может ничего не попасть или попасть меньше. Программа стремится не задваивать уже рассчитанные суммы. Однако:

  1. Это крайне неудобно. Вместо одного документа приходится создавать несколько.
  2. Не гарантирует полного отсутствия расчетов, так как "Увольнение" все равно будет пытаться рассчитать компенсацию отпуска (даже если он не положен) или зарплату за текущий месяц до даты увольнения.
  3. Для сценария со студентами, где нет никаких начислений при отчислении, этот подход избыточен и нелогичен.

Решение проблемы: Отключение расчетов через расширение (доработку)

Учитывая специфику задачи (использование ЗиКГУ для стипендий, где нет трудовых отношений и соответствующих выплат), а также ограничения стандартных механизмов, единственным эффективным и "чистым" решением является модификация функционала документа "Увольнение" через расширение конфигурации. Это позволит нам добиться требуемого поведения без снятия конфигурации с поддержки.

Разработчики 1С создают ЗУП и ЗиКГУ, исходя из требований трудового законодательства и налогового кодекса. Поэтому полное отключение расчетных механизмов в документе "Увольнение" не предусмотрено стандартными средствами. Нам предстоит внести изменения в код, который отвечает за запуск расчетов.

Поиск необходимых процедур

Для того чтобы отключить расчеты, нам нужно найти те процедуры в модуле объекта документа "Увольнение", которые отвечают за инициирование этих расчетов. На основе анализа стандартного кода и обсуждения на форумах, мы можем выделить две ключевые группы процедур:

  1. Процедуры, отвечающие за расчет начислений. В контексте документа "Увольнение" основной такой процедурой является ВыполнитьРасчетНачислений. Она запускает логику определения сумм зарплаты, компенсаций и других выплат.
  2. Процедуры, отвечающие за расчет удержаний. Эти процедуры обрабатывают НДФЛ, алименты, займы и прочие удержания. Часто они могут быть частью общей процедуры расчета или вызываться отдельно.

Процедура ОбновитьДанныеПоСотруднику также играет важную роль, так как она вызывается при изменении ключевых полей документа (например, даты увольнения) и часто инициирует повторный расчет или обновление данных, что в свою очередь может вызывать процедуры расчета начислений и удержаний.

Модификация процедуры ВыполнитьРасчетНачислений

Самый простой и эффективный способ отключить механизм расчета начислений — это добавить оператор Возврат в самом начале процедуры ВыполнитьРасчетНачислений в модуле объекта документа "Увольнение". Это заставит программу немедленно выйти из процедуры, не выполняя основной код расчета.

Разберем по шагам, как это сделать:

  1. Создание расширения. Откройте конфигуратор 1С. В меню "Конфигурация" выберите "Расширения конфигурации". Создайте новое расширение, дайте ему понятное имя (например, "ОтключениеРасчетовУвольнениеСтудентов"). Убедитесь, что расширение активно.

  2. Добавление документа "Увольнение" в расширение. В дереве объектов конфигурации расширения найдите раздел "Документы". Добавьте в расширение документ "Увольнение". Это можно сделать, перетащив его из основной конфигурации или используя контекстное меню "Добавить в расширение".

  3. Открытие модуля объекта документа. Откройте документ "Увольнение" в расширении. Перейдите к модулю объекта этого документа. Мы будем работать именно с этим модулем.

  4. Поиск процедуры ВыполнитьРасчетНачислений. В модуле объекта найдите процедуру с именем ВыполнитьРасчетНачислений. Используйте поиск по тексту модуля (Ctrl+F) для быстрого нахождения.

  5. Внесение изменения. В самом начале найденной процедуры, после строки с объявлением процедуры (например, Процедура ВыполнитьРасчетНачислений()), добавьте новую строку с оператором Возврат.

Вот как будет выглядеть модифицированный фрагмент кода:


// ... другие процедуры и функции модуля

Процедура ВыполнитьРасчетНачислений()
    Возврат; // Добавляем эту строку для полного отключения расчетов начислений
    // Далее идет стандартный код процедуры ВыполнитьРасчетНачислений,
    // который теперь не будет выполняться, потому что мы выходим из процедуры.
    // ...
    // Например, здесь могла быть логика определения оклада, компенсаций и т.д.
    // Если УсловиеРасчетаНачислений Тогда
    //     РассчитатьОклад();
    //     РассчитатьКомпенсациюОтпуска();
    // КонецЕсли;
    // ...
КонецПроцедуры

// ... остальные процедуры и функции модуля

Когда программа будет вызывать процедуру ВыполнитьРасчетНачислений при проведении или изменении документа "Увольнение", она сразу же встретит оператор Возврат и завершит выполнение процедуры, не доходя до основного тела, отвечающего за расчеты. Таким образом, никаких начислений в документе производиться не будет.

Модификация процедуры для удержаний

Аналогичным образом, необходимо поступить и с расчетом удержаний. В документе "Увольнение" могут быть процедуры, отвечающие за расчет НДФЛ, алиментов, займов и прочих удержаний. Часто это может быть отдельная процедура, например, ВыполнитьРасчетУдержаний или ОбновитьДанныеПоУдержаниям, или же часть общей процедуры ВыполнитьРасчетНачислений.

  1. Поиск процедуры для удержаний. В том же модуле объекта документа "Увольнение" найдите процедуру, которая явно отвечает за расчет удержаний. Если такой отдельной процедуры нет, возможно, логика удержаний вызывается из ВыполнитьРасчетНачислений или другой общей расчетной процедуры.

  2. Внесение изменения. Если найдена отдельная процедура, добавьте оператор Возврат в её начале, по аналогии с начислениями.

Пример (если существует отдельная процедура для удержаний):


// ...

Процедура ВыполнитьРасчетУдержаний()
    Возврат; // Отключаем расчет удержаний
    // ... стандартный код расчета удержаний, который теперь не будет выполняться
КонецПроцедуры

// ...

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

Важные замечания и тестирование

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

  1. Тщательное тестирование. После внесения изменений крайне важно провести всестороннее тестирование функционала документа "Увольнение". Создайте тестовых студентов, "отчислите" их, убедитесь, что:

    • никакие расчеты не производятся;
    • документ проводится без ошибок;
    • не формируются лишние движения по регистрам, связанные с расчетами (зарплата, НДФЛ, взносы);
    • не возникают новые ошибки при попытке провести документ.
  2. Возможные последствия для отчетности. Помните, что документ "Увольнение" также формирует сведения для СФР (бывшие ПФР/ФСС) и другие отчеты, связанные с кадровым учетом. Отключение расчетов, как правило, не влияет на кадровые данные, но может повлиять на корректность формирования данных, если какие-либо финансовые показатели (даже нулевые) ожидаются в этих отчетах. Убедитесь, что отсутствие расчетов соответствует вашим требованиям к отчетности в контексте учета студентов.

  3. Обновления конфигурации. При каждом обновлении основной конфигурации (ЗиКГУ) или расширения, всегда перепроверяйте измененные процедуры. В новых релизах могут измениться имена процедур, их параметры или логика вызова. Расширение призвано облегчить поддержку, но ручной контроль при обновлениях все равно необходим.

  4. Видимость раздела "Расчет". Обратите внимание, что видимость раздела "Расчет" в документе "Увольнение" может зависеть от константы "Расчет зарплаты для небольших организаций". Если численность сотрудников (или в нашем случае студентов) превышает 60 человек, эта константа обычно снимается, и окончательный расчет предлагается оформлять отдельным документом "Начисление зарплаты". Влияние этой константы на поведение документа при наших изменениях также стоит проверить.

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

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

← На главную