При разработке или автоматизации в конфигурации «1С:Бухгалтерия предприятия 3.0» (БП 3.0) программисты часто сталкиваются с загадочным поведением системы: вы программно устанавливаете документу одно время (например, конец дня 23:59:59), но после записи или проведения программа настойчиво меняет его на 17:00:00 или другое «странное» значение. Разберем детально, почему это происходит, как устроена внутренняя логика системы и какими способами можно добиться желаемого результата.
В типовом решении БП 3.0 реализована специальная механика автоматического распределения документов внутри дня. Это сделано для того, чтобы минимизировать ошибки бухгалтерского учета, связанные с «перехлестом» авансов. Проанализируем ситуацию: если оплата от покупателя и отгрузка товара произошли в один день, бухгалтеру важно, чтобы оплата не «повисла» на счете авансов (например, 62.02), а сразу закрыла дебиторскую задолженность на счете 62.01.
Чтобы упростить жизнь пользователю, разработчики 1С создали подписку на событие УстановитьВремяНовогоДокумента. Рассмотрим, как распределяются документы в этой «сетке» по умолчанию:
Приходный кассовый ордер или Поступление на расчетный счет).Расходный кассовый ордер, Списание с расчетного счета).Именно поэтому, когда мы создаем ПКО, система автоматически «пододвигает» его к 17:00, считая, что к этому моменту основная часть реализаций уже зафиксирована в базе. Для переопределения стандартного интервала подойдёт расширение для автоматической установки времени документов в зависимости от их вида.
Если такая логика мешает корректному учету или специфике вашего бизнеса, первым делом проверим настройки программы. Выясним, где спрятан этот «переключатель»:
Если снять этот флаг, система перестанет принудительно менять время на 17:00 для неоперативно проводимых документов. В этом случае документу будет присваиваться либо текущее системное время (если это новый документ за сегодня), либо то время, которое вы указали в коде или вручную. Для гибкого управления этим поведением можно использовать решение для настройки времени записи документов в 1С:Бухгалтерии 3.0.
Если мы создаем документ программно (например, при загрузке из внешней системы или чеков ККМ) и не хотим менять глобальные настройки базы, проанализируем возможность использования режима загрузки. Когда мы устанавливаем признак Загрузка = Истина, большинство подписок на события и проверок (включая установку времени) игнорируются.
Посмотрим на пример кода:
НовыйДок = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент();
// Заполнение реквизитов документа
НовыйДок.Дата = КонецДня(ДатаЗагрузки);
НовыйДок.ОбменДанными.Загрузка = Истина;
НовыйДок.Записать(РежимЗаписиДокумента.Запись);
Важный нюанс: использование режима загрузки отключает не только установку времени, но и многие другие типовые проверки. Если вам нужно, чтобы документ был корректно проведен со всеми движениями по регистрам, этот способ может потребовать последующего перепроведения.
В некоторых версиях конфигураций БП 3.0 логика установки времени проверяет наличие определенных флагов в структуре ДополнительныеСвойства объекта. Проанализируем работу общего модуля ОбщегоНазначенияБП. Там часто встречается проверка, является ли объект «новым» для логики распределения времени. Мы можем попробовать «обмануть» систему, добавив свойство:
ДокОбъект.ДополнительныеСвойства.Вставить("ЭтоНовыйОбъект", Ложь);
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
Однако стоит учитывать, что это сработает только в том случае, если программный код конфигурации не переопределяет это свойство внутри обработчика ПередЗаписью.
Рассмотрим специфическую ситуацию, упомянутую в обсуждении. Если Отчет о розничных продажах (ОРП) создается в 23:59:59, а ПКО на его основании создается в 17:00:00, то формально оплата в базе появляется раньше, чем сам факт продажи.
Чем это грозит? Для бухгалтерского учета в 1С:Бухгалтерии последовательность внутри дня критически важна. Если ПКО стоит раньше ОРП, система зафиксирует «Аванс от покупателя» на счете 62.02 (или 90.хх в зависимости от настроек). В момент проведения ОРП этот аванс будет зачтен. В итоге оборотно-сальдовая ведомость «раздуется» на лишние суммы зачета авансов, что может привести к путанице в налоговом учете по НДС (потребность формировать счета-фактуры на аванс, которых по факту быть не должно).
Проанализировав ситуацию, можно дать следующие советы при программном создании документов:
Таким образом, автоматическое изменение времени — это не ошибка, а штатная фича 1С:Бухгалтерии, направленная на стандартизацию учета. Понимание работы подписки УстановитьВремяНовогоДокумента позволяет гибко управлять этим процессом и избегать лишних проводок по зачету авансов.