В процессе разработки на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с досадной особенностью (или багом) конфигуратора: при попытке изменить Синоним стандартного реквизита (например, Владелец, Наименование или Код) внесенные изменения просто не фиксируются. Вы вводите текст, закрываете окно свойств или нажимаете «ОК», но при повторном открытии видите старое значение. Это особенно критично, когда необходимо изменить заголовок поля сразу во всех формах справочника или документа, не прибегая к ручной правке каждого элемента формы.
Разберем детально, почему это происходит и какими способами можно «заставить» платформу сохранить нужные нам данные.
Проанализируем ситуацию с технической точки зрения. Основная причина кроется в механизме работы Палитры свойств. В некоторых релизах платформы (особенно часто это замечали в ветках 8.3.13, 8.3.14 и начале 8.3.15) событие изменения текста в поле Синоним для стандартных реквизитов не всегда инициирует флаг модифицированности объекта метаданных. Конфигуратор считает, что объект не менялся, и при закрытии диалога или сохранении конфигурации просто игнорирует содержимое поля.
Рассмотрим по шагам проверенные методы, которые помогают обойти этот программный недочет.
Этот метод является наиболее простым и эффективным, как показывает практика практикующих разработчиков. Проанализируем алгоритм действий:
КонтактныеЛица).Владелец и откроем его свойства.Синоним.Значение заполнения и нажмем на кнопку выбора (три точки) или «Открыть».Таким действием мы принудительно заставляем платформу зарегистрировать изменение свойств объекта. Теперь при обновлении конфигурации базы данных (клавиша F7) изменения будут применены.
Если прямой ввод в поле Синоним игнорируется, попробуем задействовать механизм интернационализации. Рассмотрим, как это сделать:
Рядом с полем ввода синонима находится кнопка с изображением лупы (открытие формы редактирования текста для всех языков конфигурации). Нажмем на нее. В открывшемся списке языков найдем основной язык интерфейса (обычно Русский) и введем новое значение именно там. Нажатие кнопки ОК в этом диалоговом окне практически гарантированно помечает свойство как измененное, так как задействуется отдельный обработчик записи метаданных.
Иногда проблема заключается в том, что фокус ввода остается в поле синонима, и платформа не «понимает», что ввод завершен. Попробуем следующую последовательность действий:
Синоним.Enter.Комментарий.Enter или перейдем на другое свойство.Это заставляет Палитру свойств выполнить проверку всех полей на предмет изменений и корректно записать их в память конфигуратора.
Если вы работаете в типовой конфигурации, которую нежелательно снимать с поддержки, или если баг платформы в конкретном релизе непреодолим стандартными средствами, воспользуемся механизмом расширений. Проанализируем этот путь:
Стандартные реквизиты этого справочника.Синоним для реквизита Владелец в самом расширении.Преимущество этого метода в том, что расширения зачастую более гибко обрабатывают переопределение свойств, и в режиме 1С:Предприятие пользователь увидит именно тот заголовок, который вы указали в расширении, независимо от «глюков» основной конфигурации.
Выясним, на что влияет корректное заполнение синонима. В управляемых формах 1С большинство элементов имеют свойство Заголовок, которое по умолчанию установлено в значение Авто.
Рассмотрим пример программного кода, который демонстрирует логику платформы:
// Если Заголовок установлен в "Авто",
// платформа берет текст из метаданных:
ЭлементФормы = ЭтаФорма.Элементы.Владелец;
Если ЭлементФормы.Заголовок = "" Тогда
// Текст заголовка будет равен Синониму из Стандартных реквизитов
КонецЕсли;
Если мы «продавим» изменение синонима на уровне метаданных, нам не придется заходить в каждую форму (форму элемента, форму списка, форму выбора) и вручную менять заголовки. Это экономит время и снижает вероятность ошибок при дальнейшем развитии конфигурации.
Если вы убедились, что в конфигураторе синоним сохранился, но в пользовательском режиме справочник по-прежнему отображает старое имя, проанализируем состояние кэша. Попробуем выполнить следующие действия:
/ClearCache.AppData).Подводя итог, можно сказать, что проблема с несохранением синонима — это чисто визуальный и событийный баг интерфейса конфигуратора. Использование «обходных» окон, таких как Значение заполнения или Состав синонима, позволяет успешно решить эту задачу.