Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Как получить цены на документ (число прочтений - 3582 )
Vaicartana
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 50
Местоположение: Far, Far Away...
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Как получить цены на документ
26. Февраля 2013 :: 09:01
Печать  
Добрый день!
хочу выбрать цены номенклатуры на каждый документ из запроса. Получить цены на конец периода проблем нет, а на документ что то не получается...

вот что есть сейчас
Код
Выбрать все
		|SELECT
		|	$Док.Контрагент as [Контрагент $Справочник.Контрагенты],
		|	$Док.Договор as [Договор $Справочник.Договоры],
		|	Док.iddoc as [Док $Документ.Реализация],
		|	$Док.СуммаВзаиморасчетов as Сумма,
		|	SUM( cast(цены.value as Num(10,2)) * cast(IIF($Док.ЕстьСкидкаКолво = 1,$ДокС.Количество*(1-$Спр.ПроцентСкидки/100),$ДокС.Количество) as Num(10,3)) ) as Себестоимость
		|FROM $Документ.Реализация AS Док
		|INNER JOIN $Документ.СчетФактураВыданный СФ ON $СФ.ДокОснование LIKE '%'+Док.iddoc
		|INNER JOIN $ДокументСтроки.Реализация ДокС ON ДокС.iddoc = Док.iddoc
		|INNER JOIN $Справочник.Номенклатура Спр ON Спр.id = $ДокС.Номенклатура
		|INNER JOIN 1sjourn Жур ON Жур.iddoc = Док.iddoc
		|	AND Жур.Date BETWEEN :НачДата~~ AND :КонДата~~
		|	 AND Жур.Closed = 1
		|	"+?(ПустоеЗначение(ВыбФирма)=0,"AND $ОбщийРеквизит.Фирма = :ВыбФирма","")+"
		|LEFT JOIN
		|	$Справочник.Цены СпрЦ ON СпрЦ.ParentExt = $ДокС.Номенклатура
		|                           AND $СпрЦ.ТипЦен = :ТипЦен
		|LEFT JOIN (

		|	SELECT
		|		MAX(Цена.date) as date,
		|		Цена.objid
		|		FROM 1sconst as Цена
		|		WHERE (цена.id = $ИсторияРеквизита.Цены.Цена)
		|			AND Цена.date<=:КонДата~~
		|		GROUP BY Цена.objid
		|	) дцена ON дцена.objid = СпрЦ.id
		|LEFT JOIN 1sconst цены ON цены.objid = СпрЦ.id
		|                           AND цены.date = дцена.date
		|							AND (цены.id = $ИсторияРеквизита.Цены.Цена)

		|WHERE (1=1)
		|				"+?(ПустоеЗначение(СписокДоговоров)=0,"AND $Док.Договор = :ВыбДоговор","")+"
		|				"+?(ПустоеЗначение(ВыбДокумент)=0,"AND Док.iddoc = :ВыбДокумент","")+"
		|GROUP BY $Док.Контрагент,$Док.Договор,Док.iddoc,$Док.СуммаВзаиморасчетов,Жур.Date, Жур.Time
		|ORDER BY Жур.Date DESC, Жур.Time DESC
		|";

 


но так цена получается на конец выбранного периода, а не на документ
хелп ми))
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Как получить цены на документ
Ответ #1 - 26. Февраля 2013 :: 14:01
Печать  
Могу ошибаться но по-моему так
Код
Выбрать все
	|SELECT
	|	$Док.Контрагент as [Контрагент $Справочник.Контрагенты],
	|	$Док.Договор as [Договор $Справочник.Договоры],
	|	Док.iddoc as [Док $Документ.Реализация],
	|	$Док.СуммаВзаиморасчетов as Сумма,
	|	SUM( cast(цены.value as Num(10,2)) * cast(IIF($Док.ЕстьСкидкаКолво = 1,$ДокС.Количество*(1-$Спр.ПроцентСкидки/100),$ДокС.Количество) as Num(10,3)) ) as Себестоимость
	|,  $ПоследнееЗначение.Цены.Цена(СпрЦен.ID,CAST(LEFT(Жур.DateTimeIddoc,8) as datetime)) as ЦенаНаДокумент
	|FROM $Документ.Реализация AS Док
	|INNER JOIN $Документ.СчетФактураВыданный СФ ON $СФ.ДокОснование LIKE '%'+Док.iddoc
	|INNER JOIN $ДокументСтроки.Реализация ДокС ON ДокС.iddoc = Док.iddoc
	|INNER JOIN $Справочник.Номенклатура Спр ON Спр.id = $ДокС.Номенклатура
	|INNER JOIN 1sjourn Жур ON Жур.iddoc = Док.iddoc
	|	AND Жур.Date BETWEEN :НачДата~~ AND :КонДата~~
	|	 AND Жур.Closed = 1 AND (Жур.IDDOCDEF = $ВидДокумента.Реализация)
	|	"+?(ПустоеЗначение(ВыбФирма)=0,"AND $ОбщийРеквизит.Фирма = :ВыбФирма","")+"
	|LEFT JOIN
	|	$Справочник.Цены СпрЦ ON СпрЦ.ParentExt = $ДокС.Номенклатура
	|				   AND $СпрЦ.ТипЦен = :ТипЦен
	|WHERE (1=1)
	|				"+?(ПустоеЗначение(СписокДоговоров)=0,"AND $Док.Договор = :ВыбДоговор","")+"
	|				"+?(ПустоеЗначение(ВыбДокумент)=0,"AND Док.iddoc = :ВыбДокумент","")+"
	|GROUP BY $Док.Контрагент,$Док.Договор,Док.iddoc,$Док.СуммаВзаиморасчетов,Жур.Date, Жур.Time
	|ORDER BY Жур.Date DESC, Жур.Time DESC
	|";
 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как получить цены на документ
Ответ #2 - 26. Февраля 2013 :: 15:00
Печать  
у него дбф, там нет ПоследнееЗначение
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как получить цены на документ
Ответ #3 - 26. Февраля 2013 :: 23:32
Печать  
Зато можно посмотреть во что оно разворачивается и сделать по аналогии Улыбка
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Vaicartana
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 50
Местоположение: Far, Far Away...
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Re: Как получить цены на документ
Ответ #4 - 26. Февраля 2013 :: 23:43
Печать  
leshik писал(а) 26. Февраля 2013 :: 14:01:
Могу ошибаться но по-моему так

хм... т.е. Вы предлогаете в самом селекте... Надо попробовать, действительно, что то я на джоинах зациклился.
  
Наверх
 
IP записан
 
Vaicartana
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 50
Местоположение: Far, Far Away...
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Re: Как получить цены на документ
Ответ #5 - 26. Февраля 2013 :: 23:46
Печать  
Кстати, для интереса, зачем добавлено условие AND (Жур.IDDOCDEF = $ВидДокумента.Реализация) ведь связка и так идет по iddoc который не Реализацией быть не может?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Как получить цены на документ
Ответ #6 - 27. Февраля 2013 :: 04:47
Печать  
Вадимко писал(а) 26. Февраля 2013 :: 23:32:
Зато можно посмотреть во что оно разворачивается и сделать по аналогии Улыбка

Оно разворачивается в скалярный подзапрос, а дбф-фокспро провайдер этого не понимает.
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как получить цены на документ
Ответ #7 - 27. Февраля 2013 :: 14:29
Печать  
Vaicartana писал(а) 26. Февраля 2013 :: 23:46:
Кстати, для интереса, зачем добавлено условие AND (Жур.IDDOCDEF = $ВидДокумента.Реализация) ведь связка и так идет по iddoc который не Реализацией быть не может?


в этом случае для таблицы _1sjourn
используется индекс  DOCTYPE   ( поля индекса IDDOCDEF, DATE_TIME_IDDOC )
что значительно лучше чем
индекс  ACDATETIME ( поля индекса DATE_TIME_IDDOC )
когда нет этого условия


  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как получить цены на документ
Ответ #8 - 28. Февраля 2013 :: 22:58
Печать  
trad писал(а) 27. Февраля 2013 :: 04:47:
Вадимко писал(а) 26. Февраля 2013 :: 23:32:
Зато можно посмотреть во что оно разворачивается и сделать по аналогии Улыбка

Оно разворачивается в скалярный подзапрос, а дбф-фокспро провайдер этого не понимает.


с sqllite вроде можно
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать