Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 фев 2025, 03:07

Функция РешитьСЛУ() в УНФ

Автор sali, 18 фев 2025, 14:29

0 Пользователей и 2 гостей просматривают эту тему.

sali

В Функция РешитьСЛУ() модуле объекта документа Закрытие Месяца выдает ошибку
Ошибка при вызове метода контекста (Записать)
{Обработка.ЗакрытиеМесяца.МодульМенеджера(2202)}: ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
{Обработка.ЗакрытиеМесяца.МодульМенеджера(72)}: ВыполнитьОперациюЗакрытияМесяца(СтруктураПараметров, Операция, ДокументЗакрытияМесяца);
{(1)}:Обработки.ЗакрытиеМесяца.ВыполнитьЗакрытиеМесяца(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5113)}: Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1036)}: ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(1026)}: ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры);
по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ЗакрытиеМесяца.МодульОбъекта(1301)}: Ошибка при вызове метода контекста (ВыполнитьПакет)
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
по причине:
Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Ошибка SQL: Переполнение поля
по причине:
Ошибка SQL: Переполнение поля

после первой же итерации
ТекущееОтклонение = 1;
ТребуемаяТочность = 0.00001;
КоличествоИтераций = 0;
...
Пока (ТекущееОтклонение > ТребуемаяТочность * ТребуемаяТочность) И (КоличествоИтераций < 100) Цикл
    КоличествоИтераций = КоличествоИтераций + 1;

// Следующая итерация расчета.
Запрос.Текст =
переменная "текущее отклонение" становится приближенное к этому числу 2324855784,24862123. и с последующей итерацией увеличивается в 2 , а то и в 3 раза

sali

В чем может быть проблема? Решение наверняка СЛУ наверняка принимает очень очень большое значение. В чем такое может быть?

LexaK

sali, по описанию ошибка в ОбработкеПроведения
в запросе при ВыполнитьПакет

...отлаживайте текст запроса.
если помогло нажмите: Спасибо!

sali

LexaK, да вы бы видели тот запрос. точнее те запросы.  :wacko: он не то чтобы огромный, в нем создана таблица временная и в параметрах консоли она тоже есть, указываешь ту же организацию ругается что такого поля нет

sali

сам запрос
Пока (ТекущееОтклонение > ТребуемаяТочность * ТребуемаяТочность) И (КоличествоИтераций < 100) Цикл

КоличествоИтераций = КоличествоИтераций + 1;

// Следующая итерация расчета.
Запрос.Текст =
"ВЫБРАТЬ
| УзлыКорректировкиСтоимостиСписания.НомерУзла КАК НомерУзла,
| СУММА(ВЫРАЗИТЬ(ВЫБОР
| КОГДА УзлыКорректировкиСтоимостиСписания.Количество <> 0
| ТОГДА ТаблицаРешений.Сумма * ВЫБОР
| КОГДА УчетЗатрат.Количество = 0
| ТОГДА УчетЗатрат.Сумма
| ИНАЧЕ УчетЗатрат.Количество
| КОНЕЦ / УзлыКорректировкиСтоимостиСписания.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК ЧИСЛО(25, 10))) КАК Сумма
|ПОМЕСТИТЬ ВременнаяТаблицаРешений
|ИЗ
| РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
| ЛЕВОЕ СОЕДИНЕНИЕ УчетЗатрат КАК УчетЗатрат
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРешений КАК ТаблицаРешений
| ПО УчетЗатрат.НомерУзла = ТаблицаРешений.НомерУзла
| ПО УзлыКорректировкиСтоимостиСписания.Организация = УчетЗатрат.Организация
| И УзлыКорректировкиСтоимостиСписания.СтруктурнаяЕдиница = УчетЗатрат.СтруктурнаяЕдиница
| И УзлыКорректировкиСтоимостиСписания.СчетУчета = УчетЗатрат.СчетУчета
| И УзлыКорректировкиСтоимостиСписания.Номенклатура = УчетЗатрат.Номенклатура
| И УзлыКорректировкиСтоимостиСписания.Характеристика = УчетЗатрат.Характеристика
| И УзлыКорректировкиСтоимостиСписания.Партия = УчетЗатрат.Партия
| И УзлыКорректировкиСтоимостиСписания.ЗаказПокупателя = УчетЗатрат.ЗаказПокупателя
| И УзлыКорректировкиСтоимостиСписания.ЗаказНаПроизводство = УчетЗатрат.ЗаказНаПроизводство
|ГДЕ
| УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор
|
|СГРУППИРОВАТЬ ПО
| УзлыКорректировкиСтоимостиСписания.НомерУзла
|
|ИНДЕКСИРОВАТЬ ПО
| НомерУзла
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СУММА((ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0))) * (ЕСТЬNULL(ТаблицаРешений.Сумма, 0) - (УзлыКорректировкиСтоимостиСписания.Сумма + ЕСТЬNULL(ВременнаяТаблицаРешений.Сумма, 0)))) КАК СуммаКвадратовОтклонений
|ИЗ
| РегистрСведений.УзлыКорректировкиСтоимостиСписания КАК УзлыКорректировкиСтоимостиСписания
| ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаРешений КАК ВременнаяТаблицаРешений
| ПО (ВременнаяТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла)
| ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРешений КАК ТаблицаРешений
| ПО (ТаблицаРешений.НомерУзла = УзлыКорректировкиСтоимостиСписания.НомерУзла)
|ГДЕ
| УзлыКорректировкиСтоимостиСписания.Регистратор = &Регистратор";

МассивРезультатов = Запрос.ВыполнитьПакет();
Результат = МассивРезультатов[1];

СтароеОтклонение = ТекущееОтклонение;
Если Результат.Пустой() Тогда
ТекущееОтклонение = 0; // отклонений нет
Иначе
Выборка = Результат.Выбрать();
Выборка.Следующий();

// Определим текущее отклонение от решения.
ТекущееОтклонение = ?(Выборка.СуммаКвадратовОтклонений = NULL, 0, Выборка.СуммаКвадратовОтклонений);
КонецЕсли;


sali


LexaK

sali, запрос в цикле?

переделайте! за одно может и ошибку исправите

(конструктор запроса на тексте запускали?)
или еще как вариант поместите в Попытку с выводом описания ошибки
эту команду
так

Попытка
   МассивРезультатов = Запрос.ВыполнитьПакет();
Исключение
   лкОшибка = ОписаниеОшибки();
   Сообщить(лкОшибка);
КонецПопытки;


если помогло нажмите: Спасибо!

sali


sali

Цитата: LexaK от 19 фев 2025, 10:27Попытка
   МассивРезультатов = Запрос.ВыполнитьПакет();
Исключение
   лкОшибка = ОписаниеОшибки();
   Сообщить(лкОшибка);
КонецПопытки;

в ошибку не заходит , но после 8 или 9 итерации : таблица не найдена "ВременнаяТаблицаРешений"
левое соединение временнаятаблицарешений как временнаятаблица решений

таких строк всего 2 - в запросе где они (таблицы) уничтожаются, и как раз таки в запросе где рассчитывается сумма квадратов отклонений

sali

{Документ.ЗакрытиеМесяца.МодульОбъекта(1302)}: Ошибка при вызове метода контекста (ВыполнитьПакет): Ошибка выполнения запроса: В данной транзакции уже происходили ошибки!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск