При создании и первой записи документов в типовых решениях «1С:Предприятие 8» (например, в «1С:Бухгалтерии 3.0») пользователи и разработчики часто замечают особенность: если создать документ на произвольную дату с нулевым временем 00:00:00, то после записи система автоматически подставляет определенное время. Например, для документа «Реализация (акты, накладные, УПД)» выставляется 14:00:00, а для документа «Перемещение товаров» — 11:00:00. Разберем подробно, почему это происходит, какая логика заложена разработчиками платформы и конфигурации, а также как управлять этим поведением.
Проанализируем причину такого поведения. Дело заключается не в системных алгоритмах самой платформы, а в прикладной логике типовых конфигураций (на базе Библиотеки стандартных подсистем — БСП). В бухгалтерском и складском учете критически важно соблюдать правильную хронологическую последовательность событий в течение одного дня.
Если все документы одного дня будут записаны на начало дня (00:00:00) или на произвольное системное время, возникают типовые коллизии учета:
Чтобы избежать подобных коллизий, в типовых конфигурациях реализована жесткая суточная сетка времени по видам документов:
Посмотрим на программный код, который отвечает за установку времени. В модуле менеджера каждого типового документа присутствует специальная экспортная функция ВремяДокументаПоУмолчанию(). Именно она возвращает структуру с часами и минутами, которые подставляются в реквизит Дата при записи нового объекта.
Рассмотрим пример функции из модуля менеджера документа «Реализация товаров и услуг»:
Функция ВремяДокументаПоУмолчанию() Экспорт
Возврат Новый Структура("Часы, Минуты", 14, 0);
КонецФункции
Для документа «Перемещение товаров» в его модуле менеджера заданы другие параметры:
Функция ВремяДокументаПоУмолчанию() Экспорт
Возврат Новый Структура("Часы, Минуты", 11, 0);
КонецФункции
При записи объекта подписка на события проверяет, является ли документ новым и включена ли соответствующая опция в системе. Если время не было явно скорректировано пользователем с точностью до секунд, вызывается менеджер соответствующего документа и дата дополняется часами и минутами из этой функции.
Если для бизнес-процессов компании требуется сохранять реальное системное время создания документов либо вручную контролировать таймстампы, автоматическое распределение можно отключить в пользовательском режиме.
Разберем порядок действий в интерфейсе «1С:Бухгалтерии 3.0»:
Проанализируем, как поведет себя программа при отключенном флаге:
10:24:35).Если стандартная сетка распределения часов не подходит (например, отгрузки регулярно происходят раньше 14:00, а поступления проводятся вечером), разработчик может изменить логику следующими способами:
ВремяДокументаПоУмолчанию() нужного документа с помощью аннотации &Вместо:
&Вместо("ВремяДокументаПоУмолчанию")
Функция Расш_ВремяДокументаПоУмолчанию() Экспорт
// Устанавливаем собственное время реализации на 09:30 утра
Возврат Новый Структура("Часы, Минуты", 9, 30);
КонецФункции
Дата на нужное количество часов и минут перед повторным проведением по регистрам.Обратим внимание на работу интеграционных механизмов (REST API, Web-сервисы, обмен с WMS-системами, сайтами и кассами). При программном создании документов через код внешняя система может передавать точное время совершения хозяйственной операции.
Если запись объекта выполняется стандартным методом ДокументОбъект.Записать(), типовые подписки БСП могут перезаписать переданное точное время дефолтными значениями (например, 14:00:00). Чтобы этого избежать, при разработке обменов необходимо либо передавать признак загрузки данных (ДокументОбъект.ОбменДанными.Загрузка = Истина), либо заполнять соответствующие дополнительные свойства объекта, информирующие подсистему БСП о том, что время корректировать не требуется.