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
В общем, по значению надо передавать в серверную процедуру. Спасибо всем кто попытался помочь.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший