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


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Язык запросов 1С 8.х
14. Октября 2009 :: 12:37
Печать  
Просветите невежу - есть ли в языке запросов 1С восьмерки встроенная функция аналог COALESCE?
  
Наверх
 
IP записан
 
quick
Junior Member
**
Отсутствует


LinuxMint, python, CodeTyphon

Сообщений: 83
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Re: Язык запросов 1С 8.х
Ответ #1 - 14. Октября 2009 :: 19:24
Печать  
Приведи пример запроса, может просто есть другое решение.
А прямого аналога этой функции помоему нет.
  
Наверх
ICQ  
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Язык запросов 1С 8.х
Ответ #2 - 15. Октября 2009 :: 05:08
Печать  
да я уж попоробовал, но 1С не знает такой функции, пришлось сделать так:
Код
Выбрать все
	CASE
 	WHEN р6.ССылка IS NOT NULL THEN р6.ССылка
 	WHEN р5.Ссылка IS NOT NULL THEN р5.Ссылка
 	WHEN р4.Ссылка IS NOT NULL THEN р4.Ссылка
 	WHEN р3.Ссылка IS NOT NULL THEN р3.Ссылка
 	WHEN р2.Ссылка IS NOT NULL THEN р2.Ссылка
 	ELSE р1.Ссылка
 	END  


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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Язык запросов 1С 8.х
Ответ #3 - 15. Октября 2009 :: 13:37
Печать  
sml писал(а) 15. Октября 2009 :: 05:08:
да я уж попоробовал, но 1С не знает такой функции, пришлось сделать так:
Код
Выбрать все
	CASE
 	WHEN р6.ССылка IS NOT NULL THEN р6.ССылка
 	WHEN р5.Ссылка IS NOT NULL THEN р5.Ссылка
 	WHEN р4.Ссылка IS NOT NULL THEN р4.Ссылка
 	WHEN р3.Ссылка IS NOT NULL THEN р3.Ссылка
 	WHEN р2.Ссылка IS NOT NULL THEN р2.Ссылка
 	ELSE р1.Ссылка
 	END  




Подозреваю что структура данных не правильная. Наверняка можно было сделать проще.
  
Наверх
ICQ  
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Язык запросов 1С 8.х
Ответ #4 - 15. Октября 2009 :: 14:24
Печать  
проще не куда - это кусок кода для получения ссылки на родителя 1-го уровня справочника для элемента от 2-го по 6-й уровень. В 1С++ я для этого юзал скульную функцию COALESCE, а в 8-ке приходится так изгаляться
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Язык запросов 1С 8.х
Ответ #5 - 15. Октября 2009 :: 15:04
Печать  
sml писал(а) 15. Октября 2009 :: 14:24:
проще не куда - это кусок кода для получения ссылки на родителя 1-го уровня справочника для элемента от 2-го по 6-й уровень. В 1С++ я для этого юзал скульную функцию COALESCE, а в 8-ке приходится так изгаляться


Есть же события срабатывающие при записи элемента, заведи доп реквизит, и пиши туда родителя верхнего уровня при записи - всё никаких проблем и головной боли.
  
Наверх
ICQ  
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Язык запросов 1С 8.х
Ответ #6 - 15. Октября 2009 :: 20:35
Печать  
To: Nick
А события переноса элемента в другую группу, равно как переноса родителя элемента, равно как переноса родителя родителя элемента и т.д., тоже отрабатывать? Предположим в папке 2-уровня 10000 элементов и групп. Это надо при переносе все 10000 подчиненных элементов перезаписывать?
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Язык запросов 1С 8.х
Ответ #7 - 16. Октября 2009 :: 15:58
Печать  
maljaev писал(а) 15. Октября 2009 :: 20:35:
To: Nick
А события переноса элемента в другую группу, равно как переноса родителя элемента, равно как переноса родителя родителя элемента и т.д., тоже отрабатывать? Предположим в папке 2-уровня 10000 элементов и групп. Это надо при переносе все 10000 подчиненных элементов перезаписывать?


Думаю достаточно будет хранить верхнего родителя только для всех групп, для элементов не нужно.
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Язык запросов 1С 8.х
Ответ #8 - 19. Октября 2009 :: 07:49
Печать  
sml писал(а) 14. Октября 2009 :: 12:37:
Просветите невежу - есть ли в языке запросов 1С восьмерки встроенная функция аналог COALESCE?

А Вы уверены что эта функция есть в DB Oracle Postr ?
v8 работает с разными sql серверами.
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Язык запросов 1С 8.х
Ответ #9 - 23. Октября 2009 :: 11:30
Печать  
я тут вчера 2 часа времени потратил, пытаясь 8ку заставить выполнить простейший запрос, но она ни в какую:
Сначала я ломился к виртуальной таблице среза последних:
Код
Выбрать все
 FROM РегистрНакопления.ОстаткиТоваров об
| LEFT JOIN
|  РегистрСведений.Цены.СрезПоследних(об.Период) цо
| ON об.Номенклатура = цо.Номенклатура
 


но первосортная упорно сообщала об ошибке (<<>>об.Период)
Тогда я подумал, что 8ка не умеет так работать с виртуальными таблицами и попытался срез последних получить средствами запросов к прямым таблицам. И тут также обломался:

Код
Выбрать все
|FROM
| РегистрНакопления.ОстаткиТоваров об
|  LEFT JOIN
|   (select top 1 ц.Номенклатура, ц.цена from
| РегистрСведений.Цены ц
|  where ц.период = (select max(ц1.Период) from
| РегистрСведений.Цены ц1
|	where ц1.Период <= об.Период
|	and ц.Номенклатура = ц1.Номенклатура
|	group by Номенклатура)
| ) цо 



не нравится ей листинг ц.период = <<>>>(select

Привык на 7ке к хорошему (1С++) - а теперь как из СВ пересел в общий вагон.
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Язык запросов 1С 8.х
Ответ #10 - 23. Октября 2009 :: 11:49
Печать  
не шару в языке запросов 8ки, но раз уж тема в курилкеУлыбка
имхо, тут
Код
Выбрать все
FROM РегистрНакопления.ОстаткиТоваров об
| LEFT JOIN
|  РегистрСведений.Цены.СрезПоследних(об.Период) цо
| ON об.Номенклатура = цо.Номенклатура
 


не хватает скобок, т.е.
| LEFT JOIN
|  (РегистрСведений.Цены.СрезПоследних(об.Период) vt) цо
| ON об.Номенклатура = цо.Номенклатура
РегистрСведений.Цены.СрезПоследних(об.Период) этож наверно что-то типа Виртуальной Таблицы в 1с++, т.е. преобразуется в какой-то select.
Во втором запросе не хватает ON об.Номенклатура = цо.Номенклатура в конце

  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Язык запросов 1С 8.х
Ответ #11 - 26. Октября 2009 :: 12:26
Печать  
sml писал(а) 23. Октября 2009 :: 11:30:
я тут вчера 2 часа времени потратил, пытаясь 8ку заставить выполнить простейший запрос, но она ни в какую:
Сначала я ломился к виртуальной таблице среза последних:
Код
Выбрать все
 FROM РегистрНакопления.ОстаткиТоваров об
| LEFT JOIN
|  РегистрСведений.Цены.СрезПоследних(об.Период) цо
| ON об.Номенклатура = цо.Номенклатура
 


но первосортная упорно сообщала об ошибке (<<>>об.Период)

8-ка не умеет работать со значениями из запросов, используемых как значения в ВТ
т.е. СрезПоследних(об.Период) в 8-ке неверно Печаль
Нужно самому разворачивать запросы.
Например, вот так
http://kb.mista.ru/article.php?id=92
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Язык запросов 1С 8.х
Ответ #12 - 26. Октября 2009 :: 13:55
Печать  
переделал на вариант из мисты:
Код
Выбрать все
|) оо
|LEFT JOIN
|// { получение цен на дату документа регистратора
|(Select pr3.Цена as Цена, pr3.Номенклатура as Номенклатура from
| (SELECT MAX(pr2.Период) as Период,
| pr2.Номенклатура as Номенклатура
| FROM РегистрСведений.Цены as pr2
| WHERE pr2.Период <= оо.Дата
| GROUP BY pr2.Номенклатура
| ) as pr1
| inner join РегистрСведений.Цены as pr3
|  on pr1.Период = pr3.Период
|   AND pr1.Номенклатура = pr3.Номенклатура
|) цо
|// }
|ON оо.Товар = цо.Номенклатура 



и все равно первосортная ругается:
Поле не найдено "оо.Дата"
WHERE pr2.Период <= <<?>>оо.Дата
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Язык запросов 1С 8.х
Ответ #13 - 27. Октября 2009 :: 07:06
Печать  
На мисте ИМХО все-таки другой вариант Улыбка
8-ка не понимает подобного юзания полей, оо.дата нельзя так юзать, только в соединении.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать