Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Как узнать по TypeID это справочник или документ? (число прочтений - 1967 )
vitek1
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 25. Октября 2008
Как узнать по TypeID это справочник или документ?
23. Марта 2009 :: 09:15
Печать  
В таблице _1SUPDTS есть поля TypeID и ObjID (ид вида и ид объекта). Как в прямом запросе можно узнать тип объекта (справочник или документ)?
Такая конструкция не прокатывает:

"select
  dbo.sp_tohex(УРБД.TypeID) + УРБД.ObjID as [Спр $Справочник],
  dbo.sp_tohex(УРБД.TypeID) + УРБД.ObjID as [Док $Документ]
from
  _1supdts as УРБД
group by
  УРБД.TypeID,
  УРБД.ObjID"

Выдает в таблице значений потом одинаковые колонки Спр и Док (справочники выводятся элементами, а док-ты выводятся <Объект не найден/ААА>). Как бы получить обе колонки заполненными, причем вместо битых ссылок просто ноль (потом это в спр. выгружается и он ругаться будет).
Просматривать каждый ObjID в таблицах SC+TypeID и DH+TypeID не очень хочется - скорость заметно снизиться. Может можно в какие-то мета-таблицы SQL сервера посмотреть или как-то MetaDataWork использовать в самом запросе.
Подскажите советом.
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Как узнать по TypeID это справочник или документ?
Ответ #1 - 23. Марта 2009 :: 10:20
Печать  
Разбей на 2 запроса

Код
Выбрать все
	МД = СоздатьОбъект("MetaDataWork");
	RS = СоздатьОбъект("ODBCRecordSet");
	ТЗ = СоздатьОбъект("ТаблицаЗначений");
	СЗ1 = СоздатьОбъект("СписокЗначений");
	СЗ2 = СоздатьОбъект("СписокЗначений");
	СписокИДСправ = "";
	Для сс=1 По Метаданные.Справочник() Цикл
		Если сс = 1 Тогда
			СписокИДСправ = СписокИДСправ + СокрЛП(МД.ИДСправочника(сс));
		Иначе
			СписокИДСправ = СписокИДСправ + ", "+СокрЛП(МД.ИДСправочника(сс));
		КонецЕсли;
	КонецЦикла;
	СписокИДДок = "";
	Для дд=1 По Метаданные.Документ() Цикл
		Если дд = 1 Тогда
			СписокИДДок = СписокИДДок+ СокрЛП(МД.ИДДокумента(дд));
		Иначе
			СписокИДДок = СписокИДДок+ ", "+СокрЛП(МД.ИДДокумента(дд));
		КонецЕсли;
	КонецЦикла;
	RS.Отладка(1);
	Запрос = "
	|select
	|  dbo.sp_tohex(УРБД.TypeID) + УРБД.ObjID as [Спр $Справочник]
	//|dbo.sp_tohex(УРБД.TypeID) + УРБД.ObjID as [Док $Документ]
	|from
	|  _1supdts as УРБД
	|where
	|  УРБД.TypeID IN ("+СписокИДСправ+")
		    //|  УРБД.TypeID IN ("+СписокИДДок+")
	|group by
	|  УРБД.TypeID, УРБД.ObjID
	|";
 	Если RS.Открыть(Запрос,,) = 0 Тогда
		Сообщить(RS.ПолучитьОписаниеОшибки (),"");
		Возврат;
	КонецЕсли;
	RS.ПолучитьРезультатыВ_ТЗ(ТЗ,1);
	RS.Закрыть();
	ТЗ.ВыбратьСтроку(); 

  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Как узнать по TypeID это справочник или документ?
Ответ #2 - 23. Марта 2009 :: 16:20
Печать  
Можно по _1sjourn посмотреть документ или нет, так типа
Код
Выбрать все
select top 100
  case when j.iddoc is null then 'B1' else 'O1' end + right(dbo.Convert10To36(u.typeid),4) + u.objid  [Объект  $Неопределенный]
from
 _1supdts u (nolock)
left join
 _1sjourn j (nolock) on j.iddoc = u.objid and j.iddocdef = u.typeid
 


  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать