Перенос в ERPNext из Excel и 1С: в каком порядке грузить номенклатуру, контрагентов и остатки
Импорт из 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. Но результат всегда проверяется глазами на выборке, потому что модель может «исправить» то, что исправлять не надо.
- Один контрагент — одна строка: ищем дубли по ИНН и по нормализованному названию
- Один материал — один код: схлопываем «Профиль 60х27» и «профиль 60*27»
- Единицы измерения единообразны: штуки, метры и килограммы записаны одинаково
- Пустые обязательные поля заполнены или строки убраны
- Даты и числа в одном формате, десятичный разделитель один
- Для CSV выбрана кодировка UTF-8
- Тестовая загрузка прошла на копии базы без предупреждений
Начальные остатки: 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 при импорте?
Она означает, что запись с таким именем уже есть. Найдите дубль в файле или в системе, объедините или переименуйте и повторите загрузку. Чтобы не ловить ошибку снова, очистите файл до импорта, а при именовании по серии проверяйте дубли по ИНН отдельно.
Сколько времени занимает перенос данных?
Универсальной цифры нет: срок зависит от числа источников, объёма справочников и количества дублей, и основное время уходит на очистку, а не на саму загрузку. Я сначала смотрю файлы и делаю пробную загрузку одного справочника на копии базы, а уже потом называю оценку по часам.
Источники
- ERPNext Docs — Data Import — Шаблон, предпросмотр, Import Log, обновление записей, Excel и CSV в UTF-8, пример Duplicate Name, рекомендация о тысячах записей за раз, проверено 01.10.2026: https://docs.frappe.io/erpnext/data-import
- ERPNext Docs — Stock Reconciliation — Opening Stock, Valuation Rate, счёт разниц Temporary Opening, Maintain Stock, проверено 01.10.2026: https://docs.frappe.io/erpnext/stock-reconciliation
- ERPNext Docs — Opening Invoice Creation Tool — Ввод неоплаченных счетов покупателей и поставщиков при запуске, проверено 01.10.2026: https://docs.frappe.io/erpnext/opening-invoice-creation-tool
- GitHub frappe/erpnext — Item, Customer, Supplier, Stock Reconciliation (version-15) — Обязательные поля и тип именования, tax_id без признака unique, проверено 01.10.2026: https://github.com/frappe/erpnext/blob/version-15/erpnext/stock/doctype/item/item.json
- Frappe Docs — bench restore; frappe/commands/site.py — Синтаксис bench restore, опция --with-files у backup в version-15, проверено 01.10.2026: https://docs.frappe.io/framework/user/en/bench/reference/restore
