В Функция РешитьСЛУ() модуле объекта документа Закрытие Месяца выдает ошибку
после первой же итерации
переменная "текущее отклонение" становится приближенное к этому числу 2324855784,24862123. и с последующей итерацией увеличивается в 2 , а то и в 3 раза.
Ошибка при вызове метода контекста (Записать)
{Обработка.ЗакрытиеМесяца.МодульМенеджера(2202)}: ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
{Обработка.ЗакрытиеМесяца.МодульМенеджера(72)}: ВыполнитьОперациюЗакрытияМесяца(СтруктураПараметров, Операция, ДокументЗакрытияМесяца);
{(1)}:Обработки.ЗакрытиеМесяца.ВыполнитьЗакрытиеМесяца(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5113)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1036)}: ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(1026)}: ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ЗакрытиеМесяца.МодульОбъекта(1301)}: Ошибка при вызове метода контекста (ВыполнитьПакет)
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
по причине:
Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Ошибка SQL: Переполнение поля
по причине:
Ошибка SQL: Переполнение поля
Показатьпосле первой же итерации
ТекущееОтклонение = 1;
ТребуемаяТочность = 0.00001;
КоличествоИтераций = 0;
...
Пока (ТекущееОтклонение > ТребуемаяТочность * ТребуемаяТочность) И (КоличествоИтераций < 100) Цикл
КоличествоИтераций = КоличествоИтераций + 1;
// Следующая итерация расчета.
Запрос.Текст =
Показатьпеременная "текущее отклонение" становится приближенное к этому числу 2324855784,24862123. и с последующей итерацией увеличивается в 2 , а то и в 3 раза.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
запрос огромный ->
до него еще 3 не менее огромных запроса с созданием и описанием временной таблицы
Запрос.Текст =
"ВЫБРАТЬ
| УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла,
| СУММА(ВЫРАЗИТЬ(ВЫБОР
| КОГДА УзлыКорректировкиСтоимостиСписания.Количество <> 0
| ТОГДА ТаблицаРешений.Сумма * ВЫБОР
| КОГДА УчетЗатрат.Количество = 0
| ТОГДА УчетЗатрат.Сумма
| ИНАЧЕ УчетЗатрат.Количество
| КОНЕЦ / УзлыКорректировкиСтоимостиСписания.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК ЧИСЛО(25, 10))) КАК Сумма
|ПОМЕСТИТЬ ВременнаяТаблицаРешений
|ИЗ
| РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
| ЛЕВОЕ СОЕДИНЕНИЕ УчетЗатрат КАК УчетЗатрат
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРешений КАК ТаблицаРешений
| ПО УчетЗатрат.НомерУзла = ТаблицаРешений.НомерУзла
| ПО УзлыКорректировкиСтоимостиСписания.Организация = УчетЗатрат.Организация
| И УзлыКорректировкиСтоимостиСписания.СтруктурнаяЕдиница = УчетЗатрат.СтруктурнаяЕдиница
| И УзлыКорректировкиСтоимостиСписания.СчетУчета = УчетЗатрат.СчетУчета
| И УзлыКорректировкиСтоимостиСписания.Номенклатура = УчетЗатрат.Номенклатура
| И УзлыКорректировкиСтоимостиСписания.Характеристика = УчетЗатрат.Характеристика
| И УзлыКорректировкиСтоимостиСписания.Партия = УчетЗатрат.Партия
| И УзлыКорректировкиСтоимостиСписания.ЗаказПокупателя = УчетЗатрат.ЗаказПокупателя
| И УзлыКорректировкиСтоимостиСписания.ЗаказНаПроизводство = УчетЗатрат.ЗаказНаПроизводство
|ГДЕ
| УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор
|
|СГРУППИРОВАТЬ ПО
| УзлыКорректировкиСтоимостиСписания.НомерУзла
|
|ИНДЕКСИРОВАТЬ ПО
| НомерУзла
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СУММА((ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0))) * (ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0)))) КАК СуммаКвадратовОтклонений
|ИЗ
| РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
| ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаРешений КАК ВременнаяТаблицаРешений
| ПО (ВременнаяТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла)
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРешений КАК ТаблицаРешений
| ПО (ТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла)
|ГДЕ
| УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор";
Показатьдо него еще 3 не менее огромных запроса с созданием и описанием временной таблицы
(5) в (2) как раз таки же и в запросе оно
СУММА((ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0))) * (ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0)))) КАК СуммаКвадратовОтклонений
СУММА((ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0))) * (ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0)))) КАК СуммаКвадратовОтклонений
(10) Вам виднее, у меня нет УНФ. Главное - ищите ошибочный входной минус перед средними квадратами, где ПРОИЗВЕДЕНИЕ параметров, причём без модулей. Тогда пойдёт разнос и физически выделенное на диске место под число переполнится.
Это я чисто теоретически рассуждаю )
Это я чисто теоретически рассуждаю )
(11)
он про это говорил?
где ПРОИЗВЕДЕНИЕ параметров
он про это говорил?
|ВЫБРАТЬ
| СУММА((ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0))) * (ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0)))) КАК СуммаКвадратовОтклонений
Лично я не мудрил бы с отладчиком и узлами, а просто сформировал бы отчёт по остаткам товаров или материалов (что там у Вас), и глянул бы на конец месяца, ведь именно они и будут входом для Закрытия месяца. Увидел бы "красную сволочь" сразу, ну и ликвидировал бы её )
(12) а что если я поставил
после запроса где рассчитывается сумма квадратов. и уже выдало: таблица не найдена "ВременнаяТаблицаРешений"
левое соединение временнаятаблицарешений как временнаятаблица решений
Попытка
МассивРезультатов = Запрос.ВыполнитьПакет();
Исключение
лкОшибка= ОписаниеОшибки();
сообщить("это ошибка: " + лкОшибка);
КонецПопытки;
Результат = МассивРезультатов[1];
СтароеОтклонение = ТекущееОтклонение;
Показатьпосле запроса где рассчитывается сумма квадратов. и уже выдало: таблица не найдена "ВременнаяТаблицаРешений"
левое соединение временнаятаблицарешений как временнаятаблица решений
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот