Как организовать обмен данными между самописным сайтом на PHP и 1С:Предприятие?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При создании первого в жизни проекта по интеграции сайта и 1С часто возникает соблазн использовать стандартные инструменты, такие как Универсальный обмен данными XML. Однако, если сайт разработан с нуля (самописный), попытка подогнать PHP-код под жесткую структуру универсального формата может оказаться крайне трудоемкой задачей. Рассмотрим, почему современные разработчики выбирают путь создания собственных HTTP-сервисов, и разберем по шагам, как реализовать надежный обмен данными.

Почему «Универсальный обмен данными» — не лучший выбор для сайта

Разберем ситуацию: обработка Универсальный обмен данными (XML) предназначена в первую очередь для миграции данных между конфигурациями 1С. Для её работы требуется файл правил обмена, созданный в конфигурации «Конвертация данных 2.0». Чтобы ваш сайт мог «общаться» с 1С через эту обработку, вам пришлось бы программно формировать XML-структуру, которая в точности повторяет метаданные 1С и структуру узлов, прописанную в правилах. Это неудобно, сложно в отладке и избыточно для веб-проекта.

Проанализируем более эффективные подходы, которые позволяют сделать обмен гибким и производительным.

Вариант 1. Использование HTTP-сервисов (REST API) в 1С

Это самый современный и рекомендуемый метод. Вместо того чтобы выгружать файлы и вручную их загружать, мы заставим сайт и 1С общаться напрямую через HTTP-протокол. Рассмотрим алгоритм реализации:

  1. Создание HTTP-сервиса в 1С: В дереве метаданных конфигурации создаем новый объект HTTPСервис.
  2. Настройка шаблона URL: Определяем адрес, по которому сайт будет обращаться к базе, например: /exchange/v1/data.
  3. Методы: Создаем метод POST для приема данных с сайта и GET для отдачи данных сайту.

Посмотрим на пример простейшего кода в 1С для приема JSON-данных от PHP-скрипта:


Функция ПринятьДанныеССайта(Запрос)
    
    // Получаем тело запроса (например, в формате JSON)
    СтрокаJSON = Запрос.ПолучитьТелоКакСтроку();
    
    // Инициализируем чтение JSON
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(СтрокаJSON);
    
    // Преобразуем JSON в структуру или соответствие 1С
    Данные = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    // Здесь реализуем логику обработки данных (запись в справочник или документ)
    // Например: Справочники.Номенклатура.СоздатьЭлемент()...
    
    // Формируем ответ
    Ответ = Новый HTTPСервисОтвет(200); // OK
    Ответ.УстановитьТелоИзСтроки("Данные успешно обработаны в 1С");
    Ответ.Заголовки.Вставить("Content-Type", "text/plain; charset=utf-8");
    
    Возврат Ответ;
    
КонецФункции

Вариант 2. Работа с PHP-стороны через cURL

На стороне PHP самым надежным инструментом для отправки данных в 1С является библиотека cURL. Выясним, как настроить передачу данных. Нам понадобится авторизация (так как база 1С обычно защищена) и передача заголовков.

Рассмотрим пример PHP-скрипта, который отправляет массив данных в 1С:


// Массив с данными (например, информация о заказе)
$orderData = [
    'order_id' => 12345,
    'customer' => 'Иванов Иван',
    'amount' => 1500.50
];

// Преобразуем в JSON
$payload = json_encode($orderData);

// Настройка cURL
$ch = curl_init('http://your-1c-server.ru/base_name/hs/exchange/v1/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);

// Установка заголовков
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Content-Length: ' . strlen($payload)
]);

// Авторизация (Basic Auth)
curl_setopt($ch, CURLOPT_USERPWD, "login_1c:password_1c");

// Выполнение запроса
$response = curl_exec($ch);

if(curl_errno($ch)) {
    echo 'Ошибка: ' . curl_error($ch);
} else {
    echo 'Ответ от 1С: ' . $response;
}

curl_close($ch);

Вариант 3. Использование стандарта CommerceML (CML)

Если вы всё же хотите использовать встроенные механизмы 1С для обмена (которые часто применяются в типовых конфигурациях для связи с Битриксом), вы можете реализовать генерацию XML в формате CommerceML.

Преимущество: В типовых конфигурациях 1С (УТ, УНФ, ERP) уже есть узлы обмена, которые «из коробки» понимают этот формат. Вам не придется писать код парсинга на стороне 1С.

Реализация: На стороне PHP вы создаете скрипт, который формирует XML-структуру с тегами <КоммерческаяИнформация>, <Каталог>, <Товар>. Структуру можно подсмотреть, выгрузив любой каталог из 1С в файл.

Безопасность и регламентные задания

Проанализируем важные аспекты безопасности, которые нельзя игнорировать при настройке обмена:

Итоги

Для самописного сайта на PHP идеальным решением будет связка HTTP-сервис в 1С + JSON + cURL на PHP. Это обеспечивает максимальную скорость работы, легкость отладки и отсутствие зависимости от громоздких стандартов. Если же база 1С типовая и вы не хотите менять конфигурацию (вносить изменения в код 1С), выбирайте формирование файлов в формате CommerceML — это позволит использовать стандартные модули обмена.

← На главную