![]() |
|
Как программно удалить строку в табличной части документа? | ☑ | ||
---|---|---|---|---|
0
svchernova
25.01.10
✎
06:39
|
Корифеи, помогите кто может.
Казалось бы, простая задча - удалить строчки. но в 1С - невыполнимая просто! Что я делаю неправильно, посмотрите код, пожалуйста. // Ссылка - это ссылка на нужный документ в базе Док = Ссылка.ПолучитьОбъект(); Попытка Док.Записать(РежимЗаписиДокумента.ОтменаПроведения); Исключение КонецПопытки; // Пробовала так : ТаблЧастьРазделы = ДокументОбъект.Разделы; Разделы_Корр = ТаблЧастьРазделы.НайтиСтроки(новый Структура("Контрагент,ДоговорКонтрагента",СтрокаРаз.Контрагент,СтрокаРаз.Основание)); Для каждого СтрокаРаз_Корр из Разделы_Корр цикл ТаблЧастьРазделы.Удалить(СтрокаРаз_Корр); конеццикла; // И так : ТаблЧастьРазделы = Док.Разделы; Разделы_Корр = ТаблЧастьРазделы.НайтиСтроки(новый Структура("Контрагент,ДоговорКонтрагента",СтрокаРаз.Контрагент,СтрокаРаз.Основание)); Для каждого СтрокаРаз_Корр из Разделы_Корр Цикл НомерРаздела = СтрокаРаз_Корр.НомерРаздела; КолВо = Разделы_Корр.Количество(); СтрокаРаз_Корр.УДалить(); Инд=0; Пока Инд<КолВо Цикл //Строка = Разделы_Корр[Инд]; Разделы_Корр.УдалитьСтроку(Инд); Инд=Инд+1; КонецЦикла; КонецЦикла; // И так : мас = новый массив; Для каждого СтрокаРаз_Корр из Разделы_Корр цикл НомерРаздела = СтрокаРаз_Корр.НомерРаздела; мас.Добавить(СтрокаРаз_Корр); КонецЦикла; Для каждого Строка_Корр из мас цикл Разделы_Корр.Удалить(Строка_Корр); КонецЦикла; //Попытка // Док.Записать(РежимЗаписиДокумента.Запись); //Исключение //КонецПопытки; |
|||
1
svchernova
25.01.10
✎
06:44
|
СтрокаРаз получена как параметр процедуры (СтрокаРаз.Контрагент,СтрокаРаз.Основание), т.е. в табличной части я нахожу строчки с нужным контрагентом и основанием и пытаюсь удалить эти строчки
|
|||
2
AmoreMe
25.01.10
✎
07:04
|
когда мне нужно было удалить строки в табличной части кроме выбранных я делал так (под себя переделать не проблема)
Процедура ОсновныеДействияФормыВыполнить(Кнопка) ЧислоСтрок = ДокументОбъект.ДанныеПоставщика.Количество(); Пока ЧислоСтрок > 0 Цикл ЧислоСтрок = ЧислоСтрок -1; Для Каждого ТекСтрока Из ДокументОбъект.ДанныеПоставщика Цикл Удалить = Истина; Для Каждого СтрокаТаблицыМест Из ВыбранныеМеста Цикл Если ТекСтрока.НомерМеста = СтрокаТаблицыМест.НомерМеста Тогда Удалить = Ложь; Прервать; КонецЕсли; КонецЦикла; Если Удалить Тогда ДокументОбъект.ДанныеПоставщика.Удалить(ТекСтрока); КонецЕсли; КонецЦикла; КонецЦикла; Форма = ДокументОбъект.ПолучитьФорму("ФормаДокумента"); Форма.ЗаполнениеПрописей(); Модифицированность = Ложь; КонецПроцедуры |
|||
3
svchernova
25.01.10
✎
07:10
|
Сейчас попробую разобрать твой код, AmoreMe.. Спасибо
|
|||
4
svchernova
25.01.10
✎
08:13
|
Получилось! Спасибо, AmoreMe!!!!!!!!!!!!
|
|||
5
ASU_Diamond
25.01.10
✎
08:42
|
(2)
Пока ЧислоСтрок > 0 Цикл ЧислоСтрок = ЧислоСтрок -1; Для Каждого ТекСтрока Из ДокументОбъект.ДанныеПоставщика Цикл Удалить = Истина; Для Каждого СтрокаТаблицыМест Из ВыбранныеМеста Цикл Если ТекСтрока.НомерМеста = СтрокаТаблицыМест.НомерМеста Тогда Удалить = Ложь; Прервать; КонецЕсли; КонецЦикла; Если Удалить Тогда ДокументОбъект.ДанныеПоставщика.Удалить(ТекСтрока); КонецЕсли; КонецЦикла; КонецЦикла; А для чего нужно такое количество раз проходить табличную часть? за один раз не прокатит? (0) ТаблЧастьРазделы = ДокументОбъект.Разделы; Разделы_Корр = ТаблЧастьРазделы.НайтиСтроки(новый Структура("Контрагент,ДоговорКонтрагента",СтрокаРаз.Контрагент,СтрокаРаз.Основание)); Для каждого СтрокаРаз_Корр из Разделы_Корр цикл ТаблЧастьРазделы.Удалить(СтрокаРаз_Корр); конеццикла; это должно работать, что не получается? |
|||
6
Mitriy
25.01.10
✎
08:48
|
(5) присоединяюсь к вопросу - через НайтиСтроки самый удобный вариант...
|
|||
7
svchernova
25.01.10
✎
08:52
|
Для бриллианта:
Сделала вот так: Док = Ссылка.ПолучитьОбъект(); Для каждого ТекСтрока из Док.Разделы Цикл Если ТекСтрока.Контрагент = СтрокаРаз.Контрагент И ТекСтрока.ДоговорКонтрагента = СтрокаРаз.Основание Тогда Док.Разделы.Удалить(ТекСтрока); КонецЕсли; КонецЦикла; Получилось. Сейчас твой вариант попробую, тем более что с него примерно и начала |
|||
8
svchernova
25.01.10
✎
08:56
|
Прокатило!!!!!!!!!!!!!!!!
|
|||
9
ASU_Diamond
25.01.10
✎
08:56
|
(7) 1. Вопрос был не к тебе :)
2. Это не мой вариант, а твой, я скопипастил :) |
|||
10
svchernova
25.01.10
✎
08:56
|
спасибо, парни :)
|
|||
11
ASU_Diamond
25.01.10
✎
08:56
|
(8) ты издеваешься? что тогда не получилось в первый раз?
|
|||
12
svchernova
25.01.10
✎
08:56
|
странно.. сейчас сравню
|
|||
13
svchernova
25.01.10
✎
08:58
|
Слушай, а ведь действительно это мой вариант.. это я в 12 ночи делала, видать совсем загомырилась.. Работает!
|
|||
14
Злобный Йожег
25.01.10
✎
08:59
|
(0) Здравствуй, Света!
|
|||
15
Mitriy
25.01.10
✎
08:59
|
(7) не пойдет... в корзину...
|
|||
16
ASU_Diamond
25.01.10
✎
09:00
|
(15) +1, при первом же удалении слетает выборка
|
|||
17
Злобный Йожег
25.01.10
✎
09:01
|
(15) Интересно, она где-то работает? :)))
|
|||
18
Stim
25.01.10
✎
09:01
|
(16)+1
только через структуру |
|||
19
ASU_Diamond
25.01.10
✎
09:03
|
кстати (0), следующий раз задавай такие вопросы после 8 по Москве, результативность ответов будет выше
|
|||
20
svchernova
25.01.10
✎
09:03
|
Привет, Ёж. Забанят сейчас
|
|||
21
svchernova
25.01.10
✎
09:04
|
Диамонду - не терпелось вопрос задать
|
|||
22
svchernova
25.01.10
✎
09:05
|
Митрию- вроде всё работает.. какая выборка должна слететь?
|
|||
23
ASU_Diamond
25.01.10
✎
09:07
|
(22) проверь вариант когда нужно удалить 2 строки подряд
|
|||
24
svchernova
25.01.10
✎
09:08
|
Сейчас проверю. скажу
|
|||
25
Mitriy
25.01.10
✎
09:09
|
(22) вроде - не значит правильно... просто пока тебе везло...
|
|||
26
Mitriy
25.01.10
✎
09:10
|
(25) после каждого удаления количество строк уменьшается, индексы сдвигаются - одна строка пропускается...
|
|||
27
ASU_Diamond
25.01.10
✎
09:13
|
Для агу=1-Док.Разделы.Количество() По 0 Цикл
ТекСтрока = Док.Разделы[-агу]; Если ТекСтрока.Контрагент = СтрокаРаз.Контрагент И ТекСтрока.ДоговорКонтрагента = СтрокаРаз.Основание Тогда Док.Разделы.Удалить(ТекСтрока); КонецЕсли; КонецЦикла; |
|||
28
Stim
25.01.10
✎
09:16
|
СтруктураДляПоиска = Новый Структура("Количество", 0);
ОбъектДок = СсылкаДок.ПолучитьОбъект(); ТабличнаяЧастьДок = ОбъектДок.Товары; МассивПустыхСтрок = ТабличнаяЧастьДок.НайтиСтроки(СтруктураДляПоиска); Для каждого Строка Из МассивПустыхСтрок Цикл ТабличнаяЧастьДок.Удалить(Строка); КонецЦикла; |
|||
29
svchernova
25.01.10
✎
09:22
|
я проверила.
Тот мой вариант, который как будто не работал - работает для двух строк, все удалились |
|||
30
svchernova
25.01.10
✎
09:22
|
ТаблЧастьРазделы = ДокументОбъект.Разделы;
Разделы_Корр = ТаблЧастьРазделы.НайтиСтроки(новый Структура("Контрагент,ДоговорКонтрагента",СтрокаРаз.Контрагент,СтрокаРаз.Основание)); Для каждого СтрокаРаз_Корр из Разделы_Корр цикл ТаблЧастьРазделы.Удалить(СтрокаРаз_Корр); конеццикла; ------------этот вариант |
|||
31
svchernova
25.01.10
✎
09:24
|
вот этот тоже работает - тут нет выборки
//работающий вариант Для каждого ТекСтрока из Док.Разделы Цикл Если ТекСтрока.Контрагент = СтрокаРаз.Контрагент И ТекСтрока.ДоговорКонтрагента = СтрокаРаз.Основание Тогда Док.Разделы.Удалить(ТекСтрока); КонецЕсли; КонецЦикла; |
|||
32
Stim
25.01.10
✎
09:24
|
(29) спать надо больше просто:)
|
|||
33
svchernova
25.01.10
✎
09:24
|
(32)Да :)
|
|||
34
Stim
25.01.10
✎
09:25
|
(31) это некорректный вариант.когда удаляшь строки, то удаляешь индексы строк, и нарушается обход
|
|||
35
Mitriy
25.01.10
✎
09:26
|
(29) потом не жалуйся...
|
|||
36
Aprobator
25.01.10
✎
09:27
|
(29) видно эти 2 строки не подряд просто были, а как минимум через одну.
|
|||
37
Mitriy
25.01.10
✎
09:27
|
(35) к (31)
|
|||
38
ASU_Diamond
25.01.10
✎
09:29
|
(31) после (8) я не удивлюсь что все варианты теперь работают :)
|
|||
39
svchernova
25.01.10
✎
09:30
|
елки..
совсем вразброд у меня всё в голове.. строки подряд были! сейчас поработаю, проверю, вы мне кодов кучу дали. разные документы возьму, хорошие примеры отработаю |
|||
40
Mitriy
25.01.10
✎
09:32
|
(39) сделай свой вариант через НайтиСтроки и не парься...
|
|||
41
ASU_Diamond
25.01.10
✎
09:32
|
(28) не рабочий код оказывается в простых примерах
Строка - зарезервированное слово, нельзя так переменную называть |
|||
42
Stim
25.01.10
✎
09:34
|
(41) со всеми вопросами к Габецу и Гончарову :)
|
|||
43
svchernova
25.01.10
✎
09:40
|
Я благодарна всем, спасибо.
Я без этого форума не смогла бы работать, всё новое.. Инструмент тяжёлый в 1С. |
|||
45
palpetrovich
25.01.10
✎
09:51
|
(43) "Инструмент тяжёлый в 1С" - че за инструмент-то? ;))
|
|||
46
svchernova
25.01.10
✎
09:56
|
Я имею ввиду конструкцию языка. множество типов данных и объектов со своими методами.
просто так if-else-endif не получится. У меня очень маленький опыт в 1С, и могу быть неправа, но думаю, что именно из-за такого тяжелого инструмента так много всевозможных 1С сайтов и форумов. |
|||
47
svchernova
25.01.10
✎
10:01
|
Осановилась на варианте ASU_Diamond.
индексы учтены.. работает. спасибо Для агу=1-Док.Разделы.Количество() По 0 Цикл ТекСтрока = Док.Разделы[-агу]; Если ТекСтрока.Контрагент = СтрокаРаз.Контрагент И ТекСтрока.ДоговорКонтрагента = СтрокаРаз.Основание Тогда Док.Разделы.Удалить(ТекСтрока); КонецЕсли; КонецЦикла; |
|||
48
Злобный Йожег
25.01.10
✎
10:03
|
(20) Кого? Тебя за тупые вопросы? Меня-то точно нет...
|
|||
49
Stepa86
25.01.10
✎
10:06
|
(47) через НайтиСтроки() уже предлагали?
|
|||
50
svchernova
25.01.10
✎
10:17
|
(49) НайтиСтроки() был мой вариант изначально
Ёжик, у меня действительно тупые вопросы. Может быть, я тупая? Но я работала и начальником отдела, и главным специалистом в ERP. Недавно пришлось уйти в 1С и мне сложно. всё другое, здесь сектантство какое-то. Пусть тупые, но я всё равно их буду задавать и постигать всю эту кухню. Разве ты не начинал когда-то? Не будь таким колючим. А забанят за off |
|||
51
ASU_Diamond
25.01.10
✎
12:48
|
(47) что за индексы? О_о
|
|||
52
Злобный Йожег
25.01.10
✎
13:55
|
(50) Ну я, допустим, для начала кое-какие специальные курсы закончил...
|
|||
53
svchernova
25.01.10
✎
14:34
|
Мы все хорошо знаем, что дают курсы. Общее представление, пинка для рывка. А вот когда реально начинается работа, тогда выплывает много чего. И я заканчивала, и два сертификата от ibm имею, и знаю, что такое курсы.
|
|||
54
svchernova
25.01.10
✎
14:43
|
(51) Имела ввиду, что не соскочит выборка.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |