Выгрузка в файлы на dt-021: кривой configVersion в ConfigDumpInfo.xml #16
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
✅ Решено (2026-08-18). Выгрузка расширения в
D:\projects\crm3-26\crm3-26.rhana\srcпроходит.Канон для всего монорепозитория вынесен в общий проект: rhana/crm3-migration#19 и
docs/1c_standarts/Выгрузка_в_файлы_ConfigDumpInfo.md. Эта задача — запись инцидента на dt-021.Причина
Не длина пути. Инкрементальная выгрузка читает
src/ConfigDumpInfo.xml. АтрибутconfigVersion— SHA-1, ровно 40 hex-символов[0-9a-f].Обработка
РК_ПроверкаСерийбыла добавлена XML-правками. В git для неё стояли невалидныеconfigVersion(шаблон 40 символов; форма — 42; Form.Form — 41). UUID объектов конфигуратор принял. Падение давалconfigVersionневерной длины.Предупреждение «Длина пути к каталогу выгрузки превышает 30 символов» — эвристика MAX_PATH, не причина крэша.
Решение
srcвосстановлен из git HEAD.ConfigDumpInfo.xmlтриconfigVersionзаменены на валидные 40-hex заглушки SHA-1.srcна dt-021 успешна.Обход «пустая папка + robocopy» больше не нужен. Не выгружать в корень диска (
S:\).Что выяснилось на dt-021 (kma)
.cfeи полная загрузка из.cfeпочинила внутреннее состояние расширения — после этого выгрузка в файлы снова возможна.D:\projects\crm3-26\crm3-26.rhana\src(37 символов) даёт штатное предупреждение 1С «Длина пути к каталогу выгрузки превышает 30 символов» и затем конфигуратор закрывается без ошибки.D:\test_src(11 символов) — без предупреждения, успешно.Это ограничение конфигуратора (эвристика под Windows
MAX_PATH~260): к префиксу каталога добавляются длинные вложенные пути вродеDataProcessors\РК_ЗагрузкаОстатков\Forms\ПодборСкладов\Ext\Form\Module.bsl. Включение «длинных путей» в Windows (LongPathsEnabled) конфигуратору обычно не помогает — у него своя проверка на 30 символов.Рекомендуемый рабочий цикл на dt-021
Не выгружать напрямую в git-каталог. Подключить короткий путь и выгружать туда.
Вариант A (предпочтительный) —
substнаsrcВ PowerShell от имени пользователя (не обязательно админ):
В конфигураторе: Конфигурация → Выгрузить конфигурацию в файлы в
S:\(3 символа). Файлы сразу попадают в git-дерево.Снять диск:
subst S: /dЧтобы буква переживала перезагрузку — задача в планировщике при входе или строка в профиле PowerShell.
Вариант B — junction
Выгрузка в
D:\r\src(8 символов).Вариант C — короткий каталог + копирование
Выгрузка в
D:\src, затем:/MIRне использовать без необходимости — снесёт лишние файлы вsrc.После любой выгрузки из корня монорепозитория:
Что не делать
.cfeсам по себе разрешит выгрузку в длинный путь: он чинит метаданные, но не длину пути.Задачу оставляю открытой, пока на dt-021 не закреплён короткий путь (
subst/ junction).Выполнил
Попытался выгрузить в файлы в путь
s:\и конфигуратор все равно падает. Ошибки про превышение длины пути 30 символов уже не было.А вот выгрузить при этом в
s:\test\удалось.Ответ на комментарий kma (выгрузка в
S:\падает, вS:\test\— нет)Два независимых ограничения конфигуратора. Предупреждение про 30 символов здесь уже ни при чём (его не было — путь короткий).
1. Нельзя выгружать в корень диска
S:\— корень тома. Конфигуратор это переживает плохо: часто закрывается без сообщения. Нужен подкаталог:S:\src,S:\test, неS:\.Поэтому вариант A из прошлого комментария (
substсразу наsrcи выгрузка вS:\) — ошибочный. Исправляем:substна родителя, выгрузка вS:\src.2. Выгрузка поверх текущего
srcтоже опаснаS:\сейчас указывает на уже заполненныйcrm3-26.rhana\src. ВConfigDumpInfo.xmlуРК_ПроверкаСерийстоят синтетическиеconfigVersionневерной длины (41–42 символа вместо SHA-1 в 40). При инкрементальной выгрузке конфигуратор читает этот файл и может упасть.S:\test\— пустой каталог,ConfigDumpInfoпишется заново — поэтому выгрузка прошла. Вsrc\test\ConfigDumpInfo.xmlуже нормальный хеш (e9d4c6d2…, 40 символов).Что сделать сейчас
В конфигураторе выгружать в
S:\src(6 символов, не корень).Если
S:\srcвсё ещё падает — не трогать конфигуратор, перенести уже готовую выгрузку изsrc\testвsrc(это та же успешная выгрузка вS:\test\), затем удалитьsrc\test, чтобы не попало в git.После первой удачной выгрузки в сам
srcConfigDumpInfoстанет штатным, повторные выгрузки вS:\srcдолжны проходить.Не коммитить каталог
src\test\— это вложенная копия выгрузки внутриsrc.Дальше из корня монорепозитория:
scripts/normalize_1c_export.sh crm3-26.rhanaНет. После
subst S: D:\projects\crm3-26\crm3-26.rhanaвыгрузка вS:\srcтоже выбила конфигуратор.Полагаю, что
s:\testв прошлый раз приsubst S: D:\projects\crm3-26\crm3-26.rhana\srcпапкаtestотсутствовала (была пустой). То есть при выгрузке в файлы конфигуратор не читал файлы.Ответ на #issuecomment-286
Да, так и есть. Выгрузка в
S:\srcпослеsubstна родителя подтверждает: дело не в корне диска и не только в предупреждении про 30 символов.На dt-021 конфигуратор падает при выгрузке поверх уже существующих файлов (читает
ConfigDumpInfo.xmlи деревоsrc). В пустой каталог выгрузка проходит (D:\test_src,S:\test).Синтетический
configVersionуРК_ПроверкаСерийв текущемsrc\ConfigDumpInfo.xml(41–42 символа вместо SHA-1 на 40) — наиболее вероятный триггер при инкрементальной выгрузке.Рекомендация «выгружать сразу в
S:\src» снята. На этой машине в git-srcнапрямую не выгружать.Рабочий цикл на dt-021
Всегда: пустой короткий каталог → копирование в git.
В конфигураторе: выгрузить в
D:\e(4 символа, не корень, каталог пустой).Затем:
Из корня монорепозитория:
scripts/normalize_1c_export.sh crm3-26.rhana/MIRне использовать.Каталог
src\test\в репозиторий не коммитить (вложенная копия). Если он ещё есть — удалить после переноса вsrc.Необязательная проверка потом
Когда в
srcуже лежит штатныйConfigDumpInfoс выгрузки в пустой каталог, один раз можно снова попробоватьS:\src. Если снова упадёт — на dt-021 навсегда оставляем только цикл «пустоеD:\e→ robocopy».Почему падает git-
srcи проходит более длинныйcrm3-26.rhana.testДлина пути не причина падения.
D:\projects\crm3-26\crm3-26.rhana.test\srcещё длиннее, но каталог был пустой — конфигуратор не читал чужойConfigDumpInfo.xml. Предупреждение про 30 символов — эвристика MAX_PATH, само по себе не закрывает конфигуратор.При выгрузке поверх существующего каталога конфигуратор читает
src\ConfigDumpInfo.xml(инкрементальная выгрузка). В git этот файл дляРК_ПроверкаСерийсобран вручную (обработка добавлялась XML-правками, не выгрузкой из конфигуратора):configVersionРК_ПроверкаСерийa1b2c3d4e5f67890…a1b2c3d4……Form.Формаb2c3d4e5…901…Form.Форма.Formc3d4e5f6…012В выгрузке в
crm3-26.rhana.testте же 87 записей, всеconfigVersion— штатные SHA-1 (например форма:0717cd97a4a9d63560c7e131d1669d4a047a854d). UUIDf14e0001-…конфигуратор сохранил — они не ломают выгрузку.Итог: конфигуратор падает на разборе битого
ConfigDumpInfo.xml, не на «испорченных» XML объектов. После подменыConfigDumpInfo.xml(или всегоsrc) файлами изcrm3-26.rhana.testвыгрузка поверх git-srcдолжна проходить; предупреждение про 30 символов может остаться, но без падения.Не коммитить
crm3-26.rhana.testв монорепозиторий как отдельный проект — это рабочая копия выгрузки.UUID ранее не менял — только диагностика. Из‑за этого повторная выгрузка в git-
srcснова упала: битыйConfigDumpInfo.xmlоставался на месте.Сейчас в
crm3-26.rhana\srcперенесена успешная выгрузка изcrm3-26.rhana.test\src(включая штатныйConfigDumpInfo.xml, версия 1.3.1.82). СинтетическиеconfigVersionуРК_ПроверкаСерийубраны.Можно повторить выгрузку поверх
D:\projects\crm3-26\crm3-26.rhana\src. Предупреждение про 30 символов может остаться — падать не должно.crm3-26.rhana.testв git не коммитить.❌ Проблема выгрузки расширения в файлы на рабочем месте dt-021to Выгрузка в файлы на dt-021: кривой configVersion в ConfigDumpInfo.xmlХронология, которая привела к решению
Симптом. На dt-021 конфигуратор при «Выгрузить конфигурацию в файлы» в
D:\projects\crm3-26\crm3-26.rhana\srcзакрывался без диалога. Показывалось предупреждение про путь длиннее 30 символов — его сначала приняли за причину.Обход
.cfe. Выгрузка в.cfeи обратная загрузка в ИБ сбрасывает внутренние идентификаторы. На падение поверх существующегоsrcэто не влияет: конфигуратор всё равно читает git-ConfigDumpInfo.xml.Пустой каталог. Выгрузка в пустые
D:\test_srcи позжеD:\projects\crm3-26\crm3-26.rhana.test\src(путь длиннее git-src) проходила. Значит, дело не в длине пути и не в самом расширении в ИБ.subst S:. ПодстановкаS:наsrc, выгрузка в кореньS:\— падение без предупреждения про 30 символов. Выгрузка в пустойS:\test— успех. Выгрузка в непустойS:\src(поверх файлов) — снова падение. Вывод: падает инкрементальный dump по уже лежащему дереву файлов.Разбор git. Обработка
РК_ПроверкаСерийдобавлена правкой XML, не выгрузкой из конфигуратора. ВConfigDumpInfo.xmlу неёconfigVersionдлиной 41 и 42 символа (и шаблонный 40-символьный хеш у самой обработки). Платформа ждёт SHA-1 ровно 40 hex. Невалидная длина → конфигуратор завершается без сообщения.UUID объектов вида
f14e0001-0001-4000-8000-000000000001— валидный RFC 4122. Конфигуратор их оставил. Ломал выгрузку именноconfigVersion.Исправление.
srcвозвращён из HEAD вложенного репозиторияcrm3-26.rhana. ВConfigDumpInfo.xmlисправлены только триconfigVersionна 40-hex заглушки SHA-1. Остальное (CHANGELOG, VERSION 1.3.1.82) не трогали.Проверка. Выгрузка в
D:\projects\crm3-26\crm3-26.rhana\srcпрошла успешно. Обход «пустая папка + robocopy» больше не нужен.Не коммитить
*.rhana.testи вложенныйsrc\test.Как пополнять постоянный контекст Cursor (монорепозиторий
crm3-26)Чтобы агент в следующих сессиях не выдумывал
configVersionпроизвольной длины при правке XML любых конфигураций/расширений, норма фиксируется в трёх слоях (не только в этом репозитории расширения):crm3-26/.cursor/rules/1c-xml-dump-ids.mdc(alwaysApply: true)crm3-26/.cursorrulescrm3-26/docs/1c_standarts/Выгрузка_в_файлы_ConfigDumpInfo.mdПрактический шаблон для следующих решений:
.mdcв.cursor/rules/общего проекта:alwaysApply: trueдля короткого универсального правила, либоglobs:если правило нужно только при открытых определённых файлах. Формат: YAML-frontmatter + markdown, одно правило — одна тема, с примером «плохо / хорошо».docs/(здесь:docs/1c_standarts/)..cursorrules.Каталог
docs/context/в проекте пока не заведён; для таких норм достаточноdocs/1c_standarts/+.cursor/rules/.