Удаление пустых строк табличной части

1. Terebinator 14.05.19 11:02 Сейчас в теме
Добрый день. Подскажите юному начинающему программисту.
Как удалить пустые строки табличной части?
БП3.0
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
19. Vlan 36 16.05.19 09:18 Сейчас в теме
Еще со времен 7.7 я всегда удалял пустые строки перебором с конца. Тогда за один цикл все удаляются.
&НаКлиенте
Процедура УдалитьПустые(Команда)
	Сч = Объект.Контрагенты.Количество();
	Пока Сч > 0 Цикл
		Сч = Сч - 1;
		Строка = Объект.Контрагенты[сч];
		Если НЕ ЗначениеЗаполнено(Строка.Контрагент) Тогда
			Объект.Контрагенты.Удалить(Сч);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
Показать
Lllypuk; Ladoslav; SIrina9; VAAngelov; hellf; DoctorRoot; TVA_11; Terebinator; +8 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. alex-l19041 8 14.05.19 11:07 Сейчас в теме
(1) код которым заполняются эти строки ?
4. Terebinator 14.05.19 11:12 Сейчас в теме
(2) НоваяСтрока = Объект.ДанныеТО.Добавить();
НоваяСтрока.Контрагент = Сред(ДанныеСтроки[0], Найти(ДанныеСтроки[0], "\")+1);
НоваяСтрока.Контрагент = Сред(НоваяСтрока.Контрагент, Найти(НоваяСтрока.Контрагент, "\")+1);
НоваяСтрока.Контрагент = Сред(НоваяСтрока.Контрагент, Найти(НоваяСтрока.Контрагент, "\")+1);
НоваяСтрока.Контрагент = Лев(НоваяСтрока.Контрагент, СтрНайти(НоваяСтрока.Контрагент, "\", НаправлениеПоиска.СКонца)-1);
НоваяСтрока.Сумма = ДанныеСтроки[0];
НоваяСтрока.Количество = Сред(ДанныеСтроки[0], Найти(ДанныеСтроки[0], " (")+2);
НоваяСтрока.Количество = Лев(НоваяСтрока.Количество, СтрНайти(НоваяСтрока.Количество, ")", НаправлениеПоиска.СКонца)-1);

RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Истина; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Истина; //Многострочный режим

RegExp.Pattern = "[^0-9]"; // отбор только чисел
НоваяСтрока.Количество = RegExp.Replace(НоваяСтрока.Количество, "");
11. alex-l19041 8 14.05.19 11:22 Сейчас в теме
(4) НоваяСтрока = Объект.ДанныеТО.Добавить() надо делать после того как
Контрагент = Сред(ДанныеСтроки[0], Найти(ДанныеСтроки[0], "\")+1) вернет не пустое значение
12. catena 110 14.05.19 11:24 Сейчас в теме
+(11), я тоже за то, чтобы не добавлять что-нибудь ненужное, а не удалять
5. tusv 210 14.05.19 11:12 Сейчас в теме
(1)Шивт +Стрлка вниз по ненужным строкам и делите;)
А программно, На сервере Приблизительно так
Строки = ТЧ.НайтиСтроки(Новый Структура("Контрагент,Количество,Сумма", Справочники.Контрагенты.ПустаяСсылка,0,0));
Для каждого текстр из Строки Цикл
   Тч.Удалить(Текстр);
КонецЦикла

ТЧ это фамилия такая, моя. Подставьте свою
6. dchumak 42 14.05.19 11:13 Сейчас в теме
(5) неправильно.
при удалении строки сдвинутся и не все будут удалены.
Алгоритм такой:
1. Перебираете табличную часть, строки с незаполненным контрагентом пишете в массив
2. Перебираете массив и удаляете строку из табличной части по строке массива.
вот в этом случае будет удалено все.
9. tusv 210 14.05.19 11:20 Сейчас в теме
(6)Кофе в доме закончился. Ужос. А пока иду за допингом жду Вас Здесь.
Минус тоже результат. Не в обиде
VladimirElohov; +1 Ответить
8. catena 110 14.05.19 11:19 Сейчас в теме
(5)(7) Только судя по коду у него Контрагент - строка)) И Количество, похоже, тоже.
10. Terebinator 14.05.19 11:22 Сейчас в теме
(8)верно. все строка. иначе никак) работа со строкой.
3. catena 110 14.05.19 11:08 Сейчас в теме
Юный начинающий ждет готовый код или готов искать от подсказки?

Выгрузить в ТЗ, найти строки, удалить, загрузить в ТЧ.
7. dchumak 42 14.05.19 11:17 Сейчас в теме
МассивОтмененныхСтрок = ТЧ.НайтиСтроки(Новый Структура("Контрагент,Количество,Сумма", Справочники.Контрагенты.ПустаяСсылка,0,0));
Для Каждого СтрокаМассивОтмененныхСтрок Из МассивОтмененныхСтрок Цикл
ТЧ.Удалить(СтрокаМассивОтмененныхСтрок);
КонецЦикла;
13. tusv 210 14.05.19 11:25 Сейчас в теме
(7)Сами Вы минус;)
Вот правильно
Строки = ТЧ.НайтиСтроки(Новый Структура("Контрагент,Количество,Сумма", Справочники.Контрагенты.ПустаяСсылка,0,0));
Пока Строки.Количество() Цикл
   Тч.Удалить(Строки[0]);
КонецЦикла:

Это я еще за кофе не сгонял
Но (8) первым догадался, где косяк
14. catena 110 14.05.19 11:28 Сейчас в теме
(13)Кофе все-таки нужен)))
Terebinator; tusv; +2 Ответить
15. tusv 210 14.05.19 11:29 Сейчас в теме
(14)Не ну. Категоричный плюс;)
16. Terebinator 14.05.19 11:39 Сейчас в теме
(13)Контрагент не ссылка. а строка
17. tusv 210 14.05.19 12:03 Сейчас в теме
(16)Ну тады
Строки = ТЧ.НайтиСтроки(Новый Структура("Контрагент,Количество,Сумма","",0,0));
Пока Строки.Количество() Цикл
   Тч.Удалить(Строки[0]);
КонецЦикла:
18. Mar12 15.05.19 15:20 Сейчас в теме
CTRL+F
CTRL+A
DEL

Хороший программист = ленивый программист.
19. Vlan 36 16.05.19 09:18 Сейчас в теме
Еще со времен 7.7 я всегда удалял пустые строки перебором с конца. Тогда за один цикл все удаляются.
&НаКлиенте
Процедура УдалитьПустые(Команда)
	Сч = Объект.Контрагенты.Количество();
	Пока Сч > 0 Цикл
		Сч = Сч - 1;
		Строка = Объект.Контрагенты[сч];
		Если НЕ ЗначениеЗаполнено(Строка.Контрагент) Тогда
			Объект.Контрагенты.Удалить(Сч);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
Показать
Lllypuk; Ladoslav; SIrina9; VAAngelov; hellf; DoctorRoot; TVA_11; Terebinator; +8 Ответить
20. promogiantworm 17.04.20 17:12 Сейчас в теме
Создай подписку на событие "ПередЗаписью", добавь туда все доки с табличными частями, а в обработчик помести вот это:

Процедура ОчиститьПустыеСтрокиВТабличнойЧастиОбъекта(Источник) Экспорт
	
	Мета = Метаданные.НайтиПоТипу(ТипЗнч(Источник.Ссылка));
	Для Каждого СтрТаб Из Мета.ТабличныеЧасти Цикл
		Таб = Источник[СтрТаб.Имя];
		Если Таб.Количество() > 0 Тогда
			МасСтрок = Новый СписокЗначений;
			Для Индекс = 0 По Таб.Количество() - 1 Цикл
				Стр = Таб[Индекс];
				Эл = Стр[СтрТаб.Реквизиты[0].Имя];
				Если НЕ ЗначениеЗаполнено(Эл) Тогда
					МасСтрок.Добавить(Стр.НомерСтроки);
				КонецЕсли;
			КонецЦикла;
			МасСтрок.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
			Для Каждого НомерСтр Из МасСтрок Цикл
				Для Каждого СтрТ Из Таб Цикл
					Если СтрТ.НомерСтроки = НомерСтр.Значение Тогда
						Таб.Удалить(СтрТ);
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры
Показать
21. yasar92 6 28.01.23 23:16 Сейчас в теме
(20) чего то тут не хватает)

Для Каждого СтрТаб Из Мета.ТабличныеЧасти Цикл
			Таб = Объект_Документ_Справочник[СтрТаб.Имя];
			Если Таб.Количество() > 0 Тогда
				МасСтрок = Новый СписокЗначений;
				Для Индекс = 0 По Таб.Количество() - 1 Цикл
					Стр = Таб[Индекс]; 
					
                                       //Например этого
					ЕстьРеквизитНезаполнен=Ложь;
					Для Каждого СтрРек из СтрТаб.Реквизиты Цикл 
						Эл = Стр[СтрРек.Имя];	
						Если Строка(СтрРек.ПроверкаЗаполнения)="Выдавать ошибку" тогда 
							Если Строка(СтрРек.Тип)<>"Номенклатура" тогда
								Если НЕ ЗначениеЗаполнено(Эл) Тогда
									 ЕстьРеквизитНезаполнен=Истина;
								КонецЕсли;    
							КонецЕсли;
						КонецЕсли;   
					КонецЦикла;
					
					Если ЕстьРеквизитНезаполнен тогда
						 МасСтрок.Добавить(Стр.НомерСтроки);
					КонецЕсли;
					 //Например этого
	
				КонецЦикла;
				МасСтрок.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
				Для Каждого НомерСтр Из МасСтрок Цикл
					Для Каждого СтрТ Из Таб Цикл
						Если СтрТ.НомерСтроки = НомерСтр.Значение Тогда
							Таб.Удалить(СтрТ);
						КонецЕсли;
					КонецЦикла;
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
Показать
22. user1863362 29.01.23 00:32 Сейчас в теме
(21)Браво, некропостер. Три года ждал, чтобы своё прям при всех вывалить.
МасСтрок = Новый СписокЗначений;
По префиксу имени там массив, а по факту - список значений. Удивительно.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)