Skip to content

Latest commit

 

History

History
102 lines (68 loc) · 4.86 KB

File metadata and controls

102 lines (68 loc) · 4.86 KB

Обработка

Обработка превращает сырую SQLite-базу из импорта в обработанную базу, готовую к экспорту в приемник. За стадию отвечает main.py --process и модули из PROCESS/.

Как это работает

Поток выполнения:

  1. main.py определяет исходную сырую БД BD/<catalog>.db.
  2. process_stage.py ищет модуль PROCESS/<catalog>_processor.py.
  3. Если процессор найден, вызывается функция process_<catalog>(source_db, processed_db).
  4. Если процессор не найден, файл БД просто копируется в обработанный слой без изменений.

Результат обработки по умолчанию сохраняется в:

  • BD/<catalog>_processed.db

Можно задать отдельный каталог для обработанных баз через --processed-db.

Зачем вообще нужен отдельный processed-слой

Сырые данные и данные на экспорт решают разные задачи:

  • сырая БД отражает структуру источника;
  • обработанная БД уже подгоняется под логику приемника;
  • при отладке можно сравнивать исходный и преобразованный слой без повторного чтения из 1С.

Это особенно важно для:

  • переименования полей;
  • замены ссылочных типов;
  • конвертации значений перечислений;
  • доподготовки табличных частей;
  • маппинга плана счетов и субконто;
  • подготовки данных к последующей записи writer-ом.

Базовая логика процессоров

Общий каркас вынесен в tools/base_processor.py и класс MappingProcessor.

Он загружает:

  • маппинг полей из field_mapping;
  • маппинг типов из type_mapping;
  • маппинг значений перечислений из enumeration_value_mapping;
  • маппинг плана счетов из CONF/chart_of_accounts_mapping.json.

Стандартные реквизиты вроде uuid, Код, Наименование, ЭтоГруппа переносятся по отдельным правилам и не требуют явного маппинга для каждого каталога.

Типовой запуск

python main.py --process --catalog contractors --sqlite-db BD

Если нужно разнести сырые и обработанные базы:

python main.py --process --catalog contractors --sqlite-db BD/raw --processed-db BD/processed

Обработка всех каталогов:

python main.py --process --catalog all --sqlite-db BD

Что должно получиться после обработки

Минимальный ожидаемый результат:

  • есть файл BD/<catalog>_processed.db;
  • в нем есть таблица с именем каталога или ожидаемая схема для writer;
  • поля соответствуют ожиданиям приемника;
  • ссылочные значения подготовлены к поиску, созданию и фиксации на этапе экспорта.

Если процессор отсутствует

Это допустимое поведение. process_stage.py в таком случае копирует сырую БД как есть. Такой режим полезен:

  • на раннем этапе подключения нового каталога;
  • для объектов, где структура источника и приемника почти совпадает;
  • как временный fallback во время разработки.

Но для полноценного экспорта в 1С этого часто недостаточно, потому что writer ожидает уже адаптированную структуру.

Что проверять при отладке

  • существует ли PROCESS/<catalog>_processor.py;
  • создается ли *_processed.db;
  • совпадает ли имя таблицы с ожиданиями writer;
  • загрузился ли CONF/type_mapping.db;
  • корректно ли маппятся перечисления и счета.

Связанные файлы

  • main.py
  • process_stage.py
  • PROCESS/
  • tools/base_processor.py
  • CONF/type_mapping.db
  • CONF/chart_of_accounts_mapping.json