Имя: Пароль:
1C
1C 7.7
v7: Не выбран элемент !
🠗 (povar 18.01.2012 09:12)
,
0 MixanM
 
18.01.12
05:41
всем добрый день, случиласть такая трабла: имеется код:
СпрЕдиницыОЛЕ = БазаОле.CreateObject("Справочник.Единицы");
   СпрОЛЕ = БазаОле.CreateObject("Справочник.Номенклатура");
   СпрЕдиницыОЛЕ2 = БазаОле.CreateObject("Справочник.Единицы");
   СпрОЛЕ2 = БазаОле2.CreateObject("Справочник.Номенклатура");
   СпрОЛЕДляПоискаПоКоду = БазаОле.CreateObject("Справочник.Единицы");//создал второй , ибо слетает курсор с первой rulf шарит по единицам
   СпрЕдиницы.ВыбратьЭлементы() ;
   
   СпрЕдиницыОЛЕ.ВыбратьЭлементы(0);
   Пока СпрЕдиницыОЛЕ.ПолучитьЭлемент() = 1 Цикл
       ШК = СпрЕдиницыОЛЕ.ШтрихКод;
       ИмяОЛЕ = СпрЕдиницыОЛЕ.Владелец.Наименование;
       Если  СпрЕдиницы.НайтиПоРеквизиту("ШтрихКОД", ШК, 1) = 1 Тогда
           ИмяСпр = СпрЕдиницы.ТекущийЭлемент().Владелец.наименование;
           КодСпр = СпрЕдиницы.ТекущийЭлемент().Владелец.Код;
           //Сообщить("кодСпр : "+КодСпр);
           СпрЕдиницыОЛЕ2.ВыбратьЭлементы();
           СпрЕдиницыОЛЕ2.НайтиПоРеквизиту("ШтрихКод", ШК, 1 );
           Если СпрЕдиницыОЛЕ2.НайтиПоРеквизиту("ШтрихКод", ШК, 1 ) = 1 Тогда
               ИмяОЛЕ2 = СпрЕдиницыОЛЕ2.Владелец.Наименование;
           Иначе
               Сообщить("Такой ШК в базе 2 не найден");
           КонецЕсли;
           
           Если (ИмяСпр <> ИмяОЛЕ) и (ИмяСпр <> ИмяОЛЕ2) Тогда
               СпрЕдиницыОЛЕ2.ВыбратьЭлементы();
                   СпрЕдиницыОЛЕ2.НайтиПоРеквизиту("ШтрихКод", ШК, 1 );
                   Если СпрЕдиницыОЛЕ2.НайтиПоРеквизиту("ШтрихКод", ШК, 1 ) = 1 Тогда
                       ИмяОЛЕ2 = СпрЕдиницыОЛЕ2.Владелец.Наименование;
                   Иначе
                       Сообщить("Такой ШК в базе 2 не найден");
                   КонецЕсли;
               Вопр = Вопрос("Расхождение названия для шк : "+ШК+" Нажмите ""Да"" чтобы использовать наименование  текущей базы,
               |или ""Нет"" для использования имени из Переферийной Базы : "
               +Симв(13)+"1 :"+ИмяСПР+" (текущая База)"
               +Симв(13)+"2 :"+ИмяОЛЕ+" (преферийная База)"
               +Симв(13)+"2 :"+ИмяОЛЕ2+" (преферийная База 2)", 3);
               Если   Вопр = 6 Тогда
                   Сообщить("Наименование Взяли из текущей ");
                   СпрОЛЕ.НайтиПоНаименованию(ИмяОЛЕ, 0);
                   СпрОЛЕ.Наименование = ИмяСпр;
                   СпрОЛЕ.ПолнНаименование = ИмяСпр;
                   СпрОЛЕ.Записать();
                   //СпрЕдиницыОЛЕ2.Владелец.Наименование = ИмяСпр;
                   СпрОЛЕ2.ВыбратьЭлементы();
                   СпрОЛЕ2.НайтиПоНаименованию(ИмяОле2, 0);    
                   СпрОЛЕ2.Наименование = ИмяСпр; // и вот в этом месте ругается
                   СпрОЛЕ2.ПолнНаименование = ИмяСпр;
                   СпрОЛЕ2.Записать();

хотя для СпрОЛЕ все проходит нормальн, а вот на элементе СпрОЛЕ2 уже ругается, кто нибудь сталкивался?
1 skunk
 
18.01.12
05:45
исправить это

СпрОЛЕ2.ВыбратьЭлементы();

на это

// СпрОЛЕ2.ВыбратьЭлементы();
2 MixanM
 
18.01.12
05:46
так и было - результат тот же, это я дописал минуту назад
3 DJ Anthon
 
18.01.12
05:46
наверное, поиск неудачный. сделай проверку в НайтиПоНаименованию = 1 и только тогда записывай
4 DJ Anthon
 
18.01.12
05:47
(1) это фиолетово
5 MixanM
 
18.01.12
05:52
(4)так же
6 MixanM
 
18.01.12
05:53
(4) всмысле при проверке - не находит элемент, хотя странно, я  же реквизит для поиска указал как имя владельца текущего элемента...
7 Rie
 
18.01.12
05:54
(0) "Ругается" - это как? Наверное, сообщение какое-то выдаёт?
8 MixanM
 
18.01.12
05:59
(7) ну да) я сделал так :
Если СпрОЛЕ2.НайтиПоНаименованию(ИмяОле2, 0) = 1 Тогда
                       
                       СпрОЛЕ2.Наименование = ИмяОЛЕ;
                       СпрОЛЕ2.ПолнНаименование = ИмяОЛЕ;
                       СпрОЛЕ2.Записать();
                   Иначе
                       Сообщить("хххх");
                   КонецЕсли;
и он не находит элемент, хотя здесь :
Вопр = Вопрос("Расхождение названия для шк : "+ШК+" Нажмите ""Да"" чтобы использовать наименование  текущей базы,
               |или ""Нет"" для использования имени из Переферийной Базы : "
               +Симв(13)+"1 :"+ИмяСПР+" (текущая База)"
               +Симв(13)+"2 :"+ИмяОЛЕ+" (преферийная База)"
               +Симв(13)+"2 :"+ИмяОЛЕ2+" (преферийная База 2)", 3);
он его показывает корректно. Идем дальше , сделал так :
СпрЕдиницыОЛЕ2.Владелец.Наименование = ИмяСпр;
                   СпрЕдиницыОЛЕ2.Владелец.Наименование.ПолнНаименование = ИмяСпр;
                   СпрЕдиницыОЛЕ2.Владелец.Наименование.Записать();
пишет : Значение не представляет агрегатный объект (ПолнНаименование)... отака х, малята ((
9 Rie
 
18.01.12
06:00
(8) СпрЕдиницыОЛЕ2.Владелец.Наименование.ПолнНаименование - вот это что за бред?
СпрЕдиницыОЛЕ2.Владелец.Наименование - это ведь строка!
10 MixanM
 
18.01.12
06:04
(9) это не бред, это один из реквизитов справочника =)
про "СпрЕдиницыОЛЕ2.Владелец.Наименование - это ведь строка!" не совсем понял
11 Rie
 
18.01.12
06:07
(10) У строк не бывает реквизитов!
Наименование элемента справочника имеет тип СТРОКА.

Возможно, ты имел в виду СпрЕдиницыОЛЕ2.Владелец.ПолнНаименование?
Но так присваивать тоже нельзя: спрЕдиницыОЛЕ2.Владелец - это лишь ссылка на элемент справочника, а не сам элемент. Ссылке реквизиты менять нельзя.
12 MixanM
 
18.01.12
06:08
(11) понял, буду значит копать в сторону :
Если СпрОЛЕ2.НайтиПоНаименованию(ИмяОле2, 0) = 1 Тогда                        
СпрОЛЕ2.Наименование = ИмяОЛЕ;
СпрОЛЕ2.ПолнНаименование = ИмяОЛЕ;
СпрОЛЕ2.Записать();
Иначе
Сообщить("хххх");
КонецЕсли;
13 MixanM
 
18.01.12
06:57
нашел в чем косяк, оказывается у адинэс проблемы с позиционированием для поиска в одном справочнике, создал второй и запело.
14 Ковычки
 
18.01.12
07:03
никакой проблемы нет
15 filh
 
18.01.12
08:16
(13) косяк в ДНК.
16 1Сергей
 
18.01.12
09:02
Весь код в топку
17 ЧеловекДуши
 
18.01.12
09:10
(15)Поддерживаю с теорию с ДНК :)