При обновлении крупных типовых конфигураций 1С (таких как «Управление торговлей», «Комплексная автоматизация» или «ERP Управление предприятием») разработчики часто сталкиваются с неприятной ситуацией: после наката нового релиза конфигурации примененное ранее расширение отказывается работать. Платформа выдает критические ошибки, сообщая, что заимствованные объекты — в частности, определяемые типы — не найдены.
Это происходит из-за того, что фирма «1С» периодически проводит рефакторинг метаданных. К примеру, определяемый тип ДенежноеПолеНеотрицательное переименовывается в ДенежнаяСуммаНеотрицательная, а ДенежноеПолеЛюбойЗнак становится объектом ДенежнаяСуммаЛюбогоЗнака. Если эти типы использовались в десятках мест вашего расширения (в реквизитах форм, документов, справочников), система заблокирует применение расширения.
В этой статье мы подробно разберем, как исправить эту проблему без необходимости переделывать расширение с нуля. Мы рассмотрим три эффективных инженерных метода решения задачи.
---
Если измененный определяемый тип используется в вашем расширении в 50–100 местах, вручную заменять его через интерактивный интерфейс Конфигуратора крайне долго и неэффективно. Профессиональный подход заключается в использовании механизма выгрузки и загрузки конфигурации в файлы XML. Рассмотрим этот процесс по шагам.
Шаг 1. Выгрузка расширения в файлы
Для начала нам необходимо получить исходные тексты нашего расширения в виде XML-файлов:
C:\Ext_Source\) и укажите её в качестве каталога выгрузки. Нажмите кнопку Выполнить.Шаг 2. Глобальный поиск и автозамена
Для редактирования выгруженных файлов нам понадобится любой современный текстовый редактор, поддерживающий поиск по файлам в папке (например, Visual Studio Code, Notepad++ или Sublime Text). Рассмотрим дальнейшие действия на примере VS Code:
Ctrl + Shift + F).ОпределяемыйТип.ДенежноеПолеНеотрицательное (или соответствующий XML-тег).ОпределяемыйТип.ДенежнаяСуммаНеотрицательная.ОпределяемыйТип.ДенежноеПолеЛюбойЗнак на ОпределяемыйТип.ДенежнаяСуммаЛюбогоЗнака.Проанализируем структуру файлов. Внутри XML-файлов описание типов реквизитов выглядит следующим образом:
<TypeDescription>
<Type>cfg:DefinedType.ДенежноеПолеНеотрицательное</Type>
</TypeDescription>
После автозамены этот блок примет корректный вид:
<TypeDescription>
<Type>cfg:DefinedType.ДенежнаяСуммаНеотрицательная</Type>
</TypeDescription>
Шаг 3. Переименование файлов и обновление манифеста
Недостаточно просто заменить текст внутри файлов. Нам также необходимо переименовать физические файлы самих определяемых типов, которые лежат в подкаталоге DefinedTypes внутри нашей выгрузки:
ДенежноеПолеНеотрицательное.xml и переименуйте их в ДенежнаяСуммаНеотрицательная.xml.Configuration.xml в корне выгрузки) и найдите там ссылки на старые определяемые типы. Замените их имена на новые.Шаг 4. Загрузка измененных файлов обратно в 1С
F7.---
Выясним причину другой частой проблемы: при попытке заимствовать новые определяемые типы платформа 1С выдает ошибку совместимости и не позволяет открыть расширение для редактирования или применить изменения. Возникает замкнутый круг: чтобы исправить типы, нужно заимствовать новые объекты, а заимствовать их нельзя, так как расширение "сломано" и не дает обновить базу данных.
Разберем по шагам, как обойти эту блокировку:
F7 для применения конфигурации базы данных. Поскольку расширение теперь неактивно, платформа проигнорирует все ошибки совместимости и успешно применит обновление основной конфигурации.ДенежнаяСуммаНеотрицательная и ДенежнаяСуммаЛюбогоЗнака), кликнуть по ним правой кнопкой мыши и выбрать пункт Добавить в расширение.F7).---
Существует еще один быстрый способ заставить расширение работать без радикального изменения метаданных в экстренных ситуациях. Рассмотрим механизм свойства проверки объектов.
В свойствах заимствованных реквизитов, форм и других объектов расширения присутствует важная настройка совместимости. В палитре свойств она выглядит как пиктограмма с двойной сине-красной галочкой и называется Проверять значение при подключении расширения.
Если для конкретного реквизита, использующего проблемный определяемый тип, временно отключить это свойство (установить в значение Ложь), платформа при запуске не будет сверять тип этого реквизита с типами основной конфигурации. Это позволит запустить систему и провести выборочное исправление ошибок непосредственно в рабочем режиме конфигуратора.
Важное предупреждение: Использование этого метода является временной полумерой. Постоянное отключение контроля типов может привести к ошибкам выполнения кода (Runtime Errors), когда программа попытается записать в базу данных объект несоответствующего типа. Используйте этот метод только для оперативного запуска системы с целью последующего полноценного исправления по Методу 1 или Методу 2.
---
Проанализируем ситуацию, когда при замене определяемых типов имена объектов совпадают, но система все равно выдает критическую ошибку следующего содержания:
«Критичная: изменился внутренний идентификатор расширенного объекта основной конфигурации...»
Это происходит потому, что при глубоком рефакторинге фирма «1С» могла не просто переименовать определяемый тип, но и пересоздать его заново в основной конфигурации. В результате у объекта изменился его внутренний уникальный идентификатор (UUID). Платформа версии 8.3.20 и выше осуществляет строгий контроль уникальных идентификаторов заимствованных типов.
Чтобы решить проблему с несовпадением UUID:
UUID.Используя приведенные методики, мы можем быстро и безболезненно адаптировать любые расширения под новые релизы конфигураций 1С, сводя к минимуму ручную рутинную работу.