Как провести документ будущей датой в 1С: технические и методические решения

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

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

Почему 1С сопротивляется проведению документов «завтрашним числом»?

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

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

Решение 1: Программное переключение режима проведения в форме

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

Для автоматизации процесса мы можем использовать обработчик изменения даты. Разберем пример кода, который переключает режим проведения:


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

Этот метод необходимо вызывать в процедурах ПриОткрытии и ДатаПриИзменении. Таким образом, как только пользователь выберет завтрашнюю дату, кнопка «Провести» перестанет вызывать ошибку, так как документ запишется в неоперативном режиме.

Решение 2: Универсальный подход через модуль объекта

Если вы хотите, чтобы логика работала не только при ручном вводе через форму, но и при программном создании документов (например, при импорте из внешних систем), лучше перенести проверку в Модуль объекта. Проанализируем, как это сделать в обработчике ПередЗаписью:


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

Важное замечание: При неоперативном проведении типовые конфигурации часто отключают контроль остатков. Это означает, что вы можете продать товар, которого физически нет на складе, и остатки уйдут в «минус». Это риск, который должен осознавать бизнес-аналитик.

Решение 3: Методологический подход (Ордерная схема и статусы)

Иногда проблему лучше решать не программированием, а изменением бизнес-процесса. Рассмотрим альтернативы, заложенные в современные конфигурации (такие как УТ 11, ERP или КА):

  1. Ордерная схема склада: Мы можем выписать финансовый документ Реализация товаров и услуг завтрашним числом (неоперативно), но фактическое списание со склада произвести сегодня или завтра с помощью документа Расходный ордер на товары. Это разделяет момент перехода права собственности и момент физического отпуска товара.
  2. Использование статусов документов: В документе реализации можно установить статус «К отгрузке». Товар будет зарезервирован под клиента, но окончательное списание партий произойдет только после фактической отгрузки.
  3. Резервирование через заказы: Вместо создания накладной будущей датой, создавайте Заказ покупателя с резервированием товара. Накладную же печатайте на следующее утро текущим числом.

Решение 4: Печать без проведения

Если единственная цель будущей даты — иметь правильное число в печатной форме ТОРГ-12 или УПД, то можно воспользоваться простой хитростью. В настройках прав пользователя или в коде формы можно разрешить печать непроведенных документов. Оператор просто записывает документ завтрашней датой, печатает его, а фактически проводит его на следующее утро, когда дата становится текущей.

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

Последствия и риски «будущего» проведения

Давайте выясним, с какими трудностями вы можете столкнуться при использовании этих решений:

1. Контроль остатков: Как уже упоминалось, неоперативное проведение (а будущая дата — это всегда неоператив) часто игнорирует нехватку товара. Если несколько менеджеров наберут на завтра больше товара, чем есть на складе, к утру вы обнаружите отрицательные остатки.

2. Последовательность документов: Документ, проведенный на неделю вперед, станет «точкой преткновения» для восстановления последовательности. Любой документ, введенный сегодня, будет считаться введенным «задним числом» относительно того, что в будущем. Это может существенно замедлить пересчет партий.

3. Граница итогов: Платформа 1С хранит итоги на конец месяца. Если вы случайно проведете документ 2030 годом, система создаст записи итогов на десятилетия вперед, что может привести к значительному увеличению размера базы данных и замедлению всех запросов к остаткам.

Рекомендации

Подводя итог, мы рекомендуем следующий алгоритм выбора решения:

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

← На главную