From 6460a2a22da3e8a7d4aff8eca3676c897f42ef96 Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Tue, 27 Oct 2026 14:49:25 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=81=D1=87=D1=91=D1=82=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D1=83=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D1=91=D1=82=D1=81=D1=8F=20=D0=B2=20=D0=B1=D0=B8=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D1=83=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=20=D0=BB=D0=B0=D1=82=D0=B8=D0=BD=D1=81=D0=BA=D0=B8=D0=BC=20?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=B5=D0=BC=20(OCR=20=D1=82=D0=B5?= =?UTF-8?q?=D1=80=D1=8F=D0=BB=20=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 --- .../forms/PaymentRequest/services/invoice.service.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/webparts/requestPortal/forms/PaymentRequest/services/invoice.service.ts b/src/webparts/requestPortal/forms/PaymentRequest/services/invoice.service.ts index 857d08f..69356fd 100644 --- a/src/webparts/requestPortal/forms/PaymentRequest/services/invoice.service.ts +++ b/src/webparts/requestPortal/forms/PaymentRequest/services/invoice.service.ts @@ -8,7 +8,7 @@ import { WebPartContext } from '@microsoft/sp-webpart-base'; import { APPROVAL_API_CLIENT_ID, DATA_SITE_URL, DICTIONARY_API_BASE_URL } from '../../../shared/config'; import { PAYMENT_INVOICES_LIBRARY_TITLE } from '../../../shared/listTitles'; import { getSP } from '../../../shared/pnp/pnpjs'; -import { fileStamp, storedFileName } from '../../../shared/chat/chatFileNames'; +import { fileStamp } from '../../../shared/chat/chatFileNames'; /** Колонка библиотеки, куда OCR кладёт распознанный текст счёта. */ const FILE_CONTENT_FIELD = 'file_content'; @@ -37,10 +37,13 @@ export function validateInvoiceFile(file: File): string | undefined { /** * Сохранить файл счёта в библиотеку. Делаем это сразу при выборе файла, до * сохранения самой заявки: OCR работает с элементом библиотеки, а не с вложением. - * Отметка времени в имени исключает перезапись счёта с тем же именем из другой заявки. + * Имя в библиотеке — только латиница и цифры: OCR-сервис получает имя в multipart и + * на кириллице теряет расширение («unsupported file type ''»). Исходное имя + * хранится в данных заявки (InvoiceFileName), поэтому в библиотеке оно не нужно. + * Метка времени и случайный хвост исключают перезапись счёта другой заявки. */ export async function storeInvoice(file: File): Promise { - const storedName = storedFileName(fileStamp(new Date()), 1, file.name); + const storedName = `invoice-${fileStamp(new Date())}-${Math.random().toString(36).slice(2, 8)}.pdf`; const root = getSP().web.lists.getByTitle(PAYMENT_INVOICES_LIBRARY_TITLE).rootFolder; const added = await root.files.addUsingPath(storedName, file); // Id элемента библиотеки нужен OCR, а addUsingPath отдаёт только сведения о файле.