|
Как правильно проверить несуществующую ссылку на заполненность | ☑ | ||
---|---|---|---|---|
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(РегистраторТам.УникальныйИдентификатор()))); ЗапросДок = Новый Запрос; ЗапросДок.Текст = "ВЫБРАТЬ " + ИмяДокумента +".Ссылка ИЗ Документ." +ИмяДокумента +" КАК " +ИмяДокумента + " ГДЕ " + ИмяДокумента + ".Ссылка = &Ссылка"; ЗапросДок.УстановитьПараметр("Ссылка",РегистраторЗдесь); ВыборкаДок = ЗапросДок.Выполнить().Выбрать(); Пока ВыборкаДок.Следующий()Цикл |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |