Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Очистка переменной с типом "РезультатЗапроса"

Очистка переменной с типом "РезультатЗапроса"
Я
   SkAt
 
15.09.18 - 16:24
Добрый день! Как очистить переменную с типом "РезультатЗапроса"? Ну вот понадобилось! Прехватываю через расширение и чтобы дальше выборка не выполнялась, мне нужно ее вычистить. Как?
Пример:
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ...";
Результат=Запрос.Выполнить();
//именно в этом месте "Результат" сделать пустым

Выборка=Результат.Выбрать();
Пока Выборка.Следующий() Цикл...

Заранее спасибо!
 
 
   AneJIbcuH
 
1 - 15.09.18 - 16:29
(0) Может пустым запросом переопределить её? Т.е. ты хочешь, чтобы дальше код продолжился, но ошибку не вывалил?
   SkAt
 
2 - 15.09.18 - 16:32
(1) ДА, именно при Выборке идет вывод ошибки. Мне требуется этого избежать. А есть пример адекватного заведомо пустого запроса? А то у меня так:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
ЗаказКлиента.Ссылка КАК Ссылка
ИЗ
Документ.ЗаказКлиента КАК ЗаказКлиента
ГДЕ
ЗаказКлиента.Номер = ""Хрень""";
РезультатЗапроса = Запрос.Выполнить();
   МимохожийОднако
 
3 - 15.09.18 - 16:34
(2) Ошибка какая?
   RomanYS
 
4 - 15.09.18 - 16:35
"ВЫБРАТЬ 0 ГДЕ Ложь"

Но тебе нужно точно не это (запрос с пустым результатом).
   SkAt
 
5 - 15.09.18 - 16:36
(3) Это роли не играет. В целом идет проверка получения предоплаты по заказу клиента. Если предоплаты нет и обеспечение "Отгрузить" тогда ошибка. Клиент хочет у услуг эту проверку убрать.
   SkAt
 
6 - 15.09.18 - 16:38
(4) Проверим сейчас.... Почему бы и нет?
   МимохожийОднако
 
7 - 15.09.18 - 16:39
(5) Если есть "ошибка", то надо её исправить, СкрытныйТыНаш. Вместо пустого результат возвращай Неопределено.
   SkAt
 
8 - 15.09.18 - 16:42
(7) Мы понимаем, что об ошибках нас предупреждают не просто так. А клиент хочет. У Неопределено нет метода "Выбрать()". Так что не катит... Но спс.
   AneJIbcuH
 
9 - 15.09.18 - 16:44
(5) Тогда вообще не понятно, что ты там делаешь...
   МимохожийОднако
 
10 - 15.09.18 - 16:44
(8) Добавь после Выбрать() метод Прервать()
 
 Рекламное место пустует
   SkAt
 
11 - 15.09.18 - 16:47
(10) Вот процедура, в нее передается результат запроса:

Процедура СообщитьОбОшибкахПроведенияПоРегиструРасчетыСКлиентами(Объект, Отказ, РезультатЗапроса)

    ШаблонСообщения = НСтр("ru = 'Нарушены условия оплаты, необходимые для обеспечения/отгрузки по заказу %Заказ%,
        |Требуется %СуммаЗаказа% %Валюта% оплачено %СуммаОплаты% %Валюта%'");

    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл

        ТекстСообщения = СтрЗаменить(ШаблонСообщения, "%Заказ%",      Строка(Выборка.ЗаказКлиента));
        ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Валюта%",      Строка(Выборка.Валюта));
        ТекстСообщения = СтрЗаменить(ТекстСообщения, "%СуммаЗаказа%", Строка(Выборка.СуммаЗаказа));
        ТекстСообщения = СтрЗаменить(ТекстСообщения, "%СуммаОплаты%", Строка(Выборка.СуммаОплаты));

        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, Объект, ,, Отказ);

    КонецЦикла;

КонецПроцедуры

И есть расширение, где с директивой "Перед" у этой процедуры, я подменяю значение результат запроса и передаю выполнение основной процедуре. Т.к. конфа на поддержке - в нее не залезешь. И Прервать; не получится
   SkAt
 
12 - 15.09.18 - 16:54
Просто изначально хотел узнать: есть стандартный метод типа как у таблиц ТЗ.Очистить();?? А то переопределять запросом как-то неэтетично))
   МимохожийОднако
 
13 - 15.09.18 - 16:57
Сделай ВМЕСТО  с копированием нужного кода
   SkAt
 
14 - 15.09.18 - 17:04
(13) Разницы нет: ВМЕСТО, ПЕРЕД, ПОСЛЕ в данном случае. В идеале нужно просто чтобы эта процедура НЕ выполнялась, т.к. именно в ней Отказ в истину возводится и сообщение выводится.
   МимохожийОднако
 
15 - 15.09.18 - 17:06
(14) Тогда иди в предыдущую процедуру, которая "ненужную" процедуру вызывает
   SkAt
 
16 - 15.09.18 - 17:06
В общем, ставлю как (4):

&Перед
Процедура СообщитьОбОшибкахПроведенияПоРегиструРасчетыСКлиентами(Объект, Отказ, РезультатЗапроса)

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ 0 ГДЕ Ложь";
РезультатЗапроса = Запрос.Выполнить();

КонецПроцедуры

Всем спасибо!
   SkAt
 
17 - 15.09.18 - 17:07
(15) В предыдущей море других ошибок обрабатывается. И в типовой код не залезешь, там вообще без вариантов.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует