Почему не обновляется время документа при оперативном проведении в 1С?

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

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

Как работает механизм оперативной отметки времени в 1С

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

Для корректной работы этого механизма на уровне метаданных и свойств формы должны быть заданы следующие настройки:

  1. Для документа разрешено оперативное проведение (свойство Оперативное проведение установлено в значение "Разрешить").
  2. В свойствах формы документа параметр Автовремя установлен в значение "Текущим или последним".
  3. Свойство формы ИспользоватьРежимПроведения имеет значение "Автоматически".

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

Главная причина: программное вмешательство в события записи и проведения

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

1. Сброс режима проведения в обработчиках событий объекта

Если в модуле объекта документа в процедуре ПередЗаписью или в процедуре ОбработкаПроведения присутствует код, который принудительно меняет или сбрасывает режим проведения, платформа отменяет назначение оперативной отметки времени. Проанализируем пример: если в коде вызывается функция или процедура, программно устанавливающая режим записи, то автоматическое изменение даты блокируется.

В частности, в нетиповых или доработанных документах разработчики часто добавляют процедуры вроде УстановитьРежимПроведения() в процедуру ПередЗаписью модуля объекта. Подобные вызовы могут непреднамеренно изменять контекст записи, из-за чего платформа перестает считать проведение оперативным.

2. Сброс параметра РежимПроведения в ОбработкеПроведения

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

Другие возможные причины сбоя времени

Если в программном коде документа нет явных манипуляций с режимом проведения, стоит проверить еще несколько важных факторов:

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

Как решить проблему и исправить логику работы

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

Шаг 1. Анализ кода в модуле объекта
Откройте конфигуратор, перейдите в модуль объекта вашего документа и найдите предопределенную процедуру ПередЗаписью. Тщательно изучите все вызовы процедур и функций. Исключите любые принудительные установки режимов проведения, которые могут мешать платформе выполнять штатные действия.

Шаг 2. Принудительное обновление времени (альтернативный вариант)
Если обойти бизнес-логику конфигурации не удается, и вам все же требуется гарантированно обновлять время документа до текущего при его оперативном проведении, вы можете сделать это принудительно в коде модуля объекта. Для этого используем следующий алгоритм в процедуре ПередЗаписью:


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

КонецПроцедуры

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

← На главную