Как выгрузить товары и цены из 1С 7.7 «Торговля и Склад» на сайт?

Программист 1С v7.7 Торговля и дистрибуция
← На главную

Интеграция устаревших конфигураций 1С 7.7 (в частности, «Торговля и Склад 7.7») с современными интернет-магазинами (1С-Битрикс, MODx, OpenCart и др.) — частая задача при автоматизации продаж. В отличие от современных версий платформы 1С 8.3, в 7.7 отсутствуют встроенные универсальные планы обмена и гибкие типовые модули выгрузки на сайт. Рассмотрим подробнее основные варианты решения этой задачи и технические нюансы реализации собственных обработок.

Варианты выгрузки данных из 1С 7.7

Для организации передачи остатков, цен и каталога номенклатуры из 1С 7.7 на веб-ресурс применяют несколько основных подходов:

  1. Использование штатного механизма CommerceML: В конфигурации «Торговля и Склад» присутствуют базовые механизмы выгрузки в формате CommerceML. Метод подходит, если приемник на сайте поддерживает стандарты обмена 1С предыдущих поколений.
  2. Формирование файлов обмена произвольной структуры (XML, JSON, CSV): Разработка собственной выгрузки, генерирующей файл данных, который затем передается на сервер по протоколу HTTP/HTTPS или FTP.
  3. Разовый импорт через Excel / CSV: Для простых задач или редкого обновления каталога используется сохранение результатов отчета по остаткам и ценам в табличный документ с последующей загрузкой на сайт.

Способ 1. Использование штатного формата CommerceML в 1С 7.7

В типовой конфигурации «Торговля и Склад 7.7» предусмотрен стандартный выгрузочный модуль формата CommerceML. Посмотрим, как он функционирует: выгрузка формирует XML-структуру с описанием справочника номенклатуры, категорий и цен. Однако на практике современный стандарт обмена Bitrix/CommerceML 2.x существенным образом отличается от старых схем 7.7. Если сайт принимает классический CommerceML, достаточно настроить штатную обработку в меню сервисных функций. В противном случае стандартную обработку дорабатывают либо используют ее в качестве основы для написания собственного модуля.

Способ 2. Формирование произвольного XML, CSV или JSON файла

Наиболее гибкий подход — самостоятельное формирование файла обмена в требуемом формате под спецификацию системы управления сайтом (CMS).

Нюансы работы с XML и UTF-8 в 1С 7.7:

Платформа 1С 7.7 работает в системной кодировке Windows-1251. Веб-серверы требуют кодировку UTF-8. При выгрузке больших справочников номенклатуры (более 10 000 позиций) использование объекта MSXML2.DOMDocument может приводить к повышенному потреблению оперативной памяти. Поэтому оптимальным решением является последовательная запись строк через штатный объект Текст с последующей конвертацией файла в UTF-8 через системный объект ADODB.Stream.

Разберем пример кода для перекодировки сформированного файла из Windows-1251 в UTF-8 без BOM:


// Перекодировка текстового файла из Windows-1251 в UTF-8
StreamIn = СоздатьОбъект("ADODB.Stream");
StreamIn.Type = 2; // Text
StreamIn.Charset = "windows-1251";
StreamIn.Open();
StreamIn.LoadFromFile(ПутьКФайлуANSI);

StreamOut = СоздатьОбъект("ADODB.Stream");
StreamOut.Type = 2; // Text
StreamOut.Charset = "utf-8";
StreamOut.Open();

StreamIn.CopyTo(StreamOut);
StreamOut.SaveToFile(ПутьКФайлуUTF, 2);

// Корректировка: удаление маркера BOM (первые 3 байта)
StreamBin = СоздатьОбъект("ADODB.Stream");
StreamBin.Type = 1; // Binary
StreamBin.Open();
StreamBin.LoadFromFile(ПутьКФайлуUTF);
StreamBin.Position = 3;

StreamNoBom = СоздатьОбъект("ADODB.Stream");
StreamNoBom.Type = 1; // Binary
StreamNoBom.Open();
StreamBin.CopyTo(StreamNoBom);
StreamNoBom.SaveToFile(ПутьКФайлуUTF, 2);

Передача сформированных данных на веб-сервер

Проанализируем способ отправки файла или сформированной строки на сайт из 1С 7.7. Поскольку штатных функций для работы с HTTP-протоколом в 7.7 нет, применяют объект WinHttp.WinHttpRequest.5.1.

Пример отправки данных методом POST на скрипт-приемник сайта:


HTTP = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
HTTP.Open("POST", "https://example.com/api/import_products.php", 0);
HTTP.SetRequestHeader("Content-Type", "application/xml; charset=utf-8");
HTTP.Send(ТекстТелаXML);

Если HTTP.Status = 200 Тогда
    Сообщить("Данные успешно переданы на сайт: " + HTTP.ResponseText);
Иначе
    Сообщить("Ошибка передачи данных. Код ответа: " + HTTP.Status);
КонецЕсли;

Организация инкрементальной выгрузки (только измененные товары)

Чтобы не перегружать сервер постоянной выгрузкой полного каталога, организуют отслеживание изменений. В 1С 7.7 это реализуется двумя способами:

  1. Модификация модуля справочника Номенклатура: В предопределенную процедуру ПриЗаписи() добавляется код, записывающий код или ID измененного элемента в отдельную табличную часть или служебный лог-файл (DBF / TXT).
  2. Сравнение по хэш-сумме или дате: При формировании обмена рассчитывается хэш-сумма ключевых полей (цена, остаток, наименование) и сравнивается с предыдущим сохраненным значением. На сайт отправляются только позиции с изменившимся хэшем.

Способ 3. Экспресс-выгрузка через отчеты в CSV или Excel

Если автоматический обмен не требуется или объем номенклатуры невелик, выгрузку делают на основе стандартного отчета по остаткам и ценам. В отчете выводятся необходимые колонки (Код, Артикул, Наименование, Цена, Остаток), после чего печатная форма сохраняется в формате Табличного документа (.xls или .csv) и импортируется в административную панель сайта штатными средствами CMS.

← На главную