Сергей Сорокин · Выгрузка товаров
Как я восстановил обновление YML-выгрузки на Битриксе
Опубликовано Обновлено
В августе 2026 года я восстанавливал YML-выгрузку интернет-магазина на Битриксе. Файл с товарами открывался по привычной ссылке, но не обновлялся около 9 месяцев. Дилеры забирали его вручную или своими программами. Нужно было вернуть ежедневную сборку и сохранить адрес файла.
Почему файл открывался, но не обновлялся
При проверке 17–18 августа я обнаружил, что на сервере нет задания cron для выгрузки. Такое задание запускает скрипт по расписанию без участия человека. Последняя генерация файла была датирована 09.11.2025. В ту ночь магазин переносили на другой сервер. Совпадение дат не объясняло отсутствие задания.
YML в этом магазине собирал отдельный самописный скрипт. Он записывал товары, цены и наличие в файл, который затем скачивали дилеры. Изменения в каталоге Битрикса попадали в выгрузку только при следующем запуске скрипта.
Старый файл оставался на месте, поэтому сервер продолжал отдавать его по ссылке. Успешное скачивание не означало, что цены и наличие в нем соответствуют каталогу.
Какие данные я исправил в выгрузке
Одного запуска старого скрипта было недостаточно. Он составлял название из штрихкода товара, добавлял бренд к артикулу и выгружал цвет служебным кодом справочника. Предложения из неактивных разделов попадали в файл, хотя самих разделов в списке категорий не было.
Я подготовил новый генератор, сохранив основную структуру YML и идентификаторы предложений.
- Название собирается из названия товара и цвета свечения. Вместо кода цвета подставляется его название из справочника.
- В артикул попадает только артикул предложения, без добавленного бренда.
- Товары из неактивных разделов и предложения без положительной цены не выгружаются. Отрицательное количество заменяется на 0.
- Адреса изображений кодируются по частям пути, чтобы пробелы и кириллица корректно передавались в ссылке. Логотип магазина исключен из фотографий товаров.
Как новый файл заменяет предыдущий
Прежний скрипт записывал выгрузку сразу в файл, который скачивали дилеры. При прерывании записи они могли получить недописанный XML. В новом генераторе я сначала собираю результат во временный файл.
Перед заменой скрипт проверяет, что XML читается, предложения есть и их число совпадает со счетчиком генерации. Для ежедневной выгрузки также задан минимальный размер файла. Если одна из проверок не проходит, прежний файл остается на месте.
Эти проверки не сверяют каждую цену с каталогом. Сохраненный после ошибки файл постепенно устаревает. Для диагностики я добавил журнал с количеством предложений, пропусками и размером результата.
Ежедневная сборка по прежнему адресу
Выгрузку вернул на ежедневную ночную сборку по прежнему адресу. В сентябре 2026 года расписание предусматривало сборку в 03:30. Дилерам не требовалось менять ссылку для скачивания.
Кабинеты маркетплейсов я не настраивал, приемка выгрузки конкретной площадкой не проверена.
Проверьте свой YML-файл
Укажите ссылку на выгрузку или выберите сохраненный файл. Инструмент проверит XML, ID предложений, цены и связи с категориями, покажет замечания и подготовит отчет для разработчика. Можно начать с условного примера с намеренными ошибками в данных.
С чего начать, если данные в выгрузке устарели
Выберите товар, у которого недавно менялась цена или наличие, и сравните каталог сайта с выгрузкой. Если данные устарели уже на сайте, начните с их загрузки в каталог. Если сайт показывает актуальные данные, а файл отстает, проверьте дату генерации внутри YML и журнал запусков скрипта.
После переноса сайта попросите разработчика сверить фоновые задания и проверить запуск выгрузки по расписанию. Работающие страницы магазина не подтверждают, что сервер собирает новый файл.
