|
v8: Не правильно отбирает запрос ( | ☑ | ||
---|---|---|---|---|
0
Collector
28.07.11
✎
12:56
|
Нужно из результата запроса удалить документы, не удовлетворяющие условиям, выбранным пользователем. Он вроде нормально начинает делать, но допустим если из 30 документов 10 или 15 не удовлетворяет условиям, то он удаляет первых 5-6((( Где затык ???
Результат = Запрос.Выполнить().Выгрузить(); Для Каждого ТекСтр Из Результат Цикл Докум = ТекСтр.Документ.ПолучитьОбъект(); ЗнчСв = УправлениеСвойствами.ПолучитьЗначенияСвойств(Докум.Контрагент,Истина,Ложь); Для Каждого Стр из ЗнчСв Цикл //Если Строка(Стр.Свойство)="АВТОМАТ" Тогда // ЗнчСв.Удалить(Стр); Если Строка(Стр.Свойство)="Маршрут доставки" Тогда Для каждого Элемент Из Маршрут Цикл Если (Элемент.Пометка = Ложь) И (Строка(Стр.Значение) = Строка(Элемент.Значение))тогда Сообщить(Элемент.Значение); Результат.Удалить(ТекСтр); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; |
|||
1
Ненавижу 1С
гуру
28.07.11
✎
12:57
|
затык в том, что условия надо сразу в запрос было запихнуть
|
|||
2
catena
28.07.11
✎
12:59
|
Затык в удалении внутри выборки.
|
|||
3
Collector
28.07.11
✎
13:04
|
(1)Слабоват я пока в запросах ((( (2) Никак, кроме как (1) посоветовал не выкрутиться ?
|
|||
4
Wobland
28.07.11
✎
13:07
|
(3) это не выкрутиться, это сразу надо правильно делать
|
|||
5
catena
28.07.11
✎
13:07
|
(3)Ну, вообще, как (1) кошернее. Чтобы сделать как в (0), надо будет больше разбираться :)
|
|||
6
catena
28.07.11
✎
13:08
|
И больше писать...
|
|||
7
Kuein
28.07.11
✎
13:08
|
(3) В рамках бреда: не удалять строки из ТЗ в ходе выборки из этой самой ТЗ, а скидывать номера строк в отдельный массив, потом пройтись по этому массиву и удалить строки из Результата.
(4) Прав. Надо было все делать сразу правильно. И да: Докум = ТекСтр.Документ.ПолучитьОбъект(); ЗнчСв = УправлениеСвойствами.ПолучитьЗначенияСвойств(Докум.Контрагент,Истина,Ложь); На кой черт тут получение объекта? |
|||
8
Fragster
гуру
28.07.11
✎
13:10
|
Для Сч = 1-Таб.Количество() по 0 Цикл
Если Условие Тогда Таб.Удалить(-Сч); КонецЕсли; КонецЦикла; |
|||
9
Fragster
гуру
28.07.11
✎
13:10
|
(8) ну, там где-то получить строку по индексу и ее уже удалять
|
|||
10
Fragster
гуру
28.07.11
✎
13:11
|
а вообще - правильно сразу в запросе
|
|||
11
Wobland
28.07.11
✎
13:11
|
(8) Таб.Удалить(+Сч) хотел сказать? ;)
|
|||
12
vicof
28.07.11
✎
13:12
|
(11) все правильно, -Сч
|
|||
13
Fragster
гуру
28.07.11
✎
13:12
|
(11) нет
|
|||
14
Wobland
28.07.11
✎
13:13
|
(12)(13) 1-Таб.Количество() не приметил
|
|||
15
Collector
28.07.11
✎
13:19
|
(8) 1с ругается
Обработка.ОбработкаРейсов.Форма.Форма.Форма(50)}: Ошибка при вызове метода контекста (Удалить) Результат.Удалить(-сч); по причине: Значение индекса выходит за границы диапазона |
|||
16
zbv
28.07.11
✎
13:21
|
(15) покажи код
|
|||
17
Fragster
гуру
28.07.11
✎
13:21
|
Еще можно
Для Каждого Стр Из Таб Цикл Пока Условие Цикл Попытка Таб.Удалить(Стр); Исключение Прервать; КонецПопытки; КонецЦикла; КонецЦикла; |
|||
18
Fragster
гуру
28.07.11
✎
13:22
|
(15) Стр = Таб[-Сч];
Таб.Удалить(Стр) |
|||
19
Fragster
гуру
28.07.11
✎
13:25
|
или даже
Для Каждого Стр Из Таб Цикл Пока Таб.Индекс(Стр) > 0 И Условие Цикл Таб.Удалить(Стр); КонецЦикла; КонецЦикла; |
|||
20
Fragster
гуру
28.07.11
✎
13:25
|
>=0
|
|||
21
СноваЗдорова
28.07.11
✎
13:28
|
(7) Если номера строк скидывать - гимор... проще сразу ссылку на строки из тз скидывать и удалять по нормальному. Но все-таки лучше в запросе отбирать то, что нужно, а не все подряд
|
|||
22
Kuein
28.07.11
✎
13:30
|
(21) Да, вариант со ссылками на строки ТЗ - более грамотный.
|
|||
23
СноваЗдорова
28.07.11
✎
13:30
|
(15) каждый раз, как ты удаляешь нижестоящие строки смещаются вверх. Коли угораздило удалять по индексу, то удаляй тогда от большего к меньшему
|
|||
24
Collector
28.07.11
✎
14:39
|
Не фига не получается (((( Я по моему совсем запутался.... (15) Допустим я в условии не буду удалять строки, а вместо этого выгружу индексы нужных строк. Как удалять от большего к меньшему ?
|
|||
25
zbv
28.07.11
✎
14:40
|
(24) код покажи.
а в условии можешь пихать строки в массив, а потом перебирая массив удалить строки из таблицы. |
|||
26
zbv
28.07.11
✎
14:42
|
МассивСтрок = Новый Массив;
Для Каждого Стр Из Таб Цикл Если Условие Тогда МассивСтрок.Добавить(Стр); КонецЕсли; КонецЦикла; Для Каждого Стр из МассивСтроки Цикл ТАб.Удалить(Стр); КонецЦикла; //Если простое условие, то Массив можно получить с помощью "НайтиСтроки" |
|||
27
Collector
28.07.11
✎
14:43
|
Код сверху нарисован... Я все переправил, как было...
|
|||
28
Collector
28.07.11
✎
14:47
|
(26) Так получается точно так же как у меня было с самого начала... Считай удаляешь по порядку. Вот (23) посоветовал от большего к меньшему, не знаешь как сделать ?
|
|||
29
hhhh
28.07.11
✎
14:49
|
(27) чего ты привязался к этим индексам? Ну сказали же тебе, что индексы скачут при удалении. Делай как в (25)
|
|||
30
Collector
28.07.11
✎
14:52
|
Сорри мозг закипает просто))) Даже не прочитал толком, что (26) написал... Температура 35 на улице, хоть кулер привязывай к башке!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |