Система миграции данных между базами 1С через промежуточный слой SQLite и Python.
Текущий основной сценарий репозитория: перенос данных из УПП в УХ. Архитектура разбита на три стадии:
import: чтение данных из 1С источника и сохранение в SQLite;process: преобразование структуры, типов, ссылок и значений под приемник;export: запись обработанных данных в 1С приемник через COM.
flowchart LR
A["1С источник"] -->|COM| B["Import"]
B --> C["Сырая SQLite БД<br/>BD/<catalog>.db"]
C --> D["Process"]
E["Маппинги и правила<br/>type_mapping.db<br/>catalog_mapping.json<br/>chart_of_accounts_mapping.json"] --> D
D --> F["Обработанная SQLite БД<br/>BD/<catalog>_processed.db"]
F --> G["Export"]
G -->|COM| H["1С приемник"]
Более детально по модулям и артефактам:
erDiagram
SOURCE_1C ||--o{ IMPORT_LOADER : "читает через COM"
IMPORT_LOADER }o--|| RAW_DB : "записывает"
SOURCE_METADATA ||--o{ TYPE_NORMALIZER : "дает типы и enum values"
TYPE_NORMALIZER }o--|| RAW_DB : "нормализует ссылки и перечисления"
RAW_DB ||--o{ PROCESSOR : "обрабатывается"
MAPPING_DB ||--o{ PROCESSOR : "дает object/field/type/enum mapping"
CATALOG_MAPPING ||--o{ PROCESSOR : "дает маршрут catalog"
CHART_MAPPING ||--o{ PROCESSOR : "дает свертки счетов и субконто"
PROCESSOR }o--|| PROCESSED_DB : "формирует"
PROCESSED_DB ||--o{ EXPORT_WRITER : "читается"
TARGET_1C ||--o{ EXPORT_WRITER : "запись через COM"
EXPORT_WRITER ||--o{ REFERENCE_OBJECTS_DB : "фиксирует ссылки и статус записи"
REFERENCE_OBJECTS_DB ||--o{ FILL_UNFILLED : "дает незаполненные ссылки"
PROCESSED_DB ||--o{ FILL_UNFILLED : "дает данные для дозаполнения"
TARGET_1C ||--o{ FILL_UNFILLED : "дозапись через COM"
WEB_INTERFACE ||--o{ RAW_DB : "просматривает"
WEB_INTERFACE ||--o{ PROCESSED_DB : "просматривает"
WEB_INTERFACE ||--o{ CATALOG_MAPPING : "строит список каталогов"
WEB_INTERFACE ||--o{ EXPORT_WRITER : "запускает сценарии"
WEB_INTERFACE ||--o{ PROCESSOR : "запускает сценарии"
WEB_INTERFACE ||--o{ IMPORT_LOADER : "запускает сценарии"
Корневой README оставлен кратким. Подробная документация по рабочим блокам лежит в docs/.
- Онбординг и обновление метаданных
- Импорт из 1С в SQLite
- Обработка данных
- Экспорт в 1С
- Маппинг объектов, полей, типов и перечислений
- SQLite-базы и reference objects
- Веб-интерфейс
IN/- загрузчики из 1С в SQLitePROCESS/- преобразование сырых БД в обработанныеOUT/- выгрузка из SQLite в 1СCONF/- метаданные, JSON-маппинги иtype_mapping.dbBD/- рабочие SQLite-базыtools/- общий слой COM, SQLite, маппинга, логирования и служебных операцийtemplates/- HTML-шаблоны веб-интерфейса
По сравнению со стандартной конвертацией этот подход дает более высокий уровень управляемости и сопровождения.
- Управляемость и контроль. Данные проходят через SQLite-слой, а ссылочные объекты и связи по УИД сохраняются отдельно. Это дает возможность понимать, что уже записано, что не дозаполнено, что и когда можно повторно выгрузить, удалить или перезаписать без работы вслепую.
- Прозрачная промежуточная база. Есть сырые и обработанные БД, которые можно просматривать, проверять и сравнивать до записи в приемник.
- Гибкая обработка данных. Между импортом и экспортом есть отдельный этап подготовки данных с маппингами, свертками, заменой типов, преобразованием перечислений, настройкой ссылок и прикладной логикой под конкретную конфигурацию.
- Веб-интерфейс. Операционные сценарии можно запускать и контролировать не только из CLI, но и через браузер, включая просмотр БД и логов.
- Работа по расписанию. Сценарии можно запускать автоматически, в том числе через
scheduled_import.pyи внешний планировщик. - Уведомления после выполнения. После завершения процесса можно отправлять уведомления в мессенджер, чтобы не отслеживать запуск вручную.
- Точечная догрузка и повторный запуск. Можно экспортировать не только полный каталог, но и отдельные записи, а также дозаполнять незаполненные ссылочные объекты отдельным проходом.
- Быстрая адаптация новых сущностей. За счет модульной схемы
IN / PROCESS / OUTновые объекты можно подключать поэтапно, а при использовании AI-заряженных IDE быстрее собирать новые loader/processor/writer и уточнять маппинги под новый кейс. - Лучше подходит для итеративной миграции. Можно сначала быстро выгрузить и проверить ограниченный набор сущностей, затем доработать маппинги и только после этого масштабировать сценарий.
- Скопировать
.env.exampleв.envи заполнить строки подключения. - Подготовить или обновить метаданные источника и приемника по инструкции из docs/onboarding.md.
- Выполнить импорт, обработку и экспорт нужного каталога через
main.py.
Пример:
python main.py --import --catalog contractors --source-1c source --sqlite-db BD
python main.py --process --catalog contractors --sqlite-db BD
python main.py --export --catalog contractors --target-1c target --sqlite-db BD- Windows
- Python 3.10+
- установленная платформа 1С
- доступ к COM (
pywin32)
Установка зависимостей:
pip install -r requirements.txtПроект миграции под ключ можно заказать у наших партнеров, ООО «Рациональ».
MIT. See LICENSE.