При обмене заказами по CommerceML (у меня в МойСклад) CS-Cart отправляет XML-файл со всеми имеющимися заказами, начиная с определенного номера, не анализируя, были в заказах какие-либо изменения или нет. Получается, что даже если с момента последней синхронизации ничего в заказах не изменилось, не добавились новые заказы, то МойСклад обновляет все заказы, перебивая их теми же самыми данными.
Это порождает две проблемы:
Во-первых, если при синхронизации выгружаются все заказы, то от заказа к заказу будет расти размер передаваемого XML-файла. Я примерно посмотрел по имеющимся заказам - на 2000 заказов размер составит около 12 Мб. Зачем гонять такого размера файлы, если ничего в заказах не изменилось?
Во-вторых, если используется функция резервирования товаров в МоемСкладе, то обновление неизменившихся заказов приводит к тому, что каждый раз при синхронизации на всех заказах устанавливается резерв на товары. А это не нужно делать, так как у отмененных заказов мы снимаем резерв в МоемСкладе. Текущая процедура обновления будет ставить на резерв отмененные заказы, что не соответствует здравому смыслу. Отказаться от резервирование нежелательно - тогда МойСклад будет отправлять в CS-Cart остатки без учета поступивших заказов и количество товара в наличии на сайте не будет соответствовать действительности, невозможно будет пользоваться автоматической выгрузкой остатков.
Сейчас обе проблемы решаются настройкой не выгружать заказы с двумя финальными статусами - Выполнено и Отменено, потому что завершенные заказы имеют только один из этих статусов. Выгружаются только последние заказы, которые находятся в работе - имеют другие статусы. Но при установке в CS-Cart финальных статусов заказов, приходится заходить в МойСклад и вручную менять там статусы заказов, что неудобно.
В планах стоит сделать костыль через API, но хотелось бы, чтобы стандартный модуль работал с учетом действительности.
Предложение:
Доработать модуль таким образом, чтобы при очередной синхронизации выгружались бы только новые и измененные заказы.