Имя: Пароль:
1C
 
строка табличной части
0 unbred
 
29.08.17
12:53
внешняя обработка >удалить строки документа,где характеристики помечены на удаление
из табличной части документа в результате запроса
"ВЫБРАТЬ
                   |    ПоступлениеТоваровУслугТовары.Характеристика.Ссылка КАК характеристиканоменклатуры,
                   |    ПоступлениеТоваровУслугТовары.Ссылка,
                   |    ПоступлениеТоваровУслугТовары.НомерСтроки  как строка
                   |ИЗ
                   |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                   |ГДЕ
                   |    ПоступлениеТоваровУслугТовары.Характеристика.Ссылка.ПометкаУдаления"
получаю таблицу значений.

могу ли я в этом запросе (НА СЕРВЕРЕ)
получить сразу ссылку на нужную мне строку и удалить её?
если нет,то как получить строкутабличной части по результату запроса?
пытаюсь в цикле
для каждого дляудаления из выборка цикл
структура = новый структура.вставить("дляудаления",??? не пойму.какой параметр передать)
и потом из структуры методом НайтиСтроку() достать строки.
извините,если криво объяснил.
1 unbred
 
29.08.17
12:54
(0) найтистрокИ.ну это не соль
2 pessok
 
29.08.17
12:58
обойти выборку, поместить все строки к удалению в массив, обойти этот массив и удалить строки из ТЧ
строку искать по индексу, индекс строки = номерстроки-1
3 undertaker
 
29.08.17
13:11
(2) да только если в таблице более одной строки с помеченной на удаление характеристикой, то вот с этим "индекс строки = номерстроки-1" надо быть аккуратным
4 pessok
 
29.08.17
13:14
(3) я потому и написал, что поместить сначала всю ТЧ в массив, а потом удалять не по индексу, а по ТЧ
5 pessok
 
29.08.17
13:14
тьфу, не по ТЧ, а по самой строке
6 FIXXXL
 
29.08.17
13:19
НайтиСтроки() и их удалить
7 undertaker
 
29.08.17
13:31
(4) тогда уж сначала получить документы, в ТЧ которых есть характеристики, помеченные на удаление, обойти их ТЧ, помещая строки с такими характеристиками в массив, а потом через Удалить() удалить строки, которые есть в массиве
8 НЕА123
 
29.08.17
13:34
(0)
а оно точно надо - удалять строку документа?
9 PiotrLoginov
 
29.08.17
13:35
(7) первый ответ по существу
10 unbred
 
29.08.17
13:35
(7) вот и я думал про такой способ сначала,но он мне показался не оптимальным. зачем получать целый документ?
с другой стороны,обработка одноразовая. почему нет. но я начинающий и хотел бы сразу правильно научится.
11 unbred
 
29.08.17
13:37
(7) и сразу вопрос,разве можно получить данные строк тч на сервере? а то я тут начитался всякого.
12 undertaker
 
29.08.17
13:38
(10) документ получать в любом случае надо будет, вам из него строки удалять. Если в документах не +100500 строк, из которых только 1-2 надо удалить, что такой способ не очень хороший. Но с другой стороны для одноразовой обработки пойдет
13 h-sp
 
29.08.17
13:39
(11) если на клиенте нельзя, то куда деваться? На чем вы еще собираетесь получать?
14 unbred
 
29.08.17
13:40
(12)> (0) "могу ли я в этом запросе (НА СЕРВЕРЕ)
получить сразу ссылку на нужную мне строку и удалить её?"
значит нет?
15 undertaker
 
29.08.17
13:41
(14) нет, только индекс строки через ее номер
16 unbred
 
29.08.17
15:33
что-то не то у меня с циклом. пытается удалить номер строки вместо строки.
                   для каждого дляудаления из выборка цикл
                                       док = дляудаления.ссылка.получитьобъект();
                                      
                                       масСтрокДляУдаления = док.товары.найти(дляудаления.строка);
                                     для каждого строка из масСтрокДляУдаления цикл

                                       если строка<> неопределено тогда
                                          
                                       строка.Удалить();
                                       конецесли;
                                    конеццикла;  
                 конеццикла;
17 unbred
 
29.08.17
15:53
в цикле не то обошёл. надо было масСтрокДляУдаления из выборка . но всё равно ошибка.метод удалить отсутствует. не тот параметр передал?
18 undertaker
 
29.08.17
16:37
19 h-sp
 
29.08.17
16:47
(17) док.товары.найти возвращает не массив. а строку
20 unbred
 
29.08.17
17:02
(19) уже понял. не пойму,как загнать в массив все строки цикла,а не одну
21 unbred
 
29.08.17
17:06
исходя из (19), мне надо добавлять в массив по одной строке из цикла,во время его обхода. вариант безусловно рабочий,но ,мне кажется далеко не единственный и не самый оптимальный.
хотя о5же,я ничерта знаю.просто так мне думается.
22 unbred
 
29.08.17
17:07
исходя из (18)
23 pessok
 
29.08.17
17:46
(21) единственный
24 unbred
 
29.08.17
17:51
(23) ага,уже понял. (18) прошу прощения
25 Happy Bear
 
29.08.17
18:23
Можно в запросе получить НомерСтроки, отсортировать по убыванию и удалять
26 unbred
 
29.08.17
20:21
в результате 1го запроса получаю нужные мне строки, а вот когда сую их в массив
  выборка= запрос.Выполнить().Выгрузить();
                                    масСтрокДляУдаления=новый массив;
                                       для каждого дляудаления из выборка цикл
                                       док = дляудаления.ссылка.получитьобъект();
                                       СтрокаДляУдаления = док.товары.найти(дляудаления.строка);
                                       //если      СтрокаДляУдаления.характеристика.ПометкаУдаления тогда
                                        масСтрокДляУдаления.Добавить(СтрокаДляУдаления);
в тз получаю две нужные строки а в остальных строках во всех колонках стоит <>
если ставлю условие <> неопределено -получаю всего 2 строки
не пойму,в чём подвох?
27 undertaker
 
29.08.17
22:37
Выборка = Запрос.Выполнить().Выбрать();

Пока ВЫборка.следующий() цикл

МасСтрок = Новый Массив;

док = ВЫборка.Ссылка.ПолучитьОбъект();

Для каждого Стр Из Док.товары Цикл

Если Стр.Характеристика.ПометкаУдаления Тогда
МасСтрок.Добавить(Строка);
КонецЕсли;

КонецЦикла;

Для каждого СтрМассива из МасСтрок Цикл
Док.товары.Удалить(СтрМассива );
КонецЦикла;

Док.Записать(РежимЗаписи.Проведение);

КонецЦикла;
28 unbred
 
30.08.17
12:19
(27) круто,спасибо,работает. а на  (26) есть ответ? никак не могу разобраться почему в тз в массиве получал <> в строках
29 h-sp
 
30.08.17
12:55
СтрокаДляУдаления = док.товары.Получить(дляудаления.строка - 1);
30 unbred
 
30.08.17
13:22
(29) спасибо. то есть НАЙТИ совсем не подходит для данного случая?
31 h-sp
 
30.08.17
13:29
(30) найти - это поиск по колонке
32 unbred
 
30.08.17
14:08
(31) уфф. спасибо.
Основная теорема систематики: Новые системы плодят новые проблемы.