Как автоматически устанавливать время для документов в 1С:ERP?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

Зачастую перед специалистами по внедрению 1С:ERP встает задача изменения стандартного поведения системы при создании документов. Стандартный механизм платформы 1С автоматически присваивает новому документу текущую дату и время (момент создания). Однако бизнес-процессы на производстве или в торговле могут требовать установки фиксированного времени (например, 23:59:59 для документов «в конце дня» или специфического времени для групповых операций).

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

Оценка рисков: почему важно «задуматься перед действием»

Прежде чем приступать к написанию кода, проанализируем, почему опытные разработчики называют подобные доработки «надругательством». В ERP-системах, таких как 1С:ERP, время документа — это не просто метка. Это критический параметр для:

  1. Последовательности проведения: Система рассчитывает остатки товаров, себестоимость и закрытие месяца на основе хронологии. Искусственное изменение времени может «перепутать» документы, что приведет к некорректным результатам расчета себестоимости.
  2. Партионного учета: Некорректное время может привести к тому, что списание запасов будет происходить из партий, которые еще не поступили на момент времени, указанный в документе.
  3. Контроля доступа: Многие механизмы дат запрета редактирования или контроля лимитов завязаны на время создания объекта.

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

Реализация через расширения и подписки на события

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

Рассмотрим по шагам, как реализовать автоматическую установку времени через подписку на событие.

  1. Создайте новое расширение в режиме Конфигуратора.
  2. Добавьте в расширение документ, для которого необходимо задать время.
  3. Создайте ПодпискуНаСобытие. В качестве события выберите ОбработкаЗаполнения или ПриУстановкеНовогоНомера.
  4. В обработчике события программно установите время.

Пример программного кода для подписки на событие:


Процедура УстановкаВремениПриЗаполнении(Источник, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт
    // Получаем текущую дату
    ТекущаяДата = Источник.Дата;
    // Устанавливаем нужное время, например, 23:59:59
    Источник.Дата = КонецДня(ТекущаяДата);
КонецПроцедуры

Альтернативный подход: работа с формами

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

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

Заключение: что выбрать?

Мы проанализировали ситуацию и рекомендуем придерживаться следующего алгоритма:

Работа с типовыми механизмами требует ответственности. Внося изменения, всегда думайте о том, как система будет работать спустя полгода, когда объем накопленных данных вырастет.

← На главную