Переключение на Главную Страницу Страницы: 1 [2] 3 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Помогите разобраться с глюком! (число прочтений - 15039 )
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #15 - 14. Мая 2013 :: 08:37
Печать  
Eprst писал(а) 14. Мая 2013 :: 08:34:
T701A59CEB74F4F2489E789148B971F73

вот эта табличка откуда взялась ? И зачем еще раз её в другую временную пихать ?

Это виртуальная таблица так сработала
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #16 - 14. Мая 2013 :: 08:42
Печать  
вот это занафига ?
МД.ПолучитьСтрИзДаты(ДатаНачала)

когда достаточно просто установить текстовый параметр для даты и усё.
  
Наверх
 
IP записан
 
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #17 - 14. Мая 2013 :: 08:48
Печать  
Как раз это не мешает вообще. А строк кода - меньше.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #18 - 14. Мая 2013 :: 08:49
Печать  
Покажи код текста запроса из отладки и без перед выполнить инструкцию.

+ не видно, откуда ты там виртуальную табличку "
Это виртуальная таблица так сработала " берешь
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #19 - 14. Мая 2013 :: 08:50
Печать  
Alex37 писал(а) 14. Мая 2013 :: 08:48:
Как раз это не мешает вообще. А строк кода - меньше.


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


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #20 - 14. Мая 2013 :: 08:53
Печать  
Запрос при о тладке
Код
Выбрать все
Set NoCount On


IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
DROP TABLE #ВремОстатки

SELECT ОстаткиТМЦ.Период as Период
	, ОстаткиТМЦ.Фирма as Фирма
	, ОстаткиТМЦ.Склад as Склад
	, ОстаткиТМЦ.Номенклатура AS Номенклатура
	, ОстаткиТМЦ.КоличествоКонечныйОстаток as Остаток
Into #ВремОстатки
From #TBFD6C5782E2D48D2A038A9C21BA3F180 as ОстаткиТМЦ

SELECT ПартииНаличие.Период as Период
	, ПартииНаличие.Фирма [Фирма $Справочник.Фирмы]
	, ПартииНаличие.Склад [Склад $Справочник.Склады]
	, ПартииНаличие.Номенклатура [Номенклатура $Справочник.Номенклатура]
	, Sum(ПартииНаличие.Остаток) as Остаток
FROM (

SELECT CASE WHEN Рег.Период<'20130501' THEN '20130501' ELSE Рег.Период END as Период
	, Рег.Фирма as Фирма
	, Рег.Склад as Склад
	, Рег.Номенклатура
	, Рег.Остаток as Остаток
FROM (
SELECT кросс.день as Период
	, кросс.Фирма as Фирма
	, кросс.Склад as Склад
	, кросс.Номенклатура AS Номенклатура
	, Ост.Остаток AS Остаток
From (Select DISTINCT дни.день
	, Остатки.Фирма as Фирма
	, Остатки.Склад as Склад
	, Остатки.Номенклатура AS Номенклатура
	From (
		select dateadd(day,(a.number+b.number*256),CAST('20130501' as DateTime)) as день
		from master..spt_values a, master..spt_values b
		where a.type='P' and b.type='P'
		    and b.number<=datediff(day,CAST('20130501' as DateTime),CAST('20130514' as DateTime))/256
		    and a.number<=(datediff(day,CAST('20130501' as DateTime),CAST('20130514' as DateTime))-b.number*256)
		) as дни
	CROSS JOIN #ВремОстатки as Остатки
	) as Кросс
	LEFT JOIN (Select об1.Период as ДатаС
		, MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130514' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
		, об1.Остаток as Остаток
	, об1.Фирма as Фирма
	, об1.Склад as Склад
	, об1.Номенклатура
		From #ВремОстатки об1
			LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.Фирма,об1.Склад,об1.Номенклатура
) as Ост on кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо AND кросс.Фирма = Ост.Фирма AND кросс.Склад = Ост.Склад AND кросс.Номенклатура = Ост.Номенклатура
Where Ост.Остаток <> 0

) as Рег
	) as ПартииНаличие
GROUP BY клатура
ORDER BY 1
глРС.ВыполнитьИнструкцию(ТекстЗапроса,ИТЗ);
{D:\TEMP\АНАЛИЗ ТМЦ ПО ПЕРИОДАМ.ERT(420)}: State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Фирма'. 



ТекстЗапроса оригинал
Код
Выбрать все
Set NoCount On


IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
DROP TABLE #ВремОстатки

SELECT ОстаткиТМЦ.Период as Период
	, ОстаткиТМЦ.Фирма as Фирма
	, ОстаткиТМЦ.Склад as Склад
	, ОстаткиТМЦ.Номенклатура AS Номенклатура
	, ОстаткиТМЦ.КоличествоКонечныйОстаток as Остаток
Into #ВремОстатки
From $РегистрОстаткиОбороты.ОстаткиТМЦ('20130501','20130514Z',День,,,
			(Номенклатура = '   4VO   '),(Фирма,Склад,Номенклатура),(Количество)) as ОстаткиТМЦ

SELECT ПартииНаличие.Период as Период
	, ПартииНаличие.Фирма [Фирма $Справочник.Фирмы]
	, ПартииНаличие.Склад [Склад $Справочник.Склады]
	, ПартииНаличие.Номенклатура [Номенклатура $Справочник.Номенклатура]
	, Sum(ПартииНаличие.Остаток) as Остаток
FROM (

SELECT CASE WHEN Рег.Период<'20130501' THEN '20130501' ELSE Рег.Период END as Период
	, Рег.Фирма as Фирма
	, Рег.Склад as Склад
	, Рег.Номенклатура
	, Рег.Остаток as Остаток
FROM (
SELECT кросс.день as Период
	, кросс.Фирма as Фирма
	, кросс.Склад as Склад
	, кросс.Номенклатура AS Номенклатура
	, Ост.Остаток AS Остаток
From (Select DISTINCT дни.день
	, Остатки.Фирма as Фирма
	, Остатки.Склад as Склад
	, Остатки.Номенклатура AS Номенклатура
	From (
		select dateadd(day,(a.number+b.number*256),CAST('20130501' as DateTime)) as день
		from master..spt_values a, master..spt_values b
		where a.type='P' and b.type='P'
		    and b.number<=datediff(day,CAST('20130501' as DateTime),CAST('20130514' as DateTime))/256
		    and a.number<=(datediff(day,CAST('20130501' as DateTime),CAST('20130514' as DateTime))-b.number*256)
		) as дни
	CROSS JOIN #ВремОстатки as Остатки
	) as Кросс
	LEFT JOIN (Select об1.Период as ДатаС
		, MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130514' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
		, об1.Остаток as Остаток
	, об1.Фирма as Фирма
	, об1.Склад as Склад
	, об1.Номенклатура
		From #ВремОстатки об1
			LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.Фирма,об1.Склад,об1.Номенклатура
) as Ост on кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо AND кросс.Фирма = Ост.Фирма AND кросс.Склад = Ост.Склад AND кросс.Номенклатура = Ост.Номенклатура
Where Ост.Остаток <> 0

	) as Рег
) as ПартииНаличие
GROUP BY клатура
ORDER BY 1 

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


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #21 - 14. Мая 2013 :: 09:01
Печать  
Продублирую, я, наверно,  зря поправил старый пост

Сейчас у меня запрос отрабатывает только при одной выбранной колонке Номенклатура и корректно показывает только при периоде день.

Я уж вложил саму ert'шку, отчет ещё не готов, не судите строго.
Задача - получить остатки / движения по выбранным периодам
Сейчас отрабатывает только номенклатуру по датам
В ней используются класс Множественный фильтр (чуть изменённый)
  

_______________________002.zip ( 21 KB | Загрузки )
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #22 - 14. Мая 2013 :: 09:19
Печать  
тест на вшивость, это работает (если целиком скопирять и подставить) ?

Код
Выбрать все
|Set NoCount On
|IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
|ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
|DROP TABLE #ВремОстатки
|;
|SELECT ОстаткиТМЦ.Период as Период
|     ,ОстаткиТМЦ.Фирма as Фирма
|     ,ОстаткиТМЦ.Склад as Склад
|     ,ОстаткиТМЦ.Номенклатура AS Номенклатура
|     ,ОстаткиТМЦ.КоличествоКонечныйОстаток as Остаток
|Into #ВремОстатки
|From $РегистрОстаткиОбороты.ОстаткиТМЦ('20130501','20130514Z',День,,,(Номенклатура = '   4VO   '),(Фирма,Склад,Номенклатура),(Количество)) as ОстаткиТМЦ
|;
|SELECT ПартииНаличие.Период as Период
|	,ПартииНаличие.Фирма [Фирма $Справочник.Фирмы]
|	,ПартииНаличие.Склад [Склад $Справочник.Склады]
|	,ПартииНаличие.Номенклатура [Номенклатура $Справочник.Номенклатура]
|	,Sum(ПартииНаличие.Остаток) as Остаток
|FROM (
|	 SELECT CASE WHEN Рег.Период<'20130501' THEN '20130501' ELSE Рег.Период END as Период
|		 ,Рег.Фирма as Фирма
|		 ,Рег.Склад as Склад
|		 ,Рег.Номенклатура as Номенклатура
|		 ,Рег.Остаток as Остаток
|	 FROM (
|		  SELECT   кросс.День as Период
|			    ,кросс.Фирма as Фирма
|			    ,кросс.Склад as Склад
|			    ,кросс.Номенклатура AS Номенклатура
|			    ,Ост.Остаток AS Остаток
|		  From (
|			   Select DISTINCT дни.день as День
|				    ,Остатки.Фирма as Фирма
|				    ,Остатки.Склад as Склад
|				    ,Остатки.Номенклатура AS Номенклатура
|			   From (
|					  select dateadd(day,(a.number+b.number*256),CAST('20130501' as DateTime)) as День
|			     	from master..spt_values a, master..spt_values b
|				   where a.type='P' and b.type='P'
|				   and b.number<=datediff(day,CAST('20130501' as DateTime),CAST('20130514' as DateTime))/256
|				   and a.number<=(datediff(day,CAST('20130501' as DateTime),CAST('20130514' as DateTime))-b.number*256)
|				  ) as дни
|			  CROSS JOIN #ВремОстатки as Остатки
|			 ) as Кросс
|     LEFT JOIN (
|		     Select об1.Период as ДатаС
|				,MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130514' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
|				,об1.Остаток as Остаток
|				,об1.Фирма as Фирма
|				,об1.Склад as Склад
|				,об1.Номенклатура as Номенклатура
|		     From #ВремОстатки об1
|		     LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
|		     Group By об1.Период,об1.Остаток,об1.Фирма,об1.Склад,об1.Номенклатура
|		     ) as Ост on кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо AND кросс.Фирма = Ост.Фирма AND кросс.Склад = Ост.Склад AND кросс.Номенклатура = Ост.Номенклатура
|     Where Ост.Остаток <> 0
|   ) as Рег
|) as ПартииНаличие
|GROUP BY клатура
|ORDER BY 1  

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


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #23 - 14. Мая 2013 :: 09:22
Печать  
Eprst писал(а) 14. Мая 2013 :: 09:19:
тест на вшивость, это работает (если целиком скопирять и подставить) ?

Нет
Код
Выбрать все
Set NoCount On


IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
DROP TABLE #ВремОстатки

SELECT ОстаткиТМЦ.Период as Период
	, ОстаткиТМЦ.Фирма as Фирма
	, ОстаткиТМЦ.Склад as Склад
	, ОстаткиТМЦ.Номенклатура AS Номенклатура
	, ОстаткиТМЦ.КоличествоКонечныйОстаток as Остаток
Into #ВремОстатки
From $РегистрОстаткиОбороты.ОстаткиТМЦ('20130501','20130514Z',День,,,
			(Номенклатура = '   4VO   '),(Фирма,Склад,Номенклатура),(Количество)) as ОстаткиТМЦ

SELECT ПартииНаличие.Период as Период
	, ПартииНаличие.Фирма [Фирма $Справочник.Фирмы]
	, ПартииНаличие.Склад [Склад $Справочник.Склады]
	, ПартииНаличие.Номенклатура [Номенклатура $Справочник.Номенклатура]
	, Sum(ПартииНаличие.Остаток) as Остаток
FROM (

SELECT CASE WHEN Рег.Период<'20130501' THEN '20130501' ELSE Рег.Период END as Период
	, Рег.Фирма as Фирма
	, Рег.Склад as Склад
	, Рег.Номенклатура
	, Рег.Остаток as Остаток
FROM (
SELECT кросс.день as Период
	, кросс.Фирма as Фирма
	, кросс.Склад as Склад
	, кросс.Номенклатура AS Номенклатура
	, Ост.Остаток AS Остаток
From (Select DISTINCT дни.день
	, Остатки.Фирма as Фирма
	, Остатки.Склад as Склад
	, Остатки.Номенклатура AS Номенклатура
	From (
		select dateadd(day,(a.number+b.number*256),CAST('20130501' as DateTime)) as день
		from master..spt_values a, master..spt_values b
		where a.type='P' and b.type='P'
		    and b.number<=datediff(day,CAST('20130501' as DateTime),CAST('20130514' as DateTime))/256
		    and a.number<=(datediff(day,CAST('20130501' as DateTime),CAST('20130514' as DateTime))-b.number*256)
		) as дни
	CROSS JOIN #ВремОстатки as Остатки
	) as Кросс
	LEFT JOIN (Select об1.Период as ДатаС
		, MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130514' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
		, об1.Остаток as Остаток
	, об1.Фирма as Фирма
	, об1.Склад as Склад
	, об1.Номенклатура
		From #ВремОстатки об1
			LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.Фирма,об1.Склад,об1.Номенклатура
) as Ост on кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо AND кросс.Фирма = Ост.Фирма AND кросс.Склад = Ост.Склад AND кросс.Номенклатура = Ост.Номенклатура
Where Ост.Остаток <> 0

	) as Рег
) as ПартииНаличие
GROUP BY клатура
ORDER BY 1
глРС.ВыполнитьИнструкцию(ТекстЗапроса,ИТЗ);
{D:\TEMP\АНАЛИЗ ТМЦ ПО ПЕРИОДАМ.ERT(482)}: State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Фирма'. 




P.S. А можно это переписать без временной таблицы?
P.P.S.  Или как написать чтобы остатки ТМЦ были по выбранному периоду (день и т.п.) в выбранных разрезах?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #24 - 14. Мая 2013 :: 09:30
Печать  
У тя случаем, фирма не реквизит регистра ?
Улыбка

По-отдельности запросы выполняются ?
вот этот хотя бы ?

SELECT ОстаткиТМЦ.Период as Период
     , ОстаткиТМЦ.Фирма as Фирма
     , ОстаткиТМЦ.Склад as Склад
     , ОстаткиТМЦ.Номенклатура AS Номенклатура
     , ОстаткиТМЦ.КоличествоКонечныйОстаток as Остаток
Into #ВремОстатки
From $РегистрОстаткиОбороты.ОстаткиТМЦ('20130501','20130514Z',День,,,
                 (Номенклатура = '   4VO   '),(Фирма,Склад,Номенклатура),(Количество)) as ОстаткиТМЦ
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #25 - 14. Мая 2013 :: 09:33
Печать  
И это, ты не мой код же выполняешь!!!!!!!!!!!!!!!

скопируй целиком с форума и помести его в текстЗапроса как есть
  
Наверх
 
IP записан
 
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #26 - 14. Мая 2013 :: 09:35
Печать  
Eprst писал(а) 14. Мая 2013 :: 09:30:
У тя случаем, фирма не реквизит регистра ?
Улыбка

По-отдельности запросы выполняются ?


все же измерение Улыбка

Код
Выбрать все
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
DROP TABLE #ВремОстатки

SELECT ОстаткиТМЦ.Период as Период
, ОстаткиТМЦ.Фирма as Фирма
, ОстаткиТМЦ.Склад as Склад
, ОстаткиТМЦ.Номенклатура AS Номенклатура
, ОстаткиТМЦ.КоличествоКонечныйОстаток as Остаток
Into #ВремОстатки
From #TC48D4DA6378F414FA73472934D7774A5 as ОстаткиТМЦ

select *  from #ВремОстатки
 


прекрасно выполняется
  
Наверх
 
IP записан
 
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #27 - 14. Мая 2013 :: 09:41
Печать  
Eprst писал(а) 14. Мая 2013 :: 09:33:
И это, ты не мой код же выполняешь!!!!!!!!!!!!!!!

скопируй целиком с форума и помести его в текстЗапроса как есть

Сработало! Я очень прошу прощения.

Вот только в первый раз я все же вроде просто скопировал...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #28 - 14. Мая 2013 :: 09:45
Печать  
Ага.. баян значится (это я про метапарсер)

Убирай табуляцию из текста запроса и наслаждайся, можешь даже так сделать:

ТекстЗапроса = СтрЗаменить(ТекстЗапроса,СимволТабуляции," ");
  
Наверх
 
IP записан
 
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #29 - 14. Мая 2013 :: 09:51
Печать  
Eprst писал(а) 14. Мая 2013 :: 09:45:
Ага.. баян значится (это я про метапарсер)

Обалдеть!!! Вы гений, я уже всю голову сломал за несколько дней.... Спасибо, теперь можно работать дальше.

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