Как запретить 1С менять время документа при его изменении и повторном проведении?

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

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

Рассмотрим подробнее причины такого поведения платформы и разберем доступные способы сохранения точного времени документа.

Причины платформенного поведения

Автоматическая замена времени при проведении связана с базовыми механизмами платформы 1С:Предприятие. Если в свойствах объекта метаданных разрешено оперативное проведение и документ проводится текущей датой, платформа считает операцию происходящей «прямо сейчас» в реальном времени. В результате время документа автоматически обновляется на текущее системное время. Это спроектировано для правильного построения последовательностей и контроля остатков на актуальный момент времени.

Способ 1. Отключение оперативного проведения в свойствах метаданных

Проанализируем самый простой и эффективный способ, подходящий для документов, которые регистрируют факты «задним числом» или по внешним событиям (например, выписки, оплатные документы по СМС).

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

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

Способ 2. Программное переключение режима проведения

Если полностью запрещать оперативное проведение в метаданных нежелательно, можно перехватывать процесс записи объекта в модуле документа или в подписке на событие.

Рассмотрев событие ПередЗаписью, мы можем принудительно перевести режим проведения из оперативного в неоперативный:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
        РежимПроведения = РежимПроведенияДокумента.Неоперативный;
    КонецЕсли;
КонецПроцедуры

Такой подход сохраняет исходное время документа без изменения общих настроек объекта метаданных.

Способ 3. Восстановление исходного времени из базы данных

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


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

Способ 4. Настройка свойства «Автовремя»

Посмотрим на настройки позиционирования документа во времени. В свойствах объекта метаданных и в настройках формы доступно свойство Автовремя (перечисление РежимАвтоУстановкиВремени). Оно может принимать значения: Использовать, Не использовать, Первым, Последним, ТекущееИлиПоследним.

Если для документа установить значение Не использовать, платформа перестает автоматически смещать документ на границы суток или текущий момент при неоперативной записи.

Важные последствия и возможные риски

При отключении оперативного проведения или смене логики работы со временем необходимо учитывать следующие технические особенности:

  1. Контроль остатков: При неоперативном проведении платформа перестает автоматически контролировать остатки на текущий момент времени. Если в документе требуется защита от отрицательных остатков, её необходимо прописывать явно в процедуре ОбработкаПроведения с проверкой остатков на дату документа.
  2. Восстановление последовательностей: Проведение документов с зафиксированным или прошедшим временем внутри дня может нарушить хронологию партий или расчетов. При наличии сложных механизмов себестоимости и зачета авансов может потребоваться периодический запуск обработки «Восстановление последовательности».
  3. Проведение будущей датой: При неоперативном проведении платформа не блокирует проведение документов с датой из будущего. Если такое поведение недопустимо, следует добавить явную программную проверку даты перед записью.
← На главную