- Главная
- /
- Статьи
- /
- Программирование на 1С:Предприятие
- /
- Ошибка SQL: переполнение поля
Переполнение поля — это превышение размерности типа в SQL.
Пример причины такой ошибки может быть следующим:
Функция ВЫРАЗИТЬ ххх КАК ЧИСЛО(5, 2) может вызывать такую ошибку, если ххх будет больше 5 разрядов то выводится данная ошибка, нельзя же 100 000 выразить как 99 999. А вот с числами после запятой все просто — они просто округляются сколько бы их там не было.
Возврат к списку
15 — 17.01.14 — 15:45
ВЫБРАТЬ
ТаблицаАналитики.Подразделение,
ТаблицаАналитики.ПодразделениеОрганизации,
ТаблицаАналитики.Затрата,
ТаблицаАналитики.ХарактеристикаЗатраты,
ТаблицаАналитики.СерияЗатраты,
ТаблицаАналитики.СтатьяЗатрат,
ТаблицаАналитики.НоменклатурнаяГруппа,
ТаблицаАналитики.Заказ КАК Заказ,
ТаблицаАналитики.СчетУчета,
//ДляРеглУчета СУММА(
//ДляРеглУчета ВЫБОР КОГДА ТаблицаАналитики.СчетУчетаНУ <> Неопределено ТОГДА
//ДляРеглУчета УчетЗатрат.СтоимостьНУОстаток
//ДляРеглУчета ИНАЧЕ
//ДляРеглУчета 0
//ДляРеглУчета КОНЕЦ
//ДляРеглУчета ) КАК СтоимостьНУОстаток,
//ДляРеглУчета СУММА(
//ДляРеглУчета ВЫБОР КОГДА ТаблицаАналитики.СчетУчетаНУ <> Неопределено ТОГДА
//ДляРеглУчета УчетЗатрат.КоличествоНУОстаток
//ДляРеглУчета ИНАЧЕ
//ДляРеглУчета 0
//ДляРеглУчета КОНЕЦ
//ДляРеглУчета ) КАК КоличествоНУОстаток,
СУММА(УчетЗатрат.СтоимостьОстаток) КАК СтоимостьОстаток,
СУММА(УчетЗатрат.КоличествоОстаток) КАК КоличествоОстаток
ПОМЕСТИТЬ ТаблицаСтоимостиЗатрат
ИЗ
РегистрНакопления.УчетЗатрат.Остатки(&КонДата,
(
АналитикаВидаУчета,
АналитикаУчетаЗатрат,
АналитикаРаспределенияЗатрат,
АналитикаУчетаПартий
) В (
ВЫБРАТЬ
АналитикаВидаУчета,
//ДляРеглУчета АналитикаВидаУчетаРегл,
АналитикаУчетаЗатрат,
АналитикаРаспределенияЗатрат,
АналитикаУчетаПартий
ИЗ
ТаблицаАналитики
)
) КАК УчетЗатрат
ЛЕВОЕ СОЕДИНЕНИЕ
ТаблицаАналитики КАК ТаблицаАналитики
ПО
УчетЗатрат.АналитикаВидаУчета = ТаблицаАналитики.АналитикаВидаУчета
//ДляРеглУчета УчетЗатрат.АналитикаВидаУчета = ТаблицаАналитики.АналитикаВидаУчетаРегл
И УчетЗатрат.АналитикаУчетаЗатрат = ТаблицаАналитики.АналитикаУчетаЗатрат
И УчетЗатрат.АналитикаРаспределенияЗатрат = ТаблицаАналитики.АналитикаРаспределенияЗатрат
И УчетЗатрат.АналитикаУчетаПартий = ТаблицаАналитики.АналитикаУчетаПартий
СГРУППИРОВАТЬ ПО
ТаблицаАналитики.Подразделение,
ТаблицаАналитики.ПодразделениеОрганизации,
ТаблицаАналитики.Затрата,
ТаблицаАналитики.ХарактеристикаЗатраты,
ТаблицаАналитики.СерияЗатраты,
ТаблицаАналитики.СтатьяЗатрат,
ТаблицаАналитики.НоменклатурнаяГруппа,
ТаблицаАналитики.Заказ,
ТаблицаАналитики.СчетУчета
;
////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТаблицаАналитики.Подразделение,
ТаблицаАналитики.ПодразделениеОрганизации,
ТаблицаАналитики.Затрата,
ТаблицаАналитики.ХарактеристикаЗатраты,
ТаблицаАналитики.СерияЗатраты,
ТаблицаАналитики.СтатьяЗатрат,
ТаблицаАналитики.НоменклатурнаяГруппа,
ТаблицаАналитики.Заказ КАК ЗаказРегл,
ТаблицаАналитики.СчетУчета,
СУММА(
ВЫБОР КОГДА ТаблицаАналитики.СчетУчетаНУ <> Неопределено ТОГДА
УчетЗатрат.СтоимостьНУОстаток
ИНАЧЕ
0
КОНЕЦ
) КАК СтоимостьНУОстаток,
СУММА(
ВЫБОР КОГДА ТаблицаАналитики.СчетУчетаНУ <> Неопределено ТОГДА
УчетЗатрат.КоличествоНУОстаток
ИНАЧЕ
0
КОНЕЦ
) КАК КоличествоНУОстаток,
СУММА(УчетЗатрат.СтоимостьОстаток) КАК СтоимостьОстаток,
СУММА(УчетЗатрат.КоличествоОстаток) КАК КоличествоОстаток
ПОМЕСТИТЬ ТаблицаСтоимостиЗатратРегл
ИЗ
РегистрНакопления.УчетЗатратРегл.Остатки(&КонДата,
(
АналитикаВидаУчета,
АналитикаУчетаЗатрат,
АналитикаРаспределенияЗатрат,
АналитикаУчетаПартий
) В (
ВЫБРАТЬ
//ДляУпрУчета АналитикаВидаУчета,
АналитикаВидаУчетаРегл,
АналитикаУчетаЗатрат,
АналитикаРаспределенияЗатрат,
АналитикаУчетаПартий
ИЗ
ТаблицаАналитики
)
) КАК УчетЗатрат
ЛЕВОЕ СОЕДИНЕНИЕ
ТаблицаАналитики КАК ТаблицаАналитики
ПО
//ДляУпрУчета УчетЗатрат.АналитикаВидаУчета = ТаблицаАналитики.АналитикаВидаУчета
УчетЗатрат.АналитикаВидаУчета = ТаблицаАналитики.АналитикаВидаУчетаРегл
И УчетЗатрат.АналитикаУчетаЗатрат = ТаблицаАналитики.АналитикаУчетаЗатрат
И УчетЗатрат.АналитикаРаспределенияЗатрат = ТаблицаАналитики.АналитикаРаспределенияЗатрат
И УчетЗатрат.АналитикаУчетаПартий = ТаблицаАналитики.АналитикаУчетаПартий
СГРУППИРОВАТЬ ПО
ТаблицаАналитики.Подразделение,
ТаблицаАналитики.ПодразделениеОрганизации,
ТаблицаАналитики.Затрата,
ТаблицаАналитики.ХарактеристикаЗатраты,
ТаблицаАналитики.СерияЗатраты,
ТаблицаАналитики.СтатьяЗатрат,
ТаблицаАналитики.НоменклатурнаяГруппа,
ТаблицаАналитики.Заказ,
ТаблицаАналитики.СчетУчета
;
////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Док.*,
Док.СтатьяЗатрат.ВидЗатрат КАК ВидЗатрат,
Док.СтатьяЗатрат.СтатусМатериальныхЗатрат КАК СтатусМатериальныхЗатрат,
Неопределено КАК СпособРаспределенияЗатрат,
Док.Номенклатура КАК Затрата,
Док.ХарактеристикаНоменклатуры КАК ХарактеристикаЗатраты,
Док.СерияНоменклатуры КАК СерияЗатраты,
ВЫБОР КОГДА Док.КодОперации <> Неопределено ТОГДА
Док.КодОперации
ИНАЧЕ
&ПрямыеЗатраты
КОНЕЦ КАК КодОперации,
ВЫБОР КОГДА Док.Заказ ССЫЛКА Документ.ЗаказПокупателя
И Док.Заказ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЗаказПокупателя.Переработка)
ТОГДА
ЗНАЧЕНИЕ(Перечисление.ВариантыВыпускаПродукции.ПродукцияИзДавальческогоСырья)
ИНАЧЕ
Неопределено
КОНЕЦ КАК ВариантВыпускаПродукции,
&Ссылка КАК ДокументВыпуска,
ВЫБОР КОГДА Док.ТипСтоимости = ЗНАЧЕНИЕ(Перечисление.ВидыНормативнойСтоимостиПроизводства.Фиксированная) ТОГДА
Док.Сумма
КОГДА ТаблицаСтоимостиЗатратУУ.КоличествоОстаток = 0
ИЛИ ТаблицаСтоимостиЗатратУУ.КоличествоОстаток ЕСТЬ NULL ТОГДА
0
ИНАЧЕ
Док.Количество *
ТаблицаСтоимостиЗатратУУ.СтоимостьОстаток /
ТаблицаСтоимостиЗатратУУ.КоличествоОстаток
КОНЕЦ КАК СуммаУУ,
ВЫБОР КОГДА Док.ТипСтоимости = ЗНАЧЕНИЕ(Перечисление.ВидыНормативнойСтоимостиПроизводства.Фиксированная) ТОГДА
Док.СуммаРегл
КОГДА ТаблицаСтоимостиЗатратРегл.КоличествоОстаток = 0
ИЛИ ТаблицаСтоимостиЗатратРегл.КоличествоОстаток ЕСТЬ NULL ТОГДА
0
ИНАЧЕ
Док.Количество *
ТаблицаСтоимостиЗатратРегл.СтоимостьОстаток /
ТаблицаСтоимостиЗатратРегл.КоличествоОстаток
КОНЕЦ КАК СуммаБУ,
ВЫБОР КОГДА Док.ТипСтоимости = ЗНАЧЕНИЕ(Перечисление.ВидыНормативнойСтоимостиПроизводства.Фиксированная) ТОГДА
Док.СуммаНал
КОГДА ТаблицаСтоимостиЗатратРегл.КоличествоНУОстаток = 0
ИЛИ ТаблицаСтоимостиЗатратРегл.КоличествоНУОстаток ЕСТЬ NULL ТОГДА
0
ИНАЧЕ
Док.Количество *
ТаблицаСтоимостиЗатратРегл.СтоимостьНУОстаток /
ТаблицаСтоимостиЗатратРегл.КоличествоНУОстаток
КОНЕЦ КАК СуммаНУ,
//ФиксСтоимость Док.Сумма КАК СуммаУУ,
//ФиксСтоимость Док.СуммаРегл КАК СуммаБУ,
//ФиксСтоимость Док.СуммаНал КАК СуммаНУ,
//ПоНулевойУУ 0 КАК СуммаУУ,
//ПоНулевойБУ 0 КАК СуммаБУ,
//ПоНулевойБУ 0 КАК СуммаНУ,
Док.Количество
ИЗ
ТаблицаДокумента КАК Док
ЛЕВОЕ СОЕДИНЕНИЕ
ТаблицаСтоимостиЗатрат КАК ТаблицаСтоимостиЗатратУУ
ПО
Док.Номенклатура = ТаблицаСтоимостиЗатратУУ.Затрата
И Док.ХарактеристикаНоменклатуры = ТаблицаСтоимостиЗатратУУ.ХарактеристикаЗатраты
И Док.СерияНоменклатуры = ТаблицаСтоимостиЗатратУУ.СерияЗатраты
И Док.СтатьяЗатрат = ТаблицаСтоимостиЗатратУУ.СтатьяЗатрат
И Док.НоменклатурнаяГруппаНЗП = ТаблицаСтоимостиЗатратУУ.НоменклатурнаяГруппа
И Док.ЗаказНЗП = ТаблицаСтоимостиЗатратУУ.Заказ
И Док.ПодразделениеНЗП = ТаблицаСтоимостиЗатратУУ.Подразделение
ЛЕВОЕ СОЕДИНЕНИЕ
ТаблицаСтоимостиЗатратРегл КАК ТаблицаСтоимостиЗатратРегл
ПО
Док.Номенклатура = ТаблицаСтоимостиЗатратРегл.Затрата
И Док.ХарактеристикаНоменклатуры = ТаблицаСтоимостиЗатратРегл.ХарактеристикаЗатраты
И Док.СерияНоменклатуры = ТаблицаСтоимостиЗатратРегл.СерияЗатраты
И Док.СтатьяЗатрат = ТаблицаСтоимостиЗатратРегл.СтатьяЗатрат
И Док.НоменклатурнаяГруппаНЗП = ТаблицаСтоимостиЗатратРегл.НоменклатурнаяГруппа
И Док.ЗаказНЗПРегл = ТаблицаСтоимостиЗатратРегл.ЗаказРегл
И (Док.СчетЗатрат = ТаблицаСтоимостиЗатратРегл.СчетУчета
ИЛИ ТаблицаСтоимостиЗатратРегл.СчетУчета = Неопределено)
И Док.ПодразделениеОрганизацииНЗП = ТаблицаСтоимостиЗатратРегл.ПодразделениеОрганизации
УПОРЯДОЧИТЬ ПО
Док.НомерСтроки
Ошибка выполнения запроса Ошибка при выполнении операции над данными: Ошибка SQL: Переполнение поля
Описание ошибки:
Подобная ошибка возникала при выполнении разработанного отчета.
Найденные решения:
Получались значения в запросе которые выходили за пределы размерности типа. Например, в запросе было ВЫРАЗИТЬ( … , ЧИСЛО(7, 2)). Число полученное или выбранное запросом оказалось больше, поэтому замена на ЧИСЛО (15, 2) исправило ошибку.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
07-05-2014
Журавлев А.С.
(www.azhur-c.ru)
Подскажите, кто встречался с подобной ошибкой! Что она означает? База файловая… УТ 11.0.7.8, доработанная, движок 8.2.15.294. {ОбщийМодуль.рамМодульСервер.Модуль}: Ошибка при вызове метода контекста (Выполнить) Выборка = Запрос.Выполнить.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); по причине: Ошибка выполнения запроса по причине: Ошибка при выполнении операции над данными: Ошибка SQL: Переполнение поля по причине: Ошибка SQL: Переполнение поля
ну может кто нить что нить предположит для поддержания дискуссии? )))
может, действительно переполнилось поле? бывает.
а где то поле и чем отчерпывать идей нету?
числа итоговые большие получаются примерно?
юзай для всех числовых полей Выразить с четким указанием разрядености, да побольше. SQL в план запроса сам вставляет это, но разрядность выбирает сам исходя из своих соображений, возможно из-за этого
а кто ж его знает? запрос то не выполняется. ошибка начала вылетать после исправления соединения с таблицей свободных остатков с внутреннего на левое. до этого все в порядке было
попробуй ибо зло от ЕстьNULL, лни разрядность рушат +
поставил ВЫРАЗИТЬ КАК Число(15,2), не помогло ((( там же в базе если все просуммировать, меньше получится!
на все поля? покаж запрос
ты совесть то имей ЕСТЬNULL(СвободныеОстаткиОстатки.рамКПоступлениюОстаток, 0)* где ты приведение сделал ?
а тут СУММА(…..всё это дело) и выразить на всю её?
ёпрст! туплю, бывает. щазззз…
спасибо, помогло! плюс еще ошибка была, когда было внутреннее соединение, отбор на таблицу остатков работал и на документы. а сделал левое соединение, и поехали всю базу лопатить…
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
0
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец «datetime» привело к переполнению
Подробнее текст такой:
... по причине:
Ошибка компоновки данных
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "ВремяРаботы"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению.
HRESULT=80040E07, HRESULT=80040E07, SQLSrvr: SQLSTATE=01003, state=1, Severity=0, native=8153, line=1
SQLSrvr: SQLSTATE=22007, state=1, Severity=10, native=517, line=1[/pre]В файловой базе это выглядит так:
Ошибка создания набора данных "ВремяРаботы"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Ошибка SQL: Переполнение поля 'DATEDIFF'
по причине:
Ошибка SQL: Переполнение поля 'DATEDIFF'[/pre]После долгих поисков проблемы, опытным путем было выяснено: Ошибка возникает в момент попытки в запросе отнять от даты несколько секунд. Решения два:
1. не использовать в запросе: ДОБАВИТЬКДАТЕ или РАЗНОСТЬДАТ
2. на базе SQL при создании указывать смещение дат 2000