Изменение результата запроса

1. Glodev 2 31.03.17 16:14 Сейчас в теме
Добрый день, есть крупный запрос на редактирование которого просто нет времени, принято решение изменить его программно...

выбор = запрос.выполнить().выбрать();

пока выбор. следующий() цикл

конеццикла


все что сверху менять нельзя , но при этом известно что если условия истина то нужно изменить строку выборки
как можно реализовать ?
выбор.ссылка.получитьобъект().найти(условие,"столбец") не получилось ,
выбор.получитьобъект().найти(условие,"столбец") не получилось

Может есть у кого то мысли ?
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DJDUH 17 31.03.17 16:18 Сейчас в теме
Запрос . Выгрузить() в ТЗ или ДЗ и тогда извращаться!
+
6. Glodev 2 31.03.17 16:22 Сейчас в теме
(2)код с обходом выбор.следующий() менять нельзя
+
3. alex-l19041 8 31.03.17 16:19 Сейчас в теме
ТекОбъект = выбор.ссылка.получитьобъект();


и потом работаете с ТекОбъект как обычно
+
8. Glodev 2 31.03.17 16:24 Сейчас в теме
(3) поле объекта не найдено, и сам объект (допустим регистр сведений или еще что то редактировать нельзя )
+
4. DimDiemon 79 31.03.17 16:19 Сейчас в теме
Вместо запрос.выполнить().выбрать();
сделайте запрос.выполнить().Выгрузить();

Получится таблица значений, делайте с ней всё что хотите, в т.ч. поиск по отборам и всё остальное.

Редактировать результат запроса, насколько я знаю, нельзя.
alex-l19041; +1
9. Glodev 2 31.03.17 16:26 Сейчас в теме
(4)проблема в том что если я сделаю выгрузить я очень потеряю в производительности , я выгружу , обойду результат , измененю , передам в запрос , и сделаю выборку , большая потеря в времени выполнения , почти дважды ...
+
5. li5enok 31.03.17 16:21 Сейчас в теме
Пока выбор.Следующий() Цикл
    Если выбор.столбец = условие Тогда
        ДелайПравду(выбор);
    Иначе
        ДелайЛожь(выбор);
    КонецЕсли;
КонецЦикла;
+
10. Glodev 2 31.03.17 16:28 Сейчас в теме
(5) проблема в том что код написаный пока.следующий() тоже огромен, и нужно грубо говоря как-то, если условие, переопределить выбор.парамет
+
7. DimDiemon 79 31.03.17 16:24 Сейчас в теме
Возможно ТС имеет ввиду, что искомый столбец отсутствует в результате запроса.
+
11. DimDiemon 79 31.03.17 16:30 Сейчас в теме
А зачем ещё раз выбирать?
Последующий код будет с ТЗ работать так же как и с выбранной строкой.
Просто обход строк ТЗ сделай со старыми именами:

Для каждого Выбор из Тз Цикл

КонцЦикла;
+
12. Glodev 2 31.03.17 16:32 Сейчас в теме
(11)
дующий код будет с ТЗ работать так же как и с выбранной строкой.
Просто обход строк ТЗ сделай со старыми именами:

Для каждого Выбор из Тз Цикл

КонцЦикла;


Пока что похоже самый лучший вариант, но опять же но что обход выполняется в функции в которую передается выборка , причем не в единственную функцию ....
+
15. DimDiemon 79 31.03.17 16:37 Сейчас в теме
(12)
Надо пересматривать следующий код, куда передаётся и смотреть не используются ли там методы специфичные для выборки из результата запроса.
Если запрос менять нельзя, то по другому никак...
+
17. alex-l19041 8 31.03.17 16:39 Сейчас в теме
(12) как вариант, можно весь исходный запрос поместить в временную таблицу и во втором запросе наложить на эту таблицу необходимые дополнительные условия (группировки и т.д.) и получить в результате выборку, а не ТЗ
+
13. li5enok 31.03.17 16:34 Сейчас в теме
Лови костыль )
Таблица = Запрос.Выполнить().Выгрузить();
ИтоговаяТаблица = Таблица.СкопироватьКолонки();

Для Каждого СтрокаТаблицы Из Таблица Цикл
	Если СтрокаСоответствуетУсловию(СтрокаТаблицы) Тогда
		ЗаполнитьЗначенияСвойств(ИтоговаяТаблица.Добавить(), СтрокаТаблицы);
	КонецЕсли;
КонецЦикла;
	
Запрос = Новый Запрос;
Запрос.Текст = 
	"ВЫБРАТЬ
	|	*
	|ПОМЕСТИТЬ ВТ
	|ИЗ
	|	&Таблица КАК Таблица
	|;
	|
	|ВЫБРАТЬ
	|	*
	|ИЗ
	|	ВТ КАК ВТ";
Запрос.УстановитьПараметр("Таблица", ИтоговаяТаблица);

выбор = Запрос.Выполнить().Выбрать(
Показать
);
adhocprog; user755340; as7bs; +3
16. Glodev 2 31.03.17 16:38 Сейчас в теме
(13)Думал об этом костыле, но обходить запрос дважды, нереальная потеря производительности, так как запрос и его выполнение очень массивное и долго выполняется и так , а так в два раза его утяжелить....
+
14. li5enok 31.03.17 16:36 Сейчас в теме
но лучше сделать рефакторинг - дешевле выйдет
adhocprog; +1
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот