В практической работе с программой «1С:Управление торговлей 11» (а также в сопряженных конфигурациях, таких как 1С:ERP и 1С:Комплексная автоматизация 2) пользователи часто сталкиваются с жесткими ограничениями платформы при попытке провести документы будущей датой. Типичный сценарий: бухгалтер или менеджер хочет заранее занести в базу документ Приобретение товаров и услуг (ПТУ), который фактически будет оформлен следующей неделей, чтобы не возвращаться к этой задаче позже.
Однако при попытке провести документ будущим временем система выдает ошибку:
{ОбщийМодуль.ОбщегоНазначенияУТКлиент.Модуль(1836)}: Ошибка при вызове метода контекста (Записать)... Дата оперативно проводимого документа больше текущей. Документ не может быть проведен оперативно!
В этой статье мы подробно разберем, почему возникает данная ошибка, проанализируем внутренние механизмы платформы «1С:Предприятие» и рассмотрим несколько эффективных способов решения этой проблемы — от простых пользовательских лайфхаков до программной доработки системы.
---
Для начала проанализируем, как платформа «1С:Предприятие 8» разделяет режимы проведения документов. Существует два основных режима:
При интерактивном нажатии на кнопку «Провести» или «Провести и закрыть» в форме документа платформа автоматически определяет режим проведения. Если дата документа больше текущего системного времени компьютера (или сервера приложений), платформа классифицирует такое проведение как попытку «сверх-оперативного» проведения.
Поскольку у документа ПриобретениеТоваровУслуг в свойствах конфигурации по умолчанию разрешено оперативное проведение, платформа принудительно пытается провести его оперативно. Но так как дата документа находится в будущем, возникает внутреннее противоречие логики платформы, и выполнение прерывается с ошибкой.
---
Самый надежный способ решить эту проблему на уровне метаданных — запретить документу оперативное проведение. Если документу запрещено оперативное проведение, платформа всегда будет проводить его в неоперативном режиме, независимо от его даты.
Рассмотрим пошагово, как это сделать (для этого база должна быть снята с поддержки или возможность изменения должна быть настроена через расширение конфигурации):
ПриобретениеТоваровУслуг.Разрешить.Запретить.После этого изменения пользователи смогут беспрепятственно проводить документы поступления любой будущей датой прямо из интерактивной формы.
Важное предупреждение: Отключение оперативного проведения для документов поступления лишает систему возможности контролировать свободные остатки в реальном времени при вводе поступлений (хотя для приходных документов это обычно не критично, так как они увеличивают остаток, а не уменьшают его).
---
Если мы не хотим изменять свойства типовой конфигурации и снимать ее с поддержки, мы можем обойти интерактивное ограничение платформы программным путем. Ошибка возникает только тогда, когда пользователь нажимает стандартную кнопку проведения в форме. Если же запустить проведение документа кодом, указав режим проведения принудительно, система проигнорирует ограничение по времени.
Рассмотрим пример кода, который можно использовать во внешней обработке для записи и проведения документа будущим временем:
// Пример программного проведения документа будущей датой
Процедура ПровестиДокументБудущимВременем(СсылкаНаДокумент) Экспорт
// Получаем объект документа из ссылки
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
// Устанавливаем параметры записи
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Сообщить("Документ " + Строка(СсылкаНаДокумент) + " успешно проведен будущей датой.");
КонецПроцедуры
Использование этого метода позволяет обойти системное ограничение, поскольку принудительный вызов метода Записать с параметром РежимПроведенияДокумента.Неоперативный принуждает платформу провести документ без сопоставления с текущим временем сеанса.
---
Если у вас нет возможности изменять конфигурацию или писать внешние обработки, можно воспользоваться стандартными обходными путями, которые предоставляет сама платформа 1С.
Ограничение на проведение будущим временем срабатывает именно внутри формы самого документа. Если сделать следующее, система обойдет проверку:
Приобретение товаров и услуг.При групповом или пакетном проведении из списка система часто вызывает проведение программно в неоперативном режиме, благодаря чему документ успешно проводится будущей датой.
Еще одна интересная особенность некоторых релизов УТ 11 заключается в проведении связанных документов:
Заказ поставщику).---
Несмотря на наличие технических способов обхода, мы должны предупредить вас о серьезных учетных рисках, к которым ведет проведение поступлений будущим временем. Разработчики 1С заблокировали эту возможность не просто так.
Проанализируем ключевые проблемы, с которыми столкнется организация:
Рекомендуемая альтернатива: Вместо проведения ПТУ будущим числом правильнее использовать стандартную цепочку документов 1С. Сначала создается документ Заказ поставщику (он резервирует планируемые поступления). А само Приобретение товаров и услуг проводится текущим числом, когда товар фактически принимается к учету на склад.