Почему в расширении 1С команда отображается по имени, а не по синониму, особенно при использовании нескольких языков?

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

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

Выясняем причину: имя против синонима и многоязычие

Прежде чем перейти к решению, нам важно понять фундаментальное различие между именем и синонимом объекта метаданных в 1С. Имя (например, Доп1_ВвестиНаОснованииДокументЧ) является уникальным идентификатором объекта в конфигурации и используется для программного доступа к нему. Оно должно быть уникальным, не содержать пробелов и специальных символов, и часто содержит префиксы для удобства разработки (например, Доп1_ для объектов расширения).

Синоним, напротив, предназначен для отображения объекта в пользовательском интерфейсе. Он должен быть понятным, удобным для чтения и нести осмысленную информацию для конечного пользователя (например, "Ввести на основании документа Ч"). В идеале, именно синоним должен видеть пользователь.

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

  1. Для выбранного пользователем языка не задан синоним.
  2. Язык, для которого требуется отобразить синоним, вообще не добавлен в состав языков расширения или основной конфигурации.

Мы видим, что в вашем случае, когда расширение имеет основной украинский язык, синоним на украинском отображается корректно. Однако для русского языка он не задан, и система отображает техническое имя. Наша задача — научить систему отображать корректный синоним для русского языка.

Шаг 1: Проверяем и добавляем необходимые языки в расширение

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

  1. Открываем расширение в конфигураторе: Перейдите в меню "Конфигурация" -> "Расширения конфигурации" и откройте ваше расширение для редактирования.
  2. Переходим к свойствам расширения: В окне "Расширения конфигурации" выделите ваше расширение и откройте его свойства (обычно двойным щелчком или через контекстное меню).
  3. Проверяем список языков: Найдите свойство "Языки" или аналогичное. Здесь должен быть указан список языков, поддерживаемых расширением. Если русского языка (ru) нет в этом списке, его необходимо добавить. Обычно это делается через кнопку добавления или выбор из списка доступных языков. Обратите внимание, что расширение часто наследует языки основной конфигурации, но для явного указания синонимов лучше убедиться, что язык присутствует и в самом расширении.
  4. Устанавливаем основной язык (при необходимости): Свойство "Основной язык" указывает, какой язык будет использоваться по умолчанию, если для текущего языка пользователя синоним не найден. Убедитесь, что это свойство настроено корректно, хотя для нашей задачи важнее наличие всех языков и явное задание синонимов для каждого.

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

Шаг 2: Редактирование многоязычных синонимов для команды

Когда все необходимые языки добавлены, мы можем перейти к редактированию синонима нашей команды. В 1С предусмотрен специальный механизм для работы с многоязычными строками.

  1. Находим общую команду: В дереве объектов конфигурации расширения найдите ветку "Общие" -> "Общие команды" и выберите вашу команду (например, Доп1_ВвестиНаОснованииДокументЧ).
  2. Переходим к свойствам команды: В окне свойств команды найдите поле "Синоним". Обратите внимание, что рядом с полем "Синоним" должна появиться кнопка в виде лупы (увеличительного стекла), если в расширении заведено более одного языка. Эта кнопка символизирует возможность редактирования многоязычной строки.
  3. Открываем редактор многоязычных строк:
    • Через кнопку "лупа": Нажмите на эту кнопку.
    • Через сочетание клавиш: Если кнопка не видна или вы предпочитаете горячие клавиши, установите курсор в поле "Синоним" и нажмите Ctrl + Shift + F4.
    Оба действия откроют специальный диалог "Редактирование многоязычной строки".
  4. Задаем синонимы для каждого языка:

    В открывшемся диалоге вы увидите список всех языков, добавленных в расширение. Для каждого языка будет доступно поле для ввода синонима:

    • Найдите строку, соответствующую русскому языку (ru), и введите для нее желаемый синоним, например, "Ввести на основании документа Ч".
    • Убедитесь, что для украинского языка (uk) также указан корректный синоним.
    • При необходимости заполните синонимы для других поддерживаемых языков.
  5. Применяем изменения: Нажмите "ОК" в диалоге редактирования многоязычной строки, а затем сохраните изменения в расширении (обычно через Ctrl + S или соответствующую кнопку на панели инструментов).

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

Как 1С выбирает язык отображения в пользовательском режиме

Чтобы полностью понимать, как работает отображение, давайте проанализируем, как система 1С:Предприятие определяет, какой язык использовать для вывода синонимов:

  1. Настройки пользователя: Прежде всего, 1С ориентируется на язык, установленный в настройках текущего пользователя. Это может быть задано в персональных настройках пользователя в режиме 1С:Предприятие.
  2. Язык информационной базы: Если в настройках пользователя язык не указан, или указанный язык недоступен, система пытается использовать язык, установленный для информационной базы.
  3. Основной язык конфигурации/расширения: В конечном итоге, если ни один из вышеперечисленных методов не дает результата, или для выбранного языка синоним не найден, используется основной язык конфигурации (или расширения, если речь идет о его объектах и оно имеет свой основной язык). Если даже для основного языка синоним не задан, или возникают другие ошибки, тогда система может прибегнуть к отображению технического имени объекта.

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

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

Чтобы избежать подобных проблем в будущем и обеспечить качественную разработку расширений в многоязычной среде, мы можем рассмотреть следующие рекомендации:

  1. Последовательность именования: Продолжайте использовать осмысленные, но технические имена для объектов метаданных (например, с префиксами расширения: Доп1_), поскольку они критичны для программного кода.
  2. Качество синонимов: Всегда стремитесь к тому, чтобы синонимы были максимально понятными, краткими и информативными для конечного пользователя. Избегайте жаргона, если это не специальные термины, и проверяйте их читаемость.
  3. Тестирование локализации: Если вы разрабатываете конфигурацию или расширение для многоязычной среды, обязательно проводите тестирование отображения интерфейса на всех поддерживаемых языках. Это поможет выявить проблемы с локализацией до того, как они достигнут конечных пользователей.
  4. Программное задание многоязычных строк: В некоторых случаях (например, при создании динамических форм или сообщений) может потребоваться программное задание многоязычных строк. Для этого в 1С предусмотрена функция НСтр(), которая позволяет задать строку для нескольких языков одновременно, например:
    
    СообщениеПользователю.Текст = НСтр("ru = 'Русское сообщение'; en = 'English message'; uk = 'Українське повідомлення'");
    
    Однако для статических синонимов объектов метаданных в конфигураторе удобнее использовать описанный выше механизм.
  5. Свойства расширения: Хотя в вашем случае проблема была не в свойствах самого расширения, всегда полезно просматривать их на предмет общих настроек, таких как основной язык, совместимость и другие параметры, которые могут влиять на поведение.

Таким образом, для успешной работы с многоязычными синонимами в расширениях 1С крайне важно, чтобы все необходимые языки были добавлены в расширение, а для каждого объекта метаданных были явно заданы синонимы на всех этих языках с использованием встроенного редактора многоязычных строк. Это обеспечит корректное и приятное для глаз отображение интерфейса для всех пользователей, независимо от их языковых настроек.

← На главную