Отчёты и паспорта
Паспорта участков в Excel. Паспорт строится по фрагментам, включённым на карте, как в десктопе; у начальника участка — архив паспортов всех его участков.
Возможности
- Окно «Отчёты и паспорта участков». Дерево «Магистральные сети (по начальникам)» и «Распределительные сети (по начальникам)»: начальник участка → участки. Нажатие на участок скачивает его паспорт в Excel, ход построения виден под названием участка.
- Кнопка архива у начальника участка — паспорта всех его участков МС или РС одним ZIP-файлом с перечнем.
- Паспорт строится по фрагментам, включённым на карте; число таких фрагментов указано над деревом.
- Если привязок участков в базе нет совсем, над деревом — предупреждение «Привязки участков в БД не заполнены» со списком причин и строкой «Трубы с участками МС/РС: … / …».
- Тот же паспорт можно скачать из окна «Участки ПТС» (кнопка «Паспорт») и из карточки трубы или узла.
Как это работает
Откуда дерево. Участки МС — таблица uchastok_ms (название — «Описание участка МС»), участки РС — uchastok_rs («Наименование участка РС»). Начальник берётся через участок эксплуатации: uchastki_ekspluatatsii.nachalnik_uchastka → nachalniki_uchastkov. Участки без названия в дерево не попадают. Участки без начальника собраны в группу «Неизвестный начальник», кнопки архива у неё нет.
Какие трубы входят в паспорт. Труба относится к участку по полю «Участок МС» или «Участок РС» её карточки (heatpipesections.magistralsite / distsite); привязывают их в окне «Участки ПТС». В паспорт идут трубы вне внутренних схем, фрагмент трубы определяется по её начальному узлу. Отбор по фрагментам — как в десктопе, который строит паспорт по подключённым фрагментам. Если на карте не включён ни один фрагмент, берутся все фрагменты базы. В базах с фрагментами-вариантами (копии магистралей) без отбора одна и та же труба попадает в паспорт по разу из каждого варианта.
Что в файле. Книга Excel Passport_ms_<id>.xlsx или Passport_rs_<id>.xlsx, 17 листов:
- титульный лист (общая характеристика участка МС или РС);
- Ф1 «Трубы», Ф2_1 и Ф2_2 «Механическое оборудование», Ф3 «Каналы», Ф4 «Камеры», Ф5 «Павильоны», Ф6 «Опоры», Ф7 «Спец. конструкции», Ф8 «Изоляция труб»;
- Ф9 «Ответственное лицо», Ф10 «Ремонт», Ф11 «Нарушение», Ф12 «Шурфовки», Ф13 «Вырезки», Ф14 «Опрессовки», Ф15 «Осмотр».
Формы — перенос паспорта десктопной ТГИД. Ф1–Ф8 сверены с ним поячеечно. Ф9–Ф15 в текущем десктопе выключены, веб их оставляет. Строки форм нумеруются одинаково: сначала труба, затем узел. В Ф1 объём трубы считается как π · dвн² · L, без деления на 4 — так же, как в десктопе. Это в 4 раза больше геометрического объёма.
Готовность данных. При открытии окно проверяет привязки в базе. Причины, по которым паспорта не получатся, перечислены в предупреждении:
- «Трубы не привязаны к участкам ПТС — паспорт не найдёт трубы участка»;
- «Узлы не привязаны к участкам ПТС — паспорт по узлу или трубе не откроется»;
- «У магистральных участков не заданы концевые узлы — участок не восстановить по концам»;
- «В базе нет паспортов участков».
Если проверка не загрузилась, дерево всё равно открывается, а сверху — уведомление «Проверка готовности данных паспортов не загрузилась».
Как строится. Паспорт строится фоновой задачей: под участком видно, что сейчас делается. Формы строятся параллельно, у каждой своё соединение с базой; сколько одновременно — задаёт PASSPORT_FORM_WORKERS. Ошибка любой формы останавливает паспорт целиком: неполного файла не будет.
Архив начальника. ZIP со всеми участками начальника в выбранной ветке (МС или РС): один файл паспорта на участок («МС 31 — М-1Юк.xlsx») и «Перечень участков.xlsx» с колонками «№», «Вид», «Участок», «Наименование», «Труб», «Файл паспорта / причина». Участок без труб во включённых фрагментах пропускается с пометкой «пропущен: нет труб в выбранных фрагментах». Ошибка одного паспорта не останавливает остальные и попадает в перечень: понятная причина — текстом («не сформирован: нет ни одного трубопровода»), сбой построения — «не сформирован: ошибка сервера», подробности пишутся в журнал сервера. Окно ждёт архив до 60 минут.
Персональные данные. В названиях групп дерева, в имени архива и в его перечне стоит ФИО начальника участка. На титульном листе, в Ф9 и Ф15 — ФИО начальника и ответственных лиц. Excel не маскируется: право «Персональные данные потребителей полностью» на эти файлы не влияет.
Что нужно для работы
- Скачать паспорт и архив может любой вошедший.
- В базе города — участки (
uchastok_ms,uchastok_rs) с привязанными трубами. Без привязки паспорт участка не строится. - Нужные фрагменты включены на карте («Слои» → «Фрагменты»).
- Фоновые задачи (Redis и воркер). Без них одиночный паспорт строится напрямую, архив — нет.
Шаги
Откройте «Инструменты» и наберите в поиске «Отчёты и паспорта» — пункт выделен рамкой.

Нажмите пункт — откроется окно.

Примеры
Копия Алматы: дерево и привязки. В дереве 60 участков МС у 4 начальников и 34 участка РС у 8 групп; 3 участка РС — без начальника. Трубы привязаны только к одному участку — МС 31 «М-1Юк»: 3 записи трубы 1ДЖ-12 → 1ДЖ-13 по 161 м из фрагментов 74, 115 и 117. Остальные участки отдают ошибку «нет ни одного трубопровода».
Почему важны фрагменты (та же копия). Паспорт МС 31 по всем фрагментам: в Ф1 три одинаковые строки 1ДЖ-12 → 1ДЖ-13 (Dн 325 мм, 161 м), «Итого» — 483 м. Тот же паспорт при одном включённом фрагменте 74: одна строка, «Итого» — 161 м. Книга — 17 листов, около 31 КБ, строится за 20–25 с.
Объём трубы в Ф1 (та же строка). Dн 325 мм, стенка 5 мм, внутренний диаметр 315 мм, длина 161 м. В колонке «Объем трубы, м3» — 50,19: это π · 0,315² · 161, как в десктопе. Геометрический объём трубы, π/4 · 0,315² · 161, — 12,55 м³, вчетверо меньше.
Если не получается
- «Для участка ms/N нет ни одного трубопровода. Привяжите трубы к участку в инструменте «Участки ПТС» — без них паспорт сформировать нельзя.» — к участку не привязана ни одна труба во включённых фрагментах; привяжите трубы в «Участки ПТС» или включите фрагменты.
- «У начальника участка … нет участков МС» (или РС) — в этой ветке у начальника нет участков.
- «У участков начальника … нет труб в выбранных фрагментах…» — ни у одного его участка нет труб во включённых фрагментах.
- «Ни один паспорт участков начальника … не сформирован: …» — каждый паспорт упал; причины перечислены в сообщении.
- «Узел N не привязан ни к магистральному, ни к распределительному участку ПТС — паспорт формируется только по участку. Откройте паспорт из списка участков или привяжите узел к участку в инструменте «Участки ПТС».» — паспорт открыт из карточки узла или трубы, а узел не относится ни к одному участку.
- «Проверка готовности данных паспортов не загрузилась» — сервер не ответил на проверку привязок; дерево и паспорта работают, нет только списка причин.
- «Ошибка загрузки паспортов» — дерево не загрузилось, нет связи с сервером API.
- «Ошибка формирования паспорта» / «Ошибка формирования паспортов» с текстом сервера; «Не удалось сформировать паспорт» без подробностей — сбой построения, причина в журнале сервера.
Для администратора
PASSPORT_FORM_WORKERS— сколько форм строить одновременно (по умолчанию 3, от 1 до 8). Каждая форма открывает своё соединение с PostgreSQL; при общем сервере на много баз число соединений ограничено.- Фоновые задачи: Redis (
REDIS_ADDR,REDIS_PASSWORD,REDIS_DB), очередьFILE_JOBS_QUEUE, срок хранения готового файлаFILE_JOBS_TTL, хранилищеFILE_STORAGE. - Таблицы десктопные:
uchastok_ms,uchastok_rs,uchastki_ekspluatatsii,nachalniki_uchastkov,rayon_ekspluatatsii,heatpipesections; формы читают и журналы (ремонты, нарушения, шурфовки, опрессовки, осмотры).
Для разработчика
- Дерево:
GET /api/passports/hierarchy; диагностика привязок:GET /api/passports/diagnostics(blockers,counts) —routers/reports.py,database/passport_diagnostics.py. Сбой диагностики окно не считает ошибкой: дерево открывается, сверху — предупреждение. - Паспорт: фоновая задача
POST /api/v1/file-jobs(kind=passport,table—uchastok_ms/uchastok_rs/linesobj/nodes,obj_id,fragments), напрямую —POST /api/db/object/{table}/{obj_id}?fragments=1,2. Архив —kind=passport_chief(nach_id,kinds,fragments). Код —database/passport_excel.py,database/file_jobs.py, формы —passport_module/(p.py,f1.py…f15.py,sort_graph.py). - Веб:
components/PassportDialog.vue,services/api/reports.ts(getPassportHierarchy,downloadPassport,downloadChiefPassports), фрагменты —stores/fragmentStore.ts. - Тесты: API —
tests/test_passport_pg.py,tests/test_passport_chief.py,tests/test_passport_length_rounding.py; веб —tests/components/PassportDialog.spec.ts.
