Как в 1С:Управление торговлей 10.3 провести документ будущей датой без изменения системного времени

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

В практической деятельности бухгалтеров и менеджеров нередко возникает ситуация, когда необходимо подготовить пакет документов (например, УПД и счет-фактуру) заранее. В конфигурации 1С:Управление торговлей 10.3 (УТ 10.3), работающей на платформе 8.2 или 8.3 в режиме обычных форм, пользователи часто сталкиваются с невозможностью провести документ, если его дата превышает текущее системное время компьютера или сервера. Система выдает ошибку о невозможности оперативного проведения будущим числом. Разберем подробно, почему так происходит и какими способами можно решить эту задачу, не прибегая к опасным манипуляциям с системными часами сервера.

Почему 1С блокирует проведение будущим числом?

Для начала проанализируем внутреннюю логику работы платформы 1С. В свойствах большинства документов в конфигурации УТ 10.3 установлено свойство ОперативноеПроведение в значение "Разрешить". Это критически важный механизм для торгового учета. Оперативное проведение предназначено для отражения хозяйственных операций в реальном времени. Оно позволяет системе проверять остатки товаров на складах именно "сейчас", гарантируя, что вы не продадите товар, которого физически нет на полке.

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

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

Способ 1. Программное проведение через дополнительную кнопку

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

Рассмотрим пример кода, который можно разместить в модуле формы документа РеализацияТоваровУслуг. Мы создадим процедуру, которая будет вызываться при нажатии на новую кнопку:


Процедура КоманднаяПанельПровестиБудущимДатой(Кнопка)
    // Перед проведением объект необходимо записать
    Если ЭтотОбъект.Модифицированность() Тогда
        ЭтотОбъект.Записать();
    КонецЕсли;

    Попытка
        // Ключевой момент: явно указываем режим проведения
        ЭтотОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
        Сообщить("Документ успешно проведен будущей датой в неоперативном режиме.");
    Исключение
        Сообщить("Ошибка при проведении: " + ОписаниеОшибки(), СтатусСообщения.Важное);
    КонецПопытки;
КонецПроцедуры

В данном коде метод Записать принимает два параметра. Второй параметр РежимПроведенияДокумента.Неоперативный прямо указывает платформе, что проверку "оперативности" и актуальности времени выполнять не нужно. Это позволяет документу "лечь" в базу любой датой.

Способ 2. Использование штатной групповой обработки

Если вы не хотите вносить изменения в конфигурацию (менять код формы), можно воспользоваться встроенным инструментом, который есть в любой типовой УТ 10.3. Выясним, как это сделать по шагам:

  1. Перейдите в меню "Сервис" — "Групповая обработка справочников и документов".
  2. В поле "Тип объекта" выберите "Документы".
  3. Нажмите кнопку "Добавить" и выберите Реализация товаров и услуг.
  4. Настройте отбор по конкретному документу (например, по номеру или ссылке), чтобы не перепроводить лишнего.
  5. Нажмите кнопку "Выбрать", система сформирует список.
  6. В нижней части формы в поле "Действие" выберите "Установить статус: Проведен" и нажмите "Выполнить".

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

Способ 3. Изменение настроек кнопок в Конфигураторе

Проанализируем ситуацию, если требуется изменить поведение стандартных кнопок. В Конфигураторе у каждой кнопки на форме (например, кнопки "ОК") есть свойство РежимЗаписи.

По умолчанию там может стоять значение "Оперативный" или "Выбирать". Если принудительно установить "Неоперативный", то документ будет всегда проводиться без проверки на текущее время. Однако мы не рекомендуем этот способ для постоянного использования, так как это отключит контроль остатков "в реальном времени" для всех текущих операций, что может привести к отрицательным остаткам на складах.

Способ 4. Нюансы с "Рабочей датой"

В настройках 1С (Сервис — Параметры — Общие — Рабочая дата) можно установить будущую дату. Посмотрим, как это влияет на процесс. Установка рабочей даты помогает только в том, что при создании новых документов 1С будет автоматически подставлять эту дату в поле "Дата".

Однако, как справедливо заметили участники форума, это не обманывает механизм проведения. Даже если рабочая дата установлена завтрашним числом, попытка оперативного проведения все равно будет сравниваться с системными часами компьютера. Поэтому "Рабочая дата" полезна только для удобства ввода данных, но не решает проблему проведения сама по себе.

Важные последствия для учета (Критично!)

Перед тем как внедрять решение с будущими датами, необходимо проанализировать риски для партионного учета и последовательностей документов:

Таким образом, использование программного метода ЭтотОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный) является наиболее сбалансированным решением. Оно позволяет точечно решать задачу печати документов "на будущее", не затрагивая общую логику оперативного учета всей компании.

← На главную