Доброе время суток!
Помогите, пожалуйста, разобраться с непонятной ошибкой.
Я написал запрос по получению остатков товара на каждый день на основе готового, что на форуме выложен уже несколько раз. Из изменений - по нескольким реквизитам (которые выбираются на форме). Я выложил кусок сгенериованного текста запроса, если надо - выложу и генератор
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