Для знатоков MSSQL. Ошибка возникает только в серверном режиме. #769825


#0 by ssalikoff
В полностью типовой конфигурации УТ 11.2.3.108 в модуле формы «ФормаВыбораИзДокуменов» справочника «УпаковкиЕдиницыИзмерения» имеется следующий код:         И НЕ СпрУпаковки.ПометкаУдаления               Попытка выполнить запрос заканчивается неудачей: система сообщает, что происходит деление на 0. При этом СпрУпаковки.Знаменатель не равен нулю, он у меня для любой номенклатурной позиции равен 1. База работает через MSSQL. Интересные моменты: 1. Тот же запрос, выполняемый на файловой базе, отрабатывает безошибочно. 2. Если убрать ИЕРАРХИЯ из запроса, то запрос выполнится без проблем. 3. Выражение в скобках после ПО может принимать три возможных значения, которые возвращает оператор ВЫБОР. Пробую упростить выражение. Меняю выражение в скобках последовательно на При любом варианте запрос выполняется без проблем.      Я решил, что проблема, возможно, находится в SQL-сервере. Перенес базу на другую машину, на другой SQL-сервер (другой версии). То же самое: проблема остаётся. Думаю дальше: может быть, платформа (у меня последняя, 8.3.7.2008) как-то неправильно генерирует запрос для SQL? Проверим. Запускаем профайлер, получаем результирующий запрос:     Экспериментирую с запросом в SQL Management Studio. «Обнаружена ошибка: деление на ноль.» — говорит система. Проверяю — в T2._Fld7361 находится 1. В секции ORDER BY находятся два поля. Если убрать любое из них, оставив одно, ошибка исчезает. Если их поменять местами, ошибка исчезает. Проведя такое исследование проблемы, я так и не понял её причины. Не хватает знаний. Саму проблему я обошёл, переписав немного код в модуле формы. Но мне очень хочется знать причины подобного поведения и поэтому я обращаю свой вопрос к знатокам SQL: что это всё значит? Почему и отчего? Да, кстати, проблема появилась в релизе 11.2.3.108 (именно в нём разработчики изменили код запроса). Релиз уже недели три как вышел, но на сайте обновлений нет никакой информации о планируемых версиях. Вообще. Ведь, наверное, тысячи людей должны были столкнуться с этой ошибкой, которая просто не позволяет работать и которую нельзя обойти без изменения кода.
#1 by mehfk
Не в курсе устройства УТ 11, но в Справочник.УпаковкиЕдиницыИзмерения у тебя группы есть?
#2 by vvp91
Для отладки замени поле Коэффициент на два поля - Числитель и Знаменатель. Выведи запрос в консоле. Посмотри на выгрузку, увидишь записи с нулевым знаменателем.
#3 by Ёпрст
СпрУпаковки.Владелец с СпрНоменклатура.НаборУпаковок ???? Это всегда ЛОЖЬ ибо ССылка на Номенклатуру никогда не равна ссылке Справочник.НаборыУпаковок
#4 by Фрэнки
мявкну такое: mssql какого релиза? может уже пора обновить его на 2014-ый? Если ставим платформу последнего релиза, то почему субд в соответствующий ей релиз не ставим?
#5 by assasu
валится на группах. у групп К=0
#6 by Фрэнки
лично я только не пойму, почему у ТС группы вылазят только в серверном режиме? разные данные использует в тестах?
#7 by assasu
хз.
#8 by Тролль главный
по-разному движок обрабатывает
#9 by assasu
в конфигураторе для реквизитов есть настройки "Для элементов", "Для групп","Для Групп и элементов". Может файловая уже правильно понимает это заранее ?
#10 by Fedor-1971
Иерархия Ссылка - формирует сводную запись, как думаешь  СпрУпаковки.Знаменатель = Сколько? Для чистоты эксперимента - выгрузи серверную БД в DT и загрузи в файловую, выполни запрос и посмотри что произойдёт. это вряд ли, в запросе создано вычисляемое поле. Скорее всего просто использует для тестов данные без групп
#11 by Тролль главный
надо профайлер смотреть у серверной базы
#12 by Fedor-1971
ошибся! в запросе Упорядочить, а не Сгруппировать
#13 by trdm
Когда уже сделает теги для кода...
#14 by Фрэнки
да фиг с ним с движком, но таблица на выходе должна быть с одинаковыми строками, по идее. Ну на одинаковых данных, конечно.
#15 by ssalikoff
MSSQL 2014 На другой машине, где я пробовал, 2008 стоит Поведение одинаковое
#16 by Ёпрст
к чему вообще этот г-код ?
#17 by ssalikoff
«Для чистоты эксперимента - выгрузи серверную БД в DT и загрузи в файловую, выполни запрос и посмотри что произойдёт. » Именно это я и сделал. Об этом написано в
#18 by ssalikoff
Этот код выполняется при выборе упаковки из выпадающего списка. В любом документе, где в табличной части указывается номенклатура, также указывается упаковка. И вот при попытке её выбора работает этот код.
#19 by Ёпрст
см. ,
#20 by ssalikoff
Это сделано. Об этом написано в . Результаты проанализированы и выложены для обозрения
#21 by rs_trade
Проверяю — в T2._Fld7361 находится 1. А как ты это проверяешь?
#22 by ssalikoff
select T2._Fld7361  from ....
#23 by ssalikoff
Бред.
#24 by Ёпрст
че бред ?
#25 by Ёпрст
это че, по твоему ?
#26 by ssalikoff
Сообщение в . Вы в курсе, как в УТ 11.2 реализован механизм упаковок номенклатуры?
#27 by rs_trade
поставь поле просто рядом в запросе, а вместо него единицу. посмотри выборку.(CAST(T2._Fld7360 AS NUMERIC(20, 8)) / 1,T2._Fld7361,
#28 by Ёпрст
зачем иннер джоин вот с этим ??? ПО (СпрУпаковки.Владелец = СпрНоменклатура.НаборУпаковок) ??? это всешда ложь
#29 by Ёпрст
нет,  но если ты сравниваешь перед этим НаборУпаковок <> ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ПустаяСсылка) отсюда следует, что НаборУпаковок  - тип Справочник.НаборыУпаковок, а не Справочник.Номенклатура..
#30 by Ёпрст
дальше смотри
#31 by Ёпрст
ну и .
#32 by ssalikoff
Именно так и делал! T2._Fld7361 = 1 (Это знаменатель) (CAST(T2._Fld7360 AS NUMERIC(20, 8)) / 1 (Это числитель) Все выполняется корректно. Вот именно поэтому я и недоумеваю и задаю вопрос на форуме. Как это такое может быть?
#33 by ssalikoff
Ещё раз повторяю - если интересно, откройте УТ 11.2 и посмотрите, как устроен справочник УпаковкиНоменклатуры. Всё в коде правильно. Тем более, что он типовой, а не мой собственный.
#34 by rs_trade
Если убрать ИЕРАРХИЯ из запроса, то запрос выполнится без проблем. А это уже не этот, а следующий запрос от сервера 1с. В этом запросе нет проблем значит.
#35 by ssalikoff
не понял. Какой ещё следующий запрос от сервера?
#36 by Карупян
если без иерархии работает, то сделай проверку на группы
#37 by ssalikoff
что значит проверку на группы? что именно проверить?
#38 by Фрэнки
у элемента реквизит или поле - есть у группы - нет " по иерархии " дополняет выборку строками с группами но почему-то в случае выборки из файлового режима работы базы этих строк нет. Может быть это как-то связано с версией платформы или еще с чем-то подобным, т.к. версии mssql вы использовали разные и результаты серверного режима у вас одинаковые.
#39 by rs_trade
ИЕРАРХИЯ это же чисто 1с-ная фича и выполняется доп. запросами.получается основной набор данных, сервер 1с их колбасит у себя и кидает еще доп. запросы к скл.
#40 by rs_trade
+ правда делений там быть никаких не должно вроде как. Чет путано немного. Если убрать ИЕРАРХИЯ из запроса, то запрос выполнится без проблем.Но в приведенной трассе и так нет никаких иерархий.
#41 by Тролль главный
ВЫБОР КОГДА НЕ СпрУпаковки.ЭтоГруппа ТОГДА СпрУпаковки.Числитель / СпрУпаковки.Знаменатель КОНЕЦ
#42 by ssalikoff
Я без понятия, как платформа транслирует запрос из языка 1С в T-SQL Ведь в T-SQL нет оператора ИЕРАРХИЯ, он там как-то по другому реализуется?
#43 by ssalikoff
Кстати, может я в профайлере что-то упустил, и какие-то дополнительные запросы платформы не увидел. Но, я  думаю, это не очень страшно, так как в той трассе, что я привёл, ошибка и возникает.
#44 by MiniMuk
Потверждаю та же ошибка. Создали группу в единицах измерений, при выборе единиц измерений в скульной версии падаете, ищу варианты решений
#45 by Карупян
Покажи запрос SQL который падает
#46 by Фрэнки
так все о том, что в - и он типовой вроде бы.
#47 by Карупян
ну и что в типовых ошибок чтоли не бывает?
#48 by Фрэнки
Ты спросил где текст запроса - я ответил. Что бывает в типовых или нет, я не обсуждал, сказал только к тому, что его можно в своем конфиге найти при желании
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С