Обмен данными

Импорт рецептов (BOM) из CSV

Строка файла — один материал в рецепте, а не рецепт целиком. Почему счётчик «принято» включает пропущенные дубли и что завести в каталоге до загрузки.

Светлана Золотенкова Автор: Светлана Золотенкова Обновлено: 05 августа 2026 г.

Рецепты обычно уже описаны — в конструкторской спецификации, в таблице раскроя, в файле технолога. Переносить их в систему по одной строке через карточку товара долго: у сотни изделий по десять материалов это тысяча кликов.

Файлом это грузится за минуту. Но формат тут устроен непривычно, и именно на нём спотыкаются первые попытки: одна строка файла — не рецепт, а один материал в рецепте.

Строка — это материал, а не рецепт

Если в изделии три материала, в файле будет три строки с одним и тем же артикулом товара. Система соберёт их в один рецепт сама.

Артикул товара Артикул материала Количество
SKU-001 MAT-001 2,5
SKU-001 MAT-002 8
SKU-001 MAT-003 0,4

Это три строки, но один рецепт из трёх позиций. Порядок строк значения не имеет, группировать их подряд необязательно — сортировка файла на результат не влияет.

Рецепт заводится автоматически при первой строке товара. Отдельно создавать его в карточке не нужно.

Где начать загрузку

Откройте меню пользователя, выберите «Настройки», вкладку «Импорт данных», найдите плитку «Добавить рецепты / BOM». Сначала «Скачать шаблон», потом «Загрузить данные».

Число колонок жёсткое — ровно шесть. Файл с пятью или семью колонками система отобьёт целиком, ещё до разбора строк.

Плитка «Добавить рецепты / 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.

Смотрите также:

Помогла ли статья?