Интеграция 1С:Предприятие с веб-сайтом — это одна из наиболее часто встречающихся задач при автоматизации торговых предприятий. Когда речь заходит о «самописном» движке сайта, перед разработчиком встает дилемма: использовать ли жесткие стандарты обмена, такие как CommerceML, или разработать собственный протокол, максимально оптимизированный под текущие нужды бизнеса.
В этой статье мы подробно проанализируем основные подходы к обмену данными, разберем плюсы и минусы различных форматов и выясним, как современные технологии 1С позволяют сделать этот процесс максимально эффективным.
Использование формата CommerceML 2 — это, пожалуй, первое решение, которое приходит в голову. В 1С:Управление торговлей уже встроены механизмы выгрузки данных в этом формате, так как он является «родным» для обмена с 1С-Битрикс и многими другими CMS.
Рассмотрим преимущества этого подхода:
Однако проанализируем и недостатки:
Главный минус — это громоздкость XML. Файлы CommerceML часто бывают «перегруженными». Если у вас десятки тысяч товаров с множеством характеристик, парсинг такого файла на стороне сайта может превратиться в проблему для веб-программиста. Разберем ситуацию: для самописного движка веб-разработчику придется писать сложный парсер, который должен учитывать сложную структуру вложенности XML-узлов.
Многие эксперты советуют обратить внимание на формат YML. Это упрощенный стандарт на базе XML, изначально разработанный Яндексом для загрузки товаров в Маркет.
Почему это выгодно:
<offer>.Для реализации выгрузки в YML мы можем использовать объект ЗаписьXML. Рассмотрим пример структуры формирования оффера:
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ПутьКФайлу, "UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("yml_catalog");
// ... формирование заголовка
ЗаписьXML.ЗаписатьНачалоЭлемента("offer");
ЗаписьXML.ЗаписатьАтрибут("id", Строка(Товар.Ссылка.УникальныйИдентификатор()));
ЗаписьXML.ЗаписатьСоответствиеТекста(Товар.Наименование, "name");
ЗаписьXML.ЗаписатьСоответствиеТекста(Строка(Цена), "price");
ЗаписьXML.ЗаписатьКонецЭлемента(); // offer
Если стоит задача максимально дешево и быстро загружать огромные массивы данных, стоит рассмотреть формат CSV. Как отмечают опытные разработчики, использование команды LOAD DATA INFILE в MySQL позволяет загружать данные практически мгновенно.
Разберем по шагам, как это работает:
Важный нюанс: CSV плохо подходит для передачи сложных иерархий и множественных свойств (например, когда у одного товара 10 разных цветов и размеров). В этом случае придется создавать несколько CSV-файлов и связывать их по идентификаторам, что усложняет логику на стороне 1С.
В современной веб-разработке стандартом де-факто является JSON. Если ваш веб-программист просит «что-то попроще», скорее всего, он имеет в виду именно JSON-структуру, передаваемую через HTTP-сервисы.
Проанализируем преимущества REST API:
Выясним, как реализовать простейший HTTP-сервис в 1С. Для этого в дереве метаданных создается объект HTTPСервис, в котором описываются шаблоны URL. В модуле сервиса мы можем написать код, возвращающий данные:
Функция ПолучитьОстаткиТовара(Запрос)
ИДТовара = Запрос.ПараметрыURL.Получить("id");
// Здесь логика получения остатка из регистра
Результат = Новый Структура("id, quantity", ИДТовара, Остаток);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Результат);
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
Возврат Ответ;
КонецФункции
Если вы не хотите писать код в 1С вообще, вспомним про встроенный механизм OData. Платформа 1С:Предприятие 8.3 позволяет опубликовать стандартный интерфейс, который предоставляет доступ ко всем справочникам и документам через REST.
Как это сделать:
webinst) установите галочку «Публиковать стандартный интерфейс OData».http://server/base/odata/standard.odata/Catalog_Номенклатура.Это самый быстрый способ дать сайту доступ к данным, но будьте осторожны: без должной настройки безопасности и фильтрации данных вы можете открыть лишнюю информацию.
Рассмотрим ситуацию, описанную опытными коллегами: сегодня вам нужно выгрузить только название и цену, а завтра бизнес потребует:
Если вы выберете слишком примитивный формат (например, простой CSV), каждая новая «хотелка» будет требовать переписывания структуры файла. Именно поэтому использование собственного JSON-протокола или адаптация YML/CommerceML выглядит наиболее перспективно — эти форматы легко расширяются новыми полями без потери совместимости со старым кодом.
Посмотрим на итоговую стратегию выбора:
1. Если бюджет ограничен, а сайт максимально простой: Используйте YML. Это стандарт, который поймет любой веб-разработчик, и он отлично подходит для выгрузки каталога товаров.
2. Если вы используете современную УТ 11 и хотите «профессиональное» решение: Реализуйте HTTP-сервисы на стороне 1С с передачей данных в формате JSON. Для заказов используйте Вебхуки (Webhooks): как только на сайте создается заказ, сайт отправляет запрос в 1С, и документ создается мгновенно.
3. Если на сайте критична скорость загрузки сотен тысяч позиций: Посмотрите в сторону CSV и механизма LOAD DATA INFILE, но помните о сложностях с иерархией данных.
4. Если нужно «вчера» и стандартно: Используйте CommerceML, но будьте готовы к тому, что веб-программисту придется попотеть над парсером.
В конечном итоге, для самописного движка лучшим решением будет гибридный подход: выгрузка тяжелого каталога товаров раз в час через файл (YML или JSON), и оперативное получение цен/остатков через быстрые API-запросы.