Обработка превращает сырую SQLite-базу из импорта в обработанную базу, готовую к экспорту в приемник. За стадию отвечает main.py --process и модули из PROCESS/.
Поток выполнения:
main.pyопределяет исходную сырую БДBD/<catalog>.db.process_stage.pyищет модульPROCESS/<catalog>_processor.py.- Если процессор найден, вызывается функция
process_<catalog>(source_db, processed_db). - Если процессор не найден, файл БД просто копируется в обработанный слой без изменений.
Результат обработки по умолчанию сохраняется в:
BD/<catalog>_processed.db
Можно задать отдельный каталог для обработанных баз через --processed-db.
Сырые данные и данные на экспорт решают разные задачи:
- сырая БД отражает структуру источника;
- обработанная БД уже подгоняется под логику приемника;
- при отладке можно сравнивать исходный и преобразованный слой без повторного чтения из 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.pyprocess_stage.pyPROCESS/tools/base_processor.pyCONF/type_mapping.dbCONF/chart_of_accounts_mapping.json