Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Выбрать неопределенный справочник (число прочтений - 590 )
Михаил
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 18. Января 2024
Выбрать неопределенный справочник
18. Января 2024 :: 19:40
Печать  
Всем известна конфа ТИС 9хх
Справочник Контрагенты и юрфизлицо.
Надо получить адрес этого юрфизлица.
Как это сделать! чтото тут не нашел, может кто то делал?

точнее есть запрос по докам, там иннер джойн Контрагенты.
как приджойнить то, что находится в юрфизлице (рекв типа справочник)
  
Наверх
 
IP записан
 
nicesc
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Зарегистрирован: 13. Июня 2009
Пол: Мужской
Re: Выбрать неопределенный справочник
Ответ #1 - 19. Января 2024 :: 10:08
Печать  
Какую СУБД используете?

на 1SQLite можно так:
Код (SQL)
Выбрать все
|SELECT
|	СпрКонтр.ЮрФизЛицо [ЮрФизЛицо $Справочник]
|	,СпрКонтр.ЮрФизЛицо AS ЮрФизЛицоСтрока
|	,:ВидСправочника.ЮрЛица
|	,length(:ВидСправочника.ЮрЛица)
|	,CASE
|		WHEN Substr(СпрКонтр.ЮрФизЛицо, 1, 4) = :ВидСправочника.ЮрЛица THEN 'ЮрЛица'
|		WHEN Substr(СпрКонтр.ЮрФизЛицо, 1, 4) = :ВидСправочника.ФизЛица THEN 'ФизЛица'
|		ELSE 'Не определен'
|	END AS Вид
|	,COALESCE(СпрЮЛ.ЮрАдрес,СпрФЛ.ЮрАдрес, 'нет данных') AS Адрес
|	,СпрЮЛ.ЮрАдрес AS АдресЮЛ
|	,СпрФЛ.ЮрАдрес AS АдресФЛ
|FROM
|	[Справочник.Контрагенты] AS СпрКонтр
|LEFT JOIN [Справочник.ЮрЛица] AS СпрЮЛ
|	ON :ВидСправочника.ЮрЛица||СпрЮЛ.ID = СпрКонтр.ЮрФизЛицо
|LEFT JOIN [Справочник.ФизЛица] AS СпрФЛ
|	ON :ВидСправочника.ФизЛица||СпрФЛ.ID = СпрКонтр.ЮрФизЛицо
|LIMIT 100
 

  
Наверх
 
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Выбрать неопределенный справочник
Ответ #2 - 21. Января 2024 :: 08:20
Печать  
nicesc писал(а) 19. Января 2024 :: 10:08:
Какую СУБД используете?

на 1SQLite можно так:


Нет. Так нельзя, так индексы использоваться не будут, а вот так будут (разница в ~1000 раз):
Код (SQL)
Выбрать все
LEFT JOIN [Справочник.ЮрЛица] AS СпрЮЛ
	-- ON :ВидСправочника.ЮрЛица||СпрЮЛ.ID = СпрКонтр.ЮрФизЛицо
	ON Substr(СпрКонтр.ЮрФизЛицо,1,4) = :ВидСправочника.ЮрЛица
	AND СпрЮЛ.ID = Substr(СпрКонтр.ЮрФизЛицо,5,9)
LEFT JOIN [Справочник.ФизЛица] AS СпрФЛ
	-- ON :ВидСправочника.ФизЛица||СпрФЛ.ID = СпрКонтр.ЮрФизЛицо
	ON Substr(СпрКонтр.ЮрФизЛицо,1,4) = :ВидСправочника.ФизЛица
	AND СпрФЛ.ID = substr(СпрКонтр.ЮрФизЛицо,5,9)
 



  
Наверх
www  
IP записан
 
Михаил
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 18. Января 2024
Re: Выбрать неопределенный справочник
Ответ #3 - 21. Января 2024 :: 10:46
Печать  
да скуль обычный MS

Meta name parser error: не указан параметр ":ВидСправочника" или заменить на $ВидСправочника36.

А что передать параметром в эту переменную?

nicesc писал(а) 19. Января 2024 :: 10:08:
Какую СУБД используете?

на 1SQLite можно так:
Код (SQL)
Выбрать все
|SELECT
|	СпрКонтр.ЮрФизЛицо [ЮрФизЛицо $Справочник]
|	,СпрКонтр.ЮрФизЛицо AS ЮрФизЛицоСтрока
|	,:ВидСправочника.ЮрЛица
|	,length(:ВидСправочника.ЮрЛица)
|	,CASE
|		WHEN Substr(СпрКонтр.ЮрФизЛицо, 1, 4) = :ВидСправочника.ЮрЛица THEN 'ЮрЛица'
|		WHEN Substr(СпрКонтр.ЮрФизЛицо, 1, 4) = :ВидСправочника.ФизЛица THEN 'ФизЛица'
|		ELSE 'Не определен'
|	END AS Вид
|	,COALESCE(СпрЮЛ.ЮрАдрес,СпрФЛ.ЮрАдрес, 'нет данных') AS Адрес
|	,СпрЮЛ.ЮрАдрес AS АдресЮЛ
|	,СпрФЛ.ЮрАдрес AS АдресФЛ
|FROM
|	[Справочник.Контрагенты] AS СпрКонтр
|LEFT JOIN [Справочник.ЮрЛица] AS СпрЮЛ
|	ON :ВидСправочника.ЮрЛица||СпрЮЛ.ID = СпрКонтр.ЮрФизЛицо
|LEFT JOIN [Справочник.ФизЛица] AS СпрФЛ
|	ON :ВидСправочника.ФизЛица||СпрФЛ.ID = СпрКонтр.ЮрФизЛицо
|LIMIT 100
 


« Последняя редакция: 21. Января 2024 :: 19:19 - Михаил »  
Наверх
 
IP записан
 
nicesc
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Зарегистрирован: 13. Июня 2009
Пол: Мужской
Re: Выбрать неопределенный справочник
Ответ #4 - 22. Января 2024 :: 11:51
Печать  
Djelf писал(а) 21. Января 2024 :: 08:20:
[quote author=2A2D27213727440 link=1705606834/1#1 date=1705658894]Какую СУБД используете?

на 1SQLite можно так:

согласен

$ВидСправочника36.ЮрЛица
  
Наверх
 
IP записан
 
Михаил
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 3
Зарегистрирован: 18. Января 2024
Re: Выбрать неопределенный справочник
Ответ #5 - 22. Января 2024 :: 15:18
Печать  
В общем вставил я этот код в запрос. И выводит ошибки

     рс = СоздатьОбъект("ODBCRecordset");      
     ТекстЗапроса = "
     |SELECT ЗаявкаПокупателя.IDDOC [ЗаявкаПокупателя $Документ.ЗаявкаПокупателя]
     |      , Журнал.$ОбщийРеквизит.Автор [Автор $Справочник.Пользователи]
     |      , $ЗаявкаПокупателя.Контрагент [Кон $Справочник.Контрагенты]
     |      , $ЗаявкаПокупателя.ДатаОтгрузки Дата
     |      , $ЗаявкаПокупателяСтроки.Номенклатура [Ном $Справочник.Номенклатура]
     |      , $ЗаявкаПокупателяСтроки.Количество Количество
     |   , Номенклатура.Code КодНом
     |   , Контрагенты.Code КодКон
     |
     |   , Контрагенты.ЮрФизЛицо [ЮрФизЛицо $Справочник]
     |      , Контрагенты.ЮрФизЛицо AS ЮрФизЛицоСтрока
     |      ,$ВидСправочника36.ЮрЛица
     |      ,length($ВидСправочника36.ЮрЛица)
     |      ,CASE
     |            WHEN Substr(Контрагенты.ЮрФизЛицо, 1, 4) = $ВидСправочника36.ЮрЛица THEN 'ЮрЛица'
     |            WHEN Substr(Контрагенты.ЮрФизЛицо, 1, 4) = $ВидСправочника36.ФизЛица THEN 'ФизЛица'
     |            ELSE 'Не определен'
     |      END AS Вид
     |      ,COALESCE(СпрЮЛ.ЮрАдрес,СпрФЛ.ЮрАдрес, 'нет данных') AS Адрес
     |      ,СпрЮЛ.ЮрАдрес AS АдресЮЛ
     |      ,СпрФЛ.ЮрАдрес AS АдресФЛ
     |FROM _1SJOURN AS Журнал With (NOLOCK)
     |      INNER JOIN $Документ.ЗаявкаПокупателя AS ЗаявкаПокупателя With (NOLOCK) ON Журнал.IDDOC = ЗаявкаПокупателя.IDDOC
     |      INNER JOIN $ДокументСтроки.ЗаявкаПокупателя AS ЗаявкаПокупателяСтроки With (NOLOCK) ON ЗаявкаПокупателя.IDDOC = ЗаявкаПокупателяСтроки.IDDOC
     |      INNER JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON Номенклатура.ID = $ЗаявкаПокупателяСтроки.Номенклатура
     |      INNER JOIN $Справочник.Контрагенты AS Контрагенты With (NOLOCK) ON Контрагенты.ID = $ЗаявкаПокупателя.Контрагент
     |
     |      LEFT JOIN Справочник.ЮрЛица AS СпрЮЛ      ON Substr(Контрагенты.ЮрФизЛицо,1,4) = $ВидСправочника36.ЮрЛица      AND СпрЮЛ.ID = Substr(Контрагенты.ЮрФизЛицо,5,9)
     |      LEFT JOIN Справочник.ФизЛица AS СпрФЛ   ON Substr(Контрагенты.ЮрФизЛицо,1,4) = $ВидСправочника36.ФизЛица AND СпрФЛ.ID = substr(Контрагенты.ЮрФизЛицо,5,9)      
     |
     |WHERE $ЗаявкаПокупателя.ДатаОтгрузки >:НачДата AND $ЗаявкаПокупателя.ДатаОтгрузки <:КонДата
     |      AND Журнал.Closed & 1 = 1
     |";

State 42000, native 195, message [Microsoft][ODBC SQL Server Driver][SQL Server]'length' is not a recognized built-in function name.

если строку length закомментировать то
State 42000, native 195, message [Microsoft][ODBC SQL Server Driver][SQL Server]'Substr' is not a recognized built-in function name.

Вообще как я понял конструкция
|      СпрКонтр.ЮрФизЛицо [ЮрФизЛицо $Справочник]
|      ,СпрКонтр.ЮрФизЛицо AS ЮрФизЛицоСтрока
|      ,:ВидСправочника.ЮрЛица
|      ,length(:ВидСправочника.ЮрЛица)

в принципе не нужна, играет только CASE



nicesc писал(а) 22. Января 2024 :: 11:51:
Djelf писал(а) 21. Января 2024 :: 08:20:
[quote author=2A2D27213727440 link=1705606834/1#1 date=1705658894]Какую СУБД используете?

на 1SQLite можно так:

согласен

$ВидСправочника36.ЮрЛица

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


1C++ rocks!

Сообщений: 53
Зарегистрирован: 13. Июня 2009
Пол: Мужской
Re: Выбрать неопределенный справочник
Ответ #6 - 23. Января 2024 :: 07:58
Печать  
Михаил писал(а) 22. Января 2024 :: 15:18:
State 42000, native 195, message [Microsoft][ODBC SQL Server Driver][SQL Server]'length' is not a recognized built-in function name.

если строку length закомментировать то
State 42000, native 195, message [Microsoft][ODBC SQL Server Driver][SQL Server]'Substr' is not a recognized built-in function name.


В MS SQL исползуют функцию LEN вместо Length в Sqlite
и SUBSTRING вместо Substr
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать