Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Срез и движения периодических реквизитов (DBF) - как? (число прочтений - 4872 )
arsik
YaBB Newbies
*
Отсутствует



Сообщений: 5
Местоположение: Ижевск
Зарегистрирован: 19. Июля 2013
Пол: Мужской
Срез и движения периодических реквизитов (DBF) - как?
19. Июля 2013 :: 05:30
Печать  
Стандартная ситуация - хочу получить срез на начало периода и все движения по справочнику цены.
Поиском примеров даже не нашел, не знаю, с какой стороны взяться.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Срез и движения периодических реквизитов (DBF) - как?
Ответ #1 - 19. Июля 2013 :: 06:07
Печать  
Смотря, через чего делается прямой запрос  к дбф
  
Наверх
 
IP записан
 
arsik
YaBB Newbies
*
Отсутствует



Сообщений: 5
Местоположение: Ижевск
Зарегистрирован: 19. Июля 2013
Пол: Мужской
Re: Срез и движения периодических реквизитов (DBF) - как?
Ответ #2 - 19. Июля 2013 :: 06:32
Печать  
Ну мне без разницы, через что делать. Хоть через OLEDB хоть ODBC.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Срез и движения периодических реквизитов (DBF) - как?
Ответ #3 - 19. Июля 2013 :: 09:17
Печать  
через odbc запрос к дбф лучше не делать вообще,

для oledb смотри примеры тут:
http://www.script-coding.com/v77tables.html#2.5.6.

для попадания в индекс их надо правильно только переписать.

ЗЫ: можешь еще использовать 1sqlite, там проще, там не надо писать правильный запрос для попадания в индес, оно само подбирает нужный.

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



Сообщений: 5
Местоположение: Ижевск
Зарегистрирован: 19. Июля 2013
Пол: Мужской
Re: Срез и движения периодических реквизитов (DBF) - как?
Ответ #4 - 22. Июля 2013 :: 05:10
Печать  
Eprst писал(а) 19. Июля 2013 :: 09:17:
через odbc запрос к дбф лучше не делать вообще,

для oledb смотри примеры тут:
http://www.script-coding.com/v77tables.html#2.5.6.

для попадания в индекс их надо правильно только переписать.

ЗЫ: можешь еще использовать 1sqlite, там проще, там не надо писать правильный запрос для попадания в индес, оно само подбирает нужный.



Нигде не нашел мануалов, как пользоваться 1sqlite. Помогите.

Сделал срез, на дату oledb (посмотрел в примерах), но как движения выбрать непонимаю пока
Код
Выбрать все
	Запрос = База.СоздатьКоманду();
	ИмяТаблицыНоменклатуры = "#СпНоменклатуры";
	тура");
	Запрос.УстановитьТекстовыйПараметр("ВыбДата",ДатаСреза);
	Запрос.УстановитьТекстовыйПараметр("ТипЦен",ТипЦены);

	ТекстЗапроса = "
		|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
		|WHERE
		|	СпрНоменклатура.ID IN (SELECT Val FROM "+ИмяТаблицыНоменклатуры+")";
 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Срез и движения периодических реквизитов (DBF) - как?
Ответ #5 - 22. Июля 2013 :: 05:23
Печать  
Если нужны все значения - то просто left join 1sconst к табличке с ценами и привет..
без подзапроса на поиск максимальной даты и последнего значения.
  
Наверх
 
IP записан
 
arsik
YaBB Newbies
*
Отсутствует



Сообщений: 5
Местоположение: Ижевск
Зарегистрирован: 19. Июля 2013
Пол: Мужской
Re: Срез и движения периодических реквизитов (DBF) - как?
Ответ #6 - 22. Июля 2013 :: 08:56
Печать  
Добил. Но не могу победить условие
WHERE (Подзапрос.Цена > 0) - FAILED! ICommandText::Execute(): Operator/operand type mismatch.
Без условия все работает.

Код
Выбрать все
	ТекстЗапроса = "
		|SELECT  
		|	Подзапрос.ДатаСреза as ДатаСреза,
		|	Подзапрос.ТипЦены as [ТипЦены $Справочник.ТипыЦен],
		|	Подзапрос.Номенклатура AS [Номенклатура $Справочник.Номенклатура],
		|	MAX(Подзапрос.Цена) as [Цена $Число]
		|
		|FROM(SELECT  
		|		СпрНоменклатура.ID AS Номенклатура,
		|		$СпрЦены.ТипЦен as ТипЦены,
		|		:ВыбДата~~ as ДатаСреза,
		|		Цены.Цена as Цена
		|	FROM
		|		$Справочник.Номенклатура СпрНоменклатура
		|	INNER JOIN
		|		$Справочник.Цены СпрЦены ON СпрЦены.ParentExt = СпрНоменклатура.ID
		|	                          
		|	INNER JOIN (
		|		SELECT
		|			Период.objid as objid,
		|			Период.value as Цена,
		|			Период.date
		|		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
		|	WHERE
		|		СпрНоменклатура.ID IN (SELECT Val FROM "+ИмяТаблицыНоменклатуры+")
		|
		|	UNION ALL
		|
		|	SELECT  
		|		СпрНоменклатура.ID,
		|		$СпрЦены.ТипЦен,
		|		Цены.date,
		|		Цены.Цена
		|	FROM
		|		$Справочник.Номенклатура СпрНоменклатура
		|	INNER JOIN
		|		$Справочник.Цены СпрЦены ON СпрЦены.ParentExt = СпрНоменклатура.ID
		|	                          
		|	INNER JOIN (
		|		SELECT
		|			Период.objid as objid,
		|			Период.value as Цена,
		|		Период.date
		|		FROM 1sconst as Период
		|		WHERE
		|			Период.date > :ВыбДата~~
		|			AND Период.id = $ИсторияРеквизита.Цены.Цена
		|		) as Цены ON Цены.objid = СпрЦены.id
		|	WHERE
		|		СпрНоменклатура.ID IN (SELECT Val FROM "+ИмяТаблицыНоменклатуры+")) AS Подзапрос
		|
		|WHERE (Подзапрос.Цена > 0)
		|
		|GROUP BY
		|	Подзапрос.ДатаСреза,
		|	Подзапрос.ТипЦены,
		|	Подзапрос.Номенклатура
		|
		|ORDER BY
		|	Подзапрос.ДатаСреза,
		|	Подзапрос.ТипЦены,
		|	Подзапрос.Номенклатура
		|";
 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Срез и движения периодических реквизитов (DBF) - как?
Ответ #7 - 22. Июля 2013 :: 11:43
Печать  
какую то бредятину написал..
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Срез и движения периодических реквизитов (DBF) - как?
Ответ #8 - 22. Июля 2013 :: 11:54
Печать  
Код
Выбрать все
		|SELECT
		|		СпрНоменклатура.ID AS [Номенклатура $Справочник.Номенклатура],
		|		$СпрЦены.ТипЦен as [ТипЦены $Справочник.ТипыЦен],
		|		Константа.value as Цена,
		|		Константа.date as ДатаУстановки
		|	FROM
		|		$Справочник.Номенклатура СпрНоменклатура
		|	INNER JOIN
		|		$Справочник.Цены СпрЦены ON СпрЦены.ParentExt = СпрНоменклатура.ID
		|
		|	LEFT JOIN 1sconst as Константа on
		|				Константа.id = $ИсторияРеквизита.Цены.Цена
		|				AND Константа.objid = СпрЦены.id
		|	WHERE
		|		СпрНоменклатура.ID IN (SELECT Val FROM "+ИмяТаблицыНоменклатуры+")
		|
		|ORDER BY
		|	Константа.date,
		|	$СпрЦены.ТипЦен,
		|	СпрНоменклатура.ID 



если нужна только номенклатура, где установлена хоть какая либо цена - то выкинуть из этого запроса обращение к справочнику Номенклатура и оставить только запрос к Ценам + номенклатуру в селекте смотреть как СпрЦены.ParentExt
  
Наверх
 
IP записан
 
arsik
YaBB Newbies
*
Отсутствует



Сообщений: 5
Местоположение: Ижевск
Зарегистрирован: 19. Июля 2013
Пол: Мужской
Re: Срез и движения периодических реквизитов (DBF) - как?
Ответ #9 - 22. Июля 2013 :: 12:27
Печать  
Eprst писал(а) 22. Июля 2013 :: 11:43:
какую то бредятину написал..

Не, я срез на начало делаю + все движения истории цен после. В 1 таблицу собираю и группирую ее по датам и далее

Eprst писал(а) 22. Июля 2013 :: 11:54:
если нужна только номенклатура, где установлена хоть какая либо цена - то выкинуть из этого запроса обращение к справочнику Номенклатура и оставить только запрос к Ценам + номенклатуру в селекте смотреть как СпрЦены.ParentExt


Точно, не подумал
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Срез и движения периодических реквизитов (DBF) - как?
Ответ #10 - 22. Июля 2013 :: 12:35
Печать  
вот вся история цен после делается моим запросом с условием на дату..
усё.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать