How can I fix this error in T-SQL? The following line executes successfully:
SET @dPERCENT_QC_COMPLETED = CASE WHEN @NUM_QC_RECEIVED = 0
THEN 0
ELSE @NUM_QC_COMPLETED / @NUM_QC_RECEIVED
END
But this line fails with error code below:
SET @dPERCENT_QC_COMPLETED = CASE WHEN @NUM_QC_RECEIVED = 0
THEN 0
ELSE (100 * @NUM_QC_COMPLETED / @NUM_QC_RECEIVED)
END
Msg 8115, Level 16, State 8, Line 73
Arithmetic overflow error converting int to data type numeric.
@dPERCENT_QC_COMPLETED is a decimal(2). The other variables are integers. Problem I think is that currently these other integer values = 1, so this expression evaluates to 1.
+3
Если запрос не выполняется с такой вот руганью:
{Форма.Форма.Форма(804)}: Ошибка при вызове метода контекста (Выполнить): Ошибка выполнения запроса: Ошибка при выполнении операции над данными:Microsoft SQL Server Native Client 11.0: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric.HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1
Решение следующее (если у кого будет еще что-то прошу добавлять .
1. В запросе использую расчет процента:
Код 1C v 8.х
ВЫРАЗИТЬ(втИтоги.КоличествоОборот / втИтоги.ПланМП1 * 100 КАК ЧИСЛО(5, 2)) КАК ПроцентВыполнения,
Изменив выражение с (5,2) на (15,2) запрос «взлетел»:
Код 1C v 8.х
ВЫРАЗИТЬ(втИтоги.КоличествоОборот / втИтоги.ПланМП1 * 100 КАК ЧИСЛО(15, 2)) КАК ПроцентВыполнения,
Получается что ошибка: «Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric» нам говорит что результат вычисления процента длиной больше чем 5.
Пример обычного кода:Реквизит1 = Тип число (5,2).РасчетПроцента = 1234,56.Реквизит1 = РасчетПроцента;Реквизит1 = 999,99.
Успехов в решении проблем.С уважением, Сергей.
Может довольно простой вопрос.
Но хотелось бы узнать механизм работы.
Почему
SELECT 2000000000 * 3
--Ошибка арифметического переполнения при преобразовании expression к типу данных int.
SELECT 3000000000 * 3
-- 9000000000
Если создать вью
create view ts
as
SELECT 2000000000 * 3 AS A, 3000000000 * 3 AS B
, то в типах данных увидим такое
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 — 31.01.16 — 21:53
Я понимаю, что где-то в результате запроса получается большое число, вот только как найти, откуда это число возникает?
2 — 01.02.16 — 07:37
Пройтись отладчиком + ТИИ
3 — 01.02.16 — 11:57
Отладчик мне ничего не покажет, программа завершается в момент Выборка = Запрос.ВыполнитьПакет()[1].Выбрать(); , значит я не узнаю, что её выбивает. В файловом варианте база тоже не запускается, размер слишком большой.
4 — 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 — 01.02.16 — 15:21
Обновляться буду в крайнем случае, попробую в технологическом журнале посмотреть на криминал. Профайлером не имею представления как пользоваться.
8 — 02.02.16 — 16:16
Обновление не дало результатов. В ТЖ и профайлер смотрел — ничего не понял. Подскажите, может по какому нибудь регистру посмотреть какие нибудь значения подозрительные?
9 — 02.02.16 — 16:19
(8) первый запрос из пакета генерит не перевариваемое число — посмотри, какие там числовые поля и попытайся понять, откуда мб такое большое
10 — 02.02.16 — 17:16
(8) поищите большой ресурс «ПостояннаяРазница» в регистре ВыручкаИСебестоимостьПродаж в консоли запросов
11 — 02.02.16 — 18:37
(0) Скорее всего, это происходит где-то при делении, попробуй все такие места явно обработать через ВЫРАЗИТЬ( КАК ЧИСЛО(xx,yy))
12 — 02.02.16 — 18:53
ИР тебе в помощь — там и разбивка запроса на подзапросы, и отбор ТЖ по конкретному запросу
13 — 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 — 03.02.16 — 12:58
Запрос выполняется с использованием Менеджера временных таблиц
15 — 03.02.16 — 13:02
Еще глупый вопрос, в запросе выполняется первый пакет. Как мне его найти?
16 — 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 — 05.02.16 — 09:42
(17) Не помогло, все та же ошибка преобразования numeric.
Что интересно, только за апрель документ выжучивается, следующий месяц проводится без проблем.
20 — 05.02.16 — 09:43
ну поставь КАК ЧИСЛО(15,0)
21 — 05.02.16 — 09:53
(20) Все так же упрямо выскакивает эта ошибка.
22 — 05.02.16 — 10:00
СУММА(ЕСТЬNULL(ВтТаблицаРешений.ПостояннаяРазница, 0)) Как СуммаПР,
Сумма(ЕСТЬNULL(ПеремещенияСписания.Количество, 0)) КАК СуммаСписания,…
может дикие числа.
23 — 05.02.16 — 10:03
вообще, ИМХО, ВЫРАЗИТЬ в Сумма засунуть.
24 — 05.02.16 — 10:09
(16) Выведи в отладке содержимое ВтТаблицаРешений в ТЗ и посмотри, что там за числа.
25 — 05.02.16 — 10:53
(23) выразил, снова ошибка. (24) Глазами пробежался по 12к строк, на первый взгляд никакого криминала. Попробую покромсать запрос и выполнять по частям.
26 — 05.02.16 — 13:11
Получается, что «ВтТаблицаРешений.ПостояннаяРазница» и «ПеремещенияСписания.Количество» имеют значение Null.
И если подставить, то получается, что выражение
ВЫРАЗИТЬ(СУММА(0 * 0) КАК ЧИСЛО(23,10)) — вызывает арифметическое переполнение.
27 — 05.02.16 — 13:50
Был неправ, зайдя дальше обнаружил, что умножение «ВтТаблицаРешений.ПостояннаяРазница» и «ПеремещенияСписания.Количество» на какой то итерации дает переполнение, буду двигаться дальше.
28 — 09.02.16 — 15:52
При проведении документа «Расчет себестоимости» формируются записи регистра накопления «Себестоимость товаров». Так вот за 2014 год все формировалось нормально, а с 2015 в колонке «Стоимость (ПР)» — постоянная разница, только по 2-3 номенклатурам начали появляться и расти огромные числа. Подскажите, из-за чего растет постоянная разница строго по 2 позициям номенклатуры?
фпк1сл
29 — 10.02.16 — 10:10
Пример. Одна организация, два склада.
Документ перемещения формирует две записи в регистре накопления — Количество(10) по двум складам.
Документ Расчет себестоимости товаров формирует одну запись — Стоимость(ПР) : 134 046 229,30. Откуда такая цифра? Причем некоторые записи идут корректно, в чем разница, так и не понял.
I keep getting this error message everytime I run this query:
Msg 8115, Level 16, State 8, Line 33
Arithmetic overflow error converting numeric to data type numeric.
The statement has been terminated.
But if I change the create table to (7,0), I don’t get the error message.But I need my data to be displayed as a decimal. I have tried 8,3 does not work.
Is there any one who can help me work this?Any help will be greatly appreciated.
DECLARE @StartDate AS DATETIME
DECLARE @StartDate_y AS DATETIME
DECLARE @EndDate AS DATETIME
DECLARE @temp_y AS DATETIME
SET @temp_y = Dateadd(yy, Datediff(yy, 0, Getdate()), 0)
SET @StartDate_y = Dateadd(dd, 1 - Datepart(dw, Dateadd("ww", -2, @temp_y)),
Dateadd("ww", -2, @temp_y))
SET @StartDate = Dateadd(dd, 1 - Datepart(dw, Dateadd("ww", -2, Getdate())),
Dateadd("ww", -2, Getdate()))
SET @EndDate = Dateadd(dd, 6, @StartDate)
--temp table to hold all cities in list
CREATE TABLE ##temp
(
city VARCHAR(50)
)
INSERT INTO ##temp
VALUES ('ABERDEEN'),
('CHESAPEAKE'),
('Preffered-Seafood/CHICAGO'),
('Preffered-Redist/CHICAGO'),
('CLACKAMAS'),
('COLUMBUS'),
('CONKLIN'),
('DENVER'),
('FORT WORTH'),
('HANOVER PARK'),
('JACKSONVILLE'),
('LAKELAND'),
('MONTGOMERY'),
('PFW-NORTHEAST'),
('PFW-SOUTHEAST'),
('RIVERSIDE'),
('TRENTON,CANADA'),
('VERNON')
--temp to hold data for the cities
CREATE TABLE #temp
(
city VARCHAR(50),
ytdshipments INT,
ytdtotalweight DECIMAL(7, 2) NOT NULL,
ytdtotalcharges DECIMAL (7, 2) NOT NULL
--YTDRevperPound decimal (7,2) not null
)
INSERT INTO #temp
SELECT ##temp.city,
0,
0,
0
FROM ##temp
INSERT #temp
-- YTD shipments/Charges/Weight by city
SELECT city = CASE
WHEN nameaddrmstr_1.city IN( 'ABERDEEN', 'CHESAPEAKE', 'CHICAGO'
,
'CLACKAMAS',
'COLUMBUS', 'CONKLIN', 'DENVER',
'FORT WORTH',
'HANOVER PARK', 'JACKSONVILLE',
'LAKELAND'
,
'MONTGOMERY'
,
'RIVERSIDE', 'TRENTON', 'VERNON' )
THEN
CASE
WHEN
nameaddrmstr_1.city = 'CHICAGO'
AND h.shipr = 'PREFRESVS' THEN 'Preffered-Redist/CHICAGO'
WHEN
nameaddrmstr_1.city = 'TRENTON'
AND nameaddrmstr_1.city = 'CA' THEN 'TRENTON,CANADA'
ELSE
nameaddrmstr_1.city
END
ELSE 'Other'
END,
ytdshipments = COUNT(CONVERT(VARCHAR(10), h.dateshipped, 101)),
ytdtotalweight =SUM(CASE
WHEN h.totaldimwgt > h.totalwgt THEN h.totaldimwgt
ELSE h.totalwgt
END),
ytdtotalcharges = SUM (cs.totalestrevcharges)
--YTDRevperPound = convert(decimal(7,2),sum (cs.TotalEstRevCharges )/sum( CASE WHEN h.TotalDimWGT > > h.TotalWGT THEN h.TotalDimWGT ELSE h.TotalWGT END ))
FROM as400.dbo.hawb AS h WITH(nolock)
INNER JOIN as400.dbo.chargesummary AS cs
ON h.hawbnum = cs.hawbnum
LEFT OUTER JOIN as400.dbo.nameaddrmstr AS nameaddrmstr_1
ON h.shipr = nameaddrmstr_1.nameaddrcode
WHERE h.dateshipped >= '01/01/2010'
AND h.dateshipped <= '12/19/2010'
--WHERE H.DateShipped >= >= @StartDate_y AND H.dateshipped <= @EndDate
AND h.cust IN( 'DARDENREED', 'MAINEDARDE', 'MBMRIVRSDE', 'MBMCOLUMBS',
'MBMLAKELND', 'MBMFTWORTH', 'SYGMACOLUM', 'SYGMANETW6',
'MAI215', 'MBMMNTGMRY' )
GROUP BY CASE
WHEN nameaddrmstr_1.city IN( 'ABERDEEN', 'CHESAPEAKE', 'CHICAGO', 'CLACKAMAS',
'COLUMBUS', 'CONKLIN', 'DENVER', 'FORT WORTH',
'HANOVER PARK', 'JACKSONVILLE', 'LAKELAND',
'MONTGOMERY'
,
'RIVERSIDE', 'TRENTON', 'VERNON' ) THEN CASE
WHEN
nameaddrmstr_1.city = 'CHICAGO'
AND h.shipr = 'PREFRESVS' THEN 'Preffered-Redist/CHICAGO'
WHEN
nameaddrmstr_1.city = 'TRENTON'
AND nameaddrmstr_1.city = 'CA' THEN 'TRENTON,CANADA'
ELSE
nameaddrmstr_1.city
END
ELSE 'Other'
END
SELECT #temp.city AS city,
MAX(#temp.ytdshipments) AS ytdshipments,
MAX(#temp.ytdtotalweight) AS ytdtotalweight,
MAX(#temp.ytdtotalcharges) AS ytdtotalcharges
FROM #temp WITH(nolock)
LEFT OUTER JOIN ##temp
ON ##temp.city = #temp.city
GROUP BY #temp.city
DROP TABLE #temp
DROP TABLE ##temp
I keep getting this error message everytime I run this query:
Msg 8115, Level 16, State 8, Line 33
Arithmetic overflow error converting numeric to data type numeric.
The statement has been terminated.
But if I change the create table to (7,0), I don’t get the error message.But I need my data to be displayed as a decimal. I have tried 8,3 does not work.
Is there any one who can help me work this?Any help will be greatly appreciated.
DECLARE @StartDate AS DATETIME
DECLARE @StartDate_y AS DATETIME
DECLARE @EndDate AS DATETIME
DECLARE @temp_y AS DATETIME
SET @temp_y = Dateadd(yy, Datediff(yy, 0, Getdate()), 0)
SET @StartDate_y = Dateadd(dd, 1 - Datepart(dw, Dateadd("ww", -2, @temp_y)),
Dateadd("ww", -2, @temp_y))
SET @StartDate = Dateadd(dd, 1 - Datepart(dw, Dateadd("ww", -2, Getdate())),
Dateadd("ww", -2, Getdate()))
SET @EndDate = Dateadd(dd, 6, @StartDate)
--temp table to hold all cities in list
CREATE TABLE ##temp
(
city VARCHAR(50)
)
INSERT INTO ##temp
VALUES ('ABERDEEN'),
('CHESAPEAKE'),
('Preffered-Seafood/CHICAGO'),
('Preffered-Redist/CHICAGO'),
('CLACKAMAS'),
('COLUMBUS'),
('CONKLIN'),
('DENVER'),
('FORT WORTH'),
('HANOVER PARK'),
('JACKSONVILLE'),
('LAKELAND'),
('MONTGOMERY'),
('PFW-NORTHEAST'),
('PFW-SOUTHEAST'),
('RIVERSIDE'),
('TRENTON,CANADA'),
('VERNON')
--temp to hold data for the cities
CREATE TABLE #temp
(
city VARCHAR(50),
ytdshipments INT,
ytdtotalweight DECIMAL(7, 2) NOT NULL,
ytdtotalcharges DECIMAL (7, 2) NOT NULL
--YTDRevperPound decimal (7,2) not null
)
INSERT INTO #temp
SELECT ##temp.city,
0,
0,
0
FROM ##temp
INSERT #temp
-- YTD shipments/Charges/Weight by city
SELECT city = CASE
WHEN nameaddrmstr_1.city IN( 'ABERDEEN', 'CHESAPEAKE', 'CHICAGO'
,
'CLACKAMAS',
'COLUMBUS', 'CONKLIN', 'DENVER',
'FORT WORTH',
'HANOVER PARK', 'JACKSONVILLE',
'LAKELAND'
,
'MONTGOMERY'
,
'RIVERSIDE', 'TRENTON', 'VERNON' )
THEN
CASE
WHEN
nameaddrmstr_1.city = 'CHICAGO'
AND h.shipr = 'PREFRESVS' THEN 'Preffered-Redist/CHICAGO'
WHEN
nameaddrmstr_1.city = 'TRENTON'
AND nameaddrmstr_1.city = 'CA' THEN 'TRENTON,CANADA'
ELSE
nameaddrmstr_1.city
END
ELSE 'Other'
END,
ytdshipments = COUNT(CONVERT(VARCHAR(10), h.dateshipped, 101)),
ytdtotalweight =SUM(CASE
WHEN h.totaldimwgt > h.totalwgt THEN h.totaldimwgt
ELSE h.totalwgt
END),
ytdtotalcharges = SUM (cs.totalestrevcharges)
--YTDRevperPound = convert(decimal(7,2),sum (cs.TotalEstRevCharges )/sum( CASE WHEN h.TotalDimWGT > > h.TotalWGT THEN h.TotalDimWGT ELSE h.TotalWGT END ))
FROM as400.dbo.hawb AS h WITH(nolock)
INNER JOIN as400.dbo.chargesummary AS cs
ON h.hawbnum = cs.hawbnum
LEFT OUTER JOIN as400.dbo.nameaddrmstr AS nameaddrmstr_1
ON h.shipr = nameaddrmstr_1.nameaddrcode
WHERE h.dateshipped >= '01/01/2010'
AND h.dateshipped <= '12/19/2010'
--WHERE H.DateShipped >= >= @StartDate_y AND H.dateshipped <= @EndDate
AND h.cust IN( 'DARDENREED', 'MAINEDARDE', 'MBMRIVRSDE', 'MBMCOLUMBS',
'MBMLAKELND', 'MBMFTWORTH', 'SYGMACOLUM', 'SYGMANETW6',
'MAI215', 'MBMMNTGMRY' )
GROUP BY CASE
WHEN nameaddrmstr_1.city IN( 'ABERDEEN', 'CHESAPEAKE', 'CHICAGO', 'CLACKAMAS',
'COLUMBUS', 'CONKLIN', 'DENVER', 'FORT WORTH',
'HANOVER PARK', 'JACKSONVILLE', 'LAKELAND',
'MONTGOMERY'
,
'RIVERSIDE', 'TRENTON', 'VERNON' ) THEN CASE
WHEN
nameaddrmstr_1.city = 'CHICAGO'
AND h.shipr = 'PREFRESVS' THEN 'Preffered-Redist/CHICAGO'
WHEN
nameaddrmstr_1.city = 'TRENTON'
AND nameaddrmstr_1.city = 'CA' THEN 'TRENTON,CANADA'
ELSE
nameaddrmstr_1.city
END
ELSE 'Other'
END
SELECT #temp.city AS city,
MAX(#temp.ytdshipments) AS ytdshipments,
MAX(#temp.ytdtotalweight) AS ytdtotalweight,
MAX(#temp.ytdtotalcharges) AS ytdtotalcharges
FROM #temp WITH(nolock)
LEFT OUTER JOIN ##temp
ON ##temp.city = #temp.city
GROUP BY #temp.city
DROP TABLE #temp
DROP TABLE ##temp
фпк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
Я понимаю, что где-то в результате запроса получается большое число, вот только как найти, откуда это число возникает?
cw014
2 — 01.02.16 — 07:37
Пройтись отладчиком + ТИИ
фпк1сл
3 — 01.02.16 — 11:57
Отладчик мне ничего не покажет, программа завершается в момент Выборка = Запрос.ВыполнитьПакет()[1].Выбрать(); , значит я не узнаю, что её выбивает. В файловом варианте база тоже не запускается, размер слишком большой.
Timon1405
4 — 01.02.16 — 12:04
обновитесь, говорят, на 11.1.10.150 проблема уходит.
Михаил Козлов
5 — 01.02.16 — 12:14
(3) Можно попробовать в консоли удалять из пакета по 1. Или выполнять по 1.
Карупян
6 — 01.02.16 — 12:16
профайлером (или тж) засечь запрос и посмотреть
фпк1сл
7 — 01.02.16 — 15:21
Обновляться буду в крайнем случае, попробую в технологическом журнале посмотреть на криминал. Профайлером не имею представления как пользоваться.
фпк1сл
8 — 02.02.16 — 16:16
Обновление не дало результатов. В ТЖ и профайлер смотрел — ничего не понял. Подскажите, может по какому нибудь регистру посмотреть какие нибудь значения подозрительные?
mikecool
9 — 02.02.16 — 16:19
(8) первый запрос из пакета генерит не перевариваемое число — посмотри, какие там числовые поля и попытайся понять, откуда мб такое большое
Timon1405
10 — 02.02.16 — 17:16
(8) поищите большой ресурс «ПостояннаяРазница» в регистре ВыручкаИСебестоимостьПродаж в консоли запросов
Tateossian
11 — 02.02.16 — 18:37
(0) Скорее всего, это происходит где-то при делении, попробуй все такие места явно обработать через ВЫРАЗИТЬ( КАК ЧИСЛО(xx,yy))
Cyberhawk
12 — 02.02.16 — 18:53
ИР тебе в помощь — там и разбивка запроса на подзапросы, и отбор ТЖ по конкретному запросу
фпк1сл
13 — 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 Удаление таблицы.
| УНИЧТОЖИТЬ ВременнаяТаблицаРешений
|»;
фпк1сл
14 — 03.02.16 — 12:58
Запрос выполняется с использованием Менеджера временных таблиц
фпк1сл
15 — 03.02.16 — 13:02
Еще глупый вопрос, в запросе выполняется первый пакет. Как мне его найти?
фпк1сл
16 — 05.02.16 — 09:26
я вычислил, что всему виной вот эта строчка в запросе
| ВЫРАЗИТЬ(СУММА(ЕСТЬNULL(ВтТаблицаРешений.ПостояннаяРазница, 0) * ЕСТЬNULL(ПеремещенияСписания.Количество, 0)) КАК ЧИСЛО(23,10))
Здесь и происходит переполнение.
Ёпрст
17 — 05.02.16 — 09:35
(16) выкини выразить оттуда
Ёпрст
18 — 05.02.16 — 09:35
и спи спокойно дальше
фпк1сл
19 — 05.02.16 — 09:42
(17) Не помогло, все та же ошибка преобразования numeric.
Что интересно, только за апрель документ выжучивается, следующий месяц проводится без проблем.
Ёпрст
20 — 05.02.16 — 09:43
ну поставь КАК ЧИСЛО(15,0)
фпк1сл
21 — 05.02.16 — 09:53
(20) Все так же упрямо выскакивает эта ошибка.
НЕА123
22 — 05.02.16 — 10:00
СУММА(ЕСТЬNULL(ВтТаблицаРешений.ПостояннаяРазница, 0)) Как СуммаПР,
Сумма(ЕСТЬNULL(ПеремещенияСписания.Количество, 0)) КАК СуммаСписания,…
может дикие числа.
НЕА123
23 — 05.02.16 — 10:03
вообще, ИМХО, ВЫРАЗИТЬ в Сумма засунуть.
Tateossian
24 — 05.02.16 — 10:09
(16) Выведи в отладке содержимое ВтТаблицаРешений в ТЗ и посмотри, что там за числа.
фпк1сл
25 — 05.02.16 — 10:53
(23) выразил, снова ошибка. (24) Глазами пробежался по 12к строк, на первый взгляд никакого криминала. Попробую покромсать запрос и выполнять по частям.
фпк1сл
26 — 05.02.16 — 13:11
Получается, что «ВтТаблицаРешений.ПостояннаяРазница» и «ПеремещенияСписания.Количество» имеют значение Null.
И если подставить, то получается, что выражение
ВЫРАЗИТЬ(СУММА(0 * 0) КАК ЧИСЛО(23,10)) — вызывает арифметическое переполнение.
фпк1сл
27 — 05.02.16 — 13:50
Был неправ, зайдя дальше обнаружил, что умножение «ВтТаблицаРешений.ПостояннаяРазница» и «ПеремещенияСписания.Количество» на какой то итерации дает переполнение, буду двигаться дальше.
фпк1сл
28 — 09.02.16 — 15:52
При проведении документа «Расчет себестоимости» формируются записи регистра накопления «Себестоимость товаров». Так вот за 2014 год все формировалось нормально, а с 2015 в колонке «Стоимость (ПР)» — постоянная разница, только по 2-3 номенклатурам начали появляться и расти огромные числа. Подскажите, из-за чего растет постоянная разница строго по 2 позициям номенклатуры?
фпк1сл
29 — 10.02.16 — 10:10
Пример. Одна организация, два склада.
Документ перемещения формирует две записи в регистре накопления — Количество(10) по двум складам.
Документ Расчет себестоимости товаров формирует одну запись — Стоимость(ПР) : 134 046 229,30. Откуда такая цифра? Причем некоторые записи идут корректно, в чем разница, так и не понял.
I keep getting this error message everytime I run this query:
Msg 8115, Level 16, State 8, Line 33
Arithmetic overflow error converting numeric to data type numeric.
The statement has been terminated.
But if I change the create table to (7,0), I don’t get the error message.But I need my data to be displayed as a decimal. I have tried 8,3 does not work.
Is there any one who can help me work this?Any help will be greatly appreciated.
DECLARE @StartDate AS DATETIME
DECLARE @StartDate_y AS DATETIME
DECLARE @EndDate AS DATETIME
DECLARE @temp_y AS DATETIME
SET @temp_y = Dateadd(yy, Datediff(yy, 0, Getdate()), 0)
SET @StartDate_y = Dateadd(dd, 1 - Datepart(dw, Dateadd("ww", -2, @temp_y)),
Dateadd("ww", -2, @temp_y))
SET @StartDate = Dateadd(dd, 1 - Datepart(dw, Dateadd("ww", -2, Getdate())),
Dateadd("ww", -2, Getdate()))
SET @EndDate = Dateadd(dd, 6, @StartDate)
--temp table to hold all cities in list
CREATE TABLE ##temp
(
city VARCHAR(50)
)
INSERT INTO ##temp
VALUES ('ABERDEEN'),
('CHESAPEAKE'),
('Preffered-Seafood/CHICAGO'),
('Preffered-Redist/CHICAGO'),
('CLACKAMAS'),
('COLUMBUS'),
('CONKLIN'),
('DENVER'),
('FORT WORTH'),
('HANOVER PARK'),
('JACKSONVILLE'),
('LAKELAND'),
('MONTGOMERY'),
('PFW-NORTHEAST'),
('PFW-SOUTHEAST'),
('RIVERSIDE'),
('TRENTON,CANADA'),
('VERNON')
--temp to hold data for the cities
CREATE TABLE #temp
(
city VARCHAR(50),
ytdshipments INT,
ytdtotalweight DECIMAL(7, 2) NOT NULL,
ytdtotalcharges DECIMAL (7, 2) NOT NULL
--YTDRevperPound decimal (7,2) not null
)
INSERT INTO #temp
SELECT ##temp.city,
0,
0,
0
FROM ##temp
INSERT #temp
-- YTD shipments/Charges/Weight by city
SELECT city = CASE
WHEN nameaddrmstr_1.city IN( 'ABERDEEN', 'CHESAPEAKE', 'CHICAGO'
,
'CLACKAMAS',
'COLUMBUS', 'CONKLIN', 'DENVER',
'FORT WORTH',
'HANOVER PARK', 'JACKSONVILLE',
'LAKELAND'
,
'MONTGOMERY'
,
'RIVERSIDE', 'TRENTON', 'VERNON' )
THEN
CASE
WHEN
nameaddrmstr_1.city = 'CHICAGO'
AND h.shipr = 'PREFRESVS' THEN 'Preffered-Redist/CHICAGO'
WHEN
nameaddrmstr_1.city = 'TRENTON'
AND nameaddrmstr_1.city = 'CA' THEN 'TRENTON,CANADA'
ELSE
nameaddrmstr_1.city
END
ELSE 'Other'
END,
ytdshipments = COUNT(CONVERT(VARCHAR(10), h.dateshipped, 101)),
ytdtotalweight =SUM(CASE
WHEN h.totaldimwgt > h.totalwgt THEN h.totaldimwgt
ELSE h.totalwgt
END),
ytdtotalcharges = SUM (cs.totalestrevcharges)
--YTDRevperPound = convert(decimal(7,2),sum (cs.TotalEstRevCharges )/sum( CASE WHEN h.TotalDimWGT > > h.TotalWGT THEN h.TotalDimWGT ELSE h.TotalWGT END ))
FROM as400.dbo.hawb AS h WITH(nolock)
INNER JOIN as400.dbo.chargesummary AS cs
ON h.hawbnum = cs.hawbnum
LEFT OUTER JOIN as400.dbo.nameaddrmstr AS nameaddrmstr_1
ON h.shipr = nameaddrmstr_1.nameaddrcode
WHERE h.dateshipped >= '01/01/2010'
AND h.dateshipped <= '12/19/2010'
--WHERE H.DateShipped >= >= @StartDate_y AND H.dateshipped <= @EndDate
AND h.cust IN( 'DARDENREED', 'MAINEDARDE', 'MBMRIVRSDE', 'MBMCOLUMBS',
'MBMLAKELND', 'MBMFTWORTH', 'SYGMACOLUM', 'SYGMANETW6',
'MAI215', 'MBMMNTGMRY' )
GROUP BY CASE
WHEN nameaddrmstr_1.city IN( 'ABERDEEN', 'CHESAPEAKE', 'CHICAGO', 'CLACKAMAS',
'COLUMBUS', 'CONKLIN', 'DENVER', 'FORT WORTH',
'HANOVER PARK', 'JACKSONVILLE', 'LAKELAND',
'MONTGOMERY'
,
'RIVERSIDE', 'TRENTON', 'VERNON' ) THEN CASE
WHEN
nameaddrmstr_1.city = 'CHICAGO'
AND h.shipr = 'PREFRESVS' THEN 'Preffered-Redist/CHICAGO'
WHEN
nameaddrmstr_1.city = 'TRENTON'
AND nameaddrmstr_1.city = 'CA' THEN 'TRENTON,CANADA'
ELSE
nameaddrmstr_1.city
END
ELSE 'Other'
END
SELECT #temp.city AS city,
MAX(#temp.ytdshipments) AS ytdshipments,
MAX(#temp.ytdtotalweight) AS ytdtotalweight,
MAX(#temp.ytdtotalcharges) AS ytdtotalcharges
FROM #temp WITH(nolock)
LEFT OUTER JOIN ##temp
ON ##temp.city = #temp.city
GROUP BY #temp.city
DROP TABLE #temp
DROP TABLE ##temp
I keep getting this error message everytime I run this query:
Msg 8115, Level 16, State 8, Line 33
Arithmetic overflow error converting numeric to data type numeric.
The statement has been terminated.
But if I change the create table to (7,0), I don’t get the error message.But I need my data to be displayed as a decimal. I have tried 8,3 does not work.
Is there any one who can help me work this?Any help will be greatly appreciated.
DECLARE @StartDate AS DATETIME
DECLARE @StartDate_y AS DATETIME
DECLARE @EndDate AS DATETIME
DECLARE @temp_y AS DATETIME
SET @temp_y = Dateadd(yy, Datediff(yy, 0, Getdate()), 0)
SET @StartDate_y = Dateadd(dd, 1 - Datepart(dw, Dateadd("ww", -2, @temp_y)),
Dateadd("ww", -2, @temp_y))
SET @StartDate = Dateadd(dd, 1 - Datepart(dw, Dateadd("ww", -2, Getdate())),
Dateadd("ww", -2, Getdate()))
SET @EndDate = Dateadd(dd, 6, @StartDate)
--temp table to hold all cities in list
CREATE TABLE ##temp
(
city VARCHAR(50)
)
INSERT INTO ##temp
VALUES ('ABERDEEN'),
('CHESAPEAKE'),
('Preffered-Seafood/CHICAGO'),
('Preffered-Redist/CHICAGO'),
('CLACKAMAS'),
('COLUMBUS'),
('CONKLIN'),
('DENVER'),
('FORT WORTH'),
('HANOVER PARK'),
('JACKSONVILLE'),
('LAKELAND'),
('MONTGOMERY'),
('PFW-NORTHEAST'),
('PFW-SOUTHEAST'),
('RIVERSIDE'),
('TRENTON,CANADA'),
('VERNON')
--temp to hold data for the cities
CREATE TABLE #temp
(
city VARCHAR(50),
ytdshipments INT,
ytdtotalweight DECIMAL(7, 2) NOT NULL,
ytdtotalcharges DECIMAL (7, 2) NOT NULL
--YTDRevperPound decimal (7,2) not null
)
INSERT INTO #temp
SELECT ##temp.city,
0,
0,
0
FROM ##temp
INSERT #temp
-- YTD shipments/Charges/Weight by city
SELECT city = CASE
WHEN nameaddrmstr_1.city IN( 'ABERDEEN', 'CHESAPEAKE', 'CHICAGO'
,
'CLACKAMAS',
'COLUMBUS', 'CONKLIN', 'DENVER',
'FORT WORTH',
'HANOVER PARK', 'JACKSONVILLE',
'LAKELAND'
,
'MONTGOMERY'
,
'RIVERSIDE', 'TRENTON', 'VERNON' )
THEN
CASE
WHEN
nameaddrmstr_1.city = 'CHICAGO'
AND h.shipr = 'PREFRESVS' THEN 'Preffered-Redist/CHICAGO'
WHEN
nameaddrmstr_1.city = 'TRENTON'
AND nameaddrmstr_1.city = 'CA' THEN 'TRENTON,CANADA'
ELSE
nameaddrmstr_1.city
END
ELSE 'Other'
END,
ytdshipments = COUNT(CONVERT(VARCHAR(10), h.dateshipped, 101)),
ytdtotalweight =SUM(CASE
WHEN h.totaldimwgt > h.totalwgt THEN h.totaldimwgt
ELSE h.totalwgt
END),
ytdtotalcharges = SUM (cs.totalestrevcharges)
--YTDRevperPound = convert(decimal(7,2),sum (cs.TotalEstRevCharges )/sum( CASE WHEN h.TotalDimWGT > > h.TotalWGT THEN h.TotalDimWGT ELSE h.TotalWGT END ))
FROM as400.dbo.hawb AS h WITH(nolock)
INNER JOIN as400.dbo.chargesummary AS cs
ON h.hawbnum = cs.hawbnum
LEFT OUTER JOIN as400.dbo.nameaddrmstr AS nameaddrmstr_1
ON h.shipr = nameaddrmstr_1.nameaddrcode
WHERE h.dateshipped >= '01/01/2010'
AND h.dateshipped <= '12/19/2010'
--WHERE H.DateShipped >= >= @StartDate_y AND H.dateshipped <= @EndDate
AND h.cust IN( 'DARDENREED', 'MAINEDARDE', 'MBMRIVRSDE', 'MBMCOLUMBS',
'MBMLAKELND', 'MBMFTWORTH', 'SYGMACOLUM', 'SYGMANETW6',
'MAI215', 'MBMMNTGMRY' )
GROUP BY CASE
WHEN nameaddrmstr_1.city IN( 'ABERDEEN', 'CHESAPEAKE', 'CHICAGO', 'CLACKAMAS',
'COLUMBUS', 'CONKLIN', 'DENVER', 'FORT WORTH',
'HANOVER PARK', 'JACKSONVILLE', 'LAKELAND',
'MONTGOMERY'
,
'RIVERSIDE', 'TRENTON', 'VERNON' ) THEN CASE
WHEN
nameaddrmstr_1.city = 'CHICAGO'
AND h.shipr = 'PREFRESVS' THEN 'Preffered-Redist/CHICAGO'
WHEN
nameaddrmstr_1.city = 'TRENTON'
AND nameaddrmstr_1.city = 'CA' THEN 'TRENTON,CANADA'
ELSE
nameaddrmstr_1.city
END
ELSE 'Other'
END
SELECT #temp.city AS city,
MAX(#temp.ytdshipments) AS ytdshipments,
MAX(#temp.ytdtotalweight) AS ytdtotalweight,
MAX(#temp.ytdtotalcharges) AS ytdtotalcharges
FROM #temp WITH(nolock)
LEFT OUTER JOIN ##temp
ON ##temp.city = #temp.city
GROUP BY #temp.city
DROP TABLE #temp
DROP TABLE ##temp