0

Товар успешно добавлен в корзину

Оформить заказ

Отладка и доработка обмена данными с 1С без использования 1С

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

Перед нами возникает задача качественной отладки этого процесса. Что мы делаем в таком случае? Начинаем строить гипотезы, проверять их и постепенно отсекать не подтвердившиеся.

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

Любая отладка всегда начинается с просмотра логов, поэтому если они у вас еще не были включены, обязательно включите их в разделе Управление -> Настройка системы -> Система логирования.

1с_log

Рассмотрим наиболее часто возникающие ошибки:

  1. 1C по какой-то причине не может достучаться до сайта и выполнить запрос к нему.
    В данном случае в логах ReadyScript не будет никаких записей, дата последнего обмена изменяться в разделе Товары -> Обмен данными с 1С не будет. Такую проблему нужно решать только на стороне, где установлена 1С, сайт тут не при чем.

  2. Запрос дошел до сайта, но сайт не смог обнаружить авторизационные данные
    В логах такая ошибка может отображаться как «Неверный логин или пароль». В середине 2023 года мы стали массово получать сообщения о данной ошибке, как выяснилось это произошло из-за массового обновления apache на подавляющем большинстве хостингов. В том обновлении логин и пароль Basic авторизации стали приходить в PHP в иных переменных. Для решения данной проблемы платформа ReadyScript, а также файл .htaccess в корне сайта должны быть обновлены до самой свежей версии.

  3. Запрос дошел до сайта, но сайт не смог авторизовать клиента
    Нужно заглянуть в логи, если там написано Неверный логин или пароль, значит ошибка вероятно действительно в неверном логине или пароле.

    Если в логах написано «Запущен другой обмен», значит нужно дождаться завершения другого обмена, который работает в настоящее время, либо если никакой параллельный обмен в настоящее время не идет, нужно удалить файл блокировки в папке /storage/locks/exchange/.

    Также нужно проверить не включен ли на сайте Складской учет в разделе Веб-сайт -> Настройка модулей -> Каталог -> Вкладка Складской учет. Для возможности обмениваться данными с 1С, складской учет должен быть выключен.

  4. 1С пишет ошибку «файл не передан»
    Такая ошибка может возникать по трем причинам:
    - Если на хостинге закончилось свободное место
    - Если на хостинге задан слишком низкий лимит на размер загружаемых данных. За это отвечают 2 переменные в настройках PHP – max_upload_filesize и max_post_size. Проверить можно в административаной панели ReadyScript в разделе Управление -> Настройка системы -> Утилита phpinfo
    - Если по какой-то причине интернет на компьютере с 1С нестабильный

  5. 1С не шлет запросы type=catalog&mode=import после type=catalog&mode=file
    Такое может возникать, если в настройках обмена данными с сайтом в 1С установлен флажок «Выгружать без подтверждения». Необходимо обязательно снять данный флажок.

    Еще одной причиной может быть то, что 1С по какой-то причине не получает от сайта в ответ на запрос type=catalog&mode=file значение «success», из-за этого 1С не переходит к следующей команде.

Но что делать, если клиент просит доработать обмен данными или жалуется, что во время обмена не импортируются какие-то данные? Ведь доступа к клиентской 1С у разработчика нет.

В этом случае будет достаточно иметь файлы import.xml (основные сведения о товарах), offers.xml (сведения о комплектациях, ценах и остатках) и опционально orders.xml (файл с заказами), чтобы при помощи нашего специально разработанного эмулятора выполнять запросы к сайту.

Эмулятор запросов от 1С в формате commerceML

Острая необходимость такого эмулятора просто летала у нас в воздухе. Каждый новый сотрудник, когда сталкивался с вопросами клиентов про 1С впадал в ступор и в его глазах читалось: «У меня же нет такой базы, как у клиента, как я воспроизведу ошибку?» или «Я не знаю 1С, я же веб-разработчик».

В общем мы по удивлялись какое-то время, что такого еще нет на просторах интернета и сели писать свой эмулятор. Встречайте – первый в России эмулятор модуля обмена 1С по формату commerceML 2 на PHP доступен здесь:
https://github.com/readyscript-cms/1c-tester

Как им пользоваться?

Для начала работы у вас уже должны быть установлены:

  • Composer
  • PHP 8.1 из консоли
  • Git (опционально, если его нет качайте архив с github)

Создайте папку на вашем ПК, например 1c-tester, перейдите в нее и выполните последовательно команды:

git clone https://github.com/readyscript-cms/1c-tester ./

composer install

Далее создайте следующую структуру пустых папок внутри 1c-tester:

  • data
    • sale
    • catalog

Затем поместите файлы import.xml и offers.xml в папку catalog, а orders.xml (опционально) в папку sale.

После этого вы уже можете использовать скрипт-эмулятор. Пример команды запуска:

php 1cexchange.php -s https://example.com/site1/exchange/ -l yourlogin@example.com -p your-password -t catalog

Описание параметров:

-s [url] - URL куда скрипт будет слать запросы
-l [login or email] - логин -p [password] - пароль от админ. панели
-t [catalog|sale] - тип выгрузки (может быть sale или catalog), если не используется --all
--all для выгрузки сразу и каталога и заказов. Использовать, если не задан параметр -t

Рассмотрим, что делает скрипт эмулятора

Скрипт последовательно выполняет следующие запросы точно также, как это делала бы 1С.

Для товаров:

GET https://example.com/site1/exchange/?type=catalog&mode=checkauth
GET https://example.com/site1/exchange/?type=catalog&mode=init
POST https://example.com/site1/exchange/?type=catalog&mode=file&filename=data.zip
GET https://example.com/site1/exchange/?type=catalog&mode=import&filename=import.xml
GET https://example.com/site1/exchange/?type=catalog&mode=import&filename=offers.xml

Для заказов:

GET https://example.com/site1/exchange/?type=sale&mode=checkauth
GET https://example.com/site1/exchange/?type=sale&mode=init
POST https://example.com/site1/exchange/?type=sale&mode=file&filename=data.zip
GET https://example.com/site1/exchange/?type=sale&mode=import&filename=orders.xml

В случае успеха, вы увидите следующую информацию.

C:\1c-tester>php 1cexchange.php -s http://example.com/site1/exchange/ -l admin@example.com -p 123123 -t catalog
[10:22:09] [1CTester] Выгрузка catalog
[10:22:09] [1CTester] Попытка авторизации по указанным данным
[10:22:09] [1CTester] Авторизация успешна!
[10:22:09] [1CTester] Инициализация
[10:22:09] [1CTester] Инициализация успешна
[10:22:09] [1CTester] Начинаем процесс выгрузки файлов (ZIP)
[10:22:09] [1CTester] Формируем zip-архив из data
[10:22:09] [1CTester] Закончили формировать архив.
[10:22:09] [1CTester] Начинаем побайтовую отправку архива
[10:22:09] [1CTester] 0/35090 байт
[10:22:09] [1CTester] Грузим 35090/35090 байт
[10:22:09] [1CTester] Загрузили 35090/35090 байт
[10:22:09] [1CTester] Начинаем обработку импорта
[10:22:10] [1CTester] Файл import.xml успешно загружен
[10:22:10] [1CTester] Файл offers.xml успешно загружен
[10:22:10] [1CTester] Программа завершила свою работу. Все файлы загружены

 В случае, если в процессе обмена возникнут ошибки, они будут отображены в консоли.

Заключение

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

В целом наш эмулятор хоть и тестировался исключительно на нашей платформе ReadyScript, но теоретически он подойдет и для любой другой платформы. Путь это будет наш небольшой вклад в решение общей проблематики отсутствия экосистемы 1С для независимых от франчайзи разработчиков.

Надеемся, что нашим партнерам данная разработка также будет полезна как для отладки стандартного обмена, так и для различного рода доработок обмена с 1С.


30 октября 2023 13:52, Артем Полторанин
Рассказать друзьям: