Переключение на Главную Страницу Страницы: 1 ... 45 46 [47] 48 49 ... 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 250631 )
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #690 - 02. Октября 2015 :: 11:33
Печать  
Приветстую!

может кто в курсе?  при ошибке Incorrect syntax near the keyword 'WHERE'.
что в переводе: Неправильный синтаксис около ключевого слова "где"
кто знает? это ошибка до команды ГДЕ, в ней или после нее?

сломал всю башку, вроде все красиво и просто:
Код
Выбрать все
ВЫБРАТЬ
$Жур.ДатаДокумента КАК Дата
$СсылкиДок.Д КАК [Дока $Документ],
ИЗ
ЖурналДокументов КАК Жур $nolock
ЛЕВОЕ СОЕДИНЕНИЕ
Справочник.СсылкиДок КАК СсылкиДок $nolock
ГДЕ
$СсылкиДок.Д = $Жур.ТекущийДокумент 



в отладчике так:
Код
Выбрать все
SELECT
LEFT(Жур.DATE_TIME_IDDOC,8) AS Дата
СсылкиДок.SP25491 AS [Дока $Документ],
FROM
_1SJOURN AS Жур (nolock)
LEFT JOIN
SC25489 AS СсылкиДок (nolock)
WHERE
СсылкиДок.SP25491 = Жур.IDDOC 



а ошибка все таже:  Печаль
State 42000, native 156, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'WHERE'
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #691 - 02. Октября 2015 :: 14:09
Печать  
rom35 писал(а) 02. Октября 2015 :: 11:33:
сломал всю башку, вроде все красиво и просто:

запятая не там, она должна быть не после $СсылкиДок.Д КАК [Дока $Документ], а после $Жур.ДатаДокумента КАК Дата
  
Наверх
www  
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #692 - 02. Октября 2015 :: 14:54
Печать  
сорри это я в коде неправильно скопировал, я запрос уменьшал, он больше был, но даже этот мелкий не работает, естественно так:
Код
Выбрать все
ВЫБРАТЬ
$Жур.ДатаДокумента КАК Дата,
$СсылкиДок.Д КАК [Дока $Документ]
ИЗ
ЖурналДокументов КАК Жур $nolock
ЛЕВОЕ СОЕДИНЕНИЕ
Справочник.СсылкиДок КАК СсылкиДок $nolock
ГДЕ
$СсылкиДок.Д = $Жур.ТекущийДокумент 

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


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #693 - 02. Октября 2015 :: 15:18
Печать  
Попробуй вмето ГДЕ написать ПО, кажется так в этом прямомзапросе ON должно подставляться.
Или убрать слово ЛЕВОЕ.
В зависимости от того что ты хочешь получить....
  
Наверх
www  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #694 - 02. Октября 2015 :: 16:52
Печать  
Конечно там ПО должно быть, ГДЕ это в общем запросе, а не в соединении
Потому и пишет ошибка синтаксиса WHERE (ГДЕ) Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #695 - 02. Октября 2015 :: 17:35
Печать  
А это уже от sql-сервера зависит как такое трактовать.
sqlite, например, на такой запрос не ругается, он JOIN без ON выполняет как CROSS и не важно что там впереди LEFT или RIGHT, но и условие WHERE сработает и результат будет как условие по ON.
Но мне кажется sqlite тут не прав - LEFT или RIGHT JOIN`ы без ON бессмысленны.
  
Наверх
www  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #696 - 03. Октября 2015 :: 11:26
Печать  
CROSS без ON и так будет.
А вот WHERE в JOIN мне кажется как то слабо со стандартом TSQL-92 вяжется, но у мелких тоже не все гладко Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #697 - 07. Октября 2015 :: 14:36
Печать  
Всем спасибо! конечно ПО а не ГДЕ. сам затупил.
ошибки ушли но проблема не решилась. не делал раньше связи справочника с документом, т.е. в справочнике если реквизит с типом документ неопределенного вида ну и надо отобрать документы из определенного интервала т.е. связать журнал документов с справочником.

Код
Выбрать все
ВЫБРАТЬ
	$Жур.ДатаДокумента КАК [ДатаХаоса $Дата],
	$СсылкиДок.Д КАК [ДокСсылкаСпр $Документ],
	$СсылкиДок.ТекущийЭлемент КАК [ЭлСпр $Справочник.СсылкиДок]
ИЗ
	Справочник.СсылкиДок КАК СсылкиДок $nolock
ЛЕВОЕ СОЕДИНЕНИЕ
	ЖурналДокументов КАК Жур $nolock ПО $Жур.ТекущийДокумент = $СсылкиДок.Д
ГДЕ	($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
УПОРЯДОЧИТЬ $Жур.ДатаДокумента ВОЗР 


запрос возвращаяет пустую таблицу.
Если не делать условие соединения
Код
Выбрать все
ПО $Жур.ТекущийДокумент = $СсылкиДок.Д 

и если соединяем Справчник.СсылкаНаДокумент -> журнал документов, то заполняются значения в таблицу только из справочника, если наоборот: журнал -> Справчник.СсылкаНаДокумент, то соответственно только данные из журнала.. в общем связь не получается справочника и документа ни в какую Печаль
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #698 - 07. Октября 2015 :: 17:30
Печать  
Ну так все правильно, что не работает!
Неопределенный документ это строка 13 символов IDDOCDEF(4)+IDDOC(9), а в Журнале IDDOCDEF(4) и IDDOC(9) в разных колонках.
Вырезать надо IDDOC из $СсылкиДок.Д и только потом сравнивать, substr`ом или тем чем он там в поставщике называется.
Ну или склеивать из журнала IDDOCDEF и IDDOC а потом сравнивать с $СсылкиДок.Д
Резать или клеить - смотрим по скорости, раз в 100-1000 будет разница, в зависимости от чего вначале отталкиваемся: от журнала или от справочника.
  
Наверх
www  
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #699 - 08. Октября 2015 :: 07:35
Печать  
СПАСИБО!!! получилось
Код
Выбрать все
|ЛЕВОЕ СОЕДИНЕНИЕ
	|	ЖурналДокументов КАК Жур $nolock ПО (СРЕД($СсылкиДок.Д,5,5) = СРЕД($Жур.ТекущийДокумент,1,5))  

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


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #700 - 08. Октября 2015 :: 18:25
Печать  
rom35 писал(а) 08. Октября 2015 :: 07:35:
СПАСИБО!!! получилось
Код
Выбрать все
|ЛЕВОЕ СОЕДИНЕНИЕ
	|	ЖурналДокументов КАК Жур $nolock ПО (СРЕД($СсылкиДок.Д,5,5) = СРЕД($Жур.ТекущийДокумент,1,5))  


Плохо получилось!
То что этот запрос (в твоем случае) работает, не значит что он правильный.
Ну вот зачем ты вырезал из $Жур.ТекущийДокумент 5 символов?
1. Этим ты сломал документы УРИБ/УРБД.
2. Этим ты сломал поиск по индексу IDDOC в журнале и очень сильно замедлил запрос.
« Последняя редакция: 08. Октября 2015 :: 19:44 - Djelf »  
Наверх
www  
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #701 - 09. Октября 2015 :: 08:24
Печать  
я просто сделал то что смог сообразить..
сделал два запроса:
Код
Выбрать все
ВЫБРАТЬ
	$Жур.ТекущийДокумент КАК [Дока $Строка],
	$Жур.НомерДокумента КАК НомерДокумента
ИЗ
	ЖурналДокументов КАК Жур $nolock
ГДЕ	($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
 


и
Код
Выбрать все
ВЫБРАТЬ
 	$СсылкиДок.Д КАК [Дока $Строка]
ИЗ
   Справочник.СсылкиДок КАК СсылкиДок $nolock 


сравнил возвращаяемые строковые значиния документов, ну и наваял.

УРБД у меня нет так что это неважно, а вот поломка IDDOC я так понимаю в этом: СРЕД($Жур.ТекущийДокумент,1,5))
по сути мне тут вырезать ничего не надо, так как строка и так 5 символов, но как ее перевести в строковый формат я не сообразил, посему сделал так.

хотя переделал сейчас на
Код
Выбрать все
|	ЖурналДокументов КАК Жур $nolock ПО (СРЕД($СсылкиДок.Д,5,6) = $Жур.ТекущийДокумент)"; 

прироста скорости это не дало.
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #702 - 10. Октября 2015 :: 07:30
Печать  
Тебе же пишут IIDOC(9) ты приниципиально режешь 5 Улыбка СсылкиДок видимо 13
Попробуй так, если база DBF:
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО $СсылкиДок.Д = $Жур.ВидДокумента+$Жур.ТекущийДокумент 

  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
rom35
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 12. Ноября 2012
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #703 - 12. Октября 2015 :: 10:36
Печать  
база sql.
попробовал - ругается: State 22018, native 245, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 2B0 1CI82   ' to a column of data type int.
если сделать чтото типа такого
Код
Выбрать все
ЖурналДокументов КАК Жур $nolock ПО (str($СсылкиДок.Д) = $Жур.ВидДокумента+$Жур.ТекущийДокумент) 


то отругивается: Error converting data type varchar to float.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #704 - 12. Октября 2015 :: 11:48
Печать  
первым делом берешь простой запросец, типа:
ВЫБРАТЬ
     *
ИЗ
     ЖурналДокументов КАК Жур $nolock
ГДЕ      ($Жур.ДатаДокумента МЕЖДУ :ДатаНач И :ДатаКон)
И $Жур.ТекущийДокумент=' 1CI82   '
и смотришь - какие там поля и как их собрать, чтобы получилось то, что нужно. А вообще - много разных видов документов может лежать в СсылкиДок.Д ?
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 45 46 [47] 48 49 ... 51
ОтправитьПечать