Имя: Пароль:
1C
1С v8
Нужна помощь с отчетом по табличной части документа
,
0 memogolik
 
27.12.11
14:40
Сразу прошу прощения: в 8ой версии не сильно опытен.
Есть документ "УстановкаЦенНоменклатуры"
Был бы крайне признателен, если кто нибудь подсказал как можно удалить строки из табличной части документа по некоторому признаку(например во всех документах данного типа удалить все строки, в которых помечена на удаление номенклатура)
Я на данный момент научился только получать данные из табличной части:

Процедура КнопкаСформироватьНажатие(Кнопка)
   // Вставить содержимое обработчика.
   Док = Документы.УстановкаЦенНоменклатуры;
   Выборка=Док.Выбрать();
   Пока (Выборка.Следующий()) Цикл
       Объект = Выборка.ПолучитьОбъект();
       Для Каждого СтрокаТЧ ИЗ Объект.Товары Цикл
       Если (СтрокаТЧ.Номенклатура.ПометкаУдаления=Истина) Тогда
                      Сообщить(СтрокаТЧ.Номенклатура);
       КонецЕсли;
               КонецЦикла;
   КонецЦикла;
КонецПроцедуры

Как изменить процедуру, чтобы удалялись строки и документ потом записывался?

Заранее спасибо
1 Mort
 
27.12.11
14:41
Можно запросом получить номера строк по документам отсортированные по убыванию и смело удалять по индексу.
2 memogolik
 
27.12.11
14:43
Не сочтите за наглость - можно хотя бы примерный кусочек кода?
3 vmv
 
27.12.11
14:55
(2) конструктор запроса и вперед, обход выборки уже фигня
4 memogolik
 
27.12.11
15:06
(3) а что с выборкой не так? Ведь можно наверно и через запрос и через выборку, как это и в 1с7 было?
5 vmv
 
27.12.11
15:08
обход выборки запроса,

выборка менеджера документов не так изящна
6 le_
 
27.12.11
15:12
Запрос = Новый Запрос("ВЫБРАТЬ
                     |    УстановкаЦенНоменклатурыТовары.Ссылка КАК ДокументУстановки,
                     |    УстановкаЦенНоменклатурыТовары.Номенклатура,
                     |    УстановкаЦенНоменклатурыТовары.НомерСтроки
                     |ИЗ
                     |    Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары
                     |ГДЕ
                     |    УстановкаЦенНоменклатурыТовары.Номенклатура.ПометкаУдаления
                     |ИТОГИ ПО
                     |    ДокументУстановки");
                     
Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);                      
Для Каждого Стр Из Дерево.Строки Цикл
   ОбработкаПрерыванияПользователя();
   Состояние(Стр.ДокументУстановки);
   Док = Стр.ДокументУстановки.ПолучитьОбъект();
   Для Каждого СтрТЧ Из Стр.Строки Цикл
       Док.Товары.Удалить(СтрТЧ.НомерСтроки - 1);
   КонецЦикла;
   Если Док.Проведен Тогда
       Док.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
   Иначе
       Док.Записать(РежимЗаписиДокумента.Запись);
   КонецЕсли;
КонецЦикла;
Сообщить("Готово!", СтатусСообщения.Информация);
7 le_
 
27.12.11
15:14
(4) Запросом будет гораздо быстрее.
8 sereban
 
27.12.11
15:28
(6) забыл упорядочить в запросе номера строк по убыванию. Цикл для каждого собъется.
9 sereban
 
27.12.11
15:29
(8)точнее не цикл. А индексы в ТЧ Док.Товары изменятся.
10 le_
 
27.12.11
15:34
(8) Ага, надо добавить УПОРЯДОЧИТЬ ПО НомерСтроки УБЫВ
:)
11 memogolik
 
27.12.11
17:06
Простите за невежество, куда вставить кусок "УПОРЯДОЧИТЬ ПО НомерСтроки УБЫВ"? ;)
Точнее, после какой строчки
12 Rovan
 
гуру
27.12.11
17:30
(11) нажми правой кнопкой мышки и выбери "Конструктор запроса"
13 le_
 
27.12.11
18:00
(11) Перед "ИТОГИ ПО".
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.