|
Удаление строк из ТЧ по условию. | ☑ | ||
---|---|---|---|---|
0
Олеся999
25.02.15
✎
07:28
|
Подскажите пожалуйста что не так написала?
Хочу удалить строки из ТЧ по условию. &НаСервере Процедура Команда1НаСервере() КолВо = Объект.Остатки.Количество(); Для Сч = 1 по КолВо Цикл Удалено = Ложь; Для Каждого ТекСтрока из Объект.Остатки Цикл Если ТекСтрока.Компания = "IVELSE" Тогда Объект.Остатки.Удалить(ТекСтрока); Удалено = Истина; КонецЕсли; КонецЦикла; Если удалено=Ложь Тогда Прервать; КонецЕсли; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура Команда1(Команда) Команда1НаСервере(); КонецПроцедуры |
|||
1
Godofsin
25.02.15
✎
07:31
|
(0) Обычные грабли. Выборка сбивается.
|
|||
2
Godofsin
25.02.15
✎
07:32
|
И код жесть лютая
|
|||
3
Web00001
25.02.15
✎
07:33
|
(1)(2)Так ты бы нормальный написал, вместо критики. Человек и без тебя понимает, что здесь что то неправильно.
|
|||
4
Godofsin
25.02.15
✎
07:35
|
&НаСервере
Процедура Команда1НаСервере() МассивДляУдаления = Новый Массив; Для Каждого ТекСтрока из Объект.Остатки Цикл Если ТекСтрока.Компания = "IVELSE" Тогда Массив.Добавить(ТекСтрока); КонецЕсли; КонецЦикла; Для н = 0 По МассивДляУдаления.Количество() - 1 цикл Объект.Остатки.Удалить(МассивДляУдалени[н]); КонецЦикла; КонецПроцедуры |
|||
5
patria0muerte
25.02.15
✎
07:35
|
Надо нечто типа:
НайденныеСтроки = Объект.Остатки.НайтиСтроки(Новый Структура("Компания", "IVELSE")); Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл Объект.Остатки.Удалить(НайденнаяСтрока); КонецЦикла; Правда не уверен я, что в "Компания" у нас строка... |
|||
6
azt-yur
25.02.15
✎
07:35
|
ТекСтрока.Компания это точно строка?
А вообще лучше с конца таблицу обходить и удалять. |
|||
7
Godofsin
25.02.15
✎
07:35
|
(3) Написал. Ты доволен? =)
|
|||
8
Web00001
25.02.15
✎
07:38
|
(7)Да ), но вариант в (5) лучше и я ожидал увидеть обход строк с конца. Но так тоже ок.
|
|||
9
Godofsin
25.02.15
✎
07:42
|
(8) Да, в (5) лучше, но я для нее писал, чтоб понятней было =)
|
|||
10
Олеся999
25.02.15
✎
07:46
|
(5) "Компания" это столбец
|
|||
11
patria0muerte
25.02.15
✎
07:47
|
(0) И вообще не стоит никогда одновременно обходить таблицу и с нее в это же время строки удалять. Как в (1) указано: сбивается выборка. Лучше либо как в (5) или (4) или подобным методом как у тебя, только табличку обходить с конца.
|
|||
12
patria0muerte
25.02.15
✎
07:47
|
(10) А тип какой у столбца?
|
|||
13
Олеся999
25.02.15
✎
07:51
|
(4) {Документ.ОстаткиТехнолоджи.Форма.ФормаДокумента.Форма(7,13)}: Переменная не определена (Массив)
<<?>>Массив.Добавить(ТекСтрока); (Проверка: Сервер) {Документ.ОстаткиТехнолоджи.Форма.ФормаДокумента.Форма(13,32)}: Переменная не определена (МассивДляУдалени) Объект.Остатки.Удалить(<<?>>МассивДляУдалени[н]); (Проверка: Сервер) |
|||
14
Олеся999
25.02.15
✎
07:52
|
(12) Тип строка
|
|||
15
kosts
25.02.15
✎
07:52
|
(13) >Переменная не определена (Массив)
Тебе надо определить массив |
|||
16
Олеся999
25.02.15
✎
07:55
|
ну я это понимаю
Массив= ????? ) |
|||
17
kosts
25.02.15
✎
07:57
|
(16) Массив = Новый Массив;
|
|||
18
patria0muerte
25.02.15
✎
07:59
|
Запутали девушку. В (4) все по разному называется:
"Массив" "МассивДляУдаления" "МассивДляУдалени" Замени все эти слова на "Массив" и будет счастье и радость в твоей семье.... |
|||
19
kosts
25.02.15
✎
07:59
|
(13) И не используй (4), а то наудаляешь...
|
|||
20
Олеся999
25.02.15
✎
08:04
|
Почему то не (4) не (5) не работают (не удаляют)
|
|||
21
Dilgorp
25.02.15
✎
08:07
|
(20)объект по ссылке получаешь или из ссылки пытаешься удалить?
|
|||
22
Олеся999
25.02.15
✎
08:09
|
(21) Ну вот так написала как мне подсказали
&НаСервере Процедура Команда1НаСервере() Массив = Новый Массив; Для Каждого ТекСтрока из Объект.Остатки Цикл Если ТекСтрока.Компания = "IVELSE" Тогда Массив.Добавить(ТекСтрока); КонецЕсли; КонецЦикла; Для н = 0 По Массив.Количество() - 1 цикл Объект.Остатки.Удалить(Массив[н]); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура Команда1(Команда) Команда1НаСервере(); КонецПроцедуры |
|||
23
Wobland
25.02.15
✎
08:14
|
а правда, что компания - это строка?
|
|||
24
Dilgorp
25.02.15
✎
08:19
|
(22) должно удалять, строки в массив удаления попадают какие-нибудь?
|
|||
25
Олеся999
25.02.15
✎
08:22
|
||||
26
yavasya
25.02.15
✎
08:22
|
(23) +100500
|
|||
27
yavasya
25.02.15
✎
08:23
|
Запросом получи
|
|||
28
Wobland
25.02.15
✎
08:24
|
(25) так себе аргумент
|
|||
29
Cyberhawk
25.02.15
✎
08:24
|
(25) что, "ОстаткиТехнолоджи"?
|
|||
30
patria0muerte
25.02.15
✎
08:24
|
Так а объект же получить надо вроде, нет? Попробуй так:
&НаСервере Процедура Команда1НаСервере() ДокументОбъект = РеквизитФормыВЗначение("Объект"); Массив = Новый Массив; Для Каждого ТекСтрока из Объект.Остатки Цикл Если ТекСтрока.Компания = "IVELSE" Тогда Массив.Добавить(ТекСтрока); КонецЕсли; КонецЦикла; Для н = 0 По Массив.Количество() - 1 цикл Объект.Остатки.Удалить(Массив[н]); КонецЦикла; ЗначениеВРеквизитФормы(ДокументОбъект, "Объект") КонецПроцедуры &НаКлиенте Процедура Команда1(Команда) Команда1НаСервере(); КонецПроцедуры |
|||
31
yavasya
25.02.15
✎
08:25
|
Получается каждый может корёжить как хочет наименование,
СокрЛП("IVELSE") |
|||
32
patria0muerte
25.02.15
✎
08:25
|
+(30) Там Объект.Остатки замени на ДокументОбъект.Остатки
|
|||
33
patria0muerte
25.02.15
✎
08:25
|
Ну или да, вся суть в (31)
|
|||
34
Рэйв
25.02.15
✎
08:25
|
(0)А зачем на сервер ходить за удалением строк текущего объекта? Вполне можно на клиенте
|
|||
35
Рэйв
25.02.15
✎
08:28
|
Я бы советовал сделать как в (5) и проверить отладчиком что вернет в НайденныеСтроки
|
|||
36
Рэйв
25.02.15
✎
08:28
|
вернее проверить надо
НайденныеСтроки.Количество() |
|||
37
Олеся999
25.02.15
✎
08:33
|
(35) Значения Тип
НайденныеСтроки Массив Массив |
|||
38
Dilgorp
25.02.15
✎
08:36
|
(37) выдели строку с массивом и F2 посмотри есть там что или нет.
|
|||
39
Wobland
25.02.15
✎
08:39
|
опять начинается отладка в текстовом режиме
|
|||
40
polosov
25.02.15
✎
08:41
|
(39) в мистарежиме.
|
|||
41
Олеся999
25.02.15
✎
08:42
|
||||
42
Wobland
25.02.15
✎
08:43
|
(41) переходи к осмыслению (36)
|
|||
43
Олеся999
25.02.15
✎
08:49
|
Вроде (30) и (5) правильно, а строки не удаляет.
|
|||
44
Рэйв
25.02.15
✎
08:50
|
(43)Посмотри все таки в отладчике
НайденныеСтроки.Количество() :-) Если оно=0 значиит просто не нашел строк по условию и соотвественно нечего удалять |
|||
45
Godofsin
25.02.15
✎
09:20
|
(19) А что не так с (4)?
|
|||
46
kosts
25.02.15
✎
09:25
|
(45) А не переживай, я попутал, всё нормально. Показалось.
|
|||
47
Олеся999
25.02.15
✎
09:52
|
||||
48
Олеся999
25.02.15
✎
10:00
|
А нет работает (5) !)) только как сделать чтобы на оборот все кроме "IVELSE" удалялись ?))
|
|||
49
Godofsin
25.02.15
✎
10:01
|
(47) И? )))) Ты точку остановки в конце цикла поставь, Олесенька )))
|
|||
50
kosts
25.02.15
✎
10:02
|
(48) Боюсь это очень сложно сделать.
|
|||
51
Godofsin
25.02.15
✎
10:02
|
(48) = меняем <>
|
|||
52
Timon1405
25.02.15
✎
10:04
|
ДокументОбъект.Остатки.Загрузить(ДокументОбъект.Остатки.Выгрузить(Новый Структура("Компания", "IVELSE")))
|
|||
53
Godofsin
25.02.15
✎
10:05
|
(52) ну или так )))
|
|||
54
Олеся999
25.02.15
✎
10:17
|
(51) Неа так не прокатит )
|
|||
55
Godofsin
25.02.15
✎
10:17
|
(54) Чой то?
|
|||
56
Олеся999
25.02.15
✎
10:21
|
(55) {Документ.ОстаткиТехнолоджи.Форма.ФормаДокумента.Форма(4,17)}: Неопознанный оператор
НайденныеСтроки <<?>><> Объект.Остатки.НайтиСтроки(Новый Структура("Компания","IVELSE")); (Проверка: Сервер) {Документ.ОстаткиТехнолоджи.Форма.ФормаДокумента.Форма(4,17)}: Неопознанный оператор НайденныеСтроки <<?>><> Объект.Остатки.НайтиСтроки(Новый Структура("Компания","IVELSE")); (Проверка: Тонкий клиент) |
|||
57
Godofsin
25.02.15
✎
10:26
|
(56) =) Ты хоть указывай какой вариант используешь. (52) тогда твой вариант.
|
|||
58
Олеся999
25.02.15
✎
10:31
|
(57) &НаСервере
Процедура Команда1НаСервере() НайденныеСтроки <> Объект.Остатки.НайтиСтроки(Новый Структура("Компания","IVELSE")); Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл Объект.Остатки.Удалить(НайденнаяСтрока); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура Команда1(Команда) Команда1НаСервере(); КонецПроцедуры |
|||
59
Godofsin
25.02.15
✎
10:40
|
(58) Только из-за милого личика:
&НаСервере Процедура Команда1НаСервере() ДокументОбъект.Остатки.Загрузить(ДокументОбъект.Остатки.Выгрузить(Новый Структура("Компания", "IVELSE"))); КонецПроцедуры |
|||
60
Олеся999
25.02.15
✎
10:45
|
(59) Спасибо:)
|
|||
61
Мыш
25.02.15
✎
10:48
|
Вот ещё вариант:
Для Счетчик=1-Коллекция.Количество() По 0 Цикл ЭлементКоллекции=Коллекция[-Счетчик]; КонецЦикла; |
|||
62
patria0muerte
25.02.15
✎
10:52
|
(58) о боже...
|
|||
63
Simod
25.02.15
✎
12:30
|
||||
64
kosts
25.02.15
✎
12:39
|
Вот подумалось, так тоже должно работать
|
|||
65
Wobland
26.02.15
✎
03:08
|
прикольно на вас смотреть. люди как люди. но как залезаете в програаминг - дебилы дебилами. кто вам скажет, что документацию нужно читать? она есть. идиёты.
|
|||
66
Гобсек
26.02.15
✎
04:24
|
(64)Операция НайтиСтроки() в этом случае будет выполняться при каждой итерации цикла. В случае большой таблицы можно поиметь тормоза.
|
|||
67
Рэйв
26.02.15
✎
06:17
|
(66)В случае (64) если есть хоть одна найденая строка, поимеется вечный цикл :-) Т.к. каждый раз массив строк будет получаться заново
|
|||
68
Рэйв
26.02.15
✎
06:20
|
(67)Хотя нет, сторно:-) удаляются же,
|
|||
69
kosts
26.02.15
✎
09:56
|
(66)(67) Логично один раз вызывать. Вы меня озадачили, что я пошел проверять, на всякий случай. Повторяйте теорию.
Для простого цикла аналогично
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |