Имя: Пароль:
1C
 
В запросе перечисление преобразовать в строку. как?
0 Shur1cIT
 
01.06.17
11:06
Понадобилось в первый раз на много лет в запросе получить значение перечисление в виде строки
ВЫРАЗИТЬ ,ПРЕДСТАВЛЕНИЕ, ПРЕДСТАВЛЕНИЕССЫЛКИ

Не рабаротает!

у меня остаёться вариант писать через ВЫБОР, но это очень утомительлно так как перечисление и значений много....
1 Волшебник
 
модератор
01.06.17
11:07
формируй предложение ВЫБОР в цикле и подставь в запрос
2 Волшебник
 
модератор
01.06.17
11:09
ПРЕДСТАВЛЕНИЕ() должно работать
3 Мимохожий Однако
 
01.06.17
11:10
(0) Покажи фрагмент запроса с несчастным перечислением
4 Гипервизор
 
01.06.17
11:13
Представление же работает.
Правда в дальнейшем в запросе как строку использовать не получится.
Поделитесь секретом, для чего вам перечисление строкой в запросе?
5 1dvd
 
01.06.17
11:13
(2) должно работать пока он не попытается что-то сделать с этой строкой (Типа ПОДОБНО или ПОДСТРОКА)
ПРЕДСТАВЛЕНИЕ возвращает не совсем строку
6 Shur1cIT
 
01.06.17
11:41
(5) да это в этом и подвох.
забил на это.... после запроса програмно обрабаываю перечисление

Всем спасибо
7 Адинэснег
 
01.06.17
11:43
Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    ПеречНДС = ТаблицаИменПеречисления("СтавкиНДС");
    Запрос = Новый Запрос("ВЫБРАТЬ
                          |    Таб.Имя,
                          |    Таб.Значение
                          |ПОМЕСТИТЬ ТабПеречНДС
                          |ИЗ
                          |    &ПеречНДС КАК Таб
                          |;
                          |
                          |////////////////////////////////////////////////////////////////////////////////
                          |ВЫБРАТЬ
                          |    Номенклатура.Ссылка,
                          |    Номенклатура.СтавкаНДС,
                          |    ЕСТЬNULL(ТабПеречНДС.Имя, """") КАК ИмяПереч,
                          |    Номенклатура.Код
                          |ИЗ
                          |    Справочник.Номенклатура КАК Номенклатура
                          |        ЛЕВОЕ СОЕДИНЕНИЕ ТабПеречНДС КАК ТабПеречНДС
                          |        ПО Номенклатура.СтавкаНДС = ТабПеречНДС.Значение");
    Запрос.УстановитьПараметр("ПеречНДС", ПеречНДС);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить(Выборка.Код + " - " + Выборка.ИмяПереч);
    КонецЦикла;
    
КонецПроцедуры

Функция ТаблицаИменПеречисления(ИмяПеречисления)
    
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Значение", Новый ОписаниеТипов("ПеречислениеСсылка."+ИмяПеречисления));
    Таблица.Колонки.Добавить("Имя", ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(100));
    Для Каждого ЗнПереч Из Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления Цикл
        НовСтр = Таблица.Добавить();
        НовСтр.Значение = ЗнПереч;
        НовСтр.Имя = ЗнПереч.Имя;
    КонецЦикла;
    
    Возврат Таблица;
    
КонецФункции
8 Адинэснег
 
01.06.17
11:44
00000019815 - НДС18
00000019815 - НДС18_118
00000019815 - НДС10
00000019815 - НДС10_110
9 Адинэснег
 
01.06.17
11:53
упс, сорян, поправил функцию

Функция ТаблицаИменПеречисления(ИмяПеречисления)
    
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Значение", Новый ОписаниеТипов("ПеречислениеСсылка."+ИмяПеречисления));
    Таблица.Колонки.Добавить("Имя", ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(100));
    Для Каждого ЗнПереч Из Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления Цикл
        НовСтр = Таблица.Добавить();
        НовСтр.Значение = Перечисления[ИмяПеречисления][ЗнПереч.Имя];
        НовСтр.Имя = ЗнПереч.Имя;
    КонецЦикла;
    
    Возврат Таблица;
    
КонецФункции
10 Shur1cIT
 
01.06.17
11:55
Спасибо
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.