|   |   | 
| 
 | Не могу поменять элемент справочника... | ☑ | ||
|---|---|---|---|---|
| 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 | 
        Да, не прошло и суток.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |