Как исправить ошибку «Производственный календарь не заполнен» при обмене 1С:УТ 11 с Bitrix?

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

При интеграции 1С:Управление торговлей 11 (а также ERP и КА 2) с интернет-магазином на базе Bitrix пользователи часто сталкиваются с критической ошибкой при загрузке заказов. Текст ошибки обычно выглядит следующим образом: «Производственный календарь «Российская Федерация» не заполнен с даты [Дата] на указанное количество рабочих дней». Давайте подробно разберем причины этой проблемы и пошагово выясним, как её устранить.

Анализ причины возникновения ошибки

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

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

Шаг 1: Проверка и заполнение Производственного календаря

Первым делом нам необходимо убедиться, что основной производственный календарь предприятия заполнен корректно и на достаточный период. Рассмотрим, как это сделать:

  1. Перейдем в раздел НСИ и администрирование — Предприятие — Производственные календари.
  2. Найдем в списке календарь «Российская Федерация» (или тот, который используется в вашей базе по умолчанию).
  3. Проанализируем его состояние. Часто календарь заполнен только на текущий год. Если заказ загружается в конце года, а отсрочка платежа составляет, например, 30 рабочих дней, дата оплаты может выпасть на следующий год. Если следующий год не заполнен — возникнет ошибка.
  4. Нажмем кнопку «Заполнить по умолчанию» для текущего и, что крайне важно, для следующего года.
  5. Убедимся, что в календаре нет «розовых» полей, которые сигнализируют о неразнесенных праздничных днях. После внесения изменений нажмем «Записать и закрыть».

Шаг 2: Актуализация графиков работы

Важно понимать различие между Производственным календарем и Графиком работы. Календарь — это общая сетка праздников и выходных, а график работы (например, «Пятидневка») строится на его основе. Рассмотрим ситуацию: вы обновили производственный календарь, но график работы остался старым.

Выясним, какой график используется в системе:

  1. Проверим настройки в разделе НСИ и администрирование — Склады и магазины. В карточке основного склада может быть указан конкретный график работы.
  2. Проверим Графики работы сотрудников или Графики работы предприятия.
  3. Если график ссылается на производственный календарь «РФ», в него нужно зайти и нажать кнопку «Заполнить», чтобы он пересчитал рабочие часы на основе новых данных календаря.

Шаг 3: Настройка Соглашений об условиях продаж

Одной из скрытых причин ошибки является использование Типовых или Индивидуальных соглашений при обмене. Модуль Битрикс при загрузке заказа ищет подходящее соглашение. Если в соглашении установлена настройка «Требуется указание графика оплаты», система будет пытаться рассчитать даты этапов.

Рассмотрим порядок действий для проверки соглашения:

  1. Зайдем в раздел Продажи — Соглашения с клиентами.
  2. Найдем соглашение, которое подставляется в заказы с сайта (это можно проверить в настройках узла обмена Bitrix).
  3. На вкладке «Условия продаж» проверим поле «График оплаты».
  4. Если график оплаты использует расчет в рабочих днях, система всегда будет требовать заполненный календарь.
  5. Проанализируем поле «Календарь» в самом соглашении. Если там выбран конкретный календарь, убедитесь, что он заполнен.

Шаг 4: Особенности программной загрузки в модуле Bitrix

Разберем, почему ошибка возникает именно при обмене, а не при ручном создании заказа. При ручном создании пользователь видит предупреждения, а при фоновом обмене метод ЗаполнитьЭтапыГрафикаОплаты вызывается программно.

Посмотрим на пример кода, который вызывается в недрах системы при обмене:


// Вызов из общего модуля ЭтапыОплатыСервер
МассивДатПоКалендарюАвансовыхЭтапов = КалендарныеГрафики.ДатыПоКалендарю(
    Календарь, 
    ДатаДокумента, 
    СдвигиАвансовыхЭтапов
);

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

Шаг 5: Технические нюансы и кэширование

Иногда после заполнения всех календарей ошибка сохраняется. Выясним причину:

  1. Сеансы фоновых заданий: Обмен данными часто идет в контексте фонового задания под пользователем для обмена. Эти сеансы могут кэшировать данные о календарных графиках. Рекомендуется перезапустить службу сервера 1С или завершить активные сеансы пользователя обмена.
  2. Права доступа: Убедитесь, что у пользователя, под которым выполняется обмен, есть права на чтение справочников ПроизводственныеКалендари и Календари (Графики работы).
  3. Дата документа: Проанализируйте заказы на стороне Bitrix. Если с сайта прилетает заказ с некорректной датой (например, из далекого будущего из-за сбоя часовых поясов), 1С попытается найти календарь на эту дату и закономерно выдаст ошибку.

Резюме решения

Для исправления ошибки «Производственный календарь не заполнен» необходимо:

← На главную