Имя: Пароль:
1C
1C 7.7
v7: Установить курсор на реквизит после ввода новой строки
0 Jenstel
 
20.07.15
17:06
Доброго времени суток.
Есть форма документа, на ней поле с реквизитом для ввода. После ввода реквизита в табличную часть добавляется строка. Как возвращать курсор в поле ввода после каждого добавления новой строки? Активизировать() можно вызывать только в предопределенных процедурах...
1 Aprobator
 
20.07.15
17:14
Что то - Активизировать можно вызвать только в предопределенных процедурах, меня немного смущает.
2 Jenstel
 
20.07.15
17:19
Я не сам это придумал. Это был ответ на поиск по ошибке

Активизировать(РеквизитДляВвода);
{Документ.Оплата.Форма.Модуль(68)}: В данной формуле не может быть вызвана эта процедура(функция)
3 Fedor-1971
 
20.07.15
17:20
там где добавляешь строку и верни фокус на нужный тебе элемент.
Читай СП:
Активизировать(<?>,);
Синтаксис:
Активизировать(<ИмяРеквизита>,<Режим>)
Назначение:
Активизировать для редактирования поле диалога.
Параметры:
<ИмяРеквизита> - необязательный параметр. Строка с именем поля диалога, которое нужно активизировать. Пустое имя элемента диалога используется для активизации всей формы.
<Режим> -  необязательный параметр. Имеет смысл только для строк списков. Число: 1 - войти в режим редактирования, 0 - не входить. Значение по умолчанию - 1.
Замечание:
Метод  Активизировать может быть вызван из другого (внешнего) модуля, если в нем известен контекст формы, в которой нужно активизировать элемент диалога. Доступ к методу возможен
4 Fedor-1971
 
20.07.15
17:24
3+ только в контексте Модуля формы.
Не заметил, что не всё выделилось.
  Т.е. прямо в модуле формы, можешь активизировать элемент формы, а если вызвал нечто внешнее (например, процедуру глобального модуля), удостоверься, что туда поехал контекст формы, иначе ничего не активизируешь.
5 Jenstel
 
20.07.15
17:24
(3) Я в это функции и вызываю Активизировать(РеквизитДляВвода, 1)
В самом конце, после ввода строки и обнулении введенного значения.
6 Aprobator
 
20.07.15
17:25
и вообще, кури - ТекущийЭлемент()
7 Aprobator
 
20.07.15
17:25
а тут походу обычные формы
8 Fedor-1971
 
20.07.15
17:26
(5) РеквизитДляВвода - так называется поле ввода на форме?
(7) тут вообще 7.7
9 Aprobator
 
20.07.15
17:27
блин )))
10 Jenstel
 
20.07.15
17:27
(8) Да, идентификатор реквизита
11 Fedor-1971
 
20.07.15
17:30
(10) а надо строка с идентификатором в ""
12 palpetrovich
 
20.07.15
17:46
(0) дык, "Активизировать() можно вызывать только в предопределенных процедурах"  - это и есть верный ответ и решение!
13 palpetrovich
 
20.07.15
17:48
+(12)
Перем МожноЗакрыть;
//======================================================================

Процедура ПриЗакрытии()
    Если МожноЗакрыть = 0 Тогда
        Активизировать("ШтрихКод", 1);
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
КонецПроцедуры// ПриЗакрытии

//======================================================================
Процедура ИзмШтрихКод()
    // обработка ШК

    Форма.Закрыть();
КонецПроцедуры// ИзмШтрихКод

//======================================================================
Процедура КнопкаЗакрыть()
    МожноЗакрыть = 1;
    Форма.Закрыть();
КонецПроцедуры// Закрыть
14 Fedor-1971
 
20.07.15
18:00
(12) Перепроверил по стандартной конфигурации, по ходу так оно и есть.
15 HawkEye
 
20.07.15
19:20
(14) так и есть, для того чтобы сработало активизировать() используют фиктивное закрытие, как в (13)
16 Jenstel
 
21.07.15
09:57
(13) Нашел в сети аналогичный ответ. Сделал все также, но при вызове вылетает диалог с запросом на сохранения документа, а если вызывать Форма.Закрыть(0), то просто закрывается.
17 HawkEye
 
21.07.15
10:55
(16) значит не срабатывает условие.
Если МожноЗакрыть = 0 Тогда
18 palpetrovich
 
21.07.15
11:14
(16) а активизировал где-нить ПриОткрытии МожноЗакрыть = 0  ?
19 Jenstel
 
21.07.15
12:31
(18) [code]МожноЗакрыть = 0;
    Форма.Закрыть();
    МожноЗакрыть = 1;[/code]
20 palpetrovich
 
21.07.15
12:55
(19) что это? где это в (13)?
не надо изобретать велосипед, добавь  в процедуру ПриОткрытии МожноЗакрыть = 0;  и не меняй (13)
21 Jenstel
 
21.07.15
13:35
Не помогает так тоже.
Процедура ПриОткрытии()
    Активизировать("ШтрКод", 1);
    МожноЗакрыть = 0;
КонецПроцедуры

При открытии курсор ставится куда нужно

В обработке вызываю
Форма.Закрыть();
Вылетает диалог и все. Закрыть форму теперь нельзя
МожноЗакрыть всегда остается 0
22 Jenstel
 
21.07.15
13:39
Такое ощущение, что диалог на закрытие документа срабатывает раньше, чем процедура ПриЗакрытии()
23 HawkEye
 
21.07.15
13:44
(19) отладчик то что говорит?
24 HawkEye
 
21.07.15
13:45
(21) название переменных у тебя нигде не пересекается?
нет реквизита документа МожноЗакрыть ?
25 palpetrovich
 
21.07.15
14:15
(22) ты на кнопку Закрыть вместо стандартной формулы повесть КнопкаЗакрыть() из (13) - и будет тебе щасте :)
26 Jenstel
 
21.07.15
14:41
(24) Реквизита такого нет, пробовал сменить имя переменной. (25) Повесил, результат тот же, вылетает диалог на сохранение документа
27 palpetrovich
 
21.07.15
16:22
(26) лови  http://rghost.ru/6NXD58MbB
28 Jenstel
 
21.07.15
16:40
(27) Я еще утром попробовал сделать внешнюю обработку, тоже все работает как нужно. Но вот как только начинаешь тоже самое делать на форме документа, то вылетает диалог на сохранение. Ведь во внешней обработке просто форма и там нет диалога сохранения.
29 HawkEye
 
21.07.15
16:51
(28) давай код...

вот это работает:
Перем МожноЗакрыть;
//======================================================================
Процедура ПриОткрытии()
    МожноЗакрыть = 1;
КонецПроцедуры    
//======================================================================
Процедура ПриЗакрытии()
    Если МожноЗакрыть = 0 Тогда  
        МожноЗакрыть = 1;
        Активизировать("НомерДок", 1);
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
КонецПроцедуры// ПриЗакрытии
//======================================================================
Процедура ПриИзмененииРеквизита()  
    МожноЗакрыть = 0;
    Форма.Закрыть(0);
КонецПроцедуры
30 Jenstel
 
21.07.15
17:25
Перем МожноЗакрыть;
// ================================  
Процедура ВводНового()
    ДатаДок=РабочаяДата();
КонецПроцедуры
// ================================  
Процедура ПриОкончанииРедактированияСтроки()  
    Если ПустоеЗначение(ЛицевойСчет)=1 Тогда
           Статусвозврата (0);
    КонецЕсли;  
КонецПроцедуры
// ================================
Процедура ПриЗакрытии()
    Если МожноЗакрыть = 0 Тогда
               МожноЗакрыть = 1;
           Активизировать("ШтрКод", 1);
       СтатусВозврата(0);
       Возврат;
        КонецЕсли;
КонецПроцедуры
// ================================
Процедура ПриОткрытии()
    Активизировать("ШтрКод", 1);
    МожноЗакрыть = 0;
КонецПроцедуры
//*******************************************
Процедура ПлатежПоШтрихКоду()
    Если ПустаяСтрока(ШтрКод) = 1 Тогда
        Возврат;
    КонецЕсли;
    
    ШтрКод = Врег(СтрЗаменить(ШтрКод, "Т", "N"));
    // бла бла бла парсинг ШК
    ШтрКод = "";
    МожноЗакрыть = 0;
    Форма.Закрыть();
КонецПроцедуры
31 Jenstel
 
21.07.15
17:30
Мистика, но заработало.

Добавил

Процедура ПриИзмененииРеквизита()  
    МожноЗакрыть = 0;
    Форма.Закрыть(0);
КонецПроцедуры


Всем спасибо
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший