Приём документов → реестр + журнал
Внесение данных из файлов приёма в реестр невостребованных документов и заполнение журнала. Дата внесения — текущая; журнал заполняется чисто (без строк-примеров шаблона). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
80
README.md
Normal file
80
README.md
Normal file
@@ -0,0 +1,80 @@
|
||||
# Приём документов → реестр + журнал
|
||||
|
||||
Программа вносит данные о принятых документах из файлов в папке `прием`
|
||||
в файл **2026_ЕДИНЫЙ РЕЕСТР НЕВОСТРЕБОВАННЫХ ДОКУМЕНТОВ** на соответствующие
|
||||
листы (последующими записями) и заполняет **Журнал внесения**.
|
||||
|
||||
Работает на чистых Python-библиотеках (`odfpy`, `openpyxl`, `xlrd`),
|
||||
**LibreOffice не требуется**. Оформление реестра (стили ячеек, формат дат,
|
||||
прочие листы) сохраняется: новые строки копируют стиль последней строки листа.
|
||||
|
||||
## Запуск
|
||||
|
||||
Графический интерфейс (выбор файлов мышью, кнопка «Внести данные»):
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
python3 gui.py
|
||||
```
|
||||
|
||||
Или из командной строки (по умолчанию берёт файлы из текущей папки):
|
||||
|
||||
```bash
|
||||
python3 run.py
|
||||
```
|
||||
|
||||
Оригиналы не изменяются — результат пишется рядом:
|
||||
|
||||
* `2026_ЕДИНЫЙ РЕЕСТР НЕВОСТРЕБОВАННЫХ ДОКУМЕНТОВ._ЗАПОЛНЕНО.ods`
|
||||
* `Журнал внесения_ЗАПОЛНЕНО.xlsx`
|
||||
|
||||
Скрипт идемпотентен: всегда читает оригиналы, повторный запуск не задваивает данные.
|
||||
|
||||
## Правило сопоставления
|
||||
|
||||
Файл `DD.MM.YYYY_74_NN.<ext>` из папки `ТОk` → лист `ТОk_NN` реестра.
|
||||
|
||||
По заданию: **«внести все строки, начиная со второй»**. Поэтому пропускается
|
||||
только шапка (строка 1), а каждая последующая **непустая** строка вносится как
|
||||
отдельная запись — без фильтрации по № п/п. № п/п в реестре проставляется
|
||||
заново (сквозной, продолжает нумерацию листа), исходный № отбрасывается.
|
||||
|
||||
Колонки источника B…M переносятся **позиционно** в одноимённые колонки листа.
|
||||
Значения ячеек очищаются от внешних пробелов (единообразно для всех форматов).
|
||||
|
||||
## Данные правее колонки M
|
||||
|
||||
В реестре 13 колонок (A…M). Если в источнике есть данные в 14-й колонке
|
||||
(напр. «закладная погашена» в `16.04.2026_74_33`), отдельной колонки для них
|
||||
нет — они добавляются в «Примечание» той же строки. Все такие случаи
|
||||
перечисляются в `Pipeline().run().notes` (информационно).
|
||||
|
||||
## Известное ограничение
|
||||
|
||||
Сопоставление колонок — **позиционное** (колонка N источника → колонка N листа).
|
||||
Это верно для текущего шаблона приёма. Если появится файл с другим порядком
|
||||
или набором колонок (сдвиг влево), значения попадут не в свои поля, и это
|
||||
**не** будет обнаружено автоматически — сдвиг вправо/лишние колонки ловятся
|
||||
предупреждением, сдвиг влево — нет. При смене шаблона нужна проверка по
|
||||
заголовкам.
|
||||
|
||||
## Структура
|
||||
|
||||
```
|
||||
gui.py десктоп-интерфейс (tkinter)
|
||||
run.py точка входа из командной строки
|
||||
priem_register/
|
||||
config.py пути, константы, раскладка колонок A..M
|
||||
models.py Record, SourceFile, JournalEntry
|
||||
mapping.py поиск файлов приёма и привязка к листам
|
||||
readers/ чтение источников по форматам
|
||||
base.py SourceReader: пропуск шапки, все непустые строки, нарезка колонок
|
||||
xls_reader.py .xls (xlrd; даты-сериалы Excel)
|
||||
xlsx_reader.py .xlsx (openpyxl)
|
||||
ods_reader.py .ods (odfpy; разворот повторов)
|
||||
factory.py выбор читателя по расширению
|
||||
writers/
|
||||
register_writer.py дозапись строк в .ods с копированием стилей
|
||||
journal_writer.py заполнение журнала .xlsx
|
||||
pipeline.py оркестратор
|
||||
```
|
||||
Reference in New Issue
Block a user