Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Может кому пригодится работа с типом неопределенный справочник (число прочтений - 961 )
mc
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 59
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Может кому пригодится работа с типом неопределенный справочник
17. Ноября 2010 :: 13:08
Печать  
Вот текст из документации
Код
Выбрать все
А что делать, если заранее не известно кокой справочник хранится в поле?
В общем случае ничего нельзя сделать. Но если мы заранее можем ограничить тип этого поля тогда решение можно найти. Например, в нашем случае поле “Контрагент” может быть только Контрагентом или Сотрудником.

Вот как будет выглядеть запрос

ТекстЗапроса = "
|SELECT
|	Жур.IDDoc as [Док $Документ.Реализация],
|	COALESCE(СпрК.Descr, СпрС.Descr) as Контрагент_Наименование
|FROM
|	_1SJourn Жур
|INNER JOIN
|	$Документ.Реализация as Док ON Док.IDDoc = Жур.IDDoc
|LEFT JOIN
|	$Справочник.Контрагенты as СпрК ON
|	$ВидСправочника36.Контрагенты + СпрК.ID  = $Док.Контрагент
|LEFT JOIN
|	$Справочник. Сотрудники as СпрС ON
|	$ВидСправочника36.Сотрудники + СпрС.ID  = $Док.Контрагент
|WHERE
|	Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
|	Жур.Closed & 1 = 1";
 



но если реквизит имеет тип неопределенный справочник, но мы точно знаем какой, а типизировать хочется, то вот кусок кода
Код
Выбрать все
|SELECT
|	$Рег.Товар as [Товары $Справочник.ТМЦ],
|	СпрМестаХранения.ID as [Склады $Справочник.МестаХранения],
|
|FROM $Регистр.Обороты AS Рег
|
|	LEFT JOIN $Справочник.МестаХранения as СпрМестаХранения ON $ВидСправочника36.МестаХранения + СпрМестаХранения.ID = $Рег.ДопИзмерение1
 



в данном примере имем регистр "Обороты" и измерение "ДопИзмерение1".
в настройках базы указано, что в ДопИзмерение1 будет писаться склад.

может быть кому-то это поможет
просьба сильно не пинать
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Может кому пригодится работа с типом неопределенный справочник
Ответ #1 - 22. Ноября 2010 :: 07:03
Печать  
Гораздо проще было написать так:

SELECT
|      Жур.IDDoc  [Док $Документ.Реализация],
|      $Док.Контрагент [Контрагент $Справочник]
|FROM
|      _1SJourn Жур
|INNER JOIN
|      $Документ.Реализация  Док ON Док.IDDoc = Жур.IDDoc
|WHERE
|      Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
|      Жур.Closed & 1 = 1


Ну и условие на вид документа для попадания в индекс еще.
ЗЫ: ну и типа "неопределенный справочник" нету, если что.
Есть тип <Справочник>  неопределенного вида.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать