Каталог решений - Метод связи системного перечисления с объектом конфигурации Перечисление на примере объекта Цвет (WebЦвета)

Метод связи системного перечисления с объектом конфигурации Перечисление на примере объекта Цвет (WebЦвета)

Метод связи системного перечисления с объектом конфигурации Перечисление на примере объекта Цвет (WebЦвета)

В наличии

В статье описан метод связи системного перечисления Цвет (WebЦвета) с объектом конфигурации Перечисление и получение значения цвета для дальнейшей обработки.

Категория:

Описание

В организации, где я тружусь программистом, очень много заказов поступает через Web — сервисы, причем от разных контрагентов. Иногда, заказы идут сплошным потоком, в них потом разбираются девушки — операторы. Они и пожаловались генеральному, дескать заказов много, путаницы много, нельзя ли их как то выделить в списке, хотя бы цветом.

Начал очень бодро, создал справочник «Цвета» с реквизитами «Контрагент» и «WebЦвет«. Теперь нужно было как-то выбирать цвета. Создал новое Перечисление «WebЦвета» и в этот момент понял, что к самому системному перечислению Цвет я подобраться не могу.

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

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

Посмотрите, что получилось:

Функция ПолучитьЦвет(Контрагент) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    «ВЫБРАТЬ
    |    Цвета.WebЦвет
    |ИЗ
    |    Справочник.Цвета КАК Цвета
    |ГДЕ
    |    Цвета.Контрагент = &Контрагент
    |    И НЕ Цвета.ПометкаУдаления»;
    
    Запрос.УстановитьПараметр(«Контрагент», Контрагент);
    Рез = Запрос.Выполнить();
    
    Если НЕ Рез.Пустой() Тогда
        Выборка = Рез.Выбрать();
        Выборка.Следующий();
        ВыборкаЦвет = ПолучитьИмяПеречисления(Выборка.WebЦвет);
        СтрокаЦвет = «<Color» + » xmlns=»»http://v8.1c.ru/8.1/data/ui»» xmlns:d1p1=»»http://v8.1c.ru/8.1/data/ui/colors/web» +
        » xmlns:xs=»»http://www.w3.org/2001/XMLSchema»» xmlns:xsi=»»http://www.w3.org/2001/XMLSchema-instance»»>»
        + «d1p1:» + СокрЛП(ВыборкаЦвет) + » <» +
«/Color>»;

        // Почему то строка в сериализованном виде не хотела правильно отображаться, поэтому пришлось её разобрать на части

       // Проверьте сами параметры при сборке строки

        Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
        ТипОбъектаXDTO = ФабрикаXDTO.Тип(«http://v8.1c.ru/8.1/data/ui»,«Color»);

        ЧтениеXML = Новый ЧтениеXML;
        Попытка
            ЧтениеXML.УстановитьСтроку(СтрокаЦвет);
            ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипОбъектаXDTO);
            Возврат Сериализатор.ПрочитатьXDTO(ОбъектXDTO);
        Исключение
            Возврат Неопределено;
        КонецПопытки;
    Иначе
        Возврат Неопределено;
    КонецЕсли;
    
КонецФункции

// Получение строкового значения имени перечисления
Функция ПолучитьИмяПеречисления(Значение) Экспорт

    Если Значение.Пустая() Тогда
        Возврат
«»;
    КонецЕсли;

    //получаем как названо перечисление в конфигураторе
   
ИмяПеречисления = Значение.Метаданные().Имя;

    //теперь получим индекс где хранится то что нам надо
   
НужныйИндекс = Перечисления[ИмяПеречисления].Индекс(Значение);

    //и вот счастье. то что нам надо — идентификатор!!! всего-то четыре строчки кода
   
Возврат Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[НужныйИндекс].Имя;

КонецФункции

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

Уверен, что через сериализацию — десериализацию можно получить доступ к абсолютно любому системному объекту.

Огромное спасибо asved.ru, помог получить имя перечисления для подстановки в строку XML.

has been added to your cart:
Оформление заказа