jze9 b5f7060a1f Приём документов → реестр + журнал
Внесение данных из файлов приёма в реестр невостребованных документов
и заполнение журнала. Дата внесения — текущая; журнал заполняется чисто
(без строк-примеров шаблона).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 03:11:18 +05:00

Приём документов → реестр + журнал

Программа вносит данные о принятых документах из файлов в папке прием в файл 2026_ЕДИНЫЙ РЕЕСТР НЕВОСТРЕБОВАННЫХ ДОКУМЕНТОВ на соответствующие листы (последующими записями) и заполняет Журнал внесения.

Работает на чистых Python-библиотеках (odfpy, openpyxl, xlrd), LibreOffice не требуется. Оформление реестра (стили ячеек, формат дат, прочие листы) сохраняется: новые строки копируют стиль последней строки листа.

Запуск

Графический интерфейс (выбор файлов мышью, кнопка «Внести данные»):

pip install -r requirements.txt
python3 gui.py

Или из командной строки (по умолчанию берёт файлы из текущей папки):

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              оркестратор
Description
Приём документов → реестр невостребованных документов + журнал внесения
Readme 56 KiB
Languages
Python 98.1%
Batchfile 1.9%