При работе с бюджетными организациями пользователи 1С часто сталкиваются со специфическими требованиями. Одно из самых распространенных — выписка первичных документов (счетов, накладных, актов) будущей датой. В конфигурации «1С:Предприятие 7.7 Торговля и Склад 9.2» (ТиС) при попытке оформить документ Реализация на основании выписанной будущим числом Заявки покупателя (которую менеджеры часто называют счетом) система выдает ошибку:
«Все заказанные товары либо получены, либо их нет в наличии!»
При этом новый документ не создается и не заполняется, хотя фактически товар на складе присутствует, а сама заявка проведена и активна. В этой статье мы подробно разберем технические причины такого поведения платформы 1С 7.7 и рассмотрим несколько эффективных способов решения этой проблемы: от быстрого ручного обхода до программной автоматизации в конфигураторе и правильных методологических альтернатив.
Для того чтобы понять природу проблемы, проанализируем, как платформа 1С:Предприятие 7.7 работает со временем и остатками. В отличие от версии 8.x, где оперативные остатки можно получать на текущий момент без жесткой привязки к хронологии проведения, в версии 7.7 критически важную роль играет Точка Актуальности (ТА) и положение документа на оси времени.
Когда мы запускаем стандартный механизм Ввести на основании для создания реализации из будущей заявки, происходят следующие события:
Реализация инициализируется текущей рабочей датой компьютера (например, сегодняшним числом).Заявки или РезервыТоваров), чтобы определить, какое количество товара по данной заявке осталось отгрузить.Заявка покупателя) записан и проведен будущей датой (например, завтрашним числом), на «сегодняшней» оси времени эта заявка еще «не наступила». Следовательно, с точки зрения системы, остаток по этой заявке на текущий момент времени равен нулю.Если же мы используем обходной путь — копируем существующую реализацию, вручную меняем её дату на будущую, а затем нажимаем кнопку «Заполнить по счету», то документ на момент выполнения запроса к регистрам уже находится в будущем (в одной временной точке с заявкой или позже нее). В этом случае система успешно видит остатки по регистру спроса, и табличная часть заполняется корректно. Однако делать это вручную при большом потоке документов крайне неудобно.
---
Если у нас есть доступ к конфигуратору и база находится на поддержке с возможностью изменений, мы можем автоматизировать этот процесс. Идея заключается в том, чтобы при создании документа Реализация на основании проверять дату документа-источника. Если дата основания больше текущей рабочей даты системы, мы должны принудительно перенести дату создаваемой реализации на дату документа-основания до того, как система начнет анализировать остатки по регистрам.
Разберем по шагам, как внести эти изменения в конфигураторе:
Реализация.ВводНаОсновании(ДокОснование).Проанализируем пример программного кода, который решает эту задачу:
Процедура ВводНаОсновании(ДокОснование)
// Проверяем, что документ-основание действительно передан и выбран
Если ДокОснование.Выбран() = 1 Тогда
// Сравниваем дату документа-основания с текущей рабочей датой системы
Если ДокОснование.ДатаДок > РабочаяДата() Тогда
// Если основание выписано будущей датой, принудительно
// устанавливаем дату создаваемой реализации равной дате основания
ДатаДок = ДокОснование.ДатаДок;
КонецЕсли;
КонецЕсли;
// Далее продолжается стандартный код заполнения документа на основании...
КонецПроцедуры
Как это работает: При запуске механизма «Ввести на основании» программа сначала меняет реквизит ДатаДок нового документа на будущую дату. В результате этого, когда управление передается процедурам расчета остатков и резервов по заявке, запрос к регистрам выполняется уже в будущей точке оси времени, где заявка существует и активна. Табличная часть документа заполняется автоматически и без ошибок.
---
Если у нас нет возможности вносить изменения в программный код конфигурации (например, база находится на жестком аудите или обслуживается сторонней организацией), мы можем воспользоваться административным обходным путем.
Для корректного ввода документа на основании пользователю необходимо временно изменить рабочую дату в своем сеансе 1С. Выполним следующие действия:
Реализация методом «Ввести на основании» из нужной заявки. Программа создаст документ этой будущей датой, и табличная часть заполнится без ошибок.Этот способ надежен, но требует от пользователей внимательности и регулярных ручных действий, поэтому подходит только при единичных случаях выписки документов будущей датой.
---
Проектируя бизнес-процесс работы с будущими датами в 1С 7.7, необходимо учитывать архитектурные ограничения платформы. Проведение документов в будущем несет в себе серьезные технические риски для стабильности и производительности всей информационной базы.
1. Константа разрешения будущих дат
По умолчанию в ТиС может быть запрещено проведение документов будущей датой. Если при попытке провести созданную реализацию программа выдает ошибку, нам необходимо проверить соответствующую настройку. Перейдем в меню Операции -> Константы и найдем параметр Разрешить проводить документы будущей датой. Для корректной работы он должен быть установлен в значение «1».
2. Смещение Точки Актуальности (ТА) и падение производительности
Это наиболее опасное последствие проведения документов в будущем. В 1С 7.7 Точка Актуальности всегда устанавливается на самый поздний проведенный документ. Если мы проводим Реализацию датой «завтра» или «через неделю», ТА базы данных автоматически переносится на эту будущую дату.
В результате этого:
---
Проанализируем требования бюджетных организаций подробнее. Практика показывает, что государственным учреждениям для оплаты и отчетности важна лишь бумажная (или электронная печатная) форма накладной/акта с конкретной будущей датой. Им абсолютно не важно, какими датами эти операции отражены в нашей внутренней базе данных.
Чтобы избежать смещения ТА и падения производительности базы данных, мы рекомендуем использовать альтернативный подход с применением внешней печатной формы (ВПФ):
Заявка и Реализация создаются и проводятся в системе текущей реальной датой. Это позволяет сохранить правильный хронологический порядок, не ломает партионный учет и не переносит ТА вперед.Реализация разрабатывается или подключается внешняя печатная форма (например, ТОРГ-12 или УПД).Именно такой подход является наиболее профессиональным и безопасным с точки зрения администрирования баз данных на платформе 1С 7.7.