Імпорт каталогу з XLSX (Prom.ua / EVO)

27 хв

Майданчики родини EVO — Prom.ua, satu.kz, deal.by — дозволяють вивантажити весь каталог у файл Excel (XLS, XLSX або CSV) і так само завантажити його назад. Формат файлу імпорту й експорту в них однаковий, тож той самий файл працює в обидва боки. Elbuz читає цей файл напряму: розбирає його аркуші, розкладає значення по картках товарів і, що важливо, зберігає навіть ті поля Prom, яким у стандартній картці немає прямого місця.

Ця стаття — не «натисніть кнопку й усе з'явиться», а докладний розбір: які колонки файлу в які поля потрапляють, за якою логікою зіставляються товари, які обмеження мають поля і як ті самі дані потім вивантажуються назад. Це один зі способів завантаження з огляду завантаження даних: формат Prom має готовий шаблон, тож колонки розмічати вручну не треба — програма впізнає їх за назвами.

Офіційний опис формату — у довідці Prom: Імпорт через Excel — формат файлів XLS(X) та CSV. Тут же ми пояснюємо, як той самий формат читає й зберігає саме Elbuz.

Вікно «Завантаження» зі списком шаблонів імпорту
1Шаблон «XLSX - prom.ua, satu.kz, deal.by»
2Створити новий шаблон
  1. Рядок шаблону типу «XLSX - prom.ua, satu.kz, deal.by», за яким завантажують каталог із Prom.ua, Satu.kz, Deal.by.
  2. Кнопка «Додати» відкриває форму створення нового шаблону завантаження.

Структура файлу: два аркуші

Excel-файл Prom (XLS/XLSX) містить два аркуші, і Elbuz читає їх за назвами:

  • «Export Products Sheet» — товари. Кожен рядок, крім першого, — це один товар; перший рядок — заголовки колонок.
  • «Export Groups Sheet» — групи (категорії): їхні номери, назви, ідентифікатори та зв'язок «батько–дитина».

У форматі CSV аркуш лише один (тільки товари), у кодуванні UTF-8 або UTF-16. Перший рядок кожного аркуша — заголовки: Elbuz зіставляє їх із відомими назвами полів і так визначає, у якій колонці що лежить. Назви розпізнаються і російською, і українською (Код_товара = Код_товару, Название_позиции = Назва_позиції тощо), тож обидві мовні версії файлу читаються однаково. Порядок колонок значення не має — важлива саме назва в заголовку; якщо якоїсь колонки немає, відповідне поле лишиться порожнім.

Із трьох форматів, які вміє віддавати Prom, Elbuz читає лише .xlsx. Поле вибору файлу пропускає тільки таке розширення, а на сервері файл додатково перевіряється на початок книги Open XML — старий .xls і .csv, перейменовані в .xlsx, теж не пройдуть. Не той файл зупиняє прогін ще до розбору повідомленням «Файл не є книгою XLSX. Prom.ua, Satu.kz і Deal.by вивантажують каталог у форматі .xlsx — старий .xls не підтримується. Відкрийте файл в Excel і збережіть як «Книга Excel (.xlsx)».», і каталог при цьому не змінюється взагалі.

Головне: ідентифікатори і логіка зіставлення

Найважливіше для повторних завантажень — як програма впізнає, що товар із файлу вже є в каталозі. Від цього залежить, оновиться наявна картка чи створиться дубль. За це відповідають кілька колонок, і Elbuz використовує їх у такому порядку:

Колонка файлуЩо цеРоль при зіставленні
Ідентифікатор_товарувнутрішній ідентифікатор товару в системі Prom (у самому Prom це обов'язкове поле для однозначного зіставлення)головний ключ: за ним товар упізнається насамперед (зберігається у внутрішнє поле картки)
Унікальний_ідентифікаторчисловий службовий номер товару Prom; заповнюється Prom автоматично при експорті, вручну його міняти не можназапасний ключ: використовується, якщо перший порожній
Код_товаруваш артикул (SKU), до 25 символівне ключ Prom: записується в картку як артикул і MPN

Логіка така: спочатку Elbuz шукає товар за Ідентифікатором_товару. Якщо цю колонку не заповнено — шукає за Унікальним_ідентифікатором. А якщо не заповнено жодного ідентифікатора — товар вважається новим, і для нього створюється власний внутрішній ключ. Саме тут криється типова пастка: якщо у файлі немає стабільних ідентифікаторів, кожне повторне завантаження створюватиме дублі замість оновлення. Тому файл, вивантажений із самого Prom (де ідентифікатори вже проставлені), — найнадійніше джерело; саморобний файл без ідентифікаторів варто спершу перевірити на невеликій частині.

ТакНіТакНіТакНіфайл без ідентифікаторівщоразу проходить цимшляхомРядок товару у файліЗаповнено«Ідентифікатор_товару»?Пошук картки за ним —це головний ключЗаповнено«Унікальний_ідентифікатор»?Пошук картки за ним —запасний ключТовар вважається новимКартку знайдено?Наявна карткаоновлюєтьсяСтворюється нова картказ власним внутрішнімключемПовторне завантаженнянаробить дублів
За яким ключем програма впізнає товар. Пунктирна стрілка показує, куди веде файл без ідентифікаторів

Prom розрізняє ваш артикул (Код_товару — його задаєте ви) і свій внутрішній ідентифікатор (Ідентифікатор_товару / Унікальний_ідентифікатор — його присвоює сам Prom). Для повторного оновлення без дублів Elbuz спирається саме на внутрішній ідентифікатор Prom, а не на артикул: артикул продавці іноді змінюють, а внутрішній ID лишається сталим.

Куди саме лягають ці ідентифікатори в нас — це варто знати, бо саме вони тримають синхронізацію з Prom:

  • Ідентифікатор_товару зберігається у системне поле товару «UUID» — унікальний ключ товару в Elbuz. Це головний ключ зіставлення: при імпорті в UUID лягає Ідентифікатор_товару з файлу.
  • Унікальний_ідентифікатор Prom потрапляє в окреме додаткове поле з такою ж назвою (службовий числовий номер товару на Prom).

Пріоритет заповнення UUID при імпорті такий: спершу — Ідентифікатор_товару; якщо його у файлі немає — Унікальний_ідентифікатор; якщо немає й того — Elbuz генерує власний UUID для нового товару. Далі цей UUID стає постійним ключем цієї позиції у вашому каталозі.

Куди потрапляють основні значення картки

Частина колонок лягає прямо в рідні поля картки товару — ті, що є в кожній картці Elbuz:

Колонка файлуПоле картки в Elbuz
Назва_позиції / Назва_позиції_укрназва товару (українська версія — в українську мову картки)
Ціна + Валютаціна (переводиться у вашу базову валюту за курсом)
Кількістьзалишок
Наявністьстатус наявності (див. розділ про символи)
Номер_групи / Назва_групи / Ідентифікатор_групикатегорія товару (прив'язка до дерева з аркуша груп)
Виробниквиробник (додається у довідник, якщо ввімкнено)
Опис / Опис_укропис товару (укр. версія — в українську мову)
HTML_заголовок / HTML_опис / HTML_ключові_слова (+ _укр)meta-title, meta-description, meta-keywords картки
Вага, Ширина, Висота, Глибина, Довжинавагогабаритні поля картки
Код_маркування_(GTIN)GTIN (штрихкод для Google Merchant)
Посилання_зображенняфото товару (кілька URL через кому+пробіл; перше — головне)

Артикул (Код_товару) записується одразу у два поля картки — артикул і MPN. Ціна перед збереженням приводиться до вашої базової валюти: якщо у файлі ціни в іншій валюті, Elbuz бере курс за кодом валюти й перераховує. Категорія товару зв'язується з деревом груп із аркуша «Export Groups Sheet», а якщо групи товару там немає — вона створюється автоматично з номера й назви, вказаних у самому рядку товару.

У Prom діє окреме правило: щоб оновилась українська версія товару, у файлі мають бути заповнені обидва українські поля — і Назва_позиції_укр, і Опис_укр. Якщо заповнити лише одне з них, переклад на боці Prom не оновиться. Elbuz же приймає українські поля в українську мову картки як є — але тримайте це правило Prom у голові, коли готуєте файл для зворотного вивантаження.

Формати й обмеження значень

У полів Prom є конкретні формати, і файл варто готувати з їх урахуванням — інакше майданчик відхилить рядок або обріже значення:

  • Код_товару — до 25 символів (цифри, кирилиця, латиниця, знаки - _ . / та пробіл).
  • Назва_позиції — до 110 символів (рос.), Назва_позиції_укр — до 130.
  • Опис / Опис_укр — до 12160 символів; HTML_заголовок/опис — до 250 (рос.) / 270 (укр.).
  • Ціна — число від 0.01; Валюта — код (UAH, USD, EUR, PLN, KZT…) або скорочення (грн, дол, $).
  • Тип_товару — літера: r — лише роздріб, w — лише опт, u — і опт, і роздріб, s — послуга.
  • Одиниця_виміру — зі списку Prom (шт., упаковка, комплект, пара, м, кг, л, набір…).
  • Оптова_ціна та Мінімальне_замовлення_опт — кілька значень через ;; Подарунки/Супутні — номери рядків або ID через ;.
  • Знижка — число або відсоток (наприклад, 12.5 або 30%) з датами дії «від/до».

Elbuz зберігає ці значення такими, як вони у файлі (у відповідні поля картки — див. нижче), а перевірку на відповідність вимогам Prom робить уже сам майданчик під час вивантаження. Тому чистий, коректний за форматом файл заощаджує час на обох кінцях.

Наявність: символи Prom і формула зворотного зв'язку

Наявність у файлі Prom кодується символами, і Elbuz переводить їх у свої статуси наявності:

  • + (або ! — «готово до відправки») → у наявності;
  • - → немає в наявності;
  • & → очікується;
  • @ → послуга;
  • цифра (наприклад, 7) → під замовлення (кількість днів на доставку);
  • порожнє поле → «немає в наявності» (так задумано в Prom).

Найцікавіше — що поле наявності працює у два боки. Разом із додатковим полем «Наявність» Elbuz створює для нього формулу, яка рахує символ Prom не зі старого значення файлу, а з поточного статусу наявності товару у вашому каталозі: «у наявності» перетворюється на +, «немає» — на -, «очікування» — на & і так далі. Тому коли ви вивантажуєте каталог назад на Prom, наявність завжди свіжа — така, яка зараз у вашій системі, а не застигла на моменті імпорту.

Додаткові поля, які створюються автоматично

У Prom значно більше полів, ніж у стандартній картці товару. Щоб нічого з файлу не втратити, Elbuz під час імпорту сам створює в базовому каталозі відповідні додаткові поля й записує туди ці значення. Тобто картка не «обрізає» файл Prom до кількох стандартних полів — вона зберігає його вміст повністю. Ось основні групи таких полів, що з'являються в картці після першого імпорту:

  • Ціни й замовлення: Оптова_ціна, Мінімальний_обсяг_замовлення, Мінімальне_замовлення_опт, Ціна_від, Знижка, Термін_дії_знижки_від/до.
  • Логістика й пакування: Можливість_постачання, Термін_поставки, Спосіб_пакування (+ укр.), Одиниця_виміру, Де_знаходиться_товар, Країна_виробник, Гарантійний_термін.
  • Класифікація Prom: Тип_товару, Ярлик, Номер_групи, Назва_групи, Ідентифікатор_підрозділу, Ідентифікатор_групи, ID_групи_різновидів, Номер_пристрою_(MPN).
  • Контент і SEO: Ключові_слова, Пошукові_запити, Особисті_нотатки та українські версії назви, опису й meta-полів.
  • Зв'язки й службове: Подарунки, Супутні (та їхні ID), Товар_на_видалення й Причина_видалення, Унікальний_ідентифікатор (окреме індексоване поле під внутрішній номер Prom).

Ці поля видно в картці товару поряд зі стандартними, і з ними можна працювати як зі звичайними: фільтрувати, показувати в сітці, використовувати у формулах і — головне — вивантажувати назад.

Розкритий блок «Користувацькі поля» у картці товару Masalta MS 100-2 з полями фіда Prom
1Уникальный_идентификатор — внутрішній номер товару Prom
2Оптовая_цена — одне з десятків полів фіда Prom
  1. Уникальный_идентификатор — внутрішній номер товару в системі Prom, приходить із фіда без змін.
  2. Оптовая_цена — одне з десятків користувацьких полів, яке фід Prom.ua додає до картки товару.

Повний цикл: імпорт і експорт — одне ціле

Формат Prom влаштований так, що файл імпорту й файл експорту — однакові. Тому поля, у які імпорт записав дані, — це ті самі поля, з яких дані потім вивантажуються назад на Prom. Зокрема, наш UUID товару на вивантаженні лягає назад у колонку Ідентифікатор_товару, а додаткове поле «Унікальний_ідентифікатор» — у однойменну колонку. Так замикається цикл: завантажили каталог Prom → попрацювали з ним у Elbuz → вивантажили назад, і Prom упізнає свої товари.

Сценарій: ви додали новий товар у Elbuz

Розберемо саме той випадок, що найчастіше бентежить. Ви завантажили каталог із файлу Prom — кожен товар отримав UUID, що дорівнює його Ідентифікатору_товару на Prom. Потім у базовому каталозі Elbuz ви створили новий товар — йому програма присвоїла власний новий UUID, а поля «Унікальний_ідентифікатор» у нього немає (він не приходив з Prom). Що станеться на вивантаженні назад:

  • у колонку Ідентифікатор_товару потрапить новий UUID цього товару — значення, якого на Prom ще немає;
  • колонка Унікальний_ідентифікатор для нього піде порожня — Elbuz навмисно лишає її порожньою, якщо внутрішнього номера Prom у товару немає.

Коли такий файл завантажується на Prom, майданчик зіставляє товари за Ідентифікатором_товару. Наявні (чий Ідентифікатор_товару Prom знає) — оновлюються. А новий, з невідомим для Prom Ідентифікатором і порожнім Унікальним_ідентифікатором, майданчик сприймає як новий товар і додає його, присвоюючи вже свій внутрішній номер. Тобто нічого не ламається: старі позиції оновлюються, нові — заводяться. Ключова умова — не заповнювати «Унікальний_ідентифікатор» вручну для нових товарів: це службовий номер самого Prom, його не можна вигадувати.

UUID товару (він же Ідентифікатор_товару на Prom) і «Унікальний_ідентифікатор» — це ключі синхронізації. Якщо змінити UUID наявного товару, Prom при наступному вивантаженні визнає його новим і задвоїть позицію. Тому ці поля не редагують вручну — імпорт та експорт керують ними самі.

XML замість XLSX

Prom дозволяє обмінюватися каталогом не лише через Excel, а й через XML — і на вивантаження, і на завантаження. Логіка ідентифікаторів там та сама: у XML теж є ідентифікатор товару, за яким Prom відрізняє новий товар від наявного. Якщо вам зручніше працювати з XML, каталог можна завантажувати імпортом XML / YML; принцип зіставлення за стабільним ідентифікатором лишається незмінним — тільки формат файлу інший.

Зворотне вивантаження на Prom (у той самий формат XLSX) детально описано в парній статті вивантаження на Prom (XLSX) — там і повний порядок обміну з майданчиком, і чому Elbuz не задвоює товари. За замовчуванням серед колонок вивантаження є і Ідентифікатор_товару (= ваш UUID), і Унікальний_ідентифікатор, тож повний двобічний обмін працює «з коробки». Разом імпорт і експорт складають єдиний цикл: те, що ви завантажили, тими самими полями й вивантажується назад.

Не видаляйте автоматично створені поля Prom, навіть якщо якесь із них вам зараз не потрібне. Саме вони забезпечують зворотне вивантаження без втрат: якщо поле прибрати, відповідна колонка на вивантаженні на Prom поїде порожньою.

Характеристики (атрибути)

Характеристики товару Prom тримає в трійках колонок, які завжди йдуть у строгому порядку: Назва_Характеристики, Одиниця_виміру_Характеристики, Значення_Характеристики. Таких трійок у файлі може бути багато — по одній на кожну характеристику, і колонка одиниці виміру має бути присутня, навіть якщо порожня. Множинні значення однієї характеристики розділяють символом | (наприклад, Алюміній | Пластик).

Elbuz розпізнає ці трійки за заголовком і переносить у атрибути товару: назва стає атрибутом, значення — його значенням, а одиниця виміру (см, кг, Вт…) автоматично додається у довідник одиниць, якщо її там ще немає. Характеристики завантажуються разом з рештою даних файлу автоматично — окремо вмикати їх не треба. Якщо ж у товарі атрибутів немає, значить у файлі не було відповідних трійок колонок або їх не вдалося розпізнати за заголовком.

Різновиди (варіанти) товару

Prom позначає варіанти одного товару (кольори, розміри тощо) через поле ID_групи_різновидів: усі рядки з однаковим значенням цього поля й заповненими характеристиками вважаються різновидами одного товару, а перший рядок у групі — основним. Elbuz зберігає це поле, тож зв'язок різновидів не губиться при зворотному вивантаженні. Якщо ви ведете варіанти на Prom, тримайте ID_групи_різновидів у файлі заповненим — саме воно тримає різновиди разом.

Групи (аркуш «Export Groups Sheet»)

Дерево категорій Elbuz будує з аркуша груп. Кожна група має Номер_групи (номер на сайті Prom), Назву (та її укр. версію), Ідентифікатор_групи (зовнішній ID — наприклад, номер групи у вашій CRM), а вкладеність задається полями Номер_батьківської_групи та Ідентифікатор_батьківської_групи (для кореневих груп вони порожні). Є й SEO-поля групи та описи «до» і «після» списку товарів. Групи зіставляються насамперед за ідентифікатором, а якщо його немає — за номером; нові створюються, наявні оновлюються. Якщо товар посилається на групу, якої немає на аркуші груп, Elbuz створить її з даних самого рядка товару, щоб позиція не лишилась «безхатньою».

Режим «видаляти те, чого немає у файлі»

У шаблоні є окремий режим повного дзеркала — прапорець «Видаляти записи в базовому каталозі, яких немає в завантаженому файлі». Увімкнений, він робить каталог точною копією файлу. Усередині порядок такий: спершу програма позначає на видалення весь базовий каталог, потім знімає позначку з тих категорій і товарів, які знайшлися у файлі, решту видаляє — і тільки після цього додає й оновлює те, що у файлі є. Тобто видалення відбувається до завантаження нових даних, а не після звірки результатів.

Чого в цьому шаблоні немає — і про що варто знати до першого вмикання: перемикача «враховувати джерело завантаження» на формі Prom не виведено. Дзеркало не розрізняє, звідки взявся товар: під нього потрапляють і картки, заведені руками, і ті, що прийшли з прайс-листів чи від парсера, якщо їх немає у файлі Prom.

Разом із товаром зникають його опис, прив'язки до категорій і магазинів, характеристики, фото, запитання-відповіді та зв'язки «супутні товари». Разом із категорією — її опис, прив'язки до магазинів, місце в дереві, правила розподілу прайс-листів на цю категорію і її відбір у шаблонах вивантаження. Рядки прайс-листів при цьому не видаляються: у них обнуляється посилання на товар, і рядок лишається висіти без картки.

Одна вбудована страховка все ж є. Якщо у файлі не розпізналося жодного рядка товарів, видалення товарів не запускається взагалі; те саме окремо для категорій. Порожній або неправильно прочитаний файл каталог не витре. А от файл, у якому є хоча б один товар, уже вважається повним — і все інше піде під видалення.

Як повернути видалене дзеркалом

Кнопки «скасувати завантаження» немає, кошика для видалених карток теж: рядки прибираються з бази остаточно. Робочий шлях один — повторно завантажити той самий файл, але повний. Товари повернуться за тим самим Ідентифікатором_товару: він лежить у файлі, тож картки отримають той самий UUID, і зв'язок із Prom не порушиться — зворотне вивантаження далі впізнає свої позиції.

Повторне завантаження повертає не все. Не повернуться:

  • запитання-відповіді до картки — цих даних у файлі Prom немає, і взяти їх нізвідки; зв'язки «супутні товари» — колонки Супутні та ID_Супутніх приходять у додаткові поля картки, але самі зв'язки завантаження не відновлює;
  • прив'язка рядків прайс-листів до карток — її відновлює повторне завантаження самого прайс-листа;
  • правила розподілу прайс-листів, які були прив'язані до видалених категорій, і відбір цих категорій у шаблонах вивантаження;
  • фото — тільки якщо у файлі заповнена колонка Посилання_зображення; характеристики — тільки якщо у файлі є трійки колонок характеристик.

І ще одне, чого не видно одразу: внутрішній номер картки буде новий. У рядках уже виписаних документів назва й артикул зберігаються текстом і нікуди не подінуться, а от посилання з документа на картку товару стане недійсним.

Копія бази знімається щоночі, зберігаються сім останніх автоматичних копій (безкоштовні акаунти в нічну архівацію не потрапляють). Але кнопки відновлення з копії в інтерфейсі немає — повернути базу з копії можна лише через підтримку. І це не «дістати звідти кілька товарів»: копія переливається в базу цілком, тож разом із каталогом на добу назад відкотяться всі налаштування, а всі, хто в цей момент працює, будуть розлогінені.

Якщо завантаження обірвалося на середині

Робота йде у два заходи, і це головне, що варто знати про обрив. Спершу Elbuz читає файл цілком у свої проміжні таблиці й базового каталогу не чіпає взагалі. І лише коли файл дочитано до кінця, починається перенесення — у журналі це рядок «Завантажуємо дані до базового каталогу». Тому обрив на читанні (впав зв'язок, файл виявився пошкодженим, ви натиснули «Зупинити») лишає каталог рівно таким, яким він був: нічого не сталося, повторювати можна спокійно.

Кнопка «Зупинити» в «Операціях» спрацьовує не миттєво. Програма звіряється з нею під час читання кожні 500 рядків, а потім ще у двох місцях — перед видаленням зайвого і після оновлення категорій. У панелі операція позначиться як «Зупинено» одразу, а сам прогін дійде до найближчої з цих точок. Далі:

  • якщо зупинити під час читання — у журналі стане «Операція перервана користувачем!», а каталог лишиться незмінним;
  • якщо зупинити вже після того, як категорії оновилися, — категорії будуть новими, а товари ще старими. Це не поломка: повторний прогін доведе справу до кінця.

Якщо прогін помер сам — уперся в межу часу, обірвався зв'язок із базою, — відкоту немає: усе, що встигло записатися, лишається записаним. Транзакцією обгорнуто одне-єдине місце — заміна фотографій: якщо вона впала посередині, старі фото повертаються, і ситуації «старих фото вже немає, нових ще немає» не буває.

Картка операції після такого обриву не висить «виконується» вічно. Коли ви наступного разу відкриєте «Операції», прогін, у журналі якого 15 хвилин не з'явилося жодного нового рядка, позначиться як «Перервано: процес завершився аварійно або не подав ознак активності». Завдання розкладу теж розклинюється: замок, який не подає ознак життя 15 хвилин, знімається, і наступний запуск за розкладом стартує нормально.

Повторний запуск безпечний. Проміжні таблиці перед кожним прогоном створюються заново, тож залишки від обірваного прогону в новий не потраплять. Товари, які вже встигли створитися, знайдуться за своїм ідентифікатором і оновляться, а не задвояться. Єдиний випадок, коли повтор таки робить дублі, — файл без ідентифікаторів товару: там кожен прогін вигадує нові ключі й заводить нові картки.

Як переконатися, що завантаження відпрацювало

Журнал прогону живе не у вікні шаблону, а в «Операціях» — правій панелі програми; одразу після запуску з'являється підказка «Завантаження запущено — стежте в «Операціях»». Вікно налаштування шаблону тримати відкритим не обов'язково: його закриття завантаження не зупиняє, зупиняє тільки кнопка «Зупинити».

По ходу прогону журнал пише кроки в тому самому порядку, у якому йде робота: «Створення тимчасових таблиць» → «Завантажуємо дані до базового каталогу» → «Визначаємо записи, які є в базі даних» → «Додаємо категорії товарів», «Оновлюємо категорії товарів» і «Оновлюємо ключі для категорій» → «Визначаємо виробників у товарів» → «Визначаємо наявність у товарів» → «Додаємо товари» і «Оновлюємо товари» → «Завантажуємо атрибути товарів» → «Завантажуємо фотографії товарів» → «Оновлення значень на основі формул» → «Перевірка цілісності даних» → «Індексування товарів». Останній рядок — «Завантаження даних завершено!», а під ним «Витрачено часу:» з тривалістю прогону.

Цифр у журналі рівно дві, і читати їх треба буквально:

  • «Всього товарів завантажено: N» — поки йде читання, це лічильник прочитаних рядків файлу, він оновлюється кожні 500 рядків. Наприкінці той самий рядок показує підсумок: скільки рядків товарів було у файлі. Це не кількість створених чи оновлених карток — скільки з них виявилися новими, а скільки оновилися, журнал не рахує.
  • «Усього категорій завантажено: N» — те саме для аркуша груп.

Ще два рядки з'являються лише за потреби. «Не завантажено фотографій: N» — якщо частина посилань на фото виявилася непридатною. Червоне «Частина даних не збереглася: база відхилила запит.» — якщо хоча б один запит база відхилила; цей рядок означає, що прогін дійшов до кінця, але не всі дані доїхали, і плутати його з підсумковим «Завантаження даних завершено!» не можна.

Тепер куди дивитися в сітках:

  • У списку шаблонів колонка «Останнє завантаження» показує, коли шаблон відпрацював востаннє і скільки це зайняло. «ще не завантажувався» означає, що прогонів не було жодного.
  • У сітці базового каталогу факт оновлення підтверджує колонка «Дата оновлення»: у всіх оновлених карток вона стане часом прогону. Нові картки видно по колонці «Дата додавання» і по «Джерело: назва» — там буде назва вашого шаблону, а в «Джерело: код» — prom_xlsx.

Колонку «Джерело: назва» заповнює тільки створення картки, оновлення її не переписує. Тому товар, який колись прийшов із прайс-листа, а тепер оновлюється з файлу Prom, так і лишиться з прайс-листом у джерелі — і це не ознака того, що завантаження його не зачепило. Ознака оновлення — «Дата оновлення», а не «Джерело».

Історію за довший період відкриває кнопка «Історія запусків» — вона є і в шапці форми шаблону, і в тулбарі списку. За останні 30 днів там видно «Запусків за період», «Середня тривалість», «Найдовший» і «З помилками», а нижче — таблицю прогонів із початком і підсумком кожного.

Вимкнути шаблон чи видалити його

Стан шаблону перемикається однією пілюлею — «Активний» / «Вимкнений» у шапці форми або в колонці «Стан» списку шаблонів. Поки цим шаблоном іде завантаження за розкладом, у колонці «Стан» замість цього стоїть «Виконується», і кліком стан тоді не перемикається.

Що дає стан «Вимкнений»: завантаження за розкладом цей шаблон пропускає, і в режимі «завантажити всі активні» його теж не буде. Більше не змінюється нічого — налаштування, посилання на файл, розклад і всі раніше завантажені товари лишаються на місці. Повернули «Активний» — розклад працює далі, відновлювати нічого не треба.

Чого «Вимкнений» не робить: він не блокує ручний запуск. Кнопка «Завантажити цей шаблон» у рядку списку і кнопка «Завантажити» у формі спрацюють і на вимкненому шаблоні. Вимкнення зупиняє розклад, а не людину.

Видалення — інша дія й інші наслідки. Шаблон не стирається з бази: рядок ховається зі списку разом з усіма налаштуваннями, а з розкладу знімаються відмітки про нього, тож за розкладом він більше не запускається. Даних це не торкається: товари, категорії, характеристики й виробники, завантажені цим шаблоном, лишаються в каталозі — видалення шаблону нічого в каталозі не видаляє. Готовий шаблон «XLSX - prom.ua, satu.kz, deal.by» до того ж системний, видалити його не можна взагалі; якщо він більше не потрібен, його саме вимикають.

Скільки це триває і де межі

Стелі на кількість рядків у файлі немає: програма читає файл до кінця, скільки б рядків у ньому не було. Обмежено інше:

  • Дві години на прогін — стільки часу відводиться завантаженню файлу з комп'ютера. Якщо за дві години робота не завершилася, прогін обривається там, де був, з наслідками з розділу про обрив.
  • Кожні 500 рядків — крок, з яким програма пише в журнал прочитану кількість і перевіряє кнопку «Зупинити». Між цими точками журнал мовчить, і зупинка теж чекає найближчої з них.
  • До 20 фотографій на товар — стільки посилань програма розбере з колонки Посилання_зображення; двадцять перше й далі не завантажаться.
  • Артикул — 25 символів (стільки ж дозволяє й сам Prom), назва товару, назва групи й meta-поля — 255 символів, GTIN — 14. Довші значення до картки повністю не доїдуть.
  • Розмір файлу обмежує сервер, а не програма. Файл, який не доїхав, видно одразу: «Файл не вдалося передати на сервер. Можливо, він завеликий або зв'язок обірвався. Код помилки ...» — каталог при цьому не змінюється.

Два завантаження одночасно за розкладом не стартують. Якщо в цей момент вантажиться інший шаблон, у журналі з'явиться «Скасовано завантаження за розкладом, причина - завантажується інший шаблон (конфлікт обробки даних).», і прогін просто дочекається наступного разу за розкладом.

Скільки триватиме саме ваш файл, ми не вгадаємо: це залежить від кількості рядків, фотографій і завантаженості сервера. Цифра береться з вашої ж історії — у вікні «Історія запусків» є «Середня тривалість» і «Найдовший» за останні 30 днів. Після першого-другого прогону ви знатимете свій час точно.

Чому товар іноді не оновлюється

Якщо після повторного імпорту якийсь товар лишився без змін, причина зазвичай не у файлі, а в ознаках самого товару. Прапорець «Не оновлювати» в картці (у сітці базового каталогу це колонка «Не оновлювати (прапор)») зупиняє перезапис основних полів: ціни, залишку, наявності, категорії, виробника, ваги й габаритів, усіх додаткових полів Prom. Прапорець «Фіксована ціна» вужчий: оновиться все, крім ціни — файл не перезапише те, що ви зафіксували свідомо.

Але межа цього захисту проходить не там, де її зазвичай уявляють, і це важливо знати до того, як на неї покластися:

  • Назву, опис і meta-поля завантаження перезаписує навіть у товару з прапорцем «Не оновлювати». Від перезапису текстів картки цей прапорець не рятує.
  • Характеристики для товарів, у яких вони є у файлі, спершу видаляються повністю, а потім записуються ті, що прийшли з файлу. Характеристика, додана руками, при наступному прогоні зникне.

Тому вручну вивірену картку надійніше тримати поза межами файлу, ніж покладатися на прапорець: рядка немає у файлі — і перезаписувати нічого. Але це працює лише з вимкненим режимом повного дзеркала: з увімкненим така картка не вціліє, а буде видалена.

Що обрати в шаблоні

Форма шаблона проста: ви вказуєте джерело — файл з комп'ютера або посилання, за яким Elbuz забиратиме файл сам, — і за потреби вмикаєте перемикач. Основний набір даних (категорії, товари, виробники, характеристики) завантажується з файлу автоматично, окремо вмикати їх не треба. Керована опція в цьому шаблоні одна — режим повного дзеркала «Видаляти записи в базовому каталозі, яких немає в завантаженому файлі»; решта поведінки задана й перемикачів не має. Радимо перший запуск зробити на невеликому або тестовому файлі й перевірити результат — не тільки очима по кількох картках, а й за цифрами журналу та колонками сітки, — і лише переконавшись, що все стало правильно, вантажити повний файл і ставити шаблон на розклад.

Форма шаблону «Налаштування завантаження - prom.ua (XLS)»
1Джерело даних — локальний файл або зовнішнє посилання
2Блок «Що завантажувати»
  1. Оберіть, звідки брати файл: завантажити з комп'ютера чи вказати зовнішнє посилання.
  2. Опція визначає, чи видаляти в базовому каталозі записи, яких немає у завантаженому файлі.

Дві найчастіші несподіванки — валюта й порожня наявність. Якщо ціни у файлі не у вашій базовій валюті, переконайтесь, що курс для цієї валюти в системі заданий, інакше перерахунок не відбудеться. А порожнє поле наявності Prom трактує як «немає в наявності» — тож незаповнена колонка сховає товари з продажу.

Розбір частих проблем

Що показує програма, чому так і що робити
Що ви бачитеЧому такЩо зробити
«Файл не є книгою XLSX. Prom.ua, Satu.kz і Deal.by вивантажують каталог у форматі .xlsx — старий .xls не підтримується.» Завантаження читає тільки .xlsx; .xls і .csv відхиляються до розбору Відкрити файл в Excel і зберегти як «Книга Excel (.xlsx)»; каталог не змінився (структура файлу)
«Файл не вдалося передати на сервер. Можливо, він завеликий або зв'язок обірвався. Код помилки ...» Файл не доїхав до сервера: уперся в обмеження розміру або обірвався зв'язок Повторити або віддати файл посиланням замість вивантаження з комп'ютера (межі)
«Не вдалося прочитати файл:» і далі текст помилки Книга пошкоджена або це не та книга — розбір упав на першому ж кроці Перезберегти файл у Excel і запустити знову; у каталозі нічого не змінилося (обрив)
«Частина даних не збереглася: база відхилила запит.» Прогін дійшов до кінця, але частина запитів не пройшла — у каталозі не всі дані з файлу Запустити завантаження ще раз: повтор безпечний і дублів не робить (повторний запуск)
«Операція перервана користувачем!» Натиснули «Зупинити»; що встигло змінитися, залежить від моменту зупинки Подивитися, до якого кроку дійшов журнал, і запустити наново (обрив)
«Скасовано завантаження за розкладом, причина - завантажується інший шаблон (конфлікт обробки даних).» Два завантаження одночасно не запускаються — у цей момент вантажився інший шаблон Нічого: прогін піде наступного разу за розкладом. Потрібно зараз — дочекатися й запустити вручну
«Файл для завантаження не вибрано.» Відкрито вкладку «Файл», але сам файл не обрано Обрати файл або перейти на вкладку з посиланням і вказати адресу
Прогін завершився, а в каталозі нічого не змінилося У картках стоїть «Не оновлювати», або у файлі немає колонок із потрібними заголовками Звірити «Дата оновлення» в сітці й цифри журналу (перевірка), потім — прапорці картки (чому не оновлюється)

Часті питання

Куди потрапляють поля Prom, яких немає в стандартній картці (оптова ціна, знижки тощо)?

Elbuz створює під них додаткові поля прямо в базовому каталозі під час першого імпорту й записує туди значення. Тому картка зберігає вміст файлу Prom повністю, а не лише кілька стандартних полів. Ці ж поля потім використовуються для вивантаження назад.

Що буде, якщо у файлі не заповнено ідентифікатор товару?

Elbuz спробує зіставити товар за внутрішнім номером Prom (Унікальний_ідентифікатор). Якщо і його немає — товар вважається новим. Тому файл без жодних ідентифікаторів при повторному завантаженні наробить дублів; надійніше брати файл, вивантажений із самого Prom, де ідентифікатори вже проставлені. У самому Prom «Ідентифікатор_товару» — обов'язкове поле саме з цієї причини.

Код_товару — це і є ідентифікатор для оновлення?

Ні. Код_товару — це ваш артикул (SKU, до 25 символів), він записується в поля «артикул» і «MPN» картки. Для впізнавання товару при повторному імпорті Elbuz використовує внутрішній ідентифікатор Prom, а не артикул, бо артикул продавці іноді змінюють.

Я створив новий товар у Elbuz — Prom підхопить його при вивантаженні?

Так. Новий товар отримує власний UUID, який на вивантаженні йде в колонку Ідентифікатор_товару, а «Унікальний_ідентифікатор» лишається порожнім. Prom бачить Ідентифікатор_товару, якого в нього немає, і додає товар як новий, присвоївши свій внутрішній номер. Наявні товари при цьому оновлюються за їхнім Ідентифікатором_товару. Головне — не заповнювати «Унікальний_ідентифікатор» руками для нових товарів.

Чому не оновилась українська назва чи опис товару?

У Prom українська версія оновлюється, лише якщо у файлі заповнені обидва українські поля — і назва (Назва_позиції_укр), і опис (Опис_укр). Заповнене одне з них Prom проігнорує. Тримайте це правило, коли готуєте файл.

Чому наявність на вивантаженні не збігається з тим, що було у файлі?

Бо поле наявності рахується формулою з поточного статусу товару у вашому каталозі, а не береться з файлу «як є». Це навмисно: при вивантаженні назад на Prom іде актуальна наявність, а не застигла на моменті імпорту.

Товар не оновився при повторному імпорті — чому?

Найчастіше на ньому стоїть прапорець «Не оновлювати» — тоді не змінюються ціна, залишок, наявність, категорія, виробник, габарити й додаткові поля Prom. Або стоїть «Фіксована ціна» — тоді оновиться все, крім ціни. Але назву, опис і meta-поля завантаження перезаписує навіть у товару з прапорцем «Не оновлювати», а характеристики для товарів із файлу видаляються й записуються наново.

Видалив зайве дзеркальним режимом — як повернути?

Кнопки скасування й кошика немає: рядки прибираються з бази остаточно. Робочий шлях — повторно завантажити той самий файл, але повний: картки повернуться за тим самим Ідентифікатором_товару, тож зв'язок із Prom не порушиться. Не повернуться запитання-відповіді, зв'язки «супутні товари», прив'язка рядків прайс-листів і правила розподілу на видалені категорії, а внутрішній номер картки буде новим — посилання з уже виписаних документів на неї стане недійсним. Якщо повного файлу немає, лишається нічна копія бази, але відновлення з неї в інтерфейс не виведене й переливає базу цілком.

Завантаження обірвалося на середині — що з даними і чи можна запустити ще раз?

Спершу програма читає файл цілком і каталогу не чіпає, тому обрив на читанні не змінює нічого. Якщо обірвалося вже на перенесенні в каталог, відкоту немає: що встигло записатися — записалося (виняток один — заміна фотографій, вона обгорнута транзакцією). Повторний запуск безпечний: проміжні таблиці створюються заново, а вже створені товари знаходяться за ідентифікатором і оновлюються, а не задвоюються. Дублі робить тільки файл без ідентифікаторів товару.

Що станеться, якщо зняти з шаблону «Активний»?

Зупиниться завантаження за розкладом — і все. Налаштування, посилання на файл, сам розклад і всі раніше завантажені товари лишаються на місці; повернули «Активний» — працює далі. Ручний запуск при цьому не блокується: кнопки «Завантажити цей шаблон» і «Завантажити» спрацюють і на вимкненому шаблоні.

Чому не завантажились характеристики?

Характеристики завантажуються з файлу автоматично, окремо вмикати їх не треба. Якщо в товарі їх немає, значить у файлі не було трійок колонок «Назва / Одиниця_виміру / Значення характеристики» або їх не розпізнано за заголовком — колонки мають іти саме в цьому порядку.

Чи була стаття корисною?