From 2067778ba3bad527bd1e5850304d1c82acb81fc8 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 1 Aug 2026 17:34:16 +0300 Subject: [PATCH] =?UTF-8?q?docs(db-guide):=20=D1=80=D0=B0=D0=B7=D1=80?= =?UTF-8?q?=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D1=81=D1=8B=D0=BB?= =?UTF-8?q?=D0=BE=D1=87=D0=BD=D1=8B=D1=85=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D1=80=D0=B0=D0=B7=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=B5=20EPF/ERF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Замер на реквизите CatalogRef (8.3.24): в базе с подходящей конфигурацией конфигуратор и ibcmd дают одинаковый результат — имя типа (cfg:CatalogRef.Валюты). Движок начинает влиять, только когда база не та: ibcmd оставляет идентификатор типа (), 1cv8 подменяет тип на xs:string с квалификаторами строки. Годится только имя типа: оно резолвится по имени и собирается в любой конфигурации с одноимённым объектом. Идентификатор привязан к исходной конфигурации — в чужой базе сборка проходит без ошибки, но uuid остаётся висячим. Оба деградированных варианта молчаливы, поэтому разбирать EPF/ERF нужно только в базе с подходящей конфигурацией. Инструкции навыков epf-dump/erf-dump намеренно не меняются: ограничение там уже сформулировано, а объяснение «что будет, если разобрать в пустой базе» только провоцирует так делать. Co-Authored-By: Claude Opus 5 (1M context) --- docs/db-guide.md | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/docs/db-guide.md b/docs/db-guide.md index c1c50337..f86debf2 100644 --- a/docs/db-guide.md +++ b/docs/db-guide.md @@ -123,10 +123,25 @@ Claude вызовет `/db-run dev`. 91807 файлов из 91807). Дампы конфигурации, снятые разными движками, сравнимы напрямую. Это НЕ распространяется на разбор внешних обработок и отчётов (`epf-dump`/`erf-dump`): там результат -определяется не движком, а **базой, в которой идёт разбор**. Если ссылочные типы реквизитов в этой -базе не разрешаются (в конфигурации нет соответствующих объектов), в исходники попадают -идентификаторы вместо имени типа. Поэтому для разбора нужна база с матч-конфигурацией — и при -работе через `ibcmd` за этим надо следить отдельно, чтобы разбор не ушёл в пустую или чужую базу. +определяется **базой, в которой идёт разбор**, а движок начинает влиять, когда база не та. + +Замер на реквизите типа `CatalogRef.Валюты` (платформа 8.3.24): + +| База разбора | Движок | Что попадает в исходники | +|---|---|---| +| с подходящей конфигурацией | `1cv8` и `ibcmd` одинаково | `cfg:CatalogRef.Валюты` | +| без нужного объекта | `ibcmd` | `602d2ea9-…` — идентификатор типа | +| без нужного объекта | `1cv8` | `xs:string` + `StringQualifiers Length=10` | + +Годится только первая строка, и вот почему. Имя типа резолвится **по имени**: такие исходники +собираются в любой конфигурации, где есть одноимённый объект. Идентификатор же привязан к той +конфигурации, из которой получен: сборка в чужой базе проходит **без ошибки**, но uuid остаётся +висячим и ни к чему не привязывается — работать с такими исходниками нельзя. Вариант с `xs:string` +хуже всех: ссылка подменена строкой, и по XML не видно, что там вообще была ссылка. + +Оба деградированных варианта молчаливы — ни при разборе, ни при последующей сборке ошибок нет. +Поэтому разбирать EPF/ERF нужно в базе с подходящей конфигурацией; «разберу в пустой, потом +поправлю» не работает. Ограничения: - только **файловые** базы (для серверных используйте конфигуратор);