![]() |
![]() |
![]() |
|
Ошибка при закрытии месяца в УНФ. | ☑ | ||
---|---|---|---|---|
0
Zombi
16.06.25
✎
07:51
|
В УНФ при закрытии месяца получили такую ошибку:
Ошибка при выполнении операции над данными: Microsoft OLE DB Driver for SQL Server: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric. HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1 Нашел запрос, на котором валится ошибка. Документ закрытие месяца, процедура РешитьСЛУ(). Просмотрел все таблицы в менеджере таблиц запроса, никаких больших сумм не увидел. Сделал запрос по регистрам запасы, продажи, тоже не увидел больших сумм. В запросе пробовал изменить "КАК ЧИСЛО(23, 10)" на "КАК ЧИСЛО(32, 10)". Не помогло. Что еще можно посмотреть/сделать? |
|||
1
Zombi
16.06.25
✎
07:52
|
Типовой текст запроса из процедуры РешитьСЛУ():
ВЫБРАТЬ РАЗЛИЧНЫЕ ТаблицаВозвратов.Организация КАК Организация, ТаблицаВозвратов.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница, ТаблицаВозвратов.СчетУчета КАК СчетУчета, ТаблицаВозвратов.Номенклатура КАК Номенклатура, ТаблицаВозвратов.Характеристика КАК Характеристика, ТаблицаВозвратов.Партия КАК Партия, ТаблицаВозвратов.ЗаказПокупателя КАК ЗаказПокупателя, ТаблицаВозвратов.ЗаказНаПроизводство КАК ЗаказНаПроизводство, ТаблицаВозвратов.НомерУзла КАК НомерУзла, ТаблицаВозвратов.КоличествоРаспределено КАК Количество, ТаблицаВозвратов.СуммаБезНДСРаспределено КАК СуммаБезНДС, ТаблицаВозвратов.СуммаРаспределено КАК Сумма, ТаблицаВозвратов.ДокументПродажи КАК ДокументПродажи ПОМЕСТИТЬ УчетЗатратВозвраты ИЗ &ТаблицаВозвратов КАК ТаблицаВозвратов ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ УчетЗапасовИЗатрат.Организация КАК Организация, УчетЗапасовИЗатрат.КоррСтруктурнаяЕдиница КАК СтруктурнаяЕдиница, УчетЗапасовИЗатрат.КоррСчетУчета КАК СчетУчета, УчетЗапасовИЗатрат.КоррНоменклатура КАК Номенклатура, УчетЗапасовИЗатрат.КоррХарактеристика КАК Характеристика, УчетЗапасовИЗатрат.КоррПартия КАК Партия, УчетЗапасовИЗатрат.КоррЗаказПокупателя КАК ЗаказПокупателя, УчетЗапасовИЗатрат.КоррЗаказНаПроизводство КАК ЗаказНаПроизводство, УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла, СУММА(ВЫБОР КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) И НЕ УчетЗапасовИЗатрат.Возврат ТОГДА УчетЗапасовИЗатрат.Количество КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И УчетЗапасовИЗатрат.Возврат ТОГДА -УчетЗапасовИЗатрат.Количество ИНАЧЕ 0 КОНЕЦ) КАК Количество, СУММА(ВЫРАЗИТЬ(ВЫБОР КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) И НЕ УчетЗапасовИЗатрат.Возврат ТОГДА УчетЗапасовИЗатрат.СуммаБезНДС КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И УчетЗапасовИЗатрат.Возврат ТОГДА -УчетЗапасовИЗатрат.СуммаБезНДС ИНАЧЕ 0 КОНЕЦ КАК ЧИСЛО(23, 10))) КАК СуммаБезНДС, СУММА(ВЫРАЗИТЬ(ВЫБОР КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) И НЕ УчетЗапасовИЗатрат.Возврат ТОГДА УчетЗапасовИЗатрат.Сумма КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И УчетЗапасовИЗатрат.Возврат ТОГДА -УчетЗапасовИЗатрат.Сумма ИНАЧЕ 0 КОНЕЦ КАК ЧИСЛО(23, 10))) КАК Сумма, СУММА(ВЫРАЗИТЬ(ВЫБОР КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) И НЕ УчетЗапасовИЗатрат.Возврат ТОГДА УчетЗапасовИЗатрат.СуммаИнт КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И УчетЗапасовИЗатрат.Возврат ТОГДА -УчетЗапасовИЗатрат.СуммаИнт ИНАЧЕ 0 КОНЕЦ КАК ЧИСЛО(23, 10))) КАК СуммаИнт, СУММА(ВЫРАЗИТЬ(ВЫБОР КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) И НЕ УчетЗапасовИЗатрат.Возврат ТОГДА УчетЗапасовИЗатрат.СуммаБезНДСИнт КОГДА УчетЗапасовИЗатрат.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) И УчетЗапасовИЗатрат.Возврат ТОГДА -УчетЗапасовИЗатрат.СуммаБезНДСИнт ИНАЧЕ 0 КОНЕЦ КАК ЧИСЛО(23, 10))) КАК СуммаБезНДСИнт ПОМЕСТИТЬ УчетЗатратБезУчетаВозвратов ИЗ РегистрНакопления.Запасы КАК УчетЗапасовИЗатрат ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания ПО (УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор) И УчетЗапасовИЗатрат.Организация = УзлыКорректировкиСтоимостиСписания.Организация И УчетЗапасовИЗатрат.СтруктурнаяЕдиница = УзлыКорректировкиСтоимостиСписания.СтруктурнаяЕдиница И УчетЗапасовИЗатрат.СчетУчета = УзлыКорректировкиСтоимостиСписания.СчетУчета И УчетЗапасовИЗатрат.Номенклатура = УзлыКорректировкиСтоимостиСписания.Номенклатура И УчетЗапасовИЗатрат.Характеристика = УзлыКорректировкиСтоимостиСписания.Характеристика И УчетЗапасовИЗатрат.Партия = УзлыКорректировкиСтоимостиСписания.Партия И УчетЗапасовИЗатрат.ЗаказПокупателя = УзлыКорректировкиСтоимостиСписания.ЗаказПокупателя И УчетЗапасовИЗатрат.ЗаказНаПроизводство = УзлыКорректировкиСтоимостиСписания.ЗаказНаПроизводство ГДЕ УчетЗапасовИЗатрат.Период МЕЖДУ &ДатаНач И &ДатаКон И УчетЗапасовИЗатрат.Организация = &Организация И НЕ УчетЗапасовИЗатрат.ФиксированнаяСтоимость СГРУППИРОВАТЬ ПО УчетЗапасовИЗатрат.Организация, УчетЗапасовИЗатрат.КоррСтруктурнаяЕдиница, УчетЗапасовИЗатрат.КоррСчетУчета, УчетЗапасовИЗатрат.КоррНоменклатура, УчетЗапасовИЗатрат.КоррХарактеристика, УчетЗапасовИЗатрат.КоррПартия, УчетЗапасовИЗатрат.КоррЗаказПокупателя, УчетЗапасовИЗатрат.КоррЗаказНаПроизводство, УзлыКорректировкиСтоимостиСписания.НомерУзла ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ УчетЗатрат.Организация КАК Организация, УчетЗатрат.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница, УчетЗатрат.СчетУчета КАК СчетУчета, УчетЗатрат.Номенклатура КАК Номенклатура, УчетЗатрат.Характеристика КАК Характеристика, УчетЗатрат.Партия КАК Партия, УчетЗатрат.ЗаказПокупателя КАК ЗаказПокупателя, УчетЗатрат.ЗаказНаПроизводство КАК ЗаказНаПроизводство, УчетЗатрат.НомерУзла КАК НомерУзла, СУММА(УчетЗатрат.Количество) КАК Количество, СУММА(УчетЗатрат.СуммаБезНДС) КАК СуммаБезНДС, СУММА(УчетЗатрат.Сумма) КАК Сумма, СУММА(УчетЗатрат.СуммаИнт) КАК СуммаИнт, СУММА(УчетЗатрат.СуммаБезНДСИнт) КАК СуммаБезНДСИнт ПОМЕСТИТЬ УчетЗатрат ИЗ (ВЫБРАТЬ УчетЗатратЗаВычетомВозвратов.Организация КАК Организация, УчетЗатратЗаВычетомВозвратов.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница, УчетЗатратЗаВычетомВозвратов.СчетУчета КАК СчетУчета, УчетЗатратЗаВычетомВозвратов.Номенклатура КАК Номенклатура, УчетЗатратЗаВычетомВозвратов.Характеристика КАК Характеристика, УчетЗатратЗаВычетомВозвратов.Партия КАК Партия, УчетЗатратЗаВычетомВозвратов.ЗаказПокупателя КАК ЗаказПокупателя, УчетЗатратЗаВычетомВозвратов.ЗаказНаПроизводство КАК ЗаказНаПроизводство, УчетЗатратЗаВычетомВозвратов.НомерУзла КАК НомерУзла, УчетЗатратЗаВычетомВозвратов.Количество КАК Количество, УчетЗатратЗаВычетомВозвратов.СуммаБезНДС КАК СуммаБезНДС, УчетЗатратЗаВычетомВозвратов.Сумма КАК Сумма, УчетЗатратЗаВычетомВозвратов.СуммаИнт КАК СуммаИнт, УчетЗатратЗаВычетомВозвратов.СуммаБезНДСИнт КАК СуммаБезНДСИнт ИЗ УчетЗатратБезУчетаВозвратов КАК УчетЗатратЗаВычетомВозвратов ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ УчетЗатратВозвраты.Организация, УчетЗатратВозвраты.СтруктурнаяЕдиница, УчетЗатратВозвраты.СчетУчета, УчетЗатратВозвраты.Номенклатура, УчетЗатратВозвраты.Характеристика, УчетЗатратВозвраты.Партия, УчетЗатратВозвраты.ЗаказПокупателя, УчетЗатратВозвраты.ЗаказНаПроизводство, УчетЗатратВозвраты.НомерУзла, УчетЗатратВозвраты.Количество, УчетЗатратВозвраты.СуммаБезНДС, УчетЗатратВозвраты.Сумма, 0, 0 ИЗ УчетЗатратВозвраты КАК УчетЗатратВозвраты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ УчетЗатратВозвраты.Организация, НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(ПланСчетов.Управленческий.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ПартииНоменклатуры.ПустаяСсылка), ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка), ЗНАЧЕНИЕ(Документ.ЗаказНаПроизводство.ПустаяСсылка), УчетЗатратВозвраты.НомерУзла, -УчетЗатратВозвраты.Количество, -УчетЗатратВозвраты.СуммаБезНДС, -УчетЗатратВозвраты.Сумма, 0, 0 ИЗ УчетЗатратВозвраты КАК УчетЗатратВозвраты) КАК УчетЗатрат СГРУППИРОВАТЬ ПО УчетЗатрат.Организация, УчетЗатрат.СтруктурнаяЕдиница, УчетЗатрат.СчетУчета, УчетЗатрат.Номенклатура, УчетЗатрат.Характеристика, УчетЗатрат.Партия, УчетЗатрат.ЗаказПокупателя, УчетЗатрат.ЗаказНаПроизводство, УчетЗатрат.НомерУзла ИНДЕКСИРОВАТЬ ПО Организация, СтруктурнаяЕдиница, СчетУчета, Номенклатура, Характеристика, Партия, ЗаказПокупателя, ЗаказНаПроизводство, НомерУзла |
|||
2
Zombi
16.06.25
✎
07:57
|
Пользователи сказали экспериментировали и создавали какой то документ с девятками в поле "Сумма", но потом удалили его. Ну и я тоже не вижу ни документа такого, ни движений в регистрах. ТИИ делал, не помогло.
|
|||
3
Гена
гуру
16.06.25
✎
08:34
|
Забавно... как что не так - сразу ТиИ )))
УНФ отличается от других конфигураций тем, что в закрытии месяца для расчёта себестоимости в запросах используется переменная СуммаКвадратовОтклонений Можете проверить глобальным поиском. Что это означает? Это означает, что на входе в средние квадраты обязаны быть только положительные величины. Иначе результат будет в геометрической прогрессии расходиться вместо схождения, например при отрицательных остатках в каком-нибудь используемом РН. По арифметике. Раскачается +/- до бесконечности. Но так как в кибернетике отсутствует бесконечность, то на каком-то этапе для какого-то физического сектора на диске выйдет: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric Вывод: Ищите отрицательные остатки, запросом гляньте что там с минусом и исправьте проблему. |
|||
4
maxab72
16.06.25
✎
08:49
|
Не, СуммаКвадратовОтклонений во-первых равна ((ТаблицаРешений.Сумма) - (УзлыКорректировкиСтоимостиСписания.Сумма + ВременнаятаблицаРешений.Сумма)) * ((ТаблицаРешений.Сумма) - (УзлыКорректировкиСтоимостиСписания.Сумма + ВременнаятаблицаРешений.Сумма)), то есть это реально квадрат, а он может быть отрицательным, если только в расчете мы получим комплексные числа. Во-вторых, СуммаКвадратовОтклонений напрямую с регистрами остатков не связана. Надо искать в другом месте.
|
|||
5
Гена
гуру
16.06.25
✎
08:53
|
(4) Спорим на штуку рублей?
Кто разобьёт? ) |
|||
6
Zombi
16.06.25
✎
09:06
|
Отрицательного количества в остатках регистра запасы нет. Есть небольшие минусы по сумме у некоторых позиций. Не из за этого же.
|
|||
7
Гена
гуру
16.06.25
✎
09:11
|
(6) Легко же проверить: уберите принудительно минусы на начало месяца и перепроведите Закрытие.
|
|||
8
maxab72
16.06.25
✎
09:15
|
(5) здесь скорее другое. В запросе значения преобразуют в формат 23.10 (к дробной части стандартного формата 15.2 накинули 8 знаков для точности, а так как в регистре УзлыКорректировкиСтоимостиСписания реквизиты с суммами имеют тип 23.10 (фактически 22.10 + знак)). и их соединяют с некоей расчетной таблицей, ТаблицаВозвратов, где результат может быть задан как 23.10 (неотрицательное). То при использовании при заполнении ТаблицаВозвратов в какой либо строке числа с полностью заполненным реквизитом мы и получим переполнение.
То есть надо копать заполнение временной таблицы ТаблицаВозвратов. |
|||
9
Zombi
16.06.25
✎
09:28
|
(7) Убрал все минусы. Проблема осталась
|
|||
10
maxab72
16.06.25
✎
09:31
|
(9) посмотри в отладчике таблицуВозвратов, какие там значения, нет ли чего больше положенного.
|
|||
11
Zombi
16.06.25
✎
09:35
|
(10) Вроде ничего подозрительного:
|
|||
12
Гена
гуру
16.06.25
✎
09:43
|
(9) Не верю:
Ошибка при закрытии месяца (УНФ) |
|||
13
Zombi
16.06.25
✎
09:54
|
Ну в регистре запасы и затраты сейчас нет вообще отрицательных значений по количеству или сумме:
|
|||
14
Kongo2019
17.06.25
✎
08:44
|
Ну так чем дело закончилось нашел? Очень интересно же.
|
|||
15
Гипервизор
17.06.25
✎
08:50
|
(14) Ну всё ясно же по скрину в (13). Надо Windows активировать. )
|
|||
16
Zombi
17.06.25
✎
10:07
|
(14) Ищу когда время есть. У меня в этой конторе не так много часов по договору и другие задачи есть.
|
|||
17
Zombi
17.06.25
✎
12:32
|
Повозился сегодня с сабжем нашел что на 4 итерации одна из 4 тысяч строк в ВТ "ТаблицаРешений" разрастается до большой суммы. Связывазывается эта таблица с РС "УзлыКорректировкиСтоимостиСписания". Запросом в этом регистре что то поймать не получилось, записи в нем существуют в момент расчета себестоимости. Нашел процедуру, где формируются записи этого РС и по номеру узла из виртуальной таблицы нашел, по какой номенклатуре и характеристике раздувается сумма. Открыл по ним РН "Запасы" и увидел такую картину: была отгрузка, потом возврат от клиента и возврат поставщику. Если отменить проведение последней расходной накладной(которая возврат поставщику), месяц закрывается, ошибок нет. Если снова провести этот документ, закрытие месяца опять выдает ошибку (0). Скрин РН "Запасы":
|
|||
18
Kuzmich123
17.06.25
✎
12:44
|
Прям тоже слежу за темой и переживаю )))
(17) Попробуй создать вручную полностью аналогичный возврат поставщику. |
|||
19
Zombi
17.06.25
✎
13:10
|
(18) Создал. Такая же ошибка.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |