Проблемы с функцией ПолучитьОбъект

1. JaroslavBayev 18.02.14 17:49 Сейчас в теме
Лицевой = Справочники.ЛицевыеСчета.НайтиПоКоду(ЛС.Fields("nomer").Value).Ссылка.ПолучитьОбъект();

Ошибка при вызове метода контекста (ПолучитьОбъект)
по причине:
Элемент не выбран!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Alexey_ 27 18.02.14 18:03 Сейчас в теме
(1) JaroslavBayev, чему равно ЛС.Fields("nomer").Value и какой тип у него?
P.S. слово Ссылка не обязательно
4. Rothschild 18.02.14 18:06 Сейчас в теме
(1) JaroslavBayev,
такое выдается если ссылка на объект "пустая".
***
зы
"битая" ссылка - "пустой" не является!
для нее метод ПолучитьОбъект() - возвращает Неопределено.
3. JaroslavBayev 18.02.14 18:06 Сейчас в теме
ЛС.Fields("nomer").Value Это числовое значение из ДБФ-ника, существование данной записи проверяется ранее вот полный код процедуры: НачатьТранзакцию();
стрПодключения = "Driver={Microsoft Visual FoxPro Driver};
|SourceType=DBF;SourceDB=D:\Наст;
|Exclusive=No ;NULL=NO; BackgroundFetch=Yes;";
Connect = Новый COMОбъект("ADODB.Connection");
попытка
Connect.Open(стрПодключения);
исключение
сообщить(ОписаниеОшибки());
Отказ=Истина;
Возврат;
КонецПопытки;
ЛС = Новый COMОбъект("ADODB.Recordset");
ЛС.Open("Sel ect CPCONVERT(866,1251,kod) as kod,nomer,CPCONVERT(866,1251,name) as ima,nkv,CPCONVERT(866,1251,lkv) as lkv fr om sprls2", Connect);

Пока ЛС.EOF()=0 цикл
РезультатПоиска = Справочники.ЛицевыеСчета.НайтиПоКоду(ЛС.Fields("nomer").Value);
Если РезультатПоиска = 0 Тогда
НовыйЛицевойСчет = Справочники.ЛицевыеСчета.СоздатьЭлемент();
НовыйЛицевойСчет.Код = ЛС.Fields("nomer").Value;
НовыйЛицевойСчет.Номер = ЛС.Fields("nomer").Value;
НовыйЛицевойСчет.Квартиросьемщик =ЛС.Fields("ima").Value;
НовыйЛицевойСчет.Квартира = ЛС.Fields("nkv").Value;
НовыйЛицевойСчет.ЛитераКвартиры = ЛС.Fields("lkv").Value;
НовыйЛицевойСчет.Владелец =Справочники.ДОМА.НайтиПоКоду(ЛС.Fields("kod").Value).
НовыйЛицевойСчет.Записать();
Иначе Результат = Справочники.ЛицевыеСчета.НайтиПоКоду(ЛС.Fields("nomer").Value).Квартиросъемщик;
Если Не Результат = ЛС.Fields("ima").Value Тогда
Лицевой = Справочники.ЛицевыеСчета.НайтиПоКоду(ЛС.Fields("nomer").Value).Ссылка.ПолучитьОбъект();
Лицевой.Квартиросъемщик = ЛС.Fields("ima").Value;
Лицевой.Записать();
КонецЕсли;
КонецЕсли;
ЛС.MoveNext();
КонецЦикла;
ЛС.Close();
Connect.Close();
ЗафиксироватьТранзакцию();
5. Alexey_ 27 18.02.14 18:07 Сейчас в теме
(3) JaroslavBayev, если числовой тип, то:
Лицевой = Справочники.ЛицевыеСчета.НайтиПоКоду("" + ЛС.Fields("nomer").Value).ПолучитьОбъект(); 

либо нет элемента с таким кодом
6. JaroslavBayev 18.02.14 18:10 Сейчас в теме
Если не секрет зачем кавычки? Просто я пытаюсь понять мне тогда и в первой проверке кавычки нужны были или нет?
7. JaroslavBayev 18.02.14 18:10 Сейчас в теме
8. Alexey_ 27 18.02.14 18:15 Сейчас в теме
(7) JaroslavBayev, явное указание, что код - строка, так как при системном преобразовании, если есть лидирующие нули, они срежутся: Число("000000005") = 5;
9. JaroslavBayev 18.02.14 18:21 Сейчас в теме
Жаль, только, что это ничего не дало....
10. Alexey_ 27 18.02.14 18:29 Сейчас в теме
(9) JaroslavBayev, здесь ошибка Если РезультатПоиска = 0 Тогда, НайтиПоКоду возвращает СправочникСсылка.<Имя справочника> либо Неопределено, а Вы с нулем сравниваете
11. JaroslavBayev 18.02.14 18:47 Сейчас в теме
Просто, как бы когда я выставил условие Иначе Результат = Справочники.ЛицевыеСчета.НайтиПоКоду(ЛС.Fields("nomer").Value) И Справочники.ЛицевыеСчета.НайтиПоРеквизиту("Квартиросьемщик" ...._ мне выдало о том, что не может сравнивать с булево... Ну да не суть, подскажите тогда вот еще что:
НачатьТранзакцию();
стрПодключения = "Driver={Microsoft Visual FoxPro Driver};
|SourceType=DBF;SourceDB=D:\Наст;
|Exclusive=No ;NULL=NO; BackgroundFetch=No;";
Connect = Новый COMОбъект("ADODB.Connection");
попытка
Connect.Open(стрПодключения);
исключение
сообщить(ОписаниеОшибки());
Отказ=Истина;
Возврат;
КонецПопытки;
ДОМ = Новый COMОбъект("ADODB.Recordset");
ДОМ.Open("Sel ect CPCONVERT(866,1251,kod) as kod, nom,CPCONVERT(866,1251,lit) as lit, CPCONVERT(866,1251,ul) as ul, drobnom, CPCONVERT(866,1251,droblit) as droblit, kolkv, kolet, kolpd, kolst, ima fr om sprdom", Connect);

Пока ДОМ.EOF()=0 цикл

РезультатПоиска = Справочники.ДОМА.НайтиПоКоду(ДОМ.Fields("kod").Value, 0);
Если РезультатПоиска = Неопределено ИЛИ РезультатПоиска.Пустая() Тогда
НовыйДома = Справочники.Дома.СоздатьЭлемент();
НовыйДома.Код = ДОМ.Fields("kod").Value;
НовыйДома.Номер =ДОМ.Fields("nom").Value;
НовыйДома.Владелец =Справочники.Улицы.НайтиПоНаименованию(ДОМ.Fields("ul").Value).Ссылка;
НовыйДома.Литера = ДОМ.Fields("lit").Value;
НовыйДома.ДробьНомер = ДОМ.Fields("drobnom").Value;
НовыйДома.ДробьЛитера = ДОМ.Fields("droblit").Value;
НовыйДома.Квартир = ДОМ.Fields("kolkv").Value;
НовыйДома.Этажность = ДОМ.Fields("kolet").Value;
НовыйДома.Подъездов = ДОМ.Fields("kolpd").Value;
НовыйДома.Стояков = ДОМ.Fields("kolst").Value;
НовыйДома.Имя = ДОМ.Fields("ima").Value;
НовыйДома.Записать();
КонецЕсли;
ДОМ.MoveNext();
КонецЦикла;
ДОМ.Close();
Connect.Close();
ЗафиксироватьТранзакцию();


Останавливается на ошибке: {Обработка.СинхронизацияБазы.Форма.Форма.Форма(103)}: Ошибка при вызове метода контекста (Записать)
НовыйДома.Записать();
по причине:
Значение поля "Владелец" не заполнено или заполнено неверно

И я не могу понять это от того, что у меня нет улицы или все же есть ошибка?
12. Alexey_ 27 18.02.14 18:55 Сейчас в теме
(11) JaroslavBayev, отладчиком умеете пользоваться?
SuhoffGV; +1 Ответить
13. JaroslavBayev 18.02.14 19:03 Сейчас в теме
Честно говоря, моя проблема в том, что я больше кодер по Fox и т.д, а потому отладчик для меня не показателен, ну вернее я не умею извлекать из него информацию...
15. SuhoffGV 19.02.14 00:29 Сейчас в теме
(13) JaroslavBayev, по отладчику:
1. В конфигураторе поставьте курсор на строке
Лицевой = Справочники.ЛицевыеСчета.НайтиПоКоду(ЛС.Fields("nomer").Value).Ссылка.ПолучитьОбъект(); 

2. Выберите в меню "Отладка" - "Остановка по ошибке". Поставьте флажок "Останавливаться по ошибке"
3. Запустите отладку по "F5"
4. Запустите в режиме предприятие выполнение вашего кода.
5. В конфигураторе должна сработать остановка отладки на строке с кодом выше.
6. Выделите "ЛС.Fields("nomer").Value" мышью и нашмите "Shift+F9". 1c попытается рассчитать выделенное выражение и показать его. Там же можно пробовать править текст чтобы добиться нужного значения. Которое потом перенести в код.


Если в "ЛС.Fields("nomer").Value" содержится число (например 5) а код в 1с строка вида "00005" используйте функцию Формат() для получения нужного вида кода. Примерно так:
Формат(ЛС.Fields("nomer").Value, "ЧЦ=6; ЧВН=; ЧГ=") 
получите "00005"
Как-то так. Спрашивайте если что.
14. JaroslavBayev 18.02.14 19:19 Сейчас в теме
Как-то где-то я так и не понял... Я прошелся по обновлению двух предидущих справочников, а вот с домами беда... Вопрос не может это быть связано с тем, что и этот справочник является владельцем другого и у этого справочника есть владелец?
16. SuhoffGV 19.02.14 00:35 Сейчас в теме
(14) JaroslavBayev, Может. Смотрите на вкладке "владельцы", обрабатываемых справочников.
Тогда нужно будет дописать
НовыйДома.Владелец = СсылкаНаВладельца
17. JaroslavBayev 19.02.14 10:52 Сейчас в теме
(16) SuhoffGV, В том-то и дело, что у я пытаюсь как раз получить ссылку на владельца... Переделал эту строку в НовыйДома.Владелец = Справочники.Улицы.НайтиПоКоду(ДОМ.Fields("unom").Value,0).Ссылка; Код в справочнике Улицы строка и unom тоже текстовый, запустил отладчик так как вы сказали, к стати за это вам отдельное спасибо, очень удобный инструмент, и получаю результат: {(1)}: Ошибка при вызове метода контекста (НайтиПоКоду) честно говоря, что не так не пойму....
18. starjevschik 19.02.14 11:00 Сейчас в теме
(17) JaroslavBayev,
НайтиПоКоду(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>)
<Код> (обязательный)

Тип: Число; Строка.
Искомый код.
Строка или число в зависимости от настроек справочника в конфигураторе.
<ПоискПоПолномуКоду> (необязательный)

Тип: Булево.
Определяет режим поиска по полному коду. Истина - искомый код следует задавать в виде строки, состоящей из последовательности кодов по уровням справочника, разделенных символом "/".
Значение по умолчанию: Ложь
<Родитель> (необязательный)

Тип: СправочникСсылка.
Родитель, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
<Владелец> (необязательный)

Тип: СправочникСсылка.
Владелец, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике.
Показать

здесь все более-менее понятно. Булево - это ИСТИНА либо ЛОЖЬ, а никак не 0. Если справочник подчиненный, то обязательно нужен Владелец.
19. JaroslavBayev 19.02.14 11:12 Сейчас в теме
(18) starjevschik, что-то мне сдается, что все проще - мне нужно искать по полному соответствию, а так я нахожу не одну ссылку... Т.к. поле текстовое и в ощибку я выпадаю при UNOM = 65, а в справочнике есть код и 1 065, и 165, и т.д... Вот как задать это самое уточнение полное соответствие....
20. jigourt 31 19.02.14 11:19 Сейчас в теме
(19) JaroslavBayev,
Лицевой = Справочники.ЛицевыеСчета.НайтиПоКоду(ЛС.Fields("nomer").Value,Истина).ПолучитьОбъект(); 
22. JaroslavBayev 19.02.14 11:28 Сейчас в теме
(20) jigourt, НЕ, не, не тут и есть проблема - если я выдам так, то мне прийдется искать еще и код родителя, а его у меня в дбф нет...
21. starjevschik 19.02.14 11:26 Сейчас в теме
(19) JaroslavBayev, поиск всегда точный. И находит он всегда одну ссылку, или ни одной. Здесь не очень спорить, так устроено. Если справочник подчиненный и коды в пределах подчинения, то может найтись чужой элемент, но он все равно будет один.
Вообще вопрос не стоит выеденного яйца, чесслово. Разбирательств с отладчиком минуты на три. Может, так и сделать? :)
23. JaroslavBayev 19.02.14 11:38 Сейчас в теме
(21) starjevschik, Дак вот тут незадача... В режиме отладки стою на данной строке,которая выглядит так НовыйДома.Владелец = Справочники.Улицы.НайтиПоКоду(ДОМ.Fields("unom").Value); результат вроде адекватный, т.е получаю справочникссылка.улицы, а далее сказка - есть все значения но при прогонке до конца снова ответ:Значение Поля Владелец не заполнено или заполнено не верно...
24. JaroslavBayev 19.02.14 11:48 Сейчас в теме
(23) JaroslavBayev, неправ значения я не нахожу
25. SuhoffGV 19.02.14 12:00 Сейчас в теме
(23) JaroslavBayev, А вы часом не новый велосипед загрузку КЛАДР-а пишете?

Что значит "при прогонке до конца"? В какой строке ошибка и смотрите что там в данных/переменных? В конце концов посмотрите сами глазами есть ли то что вы ищете в справочнике.

(19) Писал выше. Какой длины код в Справочники.Улицы? Используйте функцию
Формат(ЛС.Fields("nomer").Value, "ЧЦ=6; ЧВН=; ЧГ=") 
. 6 - длина кода в примере, вам нужно подставить свою из свойств справочника.

Добавьте обработчик ошибки в случае если нет искомого элемента. Тогда без отладчика увидите что 1с не может найти:
ИскомыйКод = ДОМ.Fields("unom").Value;
ИскомыйВладелец = Справочники.Улицы.НайтиПоКоду(ИскомыйКод).Ссылка;
Если ИскомыйВладалец = Неопределено тогда
      Сообщить("Не найдена улица с кодом:"+ИскомыйКод);
      возврат;
Иначе 
      НовыйДома.Владелец = Справочники.Улицы.НайтиПоКоду(ДОМ.Fields("unom").Value,0).Ссылка;
КонецЕсли;
Показать
26. JaroslavBayev 19.02.14 12:14 Сейчас в теме
(25) SuhoffGV, Увы нет, все печальнее у нас на фирма стоит старая еще ДОС задача и вот ее до конца года будем переносить на 1С, а данные из старой и пока рабочей задачи нужны в 1С сейчас приходится выкручиваться и пытаться синхронизироваться...
По поводу есть ли в справочнике, есть, точно есть...
27. jigourt 31 19.02.14 12:20 Сейчас в теме
(26) JaroslavBayev, выкиньте сюда кусок нерабочего кода, в идеале, чтоб это была процедура/функция целиком )
29. JaroslavBayev 19.02.14 12:25 Сейчас в теме
(25) SuhoffGV, Самое смешное, что находит он Владельца, без ошибок идет...
31. SuhoffGV 19.02.14 12:35 Сейчас в теме
(29) JaroslavBayev, В какой строке ошибка в последнем варианте кода?
33. JaroslavBayev 19.02.14 12:56 Сейчас в теме
(31) SuhoffGV, Честно говоря пошел я рыться дальше, т.к стал получать ошибку не найдена улица с кодом 2, при этом улица именно с этим кодом есть в справочнике.
34. jigourt 31 19.02.14 13:07 Сейчас в теме
(33) JaroslavBayev, а справочник Улицы случайно не подчинен какому-нибудь справочнику Города?? ))
35. JaroslavBayev 19.02.14 13:09 Сейчас в теме
(34) jigourt, Подчинен, это на что-то влияет? И как тогда вообще искать?
36. Bukaska 140 19.02.14 13:14 Сейчас в теме
(35) JaroslavBayev, Подчинен.. значит есть владелец
37. jigourt 31 19.02.14 13:15 Сейчас в теме
(35) JaroslavBayev, если кода разные, то в принципе не страшно ) но для надежности лучше искать по цепочке начиная со старшего владельца
28. JaroslavBayev 19.02.14 12:23 Сейчас в теме
Процедура СинхронизироватьДома()
НачатьТранзакцию();
стрПодключения = "Driver={Microsoft Visual FoxPro Driver};
|SourceType=DBF;SourceDB=D:\Наст;
|Exclusive=No ;NULL=NO; BackgroundFetch=No;";
Connect = Новый COMОбъект("ADODB.Connection");
попытка
Connect.Open(стрПодключения);
исключение
сообщить(ОписаниеОшибки());
Отказ=Истина;
Возврат;
КонецПопытки;
ДОМ = Новый COMОбъект("ADODB.Recordset");
ДОМ.Open("Sel ect CPCONVERT(866,1251,kod) as kod, nom,CPCONVERT(866,1251,lit) as lit,CPCONVERT(866,1251,unom)as unom,drobnom, CPCONVERT(866,1251,droblit) as droblit, kolkv, kolet, kolpd, kolst, ima fr om sprdom", Connect);

Пока ДОМ.EOF()=0 цикл

РезультатПоиска = Справочники.ДОМА.НайтиПоКоду(ДОМ.Fields("kod").Value, 0);
Если РезультатПоиска = Неопределено ИЛИ РезультатПоиска.Пустая() ИЛИ РезультатПоиска = 0 Тогда
НовыйДома = Справочники.Дома.СоздатьЭлемент();
НовыйДома.Код = ДОМ.Fields("kod").Value;
НовыйДома.Номер =ДОМ.Fields("nom").Value;
ИскомыйКод = ДОМ.Fields("unom").Value;
ИскомыйВладелец = Справочники.Улицы.НайтиПоКоду(ДОМ.Fields("unom").Value).Ссылка;
Если ИскомыйВладелец = Неопределено тогда
Сообщить("Не найдена улица с кодом:"+ИскомыйКод);
возврат;
Иначе
НовыйДома.Владелец = ИскомыйВладелец;
КонецЕсли;
НовыйДома.Литера = ДОМ.Fields("lit").Value;
НовыйДома.ДробьНомер = ДОМ.Fields("drobnom").Value;
НовыйДома.ДробьЛитера = ДОМ.Fields("droblit").Value;
НовыйДома.Квартир = ДОМ.Fields("kolkv").Value;
НовыйДома.Этажность = ДОМ.Fields("kolet").Value;
НовыйДома.Подъездов = ДОМ.Fields("kolpd").Value;
НовыйДома.Стояков = ДОМ.Fields("kolst").Value;
НовыйДома.Имя = ДОМ.Fields("ima").Value;
НовыйДома.Записать();
КонецЕсли;
ДОМ.MoveNext();
КонецЦикла;
ДОМ.Close();
Connect.Close();
ЗафиксироватьТранзакцию();
КонецПроцедуры
32. jigourt 31 19.02.14 12:47 Сейчас в теме
(28) JaroslavBayev, как-то так наверное
Процедура СинхронизироватьДома() 
НачатьТранзакцию(); 
стрПодключения = "Driver={Microsoft Visual FoxPro Driver}; 
|SourceType=DBF;SourceDB=D:\Наст; 
|Exclusive=No ;NULL=NO; BackgroundFetch=No;"; 
Connect = Новый COMОбъект("ADODB.Connection"); 
попытка 
Connect.Open(стрПодключения); 
исключение 
сообщить(ОписаниеОшибки()); 
Отказ=Истина; 
Возврат; 
КонецПопытки; 
ДОМ = Новый COMОбъект("ADODB.Recordset"); 
ДОМ.Open("Sel ect CPCONVERT(866,1251,kod) as kod, nom,CPCONVERT(866,1251,lit) as lit,CPCONVERT(866,1251,unom)as unom,drobnom, CPCONVERT(866,1251,droblit) as droblit, kolkv, kolet, kolpd, kolst, ima fr om sprdom", Connect); 

Пока ДОМ.EOF()=0 цикл
	
	ИскомыйКодУлицы = ДОМ.Fields("unom").Value; 
	Если ПустаяСтрока(ИскомыйКодУлицы) Тогда
		Сообщить("Не найден код улицы!");
		Возврат;
	КонецЕсли;
	ИскомыйВладелец = Справочники.Улицы.НайтиПоКоду(ИскомыйКодУлицы);
	Если ИскомыйВладелец.Пустая() Тогда
		Сообщить("Не найден владелец!");
	КонецЕсли;
	ИскомыйКодДома = ДОМ.Fields("kod").Value;
	Если ПустаяСтрока(ИскомыйКодДома) Тогда
		Сообщить("Не найден код дома!");
		Возврат;
	КонецЕсли;
	
	РезультатПоиска = Справочники.ДОМА.НайтиПоКоду(ИскомыйКодДома, Истина,,ИскомыйВладелец); 
	Если РезультатПоиска.Пустая() Тогда 
		НовыйДома = Справочники.Дома.СоздатьЭлемент(); 
		НовыйДома.Код = ИскомыйКодДома; 
		НовыйДома.Номер =ДОМ.Fields("nom").Value; 
		ИскомыйКод = ДОМ.Fields("unom").Value; 
		НовыйДома.Владелец = ИскомыйВладелец;  
		НовыйДома.Литера = ДОМ.Fields("lit").Value; 
		овыйДома.ДробьНомер = ДОМ.Fields("drobnom").Value; 
		НовыйДома.ДробьЛитера = ДОМ.Fields("droblit").Value; 
		НовыйДома.Квартир = ДОМ.Fields("kolkv").Value; 
		НовыйДома.Этажность = ДОМ.Fields("kolet").Value; 
		овыйДома.Подъездов = ДОМ.Fields("kolpd").Value; 
		НовыйДома.Стояков = ДОМ.Fields("kolst").Value; 
		НовыйДома.Имя = ДОМ.Fields("ima").Value; 
		НовыйДома.Записать();
	Иначе
		Сообщить("Дом существует в справочнике");
	КонецЕсли;
	ДОМ.MoveNext(); 
КонецЦикла; 
ДОМ.Close(); 
Connect.Close(); 
ЗафиксироватьТранзакцию(); 
КонецПроцедуры
Показать


исправлял только цикл
SuhoffGV; +1 Ответить
30. SuhoffGV 19.02.14 12:34 Сейчас в теме
Отказ=Истина; - лишнее. Тут он не к чему.

Если РезультатПоиска = Неопределено ИЛИ РезультатПоиска.Пустая() ИЛИ РезультатПоиска = 0 Тогда

замените на
Если РезультатПоиска.Пустая() 


НачатьТранзакцию();

перенесите перед
Пока ДОМ.EOF()=0 цикл


А
ЗафиксироватьТранзакцию();
сразу после цикла.

Но это все некритичные моменты.

вставляйте код в теги кода (Alt+p) так он читается на форуме лучше.

Улицы точно являются владельцем для Дома?
38. JaroslavBayev 19.02.14 13:25 Сейчас в теме
Т.е мне нужно получить код Города и строка запроса должна выглядеть как
ИскомыйКодУлицы = КодГорода+"/"+ДОМ.Fields("unom").Value; 
Если ПустаяСтрока(ИскомыйКодУлицы) Тогда
        Сообщить("Не найден код улицы!");
        Возврат;
    КонецЕсли;
    ИскомыйВладелец = Справочники.Улицы.НайтиПоКоду(ИскомыйКодУлицы);
    Если ИскомыйВладелец.Пустая() Тогда
        Сообщить("Не найден владелец!");
    КонецЕсли;
    ИскомыйКодДома = ДОМ.Fields("kod").Value;
    Если ПустаяСтрока(ИскомыйКодДома) Тогда
        Сообщить("Не найден код дома!");
        Возврат;
    КонецЕсли;
Показать
39. SuhoffGV 19.02.14 13:32 Сейчас в теме
(38) что то у вас не то. Чтобы найти улицу - вам нужно знать город в котором она ищется.

Улица = НайтиПоКоду(КодУлицы, Истина, ,СсылкаНаГородВладелец); 


Т.е. вам нужен не код города а ссылка на него в 1с. Найти ссылку можно и по коду как и улицу.
40. JaroslavBayev 19.02.14 13:39 Сейчас в теме
(39) SuhoffGV, Понял, спасибо. А для поиска Владельца лицевого счета мне нужны будут СсылкаНаУлицуВладелец СсылкаНаГородВладелец так?
42. SuhoffGV 19.02.14 13:54 Сейчас в теме
(40) JaroslavBayev, не знаю. Трудно принимать роды на форуме судить не видя конфигурации.

В общем случае если ищете элемент подчиненного справочника иногда неплохо знать его владельца или всю цепочку.
43. Bukaska 140 19.02.14 13:58 Сейчас в теме
(42) SuhoffGV,
Трудно принимать роды на форуме

искать младенца в капусте)))
44. Rothschild 19.02.14 14:10 Сейчас в теме
(43) Bukaska, ЖУРАВЛЕЙ ОТСТРЕЛИВАТЬ!!!
41. ant1773 6 19.02.14 13:52 Сейчас в теме
Писал в свое время обработку для переноса данных по расчету квартплаты из досовой задачи:

Процедура ЗагрузкаУлиц()
НомерПП = 0;	
СписокУлицDBF = Новый XBASE; //создаем ссылку на файл DBF
СписокУлицDBF.ОткрытьФайл(КаталогБазы + "\" + "ULICA.dbf"); //открываем файл на диске
СписокУлицDBF.Кодировка = КодировкаXBase.OEM;

Если СписокУлицDBF.Открыта()=0 Тогда //проверяем, удалось ли открыть файл
        Сообщить("Не удалось открыть файл!");
	Иначе 
		
	СписокУлицDBF.Первая(); //позиционируемся на первой записи
	Пока СписокУлицDBF.ВКонце()=0 Цикл //пока не дошли до конца, крутим цикл
		НомерПП = НомерПП + 1;
		Состояние("Обрабатывается запись " + НомерПП + "/" + СписокУлицDBF.КоличествоЗаписей());
	  ЭлементСправочникаУлиц = Справочники.ркУлицы.НайтиПоКоду(СписокУлицDBF.KOD);
	  Если ЭлементСправочникаУлиц = Справочники.ркУлицы.ПустаяСсылка() Тогда
	  ЭлементСправочникаУлиц = Справочники.ркУлицы.СоздатьЭлемент();
	  Сообщить("Улица " + СписокУлицDBF.NAZVANIE + " не найдена, создаем");
  Иначе
	  Сообщить("Улица " + СписокУлицDBF.NAZVANIE + " найдена, корректируем");
	  ЭлементСправочникаУлиц = ЭлементСправочникаУлиц.ПолучитьОбъект();
	  КонецЕсли;
	  
	  ЭлементСправочникаУлиц.Код = СокрЛП(СписокУлицDBF.KOD);
	  ЭлементСправочникаУлиц.Наименование = СокрЛП(СписокУлицDBF.NAZVANIE);
  
	  ЭлементСправочникаУлиц.Записать();
      СписокУлицDBF.Следующая(); //переходим на следующую запись
	КонецЦикла;

	СписокУлицDBF.ЗакрытьФайл(); //не забывайте пожалуйста 
КонецЕсли;

КонецПроцедуры
Показать



Процедура ЗагрузкаДомов()
НомерПП = 0;
СписокДомовDBF = Новый XBASE; //создаем ссылку на файл DBF
СписокДомовDBF.ОткрытьФайл(КаталогБазы + "\" + "DOM.DBF"); //открываем файл на диске
СписокДомовDBF.Кодировка = КодировкаXBase.OEM;

Если СписокДомовDBF.Открыта()=0 Тогда //проверяем, удалось ли открыть файл
        Сообщить("Не удалось открыть файл!");
	Иначе 
		
	СписокДомовDBF.Первая(); //позиционируемся на первой записи
	Пока СписокДомовDBF.ВКонце()=0 Цикл //пока не дошли до конца, крутим цикл
	  НомерПП = НомерПП + 1;
	  Состояние("Обрабатывается запись " + НомерПП + "/" + СписокДомовDBF.КоличествоЗаписей());
	  ЭлементСправочникаДомов = Справочники.ркДома.НайтиПоКоду(СокрЛП(СписокДомовDBF.KOD));
	  Если ЭлементСправочникаДомов = Справочники.ркДома.ПустаяСсылка() Тогда
	  ЭлементСправочникаДомов = Справочники.ркДома.СоздатьЭлемент();
	  Сообщить("Дом " + СокрЛП(СписокДомовDBF.NAZVANIE) + " не найден, создаем");
  Иначе
	  Сообщить("Дом " + СокрЛП(СписокДомовDBF.NAZVANIE) + " найден, корректируем");
  	  ЭлементСправочникаДомов = ЭлементСправочникаДомов.ПолучитьОбъект();
	  КонецЕсли;
	  
	  //ЭлементСправочникаДомов. = СписокДомовDBF.;
	  ЭлементСправочникаДомов.Код = СокрЛП(СписокДомовDBF.KOD);
	  ЭлементСправочникаДомов.Наименование = СокрЛП(СписокДомовDBF.NAZVANIE);
	  Улица = Справочники.ркУлицы.НайтиПоКоду(СокрЛП(СписокДомовDBF.ULICA));
	  Если Улица = Справочники.ркУлицы.ПустаяСсылка()
		  Тогда
		  Сообщить ("Улица не найдена, подставляем К.Либкнехта код (50)");
	  Улица = Справочники.ркУлицы.НайтиПоКоду("50");		  
	  КонецЕсли;
	  ЭлементСправочникаДомов.Владелец = Улица ;
	  
	  Корпус = Сред(СокрЛП(СписокДомовDBF.DOM), СтрДлина(СокрЛП(СписокДомовDBF.DOM)), 1);
	  
	  Если Найти("0123456789", Корпус) >0
		  Тогда 
		  ЭлементСправочникаДомов.Номер = СокрЛП(СписокДомовDBF.DOM);
	  Иначе
		  ЭлементСправочникаДомов.Номер = Сред(СокрЛП(СписокДомовDBF.DOM), 1, СтрДлина(СокрЛП(СписокДомовDBF.DOM))-1);		  
		  ЭлементСправочникаДомов.Корпус = Корпус;
	  КонецЕсли;
	  
  
	  ЭлементСправочникаДомов.Записать();
      СписокДомовDBF.Следующая(); //переходим на следующую запись
	КонецЦикла;

	СписокДомовDBF.ЗакрытьФайл(); //не забывайте пожалуйста 
КонецЕсли;

КонецПроцедуры
Показать
45. JaroslavBayev 19.02.14 16:35 Сейчас в теме
И это уже печально, послушав ваших советов вставил в код:
ИскомыйКод = Дом.Fields("kodul").Value;
Населенный = Справочники.НаселенныеПункты.НайтиПоКоду(""+Дом.Fields("kodnp").Value);
	 Улица = Справочники.Улицы.НайтиПоКоду(""+Дом.Fields("kodul"),Истина,,Населенный);
ИскомыйВладелец = Улица;
Если ИскомыйВладелец = Неопределено ИЛИ ИскомыйВладелец.Пустая() тогда 
	  Сообщить("Не найдена улица с кодом:"+ИскомыйКод);
	  возврат;
Иначе 
	  НовыйДома.Владелец = ИскомыйВладелец;
  КонецЕсли;
НовыйДома.Литера = ДОМ.Fields("lit").Value;
НовыйДома.ДробьНомер = ДОМ.Fields("drobnom").Value;  
Показать

И в результате оказывается, что здесь я и населенный пункт найти по коду не могу все та-же ошибка....
46. JaroslavBayev 19.02.14 16:57 Сейчас в теме
(45) JaroslavBayev, Теперь само отработало, правда после того как кэш почистил... Народ неужели я так и буду спотыкаться на 1С? И весь мой опыт в Python, Delphy и SQL можно просто послать????
47. jigourt 31 19.02.14 17:16 Сейчас в теме
(46) JaroslavBayev, если СП читать, то не будешь )))
48. SuhoffGV 19.02.14 17:18 Сейчас в теме
(46) JaroslavBayev, Здесь тебе не тут. 1С это особая, "уличная магия".

Кэш полезно чистить если ловишь баги при/после динамического обновления.

Опыт пригодится. Я в 1с из delphi пришел. Специфика другая, но все решаемо.
49. SuhoffGV 19.02.14 17:19 Сейчас в теме
И вообще. Тут наши финам 2-1 сливают а вы тут со своей 1С.
51. jigourt 31 19.02.14 17:23 Сейчас в теме
(49) SuhoffGV, +1, а я думаю, чего трансляция заикается, а все адинэсники сервера перегружают )))
(50) JaroslavBayev, разве где-то были посмеивания?? ))
52. SuhoffGV 19.02.14 17:34 Сейчас в теме
(51) jigourt, теперь все норм. я отключился на счете 3-1.
50. JaroslavBayev 19.02.14 17:20 Сейчас в теме
Ура, все заработало, всем огромное спасибо и за вашу помощь и за ваши посмеивания и за ваше терпение.
53. ant1773 6 20.02.14 06:14 Сейчас в теме
(50) JaroslavBayev,

В чем была проблема? Только в кэше?
54. JaroslavBayev 20.02.14 10:11 Сейчас в теме
(53) ant1773, В последней части да, оставался кэш.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот