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