Внесение данных из файлов приёма в реестр невостребованных документов и заполнение журнала. Дата внесения — текущая; журнал заполняется чисто (без строк-примеров шаблона). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Приём документов → реестр + журнал
Программа вносит данные о принятых документах из файлов в папке прием
в файл 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 оркестратор