Посмотрел, зависает на первом
SELECTE'e, после первого INSERT'a.
вот сам код хранимой процедуры, которую я пытаюсь выполнить.
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
ALTER PROCEDURE RestByDocs
@Клиент char(9),
@ТА char(8) ='0' --если передаётся - учитываем гарантии и просрочку
AS
SET NOCOUNT ON
CREATE TABLE #ПриходыРасходы (
[DATE_TIME_IDDOC] [char] (23) NOT NULL,
[IDDOCDEF] [int] NOT NULL,
[DEBKRED] [bit] NOT NULL ,
[SUMM] [numeric](14, 5) NOT NULL
)
CREATE TABLE #Расходы (
[DATE_TIME_IDDOC] [char] (23) NOT NULL,
[IDDOCDEF] [int] NOT NULL,
[REST] [numeric](14, 5) NOT NULL DEFAULT 0
CONSTRAINT [PK_Расходы] PRIMARY KEY CLUSTERED
(
[DATE_TIME_IDDOC]
)
)
INSERT INTO #ПриходыРасходы (DATE_TIME_IDDOC, IDDOCDEF, DEBKRED, SUMM)
SELECT ЗаВычетомВозвратов.DATE_TIME_IDDOC, ЗаВычетомВозвратов.IDDOCDEF, ЗаВычетомВозвратов.Приход, SUM(ЗаВычетомВозвратов.Сумма)
FROM
(
SELECT _1S_L_ОбщийЖурнал.DATE_TIME_IDDOC, _1S_L_ОбщийЖурнал.IDDOCDEF, _1S_L_РегВзаиморасчетыПокупателей_Дв.DEBKRED AS Приход,
SUM(_1S_L_РегВзаиморасчетыПокупателей_Дв.Долг) AS Сумма
FROM _1S_L_ОбщийЖурнал INNER JOIN
_1S_L_РегВзаиморасчетыПокупателей_Дв ON _1S_L_ОбщийЖурнал.IDDOC = _1S_L_РегВзаиморасчетыПокупателей_Дв.IDDOC
WHERE (_1S_L_РегВзаиморасчетыПокупателей_Дв.Клиент = ' 1A' + @Клиент) AND (NOT (_1S_L_РегВзаиморасчетыПокупателей_Дв.IDDOC IN
(SELECT _1S_L_ДокПриходнаяНакладная.IDDOC
FROM _1S_L_РегВзаиморасчетыПокупателей_Дв INNER JOIN
_1S_L_ДокПриходнаяНакладная ON
_1S_L_РегВзаиморасчетыПокупателей_Дв.IDDOC = _1S_L_ДокПриходнаяНакладная.IDDOC
WHERE (_1S_L_ДокПриходнаяНакладная.ДокументОснование <> ' 0 0 ') AND
(_1S_L_РегВзаиморасчетыПокупателей_Дв.Клиент = ' 1A' + @Клиент)
GROUP BY _1S_L_ДокПриходнаяНакладная.IDDOC, _1S_L_ДокПриходнаяНакладная.ДокументОснование)))
GROUP BY _1S_L_ОбщийЖурнал.DATE_TIME_IDDOC, _1S_L_ОбщийЖурнал.IDDOCDEF, _1S_L_РегВзаиморасчетыПокупателей_Дв.DEBKRED
UNION ALL
SELECT _1S_L_ОбщийЖурнал.DATE_TIME_IDDOC, _1S_L_ОбщийЖурнал.IDDOCDEF, 1- _1S_L_РегВзаиморасчетыПокупателей_Дв.DEBKRED AS Приход,
- SUM(_1S_L_РегВзаиморасчетыПокупателей_Дв.Долг) AS Сумма
FROM _1S_L_РегВзаиморасчетыПокупателей_Дв INNER JOIN
_1S_L_ДокПриходнаяНакладная ON _1S_L_РегВзаиморасчетыПокупателей_Дв.IDDOC = _1S_L_ДокПриходнаяНакладная.IDDOC INNER JOIN
_1S_L_ОбщийЖурнал ON _1S_L_ДокПриходнаяНакладная.ДокументОснование = ' BE' + _1S_L_ОбщийЖурнал.IDDOC
WHERE (_1S_L_РегВзаиморасчетыПокупателей_Дв.Клиент = ' 1A' + @Клиент)
GROUP BY _1S_L_ОбщийЖурнал.DATE_TIME_IDDOC, _1S_L_ОбщийЖурнал.IDDOCDEF, _1S_L_РегВзаиморасчетыПокупателей_Дв.DEBKRED,
_1S_L_ДокПриходнаяНакладная.ДокументОснование
) AS ЗаВычетомВозвратов
GROUP BY ЗаВычетомВозвратов.DATE_TIME_IDDOC, ЗаВычетомВозвратов.IDDOCDEF, ЗаВычетомВозвратов.Приход
UNION ALL
SELECT _1S_L_ОбщийЖурнал.DATE_TIME_IDDOC, _1S_L_ОбщийЖурнал.IDDOCDEF, _1S_L_РегВзаиморасчетыПоставщиков_Дв.DEBKRED AS Приход,
SUM(_1S_L_РегВзаиморасчетыПоставщиков_Дв.Долг) AS Сумма
FROM _1S_L_РегВзаиморасчетыПоставщиков_Дв INNER JOIN
_1S_L_ОбщийЖурнал ON _1S_L_РегВзаиморасчетыПоставщиков_Дв.IDDOC = _1S_L_ОбщийЖурнал.IDDOC
WHERE (_1S_L_РегВзаиморасчетыПоставщиков_Дв.Клиент = @Клиент)
GROUP BY _1S_L_ОбщийЖурнал.DATE_TIME_IDDOC, _1S_L_ОбщийЖурнал.IDDOCDEF, _1S_L_РегВзаиморасчетыПоставщиков_Дв.DEBKRED
if @ТА<>'0'
INSERT INTO #ПриходыРасходы (DATE_TIME_IDDOC, IDDOCDEF, DEBKRED, SUMM)
SELECT _1S_L_ОбщийЖурнал.DATE_TIME_IDDOC,_1S_L_ОбщийЖурнал.IDDOCDEF, 1 AS Приход,
SUM((1 - _1S_L_РегГарантииОплат_Дв.DEBKRED * 2) * _1S_L_РегГарантииОплат_Дв.Наличность) AS Сумма
FROM _1S_L_ОбщийЖурнал INNER JOIN
_1S_L_РегГарантииОплат_Дв ON _1S_L_ОбщийЖурнал.IDDOC = _1S_L_РегГарантииОплат_Дв.IDDOC
WHERE (_1S_L_РегГарантииОплат_Дв.Клиент = @Клиент)
GROUP BY _1S_L_ОбщийЖурнал.DATE_TIME_IDDOC, _1S_L_ОбщийЖурнал.IDDOCDEF, _1S_L_РегГарантииОплат_Дв.DEBKRED
DECLARE @d_k bit, @s numeric(14, 5), @rst numeric(14, 5)
INSERT INTO #Расходы (DATE_TIME_IDDOC, IDDOCDEF, REST)
SELECT DATE_TIME_IDDOC, IDDOCDEF, SUMM FROM #ПриходыРасходы
WHERE DEBKRED = 0
DECLARE ПоРасходам CURSOR FOR
SELECT REST FROM #Расходы WHERE REST <> 0
order by DATE_TIME_IDDOC
FOR UPDATE OF REST
DECLARE @sp numeric(14, 5)
SELECT @sp=sum(SUMM) FROM #ПриходыРасходы WHERE DEBKRED = 1
set @sp=isnull(@sp,0)
OPEN ПоРасходам
FETCH NEXT FROM ПоРасходам INTO @rst
WHILE @@FETCH_STATUS = 0
BEGIN
IF @sp >= @rst
BEGIN
SET @sp = @sp - @rst
UPDATE #Расходы
SET REST = 0
WHERE CURRENT OF ПоРасходам
END
ELSE
BEGIN
UPDATE #Расходы
SET REST = REST - @sp
WHERE CURRENT OF ПоРасходам
SET @sp = 0
END
IF @sp = 0 BREAK
весь код не влезает. В старой базе всё выполняется отлично, а также все работает, если я эту базу скопирую и буду в запросе из 1С подключаться к копии, тогда тоже работает.