Имя: Пароль:
1C
1С v8
Ошибка при закрытии месяца (УНФ)
0 bestuzhev
 
16.05.23
17:47
При закрытии месяца вылетает следующая ошибка:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ЗакрытиеМесяца.МодульОбъекта(1523)}: Ошибка при вызове метода контекста (ВыполнитьПакет)
по причине:

по причине:
Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
22003: ERROR:  numeric field overflow
DETAIL:  A field with precision 23, scale 10 must round to an absolute value less than 10^13.

Гугл не помог. Смотрел отладкой, запрос выполняется несколько раз в цикле, и на одной из итераций валится с ошибкой.
Может кто сталкивался или какой совет умный даст.
1 Волшебник
 
16.05.23
17:49
Покажите запрос
2 bestuzhev
 
16.05.23
18:07
(1)
    // Следующая итерация расчета.
        Запрос.Текст =
        "ВЫБРАТЬ
        |    УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла,
        |    Сумма(ВЫРАЗИТЬ(ВЫБОР
        |            КОГДА УзлыКорректировкиСтоимостиСписания.Количество <> 0
        |                ТОГДА ВЫРАЗИТЬ(ТаблицаРешений.СуммаБезНДС КАК ЧИСЛО(23, 10)) * ВЫБОР
        |                        КОГДА УчетЗатрат.Количество = 0
        |                            ТОГДА ВЫРАЗИТЬ(УчетЗатрат.СуммаБезНДС КАК ЧИСЛО(23, 10))
        |                        ИНАЧЕ ВЫРАЗИТЬ(УчетЗатрат.Количество КАК ЧИСЛО(23, 10))
        |                    КОНЕЦ / ВЫРАЗИТЬ(УзлыКорректировкиСтоимостиСписания.Количество КАК ЧИСЛО(23, 10))
        |            ИНАЧЕ 0
        |        КОНЕЦ КАК ЧИСЛО(23, 10))) КАК СуммаБезНДС,
        |    СУММА(ВЫРАЗИТЬ(ВЫБОР
        |                КОГДА УзлыКорректировкиСтоимостиСписания.Количество <> 0
        |                    ТОГДА ВЫРАЗИТЬ(ТаблицаРешений.Сумма КАК ЧИСЛО(23, 10)) * ВЫБОР
        |                            КОГДА УчетЗатрат.Количество = 0
        |                                ТОГДА ВЫРАЗИТЬ(УчетЗатрат.Сумма КАК ЧИСЛО(23, 10))
        |                            ИНАЧЕ ВЫРАЗИТЬ(УчетЗатрат.Количество КАК ЧИСЛО(23, 10))
        |                        КОНЕЦ / ВЫРАЗИТЬ(УзлыКорректировкиСтоимостиСписания.Количество КАК ЧИСЛО(23, 10))
        |                ИНАЧЕ 0
        |            КОНЕЦ КАК ЧИСЛО(23, 10))) КАК Сумма
        |ПОМЕСТИТЬ ВременнаяТаблицаРешений
        |ИЗ
        |    РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
        |        ЛЕВОЕ СОЕДИНЕНИЕ УчетЗатрат КАК УчетЗатрат
        |            ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРешений КАК ТаблицаРешений
        |            ПО УчетЗатрат.НомерУзла = ТаблицаРешений.НомерУзла
        |        ПО УзлыКорректировкиСтоимостиСписания.Организация = УчетЗатрат.Организация
        |            И УзлыКорректировкиСтоимостиСписания.СтруктурнаяЕдиница = УчетЗатрат.СтруктурнаяЕдиница
        |            И УзлыКорректировкиСтоимостиСписания.СчетУчета = УчетЗатрат.СчетУчета
        |            И УзлыКорректировкиСтоимостиСписания.Номенклатура = УчетЗатрат.Номенклатура
        |            И УзлыКорректировкиСтоимостиСписания.Характеристика = УчетЗатрат.Характеристика
        |            И УзлыКорректировкиСтоимостиСписания.Партия = УчетЗатрат.Партия
        |            И УзлыКорректировкиСтоимостиСписания.ЗаказПокупателя = УчетЗатрат.ЗаказПокупателя
        |            И УзлыКорректировкиСтоимостиСписания.ЗаказНаПроизводство = УчетЗатрат.ЗаказНаПроизводство
        |ГДЕ
        |    УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор
        |
        |СГРУППИРОВАТЬ ПО
        |    УзлыКорректировкиСтоимостиСписания.НомерУзла
        |
        |ИНДЕКСИРОВАТЬ ПО
        |    НомерУзла
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    СУММА((ЕСТЬNULL(ТаблицаРешений.СуммаБезНДС, 0) - (УзлыКорректировкиСтоимостиСписания.СуммаБезНДС + ЕСТЬNULL(ВременнаяТаблицаРешений.СуммаБезНДС, 0))) * (ЕСТЬNULL(ТаблицаРешений.СуммаБезНДС, 0) - (УзлыКорректировкиСтоимостиСписания.СуммаБезНДС + ЕСТЬNULL(ВременнаяТаблицаРешений.СуммаБезНДС, 0)))) КАК СуммаБезНДСКвадратовОтклонений,
        |    СУММА((ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0))) * (ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0)))) КАК СуммаКвадратовОтклонений
        |ИЗ
        |    РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
        |        ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаРешений КАК ВременнаяТаблицаРешений
        |        ПО (ВременнаяТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла)
        |        ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРешений КАК ТаблицаРешений
        |        ПО (ТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла)
        |ГДЕ
        |    УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор";
3 Волшебник
 
16.05.23
18:09
(2) У Вас там какое-то деление на ноль и бесконечное число с 23 нулями. Ищите
4 Гена
 
16.05.23
19:01
Может немного увеличить целую часть? Например, ЧИСЛО(25, 10)
5 Гена
 
16.05.23
19:09
А вообще, СуммаКвадратовОтклонений вполне может в геометрической прогрессии расходиться вместо схождения, например при отрицательных остатках в каком-нибудь используемом РН. По арифметике. Раскачается +/- до бесконечности.
6 Гена
 
16.05.23
19:14
Поэтому лучше в этой приблуде суммы квадратов отклонений на всякий случай заложить не просто произведение двух слагаемых, а их модулей.
В 1С есть что-то вроде ABS()?
7 bestuzhev
 
16.05.23
19:49
(5) Да, дело было именно в отрицательных остатках, запросом глянул что там с минусом, исправил проблему и все пошло.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.