Имя: Пароль:
1C
1С v8
Ошибка при установке значения атрибута контекста
,
0 gash85
 
26.11.12
10:38
Из 1с 8.2 подключаюсь к 1С 7.7 в которой необходимо создать элемент справочника и элемент подчиненного ему справочника.

При передаче значения реквизиту с типом Перечисления вылетает ошибка:
{ОбщийМодуль.РаботаСДокументами.Модуль(152)}: Ошибка при установке значения атрибута контекста (вид)
                               _адреса.вид = почтовый;
по причине:
Неизвестная ошибка

В чем может быть загвоздка?. Вот собственно сам код:

       глV7 = Новый COMОбъект ("V77.Application");
       Каталог="/d\\1С\base1\";
       Открыта = глV7.Initialize(глV7.RMTrade, Каталог+" /NАвто", "");
       
       Если Открыта = 0 Тогда
           Сообщить("Ошибка открытия информационной базы");
       Иначе
           
           _контрагенты=глV7.CreateObject("Справочник.Покупатели");
           _контрагенты.ВыбратьЭлементы();
           
           _страны=глV7.CreateObject("Справочник.Страны");
           _страны.ВыбратьЭлементы();
           
           _адреса=глV7.CreateObject("Справочник.Адрес");
           //    _адреса.ВыбратьЭлементы();
           
           
           чек = 0;
           пока _контрагенты.ПолучитьЭлемент()=1 цикл            
               док=_контрагенты.ТекущийЭлемент();
               Если Не СсылкаКлиент.ЭтоГруппа Тогда
                   //    Если док.родитель.код <> "" Тогда
                   Если СокрЛП(док.код) = СокрЛП(СсылкаКлиент.Код) Тогда
                       сообщить("найден "+док.код);
                       чек = 1;
                       Прервать;
                   КонецЕсли;
                   //    КонецЕсли;                
               Иначе
                   Если док.родитель.код = "" Тогда    
                       Если СокрЛП(док.код) = СокрЛП(СсылкаКлиент.Код) Тогда
                           чек = 1;
                           Прервать;
                       КонецЕсли;
                   КонецЕсли;    
               КонецЕсли;                                            
           КонецЦикла;
           
           Если чек = 0 Тогда
               Если Не СсылкаКлиент.ЭтоГруппа Тогда
                   Клиент77 = глV7.CreateObject("Справочник.Покупатели");
                   Клиент77.Новый();
                   Клиент77.Код = СокрЛП(СсылкаКлиент.Код);
                   Клиент77.Наименование = СокрЛП(СсылкаКлиент.Наименование);
                   Клиент77.нип = СокрЛП(СсылкаКлиент.УНП);
                   Клиент77.регон = СокрЛП(СсылкаКлиент.Регон);
                   Клиент77.крс = СокрЛП(СсылкаКлиент.НКРС);
                   Клиент77.Power = СокрЛП(СсылкаКлиент.Power);
                   
                   СчСтрана = 0;
                   пока _страны.ПолучитьЭлемент()=1 цикл            
                       Страна77=_страны.ТекущийЭлемент();
                       Если СокрЛП(Страна77.наименование) = СокрЛП(СсылкаКлиент.Странарегистрации.Наименование) Тогда
                           Клиент77.страна = Страна77;
                           СчСтрана = 1;
                           Прервать;
                       КонецЕсли;
                   КонецЦикла;
                   Если СчСтрана = 0 и СсылкаКлиент.Странарегистрации.Наименование <> "" Тогда
                       Страна77 = глV7.CreateObject("Справочник.Страны");
                       Страна77.Новый();
                       Страна77.Код = СсылкаКлиент.Странарегистрации.ТекстКод;
                       Страна77.Наименование = СсылкаКлиент.Странарегистрации.Наименование;
                       Страна77.Записать();
                       Клиент77.страна = Страна77;
                   КонецЕсли;    
                   
                   Клиент77.Записать();
                   
                   //Ставим флаг ПереданВ1С77 в истину, чтоб больше автоматически не передавать этого клиента
                   Клиент82 = СсылкаКлиент.ПолучитьОбъект();
                   Клиент82.ПереданВ1С77 = Истина;
                   Клиент82.Записать();
                   
                   Сообщить("Записан клиент "+Клиент77.код + " "+Клиент77.наименование);
                   
                   Для Каждого Стр Из Клиент82.Адреса Цикл
                       
                       _адреса=глV7.CreateObject("Справочник.Адрес");        
                           
                       _адреса.ИспользоватьВладельца(Клиент77);

                       _адреса.Новый();
                       _адреса.Наименование = Стр.Адрес;
                       _адреса.доп = Стр.Адрес;
                       Если Стр.ВидАдреса = Перечисления.ВидыАдресов.Почтовый Тогда
                                                           
                       _адреса.вид = глv7.Перечисление.ВидАдреса.почтовый;
                       ИначеЕсли Стр.ВидАдреса = Перечисления.ВидыАдресов.Юридический Тогда
                           _адреса.вид = глv7.Перечисление.ВидАдреса.юридический;
                       ИначеЕсли Стр.ВидАдреса = Перечисления.ВидыАдресов.электронный Тогда
                           _адреса.вид = глv7.Перечисление.ВидАдреса.электронный;
                       КонецЕсли;
                       _адреса.Записать();
                       
                   КонецЦикла;
                   
                   
               Иначе    
                   
               КонецЕсли;
           КонецЕсли;    
           
       КонецЕсли;
1 Aprobator
 
26.11.12
10:40
а там точно перечисление, а не перечисления?
2 Aprobator
 
26.11.12
10:41
а то как то в местной базе смотришь обращение через Перечисления, а в удаленной через Перечисление. ИМХО, непорядок.
3 gash85
 
26.11.12
10:43
в 8ке обращение идет ПреченислениЯ, в 7ке ПеречислениЕ
4 Aprobator
 
26.11.12
10:44
а млин, там 7-ка.
5 gash85
 
26.11.12
10:44
как раз таки эта часть отрабатывается, ошибку кидает на части
_адреса.вид. даже просто если этот кусок читать через shift+f9 ругается нецензурно. Почему - не пойму. Имя реквизита верное, тип перечисление.
6 Ork
 
26.11.12
10:45
(0) С передачей перечислений по ОЛЕ наличествует некоторая задница. Путем тыканья в небо пальцем для себя принял такой способ : присваивать значенеи получая его методом ЗначениеПоНомеру().

Ща найду точный код...
7 Aprobator
 
26.11.12
10:47
может можно через Вычислить пролезть? Типа:

...
_адреса.вид = глv7.Вычислить("Перечисление.ВидАдреса.почтовый");
...
8 Aprobator
 
26.11.12
10:48
(5) а млин. Понятно. Из за Вид - совпадает с именем метода.
9 Aprobator
 
26.11.12
10:49
как то мы это обходили. Ща попробую вспомнить как.
10 Ork
 
26.11.12
10:50
+(6) Пробуй так :
_адреса.вид = глv7.Перечисление.ВидАдреса.ЗначениеПоНомеру(НомерЗначения_юридический);
11 Aprobator
 
26.11.12
10:51
(10) тут засада именно в имени реквизита. Наступали на такое при работе через OLE/
12 gash85
 
26.11.12
10:55
да, судя по всему именно в имени. Есть какие идеи что с этим делать?
13 Aprobator
 
26.11.12
10:56
все нашел. Лечится только использованием какой либо функцией удаленной конфы. Которая в зависимости от входных данных ставить нужное значение.
На примере 8 - ки делали так:

...
           Если Элемент.Ключ = "ПолноеНаименование" И КомОбъект.Метаданные().Имя = "КлассификаторИспользованияРабочегоВремени" Тогда
               КомОбъект.УстановитьПолноеНаименование (ЗначениеПриемник);
           Иначе
               КомОбъект[Элемент.Ключ] = ЗначениеПриемник;
           КонецЕсли;    

...

КомОбъект - элемент справочника удаленной базы.
УстановитьПолноеНаименование - экспротная процедура модуля.
14 Aprobator
 
26.11.12
10:59
+(13) имеется ввиду модуль объекта справочника.
15 Шапокляк
 
26.11.12
11:02
Вроде в 7-ке есть УстановитьАтрибут()
16 gash85
 
26.11.12
11:03
(13) спасибо, буду пробовать!!
17 Aprobator
 
26.11.12
11:04
(15) во - как вариант может прокатить, кстати.
18 Ork
 
26.11.12
11:05
(16) Сначала проверь (10).
19 Aprobator
 
26.11.12
11:06
(18) да он смотрел отладчиком. См (5).
20 gash85
 
26.11.12
11:08
(18) проверено, таже ошибка
21 gash85
 
26.11.12
11:10
(15) отработало без ошибки, однако при чтении полученного значения через shift+f9 выдает: тип неопределено.
22 Aprobator
 
26.11.12
11:11
(21) тип или значение?
23 Aprobator
 
26.11.12
11:12
проверь сразу в приемнике, что там загрузилось.
24 gash85
 
26.11.12
11:20
(15) сработало! спасибо!
25 Aprobator
 
26.11.12
11:21
ну во )