From a6f4218e7efb0289464e3ae792c93fc77434a90c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80=20=D0=93=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= Date: Tue, 13 Oct 2026 09:36:48 +0500 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BC=D0=B0=D1=80=D1=88=D1=80=D1=83?= =?UTF-8?q?=D1=82=20=D0=B7=D0=B0=D1=8F=D0=B2=D0=BA=D0=B8=20=D0=B2=201?= =?UTF-8?q?=D0=A1=20=D1=83=D1=87=D0=B8=D1=82=D1=8B=D0=B2=D0=B0=D0=B5=D1=82?= =?UTF-8?q?=20=D0=B1=D0=B0=D0=B7=D1=83=201=D0=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Новая матрица маршрута #8 назначает согласующих по выбранной базе (ЗУП, АТП, ATS), а форма передавала в approval-route только вид работ и отдел — такие шаги никогда не срабатывали. Теперь DB1C уходит в fieldValues одной строкой через пробел (мультивыбор, value у API только строка), и маршрут пересчитывается при смене набора баз. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../requestPortal/forms/Ticket1C/README.md | 12 ++++++----- .../forms/Ticket1C/Ticket1CForm.tsx | 20 +++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/webparts/requestPortal/forms/Ticket1C/README.md b/src/webparts/requestPortal/forms/Ticket1C/README.md index c43b0cd..14dff97 100644 --- a/src/webparts/requestPortal/forms/Ticket1C/README.md +++ b/src/webparts/requestPortal/forms/Ticket1C/README.md @@ -12,11 +12,13 @@ Если для вида работ согласование не требуется — заявка сразу «Выполнение». Работу отдел 1С ведёт в карточке Microsoft Planner (см. «Особое поведение»). - Особенности: маршрут условный — набор шагов зависит от полей **«Виды работ»** - (`WorkType`) и **«Отдел»** (`Department`, свободный текст из профиля AAD, см. - «Особое поведение»), которые передаются в `resolveRoute`/`getPlannedMatrix` через - параметр `fieldValues: [{ fieldName: 'WorkType', value: data.WorkType }, - { fieldName: 'Department', value: data.Department }]` (см. `IResolveFieldValue` в - `shared/approval/models/IApprovalRouteApi.ts`). В админке маршрутов условие по + (`WorkType`), **«База 1С»** (`DB1C`) и **«Отдел»** (`Department`, свободный текст + из профиля AAD, см. «Особое поведение»), которые передаются в + `resolveRoute`/`getPlannedMatrix` через параметр `fieldValues` (см. + `IResolveFieldValue` в `shared/approval/models/IApprovalRouteApi.ts`). «База 1С» — + мультивыбор, а `value` у API только строка, поэтому все выбранные базы уходят + одной записью через пробел; условия по ней в админке — только «содержит» + (напр. «База 1С содержит ЗУП»). В админке маршрутов условие по отделу настроено оператором «содержит» (напр. «Department содержит Бухгалтерия»), поэтому важно фактическое значение поля, а не Id из справочника — отдельного DepartmentId у этой формы нет. Для части видов работ маршрут пуст — согласование diff --git a/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx b/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx index 39d8871..af6b15f 100644 --- a/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx +++ b/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx @@ -168,20 +168,24 @@ const Ticket1CForm: React.FC = ({ const requestTypeIdState = useRequestTypeId(context, requestType.id); const requestTypeId = requestTypeIdState.id; - // Маршрут полностью и однозначно определяется видом работ и отделом — настроен - // в админке маршрутов (условные шаги по WorkType и Department, см. fieldValues), - // а не выбирается заявителем. Поэтому матрица здесь ВСЕГДА нередактируема - // (editable=false) — заявитель только видит, кто согласует, без возможности - // добавить/убрать/переставить согласующего. - // Условия шагов (и согласования, и исполнения) — по виду работ и отделу. + // Маршрут полностью и однозначно определяется видом работ, базой 1С и отделом — + // настроен в админке маршрутов (условные шаги по WorkType, DB1C и Department, + // см. fieldValues), а не выбирается заявителем. Поэтому матрица здесь ВСЕГДА + // нередактируема (editable=false) — заявитель только видит, кто согласует, без + // возможности добавить/убрать/переставить согласующего. + // Базы 1С — мультивыбор, а approval-route принимает value только строкой: + // передаём все выбранные базы одной записью через пробел (как CompaniesJson в + // RecruitingHire), условия в админке — «База 1С содержит ЗУП/АТП/ATS». + const databasesFieldValue = data.DB1C.slice().sort().join(' '); const fieldValues = useMemo( () => [ { fieldName: 'WorkType', value: data.WorkType }, + { fieldName: 'DB1C', value: databasesFieldValue }, { fieldName: 'Department', value: data.Department } ], - [data.WorkType, data.Department] + [data.WorkType, databasesFieldValue, data.Department] ); - const matrixKey = `${userEmail}-${editId ?? 'new'}-${data.WorkType}-${data.Department}`; + const matrixKey = `${userEmail}-${editId ?? 'new'}-${data.WorkType}-${databasesFieldValue}-${data.Department}`; const matrixReady = isOpenedRouteReady(editId, requestStatus, requestTypeId) && (!!editId || (!!data.WorkType && !!requestTypeId)); const loadMatrix = useCallback(