carono / yii2-1c-exchange

Модуль yii2 для выгрузки цен и остатков из 1С
77 stars 24 forks source link

Ошибка при обмене #12

Open timilion opened 3 years ago

timilion commented 3 years ago

Доброе утро. Помогите пожалуйста исправить ошибку. При обмене возникает такая ошибка file_get_contents(/frontend/runtime/1c_exchange/classifier.xml): failed to open stream: No such file or directory в runtime/1c_exchange файл переименовался в classifier_2020-12-02 17.18.21.xml.bak

как это исправить и почему ошибка такая выходит? Спасибо за ответ

phrakon commented 3 years ago

Ошибка всплыла из-за https://github.com/carono/yii2-1c-exchange/commit/d1ffd7f8d74d4286b7f82cc56dcf87bbbb79c7ec

По крайней мере, если я добавляю там условие не трогать classifier.xml, то импорт идет

изображение

Это фрагмент лога как 1с обращается к серверу. Можно видеть, что init регулярно вызывается

aastrum commented 2 years ago

Возникла такая же ошибка, разобрался с ней самостоятельно.

Если каталог большой, то 1С может делить продукты на несколько xml файлов с названием import_<\d+>.xml Гуппы (категории) продуктов содержатся в файле classifier.xml. Каждый файл с продуктами при сохранении в БД сайта обращается к данному classifier.xml, для того, чтобы найти группу (категорию) товара.

Но здесь выявилась одна неувязочка - когда данный модуль сохранил в БД сайта первый файл с продуктами - import_01.xml, то он чистит все xml файлы, включая classifier.xml во временной директории, куда выгружаются из 1С все данные. Соответсвенно, когда модуль начинает парсить следующий файл с продуктами - import_02.xml, он не может уже найти classifier.xml, тк он был удален на первой итерации, вот и получается ошибка.

Решение - в исходниках модуля внести изменения, после которых файл classifier.xml не будет удаляться вообще.