Имя: Пароль:
1C
1C 7.7
v7: извлечь и типизировать вид справочника в прямом запросе
0 Zakarum
 
19.03.13
16:49
База dbf.
Использую подключение через объект OLEDB.

Произвожу выборку некоторго справочника (например "контрагенты"). У него есть реквизит с типом "Справочник неопределенного вида" (например "ЮрФизЛицо")
Возникла задача установить, какие были использованы виды справочников в этом реквизите.
Типизация в прямом запросе по первым четырем символам почему-то не работает.
Итоговый текст запроса такой
SELECT
   Род5 as [Род5_1c_type_Справочник_Контрагенты],
   Род4 as [Род4_1c_type_Справочник_Контрагенты],
   Род3 as [Род3_1c_type_Справочник_Контрагенты],
   Род2 as [Род2_1c_type_Справочник_Контрагенты],
   Род1 as [Род1_1c_type_Справочник_Контрагенты],
   Элем as [Элем_1c_type_Справочник_Контрагенты],
   Спр.Id,
   Спр.Code as Код,
   Спр.Descr as Наименование,
   Спр.sp521 as [ЮрФизЛицо_1c_type_Справочник],
   Substr(Спр.sp521, 1, 4) as [ВидСпр_ЮрФизЛицо_1c_type_ВидСправочника]
FROM
   Tmp1
LEFT JOIN
   sc172 Спр
   ON Спр.Id = Элем

Подскажите, пожалуйста, как исправить строку substr, чтобы она типизировала сам вид справочника, если это возможно.
1 Ёпрст
 
19.03.13
16:55
left($Спр.ЮрФизЛицо,4) as [Вид $ВидСправочника]
2 Zakarum
 
19.03.13
17:05
(1) тоже не работает :(
у меня такая строка:
left($Спр.ЮрФизЛицо, 4) as [ВидСпрЮрФизЛицо $ВидСправочника]
хотя предыдущая колонка с полной типизацией юрфизлица выдает непустой результат
3 Ёпрст
 
19.03.13
17:08
Ну, попробуй так что ли:
left($Спр.ЮрФизЛицо, 4) as [ВидСпрЮрФизЛицо $ВидСправочникаПредставление]

ЗЫ: ну или тупо через icase
4 Zakarum
 
19.03.13
17:20
$ВидСправочникаПредставление тоже выдает пустоту.

case не хотелось бы использовать, т.к. предполагаю делать выгрузку, в которой можно выбирать любой справочник и выгружать реквизиты его реквизитов, если эти реквизиты сами являются справочниками.

Я так понимаю, $ВидСправочника и ВидСправочникаПредставление обязаны работать?
5 Ёпрст
 
19.03.13
17:25
(4) для скуля - да, для оледб не гарантированно, скорее всего нет.

Только сравнение через case будет работать, типизация врят ли.

ЗЫ: можно и через 1sqlite написать запрос.
Да и.. у тебя всего то там 2 вида справочника, тупо iif/icase и привет
6 Zakarum
 
19.03.13
17:33
(5)
печально. Видимо так и есть, в описании к OLEDB эти варианты типизации не приводятся.
>>Да и.. у тебя всего то там 2 вида справочника, тупо iif/icase и привет
для ЮрФизЛица в Справочнике Контрагенты -- да. Но этот вариант я взял для примера, а так-то мне надо написать выгрузку в некую внешнюю приблуду для любых справочников и их выбираемых реквизитов, а если этреквизиты справочники, то еще и выбирать реквизиты тех справочников.
Ну то есть Контрагенты.ЮрфизЛицо.Адрес

с 1sqlite не сложились у меня отношения.
7 Ёпрст
 
19.03.13
17:35
(6) если выбирать реквизиты в рамках одного запроса - то это соединение.. опять же, вид не нужен будет - ручонками же юнион собирать будешь, из всевозможных видов справочников.
8 Ёпрст
 
19.03.13
17:39
В твоём случае, можно сделать так (как делают с перечислениями) - лепишь временную табличку, в которую заносишь Id вида справочника и его представление в текстовом виде.
С ней и соединяешься в тексте запроса для получения представления.
9 Zakarum
 
19.03.13
17:41
(8) гениально!
так и сделаю, спасибо :)

П.С. (7) в рамках одного запроса нельзя. Надо выдать список реквизитов тех справочников с таблицу значений на форму, чтобы можно было выбрать нужные.