Как стереть строку из табличной части документа
01.07.2008
15:22
#1
"Постановка задачи:
есть документ с многострочной частью (типа накладной)
у него есть модуль формы.
в многострочной части есть несколько реквизитов
№№ номенклатура количество
п/п
1 Ложка большая 80 шт.
2 Чашка маленькая 50 шт.
надо: при ошибки в выборе количества (больше 100 шт.) выдавать окно ошибки и стирать последнюю строку (если документ новый) или восстанавливать ее (если редактируется уже существующий документ).
В свойствах реквизита "количество" указываю формулу контр_ошибк()
В модуле пишу процедуру:
процедура контр_ошибк()
...
если выбратьстроки()=1 тогда
пока получитьстроку()=1 цикл
если количество>100 тогда
предупреждение ("..");
удалитьстроку();
конецесли;
конеццикла;
конецесли;
конецпроцедуры
мне при выполнении документа, если я ввожу например 101 шт, мне выдается ошибка "невозможно удалить строку"
Пожалуйста, помогите"
есть документ с многострочной частью (типа накладной)
у него есть модуль формы.
в многострочной части есть несколько реквизитов
№№ номенклатура количество
п/п
1 Ложка большая 80 шт.
2 Чашка маленькая 50 шт.
надо: при ошибки в выборе количества (больше 100 шт.) выдавать окно ошибки и стирать последнюю строку (если документ новый) или восстанавливать ее (если редактируется уже существующий документ).
В свойствах реквизита "количество" указываю формулу контр_ошибк()
В модуле пишу процедуру:
процедура контр_ошибк()
...
если выбратьстроки()=1 тогда
пока получитьстроку()=1 цикл
если количество>100 тогда
предупреждение ("..");
удалитьстроку();
конецесли;
конеццикла;
конецесли;
конецпроцедуры
мне при выполнении документа, если я ввожу например 101 шт, мне выдается ошибка "невозможно удалить строку"
Пожалуйста, помогите"
01.07.2008
15:37
#2
"Для нового элемента при выборе из подбора
Процедура ОбработкаПодбора(ВыбТовар)
Кол=0;
Если ВвестиЧисло(Кол,"Введите количество",10,3)=1 Тогда
Если Кол>=100 Тогда
Возврат;
Иначе
НоваяСтрока();
//и т.д.
КонецЕсли;
//и т.д.
Для уже существующего элемента при вводе нового количества
Процедура ПриНачалеВыбораЗначения(Элемент)
Если Элемент="Количество" Тогда
СтароеКоличество=Количество;//СтароеКоличество <- Глобальная переменная текущего модуля
КонецЕсли;
КонецПроцедуры
Процедура ВыбКоличество()
Если Количество>=100 Тогда
Количество=СтароеКоличество;//СтароеКоличество <- Глобальная переменная текущего модуля
КонецЕсли;
КонецПроцедуры
"
Процедура ОбработкаПодбора(ВыбТовар)
Кол=0;
Если ВвестиЧисло(Кол,"Введите количество",10,3)=1 Тогда
Если Кол>=100 Тогда
Возврат;
Иначе
НоваяСтрока();
//и т.д.
КонецЕсли;
//и т.д.
Для уже существующего элемента при вводе нового количества
Процедура ПриНачалеВыбораЗначения(Элемент)
Если Элемент="Количество" Тогда
СтароеКоличество=Количество;//СтароеКоличество <- Глобальная переменная текущего модуля
КонецЕсли;
КонецПроцедуры
Процедура ВыбКоличество()
Если Количество>=100 Тогда
Количество=СтароеКоличество;//СтароеКоличество <- Глобальная переменная текущего модуля
КонецЕсли;
КонецПроцедуры
"
01.07.2008
18:14
#4
"Я бы не стремилась именно УДАЛЯТЬ строку из ТЧ при возможной ошибке. Ибо ошибившись, надо будет забивать удаленную строку заново, вместо того, чтобы просто подправить количество. А если редактирование? и случайно 102? и все ичезло? а номенклатуру не помню?
Мое предложение: обнулять Количество пока оно не будет удовлетворять условию (не больше 100) с выводом соответствующего Предупреждения, а при записи дока проверять ТЧ на нулевые значения количества. Если есть, то опять же Предупреждение и возвращение на форму.
Но уж если ОЧЕНЬ хочется именно удалить то, предлагаю делать это в предопределенной процедуре:
Процедура ПриОкончанииРедактированияСтроки()
Если Количество > 100 Тогда
Предупреждение("Неверное количество!!!");
УдалитьСтроку();
КонецЕсли;
КонецПроцедуры
Конечно придется заполнить все реквизиты ТЧ до конца (если у вас после Количества идет еще что-то типа Цена,Сумма и т.д.),но зато вы гарантированно удалите строку. "
Мое предложение: обнулять Количество пока оно не будет удовлетворять условию (не больше 100) с выводом соответствующего Предупреждения, а при записи дока проверять ТЧ на нулевые значения количества. Если есть, то опять же Предупреждение и возвращение на форму.
Но уж если ОЧЕНЬ хочется именно удалить то, предлагаю делать это в предопределенной процедуре:
Процедура ПриОкончанииРедактированияСтроки()
Если Количество > 100 Тогда
Предупреждение("Неверное количество!!!");
УдалитьСтроку();
КонецЕсли;
КонецПроцедуры
Конечно придется заполнить все реквизиты ТЧ до конца (если у вас после Количества идет еще что-то типа Цена,Сумма и т.д.),но зато вы гарантированно удалите строку. "
03.07.2008
00:33
#7
Самый разумный вариант использовать для заполнения табличной части обработку подбора, в которой и контролировать ввод количества, не позволяя указать заведомо большое значение. при этом метод интерактивного ввода новой строки зарубить и вместо него вызывать обработку подбора.
Остаётся обработать режим редактирования уже введённой строки в котором обрубать значение до предельного в случае когда при окончании редактирования в реквизите количество задано заведомо запредельное значение.
Затирание введённой строки значально являетя неправильным методом, так как способствует занижению скорости ввода данных и соответственно понижению уровня юзабельности, что с точки зрения разработки является неприемлимым. Ну и конечно при обработке ошибки ввода количества должно обязательно выдаваться поясняющее сообщение.
Остаётся обработать режим редактирования уже введённой строки в котором обрубать значение до предельного в случае когда при окончании редактирования в реквизите количество задано заведомо запредельное значение.
Затирание введённой строки значально являетя неправильным методом, так как способствует занижению скорости ввода данных и соответственно понижению уровня юзабельности, что с точки зрения разработки является неприемлимым. Ну и конечно при обработке ошибки ввода количества должно обязательно выдаваться поясняющее сообщение.
Читают тему
(гостей: 1)