|
Ошибка при выполнении запроса из документа. В консоли ошибок нет. | ☑ | ||
---|---|---|---|---|
0
memogolik
04.06.15
✎
11:58
|
КА 1.1, документ инвентаризация.
По кнопке "Заполнить по остаткам на складе (упр. учет) выполняется обработка заполнения ТЧ. В результате выполнения обработки вылетает ошибка: {Документ.ИнвентаризацияТоваровНаСкладе.МодульОбъекта(904)}: Ошибка при вызове метода контекста (Выполнить) Выборка = Запрос.Выполнить().Выбрать(); по причине: Ошибка выполнения запроса по причине: Ошибка при выполнении операции над данными: Microsoft SQL Server Native Client 10.0: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric. HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1 В отладчике получаем текст запроса и параметры. В консоле запросов воспроизводим ситуацию и ... все ок. Выдается результат без ошибок. Вот запрос: ВЫБРАТЬ ОстаткиТоваров.Номенклатура КАК Номенклатура, ОстаткиТоваров.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХранения, ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения, ОстаткиТоваров.Качество КАК Качество, СУММА(ОстаткиТоваров.КоличествоОстаток) КАК Количество, ВЫБОР КОГДА СУММА(ОстаткиПартий.КоличествоОстаток) = 0 ИЛИ СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL ТОГДА 0 ИНАЧЕ СУММА(ОстаткиПартий.СтоимостьОстаток) * СУММА(ОстаткиТоваров.КоличествоОстаток) / СУММА(ОстаткиПартий.КоличествоОстаток) КОНЕЦ КАК Сумма ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатков, Склад = &Склад) КАК ОстаткиТоваров ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РегАналитикаУчетаЗатрат.Затрата КАК Номенклатура, РегАналитикаУчетаЗатрат.ХарактеристикаЗатраты КАК ХарактеристикаНоменклатуры, РегАналитикаУчетаЗатрат.Качество КАК Качество, СУММА(УчетЗатратОстатки.КоличествоОстаток) КАК КоличествоОстаток, СУММА(УчетЗатратОстатки.СтоимостьОстаток) КАК СтоимостьОстаток ИЗ РегистрНакопления.УчетЗатрат.Остатки( &ДатаОстатковЗатрат, АналитикаВидаУчета В (ВЫБРАТЬ АналитикаВидаУчета.Ссылка ИЗ РегистрСведений.АналитикаВидаУчета КАК АналитикаВидаУчета ГДЕ АналитикаВидаУчета.РазделУчета = &РазделУчета И АналитикаВидаУчета.Склад = &ПартионныйСклад И АналитикаВидаУчета.Организация = &ПартионнаяОрганизация)) КАК УчетЗатратОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК РегАналитикаУчетаЗатрат ПО УчетЗатратОстатки.АналитикаУчетаЗатрат = РегАналитикаУчетаЗатрат.Ссылка СГРУППИРОВАТЬ ПО РегАналитикаУчетаЗатрат.Затрата, РегАналитикаУчетаЗатрат.ХарактеристикаЗатраты, РегАналитикаУчетаЗатрат.Качество) КАК ОстаткиПартий ПО ОстаткиТоваров.Номенклатура = ОстаткиПартий.Номенклатура И ОстаткиТоваров.ХарактеристикаНоменклатуры = ОстаткиПартий.ХарактеристикаНоменклатуры И ОстаткиТоваров.Качество = ОстаткиПартий.Качество ГДЕ ОстаткиТоваров.Номенклатура В ИЕРАРХИИ (&Параметр1) СГРУППИРОВАТЬ ПО ОстаткиТоваров.Номенклатура, ОстаткиТоваров.ХарактеристикаНоменклатуры, ОстаткиТоваров.Качество, ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков, ОстаткиТоваров.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент Заранее спасибо за помощь. P.S. из огромного списка номенклатуры ошибка вылетает только на одну позицию. |
|||
1
memogolik
04.06.15
✎
12:05
|
вверх
|
|||
2
18_plus
04.06.15
✎
12:07
|
може где-то NULL в агрегатную попадает?
|
|||
3
memogolik
04.06.15
✎
12:08
|
(2) а в консоле запросов на тех же параметрах работает норм
|
|||
4
18_plus
04.06.15
✎
12:13
|
а циферки большие получаются?
|
|||
5
Любопытная
04.06.15
✎
12:17
|
А она точно на этом запросе падает? У меня сегодня была такая беда, на там на число ограничивалось 5ю знаками, а в остатках сотни тысяч штук попались.
|
|||
6
memogolik
04.06.15
✎
12:17
|
Количество=150 в консоле
|
|||
7
memogolik
04.06.15
✎
12:18
|
(5) точно на нем.
|
|||
8
memogolik
04.06.15
✎
12:24
|
Не понятно, почему в консоле ошибки нет, а в модуле документа есть.
|
|||
9
memogolik
04.06.15
✎
12:29
|
(2) а как это проверить/понять? Ведь в консоле ошибок нет.
|
|||
10
olegves
04.06.15
✎
12:30
|
(0) ты кэш чистил?
|
|||
11
memogolik
04.06.15
✎
12:36
|
(0) кэш на сервере? не совсем понял вопрос и как это связано. Сервер физически перезагружали вчера, ошибка после перезагрузке не исчезла
|
|||
12
D_E_S_131
04.06.15
✎
13:10
|
Левое соединение с вложенным запросом, который использует виртуальную таблицу, в параметрах которой использован еще один запрос!!! ИМХО этой ошибкой SQL послал разработчика в "пешее эротическое"...
|
|||
13
memogolik
04.06.15
✎
14:09
|
(12) это типовая конфа 1с)
|
|||
14
18_plus
04.06.15
✎
14:12
|
(12) а что в этом такого?
|
|||
15
ИС-2
naïve
04.06.15
✎
14:20
|
(0) можно решить проблему костылем - у каждого числового поля сделать приведение к определенной разрядности.
Выразить (Сумм как число (15,2) - например. Только вот данными могут быть не корректными |
|||
16
memogolik
04.06.15
✎
14:22
|
(10) почистил - не помогло
(15) во всем запросе или только в полях выбора? |
|||
17
D_E_S_131
04.06.15
✎
14:28
|
А типовых код везде идеальный?
|
|||
18
memogolik
04.06.15
✎
14:31
|
что делать хз. самое интересное. другой элемент номенклатуры беру - всё норм. В консоле этот запрос спокойно выдает результат : 150. Все остальные запросы кроме основного дают пустой значение.
|
|||
19
RomanYS
04.06.15
✎
14:32
|
(16) я бы начал с
СУММА(ОстаткиПартий.СтоимостьОстаток) * СУММА(ОстаткиТоваров.КоличествоОстаток) / СУММА(ОстаткиПартий.КоличествоОстаток) |
|||
20
chigsrOck
04.06.15
✎
14:52
|
(0) Никто тебе точный ответ не даст, доступ к базе и ее данным есть только у тебя и в 35 лет это пора бы понимать:)))
В таких случаях есть один выход: в серверной тестовой базе корежить запрос, т.е. постепенно упрощать до того момента, когда ошибки не будет. Для начала убрать "Выбор Когда" где есть деление на число, которое может быть нулем. Вместо этого вывести в запросе просто СУММА(название ресурса из РН) и смотреть что будет. Это нормально и программистам приходится периодически с этим геммороиться, особенно если в исходных данных косяк;) |
|||
21
memogolik
04.06.15
✎
15:23
|
(20) тык в консоле запросов все работает)))
|
|||
22
Timon1405
04.06.15
✎
15:29
|
(21) Ставьте инструменты разработчика, там можно на ходу отлаживать
|
|||
23
memogolik
04.06.15
✎
15:29
|
(19)
ВЫРАЗИТЬ(СУММА(ОстаткиПартий.СтоимостьОстаток) * СУММА(ОстаткиТоваров.КоличествоОстаток) КАК ЧИСЛО(15,3)) / ВЫРАЗИТЬ(СУММА(ОстаткиПартий.КоличествоОстаток) КАК ЧИСЛО(15,3)) так? |
|||
24
memogolik
04.06.15
✎
15:29
|
(22) можно ссылочку?
|
|||
25
Timon1405
04.06.15
✎
15:33
|
||||
26
RomanYS
04.06.15
✎
15:37
|
(23)
ВЫРАЗИТЬ(СУММА(ОстаткиПартий.СтоимостьОстаток) * СУММА(ОстаткиТоваров.КоличествоОстаток) / СУММА(ОстаткиПартий.КоличествоОстаток) КАК ЧИСЛО(15,3)) |
|||
27
НЕА123
04.06.15
✎
15:40
|
(0)
может ОФФ нельзя в параметры вирт. таблиц Номенклатура В ИЕРАРХИИ (&Параметр1) ? |
|||
28
memogolik
04.06.15
✎
15:43
|
(26) (19) не взлетело.
(27) в консоле запросов все работает же. |
|||
29
memogolik
04.06.15
✎
15:46
|
и для других позиций номенклатуры тоже ошибка не выскакивает.
|
|||
30
Timon1405
04.06.15
✎
15:51
|
(29) так вы номенклатуру проблемную нашли? Видимо что-то с коэффициентом в единице измерения или с самой единицей, попробуйте перепривязать единицу к номенклатуре/перезаписать у нее коэффициент
|
|||
31
memogolik
04.06.15
✎
16:02
|
(3) позицию нашел. Зашел в единицы, перезаписал коэффициент. Не помогает(
|
|||
32
Cyberhawk
04.06.15
✎
16:11
|
Покажи как параметры в коде устанавливаешь
|
|||
33
Cyberhawk
04.06.15
✎
16:13
|
И держу пари, что если последнюю группировку убрать, то взлетает
|
|||
34
denis_jj
04.06.15
✎
16:19
|
Скорее всего тут проблема
СУММА(ОстаткиПартий.СтоимостьОстаток) * СУММА(ОстаткиТоваров.КоличествоОстаток) / СУММА(ОстаткиПартий.КоличествоОстаток) Попробуйте в консоли вычислить значения из этого выражения для проблемной номенклатуры. |
|||
35
denis_jj
04.06.15
✎
16:22
|
(28)в консоли может работать, если в параметр(ы) &ДатаОстатков виртуальной таблицы в коде передаете момент времени, а в консоли дату.
|
|||
36
memogolik
04.06.15
✎
16:22
|
В консоле 0
|
|||
37
denis_jj
04.06.15
✎
16:24
|
(36) а подзапрос ОстаткиПартий, СтоимостьОстаток и КоличествоОстаток какое выдает?
|
|||
38
memogolik
04.06.15
✎
16:29
|
КоличествоОстаток null
|
|||
39
denis_jj
04.06.15
✎
16:30
|
&ДатаОстатков в коде какого типа, Дата или МоментВремени?
|
|||
40
memogolik
04.06.15
✎
16:32
|
в коде МоментВремени, в консоле дата
|
|||
41
memogolik
04.06.15
✎
16:34
|
если делаю так:
КОГДА (ЕСТЬNULL(СУММА(ОстаткиПартий.КоличествоОстаток),0) = 0) ТОГДА | 0 | ИНАЧЕ // | СУММА(ОстаткиПартий.СтоимостьОстаток)*СУММА(ОстаткиТоваров.КоличествоОстаток) // | / СУММА(ОстаткиПартий.КоличествоОстаток) // | ВЫРАЗИТЬ(СУММА(ОстаткиПартий.СтоимостьОстаток) * СУММА(ОстаткиТоваров.КоличествоОстаток) / СУММА(ОстаткиПартий.КоличествоОстаток) КАК ЧИСЛО(15,3)) | 1 | КОНЕЦ КАК Сумма т.е. комментирую рассчет суммы в запросе и ставлю константу 1, то в документ в качестве суммы именно 1 и подставляется, а не 0 |
|||
42
denis_jj
04.06.15
✎
16:35
|
Попробуйте в консоли указать +-1 секунду к точной дате документа из момента времени.
|
|||
43
memogolik
04.06.15
✎
16:35
|
Запрос.УстановитьПараметр("ДатаОстатковЗатрат", Новый Граница(КонецМесяца(Дата),ВидГраницы.Включая));
|
|||
44
memogolik
04.06.15
✎
16:36
|
в консоле 30.06.2015 23:59:59
|
|||
45
denis_jj
04.06.15
✎
16:38
|
(41) это значит, у вас количество не NULL и не 0, а какая-то величина, предполагаю что очень маленькая. В этом и проблема. Вероятно зависли какие-то мелкие остатки (от округления может). Какой тип числа в количестве использован?
|
|||
46
memogolik
04.06.15
✎
16:38
|
причем
ВЫБОР КОГДА СУММА(ОстаткиПартий.КоличествоОстаток) = 0 ИЛИ СУММА(ОстаткиПартий.КоличествоОстаток) ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК Сумма в документе 1, а в консоле 0 ;) ппц какой то |
|||
47
denis_jj
04.06.15
✎
16:39
|
(44) документы 30.06.2015 23:59:59 есть какие-нибудь?
|
|||
48
denis_jj
04.06.15
✎
16:40
|
(46) на 01.07.2015 00:00:00 что будет в консоли?
|
|||
49
memogolik
04.06.15
✎
16:40
|
в журнале "Документы контрагентов" нет ничего.
(45) посмотреть в РН Партии? |
|||
50
memogolik
04.06.15
✎
16:41
|
(48) тоже самое
|
|||
51
denis_jj
04.06.15
✎
16:44
|
(49) В регистре посмотрите записи.
|
|||
52
memogolik
04.06.15
✎
16:44
|
Причем подзапрос ОстаткиПартий: Пустой.
ВЫБРАТЬ РегАналитикаУчетаЗатрат.Затрата КАК Номенклатура, РегАналитикаУчетаЗатрат.ХарактеристикаЗатраты КАК ХарактеристикаНоменклатуры, РегАналитикаУчетаЗатрат.Качество КАК Качество, СУММА(УчетЗатратОстатки.КоличествоОстаток) КАК КоличествоОстаток, СУММА(УчетЗатратОстатки.СтоимостьОстаток) КАК СтоимостьОстаток ИЗ РегистрНакопления.УчетЗатрат.Остатки( &ДатаОстатковЗатрат, АналитикаВидаУчета В (ВЫБРАТЬ АналитикаВидаУчета.Ссылка ИЗ РегистрСведений.АналитикаВидаУчета КАК АналитикаВидаУчета ГДЕ АналитикаВидаУчета.РазделУчета = &РазделУчета И АналитикаВидаУчета.Склад = &ПартионныйСклад И АналитикаВидаУчета.Организация = &ПартионнаяОрганизация)) КАК УчетЗатратОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК РегАналитикаУчетаЗатрат ПО УчетЗатратОстатки.АналитикаУчетаЗатрат = РегАналитикаУчетаЗатрат.Ссылка СГРУППИРОВАТЬ ПО РегАналитикаУчетаЗатрат.Затрата, РегАналитикаУчетаЗатрат.ХарактеристикаЗатраты, РегАналитикаУчетаЗатрат.Качество |
|||
53
denis_jj
04.06.15
✎
16:47
|
(52) не может быть. Если был бы пустой, то в документе не срабатывало бы условие из (46).
|
|||
54
memogolik
04.06.15
✎
16:49
|
Блиинн. после проведения реализации от 01.06.15 Стоимость в РН УчетЗатрат улетела в -9 999 999 999 999,99
|
|||
55
denis_jj
04.06.15
✎
16:49
|
(52) временно закомментируйте конструкцию с делением. Выведите данные КоличествоОстаток в документе.
|
|||
56
denis_jj
04.06.15
✎
16:49
|
(54) :-) что и требовалось доказать.
|
|||
57
memogolik
04.06.15
✎
16:51
|
(56) теперь осталось понять, из-за чего такое могло произойти? есть идеи?)
|
|||
58
denis_jj
04.06.15
✎
16:52
|
(54) Но это значит, что уже на 01.05.2015 по этой номенклатуре были неправильные остатки (на момент проведения документа). А эта сумма -999999999999 это в регистр записали число меньшее, чем позволяет разрядность его ресурса.
|
|||
59
denis_jj
04.06.15
✎
16:53
|
(57) смотрите запрос из расчета стоимости затрат документа Реализации. Там ключ к разгадке. Скорее всего что-то с остатками и округлением.
|
|||
60
memogolik
04.06.15
✎
16:55
|
(59) спасибо Денис огромное,думаю, что еще не мало времени потребуется что докопаться до истины. ;)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |