Имя: Пароль:
1C
 
8.2 Убрать пустые строки
0 polkin
 
10.02.10
09:01
Как убрать пустые строки из таблицы?
Для Каждого Строка Из .....
 Если ЗначениеНеЗаполнено.....

если две строки подряд, одну пропускает....
1 Ksandr
 
10.02.10
09:02
Таблица.Найти не работает в 8.2?
З.Ы. про 8.2 ни слова не знаю
2 Ksandr
 
10.02.10
09:03
ой, точнее НайтиСтроки
3 birkoFFFF
 
10.02.10
09:04
а Свернуть(...) не предлагать ?
4 Ненавижу 1С
 
гуру
10.02.10
09:05
(0) это не 8.2 это классический алгоритм проверки при трудоустройстве, короче, собирай вещи
5 simol
 
10.02.10
09:12
Что ты понимаешь под пустой строкой таблицы?
6 polkin
 
10.02.10
09:18
(5) Нужно в таблице если в колонке Количестро = 0 убрать строку.
7 polkin
 
10.02.10
09:19
точнее удалить строку
8 Rusty Nail
 
10.02.10
09:22
(7) тогда см. (3)
9 Ненавижу 1С
 
гуру
10.02.10
09:25
в (3) написан откровенный бред
10 Rusty Nail
 
10.02.10
09:31
(9) согласен, затупил
11 polkin
 
10.02.10
10:26
ну и как правильно?
12 birkoFFFF
 
10.02.10
10:31
(9) ню-ню )))

   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("Объект", Объект.Cсылка);  
   Запрос.Текст=
   "ВЫБРАТЬ
   |    ЗаказПокупателя.Товары.(
   |        Количество,
   |        Номенклатура КАК Номенклатура
   |    )
   |ИЗ
   |    Документ.ЗаказПокупателя КАК ЗаказПокупателя
   |ГДЕ
   |    ЗаказПокупателя.Ссылка = &Объект
   |
   |УПОРЯДОЧИТЬ ПО
   |    Номенклатура" ;
   

   Выборка= Запрос.Выполнить().Выгрузить(ТЧ);    
   ТЧ.Свернуть("Номенклатура","Количество");
   Объект[ИмяТабличнойЧасти].Очистить();
   ТЧ.выгрузить(Объект[ИмяТабличнойЧасти]);


Если это не работает или работает медленнее перебора, тот пускай первым бросит в меня камень...
13 Ненавижу 1С
 
гуру
10.02.10
10:33
(12) результат будет не тем же, кроме того, нули как бы остаются
14 birkoFFFF
 
10.02.10
10:37
(13) как понять не тем-же ? будет без строчек где Количество=0 ...
15 Ненавижу 1С
 
гуру
10.02.10
10:38
Массив = ТЧ.НайтиСтроки(Новый Структура("Количество",0));
Для каждого Стр из Массив Цикл
 ТЧ.Удалить(Стр);
КонецЦикла;
16 Ненавижу 1С
 
гуру
10.02.10
10:39
(14) нет, останутся и с нулями тоже
17 birkoFFFF
 
10.02.10
10:40
(15) а если там 1000 строк ?
(16) ню-ню...
Проверь, это код обработки по заполнению ТЧ, которой у меня снабженцы пользуются по 200 раз в день...
18 ИначеЕсли
 
10.02.10
10:42
Можно цикл запустить, если количество = 0, то строку удалять.
Только цикл надо с конца таблицы запускать, а не с начала.
19 Дикообразко
 
10.02.10
10:42
(17) в открытом документе? сидящим полностью в памяти?
20 birkoFFFF
 
10.02.10
10:43
(19) ты о чем ?
21 Ненавижу 1С
 
гуру
10.02.10
10:45
(17) Если там всего одна строка с нулевым количеством, то?
22 Дикообразко
 
10.02.10
10:46
(20)
а) сомневаюсь что запрос к БД будет быстрее перебора строк таблицы находящейся в ОЗУ на клиенте
б) твой запрос не уберет номенклатуры с нулевым количеством (при условии если она больше в документе не встречается).
23 birkoFFFF
 
10.02.10
10:46
(21) да хоть одна, хоть 10000, и хоть все с нулями, хоть через одну...
24 birkoFFFF
 
10.02.10
10:46
(22) проверь )))
25 Дикообразко
 
10.02.10
10:47
(23) попробуй

Ном1  0
Ном2  3
Ном2  0

после твоего запроса должно получиться
Ном1 0
Ном2 3
26 Ненавижу 1С
 
гуру
10.02.10
10:49
(23) вот упертая, а я говорю, если там одна строка с 0, то она же и останется
кстати и в (25) тоже пример как бы говорит
27 ИначеЕсли
 
10.02.10
10:50
Если цель просто убрать пустые строки, то свёртку вообще лучше не использовать.
Свёртка - это аналог СГРУППИРОВАТЬ, работает по-моему пропорционально N^2
28 birkoFFFF
 
10.02.10
10:51
(26) (25) Проверь сначала, потом спорь...
29 Ненавижу 1С
 
гуру
10.02.10
10:51
(28) уже проверил, дальше?
30 birkoFFFF
 
10.02.10
10:52
(29) ну и ?
31 Ненавижу 1С
 
гуру
10.02.10
10:52
(30) остаются с нулем
32 ИначеЕсли
 
10.02.10
10:55
ВсегоСтрок = ТЧ.Количество();
Для Стр = 1 по ВсегоСтрок Цикл
Строка = ТЧ[ВсегоСтрок - Стр];
Если Строка.Количество = 0 Тогда
ТЧ.Удалить(Строка);
КонецЕсли;
КонецЦикла;

И не надо никаких запросов городить.
33 Дикообразко
 
10.02.10
10:56
(32) были же более красивые алгоритмы .. кхм
34 ИначеЕсли
 
10.02.10
10:56
(33) в (15) хороший и наглядный
35 Дикообразко
 
10.02.10
10:59
(34) угу, в принципе в 8ке только его и юзаю
36 Ненавижу 1С
 
гуру
10.02.10
11:02
с запросом в корне неверно, даже если это ТЧ объекта, то:
- объект может быть не записан
- объект может быть изменен
37 birkoFFFF
 
10.02.10
11:16
(36)
Это никак не влияет на результат запроса. Данные берутся у объекта на тот момент на который сделан запрос и его "записанность" никак не влияет на результат...
Иначе как-бы работали в принципе ВСЕ обработки по заполнению ТЧ...
38 Ненавижу 1С
 
гуру
10.02.10
11:20
(37) ты признала, что работает твой алгоритм неправильно в общем случае?
теперь признай, что для не записанного объекта твой запрос выдаст пустой результат и все просто очистится
39 bvg
 
10.02.10
11:51
в (15) все правильно, другое лучше не рассматривать
40 polkin
 
10.02.10
14:45
Спасибо