Загрузка спецификации в ERPNext из Excel через Data Import
АйТи Фреш
IT-аутсорсинг и бизнес

Загрузка спецификации в ERPNext из Excel: Data Import без ошибок и дублей

Автор: , директор ООО «АйТи-Фреш» · · ~12 мин чтения
Лист Excel со спецификацией перетекает в ровный стеллаж карточек: загрузка спецификации в ERPNext
Хорошая загрузка начинается с сита перед входом: чистый файл важнее быстрого импорта.

Спецификацию договора из Excel в ERPNext загружают через Data Import: готовят чистый файл, скачивают шаблон нужного DocType, переносят данные, гоняют пробный импорт на 20–30 строках и только потом грузят всё. Ниже порядок действий, типовые ошибки и сверка итогов.

Как загрузить спецификацию из Excel в ERPNext: порядок действий

Я начинаю не с ERPNext, а с файла. Excel заказчика почти всегда содержит объединённые ячейки, пробелы в конце кодов, «шт.» и «шт» в одной колонке и итоговые строки внутри таблицы. Data Import ничего из этого не простит, поэтому первый шаг — привести файл к плоской таблице: одна строка — одна позиция, один код материала — одно написание. Если вы внедряете систему сами, начните с обзора возможностей ERPNext — там видно, какие модули вообще задействованы. Если нужна помощь с запуском, мы делаем это в рамках внедрения ERPNext под ключ.

Сметчик за столом с распечатанными таблицами спецификации, посередине монитор с таблицей, справа чертежи
Сначала приводим файл заказчика к плоской таблице. Открыть крупно

Дальше последовательность одна и та же для любой спецификации. Открываете Data Import, выбираете тип документа, режим Insert New Records, скачиваете шаблон (Download Template), переносите в него данные, загружаете файл и смотрите предпросмотр с предупреждениями по строкам и колонкам. Предупреждения сгруппированы по номерам строк. Кнопка Start Import при этом не блокируется, поэтому правило простое: пока список предупреждений не пуст, импорт не запускаем, и Start Import нажимается последней.

Схема из пяти шагов загрузки спецификации: чистка, шаблон, перенос, пробный импорт на 20–30 строках, полная загрузка
Кнопка запуска импорта нажимается последней. Открыть крупно

Пять шагов я держу в голове как короткий чек-лист: 1. Чистка Excel: единые коды, единицы измерения, без объединённых ячеек и итогов. 2. Скачивание шаблона из Data Import для нужного DocType, без ручной правки заголовков. 3. Перенос данных в шаблон: родительские поля только в первой строке документа, строки таблицы — на следующих. 4. Пробный импорт 20–30 строк и проверка результата глазами. 5. Полная загрузка и сверка итогов с исходным Excel.

Про размер. В документации ERPNext прямо сказано: жёсткого лимита на число записей нет, но загружать лучше по нескольку тысяч за раз. Спецификация на объект — это обычно от нескольких десятков до пары тысяч строк, так что упираться в лимит вы не будете. Опасность в другом: ошибка в 800-й строке при загрузке на 1 500 позиций заставит вас разбираться с частично созданными записями. Поэтому пробный кусок — не формальность.

Чек-лист чистки таблицы заказчика перед импортом: объединённые ячейки, пробелы, единицы, итоговые строки, коды
Грязный файл ломает импорт, чистка идёт первой. Открыть крупно

Куда класть спецификацию: отдельный DocType, а не BOM

Самая частая ошибка новичков — попытка уложить перечень материалов договора в BOM. BOM в ERPNext — это Bill of Materials, производственная спецификация изделия из модуля Manufacturing: из чего собрать один прибор или шкаф. Для длительной стройки или монтажа с поэтапным расходом он не подходит: нет привязки к договору и проекту, нет контроля плановых количеств по этапам. В обзорах встречается формулировка «спецификация как BOM» — это упрощение, и я бы её не повторял клиентам.

Рабочий вариант — собственный DocType. Я условно называю его Contract BOQ: основной документ с полями Project (ссылка на проект), номер договора и статус, плюс дочерняя таблица позиций с полями Item (ссылка на номенклатуру), плановое количество и цена. Дочерний DocType создаётся с галочкой Is Child Table, а в основной документ добавляется поле типа Table, которое на него ссылается — так устроены все дочерние таблицы Frappe, например строки заказа. Названия полей и самого DocType — ваши, называйте как удобно команде; в статье я использую рабочие имена.

Начальник участка у стола с длинным списком материалов договора, слева чертёж одного шкафа, справа накладные
Спецификация договора это перечень объёма работ, а не состав изделия. Открыть крупно

Сравнение, которое я показываю заказчикам: | Критерий | BOM | Спецификация договора (свой DocType) | |---|---|---| | Назначение | состав изделия для производства | перечень материалов и объёмов по договору | | Где живёт | модуль Manufacturing | кастомный DocType, создаётся через Customize | | Привязка к проекту | нет в коробке | поле Project | | Строки | компоненты изделия | Item, плановое количество, цена | | Подходит для контроля перебора | нет | да, но сам контроль — доработка | | Работа на длительной стройке | неудобна | рассчитана на поэтапный расход |

Оговорка, которую нельзя пропускать. Загрузка спецификации — это только половина задачи. Контроль «заказали больше, чем запланировано» в коробке по количеству не работает: бюджет Budget следит за суммами по статьям, а запрет превышения по количеству приходится дорабатывать. Это отдельная доработка, и в конце статьи на примере подрядчика видно, где проходит граница между коробкой и кастомизацией.

Сравнение состава изделия и спецификации договора: назначение, привязка к проекту, контроль плановых количеств
Состав изделия описывает прибор, спецификация описывает объём работ. Открыть крупно

Что должно существовать до импорта: Item, единицы измерения, проект

Любая ссылочная колонка в файле — это обещание, что запись с таким именем уже есть в системе. Колонка Item в спецификации ссылается на карточку номенклатуры, единица измерения — на справочник UOM, проект — на документ Project. Если в базе нет хотя бы одной из этих записей, строка не пройдёт. Порядок загрузки данных при запуске ERPNext я всегда держу таким: пользователи, справочники, компании и контрагенты, контакты, и только потом документы. Спецификация — документ, она идёт после всего остального.

Администратор у двух мониторов, на столе три ряда цветных стикеров по порядку загрузки, справа блокнот с планом
Три загрузки подряд идут раньше файла со спецификацией. Открыть крупно

Практически это значит три загрузки подряд. Сначала единицы измерения: «м», «м.п.», «шт», «компл.» — ровно в том написании, которое будет в спецификации. Затем номенклатура: Item с кодом, названием, группой и единицей по умолчанию. Затем проект, под который загружается спецификация. Только после этого — сам файл с позициями. Перенос мастер-данных — самостоятельная задача со своими граблями (дубли контрагентов, остатки на дату отсечки), и если вы переезжаете из 1С, она занимает больше времени, чем загрузка спецификации.

Что я проверяю в справочниках до пробного импорта: уникальность кодов в Excel (формулой «повторы» или сводной таблицей), совпадение единиц в колонке спецификации и в карточке Item, отсутствие лидирующих и хвостовых пробелов, одинаковую «ё/е» в названиях. Нужная строка в ERPNext находится по имени записи, и «Кабель ВВГнг» и «Кабель ВВГнг » с пробелом для системы — разные значения.

Таймлайн порядка загрузки данных: единицы измерения, номенклатура, проект, файл спецификации
Нет записи в справочнике: строка не пройдёт. Открыть крупно

Какие ошибки выдаёт Data Import и что с ними делать

Типичных симптомов три, и все они возникают на этапе проверки файла или в журнале импорта. Первый — Duplicate Name: в файле повторяется ключ строки либо запись с таким именем уже есть в системе, часто потому, что файл уже загружали раньше. Второй — ссылка на несуществующий Item или UOM: справочник не загружен или написан иначе. Третий — колонки не сопоставились: шаблон правили вручную, переименовали заголовок или вставили колонку посередине.

Для каждого симптома свой разбор: | Симптом | Вероятная причина | Что делать | |---|---|---| | Duplicate Name | дубль ключа в файле или повторная загрузка | удалить дубли в Excel, открыть журнал импорта и проверить, что уже создано | | Не найдена ссылка на Item или UOM | справочник не загружен или другое написание | сначала загрузить номенклатуру и единицы, затем спецификацию | | Колонка не сопоставилась | вручную правили шаблон | снова скачать шаблон и перенести данные в него | | Пустое обязательное поле | пропущена колонка с красной звёздочкой | заполнить, обязательные поля видны в шаблоне |

Про журнал. После запуска Frappe хранит результат по каждой строке в логе импорта (в коде это DocType Data Import Log): создана или обновлена запись, текст ошибки, номера строк. Это основной инструмент разбора: не гадайте по сообщению на экране, а откройте журнал и найдите первую упавшую строку. Остальные ошибки часто тянутся за ней.

Про фоновую обработку. Импорт запускается как фоновая задача. В коде Frappe (ветки version-15 и develop) импорт ставится в очередь default, а не в long, хотя в обзорах часто пишут обратное. В frappe_docker очередь default слушают оба сервиса воркеров: queue-short и queue-long. Практический вывод от этого не меняется: если на экране импорта прогресс не движется, откройте Background Jobs и убедитесь, что воркеры вообще запущены. В контейнерной установке frappe_docker это отдельные сервисы-воркеры, и бывает, что их забыли поднять:

docker compose ps
docker compose logs --tail=50 queue-short queue-long

Имена сервисов зависят от вашего compose-файла, проверьте их через docker compose ps.

Таблица типовых ошибок импорта: повтор имени, не найдена ссылка, колонка не сопоставилась, пустое обязательное поле
У каждой ошибки своя причина и своё действие. Открыть крупно

Как убедиться, что загрузилось всё и ничего не задвоилось

Сообщение «Import completed» ничего не доказывает. Я сверяю три числа и одно выборочное сравнение. Число документов: сколько спецификаций в файле, столько и должно появиться в списке с фильтром по проекту. Число строк: общее количество позиций в Excel и сумма строк дочерней таблицы по всем загруженным документам. Сумма: плановое количество по каждому коду и стоимость — сводной таблицей в Excel и отчётом по списку в ERPNext.

Начальник участка и сметчица сверяют два распечатанных списка в бытовке, слева план котельной, в окне стройка
Сверку делают двое: тот, кто готовил файл, и тот, кто будет работать. Открыть крупно

Сверку делают двое: тот, кто готовил файл, и тот, кто будет с ним работать — на стройке это начальник участка, в торговле — снабженец. Выборочно проверяют 10–15 строк с разных концов файла: первую, последнюю, строки с нестандартной единицей, строки с дробным количеством. Чаще всего ошибка находится именно в дробных значениях: запятая вместо точки или неправильная локаль в Excel превращают 1,5 в 15 или в текст.

Повторную загрузку исправленного файла не делайте поверх созданных записей. Если нужно обновить уже загруженное, используйте режим Update Existing Records: экспортируйте записи с колонкой ID, исправьте значения и загрузите обратно. Загрузка того же файла заново в режиме вставки даст дубли — или, если ключи совпадают, ошибки Duplicate Name. Так же в режиме Update заменяют цену или количество у позиции без пересоздания документа.

Дерево сверки после импорта: число документов, число строк, суммы, выборка 10–15 строк, правка режимом обновления
Повторная вставка того же файла даст дубли. Открыть крупно

Как «Теплоконтур Монтаж» загрузила спецификацию на котельную (условный пример)

Подрядчик по инженерным системам «Теплоконтур Монтаж», 5 рабочих мест, получил от заказчика спецификацию на монтаж котельной: Excel на 412 строк, три листа — трубопроводы, арматура, электрика. Смету сметчик считал во внешней программе, в ERPNext нужна была только итоговая ресурсная спецификация. Расценок ФЕР/ТЕР и форм КС-2 в коробке нет, и их туда не переносили. Все цифры здесь условные, чтобы показать порядок работ.

Пять сотрудников подрядчика за столом с ноутбуком и списками, слева образцы арматуры, справа план котельной
Загрузка спецификации заняла несколько минут после полудня подготовки. Открыть крупно

Подготовка заняла полдня. В файле нашли 37 строк-итогов внутри таблицы, 11 дублей кода (одна позиция на двух листах) и 19 вариантов написания единицы измерения для четырёх реальных единиц. Сметчик свёл три листа в один, администратор привёл единицы к списку из шести значений. После чистки осталось 364 позиции. Справочники грузились первыми: 6 единиц измерения, 241 карточка Item, один проект.

Столбцы найденных проблем в таблице на 412 строк: 37 итогов, 11 дублей кода, 19 вариантов единицы, осталось 364 позиции
Чистка сократила 412 строк до 364 позиций. Открыть крупно

Пробный импорт на 25 строках выдал две ошибки: у двух позиций код Item отличался от справочника одним символом, и в колонке количества была запятая. Исправили в исходном файле, повторили пробу — чисто. Полная загрузка 364 строк прошла за несколько минут. Сверка показала совпадение числа строк, а в суммах расхождение нашлось у одной позиции: количество «12,5» превратилось в «125» в одной строке, её поправили в режиме Update Existing Records. Начальник участка просмотрел список и принял спецификацию как опорную для заявок.

Что осталось за рамками. Контроль перебора по количеству не заработал после загрузки — это доработка: пользовательские поля в строках заявки и проверка при сохранении. Печатная форма спецификации по ГОСТ делается конструктором печатных форм отдельно. Показать, как выглядит такая спецификация и импорт, мы можем на демостенде erp-demo.itfresh.ru по запросу.

Итоги условной загрузки: 6 единиц, 241 номенклатура, 364 строки, 2 ошибки пробы, 1 расхождение 12,5 стало 125
Пробный импорт и сверка нашли все ошибки до приёмки. Открыть крупно

Частые вопросы

Можно ли загрузить смету из Гранд-Сметы в ERPNext напрямую?

Готового коннектора в коробке нет. Смету считают во внешней программе, а в ERPNext загружают только итоговую ресурсную спецификацию: код материала, единицу измерения, плановое количество. Выгрузите её в Excel или CSV, приведите колонки к шаблону Data Import и загрузите. Расценки ФЕР/ТЕР и формы КС-2 в коробке отсутствуют.

Почему Data Import пишет «Duplicate Name» при загрузке?

Чаще всего в файле повторяется ключ строки либо запись с таким именем уже есть в системе, например файл загружали раньше. Уберите дубли кодов в Excel, откройте журнал импорта и посмотрите, что уже создано. Новые прогоны начинайте с 20–30 строк, чтобы увидеть ошибку до массовой загрузки.

Спецификацию договора вести как BOM?

Нет. BOM в ERPNext — производственная спецификация изделия из модуля Manufacturing. Для перечня материалов договора заводят отдельный DocType со строками «позиция, плановое количество, цена» и привязкой к проекту. Формулировка «как BOM» в части материалов — упрощение, для договора она не подходит.

Что делать, если в файле материал, которого нет в справочнике?

Строка с такой ссылкой не пройдёт проверку. Сначала загрузите номенклатуру и единицы измерения, затем спецификацию. Общий порядок для всех загрузок: пользователи, справочники, компании и контрагенты, контакты, потом документы. Так вы не получите каскад ошибок на одной причине.

Сколько позиций можно загрузить за один раз?

В документации ERPNext сказано, что жёсткого лимита нет, но загружать лучше по несколько тысяч записей за раз. Спецификация на объект обычно умещается целиком. Первую загрузку делайте небольшим куском, проверьте результат и только затем грузите остальное, при необходимости разбив файл.

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

© ООО «АйТи-Фреш» · Москва · Все статьи