Как исправить ошибку "Все товары получены..." при создании реализации будущей датой в 1С 7.7?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

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

«Все заказанные товары либо получены, либо их нет в наличии!»

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

Почему возникает эта ошибка: технический анализ оси времени в 1С 7.7

Для того чтобы понять природу проблемы, проанализируем, как платформа 1С:Предприятие 7.7 работает со временем и остатками. В отличие от версии 8.x, где оперативные остатки можно получать на текущий момент без жесткой привязки к хронологии проведения, в версии 7.7 критически важную роль играет Точка Актуальности (ТА) и положение документа на оси времени.

Когда мы запускаем стандартный механизм Ввести на основании для создания реализации из будущей заявки, происходят следующие события:

  1. По умолчанию новый документ Реализация инициализируется текущей рабочей датой компьютера (например, сегодняшним числом).
  2. В процессе инициализации срабатывает внутренний алгоритм заполнения табличной части по документу-основанию.
  3. Программа обращается к регистрам накопления (в данном случае к регистру Заявки или РезервыТоваров), чтобы определить, какое количество товара по данной заявке осталось отгрузить.
  4. Запрос к итогам регистров выполняется на момент времени создаваемого документа (то есть на «сегодня»).
  5. Поскольку документ-основание (Заявка покупателя) записан и проведен будущей датой (например, завтрашним числом), на «сегодняшней» оси времени эта заявка еще «не наступила». Следовательно, с точки зрения системы, остаток по этой заявке на текущий момент времени равен нулю.
  6. Алгоритм видит нулевой остаток к отгрузке, считает, что по этой заявке ничего поставлять не требуется, и выдает штатное предупреждение об отсутствии товаров.

Если же мы используем обходной путь — копируем существующую реализацию, вручную меняем её дату на будущую, а затем нажимаем кнопку «Заполнить по счету», то документ на момент выполнения запроса к регистрам уже находится в будущем (в одной временной точке с заявкой или позже нее). В этом случае система успешно видит остатки по регистру спроса, и табличная часть заполняется корректно. Однако делать это вручную при большом потоке документов крайне неудобно.

---

Решение 1: Программное изменение логики ввода на основании (рекомендуется)

Если у нас есть доступ к конфигуратору и база находится на поддержке с возможностью изменений, мы можем автоматизировать этот процесс. Идея заключается в том, чтобы при создании документа Реализация на основании проверять дату документа-источника. Если дата основания больше текущей рабочей даты системы, мы должны принудительно перенести дату создаваемой реализации на дату документа-основания до того, как система начнет анализировать остатки по регистрам.

Разберем по шагам, как внести эти изменения в конфигураторе:

  1. Откроем конфигурацию и найдем документ Реализация.
  2. Откроем модуль формы документа (вкладка «Модуль» в окне редактирования формы).
  3. Найдем предопределенную процедуру ВводНаОсновании(ДокОснование).
  4. В самом начале этой процедуры добавим проверку дат.

Проанализируем пример программного кода, который решает эту задачу:


Процедура ВводНаОсновании(ДокОснование)
    // Проверяем, что документ-основание действительно передан и выбран
    Если ДокОснование.Выбран() = 1 Тогда
        
        // Сравниваем дату документа-основания с текущей рабочей датой системы
        Если ДокОснование.ДатаДок > РабочаяДата() Тогда
            // Если основание выписано будущей датой, принудительно
            // устанавливаем дату создаваемой реализации равной дате основания
            ДатаДок = ДокОснование.ДатаДок;
        КонецЕсли;
        
    КонецЕсли;
    
    // Далее продолжается стандартный код заполнения документа на основании...
КонецПроцедуры

Как это работает: При запуске механизма «Ввести на основании» программа сначала меняет реквизит ДатаДок нового документа на будущую дату. В результате этого, когда управление передается процедурам расчета остатков и резервов по заявке, запрос к регистрам выполняется уже в будущей точке оси времени, где заявка существует и активна. Табличная часть документа заполняется автоматически и без ошибок.

---

Решение 2: Временное изменение рабочей даты (без изменения конфигурации)

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

Для корректного ввода документа на основании пользователю необходимо временно изменить рабочую дату в своем сеансе 1С. Выполним следующие действия:

  1. Перейдем в главном меню программы по пути: Сервис -> Параметры.
  2. На вкладке «Общие» найдем поле «Рабочая дата».
  3. Установим значение рабочей даты, равное будущей дате выписываемой заявки. Нажмем кнопку «ОК».
  4. Создадим документ Реализация методом «Ввести на основании» из нужной заявки. Программа создаст документ этой будущей датой, и табличная часть заполнится без ошибок.
  5. После проведения документа вернемся в меню Сервис -> Параметры и восстановим текущую реальную дату в качестве рабочей.

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

---

Критически важные предупреждения при проведении документов будущей датой

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

1. Константа разрешения будущих дат
По умолчанию в ТиС может быть запрещено проведение документов будущей датой. Если при попытке провести созданную реализацию программа выдает ошибку, нам необходимо проверить соответствующую настройку. Перейдем в меню Операции -> Константы и найдем параметр Разрешить проводить документы будущей датой. Для корректной работы он должен быть установлен в значение «1».

2. Смещение Точки Актуальности (ТА) и падение производительности
Это наиболее опасное последствие проведения документов в будущем. В 1С 7.7 Точка Актуальности всегда устанавливается на самый поздний проведенный документ. Если мы проводим Реализацию датой «завтра» или «через неделю», ТА базы данных автоматически переносится на эту будущую дату.

В результате этого:

---

Решение 3: Методологическая альтернатива с использованием внешней печатной формы

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

Чтобы избежать смещения ТА и падения производительности базы данных, мы рекомендуем использовать альтернативный подход с применением внешней печатной формы (ВПФ):

  1. Документы Заявка и Реализация создаются и проводятся в системе текущей реальной датой. Это позволяет сохранить правильный хронологический порядок, не ломает партионный учет и не переносит ТА вперед.
  2. Для документа Реализация разрабатывается или подключается внешняя печатная форма (например, ТОРГ-12 или УПД).
  3. При выводе документа на печать внешняя обработка запрашивает у пользователя желаемую дату (например, через небольшое диалоговое окно) либо автоматически подставляет дату из связанного договора/счета.
  4. На принтер отправляется документ с необходимой будущей датой, удовлетворяющей бюджетников, в то время как в самой базе 1С сохраняется корректный оперативный учет текущим днем.

Именно такой подход является наиболее профессиональным и безопасным с точки зрения администрирования баз данных на платформе 1С 7.7.

← На главную