|   |   | 
| 
 | Как правильно проверить несуществующую ссылку на заполненность | ☑ | ||
|---|---|---|---|---|
| 0
    
        Beduin 08.09.14✎ 14:59 | 
        Получаю объект по ссылке, на несуществующий объект функция значениезаполнено() выдает истину. Как еще можно проверить не тыкая в свойства и без ПолучитьОбъект, что по этой ссылке в базе объекта нет.     | |||
| 1
    
        Beduin 08.09.14✎ 14:59 | 
        Документы[РегистраторТам.ПолучитьОбъект().Метаданные().Name].ПолучитьСсылку(Новый УникальныйИдентификатор(глБаза.String(РегистраторТам.УникальныйИдентификатор())))     | |||
| 2
    
        Зойч 08.09.14✎ 15:01 | 
        выбрать  ссылка из ... где ссылка = &ссылка     | |||
| 3
    
        Зойч 08.09.14✎ 15:02 | 
        В типовых на бсп такая функция уже есть     | |||
| 4
    
        Beduin 08.09.14✎ 15:03 | 
        (2) А в параметр &ссылка, что передавать?     | |||
| 5
    
        Рэйв 08.09.14✎ 15:03 | 
        Если Лев(Строка(Ссылка)),7)="<Объект" Тогда
 Сообщить("Битая ссылка!"); КонецЕсли; | |||
| 6
    
        Рэйв 08.09.14✎ 15:04 | 
        это если по простому. 
 Но чтобы исключить наименование, начинающееся с "<Объект" надо запросом :-) | |||
| 7
    
        Beduin 08.09.14✎ 15:06 | 
        Каждый раз запрос делать не хорошо. У меня объектов больше 3 млн.     | |||
| 8
    
        Рэйв 08.09.14✎ 15:06 | 
        Как раз когда 3 млн, лучше один раз сделать запросом,выявить что безобразия имют быть и исправить их сразу     | |||
| 9
    
        Рэйв 08.09.14✎ 15:07 | 
        Можно конечно и ТиИ с сохзданием объектов, но потом не найдешь концов, что именно было не так.     | |||
| 10
    
        Beduin 08.09.14✎ 15:08 | 
        (8) Мне нужно конкретный объект понять, есть он или нет. Все в запрос не получится засунуть.     | |||
| 11
    
        Рэйв 08.09.14✎ 15:10 | 
        (10)Битая ссылка само по себе понятие неправильное и вредное. И впринципе достаточно редкое. Если появидись надо сразу все вылечивать.     | |||
| 12
    
        zulu_mix 08.09.14✎ 15:11 | 
        Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
 Сообщить("Битая ссылка"); КонецЕсли; | |||
| 13
    
        Рэйв 08.09.14✎ 15:11 | 
        (12)Попробуй сам сначала:-)     | |||
| 14
    
        Beduin 08.09.14✎ 15:11 | 
        (11) Это не битая ссылка. У меня план обмена, хочу понять какие данные надо догрузить.     | |||
| 15
    
        Рэйв 08.09.14✎ 15:11 | 
        на битой ссылке     | |||
| 16
    
        Рэйв 08.09.14✎ 15:12 | 
        (14)>>Получаю объект по ссылке, на несуществующий объект
 тогда как это понять? Я понял что про идет речь про битые. | |||
| 17
    
        х86 08.09.14✎ 15:12 | 
        (11)при обменах это нормальное явление     | |||
| 18
    
        Drac0 08.09.14✎ 15:12 | 
        (12) и так 3 млн раз? Весело будет.     | |||
| 19
    
        Рэйв 08.09.14✎ 15:13 | 
        (17)При правильно настроенных обменах - ненормальное.     | |||
| 20
    
        Рэйв 08.09.14✎ 15:13 | 
        (14)Если объект не существует, то его ссылка пустая.     | |||
| 21
    
        Beduin 08.09.14✎ 15:14 | 
        (16) У 1С этих абстракций куча. Одно из них Ссылка, она может и не быть в базе, но существует как тип данных и имеет свой ГУИД.     | |||
| 22
    
        х86 08.09.14✎ 15:14 | 
        (14)либо запросом, либо как-то шаманить с УИНами, где-то их хранить и по ним искать     | |||
| 23
    
        Рэйв 08.09.14✎ 15:14 | 
        и получить объект от ссылки ты никак не сможешь     | |||
| 24
    
        zulu_mix 08.09.14✎ 15:14 | 
        (13) так у него код в (1) приведен. все заработает нормально     | |||
| 25
    
        Рэйв 08.09.14✎ 15:14 | 
        (21)Ты не путая ссылку в базе с объектом - заглушкой Ссылка.     | |||
| 26
    
        х86 08.09.14✎ 15:15 | 
        (19)гуру по обменам видно за километр     | |||
| 27
    
        zulu_mix 08.09.14✎ 15:15 | 
        (25) не пугай пацана. все он правильно делал в (1)     | |||
| 28
    
        Рэйв 08.09.14✎ 15:17 | 
        (27)>>РегистраторТам.ПолучитьОбъект().Метаданные()
 Зачем ему получать объект для получения метаданных?:-) | |||
| 29
    
        Beduin 08.09.14✎ 15:17 | 
        Я не хочу вызывать метод ПолучитьОбъект(). Он ищет существующий объект долго. Думал может есть какой-нибудь быстрей механизм.     | |||
| 30
    
        zulu_mix 08.09.14✎ 15:17 | 
        (28) да он имя выцеплял так     | |||
| 31
    
        Beduin 08.09.14✎ 15:18 | 
        (28) Я же не могу из менеджера документов тянуть. Мне нужно конкретизировать табличку.     | |||
| 32
    
        Рэйв 08.09.14✎ 15:18 | 
        (29)От ссылки вполне можно получить метаданные, не получая объект из базы.     | |||
| 33
    
        zulu_mix 08.09.14✎ 15:19 | 
        я конечно понимаю что это через проктошлюз, но чем богаты     | |||
| 34
    
        Рэйв 08.09.14✎ 15:19 | 
        (31)>> Я же не могу из менеджера документов тянуть
 Почему нет? Мета=Менеджер.Пустаяссылка().Метаданные(); | |||
| 35
    
        Beduin 08.09.14✎ 15:20 | 
        (32) У меня через COMConnector ругнулся. Я поэтому до объекта типизировал.     | |||
| 36
    
        Рэйв 08.09.14✎ 15:20 | 
        (35)попробуй (34)     | |||
| 37
    
        zulu_mix 08.09.14✎ 15:20 | 
        (29) ну проверь что реквизит дата заполнен     | |||
| 38
    
        Зойч 08.09.14✎ 15:23 | 
        самый быстрый способ это (2)     | |||
| 39
    
        Beduin 08.09.14✎ 15:24 | 
        (34) Короче пустая ссылка полученная через ГУИД и пустаяссылка() через менеджер это не одно и тоже.
 Документы[РегистраторТам.ПолучитьОбъект().Метаданные().Name].ПустаяСсылка() <> РегистраторЗдесь | |||
| 40
    
        Beduin 08.09.14✎ 15:25 | 
        (39)
 РегистраторЗдесь = Документы[РегистраторТам.ПолучитьОбъект().Метаданные().Name].ПолучитьСсылку(Новый УникальныйИдентификатор(глБаза.String(РегистраторТам.УникальныйИдентификатор()))); | |||
| 41
    
        Зойч 08.09.14✎ 15:26 | 
        (39) РегистраторЗдесь не пустая, а битая ссылка. Есессно они не равны     | |||
| 42
    
        Рэйв 08.09.14✎ 15:26 | 
        (39)Еслтественно:-))
 Первое у тебя - это такая же пустая ссылка, но завернутая в СОМObject , а второе нормальная локальная пустая ссылка.Естественно они не будут равны. Но вообще то это одно и тоже и методы у них одинаковые. | |||
| 43
    
        zulu_mix 08.09.14✎ 15:27 | 
        интересно, а что выдаст метод .Пустая ?     | |||
| 44
    
        Рэйв 08.09.14✎ 15:27 | 
        (43)Истина     | |||
| 45
    
        Beduin 08.09.14✎ 15:27 | 
        (43) Ложь. Уже пробовал.     | |||
| 46
    
        Рэйв 08.09.14✎ 15:29 | 
        (45)Значит там не пустая ссылка.     | |||
| 47
    
        zulu_mix 08.09.14✎ 15:29 | 
        (45) а че ты не хочешь получить объект? тебе его один фиг создавать для битых ссылок придется     | |||
| 48
    
        Рэйв 08.09.14✎ 15:29 | 
        Или все таки битая:-)     | |||
| 49
    
        Рэйв 08.09.14✎ 15:30 | 
        (45)Одно дело создать для нескольких битых, другое для каждой ссылки лезть в базу за объектом.     | |||
| 50
    
        zulu_mix 08.09.14✎ 15:30 | 
        (45) блин, да проверь ты дату по ссылке     | |||
| 51
    
        Рэйв 08.09.14✎ 15:30 | 
        (49)к (47)     | |||
| 52
    
        Beduin 08.09.14✎ 15:31 | 
        (47) Нет. Я его не создаю. Проверяю нужно ли из плана обмена удалить объект зарегистрировавший изменения. Если объект есть в базе, то удаляю, если нет, то ничего не делаю. Обмен у меня отдельно от этого блока проходит.     | |||
| 53
    
        Beduin 08.09.14✎ 15:32 | 
        (50) Поля проверять идеологически неправильно, хоть и самый быстрый способ.     | |||
| 54
    
        zulu_mix 08.09.14✎ 15:32 | 
        короче проверяй тогда если ссылка.Дата = Дата("00010101") тогда
 сообщить("битая"); конецесли; | |||
| 55
    
        Зойч 08.09.14✎ 15:33 | 
        (54) Тоже самое что ПолучитьОбъект()     | |||
| 56
    
        zulu_mix 08.09.14✎ 15:33 | 
        (53) блин. определись уже тебе шашечки или ехать     | |||
| 57
    
        Defender aka LINN 08.09.14✎ 15:39 | 
        (5) Пыщ: http://screencast.com/t/1pp5X8W3     | |||
| 58
    
        Beduin 08.09.14✎ 15:44 | 
        В общем сделал как в типовой. Работает очень быстро проверка
 РегистраторЗдесь = Документы[ИмяДокумента].ПолучитьСсылку(Новый УникальныйИдентификатор(глБаза.String(РегистраторТам.УникальныйИдентификатор()))); ЗапросДок = Новый Запрос; ЗапросДок.Текст = "ВЫБРАТЬ " + ИмяДокумента +".Ссылка ИЗ Документ." +ИмяДокумента +" КАК " +ИмяДокумента + " ГДЕ " + ИмяДокумента + ".Ссылка = &Ссылка"; ЗапросДок.УстановитьПараметр("Ссылка",РегистраторЗдесь); ВыборкаДок = ЗапросДок.Выполнить().Выбрать(); Пока ВыборкаДок.Следующий()Цикл | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |