Имя: Пароль:
1C
1С v8
Получить ссылки на значения перечислений
,
0 bolero
 
18.10.19
13:17
Есть функция ПолучитьСтруктуруХраненияБазыДанных() - дает соответствия имен и номеров таблиц.

Но есть перечисления, значения которых закатаны в конфигурацию примерно вот так (УТ, Enums/ХозяйственныеОперации):

<EnumValue uuid="f786c0b6-6aa3-461f-b4ea-6960515f917b">
        <Properties>
                <Name>АвансовыйОтчет</Name>
                <Synonym>
                        <v8:item>
                                <v8:lang>ru</v8:lang>
                                <v8:content>Авансовый отчет</v8:content>
                        </v8:item>
                </Synonym>
                <Comment/>
        </Properties>
</EnumValue>
<EnumValue uuid="e17a2118-5315-42ad-bfb7-1c01edf4b364">
        <Properties>
                <Name>АмортизацияВнеоборотныхАктивов</Name>
....


Есть ли какая-то функция встроенного языка, которая позволит вытащить значения перечислений и их UUID?

Разобрать XML-то можно, но тогда нет гарантии, что мы разобрали XML именно от той конфигурации, которая в данный момент активна.
1 тарам пам пам
 
18.10.19
14:30

Сообщить(ЗначениеВСтрокуВнутр(Перечисления.ХозяйственныеОперации.АвансовыйОтчет))

выдает вот такую строку:

{"#",ae0f3889-6e23-4a7a-bf5d-cd197ab78fb7,1523:b4ea6960515f917b461f6aa3f786c0b6}


Вторая часть - это похоже и есть идентификатор объекта метаданных (формат только немного другоой). 1с правда использовать ЗначениеВСтрокуВнутр не рекомендует и формат полученной строки не документирован нигде.
2 tty12
 
18.10.19
14:34
(0) Попробуй XMLСтрока(Ссылка)
3 RomanYS
 
18.10.19
14:37
(0) А зачем вам ID перечислений? Вы напрямую с БД хотите работать?
4 RomanYS
 
18.10.19
14:38
(2) Нет
XMLСтрока(Перечисления.СтавкиНДС.БезНДС) = "БезНДС"
5 bolero
 
18.10.19
14:57
(3) именно. Я обычно делаю типа CASE WHEN THEN WHEN THEN ELSE 'хз' END, и оно в общем-то было терпимо, пока я не напоролся на ХозяйственныеОперации, в котором 400+ значений

(1) супер, это 100% то, что нужно, осталось перечисление как-то перечислить
6 RomanYS
 
18.10.19
15:10
(5) А просто заджойнить с таблицей перечисления и взять "<Name>АвансовыйОтчет" нельзя?
7 Жан Пердежон
 
18.10.19
15:12
(6) в таблице только гуид
8 RomanYS
 
18.10.19
15:20
(7) Да уж, засада. "Порядок" правда есть, он вроде доступен с обоих сторон. Но наглядности никакой и рисков накосячить сильно прибавляется.
9 FIXXXL
 
18.10.19
15:45
(4) и обратно
Перечисления.СтавкиНДС["БезНДС"]
10 bolero
 
18.10.19
15:45
буду парсить xml конфигурации и вывод в таблицу

это редко меняющиеся данные, хотя бы можно надеяться, что могут добавляться новые значения, а у старых guid изменяться не будет
11 FIXXXL
 
18.10.19
15:46
(9) т.е. Имя для каждого набора элементов перечисления и есть типа "Ссылка"
12 RomanYS
 
18.10.19
15:56
(11) Со стороны языка 1С это таки выглядит, а в БД всё-таки хранятся УИДы
13 FIXXXL
 
18.10.19
16:18
(12) конечно
просто всегда удавалось обходиться именем элемента во всяких интеграциях...
14 RomanYS
 
18.10.19
16:36
(13) "всегда удавалось" потому что всегда средствами 1С это делаешь, а ТС похоже решил пойти другим путем - напрямую в БД.
15 FIXXXL
 
18.10.19
16:39
(14) не буду гадать, но по-любому - удачи! :)
2 + 2 = 3.9999999999999999999999999999999...