Перейти к содержимому

Не выгружаются заказы в 1С - разбор причин

Заказы приходят на сайт, а в учётной системе не появляются. Разбираем причины в порядке убывания частоты.

С чего начать

Смотрим, какие заказы вообще подпадают под выгрузку:

use Bitrix\Sale\Internals\OrderTable;
// признак выгрузки хранится у самого заказа, а не в журнале обмена
$rows = OrderTable::getList([
'select' => ['ID', 'DATE_INSERT', 'STATUS_ID', 'PAYED', 'UPDATED_1C', 'VERSION_1C'],
'order' => ['ID' => 'DESC'],
'limit' => 20,
])->fetchAll();
foreach ($rows as $row) {
printf("%-6s %-12s статус=%-3s выгружен=%s\n",
$row['ID'], $row['DATE_INSERT']->format('d.m.Y'),
$row['STATUS_ID'], $row['VERSION_1C'] ?: 'нет');
}

Пустой признак выгрузки означает, что заказ в учётную систему ещё не уезжал. Заполненный - что уезжал, и повторно его отдадут только при изменении.

Проверяем точку обмена и её ответ:

Окно терминала
# заказы забирает та же точка обмена, но с другим типом
curl -s -u exchange1c:PASSWORD \
'https://example.com/bitrix/admin/1c_exchange.php?type=sale&mode=checkauth' | head -3
curl -s -o /dev/null -w '%{http_code} %{size_download}\n' -u exchange1c:PASSWORD \
'https://example.com/bitrix/admin/1c_exchange.php?type=sale&mode=query'

Нулевой размер ответа при коде 200 - типичная картина пустого отбора: сайт отвечает, но отдавать ему нечего. Отказ по коду означает, что дело в правах или в закрытом адресе.

Снимаем признак выгрузки, чтобы отдать заказ повторно:

use Bitrix\Sale\Internals\OrderTable;
// пустая версия - заказ снова считается невыгруженным
OrderTable::update($orderId, ['VERSION_1C' => '', 'UPDATED_1C' => 'N']);
// после этого ближайший обмен заберёт его как новый
// правку делают точечно по одному заказу, а не пачкой по всей таблице

Признак выгрузки - единственное, что отделяет уже отданный заказ от нового. Ручное снятие признака решает случаи, когда документ потерялся на стороне учётной системы, а сайт считает его отданным.

Причины

  1. Заказы не подпадают под отбор выгрузки примерно 30% случаев

    ПризнакСайт отвечает пустым документом, свежие заказы в нём отсутствуют.

    ПроверкаСмотрим настройку отбора в узле обмена: статус, дату начала выгрузки, признак оплаты.

    Что делатьРасширяем отбор в учётной системе: дата начала выгрузки и список статусов задаются именно там.

  2. Заказ уже помечен выгруженным примерно 25% случаев

    ПризнакОдин и тот же заказ не приходит повторно, хотя в учётной системе его нет.

    ПроверкаСмотрим признак выгрузки у заказа: заполненная версия означает, что сайт его уже отдавал.

    Что делатьСнимаем признак выгрузки у нужных заказов и повторяем обмен: сайт отдаст их заново.

  3. Обрыв соединения на большом ответе примерно 20% случаев

    ПризнакУчётная система сообщает о неполном файле, часть заказов приходит, часть нет.

    ПроверкаСмотрим время выполнения и размер ответа: обрыв виден по журналу веб-сервера.

    Что делатьСужаем период выгрузки и поднимаем предел времени выполнения на стороне сайта.

  4. У пользователя обмена нет прав на заказы примерно 15% случаев

    ПризнакКаталог выгружается нормально, заказы не приходят вовсе.

    ПроверкаПроверяем роль пользователя обмена в модуле продаж: права на каталог её не заменяют.

    Что делатьВыдаём группе пользователя обмена роль с доступом к заказам.

  5. Обмен идёт только вручную примерно 10% случаев

    ПризнакПри ручном запуске заказы приходят, по расписанию - нет.

    ПроверкаСмотрим задание расписания на стороне учётной системы и его журнал.

    Что делатьНастраиваем автоматический обмен в учётной системе: сайт сам инициировать выгрузку не умеет.

Частые вопросы

Как заставить сайт отдать заказ повторно?

Снять у него признак выгрузки. После этого ближайший обмен отдаст заказ заново, как новый.

Почему при обмене дублируются заказы?

Учётная система не находит соответствие по идентификатору и создаёт новый документ. Обычно это следствие переноса базы или смены узла обмена.

Кто инициирует выгрузку заказов?

Учётная система: она обращается к сайту и забирает документ. Сайт по своей инициативе ничего не отправляет.

Как выгрузить заказы с двух сайтов в одну базу?

Отдельными узлами обмена с разными адресами. Идентификаторы заказов при этом пересекаются, и различать их приходится по узлу.

Смежное

Первоисточник