|
v7: 1c++ и временные таблицы | ☑ | ||
---|---|---|---|---|
0
zling
15.08.12
✎
07:29
|
Делаю запрос на 1с++. В ManagmentStudio отрабатывает все нормально. В таблицу возвращается 0 строк
ТекстЗапроса = " |CREATE TABLE #Dvizh_ (Doc CHAR(9), Moment CHAR(23), Sub CHAR(13), VidSub int, Sum_ numeric(13,2)); |CREATE TABLE #MyOst_ (Doc CHAR(9), Moment CHAR(23), Sub CHAR(13), VidSub int, Sum_ numeric(13,2)); | |INSERT INTO #Dvizh_ |SELECT | _1SENTRY.DOCID AS Doc, | _1SENTRY.DATE_TIME_DOCID AS Moment, | CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.DTSC0 | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN _1SENTRY.KTSC0 | END AS Sub, //| --[Контрагент $Субконто], | CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.VDTSC0 | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN _1SENTRY.VKTSC0 | END AS VidSub, | SUM(CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.SUM_ | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN -_1SENTRY.SUM_ | END) AS Sum_ |FROM | _1SENTRY |WHERE | (_1SENTRY.ACCDTID = :Счет60_2 | OR _1SENTRY.ACCKTID = :Счет60_2) | AND CONVERT(DATETIME, SUBSTRING(_1SENTRY.DATE_TIME_DOCID,1,8),114) <= :ДатаОст | AND _1SENTRY.ACTIVE = '' |GROUP BY | _1SENTRY.DOCID, | _1SENTRY.DATE_TIME_DOCID, | CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.DTSC0 | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN _1SENTRY.KTSC0 | END, //| --[Контрагент $Субконто], | CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.VDTSC0 | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN _1SENTRY.VKTSC0 | END |HAVING | SUM(CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.SUM_ | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN -_1SENTRY.SUM_ | END) <> 0 |ORDER BY | CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.DTSC0 | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN _1SENTRY.KTSC0 | END ASC, | _1SENTRY.DATE_TIME_DOCID DESC | | | |DECLARE MyCursor CURSOR |FOR |SELECT | Ost.Sub, | Ost.VidSub, | Ost.Ostatok, | #Dvizh_.Doc, | #Dvizh_.Moment, | #Dvizh_.Sum_ |FROM | ( | SELECT #Dvizh_.Sub, #Dvizh_.VidSub, SUM(#Dvizh_.Sum_) AS Ostatok | FROM #Dvizh_ | GROUP BY | #Dvizh_.Sub, #Dvizh_.VidSub | HAVING | SUM(#Dvizh_.Sum_) <> 0 | ) AS Ost |LEFT OUTER JOIN | #Dvizh_ |ON | Ost.Sub = #Dvizh_.Sub | AND Ost.VidSub = #Dvizh_.VidSub | AND #Dvizh_.Sum_ > 0 |ORDER BY | Ost.Sub ASC, #Dvizh_.Moment DESC | | |DECLARE @TekOst numeric(13,2), @TotalOst numeric(13,2), @Ost numeric(13,2), @Spis numeric(13,2) |DECLARE @PrevSub CHAR(13), @Sub CHAR (13), @VidSub int, @Doc CHAR(9), @Moment CHAR(23) | |SET @PrevSub = '' |SET @TekOst = 0 | |OPEN MyCursor |FETCH NEXT FROM MyCursor INTO @Sub, @VidSub, @TotalOst, @Doc, @Moment, @Ost |WHILE @@FETCH_STATUS = 0 | BEGIN | IF @Sub <> @PrevSub | BEGIN | SET @PrevSub = @Sub | SET @TekOst = @TotalOst | END | IF @TekOst <> 0 | BEGIN | SET @Spis = 0 | IF @TekOst >= @Ost | SET @Spis = @Ost | ELSE | SET @Spis = @TekOst | | SET @TekOst = @TekOst - @Spis | INSERT INTO #MyOst_ | VALUES | ( | @Doc, | @Moment, | @Sub, | @VidSub, | @Spis | ) | END | | FETCH NEXT FROM MyCursor INTO @Sub, @VidSub, @TotalOst, @Doc, @Moment, @Ost | END |CLOSE MyCursor |DEALLOCATE MyCursor | //|DROP TABLE #Dvizh_ | |SELECT * FROM #MyOst_ | //|DROP TABLE #MyOst_ |"; в чем трабл? |
|||
1
zling
15.08.12
✎
07:31
|
запрос
|SELECT | _1SENTRY.DOCID AS Doc, | _1SENTRY.DATE_TIME_DOCID AS Moment, | CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.DTSC0 | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN _1SENTRY.KTSC0 | END AS Sub, //| --[Контрагент $Субконто], | CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.VDTSC0 | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN _1SENTRY.VKTSC0 | END AS VidSub, | SUM(CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.SUM_ | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN -_1SENTRY.SUM_ | END) AS Sum_ |FROM | _1SENTRY |WHERE | (_1SENTRY.ACCDTID = :Счет60_2 | OR _1SENTRY.ACCKTID = :Счет60_2) | AND CONVERT(DATETIME, SUBSTRING(_1SENTRY.DATE_TIME_DOCID,1,8),114) <= :ДатаОст | AND _1SENTRY.ACTIVE = '' |GROUP BY | _1SENTRY.DOCID, | _1SENTRY.DATE_TIME_DOCID, | CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.DTSC0 | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN _1SENTRY.KTSC0 | END, //| --[Контрагент $Субконто], | CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.VDTSC0 | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN _1SENTRY.VKTSC0 | END |HAVING | SUM(CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.SUM_ | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN -_1SENTRY.SUM_ | END) <> 0 |ORDER BY | CASE WHEN _1SENTRY.ACCDTID = :Счет60_2 THEN _1SENTRY.DTSC0 | WHEN _1SENTRY.ACCKTID = :Счет60_2 THEN _1SENTRY.KTSC0 | END ASC, | _1SENTRY.DATE_TIME_DOCID DESC тоже отрабатывает нормально |
|||
2
andrey153
15.08.12
✎
07:33
|
Попробуй добавить в начале set nocount on;
|
|||
3
zling
15.08.12
✎
07:35
|
(2) О! 25 строк вернулось :) Спасибо!!! Ща проверять буду :)
|
|||
4
Mikeware
15.08.12
✎
07:41
|
ВыполнитьИнструкцию(<?>,<?>,<?>)
ExecuteStatement(<?>,<?>,<?>) Синтаксис: ExecuteStatement(strTextSQL, obVT, bEraseVT) Назначение: Выполняет SQL запрос, при ошибке парсинга или при ошибке на ODBC драйвере формируется исключение. Если запрос возвращает набор строк, метод возвращает объект с результатом запроса, если запрос не возвращает набор строк (не select, а DML или прочий), возвращается количество обработанных строк. Если запрос содержит несколько SQL инструкций (multistatement batch), результаты возвращаются только от первой инструкции. Однако, на драйвер уходит весь текст запроса (По спецификации ODBC, будут ли выполнены остальные инструкции в пакете зависит от драйвера. Для драйвера SQL Server они выполняются), остальные результаты игнорируются. Если запрос возвращает набор данных, и в наборе данных нет ни одной строки, это не является ошибкой. Если запрос не параметризированный - метод гарантированно закрывает курсор. Возвращает: объект с результатом запроса (ТаблицаЗначений или наследник), или число - количество обработанных строк. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |