Имя: Пароль:
1C
1С v8
удаление строки в ТЧ
,
0 mau89
 
18.03.13
14:32
Здравствуйте подскажите, не получается удалить строки из табличного поля с помощью внешней обработки заполнения табличной части. Подскажите в какую сторону копать?
Процедура Инициализировать(Объект1,ИмяТабличнойЧасти1,ТабличноеПолеОбъекта1) Экспорт
     запрос = Новый Запрос;
   запрос.Текст=
   "ВЫБРАТЬ
   |    ЛицевыеСчетаРаботниковОрганизации.ФизЛицо,
   |    ЛицевыеСчетаРаботниковОрганизации.Организация,
   |    ЛицевыеСчетаРаботниковОрганизации.Банк
   |ИЗ
   |    РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации";
   РезультатЗапроса = запрос.Выполнить();
   ТаблицаРезультатов = РезультатЗапроса.Выгрузить();
   Для Каждого стр Из ТаблицаРезультатов Цикл
       Для Каждого СтрокаДокумента из ТабличноеПолеОбъекта1.Значение Цикл
           Если СокрЛП(СтрокаДокумента.физлицо)=СокрЛП(стр.физлицо) тогда
// вот тут надо удалить строки которые совпадают, а именно из СтрокаДокумента                
           КонецЕсли;
         КонецЦикла;
   КонецЦикла;
  КонецПроцедуры
1 John83
 
18.03.13
14:34
собираешь строки для удаления, затем удаляешь
2 mau89
 
18.03.13
14:35
(1) а подробнее можно, в 1с новичок еще
3 Михаил Козлов
 
18.03.13
14:35
Удалите строку (СтрокаДокумента) из ТЧ, какое значение будет в СтрокаДокумента в следующей итерации цикла?
4 НафНаф
 
18.03.13
14:35
(0) а не проще в запросе получать строки, подлежащие удалению?
5 salvator
 
18.03.13
14:36
НайтиСтроки
+ поиск по форуму, 100500 раз уже обсуждалось
6 mau89
 
18.03.13
15:02
(3) суть задачи в том чтоб убрать из документа зарплата к выплате, убрать всех физлиц с лицевыми счетами при выборе способа оплаты через кассу, т.е при удалении останутся только физлица без лицевых счетов.
(4) а не подскажите каким образом это сделать?
7 Kreont
 
18.03.13
15:08
Сразу в запросе отбери что нужно, но у меня в конф.еще есть:
РегистрСведений.ПараметрыВыплатыЗПРаботников
по нему и можно отобрать что надо.
8 Фокусник
 
18.03.13
15:10
(0) Из своего "ТабличноеПолеОбъекта1.Значение" выгрузи колонку с физ.лицами (в массив). В запросе исключи физ.лиц из этого массива.
9 Reset
 
18.03.13
15:19
(6) Расшифрую то что раньше сказали:

Метод (1):
ДляУдаления=Новый Массив;
Для Каждого стр Из ТаблицаРезультатов Цикл
       Для Каждого СтрокаДокумента из ТабличноеПолеОбъекта1.Значение Цикл
           Если СтрокаДокумента.физлицо=стр.физлицо тогда
       ДляУдаления.Добавить(СтрокаДокумента);
           КонецЕсли;
   КонецЦикла;
КонецЦикла;
Для каждого Удаляемая из ДляУдаления
   ТабличноеПолеОбъекта1.Значение.Удалить(Удаляемая);
КонецЦикла;




Метод (4):

ТекстЗапроса="Выбрать НомерСтроки,ФизЛицо Поместить ВДокументе Из &ТЗ Как ТЗ;
//
Выбрать Различные НомерСтроки
Из ВДокументе
Внутреннее Соединение
РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК РС
По РС.ФизЛицо=ВДокументе.ФизЛицо
Упорядочить По НомерСтроки Убыв";

Запрос.УстановитьПараметр("ТЗ",ТабличноеПолеОбъекта1.Значение.Скопировать(,"НомерСтроки,ФизЛицо"));

Рез=Запрос.Выполнить();
Если не Рез.Пустой() тогд
 Выборка=Рез.Выбрать();
 Пока Выборка.Следующий() цикл
      ТабличноеПолеОбъекта1.Значение.Удалить(Выборка.НомерСтроки-1);
 КонецЦикла;
КонецЕсли;
10 mau89
 
18.03.13
15:24
(9) спасибо за такой ответ
11 Reset
 
18.03.13
15:24
Несколько явных ошибок исправил во втором варианте.
Остальное на месте)

ТекстЗапроса="Выбрать НомерСтроки,ФизЛицо Поместить ВДокументе Из &ТЗ Как ТЗ;
//
Выбрать Различные ВДокументе.НомерСтроки

Из ВДокументе ВДокументе
Внутреннее Соединение
РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК РС
По РС.ФизЛицо=ВДокументе.ФизЛицо

Упорядочить По НомерСтроки Убыв";

Запрос.УстановитьПараметр("ТЗ",ТабличноеПолеОбъекта1.Значение.Выгрузить(,"НомерСтроки,ФизЛицо"));

Рез=Запрос.Выполнить();
Если не Рез.Пустой() тогд
 Выборка=Рез.Выбрать();
 Пока Выборка.Следующий() цикл
      ТабличноеПолеОбъекта1.Значение.Удалить(Выборка.НомерСтроки-1);
 КонецЦикла;
КонецЕсли;