Получить значение перечисление 1с 7

Обновлено: 08.07.2024

Репутация: нет
Всего: нет

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

Например, есть перечисление виды договоров, состоящее из "НД"->"нетиповой доходный", "МСВ"->"Межсетевой".
Если переменная Дог="Межсетевой", реквизит формы должен принять значение ПЕречисление.ВидыДогоыоров.МСВ.

Как это реализовать?

Репутация: 8
Всего: 9

Не совсем понятно что вы хотите но я бы поступил так

Репутация: нет
Всего: нет

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

Репутация: 8
Всего: 9

Ну просто так не обойти в цикле перечисления. Если только не добраться до них через метаданные.
Но вот вопрос вам ведь все равно придется сравнивать значения перечислений а это как я понимаю вам все равно не обойтись без логического Если?

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

Может что умное попытаюсь посоветовать.

Репутация: нет
Всего: нет

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

Но застрялось на переменной КатегорияДоговора, ей ни в какую не хочет присваиваться значение перечисления (категорияДоговора -- реквизит формы с типом Перечисление.КД).

Дальше хуже, теперь при наличии равенства Перечисление.КД.ЗначениеПоНомеру(счетчик) = Категория (под отладчиком "Межсетевой"="Межсетевой"), не отрабатывается "Если . ", он просто делает вид что строки не эквивалентны :(

Репутация: 8
Всего: 9

Репутация: 7
Всего: 34

Репутация: нет
Всего: нет

Ага, пробовала. Я почти все перепробовала -- с теоретической точки зрения код верен, под отладчиком все красиво и вроде бы должно это перечисление в реквизит вставать. Но ничего подобного :( МОжет это быть глюк 1С к-нить?

Репутация: 7
Всего: 34

В отладчике значения СокрЛП(Перечисление.КД.ЗначениеПоНомеру(счетчик)) и СокрЛП(Категория) смотрела? Они точно одинаковые?

Репутация: нет
Всего: нет

Однозначно одинаковые. Что-то с 1С странное, попробовала на другой машине -- заработал первый вариант. Спасибо )

Репутация: нет
Всего: нет

кстати, по поводу перебора всех значений..
Работает такая конструкция:
Цитата

Для с=1 По метаданные.перечисление() Цикл
Для сс= 1 По метаданные.перечисление(с).значение() Цикл
Сообщить(""+метаданные.перечисление(с)+" "+метаданные.перечисление(с).значение(сс))
КонецЦикла;
КонецЦикла;

Запрещается!

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

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

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

[ Время генерации скрипта: 0.1298 ] [ Использовано запросов: 20 ] [ GZIP включён ]

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

Объект типа «СписокЗначений» — это средство языка (не сохраняемый в БД объект), которое позволяет строить «динамические массивы» и манипулировать ими (добавлять, редактировать, удалять элементы, сортировать). Список значений может быть наполнен значениями любого типа, т. е. в одном списке типы хранимых значений могут быть разными. Одним из примеров использования данного объекта может служить организация выбора конкретного документа из списка возможных документов, сформированного по сложному алгоритму.

Контекст работы со Списком Значений

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

Чтобы вызвать метод объекта, имя метода (с указанием необходимых параметров) пишется через точку после имени объекта.

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

Получение значений перечислений через внешнее соединение или Automation сервер

Раздел содержит описание особенностей получения и использования значений перечислений 1С:Предприятия через внешнее соединение или Automation сервер 1С:Предприятия.

Системные перечисления и их элементы

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

В качестве значений параметров метода Записать() заданы два значения элементов системных перечислений: элемент "Проведение" системного перечисления "РежимЗаписиДокумента" и элемент "Оперативный" системного перечисления "РежимПроведенияДокумента".

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

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

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

Перечисления, определенные в конфигурации

В отличие от системных перечислений, определенные в конфигурации перечисления являются объектами базы данных. Элемент такого перечисления является ссылкой на объект базы данных. Например, если в конфигурации определено перечисление "Перечисление1" с элементами "ЗначениеПеречисления1" и "ЗначениеПеречисления2", а реквизит "Реквизит1" справочника "Справочник1" имеет тип "ПеречислениеСсылка.Перечисление1", то следующий код на встроенном языке 1С:Предприятия:

выведет "Равно", если значением реквизита "Реквизит1" является "ЗначениеПеречисления1" и "Не равно" в противном случае.

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

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

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

Если тип перечисления, значение которого может содежать переменная "ЭлементПеречисления", известен заранее, то приведенный выше пример может быть записан проще:

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

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