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


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Декабря 2008
Условие по реквизиту неопределенного вида
22. Апреля 2009 :: 07:36
Печать  
Спр Контрагенты
Реквизит ЮрФизЛицо (Спр ФизЛица,ЮрЛица,СвоиЮрЛица)
Соответственно в каждом из 3 справочников Реквизит Телефоны
Хочу увидеть всех контрагетов с длиной телефона = 10
|SELECT
|  Спр.ID as [Элемент $Справочник.Контрагенты],
|  COALESCE($СпрС.Телефоны, $СпрЮ.Телефоны, $СпрФ.Телефоны) as Телефоны
|FROM $Справочник.Контрагенты as Спр
|LEFT JOIN $Справочник.СвоиЮрЛица СпрС ON $ВидСправочника36.СвоиЮрЛица + СпрС.ID = $Спр.ЮрФизЛицо
|LEFT JOIN $Справочник.ЮрЛица СпрЮ ON $ВидСправочника36.ЮрЛица + СпрЮ.ID = $Спр.ЮрФизЛицо
|LEFT JOIN $Справочник.ФизЛица СпрФ ON $ВидСправочника36.ФизЛица + СпрФ.ID = $Спр.ЮрФизЛицо
А вот как задать условие? Так не получилось ...
|WHERE
|(LEN(LTRIM(RTRIM(COALESCE($СпрС.Телефоны, $СпрЮ.Телефоны, $СпрФ.Телефоны)))) = 10)
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Условие по реквизиту неопределенного вида
Ответ #1 - 22. Апреля 2009 :: 09:13
Печать  
vovan519 писал(а) 22. Апреля 2009 :: 07:36:
Спр Контрагенты
Реквизит ЮрФизЛицо (Спр ФизЛица,ЮрЛица,СвоиЮрЛица)
Соответственно в каждом из 3 справочников Реквизит Телефоны
Хочу увидеть всех контрагетов с длиной телефона = 10
|SELECT
|  Спр.ID as [Элемент $Справочник.Контрагенты],
|  COALESCE($СпрС.Телефоны, $СпрЮ.Телефоны, $СпрФ.Телефоны) as Телефоны
|FROM $Справочник.Контрагенты as Спр
|LEFT JOIN $Справочник.СвоиЮрЛица СпрС ON $ВидСправочника36.СвоиЮрЛица + СпрС.ID = $Спр.ЮрФизЛицо
|LEFT JOIN $Справочник.ЮрЛица СпрЮ ON $ВидСправочника36.ЮрЛица + СпрЮ.ID = $Спр.ЮрФизЛицо
|LEFT JOIN $Справочник.ФизЛица СпрФ ON $ВидСправочника36.ФизЛица + СпрФ.ID = $Спр.ЮрФизЛицо
А вот как задать условие? Так не получилось ...
|WHERE
|(LEN(LTRIM(RTRIM(COALESCE($СпрС.Телефоны, $СпрЮ.Телефоны, $СпрФ.Телефоны)))) = 10)


Реквизит неопределенного вида хранится в виде строки длинной 23, примерно так 'B1  3N   HS9           '

Меняй $ВидСправочника36.СвоиЮрЛица + СпрС.ID = $Спр.ЮрФизЛицо На
Код
Выбрать все
[s]'B1'+$ВидСправочника36.СвоиЮрЛица + СпрС.ID+'	  ' = $Спр.ЮрФизЛицо[/s] 



B1 - Тип справочник

Все правильно $ВидСправочника36.СвоиЮрЛица + СпрС.ID, там тип Справочник



« Последняя редакция: 22. Апреля 2009 :: 11:40 - leov-001 »  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Условие по реквизиту неопределенного вида
Ответ #2 - 22. Апреля 2009 :: 11:15
Печать  
Код
Выбрать все
|SELECT
|  Спр.ID as [Элемент $Справочник.Контрагенты]
|, ЮрФизСвои.Телефоны  as Телефоны
|FROM $Справочник.Контрагенты as Спр
|  Left Join  
| (
|  SELECT $ВидСправочника36.СвоиЮрЛица + СпрС.ID as ID13
|  ,  $СпрС.Телефоны as Телефоны
|  FROM $Справочник.СвоиЮрЛица as СпрС
|  WHERE LEN(LTRIM(RTRIM($СпрС.Телефоны))) = 10
|
|  UNION ALL
|
|  SELECT $ВидСправочника36.ЮрЛица + СпрЮ.ID as ID13
|  ,  $СпрЮ.Телефоны as Телефоны
|  FROM $Справочник.ЮрЛица as СпрЮ
|  WHERE LEN(LTRIM(RTRIM($СпрЮ.Телефоны))) = 10
|
|  UNION ALL
|
|  SELECT $ВидСправочника36.ФизЛица + СпрФ.ID as ID13
|  ,  $СпрФ.Телефоны as Телефоны
|  FROM $Справочник.ФизЛица as СпрФ
|  WHERE LEN(LTRIM(RTRIM($СпрФ.Телефоны))) = 10
| ) as ЮрФизСвои on ЮрФизСвои.ID13 = $Спр.ЮрФизЛицо
 



Так еще попробуй.
Проверить на DBF-е неудалось СпрФ.Телефоны - неограниченной длины и хранится в 1SBlob.DBF.
  
Наверх
 
IP записан
 
vovan519
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Декабря 2008
Re: Условие по реквизиту неопределенного вида
Ответ #3 - 22. Апреля 2009 :: 13:26
Печать  
Argument data type text is invalid for argument 1 of rtrim function.
Даже без условия колонка Телефоны пустая.
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Условие по реквизиту неопределенного вида
Ответ #4 - 22. Апреля 2009 :: 16:00
Печать  
vovan519 писал(а) 22. Апреля 2009 :: 13:26:
Argument data type text is invalid for argument 1 of rtrim function.
Даже без условия колонка Телефоны пустая.


where DATALENGTH(COALESCE($СпрС.Телефоны, $СпрЮ.Телефоны, $СпрФ.Телефоны)) = 10
  
Наверх
 
IP записан
 
vovan519
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 24
Зарегистрирован: 18. Декабря 2008
Re: Условие по реквизиту неопределенного вида
Ответ #5 - 23. Апреля 2009 :: 10:06
Печать  
Доложу о результатах. Вопрос оказался простой (если не сказать глупый), но нормального примерчика в инете найти не удалось. И так...
1. LTRIM, RTRIM не работаю со строками неограниченной длины
2. DATALENGTH работает. (спасибо  alexdd), но хотелось бы без начальных и конечных пробелов.
3. Устроил вариант
(LEN(LTRIM(RTRIM(CAST(COALESCE($СпрС.Телефоны, $СпрЮ.Телефоны, $СпрФ.Телефоны) as varchar(100) )))) =10)
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать