При попытке создания или проведения документа в конфигурации «Бухгалтерия предприятия» пользователи иногда сталкиваются с ошибкой проверки периода: «Дата документа должна быть не позже ... года». Разберем подробно, почему разработчики платформы и типовых конфигураций заложили такое ограничение, к каким серьезным проблемам с производительностью может привести случайный ввод некорректного года и какими способами можно устранить эту ошибку.
Проанализируем архитектурные особенности работы регистра бухгалтерии Хозрасчетный в платформе 1С:Предприятие 8.3:
Именно для защиты от человеческого фактора (опечаток при ручном вводе или ошибок парсинга данных при интеграциях через XML, JSON или ЭДО) в конфигурации реализован программный контроль корректности дат перед записью объекта.
Посмотрим на типовую реализацию контроля в общем модуле конфигурации ОбщегоНазначенияБПСобытия в процедуре ПроверитьКорректностьДатыПередЗаписью:
Если Источник[КонтролируемыйРеквизит] > КорректныйПериод.КонецКорректногоПериода Тогда
ГраницаКорректности = Формат(КорректныйПериод.КонецКорректногоПериода, "ДФ=гггг");
ШаблонОшибки = НСтр("ru = '%1 документа должна быть не позже %2 года'");
ЕстьОшибкиВКонтролируемыхРеквизитах = Истина;
КонецЕсли;
В старых релизах конфигурации «Бухгалтерия предприятия» (до версии 3.0.49 включительно) функция КорректныйПериодВводаДокументов() возвращала жестко заданную верхнюю границу — конец 2020 года. При наступлении 2021 года не обновлявшиеся базы перестали позволять вводить новые документы. Начиная с релиза 3.0.50.10, разработчики перевели расчет верхней границы в динамический режим, привязав её к функции ТекущаяДатаСеанса() с запасом вперед на 9 лет.
Рассмотрим основные варианты устранения ошибки в зависимости от условий сопровождения информационной базы.
Разберем по шагам наиболее правильное решение — обновление конфигурации на актуальный релиз. В современных версиях «Бухгалтерии предприятия» проверка рассчитывается автоматически и не блокирует штатную работу в текущих и ближайших будущих годах.
Конфигуратор до актуальной версии.Если база находится на официальной поддержке и оперативно обновить её невозможно, исправим проверку с помощью механизма расширений (CFE). Переопределим логику функции расчета допустимого периода:
Адаптация или Дополнение.КорректныйПериодВводаДокументов.&Вместо, задав динамический расчет периода:
&Вместо("КорректныйПериодВводаДокументов")
Функция Расш1_КорректныйПериодВводаДокументов()
Период = Новый Структура;
Период.Вставить("НачалоКорректногоПериода", '20000101');
// Устанавливаем границу на 9 лет вперед относительно даты сеанса
Период.Вставить("КонецКорректногоПериода", ДобавитьМесяц(КонецГода(ТекущаяДатаСеанса()), 9 * 12));
Возврат Период;
КонецФункции
Если конфигурация уже снята с поддержки и обновляется вручную, внесем исправление непосредственно в функцию КорректныйПериодВводаДокументов в модуле ОбщегоНазначенияБПКлиентСервер (или ОбщегоНазначенияБП в зависимости от релиза):
Функция КорректныйПериодВводаДокументов() Экспорт
Результат = Новый Структура;
Результат.Вставить("НачалоКорректногоПериода", Дата('20000101'));
Результат.Вставить("КонецКорректногоПериода", ДобавитьМесяц(КонецГода(ТекущаяДатаСеанса()), 9 * 12));
Возврат Результат;
КонецФункции
Важно: Не рекомендуется полностью отключать или комментировать вызов ПроверитьКорректностьДатыПередЗаписью, так как это лишит базу защиты от случайных опечаток пользователей при вводе дат с неправильным веком или тысячелетием.
Если ошибка продолжает появляться даже на обновленной конфигурации, проверим следующие системные параметры:
ГГ) в четырехзначный (ГГГГ), чтобы исключить подстановку некорректных значений.