Имя: Пароль:
1C
1С v8
Удаление строк таблицы по условию
0 Mucmep_Mapuo
 
28.02.18
04:51
Подскажите как удалить строки из ТЗ, в которых значение колонки "Закупочная цена" ниже той, что введена в ПолеВода2(((
1 Mucmep_Mapuo
 
28.02.18
04:52
Наименов = Справочники.Номенклатура.Выбрать();
        Пока Наименов.Следующий() Цикл
        НоваяСтрока = ТабличноеПоле1.Добавить() ;
        НоваяСтрока.Наименование = Наименов.Ссылка;
            Масс = Справочники.ТипыЦенНоменклатуры.Выбрать();
            Пока Масс.Следующий() Цикл
                Запрос = Новый Запрос;
                Запрос.УстановитьПараметр("ТипЦены",Масс.Наименование);
                Запрос.УстановитьПараметр("НаименованиеНум",Наименов.Наименование);
                Запрос.Текст = "ВЫБРАТЬ
                | ЦеныНоменклатуры.Цена КАК Цена ИЗ
                | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                | ГДЕ ЦеныНоменклатуры.ТипЦен.Наименование = &ТипЦены
                | И ЦеныНоменклатуры.Номенклатура.Наименование = &НаименованиеНум
                |
                |";
                РезультатЗапроса = Запрос.Выполнить();
                Выборка = РезультатЗапроса.Выбрать();
                    Пока Выборка.Следующий() Цикл
                    Цена = Выборка.Цена;
                    КонецЦикла;
                НоваяСтрока[Масс.Наименование] = Цена;    
            КонецЦикла;
            ***************************    
    КонецЦикла;
2 VladZ
 
28.02.18
05:04
(1) Не получать эти данные. Добавь в запрос "где ЦеныНоменклатуры.Цена > &НижнийПредел
3 Джексон
 
28.02.18
05:26
(2) Не угадал. Запрос выполняется после того, как строка уже добавлена.

Еще предложения?
4 Галахад
 
гуру
28.02.18
05:32
Предлагаю побить автора.
5 smilemanrus
 
28.02.18
05:36
(2) Если в запросе указать, то строка все равно будет добавляться, наверно надо будет ещё добавить строку
Если РезультатЗапроса.Пустой() Тогда
ТабличноеПоле1.Удалить(ТабличноеПоле1.Количество() - 1);
КонецЕсли;
НоваяСтрока[Масс.Наименование] = Цена;

Да и цикл Пока ВыборкаСледующий() не нужен, по видимому достаточно просто написать ВыборкаСледующий(), если запрос возвращает только одну запись
6 VladZ
 
28.02.18
05:40
(3) Общий смысл не изменяется: "Если данные не нужны - сразу их фильтровать (не получать)". В (1) написан бред (запрос в цикле). Этот бред удалить, написать правильно.
7 VladZ
 
28.02.18
05:42
ну и, предварительно, сделать (4).  :)
8 Diman000
 
28.02.18
06:21
Справочник.Выбрать раз и полный перебор...
Внутри Справочник.Выбрать два и полный перебор...
Мама, роди меня обратно...
9 catena
 
28.02.18
06:36
(8)Установление параметров по наименованию и запись в ТЗ ссылки по ссылке уже, видимо, прошли мимо на фоне)))
10 VladZ
 
28.02.18
06:38
(8) Для полного счастья нужно было сделать третий перебор: поиск цены в регистре ЦеныНоменклатуры.
11 Diman000
 
28.02.18
06:40
Да, мне первых двух переборов хватило, дальше я закрыл глаза и заплакал.
12 VladZ
 
28.02.18
06:46
А вообще, код шикарен! Скопирую себе. Буду при приеме на работу прогов спрашивать, что они думают про этот код, есть ли замечания / предложения по коду. Стоит ли его исправить или оставить как есть? :)
13 Сти
 
28.02.18
06:49
(12) Конечно надо! там же синтаксическая ошибка в виде ***************************
14 Mucmep_Mapuo
 
28.02.18
09:55
Всем огромное спасибо)))) Неужели все сразу в первый день программирования на 1С стали Гуру?) Лично я только вчера узнал чем функция отличается от процедуры, и что такое "Запрос" в принципе)) но побить так побить, пробуйте)) обещаю отбиваться)
15 Cool_Profi
 
28.02.18
10:29
(14) "Лично я только вчера узнал чем функция отличается от процедуры"

Я такое различие узнал в 8м классе... )))
16 catena
 
28.02.18
10:38
(14)Ну тут же не в 1С дело. Сперва добавить, а потом удалять строку в одной портянке кода - за это на любом языке побьют.
17 piter3
 
28.02.18
10:40
(12) На кол,потом сжечь
18 piter3
 
28.02.18
10:41
(14) В поиск