Подавляющее большинство пользователей платформы ReadyScript используют интеграцию с 1С. Периодически к нам поступают вопросы в поддержку, связанные с обменом: авторизация не проходит, файл не передан, обмен завершился с ошибкой.
Перед нами возникает задача качественной отладки этого процесса. Что мы делаем в таком случае? Начинаем строить гипотезы, проверять их и постепенно отсекать не подтвердившиеся.
В этой статье мы подробнее расскажем о процессе отладки взаимодействия с 1С. Возможно данная информация будет полезна другим разработчикам, которые самостоятельно поддерживают клиентов.
Любая отладка всегда начинается с просмотра логов, поэтому если они у вас еще не были включены, обязательно включите их в разделе Управление -> Настройка системы -> Система логирования.
Рассмотрим наиболее часто возникающие ошибки:
- 1C по какой-то причине не может достучаться до сайта и выполнить запрос к нему.
В данном случае в логах ReadyScript не будет никаких записей, дата последнего обмена изменяться в разделе Товары -> Обмен данными с 1С не будет. Такую проблему нужно решать только на стороне, где установлена 1С, сайт тут не при чем. - Запрос дошел до сайта, но сайт не смог обнаружить авторизационные данные
В логах такая ошибка может отображаться как «Неверный логин или пароль». В середине 2023 года мы стали массово получать сообщения о данной ошибке, как выяснилось это произошло из-за массового обновления apache на подавляющем большинстве хостингов. В том обновлении логин и пароль Basic авторизации стали приходить в PHP в иных переменных. Для решения данной проблемы платформа ReadyScript, а также файл .htaccess в корне сайта должны быть обновлены до самой свежей версии. - Запрос дошел до сайта, но сайт не смог авторизовать клиента
Нужно заглянуть в логи, если там написано Неверный логин или пароль, значит ошибка вероятно действительно в неверном логине или пароле.
Если в логах написано «Запущен другой обмен», значит нужно дождаться завершения другого обмена, который работает в настоящее время, либо если никакой параллельный обмен в настоящее время не идет, нужно удалить файл блокировки в папке /storage/locks/exchange/.
Также нужно проверить не включен ли на сайте Складской учет в разделе Веб-сайт -> Настройка модулей -> Каталог -> Вкладка Складской учет. Для возможности обмениваться данными с 1С, складской учет должен быть выключен. - 1С пишет ошибку «файл не передан»
Такая ошибка может возникать по трем причинам:
- Если на хостинге закончилось свободное место
- Если на хостинге задан слишком низкий лимит на размер загружаемых данных. За это отвечают 2 переменные в настройках PHP – max_upload_filesize и max_post_size. Проверить можно в административаной панели ReadyScript в разделе Управление -> Настройка системы -> Утилита phpinfo
- Если по какой-то причине интернет на компьютере с 1С нестабильный - 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, перейдите в нее и выполните последовательно команды:
Далее создайте следующую структуру пустых папок внутри 1c-tester:
- data
- sale
- catalog
Затем поместите файлы import.xml и offers.xml в папку catalog, а orders.xml (опционально) в папку sale.
После этого вы уже можете использовать скрипт-эмулятор. Пример команды запуска:
Описание параметров:
-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
В случае успеха, вы увидите следующую информацию.
[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С.