Имя: Пароль:
1C
1С v8
как понять, что ссылка битая
0 vasbur
 
25.06.13
07:12
пишу код:
УИД = новый УникальныйИдентификатор(ИдентификаторВнешнейПечатнойФормы);
ОбработкаССылка =   Справочники.ВнешниеОбработки.ПолучитьСсылку(УИД);

если ИдентификаторВнешнейПечатнойФормы равен гуиду несуществующего элемента (например, удаленного), то ОбработкаССылка принимает вид "<Объект не найден> (16:9741c01885dcb40711e2dd3e1123f20b)"

При этом, ЗначениеЗаполнено(ОбработкаССылка) = истина.

Как можно понять, указывает ли ОбработкаССылка на како-то элемент справочника или нет?
1 mehfk
 
25.06.13
07:14
ссылка.ссылка будет null
2 Галахад
 
гуру
25.06.13
07:14
ОбработкаСсылка.Код isnull
3 фобка
 
25.06.13
07:15
ПолучитьОбъект() = Неопределено
4 Cube
 
25.06.13
07:49
Я последнее время использую функцию:

Функция ОбъектСуществует(СсылкаНаОбъект, Тип)
   
   Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ " + Тип + " ГДЕ Ссылка = &Ссылка");
   Запрос.Параметры.Вставить("Ссылка", СсылкаНаОбъект);
   Выборка = Запрос.Выполнить().Выбрать();
   Возврат Выборка.Следующий();
   
КонецФункции //ОбъектСуществует()
5 el-gamberro
 
25.06.13
07:51
(3) за такое линейкой по пальцам :)))
6 jsmith82
 
25.06.13
07:53
Найти(Строка(Ссылка), "не найден") > 0
7 Cube
 
25.06.13
07:56
(6) Не универсально - зависит от языка...
8 Mitriy
 
25.06.13
07:57
ВЫБРАТЬ
   РеализацияТоваровУслугТовары.Ссылка,
   РеализацияТоваровУслугТовары.Номенклатура
ИЗ
   Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
   РеализацияТоваровУслугТовары.Номенклатура.Код ЕСТЬ NULL
9 Мимохожий Однако
 
25.06.13
07:57
Из БСП
// Создает и возвращает объект внешней обработки (отчета).
//
// Параметры:
//   Ссылка (СправочникСсылка.ДополнительныеОтчетыИОбработки) Подключаемая обработка.
//
// Возвращаемое значение:
//   (ВнешняяОбработкаОбъект.*) Объект подключенной обработки.
//   (ВнешнийОтчетОбъект.*)     Объект подключенного отчета.
//   (Неопределено)             Если передана некорректная ссылка.
//
// Важно:
//   Проверка функциональной опции "ИспользоватьДополнительныеОтчетыИОбработки"
//     должна выполняться вызывающим кодом.
//
Функция ПолучитьОбъектВнешнейОбработки(Ссылка) Экспорт
   
   // Подключение
   ИмяОбработки = ПодключитьВнешнююОбработку(Ссылка);
   
   // Проверка корректности переданных параметров
   Если ИмяОбработки = Неопределено Тогда
       Возврат Неопределено;
   КонецЕсли;
   
   // Получение экземпляра объекта
   Если Ссылка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет
       ИЛИ Ссылка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда
       Менеджер = ВнешниеОтчеты;
   Иначе
       Менеджер = ВнешниеОбработки;
   КонецЕсли;
   
   Возврат Менеджер.Создать(ИмяОбработки);
   
КонецФункции
10 Sammo
 
25.06.13
08:04
Зависит от задачи. Если нужно проверить в запросе, то проверка на нулл.
Если проверить битость конкретной ссылки, то, имхо, лучше 4.
Кстати, он несколько быстрее 3
11 Лефмихалыч
 
25.06.13
08:05
ВЫБРАТЬ ВЫБОР КОГДА ссылка.ссылка ЕСТЬ NULL ТОГДА Истина Иначе Ложь КОНЕЦ КАК Битая
ИЗ Справочник.ТвойСправочник
Где Ссылка = &ТвояСсылка

Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();

Возврат Выборка.Битая;
12 Cube
 
25.06.13
08:05
(10) "лучше 4. Кстати, он несколько быстрее 3"
Можешь проверить, но разница ощутима.
13 Defender aka LINN
 
25.06.13
08:12
(11) Неприальна
14 Рэйв
 
25.06.13
08:48
(0)Чего ты паришься?:-)

Если Лев(Строка(ТвояСсылка),18)="<Объект не найден>" Тогда
   Сообщить("Это битая");
КонецЕсли;
15 Рэйв
 
25.06.13
08:48
надеюсь никому не придет в наименовании справочника писать "<Объект не найден>"
:-)
16 Sammo
 
25.06.13
10:43
(14) См. 6 и 7
А если язык английский?
17 PR
 
25.06.13
10:48