Выгрузка из 1С в XML: как настроить и автоматизировать
«Выгрузка из 1С в XML» — это три разные задачи, и настраиваются они по-разному. Ниже — как понять, какая у вас, и что делать в каждом случае.
Сначала определите, какой XML вам нужен
Слово XML ничего не говорит о структуре файла. Прежде чем что-то настраивать, выясните у принимающей стороны — сайта, маркетплейса, подрядчика — какой именно формат она ждёт. Практически всегда это один из четырёх вариантов.
- CommerceML 2 — стандарт обмена с интернет-магазином. Обычно два файла:
import.xml(номенклатура, группы, свойства, изображения) иoffers.xml(цены, остатки, склады). Это то, что понимают Битрикс и большинство CMS. - EnterpriseData — универсальный формат для обмена 1С с 1С через «Синхронизацию данных». Внешним системам его отдавать бессмысленно.
- Технический XML выгрузки объектов — результат обработки «Выгрузка и загрузка данных XML». Годится только для переноса между базами одной конфигурации.
- Произвольный XML под чужое API или прайс-лист поставщика. Пишется кодом, типовыми средствами не закрывается.
Отдельно стоит YML для Яндекс.Маркета: он тоже XML, но со своей схемой, и с CommerceML его регулярно путают.
Типовой путь: обмен с сайтом
Если нужен CommerceML, в типовых конфигурациях (Управление торговлей, Розница, Бухгалтерия, УНФ) ничего программировать не надо. Раздел «Администрирование» → «Обмен с сайтом» или «Синхронизация данных», далее создаётся узел обмена и настраивается его состав.
В настройках узла задаются: способ передачи (каталог на диске, FTP или прямое подключение к сайту), группы номенклатуры для выгрузки, вид цен, список складов, выгружать ли картинки и характеристики, отдавать ли полный каталог или только изменения с прошлого раза. Отдельно — расписание регламентного задания.
Главная ошибка на этом шаге: расписание настроили, а выгрузка не идёт. Причина почти всегда в типе базы. В клиент-серверном варианте регламентные задания выполняет сервер 1С, и всё работает само. В файловой базе они выполняются только внутри запущенного сеанса — то есть пока у кого-то открыта 1С. Для файловой базы надёжнее внешний планировщик, который запускает 1С в пакетном режиме с ключами ENTERPRISE /Execute и путём к обработке.
Свой формат: как писать выгрузку кодом
Когда контрагенту нужна собственная структура, файл формируется на встроенном языке. Два рабочих инструмента.
ЗаписьXML— построчная запись: открыть файл, записать объявление XML, дальше начало элемента, атрибуты, текст, конец элемента. Полный контроль над структурой, подходит под любую чужую схему.СериализаторXDTO— сериализация объекта целиком одной строкой. Быстро, но структура получается «как внутри 1С», и внешние системы её, как правило, не принимают.
Что важно на практике. Данные собирайте одним запросом и обходите результат, а не читайте реквизиты через точку в цикле по справочнику — на десятках тысяч позиций разница во времени будет в разы. Не склеивайте XML вручную из строк: наименования с амперсандом, кавычками или угловыми скобками сломают файл, а ЗаписьXML экранирует их сама. Кодировку указывайте UTF-8 явно. Если контрагент дал XSD-схему — прогоняйте готовый файл через валидатор перед отправкой, это дешевле, чем разбирать претензии по загрузке.
Чтобы выгрузка работала без присмотра
Настроенная выгрузка ломается тихо: изменили вид цен, пересобрали группы номенклатуры, обновили конфигурацию — файл продолжает формироваться, но с неполными данными. Поэтому к самой выгрузке нужен контроль.
- Проверка результата после каждого запуска: файл создан, дата изменения свежая, количество позиций не обвалилось относительно прошлого раза, размер в разумных пределах.
- Повтор при сбое и лог запусков — чтобы было видно, когда именно всё встало.
- Уведомление в телеграм-бот при отклонении: это дешевле, чем узнавать о проблеме от клиента через два дня.
- Отдельный пользователь 1С с правами только на чтение нужных объектов — выгрузка не должна ходить в базу под полными правами.
- Хранение истории выгрузок, а не только последнего файла. История позволяет ответить на вопрос «когда цена изменилась» — у нас, например, накоплена собственная база истории цен объёмом около 3,8 ГБ, и она регулярно закрывает споры о том, что и когда отдавалось.
Мы разворачиваем такие связки на своём сервере: выгрузка по расписанию, проверки, отчёт в чат. Если в тот же файл или таблицу нужны данные не только из 1С, а ещё и внешние — цены конкурентов, остатки поставщиков, позиции в выдаче, — они собираются настоящим браузером с российского адреса, что снимает часть проблем с антибот-защитой, и сводятся с данными 1С уже на нашей стороне.
Соберём под ваш случай и покажем на ваших данных.
Сбор данных →