Как настроить заполнение ответственных лиц на дату документа в 1С:ЗУП 3.1

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

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

В этой статье мы подробно разберем, почему система ведет себя именно так, и рассмотрим способы решения этой задачи — от стандартных настроек до технической доработки системы.

Почему 1С:ЗУП 3.1 использует текущую дату?

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

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

Способ 1. Изменение «Рабочей даты» (без программирования)

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

Разберем этот процесс по шагам:

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

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

Способ 2. Проверка печатных форм

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

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

Способ 3. Перевыбор организации

Существует небольшой «лайфхак» для уже созданных документов. Если вы создали документ, изменили в нем дату на прошлую или будущую, но ответственные лица не обновились, попробуйте сделать следующее:

  1. Очистите поле Организация в шапке документа.
  2. Выберите организацию заново.

В этот момент во многих документах ЗУП 3.1 срабатывает событие ПриИзменении, которое инициирует повторный поиск ответственных лиц. Поскольку дата документа в этот момент уже заполнена, система может подтянуть данные корректно (в зависимости от конкретного релиза конфигурации).

Способ 4. Доработка через расширение конфигурации (для программистов)

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

Рассмотрим логику, которую необходимо реализовать. Основная точка входа для получения этих данных — общий модуль, отвечающий за работу с ответственными лицами (например, ОтветственныеЛицаБЗК или СведенияОбОтветственныхЛицах в зависимости от версии). Вам необходимо перехватить процедуру ЗаполнитьОтветственныхЛиц (названия могут отличаться).

Пример логики, которую нужно внедрить в расширение:


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

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

Резюме

Мы проанализировали проблему заполнения ответственных лиц в ЗУП 3.1 и пришли к следующим выводам:

Важный момент: Помните, что при использовании даты из документа для будущих периодов, вы берете на себя ответственность за то, что кадровые изменения (назначения новых руководителей) действительно вступят в силу к этому моменту и не будут отменены.

← На главную