Имя: Пароль:
1C
1С v8
Как правильно проверить несуществующую ссылку на заполненность
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
58 Beduin
 
08.09.14
15:44
В общем сделал как в типовой. Работает очень быстро проверка
                РегистраторЗдесь = Документы[ИмяДокумента].ПолучитьСсылку(Новый УникальныйИдентификатор(глБаза.String(РегистраторТам.УникальныйИдентификатор())));
                ЗапросДок = Новый Запрос;
                ЗапросДок.Текст = "ВЫБРАТЬ " + ИмяДокумента +".Ссылка ИЗ Документ." +ИмяДокумента +" КАК " +ИмяДокумента + " ГДЕ "    + ИмяДокумента + ".Ссылка = &Ссылка";
                ЗапросДок.УстановитьПараметр("Ссылка",РегистраторЗдесь);
                ВыборкаДок = ЗапросДок.Выполнить().Выбрать();
                Пока ВыборкаДок.Следующий()Цикл
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший