Изменения, которые должны будут решить проблемы с обменом большого количества товаров, со стороны Моего Склада, будут включены в версию 4.15.2.
При необходимости, их можно внести уже сейчас, применив .diff файл из приложенного архива.commerceml.zip (1,2 КБ)
Лично хочу объяснить, почему возникла проблема и возможно это же объяснит, почему она так долго решалась.
Для обмена с системой учёта, Мой Склад, как и 1С, использует стандарт CommerceML, который должен следовать Протоколу Обмена Данных.
В данном протоколе не указано никаких ограничений на время выполнения операции обмена данными, однако на стороне Моего Склада было решено поступить иначе, причём негласно (в публичном доступе, какой-либо информации на этот счёт мы найти не смогли). После длительного общения с их поддержкой, мы выяснили нюансы работы их системы обмена, которые я позволю себе процитировать:
Если на первый запрос мы получили статус progress, то через 30 секунд отправляем новый запрос, но между запросами таймаут увеличивается - до 45 секунд. Увеличить лимит на отправку запросов, увы, нет возможности с нашей стороны.
В результате чего, со стороны Моего Склада каждые 45 секунд отправлялись новые запросы на обработку уже обрабатываемых данных, вне зависимости от результатов предыдущих запросов. Это приводило к тому, что одна и та же выгрузка начинала обрабатываться параллельно в несколько потоков, что могло создавать ошибки записи в БД, т.к. два и более идентичных процесса пытались внести в БД магазина одни и те же записи.
В свою очередь, мы подстроились под эти ограничения: теперь, по прошествии определённого времени, процесс импорта прекращается и на сторону Моего Склада отправляется ключевое слово progress
. После этого, Мой Склад отправит новый запрос и параллельных процессов обработки одних и тех же данных уже не возникнет.