Как реализовать автоматическое проведение и резервирование заказов из Битрикс24 в 1С:Управление торговлей 11

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

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

В этой статье мы подробно разберем, как настроить систему так, чтобы заказы из CRM автоматически резервировали товар, проанализируем технические нюансы программной реализации и рассмотрим сценарии обработки дефицита позиций.

Понимание механизма резервирования в УТ 11

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

Существуют следующие основные варианты:

При стандартной загрузке из Битрикс24 по умолчанию часто устанавливается статус "К обеспечению". Наша задача — программно сменить его на "Резервировать на складе".

Способ 1: Модификация модуля интеграции

Рассмотрим вариант внесения правок непосредственно в модуль интеграции. Модуль Битрикс24 для 1С является открытым, что позволяет внедрить логику резервирования в момент завершения загрузки пакета данных.

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


// Пример логики для установки резерва в Заказе клиента
Для Каждого СтрокаТовара Из Объект.Товары Цикл
    // Устанавливаем действие "Резервировать на складе"
    СтрокаТовара.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.РезервироватьНаСкладе;
КонецЦикла;

// После изменения ТЧ необходимо пересчитать даты отгрузки и провести документ
Объект.Статус = Перечисления.СтатусыЗаказовКлиентов.КВыполнению;
Объект.Записать(РежимЗаписиДокумента.Проведение);

Важно помнить, что если на складе нет достаточного количества товара, попытка жесткого проведения может вызвать ошибку. Поэтому рекомендуется использовать типовые методы конфигурации, такие как ЗапасыСервер.ЗаполнитьВариантыОбеспеченияВДокументе.

Способ 2: Использование расширения и перехват события записи

Чтобы не изменять типовой модуль обмена (что облегчит будущие обновления), лучше всего использовать механизм расширений. Мы можем создать подписку на событие ПередЗаписью или использовать ПослеЗаписи для документа ЗаказКлиента.

Выясним, как отличить заказ, пришедший из Битрикс24, от заказа, созданного менеджером вручную. Обычно модуль обмена заполняет дополнительные реквизиты или указывает конкретный УзелИнформационнойБазы. Проанализируем алгоритм в расширении:

  1. Проверяем, является ли документ новым или пришел ли он через обмен.
  2. Проверяем статус заказа (например, переводить в резерв только заказы в статусе "Согласован").
  3. Вызываем процедуру автоматического заполнения обеспечения.
  4. Проводим документ.

Пример программного вызова типового заполнения:


&После("ПриЗаписи")
Процедура Б24_ПослеЗаписиРезервирование(Отказ)
    Если ЭтотОбъект.ОбменДанными.Загрузка Тогда
        // Логика выполняется только при загрузке из внешних систем
        ПараметрыЗаполнения = Обработки.ЗаполнениеОбеспечения.ПараметрыЗаполненияОбеспечения();
        ПараметрыЗаполнения.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.РезервироватьНаСкладе;
        
        // Вызов типовой функции распределения остатков
        Обработки.ЗаполнениеОбеспечения.ЗаполнитьОбеспечениеВДокументе(ЭтотОбъект, ПараметрыЗаполнения);
        
        Попытка
            ЭтотОбъект.Записать(РежимЗаписиДокумента.Проведение);
        Исключение
            ЗаписьЖурналаРегистрации("ИнтеграцияБ24", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка авторезерва: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
КонецПроцедуры

Способ 3: Регламентное задание (Оптимально для больших объемов)

Если в день поступает более 30-50 заказов, проведение документов в момент синхронизации может привести к блокировкам таблиц и зависанию обмена. Разберем ситуацию: одновременно загружается 5 заказов, и каждый пытается пересчитать остатки и заблокировать складские регистры. Это "узкое место".

В этом случае эффективнее использовать следующий сценарий:

  1. Модуль интеграции загружает заказ в статусе "Не проведен" или "Черновик".
  2. Создается регламентное задание, которое запускается каждые 5-10 минут.
  3. Задание выбирает все непроведенные заказы, источником которых является Битрикс24.
  4. Робот по очереди обрабатывает каждый заказ: устанавливает ВариантОбеспечения, проверяет остатки и проводит.

Это позволяет разнести во времени процесс передачи данных и процесс тяжелых вычислений по складским остаткам.

Обработка частичного резерва и дефицита

Проанализируем ситуацию: в заказе 10 штук товара, а на складе всего 5. Как должна повести себя автоматика?

Если мы просто установим статус "Резервировать на складе", 1С выдаст ошибку при проведении из-за нехватки остатка (если включен контроль остатков). Рассмотрим варианты решения:

Настройка складов и соглашений

Для корректного проведения заказа важно, чтобы в 1С были правильно заполнены обязательные поля, которые могут отсутствовать в Битрикс24:

  1. Склад: Убедитесь, что в настройках обмена указан склад по умолчанию. Если склад не заполнен, ЗаказКлиента не проведется.
  2. Соглашение: В УТ 11 цены и условия зависят от соглашения. Проверьте, чтобы у контрагента было типовое или индивидуальное соглашение, подходящее под условия загрузки.
  3. Цены: Если цена в Битрикс24 отличается от цены в 1С (например, из-за скидок), убедитесь, что у пользователя, под которым идет обмен, есть права на "Отклонение от условий продаж".

Обратная связь с Битрикс24

После успешного резервирования важно вернуть статус в CRM. Рассмотрим цепочку действий: в 1С установился резерв -> сработало событие обмена -> в Битрикс24 статус сделки изменился на "Товар зарезервирован". Это исключит лишние вопросы от менеджеров по продажам. Настройте соответствие статусов в модуле интеграции: Статус 1С "Проведен (в резерве)" — Статус Б24 "Резерв".

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

← На главную