Сергей Сорокин · Выгрузка из 1С и данные на сайте
Как обновлять сложный каталог частями из 1С
Опубликовано Обновлено
Если в 1С изменилась цена товара, для ее передачи не обязательно заново отправлять все фотографии и характеристики каталога. Но сокращенный файл должен соответствовать правилам обработчика на сайте. Иначе пропущенная запись может означать для него удаление, а не отсутствие изменений.
Договориться, какую часть каталога обновляет файл
В Unimart24 я дорабатывал обработку выгрузки из 1С на стороне сайта. Цены приходят с указанием документа 1С, к которому относятся записи. Обработчик различает полный набор цен этого документа и набор с более узким отбором. При загрузке учитывается товар, вид цены и упаковка. Правила замены данных зависят от состава переданного набора.
В своем магазине согласуйте с разработчиком сайта и специалистом по 1С, что будет приходить отдельно. Например, файл обновляет цены выбранных товаров, а характеристики и изображения остаются прежними. Запишите, какие товары и виды цен входят в обновление и как сайт сопоставляет их с сохраненными записями. Одного названия «частичная выгрузка» для этого недостаточно.
Определить, что означает отсутствующая запись
Если файл содержит цены выбранных товаров, остальные цены могут сохраняться без изменений. Если файл передает полный состав цен документа, отсутствие прежней записи может означать, что ее нужно удалить. Эти варианты нужно различать при подготовке файла и его обработке.
В обработчике Unimart24 эта разница учитывается при замене цен. Для состава раздела действует другое правило: обработчик сопоставляет пришедший список товаров с сохраненными привязками и снимает отсутствующие дополнительные привязки. Основной раздел товара сохраняется. Поэтому список одного раздела нельзя сокращать до изменившихся товаров без проверки этого механизма. Сам товар при снятии привязки не удаляется.
Отдельно согласуйте нулевое значение, пустой список и отсутствие поля. Цена 0, отсутствие цены в файле и команда удалить цену описывают разные действия. Попросите специалистов показать, как каждое из них передается и что сайт сохраняет после обработки.
Учесть данные, от которых зависит цена
Для нового товара цена должна попасть к нужной записи на сайте. Если она относится к упаковке, обработчику нужны и сведения об этой упаковке. Попросите разработчика объяснить, что происходит, когда цена приходит раньше товара или связанного справочника: запись ожидает обработки, пропускается или попадает в журнал ошибок.
В Unimart24 карточка использует единицу товара, упаковку и коэффициент пересчета. Если меняется упаковка, при приемке нужно сравнить цену за единицу, цену упаковки и количество в корзине. Новая цена на сайте еще не подтверждает правильность количества в выбранной упаковке.
Отделить прием файла от результата на сайте
В стандартном протоколе обмена Битрикса успешная доставка файла и успешная обработка файла подтверждаются отдельно. При разборе ошибки уточняйте, к какому действию относится ответ. Сам факт получения файла не означает, что покупатель уже видит новую цену.
Обработчик Unimart24 сохраняет текущий этап и позицию внутри него. Большие наборы записей он обрабатывает порциями; следующий запуск читает сохраненное состояние. В журнале остаются результаты операций и ошибки. При этом отметка о завершении в изученном коде записывается и при накопленных ошибках, поэтому после нее нужно проверить журнал и данные товара.
- Файл полученСверить, какой файл сайт принял и когда закончилась его передача.
- Обработка законченаПроверить отметку о завершении и ошибки по этому обновлению.
- Данные совпадаютСравнить согласованные значения из 1С с карточкой товара и корзиной.
Проверить продолжение после прерывания
До повторной отправки попросите разработчика найти файл и выяснить, на каком этапе остановилась обработка, какую позицию сохранил сайт и какая ошибка возникла последней. Продолжение сохраненного этапа и новая загрузка того же файла могут выполнять разные действия. По номеру этапа нельзя определить, успел ли сайт записать данные перед сбоем.
Сохранение позиции в Unimart24 помогает продолжать обработку порциями, но само по себе не доказывает безопасный повтор после любой ошибки. Если запись товара уже изменилась, а позиция еще не сохранилась, следующий запуск может снова обработать эту запись. Попросите разработчика воспроизвести этот случай для вашей интеграции в тестовой среде: прервать обработку после изменения данных, продолжить ее и сравнить результат.
Сверить изменения и данные, которые должны сохраниться
Для приемки возьмите тестовые товары и заранее запишите ожидаемый результат каждого обновления. Используйте тестовые копии сайта и 1С, чтобы проверка не меняла рабочий каталог и не затрагивала покупателей. Проверьте следующие сценарии:
- Измените цену выбранного товара. Сравните новую цену на сайте и прежние цены товаров, которые не входили в обновление.
- Передайте новый товар вместе с его ценой и упаковкой. Сверьте привязку цены, количество в упаковке и сумму в тестовой корзине.
- Уберите цену из полного состава документа и сверьте результат с согласованным правилом удаления. Проверьте сохранность цен, которые не входили в обновление.
- Уберите товар из полного состава раздела. Если по правилам обмена снимается дополнительная привязка, проверьте ее снятие, сохранность самого товара и его основного раздела.
- Передайте нулевое значение или пустой список по согласованному правилу. Сверьте, что сайт обнулил, сохранил или удалил нужные данные.
- Прервите обработку и выполните предусмотренное продолжение, затем повторно передайте файл. Сравните итоговые значения, число записей и ошибки в журнале.
