К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как изменить синоним перечисления программно в 1С

Разбираем, как изменить синоним перечисления в 1С программно: ограничения встроенного языка, работа через конфигуратор, расширения и пакетный режим.

Задача изменить синоним перечисления программно в 1С возникает при массовом переименовании метаданных, локализации конфигурации или автоматизации доработок в CI/CD-конвейере. Ключевой факт, который нужно понять сразу: синоним — это свойство объекта метаданных, а не данные информационной базы. Поэтому обычный код на встроенном языке, выполняемый в режиме предприятия, изменить его не может — объектная модель метаданных в рантайме доступна только для чтения.

Реально существующие способы сводятся к трём подходам: изменение в конфигураторе (вручную или через пакетный режим), доработка через расширение конфигурации и внешняя обработка файлов конфигурации (выгрузка в XML, EDT-формат) с последующей загрузкой. Каждый подход имеет свои ограничения, и выбор зависит от того, нужно ли менять синоним разово, массово или динамически для разных пользователей.

Почему синоним нельзя изменить из кода в режиме предприятия

Встроенный язык 1С предоставляет доступ к метаданным через коллекцию Метаданные: можно получить объект Метаданные.Перечисления.СтатусыЗаказов, прочитать его свойства Имя, Синоним, Комментарий, перебрать значения перечисления. Однако все эти свойства в режиме исполнения доступны только для чтения. Попытка присвоить новое значение свойству Синоним завершится ошибкой, потому что структура конфигурации фиксируется при обновлении конфигурации базы данных.

Такое ограничение осознанное: синоним участвует в формировании представлений в интерфейсе, отчётах, запросах (через функцию ПРЕДСТАВЛЕНИЕ), и его смена «на лету» ломала бы целостность работающих сеансов. Любое изменение метаданных в 1С требует прохождения цикла «изменение конфигурации → обновление конфигурации базы данных», а это административная операция, требующая монопольного доступа.

Способ 1. Изменение синонима через конфигуратор

Базовый сценарий для разовой правки: откройте конфигуратор, найдите перечисление в дереве объектов, откройте палитру свойств и измените поле «Синоним» (и при необходимости синонимы значений на закладке «Данные»). После сохранения выполните обновление конфигурации базы данных (F7). Изменение синонима не затрагивает структуру таблиц, поэтому обновление проходит быстро и без реструктуризации данных.

Если конфигурация находится на поддержке, потребуется сначала включить возможность изменения или снять объект с поддержки. Учтите, что правка типовых объектов усложнит будущие обновления — в таких случаях предпочтительнее расширение.

Порядок действий в конфигураторе
  1. 1
    Откройте конфигуратор и разблокируйте конфигурацию для изменений
  2. 2
    Найдите перечисление в дереве метаданных (Общие → Перечисления)
  3. 3
    В палитре свойств измените поле «Синоним», при необходимости — синонимы значений
  4. 4
    Сохраните конфигурацию и выполните обновление конфигурации базы данных (F7)
  5. 5
    Проверьте отображение нового синонима в режиме предприятия

Способ 2. Пакетный режим конфигуратора и автоматизация

Для автоматизации изменений синонимы правят не «программно из 1С», а скриптами снаружи. Типовая схема: выгрузить конфигурацию в файлы XML командой пакетного режима DumpConfigToFiles, изменить нужные значения в XML-файлах (синоним хранится в элементах <Synonym> с вложенными <v8:item> по языкам), затем загрузить обратно через LoadConfigFromFiles и выполнить UpdateDBCfg.

bash
1cv8 DESIGNER /F"C:\Bases\MyBase" /DumpConfigToFiles "C:\src\cfg" -format Hierarchical
rem правка XML-файлов перечисления любым скриптом (PowerShell, Python)
1cv8 DESIGNER /F"C:\Bases\MyBase" /LoadConfigFromFiles "C:\src\cfg" /UpdateDBCfg

Такой подход применяют в связке с EDT, Git и CI/CD: изменения синонимов становятся обычным коммитом в исходниках конфигурации, проходят код-ревью и раскатываются на стенды автоматически. Это единственный способ «массового программного» переименования, который корректно работает с хранилищем и версионированием.

При правке XML вручную соблюдайте структуру многоязычных строк: для каждого языка конфигурации должен существовать свой элемент <v8:item> с корректным кодом языка. Пропуск языка приведёт к пустому синониму у пользователей с этим языком интерфейса.

Способ 3. Расширение конфигурации

Если конфигурация типовая и менять её нельзя, синоним заимствованного перечисления можно переопределить через расширение. В расширении добавьте перечисление «заимствованием», затем измените его синоним (и синонимы значений) в свойствах расширения. Платформа применит представление из расширения без изменения основной конфигурации.

Ограничение способа: расширение меняет отображение, но исходный синоним в основной конфигурации остаётся прежним — это видно разработчикам в конфигураторе. Кроме того, поведение зависит от версии платформы и режима совместимости расширения, поэтому перед внедрением проверьте результат на копии базы.

Сравнение способов

Конфигуратор вручную

Подходит для разовой правки. Ограничение: требует доступа к конфигуратору и монопольного режима для обновления.

Пакетный режим и XML-выгрузка

Подходит для массовых и регулярных изменений, CI/CD. Ограничение: нужна аккуратная работа с XML и тестовый стенд.

Расширение конфигурации

Подходит для типовых конфигураций на поддержке. Ограничение: меняет только отображение, исходный синоним сохраняется.

Представления в формах и запросах

Подходит, когда нужно просто показать другое название пользователю. Не меняет метаданные вообще.

Способ 4. Когда синоним менять не нужно: представления в коде

Частая ситуация: требуется не переименовать перечисление, а показать пользователю другое название в конкретной форме, отчёте или сообщении. Для этого метаданные трогать не нужно — используйте программные представления. В формах задайте заголовок элемента управления, в запросах — функцию ПРЕДСТАВЛЕНИЕ с последующей заменой, в сообщениях — произвольную строку.

Для получения текущего синонима значения перечисления в коде используется обращение через метаданные: Метаданные.Перечисления.СтатусыЗаказов.ЗначенияПеречисления.ВРаботе.Синоним. Это чтение доступно всегда и позволяет строить собственные механизмы локализации поверх стандартных синонимов, например подставлять названия из регистра сведений «Представления» в зависимости от пользователя.

Если требование пришло от пользователей в формулировке «переименуйте статус», сначала уточните, где именно они хотят видеть новое название. В половине случаев достаточно изменить заголовок поля в форме или вариант отчёта, что делается за минуты и не требует обновления конфигурации базы данных.
ПЗ
Практическое замечание

Проверка результата и типичные ошибки

После изменения синонима любым способом проверьте: отображение в дереве подсистем и списках выбора типа, представления значений в формах документов, заголовки в отчётах СКД (они могли быть зафиксированы вручную и не обновятся автоматически), а также тексты запросов с ПРЕДСТАВЛЕНИЕ. Отдельно проверьте все языки конфигурации, если их несколько.

Типичные ошибки
01
Попытка присвоить Синоним через Метаданные в режиме предприятия — свойство доступно только для чтения, код падает с ошибкой.
02
Правка синонима только для одного языка — у пользователей с другим языком интерфейса отображается пустая или старая строка.
03
Изменение типового перечисления без расширения — при очередном обновлении конфигурации синоним затирается или вызывает конфликт сравнения.
04
Забытый UpdateDBCfg после загрузки из файлов — изменения сохранены в конфигурации, но в базе не применены.
05
Ожидание, что заголовки в СКД обновятся сами — зафиксированные в настройках заголовки полей остаются старыми.

Ещё одна ошибка — путать синоним с именем. Имя перечисления используется в коде и запросах и менять его гораздо опаснее: придётся исправлять все обращения. Синоним же безопасен для логики, но влияет на всё, что видит пользователь.

FAQ

Можно ли изменить синоним перечисления через обработку в режиме предприятия?

Нет. Встроенный язык в режиме предприятия предоставляет доступ к метаданным только для чтения. Изменение возможно только через конфигуратор, пакетный режим с выгрузкой/загрузкой файлов или расширение конфигурации.

Изменится ли синоним значений перечисления вместе с синонимом самого перечисления?

Нет, это независимые свойства. Синоним объекта-перечисления виден в дереве метаданных и при выборе типа, а синонимы значений — пользователям в списках выбора. Менять их нужно отдельно.

Повлияет ли смена синонима на обмены и интеграции?

На обмены по именам объектов и значений — нет, синоним в них не участвует. Но если интеграция передаёт пользовательские представления (например, тексты для печатных форм внешней системы), проверьте эти места отдельно.

Как изменить синоним для типовой конфигурации на поддержке?

Используйте расширение конфигурации: заимствуйте перечисление и переопределите синоним в расширении. Это сохранит возможность штатного обновления типовой конфигурации.

Почему после изменения синонима в отчёте СКД осталось старое название?

В настройках СКД заголовки полей могли быть зафиксированы вручную при разработке отчёта. Такие заголовки не наследуются из синонимов — откройте схему компоновки и обновите заголовки полей вручную.

Нужно ли монопольный режим для изменения синонима?

Да. Хотя смена синонима не вызывает реструктуризацию таблиц, обновление конфигурации базы данных всё равно требует монопольного доступа — все пользователи должны завершить сеансы.

Итог

Что важно запомнить

Синоним перечисления — свойство метаданных, недоступное для записи из кода в режиме предприятия. Меняйте его через конфигуратор, пакетный режим с XML-выгрузкой или расширение конфигурации, а для разового отображения другого названия используйте представления в формах и запросах. Перед любыми пакетными изменениями делайте резервную копию и проверяйте результат на копии базы.