Отчёты и паспорта

Паспорта участков в Excel. Паспорт строится по фрагментам, включённым на карте, как в десктопе; у начальника участка — архив паспортов всех его участков.

Где найти
«Инструменты» (значок чемоданчика справа вверху) → Реестры и отчёты → «Отчёты и паспорта». То же — палитрой команд: Ctrl+K и начните набирать название.
Права
доступно всем, кто вошёл.
Читаю как

Возможности

  • Окно «Отчёты и паспорта участков». Дерево «Магистральные сети (по начальникам)» и «Распределительные сети (по начальникам)»: начальник участка → участки. Нажатие на участок скачивает его паспорт в 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 и воркер). Без них одиночный паспорт строится напрямую, архив — нет.

Шаги

  1. Откройте «Инструменты» и наберите в поиске «Отчёты и паспорта» — пункт выделен рамкой.

    Пункт «Отчёты и паспорта» в панели «Инструменты»

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

    Окно «Отчёты и паспорта»

Примеры

Копия Алматы: дерево и привязки. В дереве 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.
Хотите увидеть эту функцию на своих данных?Покажем ТГИД на демонстрации и ответим на вопросы инженеров.
Запросить демо