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

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

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

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

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

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

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

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

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

    КонецЦикла;

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

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

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

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

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

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