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


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Помогите разобраться с глюком!
13. Мая 2013 :: 15:46
Печать  
Доброе время суток!
Помогите, пожалуйста, разобраться с непонятной ошибкой.
Я написал запрос по получению остатков товара на каждый день на основе готового, что на форуме выложен уже несколько раз. Из изменений - по нескольким реквизитам (которые выбираются на форме). Я выложил кусок сгенериованного текста запроса, если надо - выложу и генератор Улыбка
Код
Выбрать все
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
DROP TABLE #ВремОстатки

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

SELECT кросс.день as Период
	, кросс.Фирма
	, кросс.Склад
	, кросс.Номенклатура
	, Ост.Остаток
From (Select DISTINCT дни.день
	, Фирма
	, Склад
	, Номенклатура
	From (
		Select DATEADD(day,(aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d),CAST('20130501' as DateTime)) as день
		From	   (Select 0 AS a UNION Select 1 UNION Select 2 UNION Select 3 UNION Select 4 UNION Select 5 UNION Select 6 UNION Select 7 UNION Select 8 UNION Select 9) AS aa
		CROSS JOIN (Select 0 AS b UNION Select 1 UNION Select 2 UNION Select 3 UNION Select 4 UNION Select 5 UNION Select 6 UNION Select 7 UNION Select 8 UNION Select 9) AS bb
		CROSS JOIN (Select 0 AS c UNION Select 1 UNION Select 2 UNION Select 3 UNION Select 4 UNION Select 5 UNION Select 6 UNION Select 7 UNION Select 8 UNION Select 9) AS cc
		CROSS JOIN (Select 0 AS d UNION Select 1 UNION Select 2 UNION Select 3 UNION Select 4 UNION Select 5 UNION Select 6 UNION Select 7 UNION Select 8 UNION Select 9) AS dd
		Where aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= 7
		) as дни
	CROSS JOIN #ВремОстатки
	) as Кросс
	LEFT JOIN (Select об1.Период as ДатаС
		, MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130508' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
		, об1.Остаток
	, об1.Фирма
	, об1.Склад
	, об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

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



Текст запроса - рабочий, вот только 1С как-то непонятно реагирует на него.
При изменении (добавлении) колонок (Фирма, Склад, Номенклатура) - SQL выкидывает ошибки про их отсутствие (колонок). Такое чувство, что что-то не так с временными таблицами...

Другой кусок кода с использованием временных таблиц был такой же нерабочий, когда я его переделал с использованием
вложенных запросов - заработал. С использованием таблиц данные выдавались в SQL Query Analyzer, а 1С падала.
Я уже всю голову сломал.
Остался только дурной путь вместо временной таблицы вставить этот запрос 3 раза!
Если что - 1С 7.7 "Торговля и Склад", MS SQL Server 2000 SP4
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Помогите разобраться с глюком!
Ответ #1 - 13. Мая 2013 :: 16:07
Печать  
Глубоко в запрс не вникал, но у тебя же в виртуальной таблице Ост нет поля Остаток в селекте, вот оно и ругается
  
Наверх
 
IP записан
 
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #2 - 13. Мая 2013 :: 16:13
Печать  
Код
Выбрать все
LEFT JOIN (Select об1.Период as ДатаС
		, MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130508' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
		, об1.Остаток
			  , об1.Фирма
			  , об1.Склад
			 , об1.Номенклатура
		From #ВремОстатки об1
			LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.Фирма,об1.Склад,об1.Номенклатура
) as Ост 


Как раз есть...
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Помогите разобраться с глюком!
Ответ #3 - 13. Мая 2013 :: 16:26
Печать  
а, да точно, сори Улыбка
ну я запустил твой запрос у себя, работает. Только в 1CQA сначала инсерт во временную таблицу, потом вторым батчем селект. Пашет
попробуй сначала инсерт и посмотри какие там поля во временной таблице, может увидишь че-то не то)
и еще совет, допиши в наало батча set nocount on, иначе сервер возвращает сообщение с колвом обработанных записей и тд, бывают всякие глюки в 1С
  
Наверх
 
IP записан
 
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #4 - 13. Мая 2013 :: 16:52
Печать  
set nocount on есть в основном тетсте запроса, в данном случае он не влияет.
По частям запрос тоже пробовал, поэтому и пишу, что код рабочий.

Я уж сделал отдельный файл отчета для экспериментов, вот такой код (не сгенерированный, а руками писанный) работает
Код
Выбрать все
	ТекстЗапроса = "
		|Set NoCount On
		|SELECT Выборка.Период as Период
		|	, Выборка.Фирма as Фирма
		|	, Выборка.Склад as Склад
		|	, Выборка.Номенклатура as Номенклатура
		|	, Выборка.НачОст as НачОст
		|	, Выборка.Приход as Приход
		|	, Выборка.Расход as Расход
		|	, Выборка.КонОст as КонОст
		|Into #ВремТабОстОб
		|FROM (
		|
		|SELECT ОстаткиТМЦ.Период as Период
		|	, ОстаткиТМЦ.Фирма as Фирма
		|	, ОстаткиТМЦ.Склад as Склад
		|	, ОстаткиТМЦ.Номенклатура AS Номенклатура
		|	, ОстаткиТМЦ.КоличествоНачальныйОстаток as НачОст
		|	, ОстаткиТМЦ.КоличествоПриход as Приход
		|	, ОстаткиТМЦ.КоличествоРасход as Расход
		|	, ОстаткиТМЦ.КоличествоКонечныйОстаток as КонОст
		|From олучитьСтрИзДаты(ДатаКонца)+"Z',День,,,
		|			Номенклатура = '"+МД.ЗначениеВСтрокуБД(ВыбТМЦ)+"',(Фирма,Склад,Номенклатура),(Количество)) as ОстаткиТМЦ
		|
		|) as Выборка
		|
		|SELECT кросс.день as Период
		|	, Кросс.Фирма Фирма
		|	, Кросс.Склад Склад
		|	, Кросс.Номенклатура Номенклатура
		|	, Ост.КонОст as КонОст
		|Into #ВремОбороты
		|From (
		|	Select DISTINCT дни.день
		|	,Фирма as Фирма
		|	,Склад as Склад
		|	,Номенклатура as Номенклатура
		|	From (
		|		Select DATEADD(day,(aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d),CAST('"+МД.ПолучитьСтрИзДаты(ДатаНачала)+"' as DateTime)) as день
		|		From	   (Select 0 AS a UNION Select 1 UNION Select 2 UNION Select 3 UNION Select 4 UNION Select 5 UNION Select 6 UNION Select 7 UNION Select 8 UNION Select 9) AS aa
		|		CROSS JOIN (Select 0 AS b UNION Select 1 UNION Select 2 UNION Select 3 UNION Select 4 UNION Select 5 UNION Select 6 UNION Select 7 UNION Select 8 UNION Select 9) AS bb
		|		CROSS JOIN (Select 0 AS c UNION Select 1 UNION Select 2 UNION Select 3 UNION Select 4 UNION Select 5 UNION Select 6 UNION Select 7 UNION Select 8 UNION Select 9) AS cc
		|		CROSS JOIN (Select 0 AS d UNION Select 1 UNION Select 2 UNION Select 3 UNION Select 4 UNION Select 5 UNION Select 6 UNION Select 7 UNION Select 8 UNION Select 9) AS dd
		|		Where aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= "+КолДней+"
		|		) as дни
		|	CROSS JOIN #ВремТабОстОб
		|	) as Кросс
		|	LEFT JOIN (
		|				Select
		|					об1.Период as ДатаС,
		|					MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('"+МД.ПолучитьСтрИзДаты(ДатаКонца)+"' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо,
		|					об1.КонОст,
		|					об1.Фирма,
		|					об1.Склад,
		|					об1.Номенклатура
		|				From #ВремТабОстОб об1
		|				LEFT JOIN #ВремТабОстОб об2 on об1.Номенклатура = об2.Номенклатура
		|					and об1.Фирма = об2.Фирма
		|					and об1.Склад = об2.Склад
		|					and об1.Период < об2.Период
		|				Group By об1.Период,об1.Номенклатура,об1.Фирма,об1.Склад,об1.КонОст
		|			) as Ост on кросс.Номенклатура = Ост.Номенклатура
		|					and кросс.Фирма = Ост.Фирма
		|					and кросс.Склад = Ост.Склад
		|			and кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо
		|Where Ост.КонОст <> 0
		|ORDER BY 1,2
		|
		|SELECT * FROM #ВремОбороты
		|";
 



Но он с жестким количеством колонок.

Где-то у меня барабашка живет, причем и дома и на работе одинаковые ошибки, т.е. проблема системная
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Помогите разобраться с глюком!
Ответ #5 - 13. Мая 2013 :: 17:30
Печать  
Что-то я честно говоря, ничего не понял. Все запросы рабочие, откуда ошибки тогда? Проблема в том, что генератор кода запроса строит запрос, который в какой-то момент выдает ошибки? Ну так разбей код генерируемых запросов на отдельные батчи, дроп таблицы, инсерт, селект. Поставь там временно контрольные запросы к временным таблицам, уже будет легче отлаживать. Посмотри в профайлере каждый конкретный запуск отчета. Хз, вообщем, може я туплю, тада сори Улыбка
  
Наверх
 
IP записан
 
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #6 - 13. Мая 2013 :: 17:58
Печать  
В отчете всего 2 батча (не считая очистки таблиц), первая часть простая, все отрабатывает
Код
Выбрать все
SELECT ОстаткиТМЦ.Период
	, ОстаткиТМЦ.Фирма
	, ОстаткиТМЦ.Склад
	, ОстаткиТМЦ.Номенклатура
	, ОстаткиТМЦ.КоличествоКонечныйОстаток as Остаток
Into #ВремОстатки
From $РегистрОстаткиОбороты.ОстаткиТМЦ('20130501','20130508Z',День,,,
			,(Фирма,Склад,Номенклатура),(Количество)) as ОстаткиТМЦ
Select * From #ВремОстатки
 



Вторая сложная, я её не могу без первой проверить, т.к. она использует таблицу #ВремОстатки 3 раза.
Может дело в оперативке? Данных в первой таблице дофига, а после разворота по дням их, видимо, становится ещё больше...
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Помогите разобраться с глюком!
Ответ #7 - 13. Мая 2013 :: 18:28
Печать  
врядли при нехватке оперативы сервер бы недовставлял поле во временную таблицу). Ну поставь инсерт топ 100(в генераторе), проверь на небольших массивах данных. Если перед тем супер-запросом поставить простую контрольку, вывести просто все поля, select top 1 * from #ВремТаблица, что будет такое, что поле в этом запросе есть, а сложный запрос ругается на отсутствие этого поля? Чудеса какие-то..
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Помогите разобраться с глюком!
Ответ #8 - 14. Мая 2013 :: 02:30
Печать  
Код
Выбрать все
Select
	DATEADD(day,(aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d),CAST('20130501' as DateTime)) as день
From
	(Select 0 AS a UNION Select 1 UNION Select 2 UNION Select 3 UNION Select 4 UNION Select 5 UNION Select 6 UNION Select 7 UNION Select 8 UNION Select 9) AS aa
	CROSS JOIN (Select 0 AS b UNION Select 1 UNION Select 2 UNION Select 3 UNION Select 4 UNION Select 5 UNION Select 6 UNION Select 7 UNION Select 8 UNION Select 9) AS bb
	CROSS JOIN (Select 0 AS c UNION Select 1 UNION Select 2 UNION Select 3 UNION Select 4 UNION Select 5 UNION Select 6 UNION Select 7 UNION Select 8 UNION Select 9) AS cc
	CROSS JOIN (Select 0 AS d UNION Select 1 UNION Select 2 UNION Select 3 UNION Select 4 UNION Select 5 UNION Select 6 UNION Select 7 UNION Select 8 UNION Select 9) AS dd
Where
	aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= 7
 



Для начала нифига не понял, зачем нужно такое извращение.
Т.е. оно понятно, что должна давать конструкция из кросс-джойнов и (aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d), но после условия в WHERE достаточно только первого селект-юниона, без кросс-джойнов остальных...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #9 - 14. Мая 2013 :: 06:10
Печать  
(0) табличку с датами, лучше лепить так:

Код
Выбрать все
select dateadd(day,(a.number+b.number*256),:НачДата) as Dat
from master..spt_values a, master..spt_values b
where a.type='P' and b.type='P'

    and b.number<=datediff(day,:НачДата,:КонДата)/256
    and a.number<=(datediff(day,:НачДата,:КонДата)-b.number*256)
©Дык ё
 




ЗЫ: явно задавай алиясы во вложенных запросах, типа
, об1.Остаток as Остаток + во втором тексте у тебя там
, об1.КонОст еще
  
Наверх
 
IP записан
 
Alex37
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #10 - 14. Мая 2013 :: 07:01
Печать  
Satans Claws писал(а) 14. Мая 2013 :: 02:30:
Для начала нифига не понял, зачем нужно такое извращение.

Этот текст я взял уже готовый, он здесь несколько раз встречается, он делает табличку с датами.

Eprst писал(а) 14. Мая 2013 :: 06:10:
(0) табличку с датами, лучше лепить так:

Переделаю

Eprst писал(а) 14. Мая 2013 :: 06:10:
(0) ЗЫ: явно задавай алиясы во вложенных запросах

они были, но когда sql начал ругаться на отсутствие колонок - я попробовал их убрать. Сейчас восстановлю

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


1C++ rocks!

Сообщений: 23
Зарегистрирован: 13. Мая 2013
Пол: Мужской
Re: Помогите разобраться с глюком!
Ответ #11 - 14. Мая 2013 :: 07:56
Печать  
Все рекомендации сделал, но ошибка осталась
Код
Выбрать все
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 Остаток
Into #ВремОстатки
From #TB1C378DD8A294C54BD2D6F452A54B673 as ОстаткиТМЦ

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

SELECT CASE WHEN Рег.Период<'20130501' THEN '20130501' ELSE Рег.Период END as Период
	, Рег.Фирма as Фирма
	, Рег.Склад as Склад
	, Рег.Остаток as Остаток
FROM (
SELECT кросс.день as Период
	, кросс.Фирма as Фирма
	, кросс.Склад as Склад
	, Ост.Остаток AS Остаток
From (Select DISTINCT дни.день
	, Фирма 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 Кросс
	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 Склад
		From #ВремОстатки об1
			LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.Фирма,об1.Склад
) as Ост on кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо AND кросс.Фирма = Ост.Фирма AND кросс.Склад = Ост.Склад
Where Ост.Остаток <> 0

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


Причем эта ошибка плавающая, иногда запрос может отработать.

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



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

From (Select DISTINCT дни.день

, TableAlias.Фирма as Фирма
     , Склад as Склад

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


1C++ rocks!

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


Не помогло...

Код
Выбрать все
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 Остаток
Into #ВремОстатки
From #T701A59CEB74F4F2489E789148B971F73 as ОстаткиТМЦ

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

SELECT CASE WHEN Рег.Период<'20130501' THEN '20130501' ELSE Рег.Период END as Период
	, Рег.Фирма as Фирма
	, Рег.Номенклатура
	, Рег.Остаток as Остаток
FROM (
SELECT кросс.день as Период
	, кросс.Фирма as Фирма
	, кросс.Номенклатура AS Номенклатура
	, Ост.Остаток AS Остаток
From (Select DISTINCT дни.день
	, Остатки.Фирма 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.Номенклатура
		From #ВремОстатки об1
			LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.Фирма,об1.Номенклатура
) as Ост on кросс.день BETWEEN Ост.ДатаС 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 'Фирма'. 



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

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

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Помогите разобраться с глюком!
Ответ #14 - 14. Мая 2013 :: 08:34
Печать  
T701A59CEB74F4F2489E789148B971F73

вот эта табличка откуда взялась ? И зачем еще раз её в другую временную пихать ?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать