| 
    
            
         
         | 
    
  | 
Для знатоков MSSQL. Ошибка возникает только в серверном режиме. | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        ssalikoff    
     12.04.16 
            ✎
    04:06 
 | 
         
        В полностью типовой конфигурации УТ 11.2.3.108 в модуле формы «ФормаВыбораИзДокуменов» справочника «УпаковкиЕдиницыИзмерения»
 
        имеется следующий код: ВЫБРАТЬ СпрУпаковки.Ссылка КАК Ссылка, СпрУпаковки.Числитель / СпрУпаковки.Знаменатель КАК Коэффициент ИЗ Справочник.Номенклатура КАК СпрНоменклатура ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК СпрУпаковки ПО (СпрУпаковки.Владелец = ВЫБОР КОГДА СпрНоменклатура.НаборУпаковок = ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ИндивидуальныйДляНоменклатуры) ТОГДА СпрНоменклатура.Ссылка КОГДА СпрНоменклатура.НаборУпаковок <> ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ПустаяСсылка) ТОГДА СпрНоменклатура.НаборУпаковок ИНАЧЕ ЛОЖЬ КОНЕЦ) ГДЕ СпрНоменклатура.Ссылка = &Номенклатура И НЕ СпрУпаковки.ПометкаУдаления УПОРЯДОЧИТЬ ПО Ссылка ИЕРАРХИЯ Попытка выполнить запрос заканчивается неудачей: система сообщает, что происходит деление на 0. При этом СпрУпаковки.Знаменатель не равен нулю, он у меня для любой номенклатурной позиции равен 1. http://f-picture.net/fp/67b7387a49a44b85a2eef41299098e13 http://radikal.ru/fp/b41fcae3a5d842be9bcf46e2f2ca6669 База работает через MSSQL. Интересные моменты: 1. Тот же запрос, выполняемый на файловой базе, отрабатывает безошибочно. 2. Если убрать ИЕРАРХИЯ из запроса, то запрос выполнится без проблем. 3. Выражение в скобках после ПО может принимать три возможных значения, которые возвращает оператор ВЫБОР. Пробую упростить выражение. Меняю выражение в скобках последовательно на СпрУпаковки.Владелец = СпрНоменклатура.Ссылка СпрУпаковки.Владелец = СпрНоменклатура.НаборУпаковок СпрУпаковки.Владелец = ЛОЖЬ При любом варианте запрос выполняется без проблем. Я решил, что проблема, возможно, находится в SQL-сервере. Перенес базу на другую машину, на другой SQL-сервер (другой версии). То же самое: проблема остаётся. Думаю дальше: может быть, платформа (у меня последняя, 8.3.7.2008) как-то неправильно генерирует запрос для SQL? Проверим. Запускаем профайлер, получаем результирующий запрос: http://pastebin.com/Q1wveSK7 Экспериментирую с запросом в SQL Management Studio. «Обнаружена ошибка: деление на ноль.» — говорит система. Проверяю — в T2._Fld7361 находится 1. В секции ORDER BY находятся два поля. Если убрать любое из них, оставив одно, ошибка исчезает. Если их поменять местами, ошибка исчезает. Проведя такое исследование проблемы, я так и не понял её причины. Не хватает знаний. Саму проблему я обошёл, переписав немного код в модуле формы. Но мне очень хочется знать причины подобного поведения и поэтому я обращаю свой вопрос к знатокам SQL: что это всё значит? Почему и отчего? Да, кстати, проблема появилась в релизе 11.2.3.108 (именно в нём разработчики изменили код запроса). Релиз уже недели три как вышел, но на сайте обновлений нет никакой информации о планируемых версиях. Вообще. Ведь, наверное, тысячи людей должны были столкнуться с этой ошибкой, которая просто не позволяет работать и которую нельзя обойти без изменения кода.  | 
|||
| 
    1
    
        mehfk    
     12.04.16 
            ✎
    06:09 
 | 
         
        Не в курсе устройства УТ 11, но в Справочник.УпаковкиЕдиницыИзмерения у тебя группы есть?     
         | 
|||
| 
    2
    
        vvp91    
     12.04.16 
            ✎
    06:17 
 | 
         
        Для отладки замени поле Коэффициент на два поля - Числитель и Знаменатель. Выведи запрос в консоле. Посмотри на выгрузку, увидишь записи с нулевым знаменателем.     
         | 
|||
| 
    3
    
        Ёпрст    
     гуру 
    12.04.16 
            ✎
    07:37 
 | 
         
        зачем сравнивать
 
        СпрУпаковки.Владелец с СпрНоменклатура.НаборУпаковок ???? Это всегда ЛОЖЬ ибо ССылка на Номенклатуру никогда не равна ссылке Справочник.НаборыУпаковок  | 
|||
| 
    4
    
        Фрэнки    
     12.04.16 
            ✎
    08:01 
 | 
         
        мявкну такое: mssql какого релиза? может уже пора обновить его на 2014-ый? Если ставим платформу последнего релиза, то почему субд в соответствующий ей релиз не ставим?     
         | 
|||
| 
    5
    
        assasu    
     12.04.16 
            ✎
    08:26 
 | 
         
        валится на группах. у групп К=0     
         | 
|||
| 
    6
    
        Фрэнки    
     12.04.16 
            ✎
    08:36 
 | 
         
        (5) лично я только не пойму, почему у ТС группы вылазят только в серверном режиме? разные данные использует в тестах?     
         | 
|||
| 
    7
    
        assasu    
     12.04.16 
            ✎
    08:39 
 | 
         
        (6) хз.     
         | 
|||
| 
    8
    
        Тролль главный    
     12.04.16 
            ✎
    08:43 
 | 
         
        (6) по-разному движок обрабатывает     
         | 
|||
| 
    9
    
        assasu    
     12.04.16 
            ✎
    08:45 
 | 
         
        (8) в конфигураторе для реквизитов есть настройки "Для элементов", "Для групп","Для Групп и элементов". Может файловая уже правильно понимает это заранее ?     
         | 
|||
| 
    10
    
        Fedor-1971    
     12.04.16 
            ✎
    08:48 
 | 
         
        (0) Иерархия Ссылка - формирует сводную запись, как думаешь  СпрУпаковки.Знаменатель = Сколько?
 
        Для чистоты эксперимента - выгрузи серверную БД в DT и загрузи в файловую, выполни запрос и посмотри что произойдёт. (9) это вряд ли, в запросе создано вычисляемое поле. Скорее всего просто использует для тестов данные без групп  | 
|||
| 
    11
    
        Тролль главный    
     12.04.16 
            ✎
    08:51 
 | 
         
        (9) надо профайлер смотреть у серверной базы     
         | 
|||
| 
    12
    
        Fedor-1971    
     12.04.16 
            ✎
    08:52 
 | 
         
        (10) ошибся! в запросе Упорядочить, а не Сгруппировать     
         | 
|||
| 
    13
    
        trdm    
     12.04.16 
            ✎
    08:53 
 | 
         
        Когда уже Asmody сделает теги для кода...     
         | 
|||
| 
    14
    
        Фрэнки    
     12.04.16 
            ✎
    09:08 
 | 
         
        (8) да фиг с ним с движком, но таблица на выходе должна быть с одинаковыми строками, по идее. Ну на одинаковых данных, конечно.     
         | 
|||
| 
    15
    
        ssalikoff    
     12.04.16 
            ✎
    09:53 
 | 
         
        (4) MSSQL 2014
 
        На другой машине, где я пробовал, 2008 стоит Поведение одинаковое  | 
|||
| 
    16
    
        Ёпрст    
     гуру 
    12.04.16 
            ✎
    09:54 
 | 
         
        (15) к чему вообще этот г-код ?     
         | 
|||
| 
    17
    
        ssalikoff    
     12.04.16 
            ✎
    09:55 
 | 
         
        (10)
 
        «Для чистоты эксперимента - выгрузи серверную БД в DT и загрузи в файловую, выполни запрос и посмотри что произойдёт. » Именно это я и сделал. Об этом написано в (0)  | 
|||
| 
    18
    
        ssalikoff    
     12.04.16 
            ✎
    09:57 
 | 
         
        (16) Этот код выполняется при выборе упаковки из выпадающего списка.
 
        В любом документе, где в табличной части указывается номенклатура, также указывается упаковка. И вот при попытке её выбора работает этот код.  | 
|||
| 
    19
    
        Ёпрст    
     гуру 
    12.04.16 
            ✎
    09:58 
 | 
         
        (17) см. (2),(3)     
         | 
|||
| 
    20
    
        ssalikoff    
     12.04.16 
            ✎
    09:58 
 | 
         
        (11) Это сделано. Об этом написано в (0). Результаты проанализированы и выложены для обозрения     
         | 
|||
| 
    21
    
        rs_trade    
     12.04.16 
            ✎
    09:59 
 | 
         
        (0) Проверяю — в T2._Fld7361 находится 1.  
        А как ты это проверяешь?  | 
|||
| 
    22
    
        ssalikoff    
     12.04.16 
            ✎
    10:00 
 | 
         
        (21) select T2._Fld7361  from ....
 
        это очевидно  | 
|||
| 
    23
    
        ssalikoff    
     12.04.16 
            ✎
    10:02 
 | 
         
        (3) Бред.     
         | 
|||
| 
    24
    
        Ёпрст    
     гуру 
    12.04.16 
            ✎
    10:04 
 | 
         
        (23) че бред ?     
         | 
|||
| 
    25
    
        Ёпрст    
     гуру 
    12.04.16 
            ✎
    10:05 
 | 
         
        КОГДА СпрНоменклатура.НаборУпаковок <> ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ПустаяСсылка)
 
        ТОГДА СпрНоменклатура.НаборУпаковок это че, по твоему ?  | 
|||
| 
    26
    
        ssalikoff    
     12.04.16 
            ✎
    10:05 
 | 
         
        (24) Сообщение в (3). Вы в курсе, как в УТ 11.2 реализован механизм упаковок номенклатуры?     
         | 
|||
| 
    27
    
        rs_trade    
     12.04.16 
            ✎
    10:05 
 | 
         
        (22) поставь поле просто рядом в запросе, а вместо него единицу. посмотри выборку. 
        (CAST(T2._Fld7360 AS NUMERIC(20, 8)) / 1, T2._Fld7361,  | 
|||
| 
    28
    
        Ёпрст    
     гуру 
    12.04.16 
            ✎
    10:06 
 | 
         
        зачем иннер джоин вот с этим ???
 
        ПО (СпрУпаковки.Владелец = СпрНоменклатура.НаборУпаковок) ??? это всешда ложь  | 
|||
| 
    29
    
        Ёпрст    
     гуру 
    12.04.16 
            ✎
    10:07 
 | 
         
        (26) нет,  но если ты сравниваешь перед этим 
 
        НаборУпаковок <> ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ПустаяСсылка) отсюда следует, что НаборУпаковок - тип Справочник.НаборыУпаковок, а не Справочник.Номенклатура..  | 
|||
| 
    30
    
        Ёпрст    
     гуру 
    12.04.16 
            ✎
    10:07 
 | 
         
        дальше смотри (28)     
         | 
|||
| 
    31
    
        Ёпрст    
     гуру 
    12.04.16 
            ✎
    10:08 
 | 
         
        ну и (3).     
         | 
|||
| 
    32
    
        ssalikoff    
     12.04.16 
            ✎
    10:08 
 | 
         
        (27) Именно так и делал! T2._Fld7361 = 1 (Это знаменатель)
 
        (CAST(T2._Fld7360 AS NUMERIC(20, 8)) / 1 (Это числитель) Все выполняется корректно. Вот именно поэтому я и недоумеваю и задаю вопрос на форуме. Как это такое может быть?  | 
|||
| 
    33
    
        ssalikoff    
     12.04.16 
            ✎
    10:10 
 | 
         
        (31) Ещё раз повторяю - если интересно, откройте УТ 11.2 и посмотрите, как устроен справочник УпаковкиНоменклатуры. Всё в коде правильно. Тем более, что он типовой, а не мой собственный.     
         | 
|||
| 
    34
    
        rs_trade    
     12.04.16 
            ✎
    10:11 
 | 
         
        (0) Если убрать ИЕРАРХИЯ из запроса, то запрос выполнится без проблем.  
        А это уже не этот, а следующий запрос от сервера 1с. В этом запросе нет проблем значит.  | 
|||
| 
    35
    
        ssalikoff    
     12.04.16 
            ✎
    10:21 
 | 
         
        (34) не понял. Какой ещё следующий запрос от сервера?     
         | 
|||
| 
    36
    
        Карупян    
     12.04.16 
            ✎
    10:22 
 | 
         
        если без иерархии работает, то сделай проверку на группы     
         | 
|||
| 
    37
    
        ssalikoff    
     12.04.16 
            ✎
    10:24 
 | 
         
        (36) что значит проверку на группы? что именно проверить?     
         | 
|||
| 
    38
    
        Фрэнки    
     12.04.16 
            ✎
    10:34 
 | 
         
        (37) у элемента реквизит или поле - есть
 
        у группы - нет " по иерархии " дополняет выборку строками с группами но почему-то в случае выборки из файлового режима работы базы этих строк нет. Может быть это как-то связано с версией платформы или еще с чем-то подобным, т.к. версии mssql вы использовали разные и результаты серверного режима у вас одинаковые.  | 
|||
| 
    39
    
        rs_trade    
     12.04.16 
            ✎
    10:36 
 | 
         
        (35) ИЕРАРХИЯ это же чисто 1с-ная фича и выполняется доп. запросами. 
        получается основной набор данных, сервер 1с их колбасит у себя и кидает еще доп. запросы к скл.  | 
|||
| 
    40
    
        rs_trade    
     12.04.16 
            ✎
    10:39 
 | 
         
        +(39) правда делений там быть никаких не должно вроде как.  
        Чет путано немного. Если убрать ИЕРАРХИЯ из запроса, то запрос выполнится без проблем. Но в приведенной трассе и так нет никаких иерархий.  | 
|||
| 
    41
    
        Тролль главный    
     12.04.16 
            ✎
    10:39 
 | 
         
        ВЫБОР КОГДА НЕ СпрУпаковки.ЭтоГруппа ТОГДА СпрУпаковки.Числитель / СпрУпаковки.Знаменатель КОНЕЦ     
         | 
|||
| 
    42
    
        ssalikoff    
     12.04.16 
            ✎
    10:47 
 | 
         
        (40) Я без понятия, как платформа транслирует запрос из языка 1С в T-SQL
 
        Ведь в T-SQL нет оператора ИЕРАРХИЯ, он там как-то по другому реализуется?  | 
|||
| 
    43
    
        ssalikoff    
     12.04.16 
            ✎
    10:51 
 | 
         
        (39) Кстати, может я в профайлере что-то упустил, и какие-то дополнительные запросы платформы не увидел. Но, я  думаю, это не очень страшно, так как в той трассе, что я привёл, ошибка и возникает.     
         | 
|||
| 
    44
    
        MiniMuk    
     13.04.16 
            ✎
    10:42 
 | 
         
        Потверждаю та же ошибка. Создали группу в единицах измерений, при выборе единиц измерений в скульной версии падаете, ищу варианты решений     
         | 
|||
| 
    45
    
        Карупян    
     13.04.16 
            ✎
    10:45 
 | 
         
        (43) Покажи запрос SQL который падает     
         | 
|||
| 
    46
    
        Фрэнки    
     13.04.16 
            ✎
    10:55 
 | 
         
        (45) так все о том, что в (0) - и он типовой вроде бы.     
         | 
|||
| 
    47
    
        Карупян    
     13.04.16 
            ✎
    10:56 
 | 
         
        ну и что в типовых ошибок чтоли не бывает?     
         | 
|||
| 
    48
    
        Фрэнки    
     13.04.16 
            ✎
    11:06 
 | 
         
        (47) Ты спросил где текст запроса - я ответил. 
 
        Что бывает в типовых или нет, я не обсуждал, сказал только к тому, что его можно в своем конфиге найти при желании  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |