|
v7: Применение метода формы Активизировать() | ☑ | ||
---|---|---|---|---|
0
stpd
12.01.12
✎
09:10
|
В расходном документе клиент попросил НЕ заполнять некоторые колонки табличной части.
Суть в том, что эти поля заполняются автоматически, рассчитываются при выборе товара в зависимости от цены, наличия и прочих характеристик. Клиент хочет для определенных видов товара указывать только конечную сумму. Соответственно, в модуле формы этого документа я вставляю в процедуру ПриВыбореТовара() следующее условие: Если Найти(Товар.Наименование,"метка")=0 Тогда ... // если не помечено - стандартное движение курсора и // стандартная обработка, то есть те самые расчеты ... Иначе // если помечено - переходим сразу к последней колонке Активизировать("Итого",1); КонецЕсли; и получаю в ответ: Активизировать("Итого",1); {Документ.РН.Форма.Модуль(209)}: В данной формуле не может быть вызвана эта процедура(функция) Роюсь в ЖКК, инете - не вижу со своей стороны ошибок. А она - видит. Рассудите, плз. :) |
|||
1
KUBIK
12.01.12
✎
09:12
|
Форма.
|
|||
2
ДенисЧ
12.01.12
✎
09:12
|
Ищи слова "Ложное закрытие"
|
|||
3
dk
12.01.12
✎
09:16
|
может проще нащелкать галок "Пропускать при вводе" в нужных колонках?
правда это для всех, а не выборочно |
|||
4
Shaman100M
12.01.12
✎
09:23
|
(0) клиент-то хочет, но представь себя на месте его оператора - у него отнимут возможность работать вслепую, ему придется думать и смотреть, в каком столбце у него находится курсор в таблице - в количестве или сумме. Просто оставить как есть - для таких позиций автоматический расчет цены и количества, а потом контроль при попытке их изменить.
|
|||
5
stpd
12.01.12
✎
09:34
|
(1) Активизировать("Форма.Разница",1)
Активизировать(Форма.Разница,1) и даже Активизировать(Форма.ТекущаяКолонка(),1), прошедшая в каком-то из подобных запросов в форумах - дают тот же самый результат: "В данной формуле не может быть вызвана..." (2) А подробнее можно? Ложное закрытие - чего? Искать - где? Интернет дает что угодно, только не 1С :) (3) именно - не выборочно. (4) Я вобщем-то уже сделал, что хотел - через WSH.SendKeys. Интерес чисто принципиальный - что за ФОРМУЛА? И почему метод формы, официально обязанный работать в модуле формы, тем не менее в нем не работает? |
|||
6
Ёпрст
12.01.12
✎
09:41
|
||||
7
Ковычки
12.01.12
✎
09:41
|
Форма.Закрыть
ПриЗакрытии Активизировать |
|||
8
stpd
12.01.12
✎
13:06
|
(6) Очередная засада :( :
Форма.Закрыть(0) - якобы закрывающая без вопросов, тем не менее вопрос задает. И закрывает-таки форму, с сохранением или без. |
|||
9
stpd
12.01.12
✎
13:09
|
Век живи -век учись...
Сколько с 1С работаю - впервые узнаю, что есть еще область действия "формула"... |
|||
10
filh
12.01.12
✎
13:14
|
(8) покажи код где Форма.Закрыть(0); и Процедура ПриЗакрытии()
|
|||
11
Ёпрст
12.01.12
✎
13:22
|
(8) форму она не закрывает, ибо статусвозврата в 0 в ПриЗакрытии стоит, это раз, вопросов никаких не задается при этом, это два.
А что ты там пишешь - нам отсюда не видно, это три |
|||
12
stpd
12.01.12
✎
13:49
|
По-моему точная копия того, что на что была ссылка
//****************************************************************************** Процедура ПриЗакрытии() Если МожноЗакрыть=0 тогда Активизировать("Разница",1); СтатусВозврата(0); КонецЕсли; МожноЗакрыть=1; КонецПроцедуры //******************************************* Процедура ПриВыбореТовара(); Если Найти(Товар.Наименование,"метка")=0 Тогда ... // если не помечено - стандартное движение курсора и // стандартная обработка, то есть те самые расчеты ... Иначе // если помечено - переходим сразу к последней колонке МожноЗакрыть = 0; Форма.Закрыть(0); КонецЕсли; КонецПроцедуры |
|||
13
filh
12.01.12
✎
13:53
|
(12) Перем МожноЗакрыть; в начале модуля объявил?
|
|||
14
stpd
12.01.12
✎
13:59
|
Само собой!
|
|||
15
Ёпрст
12.01.12
✎
14:05
|
(14) врешь ведь.
|
|||
16
stpd
12.01.12
✎
14:11
|
почему?
|
|||
17
stpd
12.01.12
✎
14:20
|
Прохожу код отладчиком. Вот что имею:
- в процедуру ПриВыбореТовара() Отладчик входит дважды. Причем подряд. - после чего, наконец, входит в ПриЗакрытии(). Нормально отрабатывает - через условие и СтатусВозврата(0). - и после выхода из ПриЗакрытии() - передо мной запрос на сохранение. На фоне формы с переместившимся курсором. |
|||
18
Ёпрст
12.01.12
✎
14:24
|
(17) ну, а теперь подумай - 2 раза!
первый раз - нормально со статусом возврата 0, второй раз - закрывает форму. |
|||
19
stpd
12.01.12
✎
14:26
|
Когда он инициирует второе закрытие?
При втором прохождении команды Форма.Закрыть(0)? |
|||
20
stpd
12.01.12
✎
14:28
|
Вообще - почему 2 раза?
Первый - обработка выбора из справочника, а второй - выход из режима редактирования ячейки? |
|||
21
Ёпрст
12.01.12
✎
14:36
|
(20) втыкай выполнятьФормулутолькоприизменении(1) - полегчает, или смотри в сторону обрботкаВыбораЗначения
|
|||
22
stpd
12.01.12
✎
17:28
|
Включил Форма.Товар.ВыполнятьФормулуТолькоПриИзменении(1).
Пошел проверять отладчиком. Эффект - тот же: при заполнении пустой ячейки, т.е. изменении, процедура ПриВыбореТовара() вызывается дважды. Плюнул, перекурил. Попробовал еще раз. Твою мать! Одно прохождение! Что я сделал?!! Методом научного тыка определил: - при работе мышью (выбор товара в справочнике двойным кликом) - имеем два прохода ПриВыбореТовара() и запрос на сохранение. - при работе клавой (стрелки и Enter) - проход один и запроса на сохранение нет. Форма ведет себя так как я и хотел. Всем спасибо. Тему можно считать закрытой. |
|||
23
Ёпрст
12.01.12
✎
17:36
|
Смотри еще событие ОбработкаВыбораЗначения - оно всегда 1 раз будет.. если че.
|
|||
24
stpd
12.01.12
✎
18:43
|
(23) Именно. И ведь пользовался же раньше :) Но не знал этого нюанса...
Окончательно получилось так, что пресловутую формулу - выкинул нафиг. А код переместил в ОбработкаВыбораЗначения(): Процедура ОбработкаВыбораЗначения(ТекЗнач,ТекЭлем,Флаг) Если ТекЭлем = "Товар" Тогда Если Найти(ТекЗнач.Наименование,"метка")=0 Тогда ... //Всяко разно... Иначе Активизировать("Разница",1); КонецЕсли; КонецЕсли; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |