|
Ошибка арифметического переполнения при преобразовании numeric | ☑ | ||
---|---|---|---|---|
0
фпк1сл
31.01.16
✎
21:52
|
Добрый день!
Конфигурация УТ 11.1.10.145, платформа 8.3.6.2237, SQL Server 2008. При проведении документа "Расчет себестоимости товаров" за апрель, выскакивает ошибка Ошибка при выполнении обработчика - 'ОбработкаПроведения' по причине: {Документ.РасчетСебестоимостиТоваров.МодульОбъекта(2181)}: Ошибка при вызове метода контекста (ВыполнитьПакет) Выборка = Запрос.ВыполнитьПакет()[1].Выбрать(); по причине: Ошибка выполнения запроса по причине: Ошибка при выполнении операции над данными: Microsoft SQL Server Native Client 10.0: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric. HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1 Все другие документы проводятся нормально. Подскажите пожалуйста, все чем может быть проблема, куда смотреть? |
|||
1
фпк1сл
31.01.16
✎
21:53
|
Я понимаю, что где-то в результате запроса получается большое число, вот только как найти, откуда это число возникает?
|
|||
2
cw014
01.02.16
✎
07:37
|
Пройтись отладчиком + ТИИ
|
|||
3
фпк1сл
01.02.16
✎
11:57
|
Отладчик мне ничего не покажет, программа завершается в момент Выборка = Запрос.ВыполнитьПакет()[1].Выбрать(); , значит я не узнаю, что её выбивает. В файловом варианте база тоже не запускается, размер слишком большой.
|
|||
4
Timon1405
01.02.16
✎
12:04
|
обновитесь, говорят, на 11.1.10.150 проблема уходит.
|
|||
5
Михаил Козлов
01.02.16
✎
12:14
|
(3) Можно попробовать в консоли удалять из пакета по 1. Или выполнять по 1.
|
|||
6
Карупян
01.02.16
✎
12:16
|
профайлером (или тж) засечь запрос и посмотреть
|
|||
7
фпк1сл
01.02.16
✎
15:21
|
Обновляться буду в крайнем случае, попробую в технологическом журнале посмотреть на криминал. Профайлером не имею представления как пользоваться.
|
|||
8
фпк1сл
02.02.16
✎
16:16
|
Обновление не дало результатов. В ТЖ и профайлер смотрел - ничего не понял. Подскажите, может по какому нибудь регистру посмотреть какие нибудь значения подозрительные?
|
|||
9
mikecool
02.02.16
✎
16:19
|
(8) первый запрос из пакета генерит не перевариваемое число - посмотри, какие там числовые поля и попытайся понять, откуда мб такое большое
|
|||
10
Timon1405
02.02.16
✎
17:16
|
(8) поищите большой ресурс "ПостояннаяРазница" в регистре ВыручкаИСебестоимостьПродаж в консоли запросов
|
|||
11
Tateossian
02.02.16
✎
18:37
|
(0) Скорее всего, это происходит где-то при делении, попробуй все такие места явно обработать через ВЫРАЗИТЬ( КАК ЧИСЛО(xx,yy))
|
|||
12
Cyberhawk
02.02.16
✎
18:53
|
ИР тебе в помощь - там и разбивка запроса на подзапросы, и отбор ТЖ по конкретному запросу
|
|||
13
фпк1сл
03.02.16
✎
09:26
|
(11) В том то дело, все место обработаны через Выразить, запрос полностью типовой.
// 0 Расчет коэффициентов (количество перехода из состояния в состояние) уравнения. |ВЫБРАТЬ | УзлыКорректировки.НомерУзла КАК НомерУзла, | ВЫРАЗИТЬ(МАКСИМУМ(УзлыКорректировки.Стоимость) КАК ЧИСЛО(23,10)) КАК СвободныйКоэффициент, | ВЫРАЗИТЬ(МАКСИМУМ(УзлыКорректировки.СтоимостьБезНДС) КАК ЧИСЛО(23,10)) КАК СвободныйКоэффициентБезНДС, | ВЫРАЗИТЬ(МАКСИМУМ(УзлыКорректировки.ПостояннаяРазница) КАК ЧИСЛО(23,10)) КАК СвободныйКоэффициентПостояннаяРазница, | ВЫРАЗИТЬ(МАКСИМУМ(УзлыКорректировки.ВременнаяРазница) КАК ЧИСЛО(23,10)) КАК СвободныйКоэффициентВременнаяРазница, | ВЫРАЗИТЬ(МАКСИМУМ(УзлыКорректировки.СтоимостьДопРасходы) КАК ЧИСЛО(23,10)) КАК СвободныйКоэффициентДопрасходы, | ВЫРАЗИТЬ(МАКСИМУМ(УзлыКорректировки.СтоимостьДопРасходыБезНДС) КАК ЧИСЛО(23,10)) КАК СвободныйКоэффициентДопрасходыБезНДС, | | ВЫРАЗИТЬ(СУММА(ЕСТЬNULL(ВтТаблицаРешений.Стоимость, 0) * ЕСТЬNULL(ПеремещенияСписания.Количество, 0)) КАК ЧИСЛО(23,10)) | / УзлыКорректировки.Количество КАК Стоимость, | ВЫРАЗИТЬ(СУММА(ЕСТЬNULL(ВтТаблицаРешений.СтоимостьБезНДС, 0) * ЕСТЬNULL(ПеремещенияСписания.Количество, 0)) КАК ЧИСЛО(23,10)) | / УзлыКорректировки.Количество КАК СтоимостьБезНДС, | ВЫРАЗИТЬ(СУММА(ЕСТЬNULL(ВтТаблицаРешений.ПостояннаяРазница, 0) * ЕСТЬNULL(ПеремещенияСписания.Количество, 0)) КАК ЧИСЛО(23,10)) | / УзлыКорректировки.Количество КАК ПостояннаяРазница, | ВЫРАЗИТЬ(СУММА(ЕСТЬNULL(ВтТаблицаРешений.ВременнаяРазница, 0) * ЕСТЬNULL(ПеремещенияСписания.Количество, 0)) КАК ЧИСЛО(23,10)) | / УзлыКорректировки.Количество КАК ВременнаяРазница, | ВЫРАЗИТЬ(СУММА(ЕСТЬNULL(ВтТаблицаРешений.СтоимостьДопРасходы, 0) * ЕСТЬNULL(ПеремещенияСписания.Количество, 0)) КАК ЧИСЛО(23,10)) | / УзлыКорректировки.Количество КАК СтоимостьДопРасходы, | ВЫРАЗИТЬ(СУММА(ЕСТЬNULL(ВтТаблицаРешений.СтоимостьДопРасходыБезНДС, 0) * ЕСТЬNULL(ПеремещенияСписания.Количество, 0)) КАК ЧИСЛО(23,10)) | / УзлыКорректировки.Количество КАК СтоимостьДопРасходыБезНДС | |ПОМЕСТИТЬ ВременнаяТаблицаРешений |ИЗ | ВтУзлыКорректировки КАК УзлыКорректировки | ЛЕВОЕ СОЕДИНЕНИЕ ВтПеремещенияСписания КАК ПеремещенияСписания | ПО УзлыКорректировки.НомерУзла = ПеремещенияСписания.НомерУзлаПриемник | ЛЕВОЕ СОЕДИНЕНИЕ ВтТаблицаРешений КАК ВтТаблицаРешений | ПО ПеремещенияСписания.НомерУзлаИсточник = ВтТаблицаРешений.НомерУзла |ГДЕ | УзлыКорректировки.Количество <> 0 | И ЕСТЬNULL(ВтТаблицаРешений.Стоимость, 0) * ЕСТЬNULL(ПеремещенияСписания.Количество, 0) > -999999999.999999999 | И ЕСТЬNULL(ВтТаблицаРешений.Стоимость, 0) * ЕСТЬNULL(ПеремещенияСписания.Количество, 0) < 999999999.999999999 | |СГРУППИРОВАТЬ ПО | УзлыКорректировки.НомерУзла, | УзлыКорректировки.Количество | |ИНДЕКСИРОВАТЬ ПО | НомерУзла |; |///////////////////////////////////////////////////////////////////////////// // 1 Расчет ошибки расчета. |ВЫБРАТЬ | ЕСТЬNULL( | МАКСИМУМ( | ВЫБОР КОГДА (ЕСТЬNULL(ТаблицаРешений.Стоимость,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициент | + ЕСТЬNULL(ВременнаяТаблицаРешений.Стоимость,0))) > 0 ТОГДА | | ЕСТЬNULL(ТаблицаРешений.Стоимость,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициент | + ЕСТЬNULL(ВременнаяТаблицаРешений.Стоимость,0)) | ИНАЧЕ | -( | ЕСТЬNULL(ТаблицаРешений.Стоимость,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициент | + ЕСТЬNULL(ВременнаяТаблицаРешений.Стоимость,0)) | ) | КОНЕЦ | ) | ,0) КАК Отклонение, | ЕСТЬNULL( | МАКСИМУМ( | ВЫБОР КОГДА (ЕСТЬNULL(ТаблицаРешений.СтоимостьБезНДС,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентБезНДС | + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьБезНДС,0))) > 0 ТОГДА | | ЕСТЬNULL(ТаблицаРешений.СтоимостьБезНДС,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентБезНДС | + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьБезНДС,0)) | ИНАЧЕ | -( | ЕСТЬNULL(ТаблицаРешений.СтоимостьБезНДС,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентБезНДС | + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьБезНДС,0)) | ) | КОНЕЦ | ) | ,0) КАК ОтклонениеБезНДС, | ЕСТЬNULL( | МАКСИМУМ( | ВЫБОР КОГДА (ЕСТЬNULL(ТаблицаРешений.ПостояннаяРазница,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентПостояннаяРазница | + ЕСТЬNULL(ВременнаяТаблицаРешений.ПостояннаяРазница,0))) > 0 ТОГДА | | ЕСТЬNULL(ТаблицаРешений.ПостояннаяРазница,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентПостояннаяРазница | + ЕСТЬNULL(ВременнаяТаблицаРешений.ПостояннаяРазница,0)) | ИНАЧЕ | -( | ЕСТЬNULL(ТаблицаРешений.ПостояннаяРазница,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентПостояннаяРазница | + ЕСТЬNULL(ВременнаяТаблицаРешений.ПостояннаяРазница,0)) | ) | КОНЕЦ | ) | ,0) КАК ОтклонениеПостояннаяРазница, | ЕСТЬNULL( | МАКСИМУМ( | ВЫБОР КОГДА (ЕСТЬNULL(ТаблицаРешений.ВременнаяРазница,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентВременнаяРазница | + ЕСТЬNULL(ВременнаяТаблицаРешений.ВременнаяРазница,0))) > 0 ТОГДА | | ЕСТЬNULL(ТаблицаРешений.ВременнаяРазница,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентВременнаяРазница | + ЕСТЬNULL(ВременнаяТаблицаРешений.ПостояннаяРазница,0)) | ИНАЧЕ | -( | ЕСТЬNULL(ТаблицаРешений.ВременнаяРазница,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентВременнаяРазница | + ЕСТЬNULL(ВременнаяТаблицаРешений.ВременнаяРазница,0)) | ) | КОНЕЦ | ) | ,0) КАК ОтклонениеВременнаяРазница, | | ЕСТЬNULL( | МАКСИМУМ( | ВЫБОР КОГДА ЕСТЬNULL(ТаблицаРешений.СтоимостьДопРасходы,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентДопрасходы | + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьДопРасходы,0))> 0 ТОГДА | | ЕСТЬNULL(ТаблицаРешений.СтоимостьДопРасходы,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентДопрасходы | + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьДопРасходы,0)) | | ИНАЧЕ | -( | ЕСТЬNULL(ТаблицаРешений.СтоимостьДопРасходы,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентДопрасходы | + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьДопРасходы,0)) | ) | КОНЕЦ | ) | ,0) КАК ОтклонениеДопрасходы, | ЕСТЬNULL( | МАКСИМУМ( | ВЫБОР КОГДА ЕСТЬNULL(ТаблицаРешений.СтоимостьДопРасходы,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентДопрасходы | + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьДопРасходы,0))> 0 ТОГДА | | ЕСТЬNULL(ТаблицаРешений.СтоимостьДопРасходы,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентДопрасходы | + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьДопРасходы,0)) | | ИНАЧЕ | -( | ЕСТЬNULL(ТаблицаРешений.СтоимостьДопРасходы,0) - (ВременнаяТаблицаРешений.СвободныйКоэффициентДопрасходы | + ЕСТЬNULL(ВременнаяТаблицаРешений.СтоимостьДопРасходы,0)) | ) | КОНЕЦ | ) | ,0) КАК ОтклонениеДопрасходыБезНДС |ИЗ | ВременнаяТаблицаРешений КАК ВременнаяТаблицаРешений | | ЛЕВОЕ СОЕДИНЕНИЕ ВтТаблицаРешений КАК ТаблицаРешений | ПО ВременнаяТаблицаРешений.НомерУзла = ТаблицаРешений.НомерУзла |; |////////////////////////////////////////////////////////////// // 2 Удаление таблиц. |УНИЧТОЖИТЬ ВтТаблицаРешений |; // 3 Суммирование коэффициентов. |////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаблицаРешений.НомерУзла КАК НомерУзла, | ВЫРАЗИТЬ( | ВременнаяТаблицаРешений.СвободныйКоэффициент | + ВременнаяТаблицаРешений.Стоимость | КАК ЧИСЛО(23,10)) КАК Стоимость, | ВЫРАЗИТЬ( | ВременнаяТаблицаРешений.СвободныйКоэффициентБезНДС | + ВременнаяТаблицаРешений.СтоимостьБезНДС | КАК ЧИСЛО(23,10)) КАК СтоимостьБезНДС, | ВЫРАЗИТЬ( | ВременнаяТаблицаРешений.СвободныйКоэффициентПостояннаяРазница | + ВременнаяТаблицаРешений.ПостояннаяРазница | КАК ЧИСЛО(23,10)) КАК ПостояннаяРазница, | ВЫРАЗИТЬ( | ВременнаяТаблицаРешений.СвободныйКоэффициентВременнаяРазница | + ВременнаяТаблицаРешений.ВременнаяРазница | КАК ЧИСЛО(23,10)) КАК ВременнаяРазница, | | ВЫРАЗИТЬ( | ВременнаяТаблицаРешений.СвободныйКоэффициентДопрасходы | + ВременнаяТаблицаРешений.СтоимостьДопРасходы | КАК ЧИСЛО(23,10)) КАК СтоимостьДопРасходы, | ВЫРАЗИТЬ( | ВременнаяТаблицаРешений.СвободныйКоэффициентДопрасходыБезНДС | + ВременнаяТаблицаРешений.СтоимостьДопРасходыБезНДС | КАК ЧИСЛО(23,10)) КАК СтоимостьДопРасходыБезНДС | |ПОМЕСТИТЬ ВтТаблицаРешений | |ИЗ | ВременнаяТаблицаРешений КАК ВременнаяТаблицаРешений | |ИНДЕКСИРОВАТЬ ПО | НомерУзла |; |////////////////////////////////////////////////////////////// // 4 Удаление таблицы. | УНИЧТОЖИТЬ ВременнаяТаблицаРешений |"; |
|||
14
фпк1сл
03.02.16
✎
12:58
|
Запрос выполняется с использованием Менеджера временных таблиц
|
|||
15
фпк1сл
03.02.16
✎
13:02
|
Еще глупый вопрос, в запросе выполняется первый пакет. Как мне его найти?
|
|||
16
фпк1сл
05.02.16
✎
09:26
|
я вычислил, что всему виной вот эта строчка в запросе
| ВЫРАЗИТЬ(СУММА(ЕСТЬNULL(ВтТаблицаРешений.ПостояннаяРазница, 0) * ЕСТЬNULL(ПеремещенияСписания.Количество, 0)) КАК ЧИСЛО(23,10)) Здесь и происходит переполнение. |
|||
17
Ёпрст
05.02.16
✎
09:35
|
(16) выкини выразить оттуда
|
|||
18
Ёпрст
05.02.16
✎
09:35
|
и спи спокойно дальше
|
|||
19
фпк1сл
05.02.16
✎
09:42
|
(17) Не помогло, все та же ошибка преобразования numeric.
Что интересно, только за апрель документ выжучивается, следующий месяц проводится без проблем. |
|||
20
Ёпрст
05.02.16
✎
09:43
|
ну поставь КАК ЧИСЛО(15,0)
|
|||
21
фпк1сл
05.02.16
✎
09:53
|
(20) Все так же упрямо выскакивает эта ошибка.
|
|||
22
НЕА123
05.02.16
✎
10:00
|
СУММА(ЕСТЬNULL(ВтТаблицаРешений.ПостояннаяРазница, 0)) Как СуммаПР,
Сумма(ЕСТЬNULL(ПеремещенияСписания.Количество, 0)) КАК СуммаСписания,... может дикие числа. |
|||
23
НЕА123
05.02.16
✎
10:03
|
вообще, ИМХО, ВЫРАЗИТЬ в Сумма засунуть.
|
|||
24
Tateossian
05.02.16
✎
10:09
|
(16) Выведи в отладке содержимое ВтТаблицаРешений в ТЗ и посмотри, что там за числа.
|
|||
25
фпк1сл
05.02.16
✎
10:53
|
(23) выразил, снова ошибка. (24) Глазами пробежался по 12к строк, на первый взгляд никакого криминала. Попробую покромсать запрос и выполнять по частям.
|
|||
26
фпк1сл
05.02.16
✎
13:11
|
Получается, что "ВтТаблицаРешений.ПостояннаяРазница" и "ПеремещенияСписания.Количество" имеют значение Null.
И если подставить, то получается, что выражение ВЫРАЗИТЬ(СУММА(0 * 0) КАК ЧИСЛО(23,10)) - вызывает арифметическое переполнение. |
|||
27
фпк1сл
05.02.16
✎
13:50
|
Был неправ, зайдя дальше обнаружил, что умножение "ВтТаблицаРешений.ПостояннаяРазница" и "ПеремещенияСписания.Количество" на какой то итерации дает переполнение, буду двигаться дальше.
|
|||
28
фпк1сл
09.02.16
✎
15:52
|
При проведении документа "Расчет себестоимости" формируются записи регистра накопления "Себестоимость товаров". Так вот за 2014 год все формировалось нормально, а с 2015 в колонке "Стоимость (ПР)" - постоянная разница, только по 2-3 номенклатурам начали появляться и расти огромные числа. Подскажите, из-за чего растет постоянная разница строго по 2 позициям номенклатуры?
|
|||
29
фпк1сл
10.02.16
✎
10:10
|
Пример. Одна организация, два склада.
Документ перемещения формирует две записи в регистре накопления - Количество(10) по двум складам. Документ Расчет себестоимости товаров формирует одну запись - Стоимость(ПР) : 134 046 229,30. Откуда такая цифра? Причем некоторые записи идут корректно, в чем разница, так и не понял. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |