Почему в 1С:ЗУП 3.1 новые документы Отпуск и Увольнение создаются с признаком Документ рассчитан

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

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

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

Суть проблемы и механизм разделения учета

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

Выясним причину, почему в коде Объект.ДокументРассчитан становится равным Истина еще до того, как пользователь начал интерактивную работу с формой.

Шаг 1. Анализ функциональных опций и настроек расчета

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

Разберем, на что обратить внимание:

  1. Перейдем в раздел Настройки — Расчет зарплаты.
  2. Найдем опцию Выполнять автоматический пересчет документов при редактировании. Если эта опция включена, система инициирует расчет сразу после заполнения ключевых полей (например, сотрудника или периода).
  3. В новых релизах, если данных для расчета достаточно (например, у сотрудника заполнены все плановые начисления), фоновый расчет может завершиться успешно, что приведет к автоматической установке признака "рассчитан".

Шаг 2. Исследование программного кода и отладка

Рассмотрим техническую сторону вопроса. Как было отмечено в обсуждении, в процедуре ОбработкаЗаполнения модуля объекта значение реквизита еще Ложь, а в ПриСозданииНаСервере модуля формы — уже Истина. Это означает, что изменение происходит в промежутке между инициализацией объекта и открытием формы.

Проанализируем цепочку вызовов. Основная логика по управлению состоянием расчетных документов в ЗУП вынесена в общие модули. Нам необходимо обратить внимание на общий модуль ЗарплатаКадрыСоставФорм.

Посмотрим на пример кода, который может инициировать установку флага в процедурах инициализации формы:


// Пример логики в общем модуле ЗарплатаКадрыСоставФорм
Процедура УстановитьСостояниеРасчетногоДокумента(Форма) Экспорт
    Объект = Форма.Объект;
    // Проверка, является ли документ новым
    Если Объект.Ссылка.Пустая() Тогда
        // В определенных релизах логика может ошибочно 
        // определять права пользователя как "полные"
        Если Пользователи.РольДоступна("ПолныеПрава") Тогда
             Объект.ДокументРассчитан = Истина;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

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

  1. Откроем модуль формы документа (например, ФормаДокументаОтпуск).
  2. Установим точку останова в самом начале процедуры ПриСозданииНаСервере.
  3. В момент остановки откроем Стек вызовов (Call Stack).
  4. Проанализируем все процедуры общих модулей, которые вызывались до входа в форму. Особое внимание уделим модулям с именами ЗарплатаКадры....

Шаг 3. Влияние ролей и прав доступа

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

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

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

Шаг 4. Механизм фонового пересчета (Background Calculation)

В последних версиях платформы и конфигурации активно внедряется фоновый пересчет. Система не ждет нажатия кнопки "Рассчитать", а делает это в фоне.

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

Шаг 5. Исправление через расширение конфигурации

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

Рассмотрим пример кода для расширения в модуле формы документа:


&НаСервере
&После("ПриСозданииНаСервере")
Процедура ИТ_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Проверяем, что документ новый
    Если Объект.Ссылка.Пустая() Тогда
        // Сбрасываем флаг, установленный типовым кодом
        Объект.ДокументРассчитан = Ложь;
        
        // Обеспечиваем доступность элементов для кадровика, 
        // если типовой код их заблокировал
        ЭтаФорма.Элементы.ГруппаРассчитан.Доступность = Ложь; 
    КонецЕсли;
КонецПроцедуры

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

Резюме

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

  1. Проверить настройки Расчета зарплаты в интерфейсе.
  2. Использовать отладку и Стек вызовов для поиска конкретной процедуры в общем модуле ЗарплатаКадрыСоставФорм.
  3. В случае подтверждения ошибки релиза — применить исправление через расширение, сбрасывая состояние реквизита при создании нового объекта.

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

← На главную