| 
    
        
     
     | 
    
  | 
Удаление строк из ТЧ по условию. | ☑ | ||
|---|---|---|---|---|
| 
    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) Логично один раз вызывать. Вы меня озадачили, что я пошел проверять, на всякий случай. Повторяйте теорию.
 
        
Для простого цикла аналогично 
     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |