Имя: Пароль:
1C
 
Удаление строк из ТЧ по условию.
, ,
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
Вот подумалось, так тоже должно работать

Для Каждого т Из Объект.Остатки.НайтиСтроки(Новый Структура("Компания","IVELSE")) Цикл
    Объект.Остатки.Удалить(т);
КонецЦикла;
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) Логично один раз вызывать. Вы меня озадачили, что я пошел проверять, на всякий случай. Повторяйте теорию.


Процедура Кнопка7Нажатие(Элемент)
    
    Сообщить("Старт");
    
    Для каждого т Из ПолучитьМассив() Цикл
        Сообщить("Обработка строки № " + ТабличноеПоле1.Индекс(т));
    КонецЦикла;
    
    Сообщить("Стоп");
    
КонецПроцедуры

Функция ПолучитьМассив()
    
    Строки = ТабличноеПоле1.НайтиСтроки(Новый Структура("Колонка", "123"));
    Сообщить("Найдено " + Строки.Количество() + " строк");
    
    Возврат Строки;
    
КонецФункции

Старт
Найдено 6 строк
Обработка строки № 0
Обработка строки № 1
Обработка строки № 2
Обработка строки № 3
Обработка строки № 4
Обработка строки № 5
Стоп


Для простого цикла аналогично


Процедура Кнопка8Нажатие(Элемент)
    
    Сообщить("Старт");
    
    к = 10;
    Для ч = 1 По к Цикл
        Сообщить("Обработка № " + ч);
        к = 2;
    КонецЦикла;
    
    Сообщить("Стоп");
    
КонецПроцедуры

Старт
Обработка № 1
Обработка № 2
Обработка № 3
Обработка № 4
Обработка № 5
Обработка № 6
Обработка № 7
Обработка № 8
Обработка № 9
Обработка № 10
Стоп
AdBlock убивает бесплатный контент. 1Сергей