Имя: Пароль:
1C
1С v8
как удалить строки тч документа
0 dreamoff
 
03.05.12
10:01
есть табл. часть обработки,в которой указаны нужные группы.как из табл. части документа корректно удалить строки номенклатуры, которые входят в эти группы с учетом иерархии?
1 zak555
 
03.05.12
10:05
перебор тч дока с конца
2 Ненавижу 1С
 
гуру
03.05.12
10:07
загрузка ТЧ в запрос, нахождение запросом нужные номера строк, создание массива нужных строк, удаление их из ТЧ
3 dreamoff
 
03.05.12
10:16
мне еще не понятно,как сделать,что бы отбор шел с учетом иерархии
4 Ненавижу 1С
 
гуру
03.05.12
10:20
(3)
1. в запросе есть оператор В ИЕРАРХИИ
2. в языке есть метод ПринадлежитЭлементу
5 dreamoff
 
03.05.12
10:47
спУдаленых=новый СписокЗначений;
       Пока рез.Следующий() Цикл
           спУдаленых.Добавить(рез.НомерСтроки);
       КонецЦикла;
       ТабличнаяЧастьДок = ДокКопия.Товары;
       Для каждого Строка Из спУдаленых Цикл
           ТабличнаяЧастьДок.Удалить(Строка);
       КонецЦикла;


Ошибка при вызове метода контекста (Удалить)
           ТабличнаяЧастьДок.Удалить(Строка);
по причине:
Несоответствие типов (параметр номер '1')

что не так?((
6 Cube
 
03.05.12
10:48
ТабличнаяЧастьДок.Удалить(Строка.Значение);
7 ДенисЧ
 
03.05.12
10:49
(5) Документацию не читаешь?
8 Cube
 
03.05.12
10:49
И зачем тебе вообще этот список значений нужен - не понятно.
9 dreamoff
 
03.05.12
10:51
глупая ошибка)
10 dreamoff
 
03.05.12
10:51
теперь он выходит индекс за границу
11 dreamoff
 
03.05.12
10:51
(8) а как грамотно сделать?
12 catena
 
03.05.12
10:52
(10)Потому что индекс и номер строки - два разных человека.
13 Cube
 
03.05.12
10:52
(10) Есть индекс строки, а есть номер строки. Индексы нумеруются с 0, а номера строк с 1...
14 Wobland
 
03.05.12
10:53
Процедура КнопкаВыполнитьНажатие(Кнопка)
   док=ДокументУстановкиЦен.ПолучитьОбъект();
   й=док.Товары.Количество()-1;
   Пока й>=0 Цикл
       Состояние(""+й+"/"+док.Товары.Количество());
       стр=док.Товары.Получить(й);
       Если стр.ЦенаВРознице=0 Тогда
           док.Товары.Удалить(й);
       КонецЕсли;
       й=й-1;
   КонецЦикла;
   Попытка
       док.Записать();
       Сообщить("документ записан");
   Исключение
       Сообщить("ошибка записи");
   КонецПопытки;
КонецПроцедуры
15 catena
 
03.05.12
10:53
+(12)Ну и еще потому, что строк-то меньше становится в процессе удаления...
16 Cube
 
03.05.12
10:53
(11) Ну, хотя бы так:

       ТабличнаяЧастьДок = ДокКопия.Товары;
       Пока рез.Следующий() Цикл
           ТабличнаяЧастьДок.Удалить(рез.НомерСтроки - 1);
       КонецЦикла;
17 Cube
 
03.05.12
10:54
(15) +1
(14) +1
18 dreamoff
 
03.05.12
11:00
(16) выдает ошибку выхода за границу
19 Zmich
 
03.05.12
11:01
(18). Удаляй строки с конца, см. (15)
20 catena
 
03.05.12
11:02
Или создай массив строк и удаляй Строки, а не по индексу.
21 Cube
 
03.05.12
11:02
(18) Да потому что, скорее всего, ты пытаешься удалить строку, которой уже нет в ТЧ. Допуцстим, есть ТЧ с 5-ю строками. Нужно удалить 3-ю и 5-ю. Ты удаляешь сначала третью. Строки сдвигаются и пятая строка становится четвертой. И теперь ты пытаешься удалить строку номер пять... Занавес.
22 fisher
 
03.05.12
11:02
Если работать напрямую со ссылками на строки табличной части, тогда никакие номера строк и прочие извращения не нужны. Просто удаляешь по ссылкам без оглядки и всё. Если всё-таки по индексам нужно (по результатам запроса, например), тогда просто начиная с последних индексов удаляешь.
23 НЕА123
 
03.05.12
11:03
(14)+1
24 Deon
 
03.05.12
11:04
(22) У строк ТЧ нет ссылки
25 Cube
 
03.05.12
11:05
26 fisher
 
03.05.12
11:07
(24) В БД - да, нету. А в объекте "ТабличнаяЧасть" - есть. Это по сути есть коллекция ссылок на элементы, содержащие данные строк.
27 catena
 
03.05.12
11:08
(24)Не сработает?

СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Номенклатура", ЧтоТоНенужное);
МассивСтрок = ТЧ.НайтиСтроки(СтруктураОтбора);
Для Каждого СтрокаТЧ из МассивСтрок Цикл
  ТЧ.Удалить(СтрокаТЧ);
КонецЦикла;
28 hhhh
 
03.05.12
11:23
(27) так у него иерархия еще.
29 fisher
 
03.05.12
11:23
(18) Просто еще в запросе отсортируй результат по убыванию номеров строк.
30 catena
 
03.05.12
11:27
(28)Я пример привела, я не собираюсь автору решение писать - у меня отпуск :)
31 dreamoff
 
03.05.12
11:55
"ВЫБРАТЬ
                           |    УстановкаЦенНоменклатурыТовары.Номенклатура,
                           |    УстановкаЦенНоменклатурыТовары.НомерСтроки КАК НомерСтроки
                           |ИЗ
                           |    Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары
                           |ГДЕ
                           |    УстановкаЦенНоменклатурыТовары.Номенклатура.Родитель В ИЕРАРХИИ(&спНом)
                           |
                           |УПОРЯДОЧИТЬ ПО
                           |    НомерСтроки
скажите,где ошибка,номер строк неверные
32 Cube
 
03.05.12
11:58
(31) Сделай хотя бы так:
|УПОРЯДОЧИТЬ ПО
|    НомерСтроки УБЫВ
33 dreamoff
 
03.05.12
11:58
(32) это я не целиком скопировал)
34 dreamoff
 
03.05.12
11:59
например позиция,которая в тч имеет номер 3154, у меня идет под номер 1
35 Grobik
 
03.05.12
12:04
Мне месяца три назад так подсказали (сработало):


   МасСтрок = Новый Массив;
   
   Для каждого Строка из табЗагрузки Цикл
       Если Строка.сумма_квыплате="0,00" Тогда
           МасСтрок.Добавить(Строка);
       КонецЕсли;
   КонецЦикла;
         
   Для каждого Строка из МасСтрок Цикл
       табЗагрузки.Удалить(Строка);
   КонецЦикла;
36 Cube
 
03.05.12
12:06
(34) Да ну на! Ты в запросе просто выбрал все документы. Отфильтруй по одному, что-то вроде:
|ГДЕ
|    УстановкаЦенНоменклатурыТовары.Номенклатура.Родитель В ИЕРАРХИИ(&спНом)
|    И УстановкаЦенНоменклатурыТовары.Ссылка = &Ссылка
37 Cube
 
03.05.12
12:07
+(36) А лучше так:
|ГДЕ
|    УстановкаЦенНоменклатурыТовары.Номенклатура В ИЕРАРХИИ(&спНом)
|    И УстановкаЦенНоменклатурыТовары.Ссылка = &Ссылка
38 dreamoff
 
03.05.12
12:09
чет я сегодня слишком много лажаю(
(36) а какая разница между этими конструкциями?
39 Eugene_life
 
03.05.12
12:11
(38) одна из них ведет к пробуждению, а вторая - к забвению :)
40 Cube
 
03.05.12
12:12
(38) Во втором варианте можно в &спНом засунуть список, в котором идут группы с элементами вперемешку. И запрос это отработает нормально, в отличии от первого варианта...
41 dreamoff
 
03.05.12
12:42
спасибо всем, теперь все это надо закрепить)