Как выгрузить остатки товаров из 1С:Управление торговлей для сайта и маркетплейсов
Содержание
Остатки из 1С:Управление торговлей 11 уходят на сайт файлом offers.xml формата CommerceML — его собирает узел обмена в разделе НСИ и администрирование → Настройки интеграции → Обмены с сайтами. Для маркетплейсов механизм другой: остатки передаёт обмен по API, который настраивается отдельным узлом и требует токена личного кабинета площадки. В обоих случаях в выгрузку попадает не «остаток вообще», а конкретный показатель склада — и именно на этом ломается большинство обменов.
Ниже — как подготовить данные, настроить узел, что лежит внутри offers.xml, когда нужны веб-сервисы и внешние обработки, и как читать протокол, когда цифры на витрине не сходятся со складом.
Что именно выгружается и откуда берётся остаток
На витрину уходит свободный остаток — то, что физически лежит на складе за вычетом резервов. УТ 11 умеет отдавать два разных числа, и их важно не перепутать:
- 📦 Остаток на складе — всё, что числится по данным учёта.
- 🔒 Свободный остаток — остаток минус товары в резерве под заказы и отгрузки.
Для сайта и маркетплейсов почти всегда нужен свободный остаток: иначе клиент закажет то, что уже зарезервировано под другую сделку. Какой показатель отдавать, задаётся в настройках узла обмена галочкой учёта резервов.
Если на одном складе торгуете и в рознице, и онлайн, выгружайте остаток за минусом буфера. Отдавать весь остаток на две витрины одновременно — прямой путь к продаже «последней штуки» дважды.
Источник цифры — регистр остатков товаров. Поэтому перед обменом данные должны быть проведены и сведены, а не висеть в черновиках.
Резерв в УТ формируют заказы клиентов с установленным обеспечением, а также расходные документы, по которым товар ещё не отгружен. Если заказов с резервами много, свободный остаток будет заметно меньше складского — и это нормально. Прежде чем винить обмен в «пропавших» остатках, посмотрите, сколько товара висит в резервах: часто цифра на витрине верна, а удивляет именно объём резервирования.
Подготовка базы: проводим документы и убираем минусы
Кривой остаток в базе выгрузится на витрину ровно таким же кривым. Поэтому первый шаг — не настройка обмена, а порядок на складе.
Проверьте по порядку:
- Все приходные и расходные документы за период проведены, а не записаны. Непроведённый приход остаток не формирует.
- Нет отрицательных остатков. Откройте отчёт
Склад и доставка → Отчёты по складу → Остатки товаров(илиВедомость по товарам на складах) и отсортируйте по возрастанию количества. - Контроль отрицательных остатков в настройках склада включён — тогда база сама не даст отгрузить больше, чем есть.
- Нет пересортицы по характеристикам и сериям, если ведёте учёт в этих разрезах.
- Номенклатура, которую нужно отдать на витрину, помечена признаком выгрузки или входит в нужный вид номенклатуры — иначе товар в файл не попадёт.
Пока в базе есть минусовые остатки, настраивать обмен бессмысленно — сначала закройте склад. Отрицательное количество выгрузится как ноль или как ошибка, и товар пропадёт с витрины.
Настройка узла обмена с сайтом
Включается обмен в НСИ и администрирование → Настройки интеграции → Обмены с сайтами (в части релизов группа называется «Интеграция с другими программами» — ориентируйтесь по пункту про обмен с сайтами). Поставьте флаг использования обмена и создайте узел.
В карточке узла задаются ключевые параметры:
- Адрес сайта и строка подключения к файлу обработчика обмена. Для магазинов на 1С-Битрикс это путь вида
http://ваш-сайт/bitrix/admin/1c_exchange.php. - Логин и пароль пользователя сайта с правами на обмен.
- Склад или список складов, остатки которых уходят в выгрузку.
- Выгружать остатки — отдельный флаг. Без него уйдёт только каталог и цены.
- Тип цен, который отдаём на витрину (в УТ это «виды цен» — не путайте с «типами цен» из Бухгалтерии).
- Периодичность автоматического обмена по расписанию.
💡 Сделайте отдельный узел под каждую витрину. Общий узел на сайт и маркетплейс почти никогда не настраивается одинаково: разные склады, разные цены, разная периодичность.
После сохранения узла запустите обмен вручную кнопкой выполнения обмена в форме узла — это проще, чем сразу вешать на расписание и гадать, почему ночью ничего не ушло.
Что лежит внутри файла offers.xml
CommerceML делит выгрузку на два файла. import.xml — это каталог: товары, свойства, картинки. Остатки и цены едут в offers.xml («пакет предложений»). Понимание его структуры экономит часы при разборе ошибок.
Упрощённо остаток одного товара в offers.xml выглядит так:
<Предложение>
<Ид>a1b2c3...</Ид>
<Количество>42</Количество>
<Склад ИдСклада="sklad-1" КоличествоНаСкладе="42"/>
</Предложение>
Элемент <Количество> — суммарный остаток по всем складам узла. Блок <Склад> появляется, когда вы отдаёте остатки в разрезе складов: тогда витрина может показывать наличие по каждой точке. Склады при этом должны быть объявлены в шапке пакета в блоке <Склады>.
Сопоставление того, что есть в 1С, и того, что ждёт сайт:
Главная тонкость — идентификаторы. Ид товара в 1С и Ид товара на сайте должны совпадать с теми, что ушли в import.xml. Если каталог и остатки выгружаются разными узлами или с разными настройками, витрина не найдёт, к какому товару привязать число, и остаток «повиснет».
Ещё два момента, из-за которых остаток едет не так, как ждут:
- Характеристики. Если номенклатура ведётся с характеристиками (цвет, размер), каждая характеристика — это отдельное
<Предложение>со своимИд. Остаток считается по характеристике, а не по товару в целом. - Единица измерения. Количество выгружается в базовой единице номенклатуры. Если на сайте товар продаётся упаковками, а в 1С учёт в штуках, витрина получит штуки — пересчёт настраивается уже на стороне сайта.
Выгрузка через веб-сервисы и HTTP-обмен
Классический обмен с 1С-Битрикс — это и есть HTTP-протокол. 1С по шагам стучится на 1c_exchange.php: авторизуется (checkauth), инициирует сессию (init), передаёт файлы (file), запускает импорт (import). Остатки идут на этапе загрузки offers.xml. Вам не нужно собирать эти запросы руками — их формирует типовой механизм обмена, достаточно верно указать адрес и доступ.
Какой способ выбрать под вашу задачу:
| Способ | Когда подходит | Что отдаёт |
|---|---|---|
CommerceML (offers.xml) | Сайт на 1С-Битрикс или совместимой CMS | Каталог, цены, остатки по складам |
| Встроенный обмен с маркетплейсом | Ozon, Wildberries и т. п. в УТ 11.5 | Остатки по API площадки |
| HTTP-сервис из 1С | Своя витрина с нестандартным форматом | Любой JSON/XML по запросу |
| Внешняя обработка | Разовая или редкая выгрузка в файл | CSV/XLSX/XML по расписанию |
Когда типового обмена не хватает — например, витрина не на Битриксе и ждёт собственный формат, — есть два пути:
- HTTP-сервис в 1С. В конфигурации создаётся HTTP-сервис, который по запросу витрины отдаёт остатки в нужном JSON или XML. Сервис публикуется на веб-сервере через Конфигуратор:
Администрирование → Публикация на веб-сервере. Так работает большинство обменов с маркетплейсами и кастомными витринами. - Веб-сервис (SOAP). Подходит, когда внешняя система сама инициирует обмен по строгому контракту WSDL.
Для маркетплейсов (Ozon, Wildberries и т. п.) в свежих релизах УТ 11.5 есть встроенный обмен — отдельный узел, где вы вводите токен API личного кабинета площадки, а остатки уходят по её протоколу, без CommerceML. Если модуль обмена с маркетплейсами в вашем релизе есть, используйте его, а не самописный HTTP-сервис.
Публикация на веб-сервере требует установленного веб-сервера (Apache или IIS) и модуля расширения веб-сервера 1С. Это разовая настройка на стороне сервера, дальше узел работает сам.
Внешние обработки и конвертация данных
Когда ни типовой обмен, ни веб-сервис не подходят, остатки выгружают внешней обработкой. Это рабочий инструмент, но и источник самых незаметных ошибок, поэтому держите его под контролем.
Варианты по возрастанию сложности:
- Выгрузка в файл через отчёт или СКД. Остатки собираются запросом к регистру, результат сохраняется в CSV, XLSX или XML. Подходит, когда витрине достаточно забрать файл по расписанию.
- Внешняя обработка выгрузки. Обработка с собственной формой: выбираете склад, период, формат — и получаете файл или сразу отправку по HTTP. Её можно подключить в
НСИ и администрирование → Печатные формы, отчёты и обработки → Дополнительные обработки, чтобы запускать из интерфейса без Конфигуратора. - Конвертация данных (КД). Правила обмена описываются в «Конвертации данных 2» или «3», выгрузка идёт по этим правилам. Тяжёлый, но гибкий способ для нестандартных форматов.
Внешнюю обработку запускайте от пользователя с ограниченными правами и проверяйте её источник. Обработка с полными правами на запись способна не только прочитать остатки, но и изменить данные в базе.
Для повторяющейся выгрузки настройте регламентное задание, чтобы обработка отрабатывала по расписанию, а не руками.
Разбор протокола: почему остатки не сходятся
После обмена открывайте протокол в форме узла (или файл обмена на стороне сайта). Большинство проблем видно сразу по тексту ошибки.
Отдельно сверяйте итог: сумма остатков в offers.xml должна совпадать со свободным остатком по складам узла в отчёте по остаткам. Расхождение почти всегда означает, что часть номенклатуры не помечена к выгрузке или склад в узле указан не тот.
Если протокол пустой, а на сайте по-прежнему старые цифры, проверьте, дошёл ли обмен физически: на стороне Битрикса есть журнал обмена с 1С, где видно каждую сессию и её статус. Часто оказывается, что 1С отдала файл успешно, а сайт не смог его обработать из-за прав на каталог обмена или нехватки памяти PHP — и тогда разбираться нужно на стороне витрины, а не в 1С.
Для регулярного контроля удобно раз в день сверять десяток ходовых позиций вручную: остаток в карточке номенклатуры, остаток в отчёте и число на витрине. Три совпавшие цифры означают, что цепочка работает от склада до сайта.
Частые вопросы
Как часто выгружать остатки на сайт?
Можно ли выгружать остатки по нескольким складам отдельно?
offers.xml остаток едет в разрезе складов через блок <Склад>. Витрина при поддержке этого формата покажет наличие по каждой точке.Чем выгрузка на маркетплейс отличается от выгрузки на сайт?
offers.xml). Маркетплейсы работают по своему API: остатки уходят по токену личного кабинета площадки, формат CommerceML там не используется. Это разные узлы обмена.Почему остаток на витрине больше, чем реально свободно?
Нужен ли веб-сервер для обмена с сайтом?
1c_exchange.php веб-сервер нужен на стороне сайта, а не 1С. Он требуется только если вы публикуете собственный HTTP- или веб-сервис из 1С.