|
Не могу поменять элемент справочника... | ☑ | ||
---|---|---|---|---|
0
jaroslavbayev
18.02.14
✎
18:03
|
Есть код:
НачатьТранзакцию(); стрПодключения = "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("Select CPCONVERT(866,1251,kod) as kod,nomer,CPCONVERT(866,1251,name) as ima,nkv,CPCONVERT(866,1251,lkv) as lkv from 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(); ЗафиксироватьТранзакцию(); Программа доходит до места:Справочники.ЛицевыеСчета.НайтиПоКоду(ЛС.Fields("nomer").Value).Ссылка.ПолучитьОбъект(); и тут же уходит в ошибку: Ошибка при вызове метода контекста (ПолучитьОбъект)по причине: Элемент не выбран! и все ни в какую работать не желает, что не так??? |
|||
1
Eugene_life
18.02.14
✎
18:04
|
(0) Ну, значит не находит он элемента
|
|||
2
Eugene_life
18.02.14
✎
18:05
|
(0) + Попробуй (ЛС.Fields("nomer").Text)
|
|||
3
Torquader
18.02.14
✎
18:05
|
Так, насколько я помню, если что-то не найдено, то возвращается НЕОПРЕДЕЛЕНО - кто это проверяет ?
|
|||
4
Eugene_life
18.02.14
✎
18:06
|
(3) Никто не проверяет, даже Попытка нету )
|
|||
5
jaroslavbayev
18.02.14
✎
18:07
|
Хорошо если так, то каким же макаром оно проскочило первое условие и не появилось?
|
|||
6
Torquader
18.02.14
✎
18:08
|
(5) Как бы 0 и НЕОПРЕДЕЛЕНО это разные вещи.
|
|||
7
Eugene_life
18.02.14
✎
18:10
|
(5) Поставь условие такое
вместо Если РезультатПоиска = 0 Тогда вот так: Если РезультатПоиска = Неопределено ИЛИ РезультатПоиска.Пустая() Тогда |
|||
8
hhhh
18.02.14
✎
18:12
|
(6) НЕОПРЕДЕЛЕНО не может возвращать - это сказки. Пустая ссылка там.
|
|||
9
jaroslavbayev
18.02.14
✎
18:13
|
Т.е вы хотите сказать, что запись есть, но она битая?
|
|||
10
Рэйв
18.02.14
✎
18:14
|
(0)Ну ты герой
|
|||
11
Рэйв
18.02.14
✎
18:14
|
Завидная самоуверенность
|
|||
12
Рэйв
18.02.14
✎
18:15
|
Не определив вообше что ты получил(толи хрень, толи то что хотел), ты браво пытаешься получить от этого объект!
|
|||
13
Рэйв
18.02.14
✎
18:15
|
Гусар куле...
|
|||
14
Torquader
18.02.14
✎
18:17
|
(8)
Возвращаемое значение: Тип: СправочникСсылка.; Неопределено. Если не существует ни одного элемента с требуемым кодом, то будет возвращена пустая ссылка. Если для справочника код не задан (длина = 0), то будет возвращено Неопределено. Может быть и неопределено, но это, если совсем не там ищут. |
|||
15
Eugene_life
18.02.14
✎
18:18
|
(8) + (14) У него может оказаться пустым его значение из ячейки :)
|
|||
16
Eugene_life
18.02.14
✎
18:19
|
(9) Нет никакой "битой" записи. Посмотри уже отладчиком, что ты ищешь.
|
|||
17
jaroslavbayev
18.02.14
✎
18:20
|
Герой не герой, вот только я не пойму как он вообще там может иметь значения типа Неопределенно или Пустая, если НайтиПоКоду () Выдает значение типа Булево это раз! Соответственно, если в первой части : РезультатПоиска = Справочники.ЛицевыеСчета.НайтиПоКоду(ЛС.Fields("nomer").Value);
Если РезультатПоиска = 0 Тогда мы не попали в тогда, логично предположить, что запись с данным кодом есть и мы проверяем на соответствие второго реквизита в этой строке. Замечу что номер и код в данном справочники абсолютно идентичны друг другу. |
|||
18
Eugene_life
18.02.14
✎
18:20
|
(9) + Останови в ошибке и посмотри значение ЛС.Fields("nomer").Value. Потом найди этот код вручную и все поймешь
|
|||
19
hhhh
18.02.14
✎
18:20
|
(17) записи вообще нет. Результат = NULL.
Не Результат = ЛС.Fields("ima").Value = ИСТИНА Всё сходится. |
|||
20
Torquader
18.02.14
✎
18:20
|
(17) Это семёрка или восьмёрка - начнём с этого.
|
|||
21
Eugene_life
18.02.14
✎
18:22
|
(17) НайтиПоКоду не возвращает Булево в 1С 8
|
|||
22
jaroslavbayev
18.02.14
✎
18:22
|
Это Восьмерка
|
|||
23
Eugene_life
18.02.14
✎
18:22
|
(22) тогда тебе вернется ссылка или неопределено
|
|||
24
Eugene_life
18.02.14
✎
18:23
|
(22) твое Если РезультатПоиска = 0 Тогда вообще никогда не выполнится
|
|||
25
Torquader
18.02.14
✎
18:23
|
Зачем тогда два раза искать - если один раз нашёл, то проверяешь, что нашёл, потом зачем, когда это делаешь:
Результат = Справочники.ЛицевыеСчета.НайтиПоКоду(ЛС.Fields("nomer").Value).Квартиросъемщик; |
|||
26
Шапокляк
18.02.14
✎
18:24
|
(17) НайтиПоКоду(<Код>, <Поиск по полному коду>, <Родитель>, <Владелец>)
Параметры: <Код> (обязательный) Тип: Число, Строка. Искомый код. Строка или число в зависимости от настроек справочника в конфигураторе. <Поиск по полному коду> (необязательный) Тип: Булево. Определяет режим поиска по полному коду. Истина - искомый код следует задавать в виде строки, состоящей из последовательности кодов по уровням справочника, разделенных символом "/". Значение по умолчанию: Ложь <Родитель> (необязательный) Тип: СправочникСсылка. Родитель, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике. <Владелец> (необязательный) Тип: СправочникСсылка. Владелец, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике. Возвращаемое значение: Тип: СправочникСсылка.<Имя справочника>, Неопределено. Если не существует ни одного элемента с требуемым кодом, то будет возвращена пустая ссылка. Если код не задан, то будет возвращено Неопределено. Если у вас в ячейке nomer пусто, поиск вернет Неопределено, если не пусто, то поиск вернет или ссылку на элемент справочника или пустую ссылку на элемент этого справочника. 0 не вернет никогда, поэтому вы проскакиваете сразу в ветку Иначе, хотя не факт, что вы нашли непустую ссылку. |
|||
27
Torquader
18.02.14
✎
18:25
|
Если результатпоиска=НЕОПРЕДЕЛЕНО Тогда
Сообшить("Шайтан какой-то"); ИначеЕсли результатпоиска.Пустая()Тогда // первая часть кода Иначе Результат=РезультатПоиска.Квартиросъемщик; Лицевой=РезультатПоиска.ПолучитьОбъект(); ну и так далее. |
|||
28
jaroslavbayev
19.02.14
✎
17:20
|
Ура, все заработало, всем огромное спасибо и за вашу помощь и за ваши посмеивания и за ваше терпение.
|
|||
29
Torquader
19.02.14
✎
17:21
|
Да, не прошло и суток.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |