Salud, amigos!
Версия: 3.3.2.222
Класс исключения: EOleException
Сообщение об ошибке: OLE error 80020102
Прошу объяснить мне не образованному человеку причину этой ошибки
Возникает на коде:
Dataset('SomeName') = 0; // (*)
...
Поле 'SomeName' - типа Boolean. Исключение выбрасывается не всегда, а только на некоторых записях.
При том перед присвоением:
Вывод -
Отрабатывает корректно, но повторюсь иногда - после строчки кода (*) выбрасывает исключение [Object Error].
Буду очень признателен за руку помощи.
Нравится
Чтобы увидеть настоящую причину ошибки, надо установить отладчик.
Исключение выбрасывает строка *.
function RecalcPartableDiscounts(){ if (Self.State == dstEdit){ var UpdateQuery = GetSingleItemByCode('uq_SetOrderPartableParams'); var Parameters = UpdateQuery.Parameters; Parameters('ID').Value = Self('ID'); Parameters('HasClientCard').Value = Self('HasClientCard'); Parameters('SourceID').Value = Self('SourceID'); Parameters('IsComplaintDiscount').Value = Self('IsComplaintDiscount'); UpdateQuery.Execute(); (*) RecalcOrderPartableDiscounts(Self('ID')); CalcOrderLotsAmount(Self); } }
А как выглядит uq_SetOrderPartableParams? И что именно пишет при возникновении исключения?
Егор, предоставьте, пожалуйста, более подробную информацию по uq_SetOrderPartableParams
Что выполняется в пользовательском запросе?
Напрашивается вопрос.
С каким Dataset взаимодействует UpdateQuery, и как можно определить тот самый Dataset? (По логике все Наборы данных которые могут иметь отношение к Запросу на обновление (в моём случае) отмечены CheckBox'ом Генерировать запрос на обновление.)
Вывод Assigned(Dataset.UpdateQuery.Caption) выдаёт false.
Прошу пояснить механизм работы конвейера, и прядок и принципы обработки данных.
С уважением
Ваш коллега.
"Резвов Роман" написал:Егор, предоставьте, пожалуйста, более подробную информацию по uq_SetOrderPartableParams
Что именно необходимо?
Я человек новый, пока всех тонкостей и особенностей сервисов не знаю, буду благодарен за более исчерпывающую информацию.
Егор, доброго времени суток.
UQ - это сервис который отсылает UPDATE запрос к базе, без всяких там датасетов и так далее.
По поводу ошибки, значение параметров нужно устанавливать так:
SetParameterValue(Parameters, 'ID', ID);
а
GetSingleItemByCode('uq_SetOrderPartableParams');
лучше заменить на
Services.GetNewItemByUSI('uq_SetOrderPartableParams');
И проверьте чтобы совпадал тип параметра с типом колонки в БД.
Удачи!
Дмитрий, и все участники обсуждения, выражаю огромную благодарность. Вы мне очень помогли. Проблема выявлена.
И заключалась в неверных типах значений сервиса UpdateQuery, которые не совпадали с типами в таблице БД.
Буду дальше выравнивать ситуацию после своих предшественников, и совершенствовать своё понимание системы, ещё раз всем огромное спасибо.
P.S.
"Олейник Дмитрий" написал:GetSingleItemByCode('uq_SetOrderPartableParams');
лучше заменить наServices.GetNewItemByUSI('uq_SetOrderPartableParams');
У меня дилетантский вопрос:
До этого момента ломал голову и думал что лучше. Пришёл к выводу что как раз первый вариант с тем аргументированием что функция более гибкая, и позволяет, при использовании единого кода (второй параметр) каждый раз не создавать новый экземпляр сервиса, а ссылаться на уже созданный.
Возможно моё недопонимание двух методов связано с отсутствием опыта использования в соответствующих особых ситуациях.
Так в общем собственно вопрос =)
Почему лучше?
Это совет из опыта. Так будет большая вероятность избежать утечек памяти.
Учту на будущее, благодарю!
С уважением,
Ваш коллега