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