При интеграции 1С:Управление торговлей 11 (а также ERP и КА 2) с интернет-магазином на базе Bitrix пользователи часто сталкиваются с критической ошибкой при загрузке заказов. Текст ошибки обычно выглядит следующим образом: «Производственный календарь «Российская Федерация» не заполнен с даты [Дата] на указанное количество рабочих дней». Давайте подробно разберем причины этой проблемы и пошагово выясним, как её устранить.
Проанализируем технологический стек вызова, который приводит к сбою. Ошибка возникает в общем модуле КалендарныеГрафики. Если посмотреть на цепочку вызовов, мы увидим, что при загрузке заказа клиента модуль обмена пытается автоматически заполнить этапы оплаты. Это происходит в методе ЭтапыОплатыСервер.ЗаполнитьЭтапыОплатыДокументаПродажи.
Система пытается рассчитать дату платежа, исходя из настроек, указанных в Соглашении об условиях продаж или в Графике оплаты. Если в этих настройках указана отсрочка платежа в рабочих днях, 1С обращается к производственному календарю, чтобы отсчитать нужное количество дней. Если календарь не заполнен на требуемую глубину (вперед в будущее), система выбрасывает исключение.
Первым делом нам необходимо убедиться, что основной производственный календарь предприятия заполнен корректно и на достаточный период. Рассмотрим, как это сделать:
Важно понимать различие между Производственным календарем и Графиком работы. Календарь — это общая сетка праздников и выходных, а график работы (например, «Пятидневка») строится на его основе. Рассмотрим ситуацию: вы обновили производственный календарь, но график работы остался старым.
Выясним, какой график используется в системе:
Одной из скрытых причин ошибки является использование Типовых или Индивидуальных соглашений при обмене. Модуль Битрикс при загрузке заказа ищет подходящее соглашение. Если в соглашении установлена настройка «Требуется указание графика оплаты», система будет пытаться рассчитать даты этапов.
Рассмотрим порядок действий для проверки соглашения:
Разберем, почему ошибка возникает именно при обмене, а не при ручном создании заказа. При ручном создании пользователь видит предупреждения, а при фоновом обмене метод ЗаполнитьЭтапыГрафикаОплаты вызывается программно.
Посмотрим на пример кода, который вызывается в недрах системы при обмене:
// Вызов из общего модуля ЭтапыОплатыСервер
МассивДатПоКалендарюАвансовыхЭтапов = КалендарныеГрафики.ДатыПоКалендарю(
Календарь,
ДатаДокумента,
СдвигиАвансовыхЭтапов
);
Если СдвигиАвансовыхЭтапов содержат количество дней, превышающее заполненный горизонт календаря, функция ДатыПоКалендарю вызовет исключение. Чтобы этого избежать, убедитесь, что в настройках обмена на стороне 1С не указана слишком большая отсрочка платежа «по умолчанию».
Иногда после заполнения всех календарей ошибка сохраняется. Выясним причину:
ПроизводственныеКалендари и Календари (Графики работы).Для исправления ошибки «Производственный календарь не заполнен» необходимо: