Как сравнить перечисление 1с
Получение значений перечислений через внешнее соединение или Automation сервер
Раздел содержит описание особенностей получения и использования значений перечислений 1С:Предприятия через внешнее соединение или Automation сервер 1С:Предприятия.
Системные перечисления и их элементы
Системные перечисления предназначены для определения некоторого набора предопределенных значений и используются в качестве значений параметров некоторых методов, а также в качестве значений некоторых свойств объектов 1С:Педприятия. Доступ к системным перечислениям осуществляется как к свойствам глобального контекста. Значения элементов системных перечислений указываются через точку от имени системного перечисления. Например:
В качестве значений параметров метода Записать() заданы два значения элементов системных перечислений: элемент "Проведение" системного перечисления "РежимЗаписиДокумента" и элемент "Оперативный" системного перечисления "РежимПроведенияДокумента".
И системные перечисления, и значения их элементов являются объектами, и могут быть переданы в другие приложения через COM посредством интерфейса IDispatch. При этом любое системное перечисление имеет набор свойств, каждое из которых позволяет получить соответствующее значение элемента данного системного перечисления. Элемент системного перечисления также является объектом и доступен через интерфейс IDispatch, однако ни свойств, ни методов он не имеет.
По этой причине анализ полученных значений системных перечислений возможен только посредством их сравнения со значениями системных перечислений, полученными через свойства глобального контекста. Например, на встроенном языке 1С:Предприятия проверка значений системных перечислений, полученных через внешнее соединение, может быть выполнена так:
Важно иметь в виду, что значения одних и тех же системных перечислений, полученные из разных экземпляров клиентского приложения или внешнего соединения 1С:Предприятия, являются разными объектами и между собой несравнимы.
Перечисления, определенные в конфигурации
В отличие от системных перечислений, определенные в конфигурации перечисления являются объектами базы данных. Элемент такого перечисления является ссылкой на объект базы данных. Например, если в конфигурации определено перечисление "Перечисление1" с элементами "ЗначениеПеречисления1" и "ЗначениеПеречисления2", а реквизит "Реквизит1" справочника "Справочник1" имеет тип "ПеречислениеСсылка.Перечисление1", то следующий код на встроенном языке 1С:Предприятия:
выведет "Равно", если значением реквизита "Реквизит1" является "ЗначениеПеречисления1" и "Не равно" в противном случае.
Однако если значение элемента перечисления получить через внешнее соединение, то оно будет являться COM объектом, и подобное сравнение будет всегда приводить к отрицательному результату. Например, следующий код на встроенном языке 1С:Предприятия:
будет всегда выводить "Не равно". Это происходит потому, что значение элемента перечисления является объектом типа ссылка на объект базы данных. Для объектов ссылок определена операция сравнения значений, которая может работать только для "своих" объектов 1С:Предприятия. Объекты, полученные через внешнее соединение "своими" не являются, поэтому операция их сравнения является проверкой идентичности. Поскольку для объектов ссылок идентичность не поддерживается, их сравнение может дать отрицательный результат, даже если значения ссылок, заключенные в этих объектах, одинаковые.
Для сравнения значений элементов перечислений, определенных в конфигурации, необходимо выполнить преобразование этих элементов к одному из примитивных типов, сравнение которых не вызывает трудности. Такими типами могут быть либо числовой, либо строковый тип. Преобразовать значение элемента перечисления к числовому типу можно так:
Если тип перечисления, значение которого может содежать переменная "ЭлементПеречисления", известен заранее, то приведенный выше пример может быть записан проще:
Значение элемента перечисления может быть приведено к строковому типу, например, при помощи следующего фрагмента кода на встроенном языке 1С:Предприятия:
В предыдущей статье я показал, как создавать перечисления 1С, значения перечислений, как указывать ссылку на нужное перечисление у реквизита объекта, и как работать с перечислением на управляемой форме. В этой статье я покажу некоторые моменты программной работы с перечислениями в языке программирования 1С.
Программная работа с перечислениями в 1С отличается в зависимости от того в каком контексте мы работаем с этим перечислением: в серверном или клиентском (конкретно на тонком клиенте и веб-клиенте). Поэтому разберем оба варианта по отдельности, также изучим, как работать с перечислениям в языке запросов 1С.
Перечисление в серверном контексте
Для того, чтобы понять как работать со значениями перечисления в серверном контексте, рассмотрим простую задачу: будем программно создавать элемент справочника и присваивать ему конкретное значение перечисления.
В моей учебной конфигурации, есть справочник Контарагенты, с реквизитом Статус, у которого тип ссылка на перечисление ЮридическийСтатусКонтрагента, которое было создано в предыдущей статье. Создадим программно нового контрагента, с уже конкретным значением перечисления. Делать я это будут на управляемой форме учебной обработки. На этой форме я создал команду, серверный и клиентский обработчик команды.
В серверном обработчике и будет создаваться новый элемент справочника.
В этом коде мы создаем объект справочника, заполняем его реквизиты какими-то значениями, а потом сохраняем. Реквизиту Статус мы присваиваем конкретное значение перечисления ЮридическийСтатусКонтреганта. Вы заметили, что к нужному перечислению мы обращаемся посредством объекта Перечисления, который имеет типа ПеречисленияМенеджер.
А выражение Перечисления.ЮридическийСтатусКонтрегента это менеджер конкретного перечисления, посредством которого можно обращаться к нужному значению перечисления. Причем обращение к значению идет по имени.
Посредством этого выражения мы можем обратиться к любому значению перечисления, в зависимости от поставленной задачи.
Если по какой-то причине нам не нужно записывать определенное значение перечисления, то мы можем записать пустую ссылку на это перечисление, обратившись к методу менеджера перечисления ПустаяСсылка(). Тогда будет иметь место следующий код.
Перечисление в клиентском контексте (на тонком клиенте)
Если в серверном контексте мы обращались напрямую к значению перечисления, используя менеджер перечислений, то в клиентском контексте мы так сделать не можем (за исключением толстого клиента).
Приведу небольшой пример, на котором покажем, как работать с перечислениями на клиенте, пример больше учебный, призванный показать, как работать с перечислениями в клиентском контексте, и не несет какого-либо прикладного смысла.
На управляемую форму поместим реквизит с типом ссылка на перечисления, и при выполнении команды формы будем записывать в этот реквизит конкретное значение перечисления.
Поскольку в предыдущей статье мы создали перечисление ЮридическийСтатусКонтрегента, то назовем реквизит формы СтатусИП, и будем при выполнении команды в него записывать соответствующее значение перечисления.
Создадим реквизит, поместим его на форму, и также я создам команду, которую помещу на форму.
Для этой команды создадим клиентский обработчик.
В этом клиентском обработчике, нам нужно записать в реквизит формы значение перечисления. Мы можем получить значение перечисления так, как получали ранее в этой статье: используя менеджер перечислений.
Если мы сейчас сделаем синтаксис-проверку модуля на ошибки, то в некоторых случаях может выдать ошибку, а в некоторых нет. Всё зависит от того, настроена ли в параметрах проверка в режиме тонкого клиента.
Проверим это. Зайдем в параметры конфигурации по пути Главное меню – Сервис – Параметры
В этой форме на закладке Модули в подзакладке Проверка нас интересует флаг Тонкий клиент.
Если этот флаг установлен, то при синтаксической проверке модуля, на код, который мы написали ранее, выйдет ошибка.
Поэтому, если вы планируете, что ваше приложение будет работать в режиме тонкого клиента, то способ получения значения перечисления, используя менеджер перечислений, не применим.
Чтобы получить в режиме тонкого клиента значение перечисления, нужно использовать метод глобального контекста ПредопределенноеЗначение. В этом случае код будет следующим.
В параметре этого метода в виде строки необходимо написать путь к значению перечисления. Замечу, что в платформе 1С, после ввода круглой скобки и первой кавычки выпадают подсказки, и по этим подсказками можно сгенерировать нужную строку.
Если мы сейчас запустим «1С: Предприятие» под тонким клиентом, то значением в реквизит прекрасно запишется.
Заметили, что обращались мы к имени значения перечисления, а на форме отображается синоним значения.
Перечисление в языке запросов 1С
Рассмотрим, как работать с перечислениями в языке запросов 1С.
Для того, чтобы понять как работать с перечислениями в запросе разберем простой и понятный пример. Из справочника Контрагенты отберем только тех, контрагентов, у которых статус ИП. Делать мы это будем сразу в «1С: Предприятии», в консоли запросов.
В консоли запросов откроем конструктор запроса, выберем таблицу Контрагенты и поля этой таблицы Наименование и Статус.
На закладке Условия установим, чтобы отбирались контрагенты со статусом ИП.
В этом случае мы используем функцию Значение языка запросов 1С, где в качестве параметра указываем путь к нужному нам значению перечисления.
У нас должен получиться вот такой запрос:
Который будет возвращать контрагентов только с нужным статусом.
Функцию ЗНАЧЕНИЕ можно использовать не только в условиях, но и в секции выбрать. Например, можно сделать такой запрос.
Который будет возвращать два значения перечисления.
А что делать, если нужен отбор по нескольким значениями перечислений? Для этого мы объединим два этих запроса: поместим во временную таблицу значения двух перечислений, а потом при получении контрагентов, в условии при помощи оператора множественного выбора отберем контрагентов только с двумя значениями перечислений.
Код запроса будет в этом случае следующим:
И этот запрос будет выдавать нужный результат.
Если же мы не знаем, по какому значению перечисления нужен отбор, то можем просто передать значение нужного перечисления в качестве параметра. В этом случае будет такой запрос.
Который будет выполняться следующим образом.
Если же мы хотим сделать отбор по нескольким сразу статусам (которые мы не можем знать заранее), то нам нужно передать в запрос массив или список значений, и применить к нему оператор множественного выбора. В этом случае у нас будет следующий запрос.
С таким результатом.
Если Вы всё еще «плаваете» в конструкциях языка запросов, и у Вас вызывают трудности даже самые простые запросы, то рекомендую вам мой курс «Язык запросов в 1С для начинающих». Где эти и многие другие вопросы рассматриваются более подробно.
В чем особенность этого курса:
• Курс рассчитан на тех, кто не знаком с языком запросов в 1С;
• Учебный материал грамотно скомпонован и прост в освоении;
• Несколько десятков уроков;
• Полезные практические примеры;
• Все уроки изложены понятным и простым языком
Для моих читателей, купон на скидку 25%: hrW0rl9Nnx
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
В этой статье разберем перечисления 1С. Перечислениями называют объекты конфигурации, которые содержат в себе постоянные значения, не изменяемые в процессе работы с программой. Перечисления задаются на этапе конфигурирования, и их нельзя менять пользователю во время работы программы.
Создать перечисление в 1С
Научимся создавать перечисления. Для этого необходимо в конфигураторе 1С, в дереве метаданных, найти ветку перечисления, выделить её, вызвать контекстное меню и воспользоваться единственной командой этого меню «Добавить».
После этих действий будет открыт конструктор редактирования перечислений, где на закладке Основные, можно ввести имя перечисления и синоним.
В моей учебной конфигурации имеется справочник Контрагенты, поэтому я создам перечисление «Юридический статус контрагента», которое потом буду использовать в этом справочнике.
Значение перечисления 1С
Перечисление создано, но само по себе перечисление не имеет ни какого смысла, в нем должны быть различные значения. Нужно их добавить. Для этого перейдем на закладку «Данные», где имеется список значений перечислений. Сейчас он пустой, и нам нужно добавить в него несколько значений, для этого необходимо выполнить команду «Добавить» в меню списка значений.
После выполнения команды, значение будет создано, и справа откроется палитра свойств этого значения. В неё вы можете задать имя конкретного значения, синоним и комментарий.
К имени значения перечисления мы будем обращаться при программной работе с перечислением, а синоним будет отображаться пользователю в интерфейсе.
Точно также добавим несколько других значений.
Перечисление в реквизите объекта 1С
Перечисление мы создали, но от самого перечисления нет ни какого смысла. Перечисление имеет смысл, когда ссылка на это перечисление указано в качестве типа какого-нибудь реквизита объекта. Для примера, я доработаю справочник Контрагенты в моей конфигурации: создам новый реквизит, тип которого будет ссылка на созданное ранее перечисление.
Создадим у справочника контрагенты реквизит Статус.
В палитре свойств этого реквизита установим для него тип ПеречислениеСсылка.ЮридическийСтатусКонтрегента.
На этом конфигурирование справочника будет закончено. Разберем, как работать с перечислением на управляемой форме.
Перечисление на управляемой форме 1С
У моего справочника не было основной формы элемента справочника. После того, как я создам форму элемента этого справочника, включив в неё новый реквизит Статус, то на форме по умолчанию будет размещен элемент поле ввода в виде выпадающего списка, которое будет связано с созданным нами реквизитом справочника.
Если мы откроем форму элемента этого справочника в пользовательском режиме «1С: Предприятия», то сможем посредством выпадающего списка выбрать нужное значение перечисления.
Заметьте, названия значений перечисления в пользовательском режиме соответствуют синонимам значений перечисления.
Кроме выпадающего списка есть другие интерфейсные механизмы работы с перечислениями. Перечисление на управляемой форме может быть в виде переключателя и в виде тумблера.
Для того, чтобы сделать другой вид перечисления, необходимо на форме найти поле ввода, которое связанно с реквизитом, имеющим тип ссылка на перечисление.
После этого необходимо зайти в палитру свойств этого элемента формы (поле ввода), и в этой палитре найти свойство Вид.
По умолчанию у этого свойства установлено значение «Поле ввода», но можно поменять на другие. Нас интересует значение «Поле переключателя».
Если мы установим это значение, то внешний вид формы поменяется.
Вы видите, что на форме сейчас нет рядом с переключателями названий значений перечислений (стоят Значение 1, Значение 2). Чтобы они отобразились, нам нужно ввести значения переключателя в список выбора. Сделать это нужно в свойстве «Список выбора» поля ввода. После нажатия на кнопку «…» этого свойства, откроется форма списка выбора.
Мы можем автоматически заполнить список всеми значениями перечисления, нажав на кнопку «Заполнить» этой формы.
Но представления значений, придется заполнить вручную.
После нажатия кнопки ОК формы списка выбора, свойство «Список выбора» поля будет заполнено, а внешний вид поля переключателя на форме поменяется.
Также другой вид будет в пользовательском режиме «1С: Предприятия» .
Кроме стандартного переключателя в платформе 1С есть возможность сделать тумблер, суть у него будет такая же, как и у переключателя, но внешний вид будет отличаться.
Для того, чтобы сделать тумблер, нужно у элемента формы поле переключателя найти свойство ВидПереключателя и установить в него значение Тумблер.
После установки этого значения, внешний вид формы опять поменяется.
Тумблер представлен в виде кнопок, причем пользователь может нажать только на одну из них. У разработчика имеется возможность управлять внешним видом тумблера при помощи свойств, которые расположены в категории «Расположения» палитры свойств поля переключателя. Например, можно сделать все кнопки тумблера одинаковыми по ширине.
После всех действий, внешний вид переключателя в пользовательском режиме «1С: Предприятия» будет другой.
Замечу, что кнопки тумблера это суть значения перечисления. И когда вы нажали на какую-то кнопку тумблера, то значит, что элементу справочника будет присвоено соответствующее значение перечисления.
Другие статьи по теме конфигурирования:
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Вступайте в мои группы:
One thought on “ Перечисления 1С ”
Очень часто возникает необходимость где-то задать перечисление типов. Например, это может быть колонка таблицы значений, в которой могут содержаться значения разных типов. Для создания списка типов используется общий объект Описание типов 1С.
Как правило, объект описание типов 1С сам по себе нигде не используется, в основном он нужен в качестве параметра разных объектов, например, таблицы значений 1С. На примере таблицы значений и покажем, как работать с описанием типов. Описание типов можно создать только для одного типа, например, для типа Число будет следующее описание типа.
Это примитивные типы, для ссылочных типов можно создать такое же описание, указав в двойных кавычках название типа.
Чтобы получить быстро полное название нужной ссылки, можно воспользоваться контекстной подсказкой метода Тип.
После того, как мы создали описание типов, этот объект можно использовать, например, при создании таблицы значений.
Выше показано самое простое использование описания типов. Для числа, строки и даты мы можем использовать Квалификаторы. Это общие объекты – КвалификаторыЧисла, КвалификаторыСтроки, КвалификаторыДаты. Они также задаются при помощи конструктора Новый и имеют следующие синтаксисы.
Квалификатор числа 1С
Для числа будет следующий синтаксис квалификатора.
Новый КвалификаторыЧисла(<ЧислоРазрядов>, <ЧислоРазрядовДробнойЧасти>, <ДопустимыйЗнак>)
Где: ЧислоРазрядов – общее число разрядов;
ЧислоРазрядовДробнойЧасти – число разрядов после запятой;
ДопустимыйЗнак – системное перечисления (значения Любой, Неотрицательный).
Например, задать неотрицательно число с 6 разрядами и 2 дробными разрядами будет так:
Квалификатор строки 1С
Для строки будет следующий синтаксис квалификатора.
Новый КвалификаторыСтроки(<ДлинаСтроки>, <ДопустимаяДлина>)
Где: ДлинаСтроки – длина задаваемой строки
ДопустимаяДлина – системное перечисление ДопустимаяДлина, которое определяет, будет строка переменная или фиксированная.
Например, задать строку длинной 10 символов фиксированной длины нужно так:
Обратите внимание, что КвалификаторСтроки задаем третьим параметром.
Квалификатор даты 1С
Для даты будет следующий синтаксис квалификатора.
Где ЧастиДаты – системное перечисление, с тремя значениями Время, Дата, ДатаВремя.
Например, задать дату, которая будет иметь формат времени нужно так:
Обратите внимание, что КвалификаторДаты задаем третьим параметром.
Общий вариант синтаксиса с использование типов выглядит так:
Новый ОписаниеТипов(<Типы>, <КвалификаторыЧисла>, <КвалификаторыСтроки>, <КвалификаторыДаты>, <КвалификаторыДвоичныхДанных>)
Массив типов в описание типов
Кроме использования одного типа в синтаксисе описания типов, можно использовать массив типов, например, сделаем колонку таблицы значений, у которая может принимать значения примитивных типов Строка, Число, Дата, Булево. Для этого нужно все типы перечислить в массиве, причём типы должны быть не в виде строк, как мы делали ранее, а в виде значений типа Тип.
Также можно «собрать» массив из ссылочных типов, например из справочников:
Описание типов на основании описания типов
Выше был рассмотрен один вариант синтаксиса описания типов, на основания какого-то типа (или перечисления типов), но также можно создать описание типа на основании другого описания типов, т.е. дополнить имеющееся описание.
Например, мы создали описание типов для чисел, строк и булево.
Теперь нам нужно новое описание типов, в котором будут такие типы как Число, Строка и Дата (тип Булево нам не нужно).
Для этого мы можем использовать следующий конструктор описания типов:
Новый ОписаниеТипов(<ИсходноеОписаниеТипов>, <ДобавляемыеТипы>, <ВычитаемыеТипы>, <КвалификаторыЧисла>, <КвалификаторыСтроки>, <КвалификаторыДаты>, <КвалификаторыДвоичныхДанных>)
Где, в качестве первого параметра указывается описание типов, на основании которого создается это описание, а в качестве второго и третьего параметра – добавляемые и вычитаемые типы (могут быть как в виде массивов, так и в виде строк).
Давайте продолжим код выше:
В этом код в новое описание типов, мы добавили тип Дата, и вычли тип Булево.
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
Читайте также: