Вводные
- Конфигурация 1С: Управление торговлей 11
- Сайт с возможностью обмена по API и отсутствием хранения внешних ключей, например WooCommerce (документация), PrestaShop (документация)
- Требуется организовать
- обмен справочниками
- обновление цен/остатков
- загрузку заказов
- Настройка обмена с сайтом вынесена в отдельный справочник
Реализация
Общее описание
Храню внешних ключи в регистре сведений. Регистрацию изменений сделал за счет регистра сведений
Перед отправкой данных проверяю есть ли ключ для объекта
- если есть то формирую тело запроса, проверяю на совпадение с хешем,
- если не совпадает то использую PUT запрос
- если ключа нет, то использую POST запрос.
Если элемент успешно обработан, то
- при добавлении фиксирую его ключ
- фиксирую отправленный хэш
- удаляю регистрацию
Хранение внешних ключей
Использую регистр сведений "ос_ИдентификаторыОбъектов"
- Измерения
- НастройкаОбмена
- ТипДанных
- Объект
- Ресурсы
- Идентификатор, тип "Число", можно использовать и строку при необходимости, обычно во внешних системах ключ типа int()
Хранение хешей
Использую регистр сведений "ос_ОтправленныеДанные"
- Измерения
- НастройкаОбмена
- Объект
- Реквизиты
- СтрокаДанныеХэш
- Дата
Хранение изменений
Прочитав статью //infostart.ru/1c/articles/899200/ решил написать свой неблокируемый вариант. Общий подход: пишем изменения в регистр с "ТекущаяДата()", для отправки забираем изменения "ТекущаяДата() - 1", тем самым записи с которыми работам при обмене не пересекаются с записями которые формируются в ходе работы базы.
Для объектов использую регистр сведений "ос_ИсторияИзменений"
- Измерения
- НастройкаОбмена
- Дата
- Тип
- Объект
Для регистров сведений формирую отдельные регистры "ос_ИсторияИзмененияОстатков" и "ос_ИсторияИзмененияЦен"
Выгрузка иерархии
Для выгрузки нужна была таблица групп номенклатуры отсортированная по уровням иерархии, вариант решения через транзитивное замыкание, описание в //infostart.ru/1c/articles/899200/.
Проект на GitHub (ссылка).
Проект в полусобранном состоянии, т.к. для универсального решения нужно выделить код из текущих наработок. Если нужно уточнить реализацию - пишите, по возможности проект уточню/расширю.
Благодарю за внимание.