Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Периодические реквизиты в ДБФ (число прочтений - 5501 )
Falcon
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Местоположение: Пенза
Зарегистрирован: 09. Июля 2007
Пол: Мужской
Периодические реквизиты в ДБФ
10. Июля 2007 :: 05:00
Печать  
Всем привет!
Нужна помощь....
задача состоит в получении выборки справочника ОС, с указанными пользователем реквизитами
с простыми реквизитами всё получается.. скажем вот:

     |SELECT    
     |ОсСр.id As [ОС $Справочник.ОсновныеСредства],
     |$Справочник.ОсновныеСредства.Группа As [Группа $Перечисление.ГруппыОС],
     |$Справочник.ОсновныеСредства.Собственное As [Собственное $Число]
     |FROM $Справочник.ОсновныеСредства as ОсСр

в принципе, уадлось вытащить и единичное значение периодического реквизита для конкретного ОС-а (:ВыбОС), вот:

            |SELECT top 1
            | с.value as [Подразделение $Справочник.Подразделения]
            |FROM
            | 1SConst as с
            |where
            | с.objid = :ВыбОС and
            | с.id = $ИсторияРеквизита.ОсновныеСредства.Подразделение and
            | с.date <= :ВыбДата~~
            |ORDER BY
            | с.date desc, с.time desc


но никак не могу, собрать это в одну таблицу, чтобы для каждого ОС-а получить.... подразделение.....
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #1 - 10. Июля 2007 :: 05:08
Печать  
Может $ПоследнееЗначение. тебе поможет?
  
Наверх
 
IP записан
 
Falcon
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Местоположение: Пенза
Зарегистрирован: 09. Июля 2007
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #2 - 10. Июля 2007 :: 05:10
Печать  
JohnyDeath писал(а) 10. Июля 2007 :: 05:08:
Может $ПоследнееЗначение. тебе поможет?



у меня ДБФ..... ПоследнееЗначение - только СКУЛЬ.... Печаль
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #3 - 10. Июля 2007 :: 05:50
Печать  
Да, просмотрел, извиняюсь.
Вот выдержка из статьи "Эффективное использование MSSQL при помощи ВК 1С"
Цитата:
Пример: Справочник.Номенклатура, подчиненный справочник Цены с периодической ценой.
Код
Выбрать все
ТекстЗапроса = "
|SELECT
|	СпрН.Descr Наименование,
|	$ПоследнееЗначение.Цены.Цена(СпрЦ.ID, :ВыбДата) Цена
|FROM
|	$Справочник.Номенклатура СпрН
|LEFT JOIN
|	$Справочник.Цены СпрЦ ON СпрЦ.ParentExt = СпрН.ID AND
|				   $СпрЦ.ТипЦен = :ТипЦен"; 



NOTE: В DBF метапарсер выдает не работающий запрос.
Попытаемся переложить это в DBF


Код
Выбрать все
|SELECT
|	СпрН.Descr AS Наименование,
|	Цены.Цена as [Цена $Число]
|FROM
|	$Справочник.Номенклатура СпрН
|LEFT JOIN
|	$Справочник.Цены СпрЦ ON СпрЦ.ParentExt = СпрН.ID AND
|				   $СпрЦ.ТипЦен = :ТипЦен";
|LEFT JOIN (
|	SELECT
|		Период.objid as objid,
|		Период.value as Цена
|	FROM 1sconst as Период
|	WHERE
|		Период.date IN
|		(SELECT
|			MAX(Константа.date)
|		FROM 1sconst as Константа
|		WHERE
|			(Константа.date <= :ВыбДата ~~)
|			AND (Константа.id = $ИсторияРеквизита.Цены.Цена)
|			AND (Константа.objid = Период.objid)
|		)
|		AND Период.id = $ИсторияРеквизита.Цены.Цена
|	) as Цены ON Цены.objid = СпрЦ.id 


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


I Love YaBB 2!

Сообщений: 15
Местоположение: Пенза
Зарегистрирован: 09. Июля 2007
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #4 - 10. Июля 2007 :: 07:01
Печать  
вот что получилось

Код
Выбрать все
|SELECT    
|ОсСр.id As [ОС $Справочник.ОсновныеСредства],
|спрОС.Подразделение as [Подразделение $Справочник.Подразделения]
|FROM $Справочник.ОсновныеСредства as ОсСр
|LEFT JOIN (
|	SELECT
|		Период.objid as objid,
|		Период.value as Подразделение
|	FROM 1sconst as Период
|	WHERE
|		Период.date IN
|		(SELECT
|			MAX(Константа.date)
|		FROM 1sconst as Константа
|		WHERE
|			(Константа.date <= :ВыбДата ~~)
|			AND (Константа.id = $ИсторияРеквизита.ОсновныеСредства.Подразделение)
|			AND (Константа.objid = Период.objid)
|		)
|		AND Период.id = $ИсторияРеквизита.ОсновныеСредства.Подразделение
|	) as спрОС ON спрОС.objid = ОсСр.id  



результат:

State 42000, native 200, message [Microsoft][ODBC Visual FoxPro Driver]Syntax error.

Печаль

но тут что-то не так.. у СпрОС нет поля objid.....
  
Наверх
ICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #5 - 10. Июля 2007 :: 07:07
Печать  
Код
Выбрать все
	|LEFT JOIN
	|	(
	|	SELECT
	|		Период.objid as objid,
	|		CAST(Период.value as Numeric(20,6)) as ЦенаПокупкиТовараНаДату
	| 	FROM 1sconst as Период
	| 	WHERE  
	|		Период.date IN
	|			(SELECT
	|				 MAX(Константа.date)
	|			FROM 1sconst as Константа
	| 			WHERE
	|				(Константа.date <= :ДатаКонца ~~)
	|				AND (Константа.id = $ИсторияРеквизита.Цены.Цена)
	|				AND (Константа.objid = Период.objid)
	|			)
	| 		AND Период.id = $ИсторияРеквизита.Цены.Цена
	|	) as ЦеныТоваровПериодическийЗакупки ON ЦеныТоваровПериодическийЗакупки.objid = СпрЦенТоваровЗакупки.ID
 



Вот такой  JOIN со Справочником цены у меня работает нормально

Раздели запрос на простейшие, посмотри где ошибка
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Falcon
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Местоположение: Пенза
Зарегистрирован: 09. Июля 2007
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #6 - 10. Июля 2007 :: 07:09
Печать  
lustin

у тебя тоже подчиненый... соотвественно после ON пишешь

Цены ON Цены.objid = СпрЦ.id

а я не могу так писать..у меня он не подчиненый.....  Печаль
  
Наверх
ICQ  
IP записан
 
Falcon
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Местоположение: Пенза
Зарегистрирован: 09. Июля 2007
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #7 - 10. Июля 2007 :: 07:11
Печать  
lustin писал(а) 10. Июля 2007 :: 07:07:
     
Раздели запрос на простейшие, посмотри где ошибка



пробую шас...
  
Наверх
ICQ  
IP записан
 
Falcon
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Местоположение: Пенза
Зарегистрирован: 09. Июля 2007
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #8 - 10. Июля 2007 :: 08:01
Печать  
не получается ... не могу объеденить два запроса в один.....

зы. на CAST  - ругается...
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #9 - 10. Июля 2007 :: 08:04
Печать  
Все дело в том, что был выбран ODBC Visual FoxPro Driver, который очень ограничен в возможностях.
  
Наверх
ICQ  
IP записан
 
Falcon
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Местоположение: Пенза
Зарегистрирован: 09. Июля 2007
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #10 - 10. Июля 2007 :: 08:11
Печать  
spock писал(а) 10. Июля 2007 :: 08:04:
Все дело в том, что был выбран ODBC Visual FoxPro Driver, который очень ограничен в возможностях.


а что надо было выбрать?

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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #11 - 10. Июля 2007 :: 08:16
Печать  
Falcon писал(а) 10. Июля 2007 :: 08:01:
не получается ... не могу объеденить два запроса в один.....

зы. на CAST  - ругается...


У тебя верси драйвера какая? поробуй по свежее найти, по крайней мере в последнем фоксе - 9
CAST работает
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #12 - 10. Июля 2007 :: 08:22
Печать  
Да, spock, дело говорит: ODBC-драйвер, по-моему, вообще не поддерживает вложенные запросы. Используй OLEDB.
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #13 - 10. Июля 2007 :: 08:53
Печать  
Falcon писал(а) 10. Июля 2007 :: 08:11:
spock писал(а) 10. Июля 2007 :: 08:04:
Все дело в том, что был выбран ODBC Visual FoxPro Driver, который очень ограничен в возможностях.


а что надо было выбрать?

и по отдельности же запросы работают (я про те которые из (0))... просто у меня не получается связать их вместе... Печаль


OLEDB наверное все же лучше, (или запрос для Табличного поля?)

Нашел свою старую тему где spock  мне очень помог своим примером
http://www.1cpp.ru/forum/YaBB.pl?num=1171969328/3#3


  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Falcon
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 15
Местоположение: Пенза
Зарегистрирован: 09. Июля 2007
Пол: Мужской
Re: Периодические реквизиты в ДБФ
Ответ #14 - 10. Июля 2007 :: 09:48
Печать  
огромное спасибо spock за помощь, благодаря ему все получилось...
если кому интересно вот результат:

     
Код
Выбрать все
|SELECT
|   ОсСр.id as [ОС $Справочник.ОсновныеСредства],
|   cПодразделение.value as [Подразделение $Справочник.Подразделения]
|FROM $Справочник.ОсновныеСредства as ОсСр
|LEFT JOIN (
|   SELECT  
|	 c_dt.objid as objid,
|	 c_dt.value as value
|   FROM 1sconst as c_dt
|   WHERE
|	 c_dt.date IN (SELECT MAX(c.date)
|	     FROM 1sconst as c
|	     WHERE
|		   (c.date <= :ВыбДата ~~)
|		   AND (c.id = $ИсторияРеквизита.ОсновныеСредства.Подразделение)
|		   AND (c.objid = c_dt.objid)
|	 ) AND c_dt.id = $ИсторияРеквизита.ОсновныеСредства.Подразделение
|) as cПодразделение ON cПодразделение.objid = ОсСр.id  
 

  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать