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


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Виртуальная таблица остатков и оборотов
28. Февраля 2008 :: 12:56
Печать  
Следующий запрос через виртуальную таблицу остатков и оборотов не может работать по причине того, что IDDocDef не понятен для SQL

Код
Выбрать все
	Зпр = СоздатьОбъект("ODBCRecordset");
	Зпр.УстановитьТекстовыйПараметр("НачПериода", ВыбНачПериода);
	Зпр.УстановитьТекстовыйПараметр("КонПериода", ВыбКонПериода);
	//{ПрямойЗапрос
	ТекстЗ = "
	|SELECT
	|	Reg.Магазин as [Магазин $Справочник.МестаХранения],
	|	Reg.Товар as [Товар $Справочник.Номенклатура],
	|	Tovr.Descr as НаимТов,
	|	$Tovr.Артикул as Артикул,
	|	$Tovr.ХолдКод as ХолдКод,
	|	Reg.ОстатокТовараНачальныйОстаток as НачОст,
	|	Reg.ОстатокТовараРасход as РасхКол,
	|	Reg.ОстатокТовараКонечныйОстаток as КонОст,
	|	Reg.ПродСтоимостьРасход as РасхСум
	|
	|FROM
	|   $РегистрОстаткиОбороты.ТоварыВМагазине(:НачПериода, :КонПериода~, "+?(флПоНеделям=1,"Неделя, Движения","Период,")+",
	|
	|		LEFT JOIN $Справочник.Номенклатура as Tov ON Товар = Tov.ID,
	|		IDDocDef = $ВидДокумента.ОтчетКассовойСмены
	|			and Магазин IN (SELECT Val From #SMag)
	|			and Tov.ID IN (SELECT Val From #Stov),
	|		(Магазин,Товар), (ОстатокТовара, ПродСтоимость)) as Reg,
	|	_1sjourn as Jurn,
	|	$Справочник.Номенклатура as Tovr
	|WHERE
	|	Reg.Товар = Tovr.ID
	//|		and Jurn.IDDocDef = $ВидДокумента.ОтчетКассовойСмены
	|
	|GROUP BY
	|	Reg.Товар, Tovr.Descr, $Tovr.Артикул, $Tovr.ХолдКод, Reg.Магазин
	|"//}прямойЗАПРОС
	;
	Зпр.УложитьСписокОбъектов(СписМагазин,"#SMag");
	Зпр.УложитьСписокОбъектов(СписМагазин,"#Stov","Номенклатура");
	Зпр.Отладка(1);
	Зпр.ВыполнитьИнструкцию(ТекстЗ,ТЗ); 



а как было бы здорово, если бы виртуальная таблица имела еще 1 параметр - фильтр по виду документа.

А может быть кто-то подскажет другое решение - я в тупике...
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Виртуальная таблица остатков и оборотов
Ответ #1 - 29. Февраля 2008 :: 04:45
Печать  
Попробую подсказать. Но жизнь тебе это не упростит  Улыбка

Прежде чем писать прямые запросы неплохо бы как минимум а) разобраться на базовом уровне с языком SQL; б) разобраться с тем, как 1С хранит данные в своей базе (http://metaprog.co.ua/secrprog). ;
Виртуальные таблицы - это конечно замечательно, но всё же лучше понимать, что они там у себя внутре делают.

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


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Виртуальная таблица остатков и оборотов
Ответ #2 - 29. Февраля 2008 :: 06:04
Печать  
ADirks писал(а) 29. Февраля 2008 :: 04:45:
Попробую подсказать. Но жизнь тебе это не упростит  Улыбка

Прежде чем писать прямые запросы неплохо бы как минимум а) разобраться на базовом уровне с языком SQL; б) разобраться с тем, как 1С хранит данные в своей базе (http://metaprog.co.ua/secrprog).  


С языком Скуля я четно говоря профан, но со структурой таблиц я разбирался, когда пришлось писать отчет прямыми запросами, отлаживал которые в Артизане. Но времени на написание прямыми запросами уходит гораздо больше, нежели с использованием 1С++, да и работают они только в разделенном режиме отдельной сессией, и некоторые типы данных, которые возвращает ОЛЯ, непонятны для 1Сины, из-за чего приходилось дополнительно конвертировать их в запросе.
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Виртуальная таблица остатков и оборотов
Ответ #3 - 29. Февраля 2008 :: 06:10
Печать  
sml писал(а) 29. Февраля 2008 :: 06:04:
С языком Скуля я четно говоря профан, но со структурой таблиц я разбирался, когда пришлось писать отчет прямыми запросами, отлаживал которые в Артизане. Но времени на написание прямыми запросами уходит гораздо больше, нежели с использованием 1С++, да и работают они только в разделенном режиме отдельной сессией, и некоторые типы данных, которые возвращает ОЛЯ, непонятны для 1Сины, из-за чего приходилось дополнительно конвертировать их в запросе.


Не путай теплое с мягким. То, что ты написал в (0) и есть прямой запрос. Просто, разработчки 1С++ взяли на себя часть твоей работы и скрыли кусок запроса, запихав его в компоненту.
Прислушайся к ADirks-у и почитай описание T-SQL. Без этого нечего даже и браться за написание запросов - вопросы и проблемы начнут появляться на ровном месте...
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Виртуальная таблица остатков и оборотов
Ответ #4 - 29. Февраля 2008 :: 09:07
Печать  
sadovnikov писал(а) 29. Февраля 2008 :: 06:10:
Прислушайся к ADirks-у и почитай описание T-SQL. Без этого нечего даже и браться за написание запросов - вопросы и проблемы начнут появляться на ровном месте...


а где лучше почитать, если не трудно, дайте ссылку.

и все же ткните носом, что не так (в результате дает пустую ТЗ):

Код
Выбрать все
	Зпр.УстановитьТекстовыйПараметр("НачПериода", ВыбНачПериода);
	Зпр.УстановитьТекстовыйПараметр("КонПериода", ВыбКонПериода);
	//{ПрямойЗапрос
	ТекстЗ = "
	|SELECT
	|	Max(Reg.ВидДокумента) as Док_вид,
	|	Reg.Магазин as [Магазин $Справочник.МестаХранения],
	|	Reg.Товар as [Товар $Справочник.Номенклатура],
	|	Tovr.Descr as НаимТов,
	|	$Tovr.Артикул as Артикул,
	|	$Tovr.ХолдКод as ХолдКод,
	|	sum(Reg.ОстатокТовараНачальныйОстаток) as НачОст,
	|	sum(Reg.ОстатокТовараРасход) as РасхКол,
	|	sum(Reg.ОстатокТовараКонечныйОстаток) as КонОст,
	|	sum(Reg.ПродСтоимостьРасход) as РасхСум
	|
	|FROM
	|   $РегистрОстаткиОбороты.ТоварыВМагазине(:НачПериода, :КонПериода~, Документ, Движения,
	|
	|		LEFT JOIN $Справочник.Номенклатура as Tov ON Товар = Tov.ID,
	|			Магазин IN (SELECT Val From #SMag) and
	|			Tov.ID IN (SELECT Val From #Stov),
	|		(Магазин,Товар), (ОстатокТовара, ПродСтоимость)) as Reg
	|INNER JOIN
	|	$Справочник.Номенклатура as Tovr ON Reg.Товар = Tovr.ID
	|WHERE
	|
	|	Reg.ВидДокумента = $ВидДокумента.ОтчетКассовойСмены
	|
	|GROUP BY
	|	Reg.Товар, Tovr.Descr, $Tovr.Артикул, $Tovr.ХолдКод, Reg.Магазин
	|"//}прямойЗАПРОС
	;
	Зпр.УложитьСписокОбъектов(СписМагазин,"#SMag");
	Зпр.УложитьСписокОбъектов(СписМагазин,"#Stov","Номенклатура");
	Зпр.Отладка(1);
	ТЗ = СоздатьОбъект("ТаблицаЗначений"); 



я прально понимаю, ТЗ - это 1Сая таблица значений?
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Виртуальная таблица остатков и оборотов
Ответ #5 - 29. Февраля 2008 :: 09:11
Печать  
А где само выполнения запроса-то?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Виртуальная таблица остатков и оборотов
Ответ #6 - 29. Февраля 2008 :: 09:35
Печать  
sml писал(а) 29. Февраля 2008 :: 09:07:
Код
Выбрать все
	Зпр.УложитьСписокОбъектов(СписМагазин,"#SMag");
	Зпр.УложитьСписокОбъектов(СписМагазин,"#Stov","Номенклатура"); 


  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Виртуальная таблица остатков и оборотов
Ответ #7 - 29. Февраля 2008 :: 10:01
Печать  
berezdetsky писал(а) 29. Февраля 2008 :: 09:35:
sml писал(а) 29. Февраля 2008 :: 09:07:
Код
Выбрать все
	Зпр.УложитьСписокОбъектов(СписМагазин,"#SMag");
	Зпр.УложитьСписокОбъектов(СписМагазин,"#Stov","Номенклатура"); 




вот, лажанулся, спасибки
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Виртуальная таблица остатков и оборотов
Ответ #8 - 05. Марта 2008 :: 08:21
Печать  
Код
Выбрать все
SELECT
	Tr.ГрпТов as [ГрпТов $Справочник.Номенклатура],
	Tr.НаимТов,
	Tr.Артикул as Артикул,
	Tr.ХолдКод as ХолдКод,
	Tr.Штрихкод as Штрихкод,
	Tr.Магазин,
	Tr.НаимМаг ,
	Tr.НачОст,
	Tr.РасхКол,
	Tr.КонОст,
	Tr.РасхСум
FROM
(SELECT
	WS.Магазин,
	WS.НаимМаг,
	WW.Товар,
	Выб.НачОст,
	Выб.РасхКол,
	Выб.КонОст,
	Выб.РасхСум,
	WW.ГрпТов,
	WW.НаимТов,
	WW.Артикул,
	WW.ХолдКод,
	WW.Штрихкод

FROM
(SELECT  DISTINCT
	Skl.Descr as НаимМаг,
	RegM.Магазин as Магазин
FROM
   #TC44EDFB15537417DB0869A49C4374922 as RegM
	, sc31 as Skl
WHERE	RegM.ВидДокумента = 6179
		and skl.ID = RegM.Магазин
) as WS,

(SELECT  DISTINCT
	RegT.Товар as Товар,
	Tovr.PARENTID as ГрпТов,
	Tovr.Descr as НаимТов,
	Tovr.sp3752 as Артикул,
	Tovr.sp6394 as ХолдКод,
	Tovr.sp3559 as Штрихкод
FROM
   #T6930CF8F5C254E5AB3834BB8AAA841D6 as RegT
INNER JOIN
	sc33 as Tovr ON RegT.Товар = Tovr.ID
	WHERE	Tovr.ID IN (SELECT Val From #Stov)
		AND RegT.ВидДокумента = 6179
) as WW
LEFT JOIN
 (SELECT
	Max(Reg.ВидДокумента) as Док_вид,
	Reg.Магазин as Магазин,
	Reg.Товар as Товар,
	sum(Reg.ОстатокТовараНачальныйОстаток) as НачОст,
	sum(Reg.ОстатокТовараРасход) as РасхКол,
	sum(Reg.ОстатокТовараКонечныйОстаток) as КонОст,
	sum(Reg.ПродСтоимостьРасход) as РасхСум
FROM
   #T977D7DC332984B49A3A65A9204001B11 as Reg
WHERE	Reg.ВидДокумента = 6179

GROUP BY
	Reg.Товар, Reg.Магазин
) as Выб
  ON  WS.Магазин = Выб.Магазин AND WW.Товар = Выб.Товар
) as Tr

ORDER BY
	Tr.ГрпТов, Tr.НаимТов, Tr.НаимМаг  


скуль выдает ошибку:
State 42000, native 107, message [Microsoft][ODBC SQL Server Driver][SQL Server]The column prefix 'WS' does not match with a table name or alias name used

что может быть не так??? Поможите, пожалуйста.

И еще вопрос: Можно ли как-то получить запрос целиком (с учетом подзапросов, формирующих виртуальные таблицы остатков), чтобы можно было скопировать запрос для отладки из 1С, напр., в DB Artizan, который хоть строку с ошибкой показывает.
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Виртуальная таблица остатков и оборотов
Ответ #9 - 05. Марта 2008 :: 10:14
Печать  
Связывание WW нормально пропиши. Не хороший тон использовать в одном запросе Join и связывание с использованием просто запятой. Вот скуль тебя и не понял.
И задай нормальные алиасы...
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Виртуальная таблица остатков и оборотов
Ответ #10 - 05. Марта 2008 :: 10:15
Печать  
sml писал(а) 05. Марта 2008 :: 08:21:
И еще вопрос: Можно ли как-то получить запрос целиком (с учетом подзапросов, формирующих виртуальные таблицы остатков), чтобы можно было скопировать запрос для отладки из 1С, напр., в DB Artizan, который хоть строку с ошибкой показывает.


Включи отладку. Или посмотри в профилере.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Виртуальная таблица остатков и оборотов
Ответ #11 - 05. Марта 2008 :: 10:43
Печать  
>>DB Artizan
Что это?  Ужас
  

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


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Виртуальная таблица остатков и оборотов
Ответ #12 - 05. Марта 2008 :: 10:45
Печать  
Цитата:
>>DB Artizan
Что это?  Ужас


http://www.embarcadero.com/products/dbartisan/
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Виртуальная таблица остатков и оборотов
Ответ #13 - 05. Марта 2008 :: 10:49
Печать  
sadovnikov писал(а) 05. Марта 2008 :: 10:14:
Связывание WW нормально пропиши. Не хороший тон использовать в одном запросе Join и связывание с использованием просто запятой. Вот скуль тебя и не понял.
И задай нормальные алиасы...


те же яйца, тока вид сбоку:
Код
Выбрать все
 SELECT
	Магаз.Магазин,
	Магаз.НаимМаг,
	Номен.Товар,
	Выб.НачОст,
	Выб.РасхКол,
	Выб.КонОст,
	Выб.РасхСум,
	Номен.ГрпТов,
	Номен.НаимТов,
	Номен.Артикул,
	Номен.ХолдКод,
	Номен.Штрихкод

FROM
(SELECT  DISTINCT
	Skl.Descr as НаимМаг,
	RegM.Магазин as Магазин
FROM
   #T77F6AA80FBB44946B8973EBE24983C8D 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
   #T5A3EF36223C14AC3AAB02909843AEFA9 as RegT
INNER JOIN
	sc33 as Tovr ON RegT.Товар = Tovr.ID
	WHERE	Tovr.ID IN (SELECT Val From #Stov)
) as Номен
LEFT JOIN
 (SELECT
	Max(Reg.ВидДокумента) as Док_вид,
	Reg.Магазин as Магазин,
	Reg.Товар as Товар,
	sum(Reg.ОстатокТовараНачальныйОстаток) as НачОст,
	sum(Reg.ОстатокТовараРасход) as РасхКол,
	sum(Reg.ОстатокТовараКонечныйОстаток) as КонОст,
	sum(Reg.ПродСтоимостьРасход) as РасхСум
FROM
   #T084FDCEBEBBE414E93AD78A960544411 as Reg
WHERE	Reg.ВидДокумента = 6179

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


The column prefix 'Магаз' does not match with a table name or alias name used in the query. 



кстати, все 3 вложенных запроса по отдельности работают на ура
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Виртуальная таблица остатков и оборотов
Ответ #14 - 05. Марта 2008 :: 10:52
Печать  
Это ты так связывание переписал?
Вот это что такое?:

Код
Выбрать все
) as Магаз ,
(
SELECT  DISTINCT
 



Именно этот кусок я имел ввиду.
  
Наверх
 
IP записан
 
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] 
ОтправитьПечать