Импорт рецептов (BOM) из CSV
Строка файла — один материал в рецепте, а не рецепт целиком. Почему счётчик «принято» включает пропущенные дубли и что завести в каталоге до загрузки.
Рецепты обычно уже описаны — в конструкторской спецификации, в таблице раскроя, в файле технолога. Переносить их в систему по одной строке через карточку товара долго: у сотни изделий по десять материалов это тысяча кликов.
Файлом это грузится за минуту. Но формат тут устроен непривычно, и именно на нём спотыкаются первые попытки: одна строка файла — не рецепт, а один материал в рецепте.
Строка — это материал, а не рецепт
Если в изделии три материала, в файле будет три строки с одним и тем же артикулом товара. Система соберёт их в один рецепт сама.
| Артикул товара | Артикул материала | Количество |
|---|---|---|
| SKU-001 | MAT-001 | 2,5 |
| SKU-001 | MAT-002 | 8 |
| SKU-001 | MAT-003 | 0,4 |
Это три строки, но один рецепт из трёх позиций. Порядок строк значения не имеет, группировать их подряд необязательно — сортировка файла на результат не влияет.
Рецепт заводится автоматически при первой строке товара. Отдельно создавать его в карточке не нужно.
Где начать загрузку
Откройте меню пользователя, выберите «Настройки», вкладку «Импорт данных», найдите плитку «Добавить рецепты / BOM». Сначала «Скачать шаблон», потом «Загрузить данные».
Число колонок жёсткое — ровно шесть. Файл с пятью или семью колонками система отобьёт целиком, ещё до разбора строк.
Колонки шаблона
Шаблон приходит с заголовком и двумя строками-примерами:
SKU-001;Пример товара;MAT-001;Пример материала;2,5;берёза А-сорт
SKU-001;Пример товара;MAT-002;Винт М6;8;
| Колонка | Что в неё писать |
|---|---|
| «Артикул товара» | код варианта изделия; обязательна |
| «Название товара» | система эту колонку не читает |
| «Артикул материала» | код варианта материала; обязательна |
| «Название материала» | система эту колонку не читает |
| «Количество» | положительное число; обязательна |
| «Примечания» | свободный текст, попадёт в строку рецепта |
Две колонки с названиями нужны только человеку. Система ищет позиции исключительно по артикулам, а названия не сверяет и не подставляет. Написали в названии ерунду — импорт всё равно пройдёт по артикулу. Оставили пустыми — тоже пройдёт. Держите их заполненными ради того, кто будет править файл глазами, а не ради системы.
Колонки «Единица измерения» в шаблоне нет: количество задаётся в той единице, которая уже стоит в карточке материала. Колонки для процента потерь тоже нет — закладывайте отход прямо в количество.
Количество
Принимается и точка, и запятая: 2.5 и 2,5 — одно число. Пробелы-разделители
разрядов не годятся.
Количество должно быть строго больше нуля. 0 и отрицательные значения
дают ошибку «Количество» должно быть положительным числом», строка не заедет.
Товар и материал должны существовать заранее
Импорт рецептов ничего не создаёт в каталоге. Он только связывает то, что уже заведено. Порядок загрузки такой: сначала товары, потом материалы, и только потом рецепты.
Если артикул не найден:
Товар с SKU «SKU-001» не найден
Материал с SKU «MAT-001» не найден
Отдельная ошибка — артикул есть, но не того типа. Материал в колонке товара или товар в колонке материала дадут:
SKU «MAT-001» принадлежит не товару, а материалу
Такое чаще всего означает, что колонки в файле переставлены местами. Проверьте порядок: артикул товара — первая колонка, артикул материала — третья.
Счётчик «принято» включает пропущенные дубли
Это главная особенность именно этого импорта, и её стоит запомнить.
Если пара «товар + материал» уже есть в рецепте, строка не записывается, но засчитывается как принятая. В отчёте появляется предупреждение:
Материал «MAT-001» уже есть в рецепте товара «SKU-001» — строка пропущена
Практическое следствие: полоса «Импорт завершён · 40 принято · 0 отклонено» не значит, что в рецепты добавилось сорок позиций. Часть из этих сорока могла быть дублями, которые никуда не заехали. Сколько строк реально записалось, видно только из отчёта — вычтите из «принято» число предупреждений о пропуске.
У импорта материалов и товаров логика другая: там дубль по артикулу отклоняется и попадает в счётчик «отклонено». Не переносите эту привычку на рецепты.
Что происходит после нажатия «Загрузить данные»
Предпросмотра нет: строки уходят в базу сразу. Под плиткой появляется полоса результата:
Импорт завершён · 40 принято · 3 отклонено
Полоса зелёная, если замечаний нет, и жёлтая, если есть хотя бы одна ошибка или
предупреждение. В жёлтой появляется ссылка «Скачать отчёт об ошибках (CSV)».
Файл приходит как bom-import-report.csv с колонками «Строка», «Уровень»,
«Сообщение».
Номера строк считаются вместе с заголовком. Заголовок — строка 1, первая запись — строка 2.
Импорт частичный и построчный: одна плохая строка не отменяет остальные. Транзакции нет, отката тоже — исправляйте отклонённые строки и загружайте их отдельным файлом.
Где смотреть результат
Откройте карточку товара, вкладку «Рецепт». Загруженные материалы лежат там же, где добавленные руками. Два исключения разобраны ниже: вкладки может не быть вовсе, а у варианта со своим составом импорт на ней не показывается.
Вкладки «Рецепт» может не быть. Она показывается, только если в карточке товара стоит флажок «Произвести» или «Комплект» — в блоке «Использование» на вкладке «Главная информация». У комплекта вкладка называется «Состав комплекта».
Импорт этот флажок не проверяет и не выставляет. Поэтому возможна ситуация, которая выглядит как потеря данных: строки приняты, ошибок нет, а вкладки в карточке не видно. Данные на месте — поставьте флажок «Произвести», и рецепт появится.
Краевые случаи
Рецепт пишется на товар целиком, а не на конкретный вариант. Колонки для варианта в шаблоне нет: все строки попадают в основной рецепт товара. Если у разных расцветок разный состав, импортом это не задать — правьте в карточке.
У варианта со своим составом импорт не виден. Это продолжение предыдущего пункта и ловушка того же рода, что «вкладки „Рецепт“ может не быть»: строки приняты, ошибок нет, а в карточке их не найти.
Вкладка «Рецепт» показывает состав выбранного варианта. Своего состава у варианта нет — вкладка возьмёт общий рецепт товара, и загруженное будет на месте. Свой состав есть — вкладка покажет только его, импортированных строк там не будет вовсе. Отчёт при этом чистый: «5 принято · 0 отклонено».
Признак один: у варианта, открытого на вкладке, уже заведён свой состав. Выхода два. Либо править состав этого варианта руками в карточке. Либо очистить его — тогда вкладка снова читает общий рецепт товара вместе с импортом.
Повторная загрузка того же файла ничего не сломает и ничего не изменит: все строки уйдут в предупреждения о дублях, а счётчик «принято» покажет их полное число.
Изменить количество импортом нельзя. Дубль пропускается, старое значение остаётся. Правьте в карточке товара или удалите строку рецепта и загрузите заново.
Пустой файл или файл только с заголовком ошибки не даёт: «Импорт завершён · 0 принято · 0 отклонено».
Артикул с ведущим нулём. Excel съедает ноль и превращает 0100 в 100 —
после чего артикул не находится. Задайте колонкам текстовый формат до вставки.
Разделитель и кодировка
Требования те же, что у всех плиток раздела:
- разделитель — точка с запятой (
;), не запятая; - кодировка — UTF-8.
Файл в другой кодировке отвергается целиком:
Файл не в кодировке UTF-8. Сохраните CSV как UTF-8.
Файл с запятыми читается как одна колонка и отбивается сообщением «Ожидается 6 колонок в заголовке, получено 1».
Чего импорт рецептов не делает
- Не создаёт товары и материалы. Только связывает уже заведённые.
- Не обновляет существующие строки рецепта. Дубль пропускается.
- Не удаляет ничего. Убрать лишний материал из рецепта можно только руками.
- Не задаёт рецепт отдельного варианта и не работает с многоуровневой вложенностью через файл.
- Не читает XLSX и XLS. Только CSV.
Смотрите также:
- Что такое раздел «Обмен данными» — карта раздела, семь плиток и ассистент импорта
- Что такое рецепт (BOM) — зачем нужен рецепт и где включается флажок «Произвести»
- Как создать рецепт товара — то же самое руками в карточке
- Импорт материалов из CSV — что загрузить до рецептов
Помогла ли статья?
Не удалось сохранить ответ. Попробуйте ещё раз.
Спасибо за ответ!