Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Периодический реквизит измерения в запросе по рег. (число прочтений - 1974 )
Batchir
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 12. Апреля 2007
Периодический реквизит измерения в запросе по рег.
12. Апреля 2007 :: 14:27
Печать  
Регист остатков.
Измерения регистра: Фирма, Товар, Склад
Ресурсы                    : ОстатокТовара

Запрос по остаткам (Приход). В запросе мне нужно получить ещё периодический реквизит товара СтавкаНДС (Перечисление.ЗначениеНДС)
и установить фильтр по товарам, где СтавкаНДС принадлежит списку.

[code]
Процедура Сформировать()
     Перем ТЗ;
     RS = СоздатьОбъект("ODBCRecordSet");
     RS.УстБД1С();
     
     ТекстЗаропса = "
     |SELECT
     |      VT.Фирма as [Фирма $Справочник.Фирмы],
     |      VT.Товар as [Товар $Справочник.Номенклатура],
     |      VT.Склад as [Склад $Справочник.МестаХранения],
     |      VT.ДокДвиж as [ДокДвиж $Документ],
     |      MAX(VT.ДокДвиж_вид) as ДокДвиж_вид,
     |      Sum(VT.ОстатокТовараПриход) as ОстатокТовараПриход
     |FROM (      SELECT
     |            $РегПрихРасх.Фирма as Фирма,
     |            $РегПрихРасх.Товар as Товар,
     |            $РегПрихРасх.Склад as Склад,
     |            РегПрихРасх.IDDoc as ДокДвиж,
     |            J.IDDocDef as ДокДвиж_вид,
     |            (1-РегПрихРасх.DEBKRED)*$РегПрихРасх.ОстатокТовара as ОстатокТовараПриход
     |            FROM
     |                  $Register.ОстаткиТоваров as РегПрихРасх (nolock)
     |            INNER
     |                  JOIN _1SJourn as J ON РегПрихРасх.IDDOC=J.IDDOC
     |            WHERE
     |                  (J.Date_Time_IDDoc >= :ДатаНачала) AND (J.Date_Time_IDDoc <= :ДатаКонца~)
     |) as VT
     |
     |
     |GROUP BY
     |      Фирма,
     |      Товар,
     |      Склад,
     |      ДокДвиж
     |HAVING
     |      Sum(ОстатокТовараПриход) <> 0
     |";    
     
     ВыбДата=?(НачОст=1,ДатаНачала,ДатаКонца);
     RS.SetTextParam("ДатаНачала", ДатаНачала);
     RS.SetTextParam("ДатаКонца", ДатаКонца);
     RS.SetTextParam("ДатаПериодаОстатков",AddMonth(BegOfMonth(ДатаКонца),-1));
     RS.SetTextParam("ДатаНачалаОстатков", BegOfMonth(ДатаКонца));
     RS.SetTextParam("ДатаКонцаОстатков", ДатаКонца);
КонецПроцедуры
[/code]
  
Наверх
 
IP записан
 
st_alex
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 23. Марта 2007
Re: Периодический реквизит измерения в запросе по
Ответ #1 - 13. Апреля 2007 :: 07:07
Печать  
А если использовать
$ПоследнееЗначение<справочник (к примеру номенклатура )>.<РеквизитСправочника (к примеру СтавкаНДС если конечно это реквизит справ. номенклатура...)>(Товар,ДатаЗнач- это дата на которую надо получить значение) as СтавкаНДС ?

И дальше
where ...   ...And СтавкаНДС = (или in смотря что нужно... ) занчениеНДС...
  
Наверх
 
IP записан
 
Batchir
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 12. Апреля 2007
Re: Периодический реквизит измерения в запросе по
Ответ #2 - 13. Апреля 2007 :: 09:07
Печать  
st_alex писал(а) 13. Апреля 2007 :: 07:07:
А если использовать
$ПоследнееЗначение<справочник (к примеру номенклатура )>.<РеквизитСправочника (к примеру СтавкаНДС если конечно это реквизит справ. номенклатура...)>(Товар,ДатаЗнач- это дата на которую надо получить значение) as СтавкаНДС ?

И дальше
where ...   ...And СтавкаНДС = (или in смотря что нужно... ) занчениеНДС...



Спасибо, помогло
  
Наверх
 
IP записан
 
Batchir
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 12. Апреля 2007
Re: Периодический реквизит измерения в запросе по
Ответ #3 - 13. Апреля 2007 :: 10:05
Печать  
В выше описанном запросе возникла необходимость реализовать следующую функцию

Код
Выбрать все
|ОстТ = Регистр.ОстаткиТоваров.ОстатокТовара;
|Док = Регистр.ОстаткиТоваров.ТекущийДокумент;

|Функция РасходТовара = Расход(ОстТ)
|Когда  
|(
|   (Док.Вид()=ВидЧек) Или
|   (Док.Вид()=ВидРасходная) Или
|   (Док.Вид()=ВидРозничная) Или
|   (   (Док.Вид()=ВидПеремещение) И
|       (  (СокрЛП(Константа.ПрефиксНомеровДокументовУпрУчета) = ЦИБ)ИЛИ
|          (СокрЛП(Константа.ПрефиксНомеровДокументовУпрУчета) = ПБС)
|       ) И
|       (Лев(Док.НомерДок,4) = ЦИБ)
|   )
|);


 


Конктерно меня интересует выделенный кусок кода

ПБС и ЦИБ переменные которые соответственно = "ЦИБ-" и "ПБС-"

Текст текущего запроса  1С++:

Код
Выбрать все
SELECT
	VT.Фирма as [Фирма $Справочник.Фирмы],
	VT.Товар as [Товар $Справочник.Номенклатура],
	VT.Склад as [Склад $Справочник.МестаХранения],
                $ПоследнееЗначение.Номенклатура.СтавкаНДС(VT.Товар, :ДатаКонца) as [Ставка $Перечисление.ЗначенияНДС],
	VT.ДокДвиж as [ДокДвиж $Документ],
	MAX(VT.ДокДвиж_вид) as ДокДвиж_вид,
	Sum(VT.ОстатокТовараРасход) as ОстатокТовараРасход,
	Sum(VT.ОстатокТовараКонечныйОстаток) as ОстатокТовараКонечныйОстаток
FROM (	SELECT
		$РегИтоги.Фирма as Фирма,
		$РегИтоги.Товар as Товар,
		$РегИтоги.Склад as Склад,
		'' as ДокДвиж,
		'' as ДокДвиж_вид,
		0 as ОстатокТовараРасход,
		$РегИтоги.ОстатокТовара as ОстатокТовараКонечныйОстаток
		FROM
			$RegisterTotals.ОстаткиТоваров as РегИтоги (nolock)
		WHERE
			РегИтоги.PERIOD = :ДатаПериодаОстатков~~
			AND (1=0
			OR $РегИтоги.ОстатокТовара<>0)
	UNION ALL
	SELECT
		$РегДвиж.Фирма,
		$РегДвиж.Товар,
		$РегДвиж.Склад,
		РегДвиж.IDDoc as ДокДвиж,
		J.IDDocDef as ДокДвиж_вид,
		0,
		$РегДвиж.ОстатокТовара*(1-регДвиж.DEBKRED*2)
		FROM
			$Register.ОстаткиТоваров as РегДвиж (nolock)
		INNER
			JOIN _1SJourn as J ON РегДвиж.IDDOC=J.IDDOC
		WHERE
			(
                                                  (J.Date_Time_IDDoc >= :ДатаНачалаОстатков) AND (J.Date_Time_IDDoc <= :ДатаКонцаОстатков~) AND
                                                  (
                                                    (J.IDDocDef = :ВидРасходная) OR (J.IDDocDef = :ВидПриходная) OR
                                                    (J.IDDocDef = :ВидОприходования) OR (J.IDDocDef = :ВидЧек) OR
                                                    (J.IDDocDef = :ВидРозничная) OR
                                                    (  (J.IDDocDef = :ВидПеремещение)
                                                    )
                                                  )
                                                )
	UNION ALL	SELECT
		$РегПрихРасх.Фирма as Фирма,
		$РегПрихРасх.Товар as Товар,
		$РегПрихРасх.Склад as Склад,
		РегПрихРасх.IDDoc as ДокДвиж,
		J.IDDocDef as ДокДвиж_вид,
		РегПрихРасх.DEBKRED*$РегПрихРасх.ОстатокТовара as ОстатокТовараРасход,
		0 as ОстатокТовараКонечныйОстаток
		FROM
			$Register.ОстаткиТоваров as РегПрихРасх (nolock)
		INNER
			JOIN _1SJourn as J ON РегПрихРасх.IDDOC=J.IDDOC
		WHERE

                                                 (J.Date_Time_IDDoc >= :ДатаНачала) AND (J.Date_Time_IDDoc <= :ДатаКонца~)
) as VT

INNER JOIN  $Справочник.Номенклатура as СпрН
	      ON   СпрН.ID Like VT.Товар


WHERE
	$ПоследнееЗначение.Номенклатура.СтавкаНДС(СпрН.ID, :ДатаКонца) like :ВыбСтавка

GROUP BY
	Фирма,
	Товар,
	Склад,
	ДокДвиж
HAVING
	Sum(ОстатокТовараРасход) <> 0 or
	Sum(ОстатокТовараКонечныйОстаток) <> 0

 



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