![]() |
|
строка табличной части | ☑ | ||
---|---|---|---|---|
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) уфф. спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |