|
v7: Активный элемент формы (продолжение) | ☑ | ||
---|---|---|---|---|
0
Downkey
14.08.11
✎
12:58
|
Начало: на форме имеется поле ввода, которое открывает справочник номенклатуры дял подбора, текстовое поле для ввода серийника и табличная часть справочника. После выбора номенклатуры вводятся серийники.
По совету мудрых товарищей, я справился с пробемой принудительной активации поля для ввода серийника, ну, чтоб после ввода, курсор не перескакивал в табличную часть, а возвращался в поле серийника. Но тут возникла следующая проблема - при изменении номенклатуры, после ввода серийника, вываливается ошибка: Активизировать("Серийник"); {Справочник.Серийники.ФормаСписка.СерийникиВвод.Модуль(113)}: В данной формуле не может быть вызвана эта процедура(функция) Почеу не может быть вызвана? Ведь если номенклатура не изменяется - все вызывается корректно! |
|||
1
Rie
14.08.11
✎
13:02
|
(0) Используй фиктивное закрытие.
Активизировать - оно плохо себя ведёт в формулах полей ввода. |
|||
2
Downkey
14.08.11
✎
13:03
|
Я как раз через фиктивное закрытие и делаю:
Процедура ПриЗакрытии() Если МожноЗакрыть=0 тогда Активизировать("Серийник"); СтатусВозврата(0); КонецЕсли; МожноЗакрыть=1; КонецПроцедуры // ПриЗакрытии |
|||
3
Downkey
14.08.11
✎
13:05
|
(1) Rie, ты участвовал тогда в моей теме.. Активный элемнет формы
|
|||
4
Rie
14.08.11
✎
13:06
|
(2) Вероятно, где-то ещё делаешь. Поскольку "В данной _формуле_".
|
|||
5
Rie
14.08.11
✎
13:07
|
(3) Виноват. Больше не повторится :-)
|
|||
6
Downkey
14.08.11
✎
13:10
|
(5) не-не-не... повторяйся!!
делаю ТОЛЬКО в одном месте. Если номенклатура не изменяется , т.е. если серийники вводятся для одной позиции - все ОК. А если позицию изменить - ошибка!, и в табличной части вываливается список серийников (подчиненного справочника) для исходной позиции, а не для измененной! вот я чего еще не пойму. |
|||
7
Rie
14.08.11
✎
13:18
|
(6) А как ты меняешь _позицию_-номенклатуру? Что в этом случае срабатывает?
И где стоит Форма.Закрыть()? |
|||
8
Downkey
14.08.11
✎
13:23
|
Форма.Закрыть() стоит в двух местах - в формуле поля выбора номенклатуры и в формуле обработки текстового поля серийника.
//* формула поля выбора номенклатуры Процедура Всерийник() ИспользоватьВладельца(ВыбНоменклатура); ИерархическийСписок(1,0); Серийник=""; // очищаем поле МожноЗакрыть=0; Форма.Закрыть(0); КонецПроцедуры //** формула обработки ввода серийника Процедура Всправочник() Если ПустоеЗначение(ВыбНоменклатура)=0 тогда спрСер.Новый(); спрСер.Номенклатура=ВыбНоменклатура; спрСер.Наименование=Серийник; спрСер.ДатаПост=ДатаПост1; спрСер.Владелец=ВыбНоменклатура; Форма.Обновить(); Серийник=""; МожноЗакрыть=0; Форма.Закрыть(0); Иначе Предупреждение("Не выбрана номенклатура."); Возврат; КонецЕсли; КонецПроцедуры |
|||
9
Rie
14.08.11
✎
13:45
|
(8) Не совсем понял. Эта форма - форма чего? Почему нет спрСер.Записать()?
|
|||
10
Downkey
14.08.11
✎
13:51
|
(9) На само деле есть, эт я коммент удалил вместе с спрСер.Записать() когда в форум вставлял.
Форма - форма справочника серийных номеров. |
|||
11
Rie
14.08.11
✎
14:12
|
(10) Тупой вопрос - а что говорит по этому поводу товарищ Отладчик? Каким путём добираемся до строки 113?
|
|||
12
Downkey
14.08.11
✎
15:55
|
Все строки процедуры ПриЗакрытии() проходит без претензий, а после того как выходит из процедуры - вываливает ошибку.
Ну да ладно. Я это дело вкорне обошел - изменил немного логику ввода серийников. Но все равно не понятно, почему ругается только при смене номенклатуры и почему после ругательств сбрасывает справочник серийников на первоначального владельца. |
|||
13
Torquader
14.08.11
✎
20:53
|
Есть мнение, что Форма.Обновить и потом Форма.Закрыть - не очень хорошо.
Также интересно, что происходит при обновлении формы (какие формулы вызываются). P.S. перенеси Обновить в ПриЗакрытии, чтобы всё было корректно (то есть сначала активизировали Элемент, а потом уже обновляли). |
|||
14
Злопчинский
15.08.11
✎
01:08
|
".. а возвращался в поле серийника."
в обработке ввода серийника - открываешь МОДАЛЬНО внешнюю обработку. При открытии обработки - СтатусВозврат(0); и возврат - курсор остается в поле ввода. |
|||
15
Downkey
15.08.11
✎
12:10
|
(13) пробовал и без Форма.Обновить - результата тот же.
(14) Обработка ввода серийника это не внешняя обработка, это процедурка в модуле основной формы. Или я чегото недопонимаю. |
|||
16
Злопчинский
15.08.11
✎
17:45
|
(15) включи мозг и прочитай сабж 14 внимательно.
. в обработке ввода серийника - открываешь МОДАЛЬНО внешнюю обработку. . "обработке ввода серийника" - можнозаменить так: ПроцедураПриВводеСерийникаВполеВвода() |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |