Имя: Пароль:
1C
1С v8
БП: обработка ТЧ док-та (удалить ненужные строки)
,
0 листопад
 
13.04.12
22:12
Пишу обработку заполнения табличных частей док-та, подключила через Сервис - Доп.ВнешниеОбработкиТЧ. Обработка должна перебрать строки и удалить те, у которых счет 19.05 или 19.06. В результате, убирает только где счет 19.05. Подскажите, где ошибка?

Вот код:

Процедура Инициализировать (ДокОбъект, ИмяТабЧасть, ТабЧасть) Экспорт;
   
   Счет1905 = ПланыСчетов.Хозрасчетный.НДСуплачиваемыйТаможеннымОрганам;
   Счет1906 = ПланыСчетов.Хозрасчетный.АкцизыПоОплаченнымМатериальнымЦенностям;
   
   ТабЧасть = ДокОбъект[ИмяТабЧасть];
   Для каждого Строка Из ТабЧасть Цикл
       Если (Строка.СчетУчетаНДС = Счет1905) ИЛИ (Строка.СчетУчетаНДС = Счет1906) Тогда
           ТабЧасть.Удалить(Строка);
       КонецЕсли;
   КонецЦикла;
   
КонецПроцедуры
1 zak555
 
13.04.12
22:13
а движения не интересуют ?
2 листопад
 
13.04.12
22:16
(1)Нет, док-т потом будет проводиться, уже с оставшимися строками.
3 GenV
 
13.04.12
22:19
(0) Неправильно. Сбиваешь выборку "для каждого" при удалении строки. Перебирай по номеру строки.
4 zak555
 
13.04.12
22:20
(2) ноутбук есть ?
5 листопад
 
13.04.12
22:21
(3) а можно поподробнее?
6 zak555
 
13.04.12
22:22
(5) он тебе с конца предлагает удалять
7 листопад
 
13.04.12
22:25
(6) Я это поняла. А как это прописать?
8 GenV
 
13.04.12
22:26
(5) http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=удаление+строк+Табличной+части+1С

первая строчка в конце ссылка на правильное решение
9 zak555
 
13.04.12
22:26
(7) ну так это же коллекцтя => обратись по индексу
10 zak555
 
13.04.12
22:27
(8) первая ссылка про 1 тв
11 GenV
 
13.04.12
22:28
(10) Да, это ссылка тут обрезалась, т.ч. копируй текст
12 zak555
 
13.04.12
22:29
(11) самообрезание ?
13 ОбычныйЧеловек
 
13.04.12
22:31
(0)

Процедура Инициализировать (ДокОбъект, ИмяТабЧасть, ТабЧасть) Экспорт;
   Счет1905 = ПланыСчетов.Хозрасчетный.НДСуплачиваемыйТаможеннымОрганам;
   Счет1906 = ПланыСчетов.Хозрасчетный.АкцизыПоОплаченнымМатериальнымЦенностям;
   
   МассивСтрок=Новый Массив;
   ТабЧасть = ДокОбъект[ИмяТабЧасть];
   Для каждого Строка Из ТабЧасть Цикл
       Если (Строка.СчетУчетаНДС = Счет1905) ИЛИ (Строка.СчетУчетаНДС = Счет1906) Тогда
           МассивСтрок.Добавить(Строка);
       КонецЕсли;
   КонецЦикла;
   
   Для каждого Строка Из МассивСтрок Цикл
       ТабЧасть.Удалить(Строка);
   КонецЦикла;    
КонецПроцедуры
14 Один С
 
13.04.12
22:32
я за попкорном..
15 GenV
 
13.04.12
22:33
(12) Да, не надо было в юникоде копировать
Тест: http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=удаление+строк+Табличной+части+1С
16 GenV
 
13.04.12
22:34
15+ фиг )
17 zak555
 
13.04.12
22:35
листопад так ноут есть или нет ?
18 листопад
 
13.04.12
22:36
(13) Спасибо, сделала как Вы написали, выдает ошибку:

Ошибка при получении значения атрибута контекста (СчетУчетаНДС): Выполнение операции невозможно, так как строка была удалена.
19 листопад
 
13.04.12
22:36
(17) Есть, а с какой целью интересуетесь )))
20 ОбычныйЧеловек
 
13.04.12
22:38
(18) Быть такого не может.
21 zak555
 
13.04.12
22:39
(19) видишь как замечательно
у нас уже с тобой общие точки соприкосновения
ты чувствуешь ?
22 ОбычныйЧеловек
 
13.04.12
22:41
Процедура Инициализировать (ДокОбъект, ИмяТабЧасть, ТабЧасть) Экспорт;
   Счет1905 = ПланыСчетов.Хозрасчетный.НДСуплачиваемыйТаможеннымОрганам;
   Счет1906 = ПланыСчетов.Хозрасчетный.АкцизыПоОплаченнымМатериальнымЦенностям;
   
   МассивСтрок=Новый Массив;
   ТабЧасть = ДокОбъект[ИмяТабЧасть];
   Для каждого Строка Из ТабЧасть Цикл
       Если (Строка.СчетУчетаНДС = Счет1905) ИЛИ (Строка.СчетУчетаНДС = Счет1906) Тогда
           МассивСтрок.Добавить(Строка);
       КонецЕсли;
   КонецЦикла;
   
   Для каждого Строка1 Из МассивСтрок Цикл
       ТабЧасть.Удалить(Строка1);
   КонецЦикла;    
КонецПроцедуры
23 листопад
 
13.04.12
22:43
(22) Простите, код в (13) - рабочий. Это была моя ошибка. Еще раз СПАСИБО!!!
24 ОбычныйЧеловек
 
13.04.12
22:44
(23) Конечно рабочий - я никогда не ошибаюсь :) особенно когда я прав :)
25 zak555
 
13.04.12
22:45
*23( и всё 7
26 Один С
 
13.04.12
22:48
(25) дык а чо ты хотел. так всегда - вроде коллектив хороший, но обязательно найдется белая ворона, которая все стадо испортит..
27 zak555
 
13.04.12
22:55
так листопад замужем или как ?
28 листопад
 
13.04.12
22:58
Еще подскажите пож-та, как вставить, чтобы выдавал сообщение, если не находит с ТЧ строки с указанными счетами?

Вот итоговый код:

МассивСтрок=Новый Массив;
ТабЧасть = ДокОбъект[ИмяТабЧасть];
Для каждого Строка Из ТабЧасть Цикл
   Если (Строка.СчетУчетаНДС = Счет1905) ИЛИ (Строка.СчетУчетаНДС = Счет1906) Тогда
       МассивСтрок.Добавить(Строка);
   КонецЕсли;
КонецЦикла;

Для каждого Строка Из МассивСтрок Цикл
   Сообщить ("cчет " + Строка.СчетУчетаНДС+ "   " + Строка.Поставщик + "   сумма - "+ Строка.СуммаВсего + "   НДС - " + Строка.НДСВсего);
   ТабЧасть.Удалить(Строка);
КонецЦикла;
29 zak555
 
13.04.12
22:59
(28) > чтобы выдавал сообщение

сообщить() ? =)
30 листопад
 
13.04.12
23:00
+(28) т.е. обрабатывать (удалять строки) не надо, т.к. их нет.
31 листопад
 
13.04.12
23:00
(29) Да, а куда это вставить:
Сообщить("Нет строк со счетом 19.05 или 19.06!!!");
32 ОбычныйЧеловек
 
13.04.12
23:01
МассивСтрок=Новый Массив;
ТабЧасть = ДокОбъект[ИмяТабЧасть];
Для каждого Строка Из ТабЧасть Цикл
   Если (Строка.СчетУчетаНДС = Счет1905) ИЛИ (Строка.СчетУчетаНДС = Счет1906) Тогда
       МассивСтрок.Добавить(Строка);
   Иначе
       Сообщить("Нет строк со счетом 19.05 или 19.06!!!");
   КонецЕсли;
КонецЦикла;

Для каждого Строка Из МассивСтрок Цикл
   Сообщить ("cчет " + Строка.СчетУчетаНДС+ "   " + Строка.Поставщик + "   сумма - "+ Строка.СуммаВсего + "   НДС - " + Строка.НДСВсего);
   ТабЧасть.Удалить(Строка);
КонецЦикла;
33 zak555
 
13.04.12
23:02
(31) ты почему-то выборочно отвечаешь на мои вопросы
34 ОбычныйЧеловек
 
13.04.12
23:02
МассивСтрок=Новый Массив;
ТабЧасть = ДокОбъект[ИмяТабЧасть];
Для каждого Строка Из ТабЧасть Цикл
   Если (Строка.СчетУчетаНДС = Счет1905) ИЛИ (Строка.СчетУчетаНДС = Счет1906) Тогда
       МассивСтрок.Добавить(Строка);
   КонецЕсли;
КонецЦикла;

Если МассивСтрок.Количество()=0 Тогда
   Сообщить("Нет строк со счетом 19.05 или 19.06!!!");
КонецЕсли;

Для каждого Строка Из МассивСтрок Цикл
   Сообщить ("cчет " + Строка.СчетУчетаНДС+ "   " + Строка.Поставщик + "   сумма - "+ Строка.СуммаВсего + "   НДС - " + Строка.НДСВсего);
   ТабЧасть.Удалить(Строка);
КонецЦикла;
35 zak555
 
13.04.12
23:03
(34) дав прохода - это много
36 ОбычныйЧеловек
 
13.04.12
23:04
(35) Это бесплатный код - учитывай это.
37 zak555
 
13.04.12
23:08
(36) так ты учитель плохого ?
38 листопад
 
13.04.12
23:09
(36) Спасибо, добрый человек!!!
39 ОбычныйЧеловек
 
13.04.12
23:16
(37)я не учитель, а если нужен учитель то это к GROOVY
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший