Имя: Пароль:
1C
1C 7.7
v7: 1c++ работа на MS SQL 2000 и MS SQL 2008
,
0 dk
 
24.01.17
09:54
Исходные
Распределенка
1 узел MSSQL 2000
2 узел MSSQL 2008 64бит в режиме совместимости 2000
-------
Есть 1с ++ запрос
в узле 2 работает
в узле 1 не работает
------
сам запрос ниже
-----
Вопрос какие запросы могут работать в одной версии и не работать в другой?
1 Ёпрст
 
24.01.17
09:55
>>>2 узел MSSQL 2008 64бит в режиме совместимости 2000
вот это не верно, не надо понижать уровень совместимости
2 Ёпрст
 
24.01.17
09:56
Если CTE какое-нить, то его только с 2005 придумали
3 dk
 
24.01.17
09:56
Сам запрос

INSERT INTO #ОстаткиОбороты  
SELECT    
    CASE WHEN СпрТовРод1.ID IS NOT NULL
        THEN СпрТовРод1.ID
        ELSE
            CASE WHEN СпрТовРодПервый.ID IS NOT NULL
                THEN СпрТовРодПервый.ID
                ELSE СпрТовРод.ID
            END
    END AS Группа1
    ,CASE WHEN (СпрТовРод1.ID IS NOT NULL) AND (СпрТовРодПервый.ID IS NOT NULL)
       THEN СпрТовРодПервый.ID
        ELSE СпрТовРод.ID  
    END AS Группа2
   ,CASE WHEN (СпрТовРод1.ID IS NOT NULL) AND (СпрТовРодПервый.ID IS NOT NULL)  
        THEN СпрТовРод.ID
        ELSE NULL
    END AS Группа3
    ,CASE WHEN СпрТовРод1.ID IS NOT NULL
        THEN СпрТовРод1.CODE
        ELSE
            CASE WHEN СпрТовРодПервый.ID IS NOT NULL
                THEN СпрТовРодПервый.CODE
                ELSE СпрТовРод.CODE
            END
    END AS КодГруппа1
    ,CASE WHEN (СпрТовРод1.ID IS NOT NULL) AND (СпрТовРодПервый.ID IS NOT NULL)
       THEN СпрТовРодПервый.CODE
        ELSE СпрТовРод.CODE  
    END AS КодГруппа2
   ,CASE WHEN (СпрТовРод1.ID IS NOT NULL) AND (СпрТовРодПервый.ID IS NOT NULL)  
        THEN СпрТовРод.CODE
        ELSE NULL
    END AS КодГруппа3
,$ПоследнееЗначение.Номенклатура.Автор(СпрТов.ID, :Кон) Группа4
, 0                                                        КодГруппа4
, Запрос.Поставщик                                        СтранаПоставщик
  
, Запрос.Товар                ТоварID
, Запрос.ОстатокТовара        ОстатокТовара
, Запрос.СуммаСтоимость        СуммаСтоимость          
, Запрос.СуммаСтоимостьМПР    СуммаСтоимостьМПР
, Запрос.СуммаСтоимостьСети    СуммаСтоимостьСети          
, Запрос.СуммаДоставка        СуммаДоставка          
, Запрос.СуммаПриход            СуммаПриход
, Запрос.СуммаОборот            СуммаОборот
, Запрос.СуммаОборотМПР        СуммаОборотМПР
, Запрос.СуммаОборотСети        СуммаОборотСети
, Запрос.СуммаСписано            СуммаСписано    
, Запрос.СуммаСписаноМПР        СуммаСписаноМПР
, Запрос.СуммаСписаноСети        СуммаСписаноСети
, Запрос.ДоставкаСписано        ДоставкаСписано
, Запрос.СуммаОбъем
, Запрос.СуммаОбъемМПР
, Запрос.СуммаОбъемСети
  
,Запрос.ПродажиКлОборот    ПродажиКлОборот
,Запрос.ПродажиКлСписано    ПродажиКлСписано
FROM (                                    
    SELECT
    ТоварыПоСкладам.Товар            Товар
    ,ТоварыПоСкладам.Поставщик        Поставщик
    ,ТоварыПоСкладам.Склад            Склад
    ,0 ОстатокТовара
    ,0 СуммаСтоимость                          
    ,0 СуммаСтоимостьМПР                          
    ,0 СуммаСтоимостьСети                          
    ,0 СуммаДоставка                          
    ,0 СуммаПриход        
    ,Sum(ТоварыПоСкладам.СуммаОборот)    СуммаОборот
    ,Sum(ТоварыПоСкладам.СуммаСписано)    СуммаСписано        
    ,Sum(ТоварыПоСкладам.ДоставкаСписано)    ДоставкаСписано        

    ,0    СуммаОборотМПР
    ,0    СуммаСписаноМПР        
    ,0    СуммаОборотСети
    ,0    СуммаСписаноСети        
  
    ,0        СуммаОбъем    
    ,0        СуммаОбъемМПР
    ,0        СуммаОбъемСети
    ,Sum(ТоварыПоСкладам.ПродажиКлОборот)        ПродажиКлОборот
    ,Sum(ТоварыПоСкладам.ПродажиКлСписано)        ПродажиКлСписано
FROM (                                    
    SELECT
    $ТоварыПоСкладам.Товар            Товар
    ,$ТоварыПоСкладам.Поставщик        Поставщик
    ,$ТоварыПоСкладам.Склад            Склад
    ,0 ОстатокТовара
    ,0 СуммаСтоимость                          
    ,0 СуммаСтоимостьМПР                          
    ,0 СуммаСтоимостьСети                          
    ,0 СуммаДоставка                          
    ,0 СуммаПриход        
    ,$ТоварыПоСкладам.Оборот    СуммаОборот
    ,$ТоварыПоСкладам.Списание    СуммаСписано        
    ,$ТоварыПоСкладам.Доставка    ДоставкаСписано        

  
,CASE WHEN ТоварыПоСкладам.IDDOC IN
    (SELECT IDDOC FROM #СписокДокПрод) THEN $ТоварыПоСкладам.Оборот ELSE 0 END        ПродажиКлОборот

,CASE WHEN ТоварыПоСкладам.IDDOC IN
    (SELECT IDDOC FROM #СписокДокПрод) THEN $ТоварыПоСкладам.Списание ELSE 0 END        ПродажиКлСписано
  
FROM
    $Регистр.ТоварыПоСкладам AS ТоварыПоСкладам (NOLOCK)
WHERE
    (ТоварыПоСкладам.DATE_TIME_IDDOC between :Нач AND :Кон~)
    AND $ТоварыПоСкладам.ВидДвижения <>  :Приход
    AND $ТоварыПоСкладам.ВидДвижения <>  :Трансфер
AND  
$ТоварыПоСкладам.Товар IN  (SELECT val FROM #МФНоменклатура)



) ТоварыПоСкладам
GROUP BY
    ТоварыПоСкладам.Товар
    ,ТоварыПоСкладам.Поставщик
    ,ТоварыПоСкладам.Склад


UNION ALL

SELECT
     $ТоварыПоСкладам.Товар        Товар  
    ,$ТоварыПоСкладам.Поставщик Поставщик
    ,$ТоварыПоСкладам.Склад        Склад
    ,0 ОстатокТовара
    ,0 СуммаСтоимость                          
    ,0 СуммаСтоимостьМПР                          
    ,0 СуммаСтоимостьСети                          
    ,0 СуммаДоставка                          
    ,Sum($ТоварыПоСкладам.Стоимость) СуммаПриход        
    ,0 СуммаОборот
    ,0 СуммаСписано    
    ,0 ДоставкаСписано                
    ,0 СуммаОборотМПР
    ,0 СуммаСписаноМПР        
    ,0 СуммаОборотСети
    ,0 СуммаСписаноСети        
    ,0 СуммаОбъем    
    ,0 СуммаОбъемМПР
    ,0 СуммаОбъемСети
  
,0 ПродажиКлОборот
,0 ПродажиКлСписано
  
FROM $Регистр.ТоварыПоСкладам AS ТоварыПоСкладам (NOLOCK)
WHERE (ТоварыПоСкладам.DATE_TIME_IDDOC between :Нач AND :Кон~)
    AND $ТоварыПоСкладам.ВидДвижения = :Приход
AND  
$ТоварыПоСкладам.Товар IN  (SELECT val FROM #МФНоменклатура)



GROUP BY
    $ТоварыПоСкладам.Поставщик
    , $ТоварыПоСкладам.Товар
    , $ТоварыПоСкладам.Склад
        
UNION ALL

SELECT
    ТоварыПоСкладамОстатки.Товар                        Товар
    ,ТоварыПоСкладамОстатки.Поставщик                    Поставщик                  
    ,ТоварыПоСкладамОстатки.Склад                        Склад
    ,Sum(ТоварыПоСкладамОстатки.ОстатокТовараОстаток)    ОстатокТовара  
    ,Sum(ТоварыПоСкладамОстатки.СтоимостьОстаток)        СуммаСтоимость
    ,0 СуммаСтоимостьМПР
    ,0 СуммаСтоимостьСети
  
    ,Sum(ТоварыПоСкладамОстатки.ДоставкаОстаток)        СуммаДоставка    
    ,0 СуммаПриход
    ,0 СуммаОборот
    ,0 СуммаСписано
    ,0 ДоставкаСписано                
    ,0 СуммаОборотМПР
    ,0 СуммаСписаноМПР        
    ,0 СуммаОборотСети
    ,0 СуммаСписаноСети        
    ,Sum(ТоварыПоСкладамОстатки.ОбъемОстаток)            СуммаОбъем
    ,0 СуммаОбъемМПР
    ,0 СуммаОбъемСети
  
,0 ПродажиКлОборот
,0 ПродажиКлСписано
  
FROM
    $РегистрОстатки.ТоварыПоСкладам(:Кон~, ,            

Товар IN  (SELECT val FROM #МФНоменклатура)

        
,(Товар,Склад,Поставщик),(ОстатокТовара, Стоимость, Доставка, Объем)) AS ТоварыПоСкладамОстатки
GROUP BY
    ТоварыПоСкладамОстатки.Поставщик
    ,ТоварыПоСкладамОстатки.Товар
    ,ТоварыПоСкладамОстатки.Склад
) AS Запрос
INNER JOIN
    $Справочник.Номенклатура СпрТов (NOLOCK) ON СпрТов.ID=Запрос.Товар LEFT JOIN
    $Справочник.Номенклатура СпрТовРод (NOLOCK) ON СпрТов.PARENTID= СпрТовРод.ID LEFT JOIN
    $Справочник.Номенклатура СпрТовРодПервый (NOLOCK) ON СпрТовРод.PARENTID= СпрТовРодПервый.ID LEFT JOIN
    $Справочник.Номенклатура СпрТовРод1 (NOLOCK) ON СпрТовРодПервый.PARENTID= СпрТовРод1.ID

UNION ALL

SELECT
    Группа1
    , Группа2
   , Группа3
    , КодГруппа1
    , КодГруппа2
   , КодГруппа3
    , Группа4
    , КодГруппа4
    , СтранаПоставщик
  
, ТоварID
, ОстатокТовара
, СуммаСтоимость          
, СуммаСтоимостьМПР
, СуммаСтоимостьСети          
, СуммаДоставка          
, СуммаПриход
, СуммаОборот
, СуммаОборотМПР
, СуммаОборотСети
, СуммаСписано    
, СуммаСписаноМПР
, СуммаСписаноСети
, ДоставкаСписано
, СуммаОбъем
, СуммаОбъемМПР
, СуммаОбъемСети

    , ПродажиКлОборот
    , ПродажиКлСписано    

FROM #ОстаткиОборотыШоп
4 Ёпрст
 
24.01.17
09:56
или еще какие специфические плюшки от старших версий.
5 АЛьФ
 
24.01.17
09:57
Что значит "не работает"?
6 dk
 
24.01.17
09:57
т.е. изначально был большой запрос и при добавлении куска

UNION ALL

SELECT
    Группа1
    , Группа2
   , Группа3
    , КодГруппа1
    , КодГруппа2
   , КодГруппа3
    , Группа4
    , КодГруппа4
    , СтранаПоставщик
  
, ТоварID
, ОстатокТовара
, СуммаСтоимость          
, СуммаСтоимостьМПР
, СуммаСтоимостьСети          
, СуммаДоставка          
, СуммаПриход
, СуммаОборот
, СуммаОборотМПР
, СуммаОборотСети
, СуммаСписано    
, СуммаСписаноМПР
, СуммаСписаноСети
, ДоставкаСписано
, СуммаОбъем
, СуммаОбъемМПР
, СуммаОбъемСети

    , ПродажиКлОборот
    , ПродажиКлСписано    

FROM #ОстаткиОборотыШоп

в 2000 все валится
7 Ёпрст
 
24.01.17
09:58
(3) заместо case пользуй coalesce, а то глаза режет ажно
8 Ёпрст
 
24.01.17
09:59
(6) с какой ошибкой хоть "валится" ?
И это, псевдонимы поназначай разные
9 dk
 
24.01.17
09:59
(5) ошибка скуля
State 42000, native 104, message [Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if the statement contains a UNION operator.
10 АЛьФ
 
24.01.17
10:01
2(9) Вроде как все доходчиво написано.
"ORDER BY пункты должны появиться в списке выбора, если оператор содержит оператор UNION."
11 Курцвейл
 
24.01.17
10:01
(9) Упорядочил врем таблицу?
12 Ёпрст
 
24.01.17
10:01
И это, UNION ALL нужно было втыкать унутрь подзапроса
) AS Запрос который
13 dk
 
24.01.17
10:02
собственно решение уже есть - обернуть все в select * from (....) влож
но просто непонятно
(12) не, там разный набор полей, но в теории можно
14 dk
 
24.01.17
10:03
(10) ну как бы и почему в одном узле работает, а в другом нет?
15 dk
 
24.01.17
10:03
(11) нет
16 Ёпрст
 
24.01.17
10:04
(13) а че непонятного ? Не надо упорядочивать запросы в юнионе
в этом нет никакого смысла
17 dk
 
24.01.17
10:13
(16) дык нет order by
18 Ёпрст
 
24.01.17
10:18
(17) ну как нету, конда скуль тебе об этом сообщает
19 Ёпрст
 
24.01.17
10:19
и #ОстаткиОборотыШоп откуда взялась ?
20 Ёпрст
 
24.01.17
10:19
че в ней ? Как создаешь ?
21 Это_mike
 
24.01.17
10:21
(18) а он не из ПоследнееЗначение берется?
22 dk
 
24.01.17
10:24
(20) Это данные из другой базы
создаю через

|if (select object_id('tempdb..#ОстаткиОборотыШоп')) is NOT null DROP TABLE #ОстаткиОборотыШоп
    |CREATE TABLE #ОстаткиОборотыШоп (
    |    Группа1        char(9)       DEFAULT $ПустойИд  ,
    |    Группа2        char(9)       DEFAULT $ПустойИд  ,
    |    Группа3        char(9)       DEFAULT $ПустойИд  ,
    |    КодГруппа1    char(7)       ,
    |    КодГруппа2    char(7)       ,
    |    КодГруппа3    char(7)       ,
    |    Группа4        char(9)       DEFAULT $ПустойИд  ,
    |    КодГруппа4    char(7)       ,
    |    СтранаПоставщик        char(9)       DEFAULT $ПустойИд  ,
    |";
    Если (ПС > 0) Тогда
        ТекстЗапросТемп = ТекстЗапросТемп + "
        |Склад    char(9)        DEFAULT $ПустойИд    ,          
        | ";
    КонецЕсли;    
    ТекстЗапросТемп = ТекстЗапросТемп + "
    |    ТоварID                char(9)       DEFAULT $ПустойИд  ,
    |    ОстатокТовара        numeric(19,0) DEFAULT 0          ,
    |    СуммаСтоимость        numeric(19,5) DEFAULT 0          ,
    |    СуммаСтоимостьМПР    numeric(19,5) DEFAULT 0          ,
    |    СуммаСтоимостьСети    numeric(19,5) DEFAULT 0          ,
    |    СуммаДоставка        numeric(19,5) DEFAULT 0          ,
    |    СуммаПриход            numeric(19,5) DEFAULT 0          ,
    |    СуммаОборот            numeric(19,5) DEFAULT 0          ,
    |    СуммаОборотМПР        numeric(19,5) DEFAULT 0          ,
    |    СуммаОборотСети        numeric(19,5) DEFAULT 0          ,
    |    СуммаСписано        numeric(19,5) DEFAULT 0          ,
    |    СуммаСписаноМПР        numeric(19,5) DEFAULT 0          ,
    |    СуммаСписаноСети    numeric(19,5) DEFAULT 0          ,
    |    ДоставкаСписано        numeric(19,5) DEFAULT 0          ,
    |    СуммаОбъем            numeric(19,5) DEFAULT 0          ,
    |    СуммаОбъемМПР        numeric(19,5) DEFAULT 0          ,
    |    СуммаОбъемСети        numeric(19,5) DEFAULT 0          
    |";
    Если (МФКлн.РазмерСписка() > 0) или (МФКлнИскл.РазмерСписка() > 0) Тогда
        ТекстЗапросТемп = ТекстЗапросТемп + "
        |,ПродажиКлОборот    numeric(19,5) DEFAULT 0          
        |,ПродажиКлСписано    numeric(19,5) DEFAULT 0          
        | ";
    КонецЕсли;    
    
    ТекстЗапросТемп = ТекстЗапросТемп + "
    |)";
    
    ЗапросТемп.ВыполнитьСкалярный(ТекстЗапросТемп);

заполняю через

        ЗапросТемп.Подготовить("INSERT INTO #ОстаткиОборотыШоп VALUES("+СтрГр+")");
        ЗапросТемп.ВыполнитьSQL_ИзТЗ(ВремТЗ);
23 trad
 
24.01.17
10:32
иниону мешает ордербай из последнегоЗначения
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший