Skip to content

Repository files navigation

1C SQLite Bridge

Система миграции данных между базами 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С приемник"]
Loading

Более детально по модулям и артефактам:

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 : "запускает сценарии"
Loading

Корневой README оставлен кратким. Подробная документация по рабочим блокам лежит в docs/.

Документация

Структура проекта

  • IN/ - загрузчики из 1С в SQLite
  • PROCESS/ - преобразование сырых БД в обработанные
  • OUT/ - выгрузка из SQLite в 1С
  • CONF/ - метаданные, JSON-маппинги и type_mapping.db
  • BD/ - рабочие SQLite-базы
  • tools/ - общий слой COM, SQLite, маппинга, логирования и служебных операций
  • templates/ - HTML-шаблоны веб-интерфейса

Преимущества Подхода

По сравнению со стандартной конвертацией этот подход дает более высокий уровень управляемости и сопровождения.

  • Управляемость и контроль. Данные проходят через SQLite-слой, а ссылочные объекты и связи по УИД сохраняются отдельно. Это дает возможность понимать, что уже записано, что не дозаполнено, что и когда можно повторно выгрузить, удалить или перезаписать без работы вслепую.
  • Прозрачная промежуточная база. Есть сырые и обработанные БД, которые можно просматривать, проверять и сравнивать до записи в приемник.
  • Гибкая обработка данных. Между импортом и экспортом есть отдельный этап подготовки данных с маппингами, свертками, заменой типов, преобразованием перечислений, настройкой ссылок и прикладной логикой под конкретную конфигурацию.
  • Веб-интерфейс. Операционные сценарии можно запускать и контролировать не только из CLI, но и через браузер, включая просмотр БД и логов.
  • Работа по расписанию. Сценарии можно запускать автоматически, в том числе через scheduled_import.py и внешний планировщик.
  • Уведомления после выполнения. После завершения процесса можно отправлять уведомления в мессенджер, чтобы не отслеживать запуск вручную.
  • Точечная догрузка и повторный запуск. Можно экспортировать не только полный каталог, но и отдельные записи, а также дозаполнять незаполненные ссылочные объекты отдельным проходом.
  • Быстрая адаптация новых сущностей. За счет модульной схемы IN / PROCESS / OUT новые объекты можно подключать поэтапно, а при использовании AI-заряженных IDE быстрее собирать новые loader/processor/writer и уточнять маппинги под новый кейс.
  • Лучше подходит для итеративной миграции. Можно сначала быстро выгрузить и проверить ограниченный набор сущностей, затем доработать маппинги и только после этого масштабировать сценарий.

Быстрый старт

  1. Скопировать .env.example в .env и заполнить строки подключения.
  2. Подготовить или обновить метаданные источника и приемника по инструкции из docs/onboarding.md.
  3. Выполнить импорт, обработку и экспорт нужного каталога через 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

Проект миграции под ключ можно заказать у наших партнеров, ООО «Рациональ».

Статьи

Infostart

License

MIT. See LICENSE.

About

Публичный шаблон для миграции данных между базами 1С через SQLite и Python COM

Topics

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages