Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Перечисление в запросе (число прочтений - 6368 )
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Перечисление в запросе
05. Августа 2008 :: 07:32
Печать  
ТекстЗапроса ="
|SELECT
| Рег.ВидДокумента ВидДокумента
|, Рег.НомерДок НомерДок
|, CAST(LEFT(Рег.ДатаДок, 8) as DateTime) as ДатаДок
|, Рег.Основание Основание
|, Рег.Сумма Сумма
|, Рег.Касса Касса
|, Рег.Контрагент Контрагент
|, Рег.КонтрагентП КонтрагентП
|, (CASE WHEN Рег.ВидКонтрагента = $Перечисление.ВидыКонтрагентов.Организация THEN ""ЮрЛицо"" ELSE ""ФизЛицо"" END) ВидКонтрагента
|, Рег.ЮридическийАдрес ЮридическийАдрес
|, Рег.ПочтовыйАдрес ПочтовыйАдрес
|, Рег.ИНН ИНН
|, Рег.ДокументСерия Серия
|, Рег.ДокументНомер Номер
|, Рег.ДокументДатаВыдачи ДатаВыдачи
|, Рег.ДокументКемВыдан КемВыдан
|, Рег.Телефоны Телефоны
|, Рег.РасчетыС РасчетыС
|FROM (
|SELECT
|        0 as ВидДокумента
|      , Журнал.DOCNO НомерДок
|      , Журнал.DATE_TIME_IDDOC ДатаДок
|      , ПриходныйОрдерТБ.$ОбщийРеквизит.Основание Основание
|      , $ПриходныйОрдерТБ.Сумма Сумма
|      , Кассы.DESCR Касса
|      , Контрагенты.DESCR Контрагент
|      , $Контрагенты.ПолнНаименование КонтрагентП
|      , $Контрагенты.ВидКонтрагента ВидКонтрагента
|      , $Контрагенты.ЮридическийАдрес ЮридическийАдрес
|      , $Контрагенты.ПочтовыйАдрес ПочтовыйАдрес
|      , $Контрагенты.ИНН ИНН
|      , $Контрагенты.ДокументСерия ДокументСерия
|      , $Контрагенты.ДокументНомер ДокументНомер
|      , $Контрагенты.ДокументДатаВыдачи ДокументДатаВыдачи
|      , $Контрагенты.ДокументКемВыдан ДокументКемВыдан
|      , $Контрагенты.Телефоны Телефоны
|      , $ПриходныйОрдерТБ.ПринятоОт РасчетыС
|      FROM $Документ.ПриходныйОрдерТБ AS ПриходныйОрдерТБ
|      INNER JOIN _1SJOURN AS Журнал ON ПриходныйОрдерТБ.IDDOC = Журнал.IDDOC
|INNER JOIN $Справочник.Контрагенты AS Контрагенты ON $ПриходныйОрдерТБ.Клиент = Контрагенты.ID
|  LEFT OUTER JOIN $Справочник.Кассы AS Кассы ON $ПриходныйОрдерТБ.Касса = Кассы.ID
|   INNER JOIN $Справочник.Фирмы AS Фирмы ON Журнал.$ОбщийРеквизит.Фирма = Фирмы.ID
|      WHERE (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
|       AND ((Журнал.CLOSED & 1) = 1)
|            AND (Фирмы.CODE = :КодФирмы)
|UNION ALL

Привел верхнюю часть запроса, ниже аналогично для другого докумета, все работает, если не ставить CASE, подскажите, как правильно перевести Перечисление в строку?
  
Наверх
 
IP записан
 
AndreyM
Full Member
***
Отсутствует



Сообщений: 166
Местоположение: Харьков
Зарегистрирован: 13. Февраля 2008
Пол: Мужской
Re: Перечисление в запросе
Ответ #1 - 05. Августа 2008 :: 08:55
Печать  
Перечисление, при использовании "$Перечисление.ВидыКонтрагентов.Организация " и так переводится в строку (можешь увидеть, если включишь Отладка(1)).
Вопрос: ЮрЛицо и ФизЛицо у тебя в двойной кавычке?
Нужно в одинарной. Попробуй так:
Код
Выбрать все
(CASE WHEN Рег.ВидКонтрагента = $Перечисление.ВидыКонтрагентов.Организация THEN 'ЮрЛицо' ELSE 'ФизЛицо' END) ВидКонтрагента
  

  

Правильно поставленный вопрос, уже содержит половину ответа.
Наверх
ICQ  
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Перечисление в запросе
Ответ #2 - 05. Августа 2008 :: 09:30
Печать  
AndreyM писал(а) 05. Августа 2008 :: 08:55:
Перечисление, при использовании "$Перечисление.ВидыКонтрагентов.Организация " и так переводится в строку (можешь увидеть, если включишь Отладка(1)).
Вопрос: ЮрЛицо и ФизЛицо у тебя в двойной кавычке?
Нужно в одинарной. Попробуй так:
Код
Выбрать все
(CASE WHEN Рег.ВидКонтрагента = $Перечисление.ВидыКонтрагентов.Организация THEN 'ЮрЛицо' ELSE 'ФизЛицо' END) ВидКонтрагента
  


Попробовал и твой вариант, выдает все равно:
D:\BASE77NEW\ПРОБАПОД8.ERT(87)}: Meta name parser error: неизвестное метаимя или алиас "$Перечисление"
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Перечисление в запросе
Ответ #3 - 05. Августа 2008 :: 10:03
Печать  
Если использовать:

(CASE WHEN Рег.ВидКонтрагента = :ВидКонтрагента THEN 'ЮрЛицо' ELSE 'ФизЛицо' END) ВидКонтрагента

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

Может все-таки у кого есть вариант как перевести перечисление в строку
  
Наверх
 
IP записан
 
AndreyM
Full Member
***
Отсутствует



Сообщений: 166
Местоположение: Харьков
Зарегистрирован: 13. Февраля 2008
Пол: Мужской
Re: Перечисление в запросе
Ответ #4 - 05. Августа 2008 :: 10:27
Печать  
mov68 писал(а) 05. Августа 2008 :: 09:30:
:\BASE77NEW\ПРОБАПОД8.ERT(87)}: Meta name parser error: неизвестное метаимя или алиас "$Перечисление"

а какую версию 1СРР ты используешь? судя по всему у тебя какая-то версия, у которой парсер не понимает метаимя $Перечисление
или всё-таки мы рассматриваем не тот запрос?

чтобы получить строку, выполни инструкцию
Код
Выбрать все
select $Перечисление.ВидыКонтрагентов.Организация  



  

Правильно поставленный вопрос, уже содержит половину ответа.
Наверх
ICQ  
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Перечисление в запросе
Ответ #5 - 05. Августа 2008 :: 10:30
Печать  
а MetaDataWork.ЗначениеВСтрокуБД(<Object>) подойдет?
  
Наверх
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Перечисление в запросе
Ответ #6 - 05. Августа 2008 :: 10:39
Печать  
AndreyM писал(а) 05. Августа 2008 :: 10:27:
mov68 писал(а) 05. Августа 2008 :: 09:30:
:\BASE77NEW\ПРОБАПОД8.ERT(87)}: Meta name parser error: неизвестное метаимя или алиас "$Перечисление"

а какую версию 1СРР ты используешь? судя по всему у тебя какая-то версия, у которой парсер не понимает метаимя $Перечисление
или всё-таки мы рассматриваем не тот запрос?

чтобы получить строку, выполни инструкцию
Код
Выбрать все
select $Перечисление.ВидыКонтрагентов.Организация  





версия 2.0.3.7

на твой запрос выдает Meta name parser error: неизвестное метаимя или алиас "$Перечисление"

$Перечисление.ВидыКонтрагентов понимает, $Перечисление.ВидыКонтрагентов.Организация - нет
Какая версия 1С++ нужна?
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Перечисление в запросе
Ответ #7 - 05. Августа 2008 :: 10:40
Печать  
Цитата:
а MetaDataWork.ЗначениеВСтрокуБД(<Object>) подойдет?


Это можно использовать только при подготовке запроса, в моем случае не подходит, все лучше сделать в запросе
  
Наверх
 
IP записан
 
AndreyM
Full Member
***
Отсутствует



Сообщений: 166
Местоположение: Харьков
Зарегистрирован: 13. Февраля 2008
Пол: Мужской
Re: Перечисление в запросе
Ответ #8 - 05. Августа 2008 :: 11:02
Печать  
mov68 писал(а) 05. Августа 2008 :: 10:39:
версия 2.0.3.7

на твой запрос выдает Meta name parser error: неизвестное метаимя или алиас "$Перечисление"

$Перечисление.ВидыКонтрагентов понимает, $Перечисление.ВидыКонтрагентов.Организация - нет
Какая версия 1С++ нужна?

ты сам ответил на свой вопрос: так понимает, а так нет.
Видимо, в 2.0.3.7 не реализована поддержка конкретного значения перечисления.
я работаю с 2.5 и 3-й версией - всё работает ок!
  

Правильно поставленный вопрос, уже содержит половину ответа.
Наверх
ICQ  
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Перечисление в запросе
Ответ #9 - 05. Августа 2008 :: 11:28
Печать  
AndreyM писал(а) 05. Августа 2008 :: 11:02:
mov68 писал(а) 05. Августа 2008 :: 10:39:
версия 2.0.3.7

на твой запрос выдает Meta name parser error: неизвестное метаимя или алиас "$Перечисление"

$Перечисление.ВидыКонтрагентов понимает, $Перечисление.ВидыКонтрагентов.Организация - нет
Какая версия 1С++ нужна?

ты сам ответил на свой вопрос: так понимает, а так нет.
Видимо, в 2.0.3.7 не реализована поддержка конкретного значения перечисления.
я работаю с 2.5 и 3-й версией - всё работает ок!


Спасибо, взял последнюю версию, стал понимать, но проблема до конца не решена, т.к. в
|, (CASE WHEN Рег.ВидКонтрагента = $Перечисление.ВидыКонтрагентов.Организация THEN 'ФизЛицо' ELSE 'ЮрЛицо' END) ВидКонтрагента
Нетипизированный ВидКонтрагента Сравнивается с перечислением
Куда смотреть? прошу помощи
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Перечисление в запросе
Ответ #10 - 05. Августа 2008 :: 11:38
Печать  
Снимаю вопрос, при
|, (CASE WHEN Рег.ВидКонтрагента = $Перечисление.ВидыКонтрагентов.Организация THEN 'ЮрЛицо' ELSE 'ФизЛицо' END) ВидКонтрагента
все отрабатывает

Огромное спасибо за помощь
  
Наверх
 
IP записан
 
AndreyM
Full Member
***
Отсутствует



Сообщений: 166
Местоположение: Харьков
Зарегистрирован: 13. Февраля 2008
Пол: Мужской
Re: Перечисление в запросе
Ответ #11 - 05. Августа 2008 :: 11:41
Печать  
mov68 писал(а) 05. Августа 2008 :: 11:28:
Нетипизированный ВидКонтрагента Сравнивается с перечислением


... $ВидПеречисления36.ВидыКонтрагентов + Рег.ВидКонтрагента = $Перечисление.ВидыКонтрагентов.Организация ...

если я тебя правильно понял...
  

Правильно поставленный вопрос, уже содержит половину ответа.
Наверх
ICQ  
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Перечисление в запросе
Ответ #12 - 06. Августа 2008 :: 13:51
Печать  
AndreyM писал(а) 05. Августа 2008 :: 11:41:
mov68 писал(а) 05. Августа 2008 :: 11:28:
Нетипизированный ВидКонтрагента Сравнивается с перечислением


... $ВидПеречисления36.ВидыКонтрагентов + Рег.ВидКонтрагента = $Перечисление.ВидыКонтрагентов.Организация ...

если я тебя правильно понял...

Возьму на заметку, но на удивление фраза 2 постами выше сработала, спасибо
  
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Перечисление в запросе
Ответ #13 - 07. Августа 2008 :: 06:43
Печать  
mov68 писал(а) 05. Августа 2008 :: 10:40:
Цитата:
а MetaDataWork.ЗначениеВСтрокуБД(<Object>) подойдет?


Это можно использовать только при подготовке запроса, в моем случае не подходит, все лучше сделать в запросе


даже такой подход не для твоего случая? :
Код
Выбрать все
ТекстЗапроса ="
|SELECT
| Рег.ВидДокумента ВидДокумента  
|, Рег.НомерДок НомерДок
|, CAST(LEFT(Рег.ДатаДок, 8) as DateTime) as ДатаДок
|, Рег.Основание Основание
|, Рег.Сумма Сумма
|, Рег.Касса Касса
|, Рег.Контрагент Контрагент
|, Рег.КонтрагентП КонтрагентП
|, (CASE WHEN Рег.ВидКонтрагента = '" +  + "' THEN ""ЮрЛицо"" ELSE ""ФизЛицо"" END) ВидКонтрагента
|, Рег.ЮридическийАдрес ЮридическийАдрес
|, Рег.ПочтовыйАдрес ПочтовыйАдрес
|, Рег.ИНН ИНН
|, Рег.ДокументСерия Серия
|, Рег.ДокументНомер Номер
|, Рег.ДокументДатаВыдачи ДатаВыдачи
|, Рег.ДокументКемВыдан КемВыдан
|, Рег.Телефоны Телефоны  
|, Рег.РасчетыС РасчетыС
|FROM (
|SELECT
|        0 as ВидДокумента
|      , Журнал.DOCNO НомерДок
|      , Журнал.DATE_TIME_IDDOC ДатаДок
|      , ПриходныйОрдерТБ.$ОбщийРеквизит.Основание Основание
|      , $ПриходныйОрдерТБ.Сумма Сумма
|      , Кассы.DESCR Касса
|      , Контрагенты.DESCR Контрагент
|      , $Контрагенты.ПолнНаименование КонтрагентП
|      , $Контрагенты.ВидКонтрагента ВидКонтрагента
|      , $Контрагенты.ЮридическийАдрес ЮридическийАдрес
|      , $Контрагенты.ПочтовыйАдрес ПочтовыйАдрес
|      , $Контрагенты.ИНН ИНН
|      , $Контрагенты.ДокументСерия ДокументСерия
|      , $Контрагенты.ДокументНомер ДокументНомер
|      , $Контрагенты.ДокументДатаВыдачи ДокументДатаВыдачи
|      , $Контрагенты.ДокументКемВыдан ДокументКемВыдан
|      , $Контрагенты.Телефоны Телефоны
|      , $ПриходныйОрдерТБ.ПринятоОт РасчетыС
|      FROM $Документ.ПриходныйОрдерТБ AS ПриходныйОрдерТБ
|      INNER JOIN _1SJOURN AS Журнал ON ПриходныйОрдерТБ.IDDOC = Журнал.IDDOC
|INNER JOIN $Справочник.Контрагенты AS Контрагенты ON $ПриходныйОрдерТБ.Клиент = Контрагенты.ID
|  LEFT OUTER JOIN $Справочник.Кассы AS Кассы ON $ПриходныйОрдерТБ.Касса = Кассы.ID
|   INNER JOIN $Справочник.Фирмы AS Фирмы ON Журнал.$ОбщийРеквизит.Фирма = Фирмы.ID
|      WHERE (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
|       AND ((Журнал.CLOSED & 1) = 1)
|            AND (Фирмы.CODE = :КодФирмы)
|UNION ALL 

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


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Перечисление в запросе
Ответ #14 - 08. Августа 2008 :: 16:10
Печать  
Цитата:
mov68 писал(а) 05. Августа 2008 :: 10:40:
Цитата:
а MetaDataWork.ЗначениеВСтрокуБД(<Object>) подойдет?


Это можно использовать только при подготовке запроса, в моем случае не подходит, все лучше сделать в запросе


даже такой подход не для твоего случая? :



Я из 1С8.1 через OLE вызываю базу семерки, запускаю 1С++ запрос и из полученной таблицы формирую документы в восьмерке (такой вымороченный перенос). При этом чем меньше OLE объектов при формировании запроса, тем лучше, а чисто в 1С7.7 твой вариант вполне приемлем, спасибо
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать