|
|
Управляемое приложение. ЗакончитьРедактированиеСтроки() |
☑ |
|
0
zscasl
06.12.16
✎
07:59
|
Привет!
Есть таблица на управляемой форме я хочу в цикле пройтись по всем ее строкам и изменить значение в колонке "количество". Сказано — сделано... но при этом хотелось бы чтоб программное изменение инициировало каскад событий которые происходят при интерактивном изменении поля "количество", а именно, пересчет суммы в строке, пересчет суммы НДС, проверка допустимости введенного значения кол-ва, пересчет суммы всего документа и т.д. Можно конечно в цикле после изменения значения последовательно вызывать все многочисленные процедурки. Но... покапавшись в справке нашел несколько методов ТаблицыФормы которые как мне показалось должны эмитировать интерактивное редактирование строки:
ИзменитьСтроку() - Начинает интерактивное изменение данных текущей строки, аналогично выполнению команды "Изменить".
ЗакончитьРедактированиеСтроки(<ОтменаРедактирования>) - Позволяет закончить или отменить редактирование текущей строки.
Обновить() - Обновляет данные в таблице.
Начал писать код в предвкушении, что после вызова метода ЗакончитьРедактированиеСтроки(Ложь) автоматически произойдут все события и пересчет связанных значений:
Для НомСтрДок = 0 По КоличествоСтрДок - 1 Цикл
Элементы.Услуги.ТекущаяСтрока = НомСтрДок;
Строка = Элементы.Услуги.ТекущиеДанные;
Элементы.Услуги.ИзменитьСтроку();
Строка.Количество = НовоеКоличество;
Элементы.Услуги.ЗакончитьРедактированиеСтроки(Ложь);
Элементы.Услуги.Обновить();
КонецЦикла;
Однако этого не произошло:( Я что-то делаю не так или я вообще не правильно понял смысл этих методов ИзменитьСтроку(), ЗакончитьРедактированиеСтроки()?
|
|
|
1
Mauser
06.12.16
✎
08:02
|
покапавшись эмитировать...
Рановато тебе в программирование.
|
|
|
2
Mauser
06.12.16
✎
08:03
|
Там, в 1С, на русском языке, говорят, пишут.
|
|
|
3
zscasl
06.12.16
✎
08:04
|
(2) Ну а если по существу?)
|
|
|
4
catena
06.12.16
✎
08:08
|
Разве при изменении значения не вызывается одна процедура ПриИзменении?
|
|
|
5
Mauser
06.12.16
✎
08:20
|
(3) Тебе показалось
|
|
|
6
Fedor-1971
06.12.16
✎
09:45
|
(3) автоматически - только при интерактивном изменении
(0) почитай что-нить про разработку управляемых форм.
По сути алгоритма: программно изменил, программно и запусти пересчёт нужных тебе полей.
ИзменитьСтроку(); - вводит строку в режим интерактивного редактирования, проверь отладчиком вход в ПриНачалеРедактирования
ЗакончитьРедактированиеСтроки(Ложь); - закрывает интерактивное редактирование строки, проверяй ПередОкончаниемРедактирования и ПриОкончанииРедактирования
изменил Количество - да без разницы, интерактивно ничего не изменялось, события поля/формы не запускаются
Обновить() - нечего обновлять, ты и так изменял НаКлиенте
совсем правильно: Перейди в процедуру НаСервере (форма отправится на сервер полностью), через Объект.ххх полностью (!!!!) пересчитай таблицу, как тебе нужно и вернись НаКлиент (форма приедет на клиент в готовом виде, обновлять ничего не нужно)
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший