Как в 1С:ERP установить рабочую дату для автоматического заполнения новых документов?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет IT и автоматизация бизнеса
← На главную

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

Анализируем причину: почему стандартная «Рабочая дата» не меняет дату документа

Проанализируем ситуацию: в меню "Сервис" — "Параметры" или в персональных настройках пользователя мы можем найти поле Рабочая дата. Однако, установив там, например, "01.04.2024", мы с удивлением обнаружим, что при создании "Заказа клиента" или "Приобретения товаров" система все равно подставляет текущий момент времени. Выясним причину такого поведения.

Методология 1С:ERP базируется на принципе оперативного учета "день в день". Это означает, что любое хозяйственное событие должно регистрироваться в системе в момент его совершения. На техническом уровне это реализовано через вызов функций ТекущаяДата() или ТекущаяДатаСеанса() непосредственно в модулях объектов при инициализации нового документа. Эти функции обращаются к системному времени сервера или сеанса, полностью игнорируя значение параметра РабочаяДата, установленного в интерфейсе. Таким образом, разработчики 1С исключили возможность случайного ввода данных "задним числом" через глобальную настройку.

Способ 1. Групповое изменение реквизитов (стандартный функционал)

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

  1. Создаем все необходимые документы текущей датой. Не стоит беспокоиться о правильности даты на этапе ввода, если документов много.
  2. Переходим в раздел НСИ и администрирование — Обслуживание — Корректировка данных.
  3. Открываем обработку Групповое изменение реквизитов.
  4. Выбираем тип документа, который мы только что создавали (например, "Заявка на расходование денежных средств").
  5. Добавляем фильтр по автору (текущий пользователь) и дате создания (сегодня), чтобы не затронуть чужие данные.
  6. В списке реквизитов находим поле Дата и устанавливаем нужное нам значение.
  7. Нажимаем кнопку "Изменить реквизиты".

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

Способ 2. Использование расширения для управления датой сеанса

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

Рассмотрим вариант реализации через расширение. Мы можем создать специальный регистр сведений или использовать дополнительные свойства пользователя, где будет храниться "Желаемая рабочая дата". Затем в модуле сеанса или при запуске приложения выполним следующий код:


// Пример установки даты сеанса при запуске
Процедура ПриНачалеРаботыСистемы()
    НужнаяДата = ПолучитьДатуИзНастроекПользователя(); // Функция получения даты из регистра
    Если ЗначениеЗаполнено(НужнаяДата) Тогда
        УстановитьДатуСеанса(НужнаяДата);
    КонецЕсли;
КонецПроцедуры

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

Способ 3. Перехват события «ОбработкаЗаполнения»

Если нам нужно, чтобы только определенные виды документов создавались с фиксированной датой, проанализируем возможность использования расширения для конкретных объектов. Мы можем перехватить процедуру ОбработкаЗаполнения в модуле менеджера или модуля объекта документа.

Рассмотрим пример кода в расширении для документа "Реализация товаров и услуг":


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

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

Нюансы с часовыми поясами

Иногда проблема с "неправильной" датой в новых документах кроется не в отсутствии настройки, а в некорректном часовом поясе. Проанализируем ситуацию: если сервер находится в Москве (UTC+3), а пользователь работает во Владивостоке (UTC+10), то поздно вечером у пользователя уже наступил следующий день, а сервер все еще выдает "сегодняшнюю" московскую дату.

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

Резюме

Мы выяснили, что прямого аналога старой "Рабочей даты", который бы автоматически подставлялся во все документы 1С:ERP, в типовом функционале не предусмотрено из-за жестких требований к оперативности учета. Однако, используя Групповое изменение реквизитов для разовых задач или механизм расширений для постоянной работы "задним числом", мы можем добиться желаемого результата без изменения основной конфигурации.

← На главную