Переполнение поля: Ошибка SQL

1. CaSH_2004 372 02.09.15 16:27 Сейчас в теме
В ходе работы с числами в запросе получил следующую ошибку:
Переполнение поля: Ошибка SQL

Поискал в интернете и ничего путного кроме "изучайте" запрос или данные которые он использует не нашел.
а ИС нашел уже что-то вроде решения Самоучитель языка запросов 1С., но причину никто не указал (или плохо искал).
Ковыряясь в запросе нашел причину причем очень простую: все дело в функции ВЫРАЗИТЬ ххх КАК ЧИСЛО(5, 2), так вот если ххх будет больше 5 разрядов то мы и получим данную ошибку что логично, нельзя же 100 000 выразить как 99 999. А вот с числами после запятой все просто - они просто округляются сколько бы их там не было.
wokituk; Климов; jan-pechka; nemec; Sintson; yulia_na89; BehV; potoks; ivan_vostok@mail.ru; delsoft; VooDOOPRo; doom2good; shevelyov; Koviryalko; user745651; +15 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. ivan_vostok@mail.ru 19.09.19 10:05 Сейчас в теме
(1) 1С:Предприятие 8.3 (8.3.12.1616) - ошибка осталась. Спасибо за описание решения!
2. Profilo 18.05.16 19:09 Сейчас в теме
скоро ответим
VVladislav; Nsk-Metro; +2 Ответить
3. Rishat7 2 14.06.16 21:19 Сейчас в теме
обещанного 3 года ждут?
4. Roman100 28.02.17 00:44 Сейчас в теме
5. user745651 04.09.17 16:20 Сейчас в теме
Была такая же ошибка.
Данное решение помогло. спасибо)
VVladislav; +1 Ответить
6. shevelyov 87 24.10.17 10:33 Сейчас в теме
Спасибо, здорово съэкономили время.
7. VVladislav 27.11.17 17:24 Сейчас в теме
Видимо, надо еще подождать. проблему почти решили.
8. user791727 13.09.18 18:08 Сейчас в теме
9. VooDOOPRo 22.03.19 14:52 Сейчас в теме
Релиз 8.3.10.2561 - ошибка имеет место быть. Решение помогло.
11. CepeLLlka 58 01.12.19 12:37 Сейчас в теме
Чёт ссылка на решение больше не работает.. а у меня такая же проблема с ВЫРАЗИТЬ()
12. user1414586 27.05.20 12:55 Сейчас в теме
В 1с "З/п и кадры государственного учреждения", версия 8, у одного сотрудника в трудовой деятельности вылазит Ошибка SQL: переполнение поля.
Подскажите, пожалуйста, что делать? Как теперь с его стажем быть?
13. vstgen 20 06.11.20 13:40 Сейчас в теме
я открыл регистр сведений "Стажи" и посмотрел что по проблемному сотруднику там записано, оказалось что там "Дата отсчета" указана 01.12.1013 - исправил на реальную дату - ошибка исчезла
1Cynep4eJIoBek; Sintson; +2 Ответить
14. BehV 14 09.11.21 13:17 Сейчас в теме
2021 год, прилетела ошибочка, спасибо за ВЫРАЗИТЬ().
15. nemec 18 01.09.22 01:22 Сейчас в теме
Ошибка может иногда возникать в типовых в запросах, где идут вагоны ВЫРАЗИТЬ(ВЫРАЗИТЬ(ВЫРАЗИТЬ и присутствуют операции деления например. В таком случае в результате действия ВЫРАЗИТЬ может вылететь ноль в знаменатель, но вместо ошибки деления на ноль в этой ситуации получается вот это вот всё и непонятно с какого перепугу
16. ishelper 01.09.22 02:15 Сейчас в теме
(15)
может вылететь ноль в знаменатель
...что чисто математически даст в качестве результата бесконечность - то есть, овердофига, ни в какое поле не влезет.
вместо ошибки деления на ноль в этой ситуации получается вот это вот всё и непонятно с какого перепугу
Думаю, что это как раз понятно: текст запроса на языке 1С транслируется платформой в запрос на языке СУБД и передается ей для выполнения. Поэтому ошибка возникает на уровне СУБД, а не 1С, о чем система честно докладывает пользователю.
17. nemec 18 05.09.22 00:34 Сейчас в теме
(16) По факту всё правильно, но по смыслу издевательство - придти к мысли что там проблемы с делением на ноль можно было бы сразу же, будь там адекватное описание ошибки - "Ув.пользователь, ошибка SQL при запросе, что может быть следствием того-то и того-то". Согласитесь, это несколько меняет скорость понимания проблемы, нежели разбор типового запроса среди десятков ВЫРАЗИТЬ и попытка понять в каком из них что-то не так?
18. nemec 18 05.09.22 01:46 Сейчас в теме
(16) Приведу вариант решения проблемы в данном случае, если кто-то столкнется с подобным:

	Попытка
		
		Выборка = Запрос.Выполнить().Выбрать();
		
	Исключение
		
		Запрос.Текст = СтрЗаменить(Запрос.Текст,
		"ТОГДА ВЫРАЗИТЬ(ЕСТЬNULL(УпаковкиНоменклатуры.Числитель,1) / ЕСТЬNULL(УпаковкиНоменклатуры.Знаменатель,1) КАК Число(15,7))",
		"ТОГДА (ЕСТЬNULL(УпаковкиНоменклатуры.Числитель,1) / ЕСТЬNULL(УпаковкиНоменклатуры.Знаменатель,1))");
		
		Выборка = Запрос.Выполнить().Выбрать();
	
	КонецПопытки;

Показать


В данном случае при ошибке, удалив ВЫРАЗИТЬ в этом месте из запроса, получаем отсутствие деления на ноль и при этом корректный результат
19. jan-pechka 409 03.12.22 13:36 Сейчас в теме
Сняла Выразить в Запросе, увидела результат расчета себестоимости, по которому выпадала подобная ошибка, а там 999999999999999,999 - бесконечность!)))...
20. wokituk 17 21.08.23 11:24 Сейчас в теме
Ошибка возникает, когда под Выразить(....) получается большое число, у которого при указанном преобразовании обрезаются старшие разряды целой части
Так
 будет такая ошибка в таком запросе
	Запрос.Текст="ВЫБРАТЬ
	             |	ВЫРАЗИТЬ(12345678901234567890.0000001 КАК ЧИСЛО(23, 10)) КАК А";

и в
 таком
	Запрос.Текст="ВЫБРАТЬ
	             |	ВЫРАЗИТЬ(890 КАК ЧИСЛО(2)) КАК А";

Т.е. в последнем запросе из 890 получится 90 - 1с понимает, что это жутко не правильно и уходит в ступор
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот