Имя: Пароль:
1C
1С v8
V8: Удаление строки из документа
0 Лирик
 
23.03.12
08:21
Народ, это как?
Код следующий:
В форме:

&НаСервере
Процедура УдалитьСтрокуНаСервере(ЗначениеКолонки)

   ДокументОбъект = РеквизитФормыВЗначение("Объект");
   ДокументОбъект.УдалитьСтрокуИзДокумента(ЗначениеКолонки);
   ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");

КонецПроцедуры

На сервере:

Процедура УдалитьСтрокуИзДокумента(ЗначениеКолонки) Экспорт

   МассивСтрок = МояТабличнаяЧасть.НайтиСтроки(Новый Структура("КолонкаИмя", ЗначениеКолонки));
   Для каждого СтрокаМассива Из МассивСтрок Цикл
       МояТабличнаяЧасть.Удалить(СтрокаМассива);    
   КонецЦикла;
   
КонецПроцедуры

Строку удаляет, но в следующей строке присваивает "КолонкаИмя = ЗначениеКолонки"

То есть если таб. часть была

"А" 123
"Б" 258
"В" 456

И удалим "А"

То стала
"А" 258
"В" 456
1 fantomask
 
23.03.12
08:24
ну попробуй обнулить А
2 Лирик
 
23.03.12
08:29
(1) Я мож не довел до сообщества:

В следующей строке таб части колонке по которой ищем присваивается искомое значение которое должно быть удалено вместе со строкой.
3 Мимохожий Однако
 
23.03.12
08:44
Как только ты удаляешь строку, надо заново начинать обход по массиву,т.к. он перестает соответствовать получившейся табличной части. Поменяй алгоритм удаления в процедуре УдалитьСтрокуДокумента
4 Лирик
 
23.03.12
08:45
Разобрался, но странно - баг / не баг:

Процедура УдалитьСтрокуНаСервере(ЗначениеКолонки) вызывеется из команды.

Дак вот это косячит:
&НаКлиенте
Процедура КомандаУдалитьСтрокуТЧ(Команда)
   
   ТекущиеДанныеТЧ = Элементы.МояТабличнаяЧасть.ТекущиеДанные;
   
   Если ТекущиеДанныеТЧ = Неопределено Тогда
       Возврат;
   КонецЕсли;
   
   // Удалить строку
   
   УдалитьСтрокуНаСервере(ТекущиеДанныеТЧ.МоеИмяКолонки);
   
КонецПроцедуры

А это отрабатывает нормально:

Процедура КомандаУдалитьСтрокуТЧ(Команда)
   
   ТекущиеДанныеТЧ = Элементы.МояТабличнаяЧасть.ТекущиеДанные;
   
   Если ТекущиеДанныеТЧ = Неопределено Тогда
       Возврат;
   КонецЕсли;
   
   // Удалить строку
   ЗначениеКолонки = ТекущиеДанныеТЧ.МоеИмяКолонки;
   УдалитьСтрокуНаСервере(ЗначениеКолонки);
   
КонецПроцедуры
5 Лирик
 
23.03.12
08:54
(3) Не скажи кому - засмеют.
6 Лирик
 
23.03.12
09:04
В общем, по значению надо передавать в серверную процедуру. Спасибо всем кто попытался помочь.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.