Почему не сохраняется синоним стандартного реквизита в 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с досадной особенностью (или багом) конфигуратора: при попытке изменить Синоним стандартного реквизита (например, Владелец, Наименование или Код) внесенные изменения просто не фиксируются. Вы вводите текст, закрываете окно свойств или нажимаете «ОК», но при повторном открытии видите старое значение. Это особенно критично, когда необходимо изменить заголовок поля сразу во всех формах справочника или документа, не прибегая к ручной правке каждого элемента формы.

Разберем детально, почему это происходит и какими способами можно «заставить» платформу сохранить нужные нам данные.

Выясняем причину проблемы: почему конфигуратор «игнорирует» изменения

Проанализируем ситуацию с технической точки зрения. Основная причина кроется в механизме работы Палитры свойств. В некоторых релизах платформы (особенно часто это замечали в ветках 8.3.13, 8.3.14 и начале 8.3.15) событие изменения текста в поле Синоним для стандартных реквизитов не всегда инициирует флаг модифицированности объекта метаданных. Конфигуратор считает, что объект не менялся, и при закрытии диалога или сохранении конфигурации просто игнорирует содержимое поля.

Рассмотрим по шагам проверенные методы, которые помогают обойти этот программный недочет.

Способ 1: Использование окна «Значение заполнения»

Этот метод является наиболее простым и эффективным, как показывает практика практикующих разработчиков. Проанализируем алгоритм действий:

  1. Откроем дерево метаданных и перейдем к нужному объекту (например, справочник КонтактныеЛица).
  2. Перейдем на закладку Данные и нажмем кнопку Стандартные реквизиты.
  3. В открывшемся списке выберем реквизит Владелец и откроем его свойства.
  4. Введем новый текст в поле Синоним.
  5. Важный шаг: не закрывая окно свойств, найдем строку Значение заполнения и нажмем на кнопку выбора (три точки) или «Открыть».
  6. В открывшемся окне выбора значения (даже если вы ничего там не выбираете) просто нажмите ОК.
  7. После этого закройте окно свойств стандартного реквизита.

Таким действием мы принудительно заставляем платформу зарегистрировать изменение свойств объекта. Теперь при обновлении конфигурации базы данных (клавиша F7) изменения будут применены.

Способ 2: Редактирование через окно «Состав синонима» (Лупа)

Если прямой ввод в поле Синоним игнорируется, попробуем задействовать механизм интернационализации. Рассмотрим, как это сделать:

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

Способ 3: Метод «фиктивного» редактирования и смены фокуса

Иногда проблема заключается в том, что фокус ввода остается в поле синонима, и платформа не «понимает», что ввод завершен. Попробуем следующую последовательность действий:

  1. Изменим Синоним.
  2. Нажмем клавишу Enter.
  3. Перейдем в любое другое текстовое поле в этом же окне свойств, например, в поле Комментарий.
  4. Введем там случайный символ и тут же его удалим.
  5. Снова нажмем Enter или перейдем на другое свойство.

Это заставляет Палитру свойств выполнить проверку всех полей на предмет изменений и корректно записать их в память конфигуратора.

Способ 4: Использование расширений конфигурации

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

  1. Создадим новое расширение или откроем существующее.
  2. Добавим интересующий нас справочник в расширение.
  3. В расширении найдем Стандартные реквизиты этого справочника.
  4. Изменим Синоним для реквизита Владелец в самом расширении.

Преимущество этого метода в том, что расширения зачастую более гибко обрабатывают переопределение свойств, и в режиме 1С:Предприятие пользователь увидит именно тот заголовок, который вы указали в расширении, независимо от «глюков» основной конфигурации.

Почему важно добиться смены синонима в метаданных?

Выясним, на что влияет корректное заполнение синонима. В управляемых формах 1С большинство элементов имеют свойство Заголовок, которое по умолчанию установлено в значение Авто.

Рассмотрим пример программного кода, который демонстрирует логику платформы:


// Если Заголовок установлен в "Авто", 
// платформа берет текст из метаданных:
ЭлементФормы = ЭтаФорма.Элементы.Владелец;
Если ЭлементФормы.Заголовок = "" Тогда
    // Текст заголовка будет равен Синониму из Стандартных реквизитов
КонецЕсли;

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

Дополнительные рекомендации по очистке кэша

Если вы убедились, что в конфигураторе синоним сохранился, но в пользовательском режиме справочник по-прежнему отображает старое имя, проанализируем состояние кэша. Попробуем выполнить следующие действия:

  1. Запустим конфигуратор с параметром /ClearCache.
  2. Если это не помогло, удалим базу из списка и добавим ее заново (это очистит локальные папки метаданных в AppData).
  3. Убедимся, что изменения были приняты в окне Редактирование текстов интерфейса (меню «Правка» — «Редактирование текстов интерфейса»). Там можно увидеть общую таблицу всех синонимов и заголовков и массово их поправить.

Подводя итог, можно сказать, что проблема с несохранением синонима — это чисто визуальный и событийный баг интерфейса конфигуратора. Использование «обходных» окон, таких как Значение заполнения или Состав синонима, позволяет успешно решить эту задачу.

← На главную