Ошибка выполнения запроса ошибка при выполнении операции над данными

   Avtokrator

03.06.13 — 12:03

Доброго времени суток, уважаемые Мастера.

Проблема немного не понятная…. В УТ 10.3.12.3, при проведении документа  «Поступление товаров и услуг» возникает ошибка:

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’

по причине:

{ОбщийМодуль.ОбщегоНазначения(4191)}: Ошибка при вызове метода контекста (Выполнить)

по причине:

Ошибка выполнения запроса

по причине:

Ошибка при выполнении операции над данными:

Microsoft SQL Server Native Client 10.0: Divide by zero error encountered.

HRESULT=80040E14, SQLSrvr: SQLSTATE=22012, state=1, Severity=10, native=8134, line=1

Знаю, что программа делит на «0», но вот где ??? Ошибка ссылается на следующую функцию.

Функция СформироватьЗапросПоТабличнойЧасти(ДокументОбъект, ИмяТабличнойЧасти, СтруктураПолей,

                                          СтруктураСложныхПолей = Неопределено) Экспорт

   ТекстЗапроса = «»;

   
   ДокументМетаданные = ДокументОбъект.Метаданные();

   Для Каждого Реквизит Из СтруктураПолей Цикл

       ТекстЗапроса  = ТекстЗапроса + «,

       |Док.» + Реквизит.Значение +

       » КАК » + СокрЛП(Реквизит.Ключ);

   КонецЦикла;

   
   ТекстСоединение=»»;

   
   Запрос = Новый Запрос;

   Если ТипЗнч(СтруктураСложныхПолей) = Тип(«Структура») Тогда // Добавим к запросу конструкции.

       
       Для Каждого Элемент Из СтруктураСложныхПолей Цикл

           
           ТекстЗапроса  = ТекстЗапроса + «,

           | » + Элемент.Значение +

           » КАК » + СокрЛП(Элемент.Ключ);

           
       КонецЦикла;

       
       Если СтруктураСложныхПолей.Свойство(«Проект») Тогда

           
           ТекстСоединение=»

           |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УстановкаПроектовДляНоменклатуры.СрезПоследних(&ДатаДок, НоменклатураПроекта В (ВЫБРАТЬ Номенклатура ИЗ Документ.» + ДокументМетаданные.Имя + «.»+ СокрЛП(ИмяТабличнойЧасти) + » ГДЕ Ссылка = &ДокументСсылка)) КАК ПроектыНоменклатуры

           |ПО Док.Номенклатура=ПроектыНоменклатуры.НоменклатураПроекта»;

           
           Запрос.УстановитьПараметр(«ДатаДок»,ДокументОбъект.Дата);

       КонецЕсли;

   КонецЕсли;

       
   Запрос.Текст = «ВЫБРАТЬ

               | Док.НомерСтроки » + ТекстЗапроса + »

               | ИЗ

               |      Документ.» + ДокументМетаданные.Имя + «.»+ СокрЛП(ИмяТабличнойЧасти) +

               » КАК Док»+ТекстСоединение+»

               |     ГДЕ Док.Ссылка = &ДокументСсылка»;

   // Установим параметры запроса.

   Запрос.УстановитьПараметр(«ДокументСсылка» , ДокументОбъект.Ссылка);

   
   Если ДокументОбъект[ИмяТабличнойЧасти].Количество() = 0 Тогда

       Запрос.Текст = СтрЗаменить(Запрос.Текст, «ГДЕ Док.Ссылка = &ДокументСсылка», «ГДЕ ЛОЖЬ»);

   КонецЕсли;

   Возврат Запрос.Выполнить();

КонецФункции // СформироватьЗапросПоТабличнойЧасти()

   Avtokrator

4 — 03.06.13 — 12:13

Проблема кроется тут, когда создается сам запрос:

»

Для Каждого Реквизит Из СтруктураПолей Цикл

       ТекстЗапроса  = ТекстЗапроса + «,

       |Док.» + Реквизит.Значение +

       » КАК » + СокрЛП(Реквизит.Ключ);

   КонецЦикла;

»

Как, в таком запросе, сделать проверку на ноль, чтобы SQL отвязался?

   Avtokrator

6 — 03.06.13 — 12:18

Текст запроса, вытащенный из обработчика.

Запрос.Текст    «ВЫБРАТЬ

Док.НомерСтроки ,

Док.Номенклатура КАК Номенклатура,

Док.Количество * Коэффициент /Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Количество,

Док.Сумма КАК Сумма,

Док.СтавкаНДС КАК СтавкаНДС,

Док.СуммаНДС КАК НДС,

Док.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

Док.СерияНоменклатуры КАК СерияНоменклатуры,

Док.Номенклатура.ВестиПартионныйУчетПоСериям КАК ВестиПартионныйУчетПоСериям,

Док.Номенклатура.Услуга КАК Услуга,

Док.Номенклатура.Набор КАК Набор,

Док.Номенклатура.Комплект КАК Комплект,

Док.Заказ КАК Заказ,

Док.Заказ.СкладГруппа КАК СкладЗаказаПокупателя,

Док.Заказ.ДоговорКонтрагента.ОбособленныйУчетТоваровПоЗаказамПокупателей КАК ОбособленныйУчетТоваровПоЗаказамПокупателей,

Док.ЕдиницаИзмерения КАК ЕдиницаИзмерения,

Док.Ссылка.СкладОрдер КАК Склад,

Док.Ссылка.СкладОрдер.ВидСклада КАК ВидСкладаРазмещения,

Док.ПриходныйОрдер КАК ДокументПолучения,

Док.ПриходныйОрдер.Организация КАК ОрганизацияДокументаПолучения,

Док.ПриходныйОрдер.БезПраваПродажи КАК БезПраваПродажи,

Док.Цена КАК Цена,

Док.Коэффициент КАК Коэффициент,

Док.ПриходныйОрдер.Склад КАК ПриходныйОрдерСклад,

Док.Номенклатура.ВестиУчетПоСериям КАК УчетПоСериям,

Док.СерияНоменклатуры.СтранаПроисхождения КАК СтранаПроисхождения,

Док.СерияНоменклатуры.НомерГТД КАК НомерГТД,

Док.ЗаказПоставщику КАК ЗаказПоставщику

ИЗ

     Документ.ПоступлениеТоваровУслуг.Товары КАК Док

    ГДЕ Док.Ссылка = &ДокументСсылка»

Содержание

  1. ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1
  2. 2 ответа
  3. ошибка postgresql — ОШИБКА: ввод вне допустимого диапазона
  4. 6 ответы
  5. Ошибка MySQL 1264: значение вне допустимого диапазона для столбца
  6. tl; dr
  7. Объяснение
  8. Решение
  9. Postgres: целое число вне допустимого диапазона. Почему возникает эта ошибка?
  10. BIGINT UNSIGNED VALUE находится вне диапазона моего SQL
  11. 7 ответов

ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1

Я получаю такую ​​ошибку:

ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1

После выполнения этого запроса:

Я не уверен, почему это не работает с этим числом, которое не имеет десятичных знаков и состоит всего из 4 цифр.

2 ответа

Вы используете DECIMAL(10,8) , что означает, что максимальное количество цифр перед десятичным будет (10 — 8) = 2 .

Синтаксис объявления для столбца DECIMAL — DECIMAL (M, D). Диапазоны значений аргументов следующие:

  1. М — максимальное количество цифр (точность). Он имеет диапазон от 1 до 65.
  2. D — количество цифр справа от десятичной точки (шкала). Он имеет диапазон от 0 до 30 и не должен быть больше M.

Чтобы исправить ошибку, измените тип данных на DECIMAL(10,2) .

Если вы используете десятичный (10,8) в качестве типа данных, это означает, что вы указываете 8 цифр после десятичного разряда, что оставляет только (10-8, т.е. 2 цифры) для всего вашего числа.

В этом случае, поскольку ваш номер 1347 содержит 4 цифры (целое число), вы получаете сообщение об ошибке «Значение вне допустимого диапазона», поскольку вам разрешено только 2.

Вам следует подумать об изменении его как минимум на десятичное (12,8), что даст вам 4 цифры для всей вашей числовой части, и ваша вышеуказанная команда должна работать.

Источник

ошибка postgresql — ОШИБКА: ввод вне допустимого диапазона

Функция ниже продолжает возвращать это сообщение об ошибке. Я подумал, что, возможно, это вызвано типом поля double_precision, и я попытался использовать CAST, но либо это не так, либо я сделал это неправильно. Помогите?

задан 28 марта ’10, 12:03

6 ответы

И какой запрос вы выполняете, чтобы получить эту ошибку?

Вы смотрели вклад? Имеет также функции для этого типа расчеты.

ответ дан 28 мар ’10, в 16:03

Нет, я никогда не видел этого раньше. Хотя выглядит неплохо. У вас есть ссылка или пример того, как это использовать? Мне непонятно, как передать ему радиус, который вы хотите рассчитать (например, если центральная точка находится на -77, 30, и вы хотите найти все точки в радиусе 20 миль) — КофеинIV

Извините, я не могу вам помочь. Просто попробуйте и посмотрите, может ли это решить вашу проблему. — Фрэнк Хайкенс

Немного поздно, но возникла та же проблема, и это происходит потому, что параметр acos находится за пределами [-1,1] (возможно, 1.01), прежде чем вычислять ACOS, вы должны указать это значение как INTEGER

ответ дан 04 апр.

Это не может быть правдой, ты в конечном итоге все сделаешь 0 or 1 — Тим Абелл

Взгляните на это решение:

Проблема действительно заключалась в том, что ACOS() находился за пределами диапазона [-1,1], и это произошло потому, что он вычислял расстояние между одной и той же парой LAT, LONG (то же самое местоположение).

Я добавил WHERE L1.ID <> L2.ID, чтобы остановить рефлексивное вычисление.

Мартин ван Остерхаут писал:

В сб, 18 августа 2007 г., в 03:21:02 -0700:XNUMX, dustov написал:

В моей базе данных только что была эта новая ошибка, и я понятия не имею, почему (потому что я намеренно не вносил никаких изменений в эту таблицу). У кого-нибудь есть идея, какой вход находится вне диапазона или в чем может быть проблема?

Единственное, что я могу представить в вашем запросе вне допустимого диапазона, это ACOS(), значение которого должно быть между -1 и 1 (иначе результат будет сложным).

Я бы попытался посмотреть, каковы аргументы в пользу ACOS, но, вероятно, это какой-то крайний случай, когда округление доставит вас.

Надеюсь, что это помогает,

У меня была такая же ошибка с вычислением расстояния между координатами, но приведенный выше совет решил мою проблему.

Источник

Ошибка MySQL 1264: значение вне допустимого диапазона для столбца

Поскольку я использую SET cust_fax в таблице в MySQL вот так:

а затем я вставляю такое значение:

но потом он говорит

`error 1264` out of value for column

И я хочу знать, где ошибка? Мой набор? Или другой?

Любой ответ будет оценен по достоинству!

Значение 3172978990 больше, чем 2147483647 — максимальное значение для INT — отсюда и ошибка. Здесь перечислены целочисленные типы MySQL и их диапазоны .

Также обратите внимание, что (10) in INT(10) не определяет «размер» целого числа. Он определяет ширину отображения столбца. Эта информация носит рекомендательный характер.

Чтобы исправить ошибку, измените тип данных на VARCHAR . Номера телефона и факса следует хранить в виде строк. См. Это обсуждение .

Вы также можете изменить тип данных на bigInt, и это решит вашу проблему. Не рекомендуется хранить целые числа в виде строк, если в этом нет необходимости. 🙂

Вы превышаете длину типа данных int . Вы можете использовать атрибут UNSIGNED для поддержки этого значения.

SIGNED INT может поддерживать до 2147483647, а с UNSIGNED INT позволяет вдвое больше. После этого вы все еще хотите сохранить данные, чем использовать CHAR или VARCHAR с длиной 10

tl; dr

Убедитесь, что вы AUTO_INCREMENT не находитесь за пределами досягаемости. В этом случае установите для него новое значение:

Объяснение

AUTO_INCREMENT может содержать число, превышающее максимальное значение, разрешенное типом данных. Это может произойти, если вы заполнили стол, который вы опустошили позже, но он AUTO_INCREMENT остался прежним, но также могут быть разные причины. В этом случае идентификатор новой записи будет вне допустимого диапазона.

Решение

Если это причина вашей проблемы, вы можете исправить ее, установив AUTO_INCREMENT на единицу больше, чем идентификатор последней строки. Итак, если идентификатор вашей последней строки равен 100, тогда:

Если вы хотите проверить AUTO_INCREMENT текущее значение, используйте эту команду :

Источник

Postgres: целое число вне допустимого диапазона. Почему возникает эта ошибка?

У меня два вопроса. Я ожидаю, что оба вставят одно и то же значение: 429496729600 , но один из них не работает из-за ошибки:

Почему возникает ошибка при первом запросе?

UPD
Забудьте указать, что тип amount — это bigint , а

Ваше число больше целого. Перед вставкой первой вставки выполняется вычисление. Когда вы умножаете целое число, postgres ожидает в качестве результата целое число. Это не так.

int максимальное значение 2 31 -1, первое значение обновления больше, чем оно, поэтому вызывает ошибку.

Вы можете попробовать сделать столбец amount для типа BIGINT

BIGINT -9223372036854775808 to 9223372036854775807

РЕДАКТИРОВАТЬ

мы можем использовать pg_typeof , чтобы проверить это.

Запрос №1

postgresql позволит 429496729600 быть BIGINT из-за значения, превышающего диапазон int.

Запрос №2

Когда вы делаете умножение на число, которое будет переведено в int .

Запрос

Вы можете использовать 400*1024*1024*1024:: BIGINT , позволяя int конвертировать в bigint .

хорошо спасибо. Покажи мне проблему. но другой ответ покажет, как решить эту проблему.

Источник

BIGINT UNSIGNED VALUE находится вне диапазона моего SQL

Я получаю следующую ошибку

#1690-значение без знака BIGINT находится вне диапазона в ‘ ( legends . spawns . quantity — tmp_field )’

Я смотрел на него некоторое время, запрос длинный, извините.

порождает таблицу-count game_moblist.spawn_id is 0 для всех возможных строк, кроме 1 (я удалил строку, чтобы проверить запрос)

данные в противном случае довольно длинные и не имеют отношения к моему вопросу Я думаю

любые идеи, как обойти эту ошибку?

7 ответов

начиная с MySQL 5.5.5, переполнение во время оценки числового выражения приводит к ошибке. Например, наибольшее значение bigint со знаком 9223372036854775807, поэтому следующее выражение создает ошибку.

чтобы операция прошла успешно, преобразуйте значение unsigned;

изменение части вашего запроса, как показано ниже, решит проблему.

в противном случае вам может потребоваться изменить sql_mode о неподписанных операций.

а затем запустите запрос, чтобы получить желаемый результат.

см. также аналогичную публикацию на форуме здесь.

Я действительно нашел этот вопрос, почему я искал решение. Если у вас такая же проблема, как и у меня, попробуйте отключить параметр «unsigned».

вполне возможно, что ваш код не здесь:

потому что, если результат этой математической операции меньше нуля, он потерпит неудачу с параметром «unsigned».

У меня была та же проблема, она произошла на соединении и не могла понять, что происходит, в конце концов, это была опечатка в предложении ON, где я поместил знак минус вместо знака равенства. Может быть, глупо, но я просто не видел этого около 30 минут, и, возможно, это может кому-то помочь.

дополнительный способ-использовать MySQL, если оператора. Это помогло мне, когда оба столбца были BIGINT and Unsigned .

другой возможной причиной, по-видимому, является то, как выделяется тип переменной результата.

ошибка 1690 (22003): значение без знака BIGINT находится вне диапазона в ‘(1 — ((1 / 1.045) ^ markov . tbl_EUR_PDH . term_06 ))’

делает то, что можно было бы ожидать (обратите внимание, что я просто заменяю «1»на » 1.0″)

чтобы обобщить правило, MySQL теперь откажется вычитать беззнаковый операнд из подписанного.

пример : SELECT A — B; завершится ошибкой, если A подписан, А B-без знака.

обходные пути: добавьте фактор 1.0 в подписанный операнд, чтобы он неявно бросал его в FLOAT или использовал CAST (B AS SIGNED) , или даже swap (B — A) и измените алгоритм соответствующим образом.

sql_mode работал в mysql client и Adminer, но не в CodeIgniter, где это считается. Кастинг тоже не помог.

простая арифметическая операция сделала трюк:

Источник

ошибка postgresql — ОШИБКА: ввод вне допустимого диапазона

Функция ниже продолжает возвращать это сообщение об ошибке. Я подумал, что, возможно, это вызвано типом поля double_precision, и я попытался использовать CAST, но либо это не так, либо я сделал это неправильно. Помогите?

задан 28 марта ’10, 12:03

6 ответы

И какой запрос вы выполняете, чтобы получить эту ошибку?

Вы смотрели вклад? Имеет также функции для этого типа расчеты.

ответ дан 28 мар ’10, в 16:03

Нет, я никогда не видел этого раньше. Хотя выглядит неплохо. У вас есть ссылка или пример того, как это использовать? Мне непонятно, как передать ему радиус, который вы хотите рассчитать (например, если центральная точка находится на -77, 30, и вы хотите найти все точки в радиусе 20 миль) — КофеинIV

Извините, я не могу вам помочь. Просто попробуйте и посмотрите, может ли это решить вашу проблему. — Фрэнк Хайкенс

Немного поздно, но возникла та же проблема, и это происходит потому, что параметр acos находится за пределами [-1,1] (возможно, 1.01), прежде чем вычислять ACOS, вы должны указать это значение как INTEGER

ответ дан 04 апр.

Это не может быть правдой, ты в конечном итоге все сделаешь 0 or 1 — Тим Абелл

Взгляните на это решение:

Проблема действительно заключалась в том, что ACOS() находился за пределами диапазона [-1,1], и это произошло потому, что он вычислял расстояние между одной и той же парой LAT, LONG (то же самое местоположение).

Я добавил WHERE L1.ID <> L2.ID, чтобы остановить рефлексивное вычисление.

Мартин ван Остерхаут писал:

В сб, 18 августа 2007 г., в 03:21:02 -0700:XNUMX, dustov написал:

В моей базе данных только что была эта новая ошибка, и я понятия не имею, почему (потому что я намеренно не вносил никаких изменений в эту таблицу). У кого-нибудь есть идея, какой вход находится вне диапазона или в чем может быть проблема?

Единственное, что я могу представить в вашем запросе вне допустимого диапазона, это ACOS(), значение которого должно быть между -1 и 1 (иначе результат будет сложным).

Я бы попытался посмотреть, каковы аргументы в пользу ACOS, но, вероятно, это какой-то крайний случай, когда округление доставит вас.

Надеюсь, что это помогает,

У меня была такая же ошибка с вычислением расстояния между координатами, но приведенный выше совет решил мою проблему.

Источник

ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1

Я получаю такую ​​ошибку:

ОШИБКА 1264 (22003): значение вне диапазона для столбца median_comments в строке 1

После выполнения этого запроса:

Я не уверен, почему это не работает с этим числом, которое не имеет десятичных знаков и состоит всего из 4 цифр.

2 ответа

Вы используете DECIMAL(10,8) , что означает, что максимальное количество цифр перед десятичным будет (10 — 8) = 2 .

Синтаксис объявления для столбца DECIMAL — DECIMAL (M, D). Диапазоны значений аргументов следующие:

  1. М — максимальное количество цифр (точность). Он имеет диапазон от 1 до 65.
  2. D — количество цифр справа от десятичной точки (шкала). Он имеет диапазон от 0 до 30 и не должен быть больше M.

Чтобы исправить ошибку, измените тип данных на DECIMAL(10,2) .

Если вы используете десятичный (10,8) в качестве типа данных, это означает, что вы указываете 8 цифр после десятичного разряда, что оставляет только (10-8, т.е. 2 цифры) для всего вашего числа.

В этом случае, поскольку ваш номер 1347 содержит 4 цифры (целое число), вы получаете сообщение об ошибке «Значение вне допустимого диапазона», поскольку вам разрешено только 2.

Вам следует подумать об изменении его как минимум на десятичное (12,8), что даст вам 4 цифры для всей вашей числовой части, и ваша вышеуказанная команда должна работать.

Источник

SQLSTATE [22003]: Числовое значение вне диапазона: 1264 Значение вне диапазона

в моем десятичном формате с сервера WAMP является десятичным (5,2) My QueryException:

SQLSTATE [22003]: Числовое значение вне диапазона: 1264 Из значения диапазона для столбца ‘converted_1000ml’ в строке 1 (SQL: вставка в inventory_databanks ( product_desc , nc_os , ncos_value , del , ei , sa , wh , bi , brand , variant , type , content , conversion_1000ml , **converted_1000ml** , os , bo , peso_sales , bo_case , os_case , del_case , wh_case , sa_case , price , facing , maker , merchandiser_name , complete_address , source_type , payroll_period , cellphone , schedule , area , region , province , city_municipality , outlet , edi_branch , salesman , ns_case1 , ns_case2 , ns_case3 , ns_bottles1 , ns_bottles2 , ns_bottles3 , ns_date1 , ns_date2 , ns_date3 , date_started , inventory_date , updated_at , created_at Значения) (Emperador_Light 1000 мл Светло — бренди, с запасами, с запасами, 2400 , 4734, 78, 4656 , 245, Emperador_Light, коньяк, оригинал, 1000, 1.00, 4734,00, 0, 0, -229790, 0, 0, 0, 0, 0, 110.00, 13, EDI, Родольфо Сионгко-младший, null, Из инвентарного листа, 16.01.2018 — 31.01.2018, 09303243249, T-TH-S, Центральный Лусон, регион III, Батаан, Маривелес, CORA’S, Филиал Пампанга, Ангелито Кетуа, 0, 0, 0, 0, 0, 0, 2018-01-31, 2018-01-31, 2018-01-31, 2018-01-16, 1970-01- 01, 2018-02-08 08:49:48, 2018-02-08 08:49:48))

Как я могу это исправить? жирные числа, я думаю, это моя проблема

decimal (5,2) имеет диапазон от -999,99 до 999,99. Вам придется изменить этот столбец, чтобы хранить большие значения.

In this example, 5 is the precision and 2 is the scale. The precision represents the number of significant digits that are stored for values, and the scale represents the number of digits that can be stored following the decimal point.

Standard SQL requires that DECIMAL(5,2) be able to store any value with five digits and two decimals, so values that can be stored in the salary column range from -999.99 to 999.99.

Источник

Ошибка MySQL 1264: значение вне допустимого диапазона для столбца

Поскольку я использую SET cust_fax в таблице в MySQL вот так:

а затем я вставляю такое значение:

но потом он говорит

`error 1264` out of value for column

И я хочу знать, где ошибка? Мой набор? Или другой?

Любой ответ будет оценен по достоинству!

Значение 3172978990 больше, чем 2147483647 — максимальное значение для INT — отсюда и ошибка. Здесь перечислены целочисленные типы MySQL и их диапазоны .

Также обратите внимание, что (10) in INT(10) не определяет «размер» целого числа. Он определяет ширину отображения столбца. Эта информация носит рекомендательный характер.

Чтобы исправить ошибку, измените тип данных на VARCHAR . Номера телефона и факса следует хранить в виде строк. См. Это обсуждение .

Вы также можете изменить тип данных на bigInt, и это решит вашу проблему. Не рекомендуется хранить целые числа в виде строк, если в этом нет необходимости. 🙂

Вы превышаете длину типа данных int . Вы можете использовать атрибут UNSIGNED для поддержки этого значения.

SIGNED INT может поддерживать до 2147483647, а с UNSIGNED INT позволяет вдвое больше. После этого вы все еще хотите сохранить данные, чем использовать CHAR или VARCHAR с длиной 10

tl; dr

Убедитесь, что вы AUTO_INCREMENT не находитесь за пределами досягаемости. В этом случае установите для него новое значение:

Объяснение

AUTO_INCREMENT может содержать число, превышающее максимальное значение, разрешенное типом данных. Это может произойти, если вы заполнили стол, который вы опустошили позже, но он AUTO_INCREMENT остался прежним, но также могут быть разные причины. В этом случае идентификатор новой записи будет вне допустимого диапазона.

Решение

Если это причина вашей проблемы, вы можете исправить ее, установив AUTO_INCREMENT на единицу больше, чем идентификатор последней строки. Итак, если идентификатор вашей последней строки равен 100, тогда:

Если вы хотите проверить AUTO_INCREMENT текущее значение, используйте эту команду :

Источник

PostgreSql: отключить числовое значение вне диапазона

Я создаю API с PHP и PostgreSQL. Это один из вопросов, которые я использую:

Столбец «id» является целым числом, и мне не нужен более крупный тип. ? заменяется значением, исходящим от пользователя.

Но если пользователь отправляет слишком большое целое число (9999999999999), PostgreSQL возвращает ошибку:

SQLSTATE [22003]: числовое значение за пределами допустимого диапазона: 7 ERROR: значение »9999999999999999999999999 » вне диапазона для целочисленного типа

Должен ли я проверить переполнение в логике PHP?

Могу ли я превратить эту ошибку в предупреждение? Тот же запрос на MySQL не подводит.

«Тот же запрос на MySQL не подводит» не является отличной рекомендацией (если вы не используете MySQL в режиме ANSI STRICT). MySQL принимает 0000-00-00 как дату, принуждает недействительные записи к нулям в местах и т.д., И часто делает это с максимальным предупреждением, чтобы сообщить вам, что это искалечило ваши данные.

Тем не менее, я бы хотел, чтобы PostgreSQL предлагал варианты функций преобразования типов, которые возвращали код ошибки/возвращали null, поэтому я мог явно писать:

Вы можете написать такую функцию в PL/PgSQL, но она неэффективна, и там нет встроенного.

Хотя я очень рад, что PostgreSQL не будет калечить мои данные, не будучи спрошенными, бывают случаи, когда я предпочитаю, чтобы он искажал мои данные, когда я его просил.

  • Сначала проверьте на стороне приложения;
  • Пусть база данных обеспечивает целостность; а также
  • Ошибки ловушки и сообщить об этом пользователю. Вы можете SQLSTATE возврат SQLSTATE чтобы узнать подробности об ошибке.

PostgreSQL не имеет опции «вставить неверные данные с предупреждениями».

Источник

Ошибка выполнения запроса Ошибка при выполнении операции над данными: Ошибка SQL: Переполнение поля

Описание ошибки:
Подобная ошибка возникала при выполнении разработанного отчета.

Найденные решения:

Ошибка SQL: Переполнение поляОшибка выполнения запроса Ошибка при выполнении операции над данными

Получались значения в запросе которые выходили за пределы размерности типа. Например, в запросе было ВЫРАЗИТЬ( … , ЧИСЛО(7, 2)). Число полученное или выбранное запросом оказалось больше, поэтому замена на ЧИСЛО (15, 2) исправило ошибку.

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

07-05-2014

Журавлев А.С.
(www.azhur-c.ru)

В работе клиент серверной 1С иногда появляется сообщение:

Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Arithmetic overflow error converting numeric to data type numeric.
HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1

Если данная ошибка появляется под управлением  MS SQL 2000, то рекомендуется проверить и установить обновление SP до SP4.

Но для SQL 2005 и 2008 появление такой ошибки не решается обновлением сервиспака.

Вообще появление указанной ошибки вызвано ошибкой в MS SQL при выполнении операции округления, например:

. касательно 1С и запросов выполняемых в ней, указанная ошибка может появляться при выполнении команды: ВЫРАЗИТЬ(ЕСТЬNULL(ВремяПоГрафикуВЧасахНорма, 0) КАК ЧИСЛО(5, 2)) КАК WorkingHours

Если в качестве операнда будет число со значением после запятой .5, в этом случае SQL считает/разбирает значение как литерал х.5 и преобразует к данным типа Numeric(2,1). Функция ROUND (округления)  отрабытывает правильно получая округленный результат и затем пытается сохранить как данные в формате Numeric(2,1), что не правильно и мы получаем сообщение «arithmetic overflow».

Если у Вас возникает такая ошибка, то попробуете использвать преобразование:

ВЫРАЗИТЬ(ЕСТЬNULL(ВремяПоГрафикуВЧасахНорма, 0) КАК ЧИСЛО(  {НОВОЕ значение} , 2)) КАК WorkingHours

, ГДЕ

     {НОВОЕ значение} — Это увеличенное на один (несколько) разряд значение, в это случае ошибки не будет возникать.

Автор решения Александр Шарафан

Страница 1 из 2

  1. Здравствуйте .

    Помогите пожалуйста разобраться со следующей проблеммой .
    Пишу обработку для заполнения табличной части документа УТ 10.3 8.1

    Когда я добавляю на экранную форму таблицы значений новую строку появляется ошибка скуэль

    {ВнешняяОбработка.ВозвратТовараОтПокупателяВнешняя(524)}: Ошибка при вызове метода контекста (Выполнить): Ошибка выполнения запроса "Ошибка при выполнении операции над данными:
    Microsoft OLE DB Provider for SQL Server: Divide by zero error encountered.
    HRESULT=80040E14, SQLSrvr: Error state=1, Severity=10, native=8134, line=1
    "
    ВыборкаДетально = ЗапросДетально.Выполнить().Выбрать();
    по причине:
    Ошибка выполнения запроса "Ошибка при выполнении операции над данными:
    Microsoft OLE DB Provider for SQL Server: Divide by zero error encountered.
    HRESULT=80040E14, SQLSrvr: Error state=1, Severity=10, native=8134, line=1
    "
    по причине:
    Ошибка при выполнении операции над данными:
    Microsoft OLE DB Provider for SQL Server: Divide by zero error encountered.
    HRESULT=80040E14, SQLSrvr: Error state=1, Severity=10, native=8134, line=1
    
    
    

    В которой судя потексту идет ссылка нак один из моих запросов
    НО когда я выполняю этот запрос через консоль или через другую табличную часть в этой форме никакой ошибки нет и всё нормально выполняется.

    Так что что-то я не понимаю ?


  2. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.724
    Симпатии:
    1.014
    Баллы:
    204

    Деление на 0, проверяйте текст запроса и исключите такую ситуацию

  3. Ошибка оказалась в процедуре при активизации строки а можно задать разные процедуры при активизации строки для разных таблицзначений (элемент управления формы)
    на одной и той же форме обработки ???


  4. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.724
    Симпатии:
    1.014
    Баллы:
    204

    ну как бы обработчики для разных ТЧ создаются изначально

  5. Я чего то не понимаю

    Ошибку выдает на ПриАКтивацииСтроки которая в свою очередь ругается на мой запрос .

    Выполняю запрос в консоли все ок — выполняю в обработке если при вызове при активизации причем номенклатура не указана — то всё не ок
    а если указываю то всё здорово .

    В чём проблемма ? нет никакого деления на ноль…..

  6. прогнал через консоль с нулевой номенклатурой тоже самое — так что буду исправлять запрос .


  7. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.724
    Симпатии:
    1.014
    Баллы:
    204

    в запросе соединения есть?

  8. да есть аж 2
    — левое соединение
    -внутреннее соединение


  9. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.724
    Симпатии:
    1.014
    Баллы:
    204

    Конструкции типа ЕСТЬNULL(,) присутствуют?


  10. shurikvz

    Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104

    Запрос покажите.

    И версию платформы полностью скажите.

  11. есть нулов нет !
    8 .1.15.14

    но не уверен что это имеет отношение к решению моего вопроса я думаю о другом :

    там вся проблема возникает если подаешь на вход не заданную номенклатуру у которой везде всё по нулям — подскажите а как отсечь этот случай ?

    добавляется строка она активизируется — сразу идет запуск моего запроса

    допустим если нет значений то пусть не выполняет запрос

    пытался использовать ЭТО не помогло

    Если ТекущиеДанные <> Неопределено или ТекущиеДанные.Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() или ТекущиеДанные.Номенклатура = NULL Тогда
    
    
    

  12. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.724
    Симпатии:
    1.014
    Баллы:
    204

  13. или в самом запросе как можно проверить на входящие «пустые» значения ?

    ВЫБРАТЬ          
    |	ПродажиОбороты.ДокументПродажи.Дата КАК Дата,
    |	ПродажиОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
    |	ПродажиОбороты.Контрагент КАК Контрагент,
    |	ПродажиОбороты.ДокументПродажи КАК ДокументПродажи,
    |	ПродажиОбороты.ДокументПродажи.ТипЦен КАК ТипЦен,
    |	ПродажиОбороты.ХарактеристикаНоменклатуры,
    |	ПродажиОбороты.КоличествоОборот КАК Количество,
    |	ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот,
    |	ПродажиОбороты.СтоимостьБезСкидокОборот КАК СтоимостьБезСкидокОборот,
    |	ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки КАК РучнаяСкидка,
    |	ОтчетОРозничныхПродажах.ПроцентАвтоматическихСкидок КАК АвтоматическаяСкидка,
    |	ОтчетОРозничныхПродажах.УсловиеАвтоматическойСкидки КАК УсловиеАвтоматическойСкидки,
    |	ОтчетОРозничныхПродажах.ЗначениеУсловияАвтоматическойСкидки КАК ЗначениеУсловияАвтоматическойСкидки,
    |	ВЫБОР
    |		КОГДА СУММА(ПродажиОбороты.КоличествоОборот) > 0
    |			ТОГДА СУММА(ПродажиОбороты.СтоимостьОборот) / СУММА(ПродажиОбороты.КоличествоОборот)
    |		ИНАЧЕ 0
    |	КОНЕЦ КАК ЦенаПродажи,
    |	ВЫБОР
    |		КОГДА ПродажиОбороты.СтоимостьОборот <> ПродажиОбороты.СтоимостьБезСкидокОборот
    |			ТОГДА ((ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот) - (ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот)) / ((ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот) / 100)
    |		ИНАЧЕ 0
    |	КОНЕЦ КАК ВычисленныйПроцентРучнойСкидки,
    |	ВложенныйЗапрос.КоличествоДетально КАК КоличествоДетально,
    |	ВложенныйЗапрос.СтоимостьДетально КАК СтоимостьДетально,
    |	ВложенныйЗапрос.СтоимостьБезСкидокДетально КАК СтоимостьБезСкидокДетально,
    |	ВложенныйЗапрос.СтоимостьБезСкидокДетально / ВложенныйЗапрос.КоличествоДетально - ВложенныйЗапрос.СтоимостьДетально / ВложенныйЗапрос.КоличествоДетально КАК СуммаСкидкиДетально,
    |	ВложенныйЗапрос.СтоимостьБезСкидокДетально / ВложенныйЗапрос.КоличествоДетально / 100 КАК ОдинПроцентДетально,
    |	(ВложенныйЗапрос.СтоимостьБезСкидокДетально / ВложенныйЗапрос.КоличествоДетально - ВложенныйЗапрос.СтоимостьДетально / ВложенныйЗапрос.КоличествоДетально)/(ВложенныйЗапрос.СтоимостьБезСкидокДетально / ВложенныйЗапрос.КоличествоДетально / 100) как РучнаяСкидкаДетально,   
    |   ВЫБОР
    |		КОГДА СУММА(ВложенныйЗапрос.КоличествоДетально) > 0
    |			ТОГДА ВложенныйЗапрос.СтоимостьДетально/ВложенныйЗапрос.КоличествоДетально
    |		ИНАЧЕ 0
    |	КОНЕЦ КАК ЦенаПродажиДетально
    |
    |    ИЗ
    |	    РегистрНакопления.Продажи.Обороты(, &ДатаКон, , Номенклатура = &ТекНоменклатура) КАК ПродажиОбороты
    |		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажах
    |		ПО ПродажиОбороты.Номенклатура.Ссылка = ОтчетОРозничныхПродажах.Номенклатура.Ссылка
    |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |			Продажи.Количество КАК КоличествоДетально,
    |			Продажи.Стоимость КАК СтоимостьДетально,
    |			Продажи.СтоимостьБезСкидок КАК СтоимостьБезСкидокДетально,
    |			Продажи.Регистратор КАК РегистраторДетально,
    |			Продажи.Номенклатура.Ссылка КАК НоменклатураСсылка
    |		ИЗ
    |			РегистрНакопления.Продажи КАК Продажи) КАК ВложенныйЗапрос
    |		ПО ПродажиОбороты.ДокументПродажи = ВложенныйЗапрос.РегистраторДетально
    |			И ПродажиОбороты.Номенклатура.Ссылка = ВложенныйЗапрос.НоменклатураСсылка
    |   ГДЕ
    |	ПродажиОбороты.СтоимостьОборот <> ПродажиОбороты.СтоимостьБезСкидокОборот
    |   И ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки > 0
    |	И ОтчетОРозничныхПродажах.ПроцентАвтоматическихСкидок = 0
    |	И ВложенныйЗапрос.СтоимостьДетально <> ВложенныйЗапрос.СтоимостьБезСкидокДетально
    |	И ВложенныйЗапрос.КоличествоДетально < ПродажиОбороты.КоличествоОборот
    |
    |   СГРУППИРОВАТЬ ПО
    |	ПродажиОбороты.ДокументПродажи.Дата,
    |	ПродажиОбороты.ДоговорКонтрагента,
    |	ПродажиОбороты.Контрагент,
    |	ПродажиОбороты.ДокументПродажи,
    |	ПродажиОбороты.ДокументПродажи.ТипЦен,
    |	ПродажиОбороты.ХарактеристикаНоменклатуры,
    |	ПродажиОбороты.КоличествоОборот,
    |	ПродажиОбороты.СтоимостьОборот,
    |	ПродажиОбороты.СтоимостьБезСкидокОборот,
    |	ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки,
    |	ОтчетОРозничныхПродажах.ПроцентАвтоматическихСкидок,
    |	ОтчетОРозничныхПродажах.УсловиеАвтоматическойСкидки,
    |	ОтчетОРозничныхПродажах.ЗначениеУсловияАвтоматическойСкидки,
    |	ВложенныйЗапрос.КоличествоДетально,
    |	ВложенныйЗапрос.СтоимостьДетально,
    |	ВложенныйЗапрос.СтоимостьБезСкидокДетально
    |
    |  ИМЕЮЩИЕ
    |	(ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100) <> ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки И
    |	ПродажиОбороты.СтоимостьБезСкидокОборот - ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100 * 100 / (ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки / 100) / 10 * ПродажиОбороты.КоличествоОборот МЕЖДУ 0 И 0.999 И
    |	(ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100) <> 5 и
    |   (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100) <> 10 и
    |   (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100) <> 15
    |
    |  УПОРЯДОЧИТЬ ПО
    |	Дата УБЫВ
    
    

  14. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.724
    Симпатии:
    1.014
    Баллы:
    204

    и это по вашему «нет деления на 0»? :)

    ЛЮБОЕ ДЕЛЕНИЕ В ЗАПРОСЕ нужно через проверку на 0 делать.

  15. а подскажите примером как это сделать ? я добавлял проверку как в 1м варианте Выбор …не помогло !

    ВЫБОР
    | КОГДА СУММА(ПродажиОбороты.КоличествоОборот) > 0
    | ТОГДА СУММА(ПродажиОбороты.СтоимостьОборот) / СУММА(ПродажиОбороты.КоличествоОборот)
    | ИНАЧЕ 0
    | КОНЕЦ КАК ЦенаПродажи,

    а в имеющие тоже нужно проверку ?

    ВЫБОР
    | КОГДА СУММА(ПродажиОбороты.КоличествоОборот) > 0
    | ТОГДА СУММА(ПродажиОбороты.СтоимостьОборот) / СУММА(ПродажиОбороты.КоличествоОборот)
    | ИНАЧЕ 0
    | КОНЕЦ КАК ЦенаПродажи,

    а в имеющие тоже нужно проверку ?


  16. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.724
    Симпатии:
    1.014
    Баллы:
    204

    ессесина…и в ГДЕ тоже…

  17. я сделал так

    ВЫБРАТЬ          
    ПродажиОбороты.ДокументПродажи.Дата КАК Дата,
    ПродажиОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
    ПродажиОбороты.Контрагент КАК Контрагент,
    ПродажиОбороты.ДокументПродажи КАК ДокументПродажи,
    ПродажиОбороты.ДокументПродажи.ТипЦен КАК ТипЦен,
    ПродажиОбороты.ХарактеристикаНоменклатуры,
    ПродажиОбороты.КоличествоОборот КАК Количество,
    ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот,
    ПродажиОбороты.СтоимостьБезСкидокОборот КАК СтоимостьБезСкидокОборот,
    ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки КАК РучнаяСкидка,
    ОтчетОРозничныхПродажах.ПроцентАвтоматическихСкидок КАК АвтоматическаяСкидка,
    ОтчетОРозничныхПродажах.УсловиеАвтоматическойСкидки КАК УсловиеАвтоматическойСкидки,
    ОтчетОРозничныхПродажах.ЗначениеУсловияАвтоматическойСкидки КАК ЗначениеУсловияАвтоматическойСкидки,
    ВЫБОР
    КОГДА СУММА(ПродажиОбороты.КоличествоОборот) > 0
    ТОГДА СУММА(ПродажиОбороты.СтоимостьОборот) / СУММА(ПродажиОбороты.КоличествоОборот)
    ИНАЧЕ 0
    КОНЕЦ КАК ЦенаПродажи,
    ВЫБОР
    КОГДА ПродажиОбороты.СтоимостьОборот <> ПродажиОбороты.СтоимостьБезСкидокОборот и (ПродажиОбороты.КоличествоОборот) > 0 
    ТОГДА ((ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот) - (ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот)) / ((ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот) / 100)
    ИНАЧЕ 0
    КОНЕЦ КАК ВычисленныйПроцентРучнойСкидки,
    ВложенныйЗапрос.КоличествоДетально КАК КоличествоДетально,
    ВложенныйЗапрос.СтоимостьДетально КАК СтоимостьДетально,
    ВложенныйЗапрос.СтоимостьБезСкидокДетально КАК СтоимостьБезСкидокДетально,
    
    ВЫБОР
    КОГДА (ВложенныйЗапрос.КоличествоДетально) > 0
    ТОГДА ВложенныйЗапрос.СтоимостьБезСкидокДетально / ВложенныйЗапрос.КоличествоДетально - ВложенныйЗапрос.СтоимостьДетально / ВложенныйЗапрос.КоличествоДетально
    ИНАЧЕ 0
    КОНЕЦ КАК СуммаСкидкиДетально,
    
    ВЫБОР
    КОГДА (ВложенныйЗапрос.КоличествоДетально) > 0
    ТОГДА ВложенныйЗапрос.СтоимостьБезСкидокДетально / ВложенныйЗапрос.КоличествоДетально / 100 
    ИНАЧЕ 0
    КОНЕЦ КАК ОдинПроцентДетально,
    
    ВЫБОР
    КОГДА (ВложенныйЗапрос.КоличествоДетально) > 0
    ТОГДА (ВложенныйЗапрос.СтоимостьБезСкидокДетально / ВложенныйЗапрос.КоличествоДетально - ВложенныйЗапрос.СтоимостьДетально / ВложенныйЗапрос.КоличествоДетально)/(ВложенныйЗапрос.СтоимостьБезСкидокДетально / ВложенныйЗапрос.КоличествоДетально / 100) 
    ИНАЧЕ 0
    КОНЕЦ  как РучнаяСкидкаДетально,   
    
    ВЫБОР
    КОГДА СУММА(ВложенныйЗапрос.КоличествоДетально) > 0
    ТОГДА ВложенныйЗапрос.СтоимостьДетально/ВложенныйЗапрос.КоличествоДетально
    ИНАЧЕ 0
    КОНЕЦ КАК ЦенаПродажиДетально
    
    ИЗ
    РегистрНакопления.Продажи.Обороты(, &ДатаКон, , Номенклатура = &ТекНоменклатура) КАК ПродажиОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажах
    ПО ПродажиОбороты.Номенклатура.Ссылка = ОтчетОРозничныхПродажах.Номенклатура.Ссылка
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    Продажи.Количество КАК КоличествоДетально,
    Продажи.Стоимость КАК СтоимостьДетально,
    Продажи.СтоимостьБезСкидок КАК СтоимостьБезСкидокДетально,
    Продажи.Регистратор КАК РегистраторДетально,
    Продажи.Номенклатура.Ссылка КАК НоменклатураСсылка
    ИЗ
    РегистрНакопления.Продажи КАК Продажи) КАК ВложенныйЗапрос
    ПО ПродажиОбороты.ДокументПродажи = ВложенныйЗапрос.РегистраторДетально
    И ПродажиОбороты.Номенклатура.Ссылка = ВложенныйЗапрос.НоменклатураСсылка
    ГДЕ
    ПродажиОбороты.СтоимостьОборот <> ПродажиОбороты.СтоимостьБезСкидокОборот
    И ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки > 0
    И ОтчетОРозничныхПродажах.ПроцентАвтоматическихСкидок = 0
    И ВложенныйЗапрос.СтоимостьДетально <> ВложенныйЗапрос.СтоимостьБезСкидокДетально
    И ВложенныйЗапрос.КоличествоДетально < ПродажиОбороты.КоличествоОборот
    
    СГРУППИРОВАТЬ ПО
    ПродажиОбороты.ДокументПродажи.Дата,
    ПродажиОбороты.ДоговорКонтрагента,
    ПродажиОбороты.Контрагент,
    ПродажиОбороты.ДокументПродажи,
    ПродажиОбороты.ДокументПродажи.ТипЦен,
    ПродажиОбороты.ХарактеристикаНоменклатуры,
    ПродажиОбороты.КоличествоОборот,
    ПродажиОбороты.СтоимостьОборот,
    ПродажиОбороты.СтоимостьБезСкидокОборот,
    ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки,
    ОтчетОРозничныхПродажах.ПроцентАвтоматическихСкидок,
    ОтчетОРозничныхПродажах.УсловиеАвтоматическойСкидки,
    ОтчетОРозничныхПродажах.ЗначениеУсловияАвтоматическойСкидки,
    ВложенныйЗапрос.КоличествоДетально,
    ВложенныйЗапрос.СтоимостьДетально,
    ВложенныйЗапрос.СтоимостьБезСкидокДетально
    
    ИМЕЮЩИЕ
    
    (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100) <> ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки И
    ПродажиОбороты.СтоимостьБезСкидокОборот - ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100 * 100 / (ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки / 100) / 10 * ПродажиОбороты.КоличествоОборот МЕЖДУ 0 И 0.999 И
    (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100) <> 5 и
    (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100) <> 10 и
    (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100) <> 15
    
    УПОРЯДОЧИТЬ ПО
    Дата УБЫВ
    
    
    
    
    

    Всё равно ошибка деления на 0 когда номенклатура не задана

    Подскажите а как мне наложить условие на имеющие ?


  18. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.724
    Симпатии:
    1.014
    Баллы:
    204

    ИМЕЮЩИЕ
    Выбор когда  ПродажиОбороты.КоличествоОборот <> 0 И ПродажиОбороты.СтоимостьБезСкидокОборот <> 0 Тогда
    (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100) 
    Иначе 0
    КОнец
    <> ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки
    
    
    

    как-то так…остальные — по подобию…

  19. :angry: вот этот вариант заработал — СПАСИБО за ответы !

    ВЫБРАТЬ          
    ПродажиОбороты.ДокументПродажи.Дата КАК Дата,
    ПродажиОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
    ПродажиОбороты.Контрагент КАК Контрагент,
    ПродажиОбороты.ДокументПродажи КАК ДокументПродажи,
    ПродажиОбороты.ДокументПродажи.ТипЦен КАК ТипЦен,
    ПродажиОбороты.ХарактеристикаНоменклатуры,
    ПродажиОбороты.КоличествоОборот КАК Количество,
    ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот,
    ПродажиОбороты.СтоимостьБезСкидокОборот КАК СтоимостьБезСкидокОборот,
    ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки КАК РучнаяСкидка,
    ОтчетОРозничныхПродажах.ПроцентАвтоматическихСкидок КАК АвтоматическаяСкидка,
    ОтчетОРозничныхПродажах.УсловиеАвтоматическойСкидки КАК УсловиеАвтоматическойСкидки,
    ОтчетОРозничныхПродажах.ЗначениеУсловияАвтоматическойСкидки КАК ЗначениеУсловияАвтоматическойСкидки,
    ВЫБОР
    КОГДА СУММА(ПродажиОбороты.КоличествоОборот) > 0
    ТОГДА СУММА(ПродажиОбороты.СтоимостьОборот) / СУММА(ПродажиОбороты.КоличествоОборот)
    ИНАЧЕ 0
    КОНЕЦ КАК ЦенаПродажи,
    ВЫБОР
    КОГДА ПродажиОбороты.СтоимостьОборот <> ПродажиОбороты.СтоимостьБезСкидокОборот и (ПродажиОбороты.КоличествоОборот) > 0 
    ТОГДА ((ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот) - (ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот)) / ((ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот) / 100)
    ИНАЧЕ 0
    КОНЕЦ КАК ВычисленныйПроцентРучнойСкидки,
    ВложенныйЗапрос.КоличествоДетально КАК КоличествоДетально,
    ВложенныйЗапрос.СтоимостьДетально КАК СтоимостьДетально,
    ВложенныйЗапрос.СтоимостьБезСкидокДетально КАК СтоимостьБезСкидокДетально,
    
    ВЫБОР
    КОГДА (ВложенныйЗапрос.КоличествоДетально) > 0
    ТОГДА ВложенныйЗапрос.СтоимостьБезСкидокДетально / ВложенныйЗапрос.КоличествоДетально - ВложенныйЗапрос.СтоимостьДетально / ВложенныйЗапрос.КоличествоДетально
    ИНАЧЕ 0
    КОНЕЦ КАК СуммаСкидкиДетально,
    
    ВЫБОР
    КОГДА (ВложенныйЗапрос.КоличествоДетально) > 0
    ТОГДА ВложенныйЗапрос.СтоимостьБезСкидокДетально / ВложенныйЗапрос.КоличествоДетально / 100 
    ИНАЧЕ 0
    КОНЕЦ КАК ОдинПроцентДетально,
    
    ВЫБОР
    КОГДА (ВложенныйЗапрос.КоличествоДетально) > 0
    ТОГДА (ВложенныйЗапрос.СтоимостьБезСкидокДетально / ВложенныйЗапрос.КоличествоДетально - ВложенныйЗапрос.СтоимостьДетально / ВложенныйЗапрос.КоличествоДетально)/(ВложенныйЗапрос.СтоимостьБезСкидокДетально / ВложенныйЗапрос.КоличествоДетально / 100) 
    ИНАЧЕ 0
    КОНЕЦ  как РучнаяСкидкаДетально,   
    
    ВЫБОР
    КОГДА СУММА(ВложенныйЗапрос.КоличествоДетально) > 0
    ТОГДА ВложенныйЗапрос.СтоимостьДетально/ВложенныйЗапрос.КоличествоДетально
    ИНАЧЕ 0
    КОНЕЦ КАК ЦенаПродажиДетально
    
    ИЗ
    РегистрНакопления.Продажи.Обороты(, &ДатаКон, , Номенклатура = &ТекНоменклатура) КАК ПродажиОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажах
    ПО ПродажиОбороты.Номенклатура.Ссылка = ОтчетОРозничныхПродажах.Номенклатура.Ссылка
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    Продажи.Количество КАК КоличествоДетально,
    Продажи.Стоимость КАК СтоимостьДетально,
    Продажи.СтоимостьБезСкидок КАК СтоимостьБезСкидокДетально,
    Продажи.Регистратор КАК РегистраторДетально,
    Продажи.Номенклатура.Ссылка КАК НоменклатураСсылка
    ИЗ
    РегистрНакопления.Продажи КАК Продажи) КАК ВложенныйЗапрос
    ПО ПродажиОбороты.ДокументПродажи = ВложенныйЗапрос.РегистраторДетально
    И ПродажиОбороты.Номенклатура.Ссылка = ВложенныйЗапрос.НоменклатураСсылка
    ГДЕ
    ПродажиОбороты.СтоимостьОборот <> ПродажиОбороты.СтоимостьБезСкидокОборот
    И ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки > 0
    И ОтчетОРозничныхПродажах.ПроцентАвтоматическихСкидок = 0
    И ВложенныйЗапрос.СтоимостьДетально <> ВложенныйЗапрос.СтоимостьБезСкидокДетально
    И ВложенныйЗапрос.КоличествоДетально < ПродажиОбороты.КоличествоОборот
    
    СГРУППИРОВАТЬ ПО
    ПродажиОбороты.ДокументПродажи.Дата,
    ПродажиОбороты.ДоговорКонтрагента,
    ПродажиОбороты.Контрагент,
    ПродажиОбороты.ДокументПродажи,
    ПродажиОбороты.ДокументПродажи.ТипЦен,
    ПродажиОбороты.ХарактеристикаНоменклатуры,
    ПродажиОбороты.КоличествоОборот,
    ПродажиОбороты.СтоимостьОборот,
    ПродажиОбороты.СтоимостьБезСкидокОборот,
    ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки,
    ОтчетОРозничныхПродажах.ПроцентАвтоматическихСкидок,
    ОтчетОРозничныхПродажах.УсловиеАвтоматическойСкидки,
    ОтчетОРозничныхПродажах.ЗначениеУсловияАвтоматическойСкидки,
    ВложенныйЗапрос.КоличествоДетально,
    ВложенныйЗапрос.СтоимостьДетально,
    ВложенныйЗапрос.СтоимостьБезСкидокДетально
    
    ИМЕЮЩИЕ
    
    Выбор когда  ПродажиОбороты.КоличествоОборот <> 0 И ПродажиОбороты.СтоимостьБезСкидокОборот <> 0 Тогда
    (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100) 
    Иначе 0
    КОнец
    <> ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки И
    
    Выбор когда  ПродажиОбороты.КоличествоОборот <> 0 И ПродажиОбороты.СтоимостьБезСкидокОборот <> 0 Тогда
    ПродажиОбороты.СтоимостьБезСкидокОборот - ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100 * 100 / (ОтчетОРозничныхПродажах.ПроцентСкидкиНаценки / 100) / 10 * ПродажиОбороты.КоличествоОборот 
    Иначе 0
    КОнец
    МЕЖДУ 0 И 0.999 И
    
    Выбор когда  ПродажиОбороты.КоличествоОборот <> 0 И ПродажиОбороты.СтоимостьБезСкидокОборот <> 0 Тогда
    (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100) 
    Иначе 0
    КОнец
    <> 5 И
    
    Выбор когда  ПродажиОбороты.КоличествоОборот <> 0 И ПродажиОбороты.СтоимостьБезСкидокОборот <> 0 Тогда
    (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100) 
    Иначе 0
    КОнец
    <> 10 И
    
    Выбор когда  ПродажиОбороты.КоличествоОборот <> 0 И ПродажиОбороты.СтоимостьБезСкидокОборот <> 0 Тогда
    (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот - ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) / (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот / 100)
    Иначе 0
    КОнец
    <> 15 
    
    УПОРЯДОЧИТЬ ПО
    Дата УБЫВ
    
    
    
    
    
    
    
Страница 1 из 2


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Возможно, вам также будет интересно:

  • Ошибка выполнения обработчика поле объекта не обнаружено товары
  • Ошибка выполнения vbs скрипта 800a004c
  • Ошибка выполнения javascript в браузере
  • Ошибка выполнения запроса неоднозначное поле
  • Ошибка выполнения обработчика неверный первый параметр ссылка в функции

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии