Постачальник надсилає новий прайс в Excel. Менеджер звіряє артикули, переносить ціни в Odoo, а залишки перевіряє окремо на сайті постачальника. Між двома оновленнями файлу дані змінюються, і клієнт замовляє товар, якого вже немає. Стаття для власників і керівників операційних відділів дистриб'юторів, інтернет-реселерів і дилерів. Вона про автоматичний імпорт прайсу постачальника в Odoo двома каналами: через API постачальника і через XML-прайс. Товари, ціни й залишки оновлюються без ручного перенесення з Excel. Нижче: що саме Odoo при цьому отримує і що перевірити до старту.
Де ламається ручний прайс
Проблеми зазвичай одні й ті самі:
- Артикули в прайсі постачальника не збігаються з вашими. Помилку помічають, коли за неправильною ціною вже виставлено рахунок.
- Залишки старіють між оновленнями файлу. Так виникає overselling: товар продано, а в постачальника його вже немає.
- У кожного постачальника свій формат, і розібратися в прайсі вміє один співробітник.
Стандартний Odoo вміє завантажувати прайс постачальника з CSV або XLSX у вкладку закупівлі на картці товару (документація Odoo). Для разового завантаження цього досить, але файл ви готуєте й завантажуєте самі щоразу. Автоматизація починається там, де дані приходять без вашої участі.
Два способи: API постачальника і XML-прайс
Вибір залежить від того, що постачальник готовий вам віддати. Ми реалізували обидва підходи: інтеграцію через API постачальника і імпорт XML-прайсів. Нижче описано, що вони вміють і де межі.
Дилерське API
Постачальник з дилерським API видає вам ключ. З цим ключем Odoo сам читає каталог за розкладом. У нашій реалізації за замовчуванням рубрики й каталог оновлюються раз на добу вночі, фото щогодини. Те саме можна запустити кнопкою вручну. Кнопка «Перевірити підключення» підтверджує, що ключ працює, а поки перевірки немає, планові завдання не виконуються.
Odoo отримує код постачальника, артикул виробника, назву, рубрику, ціну дилера, рекомендовану роздрібну ціну та залишок, розкладений на «доступно», «основний склад», «очікується», «зарезервовано» й «під замовлення». Ціну закупівлі модуль записує в прайс постачальника на картці товару, у гривні, з кодом постачальника. Нульові ціни не записуються. Ціну продажу за замовчуванням модуль не чіпає. За бажанням її беруть з рекомендованої роздрібної ціни, з ціни дилера чи ціни з ПДВ або рахують за формулою.
XML-прайс
Якщо API немає, постачальник зазвичай дає XML-файл. Його завантажують у майстер імпорту вручну або за посиланням. Назви тегів (артикул, штрихкод, ціна, залишок, категорія, бренд, фото) задаються в записі постачальника, тож під структуру конкретного прайсу налаштовується саме цей запис.
Є два режими: повний каталог (створення й оновлення товарів) і «лише ціни й залишки» для товарів, які вже є в Odoo. Файл розбирається фоновою чергою. Автозавантаження файлу за розкладом у цьому модулі немає, його можна налаштувати додатково.
Що саме потрапляє в Odoo
Зіставлення товарів. З API Odoo шукає товар за ручним зв'язком, потім за кодом постачальника в прайсі, потім за артикулом виробника, і лише якщо знайдено один товар. Неоднозначні випадки потрапляють у список «Потребує уваги»: ви обираєте товар або ігноруєте позицію. З XML товар шукається за штрихкодом або артикулом, а дубль дає помилку, а не злиття. Прапорець «не оновлювати» на картці товару захищає ручні правки.
Нові товари. У варіанті з API типова політика «лише вручну»: без вашого рішення Odoo нічого не створює, а за потреби можна обрати «усі товари каталогу» або «за рубриками». Для наявних товарів оновлюються ціни, назва й категорія лишаються як є. У XML-варіанті новий товар створюється, якщо залишок більший за нуль і категорію дозволено до імпорту.
Залишки. Залишок постачальника зберігається окремо від складу Odoo. У варіанті з API це поля синхронізації й обчислюване поле на картці товару, у XML-варіанті поле в рядку цього постачальника. Він показує, чи є товар у постачальника, і не змінює складські залишки.
Зниклі позиції. З API ціна постачальника для позиції, що зникла з каталогу, закривається вчорашньою датою, а товар не архівується. XML-імпорт зниклі позиції не відстежує.
Помилки. З API кожен рядок обробляється окремо: збій одного не зупиняє решту, причина записується, підсумок проходу зберігається. З XML помилки видно на записах черги, їх можна відфільтрувати й обробити повторно. Автоповторів і сповіщень немає.
Як це вписується в закупівлі й власний склад
Ціна постачальника на картці товару працює як у стандартному Odoo: підставляється в замовлення на закупівлю. Власний склад ведеться звично, через надходження й відвантаження, а залишок постачальника лишається довідковим. Передачу замовлень постачальнику в описаних інтеграціях не заявляємо: її можна додати окремою доробкою, якщо це дозволяє API постачальника.
Доступність для продажу можна прив'язати до залишку постачальника. Наприклад, налаштувати, щоб поки в когось із постачальників є залишок, товар лишався доступним для продажу, а коли в постачальників нуль і власного залишку немає, ознака «можна продавати» знімалась. Це налаштування під проєкт, а не готова функція з коробки.
Дропшипінг, експорт на маркетплейси й автоматичне зняття з публікації в цих інтеграціях відсутні. Їх можна реалізувати додатково.
Що перевірити перед стартом
- Канал постачальника: API з ключем чи XML? Excel, CSV, JSON і FTP наш XML-імпорт не читає, для них потрібна окрема розробка.
- Ідентифікатор: чи є в прайсі артикул, штрихкод або код постачальника, який можна зіставити з вашими товарами.
- Свіжість: дані не новіші, ніж їх публікує постачальник, а каталог з API за замовчуванням оновлюється раз на добу.
- Валюта: XML-імпорт записує ціни числом без конвертації, а API-варіант бере гривневу ціну постачальника.
- Ціна продажу: не чіпати, брати рекомендовану ціну постачальника чи рахувати за формулою.
- Контент: API-варіант не імпортує опис і характеристики. XML-варіант бере опис лише під час створення товару, а атрибути зіставляє через таблицю псевдонімів, яку заповнює людина.
- Відповідальний: хто щодня переглядає «Потребує уваги» й помилки.
- Пілот: структуру прайсу чи ключ перевіряють на реальних даних до запуску на повному обсязі.
Питання й відповіді
Чи потрапляє залишок постачальника на склад Odoo?
Ні. Він зберігається окремим полем і показує, що товар є у постачальника. Складські залишки Odoo змінюють лише ваші надходження й відвантаження.
Це працює в реальному часі?
Ні. З API каталог за замовчуванням оновлюється раз на добу. XML-варіант оновлюється, коли файл завантажено й оброблено.
Чи можна завантажувати прайс з Excel?
Стандартний Odoo приймає CSV і XLSX, але це ручне завантаження (опис імпорту). Описані тут інтеграції працюють з API і XML.
Чи може Odoo передавати замовлення клієнта постачальнику?
Описані інтеграції імпортують дані постачальника й замовлення не передають. Таку передачу можна додати окремою доробкою, якщо API постачальника її підтримує.
Що далі
Дані постачальника заходять в Odoo, а на маркетплейси їх виводять окремі інтеграції, наприклад Rozetka і Prom.ua. Щоб зрозуміти, який підхід підійде вашому постачальнику, напишіть нам через форму і опишіть, як постачальник віддає прайс і залишки: API, посилання на XML чи файл. Ми скажемо, що можна підключити готовим підходом, а що потребує доробки. Терміни й вартість називаємо після перегляду прайсу.