Имя: Пароль:
1C
1C 7.7
v7: Передача документов в другую конфигурацию через XML. Невозможно принять реквизит
0 Romchyk
 
19.01.17
22:42
Передача документов в другую конфигурацию через XML. Невозможно принять реквизит документа. Реквизит имеет вид перечисления. Через файл передаю идентификатор перечисления.
фрагмент кода:

Перес = СокрЛП(ДокРеквизит.ПолучитьАтрибут("Значення"));
                Вид = СокрЛП(ДокРеквизит.ПолучитьАтрибут("Вид"));
                
                Для к=1 по Метаданные.Перечисление() Цикл
                    ТекВид=Метаданные.Перечисление(к);
                    Если СокрЛП(ТекВид.Идентификатор) = Вид Тогда
                        Для й=1 по ТекВид.Значение() Цикл
                            ТекЗнач=ТекВид.Значение(й);
                            Если (СокрЛП(ТекЗнач.Идентификатор) = Перес) или (СокрЛП(ТекЗнач.Представление) = Перес) Тогда
                                Документ.УстановитьАтрибут(ДокРеквизит.Наименование, ТекЗнач );    
                            КонецЕсли;
                        КонецЦикла;
                        
                    КонецЕсли;
                КонецЦикла;
1 Romchyk
 
19.01.17
22:48
Если написать код так:

    Документ.УстановитьАтрибут(ДокРеквизит.Наименование, Перечисление.ТицЦен.Цена2 );

тогда все хорошо, а в первом варианте не получается. Подскажите где ошибка
2 Romchyk
 
20.01.17
09:57
Профессионалы помогите
3 FIXXXL
 
20.01.17
10:01
подозреваю, что ТекЗнач у тебя объект метаданных, а нужна ссылка
попробуй через ПредопределенноеЗначение(....)
.... - строка-путь к значению перечисления
4 FIXXXL
 
20.01.17
10:03
сорри, не увидел 77 :)
5 h-sp
 
20.01.17
10:08
(2) вообще непонятно, где тут у тебя XML?
6 Romchyk
 
20.01.17
11:34
это фрагмент кода

Перес = СокрЛП(ДокРеквизит.ПолучитьАтрибут("Значення"));
                Вид = СокрЛП(ДокРеквизит.ПолучитьАтрибут("Вид"));


значение Перес и Вид берутся с XML файла
7 Slypower
 
20.01.17
12:05
Так нужно сперва найти это значение в базе, т.к. ТекЗнач - это строка, скорее всего, а реквизит дока - это перечисление.
Используй

ЗначениеПоИдентификатору(<?>)
Синтаксис:
ЗначениеПоИдентификатору(<Идентификатор>)
Назначение:
Возвращает значение перечисления, соответствующее идентификатору в конфигураторе. Если не найдено - то пустое значение.
Параметры:
<Идентификатор> - строковое выражение. Идентификатор значения перечисления, заданный в конфигураторе.

или

ЗначениеПоНомеру(<?>)
Синтаксис:
ЗначениеПоНомеру(<Номер>)
Назначение:
Возвращает значение перечисления по порядковому номеру в перечислении.
Параметры:
<Номер> - порядковый номер значения в перечислении.

А уже затем присваивай в доке
8 Romchyk
 
20.01.17
12:42
е = Перечисление.ТипыЦен.ЗначениеПоИдентификатору(ТекЗнач.Идентификатор);
                                Документ.УстановитьАтрибут(ДокРеквизит.Наименование, е);


Заработало, но еще одна проблема. ТипыЦен - это вид регистра. Вместо него нужно подложить переменную Вид.

Вид = СокрЛП(ДокРеквизит.ПолучитьАтрибут("Вид"));
е = Перечисление.Вид.ЗначениеПоИдентификатору(ТекЗнач.Идентификатор);
                                Документ.УстановитьАтрибут(ДокРеквизит.Наименование, е);


но так не работает
9 Romchyk
 
20.01.17
13:14
Нашел решение: ПолучитьАтрибут()



Вид = СокрЛП(ДокРеквизит.ПолучитьАтрибут("Вид"));
е = Перечисление.ПолучитьАтрибут(Вид).ЗначениеПоИдентификатору(ТекЗнач.Идентификатор);
окумент.УстановитьАтрибут(ДокРеквизит.Наименование, е);


   Slypower большое спасибо.
10 Slypower
 
20.01.17
13:23
(8) это хорошо, что работает, только вот реквизит документа никак не может быть ТИПОМ регистра. Строка, перечисление, справочник, документ, число и т.д., но не регистр. Перечисление это так сказать, набор значений.
Поэтому вы как-то не совсем разобрались с реквизитами и регистрами, либо не верно излагаете свою мысль)
11 Romchyk
 
20.01.17
15:56
извиняюсь, ТипыЦен - это вид перечисление а не регистра