Импорт из Excel в ERPNext: номенклатура и остатки
АйТи Фреш
IT-аутсорсинг и бизнес

Перенос в ERPNext из Excel и 1С: в каком порядке грузить номенклатуру, контрагентов и остатки

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

Импорт из Excel в ERPNext делают через Data Import строго по зависимостям: справочники и склады, контрагенты, номенклатура, а в конце начальные остатки документом Stock Reconciliation. Историю операций не переносят. Ниже порядок, очистка файла, чтение ошибок и сверки после загрузки.

С чего начать перенос данных в ERPNext и что переносить не нужно?

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

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

Про сроки скажу осторожно. Универсальной цифры трудоёмкости переноса нет, и оценки «из обзоров» я в проект не беру: срок зависит от числа справочников, количества источников и того, сколько в них дублей. Честную цифру я называю только после просмотра ваших файлов и пробной загрузки одного справочника на копии. Что я знаю точно: чем чище файл, тем меньше времени на загрузку и тем меньше сверок после неё.

Откуда брать данные. Из 1С импорт «из коробки» идёт через Excel-шаблоны: вы выгружаете справочники в таблицу, а дальше приводите её к шаблону ERPNext. Прямой обмен по формату EnterpriseData требует доработки, и для разового переноса его использовать не стоит. Если данные уже лежат в Excel, дело проще: файл правится руками, а результат загружается в тот же шаблон.

В каком порядке загружать данные и почему порядок важнее скорости

Порядок диктуют ссылки. Item требует группу номенклатуры и единицу измерения, строка остатков — склад и номенклатуру, а Customer ссылается на группу клиентов и территорию: в v15 эти поля не обязательны, но если вы их заполняете в файле, значения уже должны существовать. Если справочник, на который ссылается строка, ещё не загружен, импорт выдаст ошибку на каждой такой строке. Поэтому грузим по цепочке: пользователи и роли, затем справочники и компания, склады, контрагенты и контакты, номенклатура и в конце начальные остатки. Этот порядок я не нарушаю даже ради экономии дня.

Цепочка шагов сведена в таблицу. Она дублирует схему «порядок загрузки» ниже. | Шаг | Что загружаем | Зачем именно сейчас | |---|---|---| | 1 | Пользователи и роли | дальше нужны ответственные | | 2 | Справочники: группы, единицы, территории, компания | на них ссылаются все остальные | | 3 | Склады | нужны для остатков и приёмки | | 4 | Контрагенты и контакты | заказы и счета ссылаются на них | | 5 | Номенклатура (Item) | нужна для остатков и документов | | 6 | Начальные остатки (Stock Reconciliation) | после всего, до первых операций |

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

И последнее про порядок: контрагентов и номенклатуру я загружаю на тестовой копии до боевой, чтобы увидеть ошибки заранее. Боевую загрузку делаем после того, как тестовая прошла без предупреждений. Правило простое и экономит нервы: ошибка, найденная на копии, стоит часа, а найденная в рабочей базе — дня.

Как подготовить Excel: очистка, шаблон Data Import, сопоставление колонок

Data Import работает по шаблону. Вы выбираете тип документа, например Item или Customer, выбираете «добавить новые записи», скачиваете шаблон, заполняете и загружаете файл. Система показывает предпросмотр и предупреждения по номерам строк и колонок ещё до импорта; обязательные поля в шаблоне помечены красной звёздочкой. Шаблон принимает Excel и CSV, и для CSV с кириллицей нужна кодировка UTF-8, иначе вместо названий будут «кракозябры».

Что обязательно в справочниках. По описанию полей в ветке version-15 у Item обязательны код (item_code), группа номенклатуры (item_group) и единица измерения по умолчанию (stock_uom). У Customer обязательны название и тип (customer_name, customer_type), у Supplier — название и тип (supplier_name, supplier_type). Группы и территории у Customer и Supplier в v15 не обязательны, но указанные в файле значения должны уже существовать. Именуются Customer и Supplier по серии номеров (naming series), а Item по коду. И ещё одна деталь: поле ИНН (tax_id) в Customer не помечено как уникальное, поэтому система сама не запретит завести двух контрагентов с одним ИНН. Эту проверку придётся сделать вам, до загрузки.

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

Теперь о том, как сопоставляются колонки. Если вы выгружаете справочник из 1С, заголовки не совпадают с шаблоном, и вам нужно переименовать колонки или собрать таблицу по шаблону. Я делаю это формулами и сводкой в Excel или скриптом, а для разовых сверок иногда использую ИИ-помощников; об одном из таких способов я писал в статье про автоматизацию сверок с Claude for Excel. Но результат всегда проверяется глазами на выборке, потому что модель может «исправить» то, что исправлять не надо.

Начальные остатки: Opening Balance вместо истории операций

Остатки грузятся документом Stock Reconciliation. В описании для version-15 у документа обязательное поле назначения (purpose) с двумя вариантами, Opening Stock и Stock Reconciliation; для ввода начальных остатков выбирайте Opening Stock. Остальные обязательные поля: компания, дата и время проводки, таблица позиций. В строке нужны номенклатура и склад, количество и оценочная стоимость. В документации также указано, что счёт разниц система ставит как Temporary Opening, а у номенклатуры должна быть включена опция Maintain Stock, иначе остаток не создастся. Дату проводки выбирайте как дату отсечки: последнее число закрытого периода, а не «сегодня».

Порядок такой: сначала загружены все справочники, затем документом Stock Reconciliation вводятся остатки, и только после этого создаются обычные операции. Если провести приход или расход раньше, себестоимость исказится, и чинить её придётся сторнированием. Поэтому в ТЗ я записываю это условие отдельной строкой.

Отдельная тема — остатки по расчётам с контрагентами. Для неоплаченных и частично оплаченных счетов есть Opening Invoice Creation Tool: по документации он вводит только неоплаченные суммы покупателей и поставщиков с датами и возрастом долга, и его не используют для оплаченных счетов и складских движений. Если вы вводите остатки по расчётам, исключите те же контрольные счета из начальных проводок, чтобы не получить удвоение.

Мой выбор прост: остатки по складу вводим из выгрузки на дату отсечки, расчёты — только по тем счетам, которые реально будут закрываться в новой системе, а бухгалтерский баланс остаётся в 1С. Если ERPNext у вас только операционный контур, дублировать в нём бухгалтерию не нужно.

Какие ошибки даёт Data Import и как их читать

Ошибки при импорте делятся на три группы, и симптом почти всегда указывает на причину. Первая — Duplicate Name: запись с таким ключом уже есть. Документация показывает эту ошибку как типовую при попытке добавить запись с повторяющимся именем. Причина — дубль в файле или запись, загруженная ранее. Действие — найти дубль, объединить или переименовать и повторить. Чтобы не ловить её вновь, очистка файла должна идти до загрузки, а не после.

Вторая группа — не найдена связанная запись в поле-ссылке. Например, в строке номенклатуры указана группа, которой нет в системе. Причина почти всегда в порядке загрузки: справочник загружен позже. Действие — вернуться на шаг порядка и догрузить справочник. Третья — остатки после загрузки не сошлись с источником: чаще всего дата проводки взята не та, или оценка рассчитана иначе, чем в 1С. Действие — сверить дату отсечки и пересоздать Stock Reconciliation на копии.

Как читать журнал. После успешной загрузки в разделе Import Log виден каждый созданный документ, а по неудачным строкам можно выгрузить ошибки и исправить только их. Для обновления уже созданных записей есть режим «обновить существующие»: в выгрузке нужно сохранить колонку ID нетронутой, и учтите, что удаление строк дочерней таблицы в файле удалит их в системе.

Ещё одна ловушка — имена. Если контрагенты именуются по серии, а не по названию, одинаковые названия не вызовут ошибки Duplicate Name: система создаст две записи с разными номерами. Это удобно для импорта и опасно для чистоты справочника. Проверьте, как у вас настроено именование, прежде чем грузить тысячу строк, и сверьте это на тестовой загрузке.

Как «Комплект Объект» переносила данные из 1С и Excel на 13 рабочих мест

Условный пример: компания по комплектации объектов «Комплект Объект», 13 рабочих мест. Номенклатура жила в 1С, снабженческие справочники и часть остатков — в личных таблицах Excel. Контрагенты в двух источниках не совпадали: одни и те же поставщики были заведены по-разному, и ИНН у части отсутствовал. Цифры в примере иллюстративны.

Мы выгрузили оба источника и сделали сводную таблицу контрагентов. После нормализации названий и сверки по ИНН примерно пятая часть записей оказалась дублями, а у нескольких поставщиков не было ИНН вовсе, поэтому их мы согласовали с бухгалтером вручную. Номенклатуру нормализовали по единицам измерения: в таблицах метры и пог. метры встречались вперемешку. Исторические документы мы не переносили, а остатки взяли из 1С на дату отсечки.

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

Что осталось нерешённым, и мы сказали заказчику сразу. Часть материалов в Excel не имела кодов, и их заводили вручную по мере необходимости. Оценка запасов в ERPNext (управленческая) и в 1С (бухгалтерская) на копейки расходилась, и мы зафиксировали в регламенте, какая из них главная. Показать, как выглядит загрузка, можно на демостенде erp-demo.itfresh.ru по запросу.

Как проверить загрузку и откатить: контрольные сверки

Проверка начинается до загрузки. Перед каждой серией импорта делаем резервную копию сайта: команда bench backup создаёт копию базы, а с ключом --with-files и файлов. Восстанавливают её командой bench restore с путём к файлу базы. Проверьте синтаксис в своей версии: параметры отличаются у установок на Docker.

# Копия базы и файлов перед загрузкой
bench --site erp.example.com backup --with-files

# Восстановление из копии при необходимости
bench --site erp.example.com restore /path/to/database.sql.gz

Откат — слабое место Data Import. В документации отдельного механизма отмены загрузки я не нашёл, поэтому страховка — это копия и тест на копии. Если ошибка найдена сразу, часто проще восстановить копию, чем удалять записи по одной; если записи уже использованы в документах, удалить их нельзя, и нужно действовать иначе: исправлять через режим обновления.

Контрольные сверки я делаю три. Первая — число записей в системе против числа строк в файле. Вторая — общая стоимость остатков по складам против выгрузки из 1С на дату отсечки. Третья — выборка из двадцати–тридцати позиций глазами: единицы, группы, названия. Расхождение даже в одной сверке — повод остановиться, а не двигаться дальше.

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

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

Как загрузить номенклатуру из Excel в ERPNext?

Через Data Import: выберите тип документа Item, скачайте шаблон, заполните его и загрузите, проверив предпросмотр. Обязательные поля номенклатуры: код, группа и единица измерения. Перед загрузкой уберите дубли и сделайте коды уникальными, а исторические документы не переносите.

Можно ли перенести всю историю закупок из 1С?

Технически можно, но я не рекомендую: загрузка исторических документов искажает себестоимость и увеличивает сверки. Загрузите только остатки на дату отсечки, а историю оставьте в архиве 1С. Если история нужна для отчёта, её лучше выгрузить в таблицу и хранить отдельно.

В каком порядке загружать данные в ERPNext?

По зависимостям: пользователи и роли, справочники и компания, склады, контрагенты, номенклатура, и в конце начальные остатки документом Stock Reconciliation. Нарушение порядка даёт ошибки на строках с несуществующими ссылками, и вам придётся догружать справочники.

Что делать с ошибкой Duplicate Name при импорте?

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

Сколько времени занимает перенос данных?

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

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

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

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

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

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

Источники

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