|   |   | 
| 
 | как в табличной части удалить строки? | ☑ | ||
|---|---|---|---|---|
| 0
    
        baglandir111 28.08.20✎ 21:05 | 
        В табличной части: 
 - удалить строки с совпадающим значением в определенной колонке текущей строки - оставить только строки с совпадающим значением в определенной колонке текущей строки Как это можно сделать? Какой вариант самый быстрый ? | |||
| 1
    
        H A D G E H O G s 28.08.20✎ 21:16 | 
        ТаблицаСвертки=Товары.Выгрузить(,"Номенклатура");
 ТаблицаСвертки.Колонки.Добавить("Количество"); ТаблицаСвертки.ЗаполнитьЗначения(1,"Количество"); ТаблицаСвертки.Свернуть("Номенклатура","Количество"); Для Каждого СтрокаТаблицы Из ТаблицаСвертки Цикл Если СтрокаТаблицы.Количество=1 Тогда Продолжить; КонецЕсли; СтруктураПоиска=Новый Структура; СтруктураПоиска.Вставить("Номенклатура",СтрокаТаблицы.Номенклатура); МассивСтрок=Товары.НайтиСтроки(СтруктураПоиска); ЭтоПерваяСтрока=Истина; Для Каждого НайденнаяСтрока Из МассивСтрок Цикл Если не ЭтоПерваяСтрока Тогда Товары.Удалить(НайденнаяСтрока); КонецЕсли; ЭтоПерваяСтрока=Ложь; КонецЕсли; КонецЦикла; Вот эта херня уберет дубли. | |||
| 2
    
        baglandir111 28.08.20✎ 21:46 | 
        (1) Благодарю но вангую медленную работу херни )     | |||
| 3
    
        H A D G E H O G s 28.08.20✎ 22:09 | 
        (2) Все будет быстро     | |||
| 4
    
        Garykom гуру 28.08.20✎ 22:20 | 
        (1) Ты написал самый почти самый тормозной код     | |||
| 5
    
        Ёпрст гуру 28.08.20✎ 22:21 | 
        (0)
 тупо массив = ТабЧасть.НайтиСтроки(Новый Структура("Твояколонка",значениеколонки); Для каждого элементмассива из массив ТабЧасть.Удалить(элементмассива ) | |||
| 6
    
        baglandir111 29.08.20✎ 13:56 | 
        интересно можно ли это сделать через временные таблицы или соответсвие ?  
 участок очень узкий , очень не хочеться использовать двойные циклы ... | |||
| 7
    
        baglandir111 29.08.20✎ 14:28 | 
        Удаление дублей Сделал так 
 "ВЫБРАТЬ ВременнаяТаблица.Номенклатура КАК Номенклатура,ВременнаяТаблица.Количество КАК Количество,ВременнаяТаблица.Цена КАК Цена,ВременнаяТаблица.Сумма КАК Сумма ПОМЕСТИТЬ ВременнаяТаблица ИЗ &Таблица КАК ВременнаяТаблица ; ВЫБРАТЬ РАЗЛИЧНЫЕ * ИЗ ВременнаяТаблица" ); Запрос.УстановитьПараметр("Таблица",Товары); Результат = Запрос.Выполнить().Выгрузить(); Товары.Загрузить(Результат); | |||
| 8
    
        baglandir111 29.08.20✎ 14:38 | 
        как можно это сделать быстрее и оптимальней ? 
 //Вариант 1 удаление совпадающих элементов Текстрока = ЭлементыФормы.Товары.ТекущаяСтрока; массив = Товары.НайтиСтроки(Новый Структура("Номенклатура",Текстрока.Номенклатура)); Для каждого элементмассива из массив цикл Если не элементмассива.НомерСтроки = Текстрока.НомерСтроки Тогда Товары.Удалить(элементмассива ); КонецЕсли; КонецЦикла; | |||
| 9
    
        acht 29.08.20✎ 15:09 | 
        (2) > вангую медленную работу херни
 ... (7) > Сделал так "ВЫБРАТЬ ... ПОМЕСТИТЬ ВременнаяТаблица" Чой-то ржу. | |||
| 10
    
        etc 29.08.20✎ 15:10 | 
        (7) ты реально думаешь таскать таблицу на SQL сервер быстрее? Или замерял?     | |||
| 11
    
        H A D G E H O G s 29.08.20✎ 15:23 | 
        (8) Это самое быстрое     | |||
| 12
    
        baglandir111 29.08.20✎ 15:23 | 
        (10) Пока это гипотеза, нужно проверять     | |||
| 13
    
        H A D G E H O G s 29.08.20✎ 15:24 | 
        (8) Если конечно, это делается на сервере.     | |||
| 14
    
        baglandir111 29.08.20✎ 15:25 | 
        как на ваш взгляд что будет работать быстрее и почему ? 
 //Вариант 2 удаление совпадающих элементов через запр Текстрока = ЭлементыФормы.Товары.ТекущаяСтрока; Запрос = новый запрос ( "ВЫБРАТЬ | ВременнаяТаблица.НомерСтроки КАК НомерСтроки |ПОМЕСТИТЬ ВременнаяТаблица |ИЗ | &Таблица КАК ВременнаяТаблица |ГДЕ | ВременнаяТаблица.Номенклатура = &Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаблица.НомерСтроки КАК НомерСтроки |ИЗ | ВременнаяТаблица КАК ВременнаяТаблица | |УПОРЯДОЧИТЬ ПО | НомерСтроки УБЫВ" ); Запрос.УстановитьПараметр("Таблица",Товары); Запрос.УстановитьПараметр("Номенклатура",Текстрока.Номенклатура); Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() цикл Если не Результат.НомерСтроки = Текстрока.НомерСтроки Тогда Товары.Удалить(Результат.НомерСтроки-1); КонецЕсли; КонецЦикла; //Вариант 1 удаление совпадающих элементов через цикл Текстрока = ЭлементыФормы.Товары.ТекущаяСтрока; массив = Товары.НайтиСтроки(Новый Структура("Номенклатура",Текстрока.Номенклатура)); Для каждого элементмассива из массив цикл Если не элементмассива.НомерСтроки = Текстрока.НомерСтроки Тогда Товары.Удалить(элементмассива ); КонецЕсли; КонецЦикла; | |||
| 15
    
        acht 29.08.20✎ 15:33 | 
        (14) Ненене, давай-ка сам. Даннsе-то у кого?
 Засучивай рукава, запускай замер производительности. Потом с цифрами придешь нам нос утирвать | |||
| 16
    
        baglandir111 29.08.20✎ 15:51 | 
        (15) а как же гипотезы и теоретические умозаключения ? )     | |||
| 17
    
        baglandir111 29.08.20✎ 15:51 | 
        На мальньких обьемах без запроса работает быстрее.     | |||
| 18
    
        Ёпрст гуру 29.08.20✎ 15:58 | 
        (17) ты не поверишь, но на больших тоже     | |||
| 19
    
        Garykom гуру 29.08.20✎ 16:42 | 
        (0) Фактически у тебя одна задача:
 Разделить исходную таблицу на две, одна с совпадающими значениями и вторая без них. Вот и копируй строки в две новые таблицы из исходной. В какую копировать определяй через дополнительное Соответствие, куда значения заносишь. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |