Получить синоним объекта 1с

Обновлено: 07.07.2024

1. Что такое перечисление в запросе 1С?

Для начала освежим в памяти, что такое перечисление в запросе .

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

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

Можно добавить, что перечисления – это предопределенные данные. То есть к значению перечисления можно обращаться через точку. В то же время конкретное значение перечисления не имеет ссылки. Все это определяет особенности использования перечислений в запросах 1С .

2. Основные параметры перечисления

· Имя – имя значения, созданное по правилам формирования имен 1С, которое используется при обращении к конкретному значению через точку в тексте программы;

· Синоним – произвольное название значения, которое несет смысловую нагрузку и отображается как результат обращения к перечислению, является представлением ссылки;

· Порядок – порядковый номер значения в списке (начиная с 0). Весьма полезный параметр.

Использование перечисления в запросе 1С рассмотрим на самом простом примере: Пол Физического Лица. В России насчитывается 2 значения: Мужской и Женский. При локализации 1С в некоторых странах мира возможно увеличение количества значений до 7. Количество значений в перечислении не принципиально – принцип один и тот же для любого количества значений.

3. Использование перечисления в блоке запроса ВЫБРАТЬ

ФизическиеЛица.Ссылка КАК Ссылка,

ФизическиеЛица.Пол КАК Пол

Справочник.ФизическиеЛица КАК ФизическиеЛица

В результате выполнения этого запроса в поле «Пол» будет находиться объект метаданных «Перечисление» с тем значением, которое присвоено данному Физическому лицу.

ФизическиеЛица.Ссылка КАК Ссылка,

ПРЕДСТАВЛЕНИЕ(ФизическиеЛица.Пол) КАК Пол

Справочник.ФизическиеЛица КАК ФизическиеЛица

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

ПолФизическогоЛица.Ссылка КАК Ссылка,

ПолФизическогоЛица.Порядок КАК Порядок

Перечисление.ПолФизическогоЛица КАК ПолФизическогоЛица

Мы увидим только Синонимы в поле «Ссылка» и порядковый номер в поле «Порядок».

4. Использование перечисления в условиях запроса

В условиях запроса «впрямую» (не через параметр запроса) можно использовать ТОЛЬКО конкретное значение перечисления в 1С , обозначая его с ключевым словом «ЗНАЧЕНИЕ» или «Порядок значения». Любой другой способ использования даст ошибку при исполнении запроса.

ФизическиеЛица.Ссылка КАК Ссылка,

ФизическиеЛица.Пол КАК Пол

Справочник.ФизическиеЛица КАК ФизическиеЛица

ФизическиеЛица.Пол = ЗНАЧЕНИЕ (Перечисление.ПолФизическогоЛица.Женский)

Результатом выполнения этого запроса будет таблица со ссылками физ. лиц женского пола.

ВНИМАНИЕ! В тексте запроса после «ЗНАЧЕНИЕ» слово «Перечисление» используется в единственном числе, в отличие от использования в тексте программ. Это частая ошибка начинающих пользователей, которые копируют текст, сформированный конструктором, из программы в запрос.

Аналогичный результат получится, если известен Порядок нужного Значения и лень писать длинные тексты:

ФизическиеЛица.Ссылка КАК Ссылка,

ФизическиеЛица.Пол КАК Пол

Справочник.ФизическиеЛица КАК ФизическиеЛица

ФизическиеЛица.Пол.Порядок = 1

Также в условиях запроса может быть использован список значений Перечисления:

ФизическиеЛица.Ссылка КАК Ссылка,

ФизическиеЛица.Пол КАК Пол

Справочник.ФизическиеЛица КАК ФизическиеЛица

ФизическиеЛица.Пол В (ЗНАЧЕНИЕ(Перечисление.ПолФизическогоЛица.Женский), ЗНАЧЕНИЕ(Перечисление.ПолФизическогоЛица.Мужской))

ФизическиеЛица.Ссылка КАК Ссылка,

ФизическиеЛица.Пол КАК Пол

Справочник.ФизическиеЛица КАК ФизическиеЛица

ФизическиеЛица.Пол.Порядок В (1,2)

Если учитывать особенности, то использование перечислений в запросе – это несложный и понятный процесс.

Работа во встроенном языке с объектами метаданных

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

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

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

Доступ к структуре метаданных осуществляется через свойство Метаданные глобального контекста. Это свойство предоставляет доступ к корневому объекту конфигурации и коллекциям объектов верхнего уровня. Каждый объект предоставляет соответственно доступ к своим свойствам и подчиненным объектам. Таким образом, можно получить доступ к любому объекту.
Например:

Кроме того, у некоторых типов предназначенных для работы с прикладными объектами, имеется метод Метаданные() , предназначенный для получения объекта метаданных, отвечающего за конкретный тип.
Например:

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

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

С помощью метода Родитель() можно получить вышестоящий объект метаданных.
Например:

Для представления объекта метаданных пользователю нужно использовать преобразование значения к строке или метод Представление() .
Например:

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

Для поиска объекта метаданных, соответствующего значению перечисления, можно использовать методику, описанную в разделе "Как получить имя значения перечисления, заданное в метаданных?".

Метаданные можно использовать, чтобы проверить, относится ли, например, значение к справочникам. Методика такой проверки описана в разделе "Как проверить, что тип значения относится к справочникам, документам и т. д.?".

Некоторые свойства объектов метаданных имеют перечислимый тип. Это специальные перечисления. Доступ к ним в языке выполняется через коллекцию СвойстваОбъектов , предоставляемую корневым объектом метаданных. Состав этих перечислений описан в документации, в разделе, описывающем работу с объектами метаданных.
Например:

Некоторые свойства объектов метаданных являются коллекциями значений и представляются типом КоллекцияЗначенийСвойстваОбъектаМетаданных .
Например:

В разделе документации, описывающем работу с объектами метаданных, приводятся также описания специфических типов свойств метаданных, например, таких как ПараметрыВводаПоСтроке .

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

Для получения форм и макетов используются специализированные методы.

Для получения значений, идентифицирующих стили и элементы стилей, а также картинок, используются специализированные коллекции.
Например:

Для проверки прав текущего пользователя используются специализированные методы глобального контекста ПравоДоступа() и ПараметрыДоступа() .

лгоритмически можно получить коллекцию перечислений из конфигурации и перебрав их в цикле сравнить значение реквизита синоним с параметром функции вернуть имя перечисления.
Исходный код функции ИмяПеречисленияПоСинониму (СинонимПеречисления):
Код 1C v 8.х

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 31.08.2010   Прочитано: 19653

Распечатать

Похожие FAQ

17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps  20
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш COM-подключение к базе 7.7 из 8.2 1С  6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь= Cклонения по падежам  6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ; Google maps : вывод точек на карту и режим панорамы  7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Посмотреть все результаты поиска похожих

Еще в этой же категории

wisekat --> wisekat



Просмотр профиля

Многоязычная конфа. Получаю

Могу потом обратиться МетаданныеТипа.Синоним, но он возвращается на языке текущего пользователя. А как мне его вытянуть на заданном языке независимо от текущей языковой настройки?

Vofka --> Vofka



Просмотр профиля Как это на "заданном"? Синоним задается на языках, присутствующих в прикладном решении. Языка "по умолчанию" нету. wisekat --> wisekat



Просмотр профиля

Нужен аналог НСтр, которая позволяет же выбрать строку на нужном языке.

Суть в чём. В конфе все синонимы на 2-х языках - рус/укр, и есть специальный регистр для регистрации действий с объектами справочников. В него надо записывать информацию вида "Справочник <Название>", где <Название> - это дружелюбный для пользователя синоним справочника. Фокус в том, что этот синоним выдаётся системой в зависимости от текущего языка пользователя, и получается чехарда - то "Справочник Физлица", то "Справочник Фізособи". И затем по этому полю невозможно отбор/группировку делать.

logist --> logist



Просмотр профиля А зачем вообще записывать текст? Не проще ли записать ссылку а потом выводить ее на дружественном пользователю языке? Vofka --> Vofka



Просмотр профиля

Не получите вы синоним на требуемом языке, платформа такого не позволяет. Пишите в регистр Имя объекта, оно всегда будет одно независимо от языка.

Не проще ли записать ссылку а потом выводить ее на дружественном пользователю языке?

Человеку, насколько я понял, надо не ссылка, а вид объекта.

wisekat --> wisekat



Просмотр профиля Не получите вы синоним на требуемом языке, платформа такого не позволяет.

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

Пишите в регистр Имя объекта, оно всегда будет одно независимо от языка.

Зачем обычному пользователю мои программные идентификаторы?? Ведь в этом как раз и есть смысл синонимов.

Vofka --> Vofka



Просмотр профиля В таком случае сделайте, например, регистр "СинонимыОбъектовМетаданных" и в них храните программный идентификатор и его синоним. Дальше, я думаю, понятно. alex040269 --> alex040269



Просмотр профиля Можно хранить идентификатор, а пользователю показывать синоним. Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП wisekat --> wisekat



Просмотр профиля В таком случае сделайте, например, регистр "СинонимыОбъектовМетаданных" и в них храните программный идентификатор и его синоним.

Х-м, прикольное решение - но не программистское

Зачем мне плодить новые таблицы и в них дублировать ту информацию, которая в самой конфе уже прописана? Ведь вопрос был именно об этом.

Но за идею спасибо. Если ничего толкового больше не найдём, то как обходной путь возможно что его используем.

Можно хранить идентификатор, а пользователю показывать синоним.

Синоним откуда и какой? Что-то не понял.

Ardi --> Ardi



Просмотр профиля Х-м, прикольное решение - но не программистское mellow.jpg
Если таблицу заполнить программно - то решение программистское wisekat --> wisekat



Просмотр профиля Если таблицу заполнить программно - то решение программистское

Согласен, можно при старте приложения как-то заполнять/обновлять эту таблицу программно по синонимам, но опять-таки упираемся в проблему аккаунта текущего пользователя и его языка. Как здесь быть?

Ardi --> Ardi



Просмотр профиля но опять-таки упираемся в проблему аккаунта текущего пользователя и его языка
Не таблицу - а регистр сведений.
Соответственно когда мы заходим на китайском языке - в регистре всё ещё есть данные оставшиеся после запуска на русском. wisekat --> wisekat



Просмотр профиля

под "таблица" я подразумевал общее понятие - это м.б. и регистр, и справочник, и т.д. - не суть важно

всё равно не пойму вашу идею - мне надо синонимы на строго определённом языке независимо от языка текущего пользователя

код какой-то покажете?

wisekat --> wisekat



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

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

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

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

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

Читайте также: