Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) Виртуальная таблица остатков и оборотов (число прочтений - 7493 )
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Виртуальная таблица остатков и оборотов
Ответ #15 - 05. Марта 2008 :: 10:58
Печать  
sadovnikov писал(а) 05. Марта 2008 :: 10:52:
Это ты так связывание переписал?


дык, я взял за основу инфу из доки (Глава 11):

Код
Выбрать все
ТекстЗапроса = "
|SELECT
|	РегТовар.Товар Товар,
|	РегСклад.Склад Склад,
|	РегКолво.Количество Количество
|FROM
|(
|SELECT DISTINCT
|	РегТовар.Товар Товар
|FROM
|	$РегистрОстатки.ОстаткиТоваров(:ВыбДата~,,
|					   Фирма = :ВыбФирма,
|					  (Товар), (Количество)) as РегТовар
|) as РегТовар,
|(
|SELECT DISTINCT
|	РегСклад.Склад Склад
|FROM
|	$РегистрОстатки.ОстаткиТоваров(:ВыбДата~,,
|					   Фирма = :ВыбФирма,
|					  (Склад), (Количество)) as РегСклад
|) as РегСклад
|LEFT JOIN
|(
|SELECT
|	РегКолво.КоличествоОстаток Количество,
|	РегКолво.Товар Товар,
|	РегКолво.Склад Склад
|FROM
|	$РегистрОстатки.ОстаткиТоваров(:ВыбДата~,,
|					   Фирма = :ВыбФирма,
|					  (Склад, Товар), (Количество)) as РегКолво
|) as РегКолво ON РегКолво.Склад = РегСклад.Склад AND
|		     РегКолво.Товар = РегТовар.Товар
|";
 


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


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Виртуальная таблица остатков и оборотов
Ответ #16 - 05. Марта 2008 :: 12:44
Печать  
заработало, но только в случае объединения первых 2 запросов в подзапрос:

вот рабочий код с группировками:

Код
Выбрать все
то, что выдал парсер
SELECT
	Tr.ГрпТов as [ГрпТов $Справочник.Номенклатура],
	max(Tr.НаимТов) НаимТов,
	max(Tr.Артикул) as Артикул,
	max(Tr.ХолдКод) as ХолдКод,
	max(Tr.Штрихкод) as Штрихкод,
	Tr.Магазин,
	min(Tr.НаимМаг) НаимМаг,
	sum(Tr.НачОст) НачОст,
	sum(Tr.РасхКол) РасхКол,
	sum(Tr.КонОст) КонОст,
	sum(Tr.РасхСум) РасхСум
	, GROUPING(Tr.ГрпТов) ГрТов
	, GROUPING(Tr.Магазин) ГрМаг
FROM (
 SELECT
	НомСкл.Магазин,
	НомСкл.НаимМаг,
	НомСкл.Товар,
	Выб.НачОст,
	Выб.РасхКол,
	Выб.КонОст,
	Выб.РасхСум,
	НомСкл.ГрпТов,
	НомСкл.НаимТов,
	НомСкл.Артикул,
	НомСкл.ХолдКод,
	НомСкл.Штрихкод

FROM
(SELECT DISTINCT
	Магаз.Магазин,
	Магаз.НаимМаг,
	Номен.Товар,
	Номен.ГрпТов,
	Номен.НаимТов,
	Номен.Артикул,
	Номен.ХолдКод,
	Номен.Штрихкод

FROM
(SELECT  DISTINCT
	Skl.Descr as НаимМаг,
	RegM.Магазин as Магазин
FROM
   #T65A81E1437854484B7569250CD4687B5 as RegM
 INNER JOIN	 sc31 as Skl
	ON skl.ID = RegM.Магазин
 WHERE	RegM.ВидДокумента = 6179
) as Магаз,
(
SELECT  DISTINCT
	RegT.Товар as Товар,
	Tovr.PARENTID as ГрпТов,
	Tovr.Descr as НаимТов,
	Tovr.sp3752 as Артикул,
	Tovr.sp6394 as ХолдКод,
	Tovr.sp3559 as Штрихкод
FROM
   #TA24227557DA34EC29FE797DC00730D8B as RegT
INNER JOIN
	sc33 as Tovr ON RegT.Товар = Tovr.ID
	WHERE	Tovr.ID IN (SELECT Val From #Stov)
)
as Номен) as НомСкл

 LEFT JOIN
 (SELECT
	Max(Reg.ВидДокумента) as Док_вид,
	Reg.Магазин as Магазин,
	Reg.Товар as Товар,
	sum(Reg.ОстатокТовараНачальныйОстаток) as НачОст,
	sum(Reg.ОстатокТовараРасход) as РасхКол,
	sum(Reg.ОстатокТовараКонечныйОстаток) as КонОст,
	sum(Reg.ПродСтоимостьРасход) as РасхСум
FROM
   #TD44D44783C99410B85821E53E99DD5F4 as Reg
WHERE	Reg.ВидДокумента = 6179

GROUP BY
	Reg.Товар, Reg.Магазин
) as Выб
  ON  НомСкл.Магазин = Выб.Магазин AND НомСкл.Товар = Выб.Товар
) as Tr

GROUP BY  
 	Tr.ГрпТов,
	Tr.Магазин
 WITH ROLLUP
ORDER BY
	Tr.ГрпТов, Tr.НаимТов, Tr.НаимМаг, ГрТов Desc , ГрМаг desc  



а сам код 1С:

Код
Выбрать все
	//{ПрямойЗапрос
	ТекстЗ = "
	|SELECT
	|	Tr.ГрпТов as [ГрпТов $Справочник.Номенклатура],
	|	max(Tr.НаимТов) НаимТов,
	|	max(Tr.Артикул) as Артикул,
	|	max(Tr.ХолдКод) as ХолдКод,
	|	max(Tr.Штрихкод) as Штрихкод,
	|	Tr.Магазин,
	|	min(Tr.НаимМаг) НаимМаг,
	|	sum(Tr.НачОст) НачОст,
	|	sum(Tr.РасхКол) РасхКол,
	|	sum(Tr.КонОст) КонОст,
	|	sum(Tr.РасхСум) РасхСум
	|	, GROUPING(Tr.ГрпТов) ГрТов
	|	"+?(флИтого=1,", GROUPING(Tr.Магазин) ГрМаг","")+"
	|FROM (
	| SELECT
	|	НомСкл.Магазин,
	|	НомСкл.НаимМаг,
	|	НомСкл.Товар,
	|	Выб.НачОст,
	|	Выб.РасхКол,
	|	Выб.КонОст,
	|	Выб.РасхСум,
	|	НомСкл.ГрпТов,
	|	НомСкл.НаимТов,
	|	НомСкл.Артикул,
	|	НомСкл.ХолдКод,
	|	НомСкл.Штрихкод
	|
	|FROM
	|(SELECT DISTINCT
	|	Магаз.Магазин,
	|	Магаз.НаимМаг,
	|	Номен.Товар,
	|	Номен.ГрпТов,
	|	Номен.НаимТов,
	|	Номен.Артикул,
	|	Номен.ХолдКод,
	|	Номен.Штрихкод
	|
	|FROM
	|(SELECT  DISTINCT
	|	Skl.Descr as НаимМаг,
	|	RegM.Магазин as Магазин
	|FROM
	|   $РегистрОстаткиОбороты.ТоварыВМагазине(:НачПериода, :КонПериода~, Документ, Движения,
	|		,
	|			Магазин IN (SELECT Val From #SMag) and
	|			Товар IN (SELECT Val From #Stov),
	|		(Магазин,Товар), (ОстатокТовара, ПродСтоимость)) as RegM
	| INNER JOIN	 $Справочник.МестаХранения as Skl
	|	ON skl.ID = RegM.Магазин
	| WHERE	RegM.ВидДокумента = $ВидДокумента.ОтчетКассовойСмены
	|) as Магаз,
	|(
	|SELECT  DISTINCT
	|	RegT.Товар as Товар,
	|	Tovr.PARENTID as ГрпТов,
	|	Tovr.Descr as НаимТов,
	|	$Tovr.Артикул as Артикул,
	|	$Tovr.ХолдКод as ХолдКод,
	|	$Tovr.Штрихкод as Штрихкод
	|FROM
	|   $РегистрОстаткиОбороты.ТоварыВМагазине(:НачПериода, :КонПериода~, Документ, Движения,
	|		,
	|			Магазин IN (SELECT Val From #SMag) and
	|			Товар IN (SELECT Val From #Stov),
	|		(Магазин,Товар), (ОстатокТовара, ПродСтоимость)) as RegT
	|"+?(флВсе=1,"RIGHT","INNER")+" JOIN
	|	$Справочник.Номенклатура as Tovr ON RegT.Товар = Tovr.ID
	|	WHERE	Tovr.ID IN (SELECT Val From #Stov)
	|)
	|as Номен) as НомСкл
	|
	| LEFT JOIN
	| (SELECT
	|	Max(Reg.ВидДокумента) as Док_вид,
	|	Reg.Магазин as Магазин,
	|	Reg.Товар as Товар,
	|	sum(Reg.ОстатокТовараНачальныйОстаток) as НачОст,
	|	sum(Reg.ОстатокТовараРасход) as РасхКол,
	|	sum(Reg.ОстатокТовараКонечныйОстаток) as КонОст,
	|	sum(Reg.ПродСтоимостьРасход) as РасхСум
	|FROM
	|   $РегистрОстаткиОбороты.ТоварыВМагазине(:НачПериода, :КонПериода~, Документ, Движения,
	|		,
	|			Магазин IN (SELECT Val From #SMag) and
	|			Товар IN (SELECT Val From #Stov),
	|		(Магазин,Товар), (ОстатокТовара, ПродСтоимость)) as Reg
	|WHERE	Reg.ВидДокумента = $ВидДокумента.ОтчетКассовойСмены
	|
	|GROUP BY
	|	Reg.Товар, Reg.Магазин
	|) as Выб
	|  ON  НомСкл.Магазин = Выб.Магазин AND НомСкл.Товар = Выб.Товар
	|) as Tr
	|
	|GROUP BY
	| 	Tr.ГрпТов,
	|	Tr.Магазин
	| WITH ROLLUP
	|ORDER BY
	|	Tr.ГрпТов, Tr.НаимТов, Tr.НаимМаг, ГрТов Desc "+?(флИтого=1,", ГрМаг desc","")+"
	|"//}прямойЗАПРОС
	;
 

  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Виртуальная таблица остатков и оборотов
Ответ #17 - 05. Марта 2008 :: 13:08
Печать  
Блин, ну сделай ты уже нормальное связывание... Напиши LEFT JOIN...
И проблема отпадет сама собой...
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Виртуальная таблица остатков и оборотов
Ответ #18 - 05. Марта 2008 :: 14:06
Печать  
sadovnikov писал(а) 05. Марта 2008 :: 13:08:
Напиши LEFT JOIN...

а зачем, когда мне надо умножение 2 таблиц (магазины в отчете разворачиваются вправо)

или я что-то не доежжаю?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать