Подскажите как можно программно пропустить реквизиты на форме

1. dicwork 26.09.12 16:56 Сейчас в теме
Есть обработка. При выборе в определенное поле данных из справочника подставляются данные в четыре следующих поля. А как программно пропустить эти поля, чтобы не проходить по ним.
Сейчас сделал так:
[1C-CODE] Форма.фоДолжностьСтарая.Доступность(0);
Форма.фоПодразделениеСтарое.Доступность(0);
Форма.фоОкладТарифСтарый.Доступность(0);
Форма.фоРазрядСтарый.Доступность(0);
Форма.Активизировать("фоПодразделениеНовое", 1);
[/CODE
при выполнении ругается
Форма.Активизировать("фоПодразделениеНовое", 1);
{-------------------)}: Поле агрегатного объекта не обнаружено (Активизировать)
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
21. foxey 4 28.09.12 09:21 Сейчас в теме
Как у меня организована передача фокуса в форме документа "Путевой лист". Использую фиктивное закрытие формы.
Перем ПередатьФокус;
...

Процедура ПриЗакрытии()
Если ПустоеЗначение(ПередатьФокус) = 0 тогда
Активизировать(ПередатьФокус);
СтатусВозврата(0);
ПередатьФокус = "";
Возврат;
КонецЕсли;
КонецПроцедуры //ПриЗакрытии
...
Процедура РассчитатьТопливо()
// Эта процедурка прописана в нескольких реквизитах документа (СпидометрВыезда, СпидометрВозвращения и т.д.) на вкладке "Дополнительно" в поле "Формула". Реквизиты оформлены как поле ввода числа.
Если Автомобиль.Выбран() = 0 Тогда
Возврат;
КонецЕсли;
Если СпидометрВозвращения < СпидометрВыезда Тогда
Расход = 0;
РасходНорма = 0;
Разница = 0;
ПробегПринятый = 0;
ПробегФакт = 0;
Результ = "";
Возврат;
КонецЕсли;
ПересчетРасхода();
Если Форма.АктивныйЭлемент() = "СпидометрВыезда" Тогда
ПередатьФокус = "СпидометрВозвращения";
Форма.Закрыть(0);
ИначеЕсли Форма.АктивныйЭлемент() = "СпидометрВозвращения" Тогда
ПередатьФокус = "Выдано";
Форма.Закрыть(0);
ИначеЕсли Форма.АктивныйЭлемент() = "Выдано" Тогда
ПередатьФокус = "ОстатокНачальный";
Форма.Закрыть(0);
ИначеЕсли Форма.АктивныйЭлемент() = "ОстатокНачальный" Тогда
ПередатьФокус = "ОстатокКонечный";
Форма.Закрыть(0);
ИначеЕсли Форма.АктивныйЭлемент() = "ОстатокКонечный" Тогда
ПередатьФокус = "Сдано";
Форма.Закрыть(0);
КонецЕсли;
КонецПроцедуры // РассчитатьТопливо()
user702226_bakatnuk; ll13; Vital451; Dnki; nado_hto; dicwork; +6 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
14. nicotin 36 27.09.12 11:11 Сейчас в теме
(1) dicwork, у меня получилось добиться результата путем создания дополнительной кнопки.
Создаем дополнительную кнопку, можно за пределами формы, чтобы не привлекала внимание.
Назначаем ей процедуру АктивизацияПоля() и горячую клавишу, например Alt+F7
Процедура АктивизацияПоля()
   Активизировать("НужноеПоле")
КонецПроцедуры 


Обращение к процедуре

Если КакоеТоУсловие=1 Тогда
  //здесь выполняем действия со старыми реквизитами
  //...
  wsh = CreateObject("wScript.Shell");
  wsh.SendKeys("%{F7}")
КонецЕсли;


PS. Все-таки в новом представлении кодов есть огрехи - не видна последняя строчка КонецПроцедуры
В Opera отображается, в IE8 нет.
17. vcv 89 27.09.12 13:03 Сейчас в теме
(14) Ненадёжно. Лучше "ложным закрытием".
34. Alexey26 2 07.12.15 16:52 Сейчас в теме
(1) dicwork, сделать это возможно с помощью процедуры Активизировать.
35. dicwork 08.12.15 10:14 Сейчас в теме
(34) Alexey26
Вообще-то эта проблема была решена еще в 2012 году с помощью "ложного закрытия". Так что Ваше сообщение опоздало годика так на 3 :-)
2. EdwardXot 26.09.12 17:18 Сейчас в теме
А где написано что Активизировать(), это метод объекта Форма???
Это метод, который должен использоваться в контексте модуля любой формы, по этому пишем просто:

Активизировать("фоПодразделениеНовое", 1);
5. dusha0020 1120 26.09.12 17:40 Сейчас в теме
см (2). У объекта Форма нет метода Активизировать.
10. dicwork 26.09.12 20:21 Сейчас в теме
(2) EdwardXot
Завтра на работе посмотрю какую ошибку выдавала во время выполнения 1С в таком случае и напишу. Я пробовал такой вариант.
12. EdwardXot 26.09.12 23:15 Сейчас в теме
(10) dicwork,
Ааааа, ты наверное об этой ошибке:
"В данной формуле не может быть вызвана эта процедура (функция)"
Действительно, метод Активизировать() не отрабатывает из формул элементов диалога.
Погугли текст ошибки, там есть варианты обхода, в частности через "ложное закрытие". Хотя я бы попробовал обработать выбор через ПриНачалеВыбораЗначения(), здесь Активизировать() отработает.
13. EdwardXot 26.09.12 23:23 Сейчас в теме
(12) EdwardXot,
Например, вот-так:
Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога,ФлагСтандОбр)
	Если ИдентЭлемДиалога = "фоДолжностьСтарая" Тогда
		Если Сотрудник.Выбран() = 1 Тогда // условие может быть другое, в зависимости от ситуации
			ФлагСтандартнойОбработки = 0;
			Активизировать("фоПодразделениеНовое",1);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
3. Tanya_o 13 26.09.12 17:19 Сейчас в теме
ЭтаФорма.ТекущийЭлемент = ЭтаФорма.ЭлементыФормы.фоПодразделениеНовое;
6. dusha0020 1120 26.09.12 17:43 Сейчас в теме
(3) Tanya_o, 1С 7.7 в разделе топика.
7. Tanya_o 13 26.09.12 18:07 Сейчас в теме
(6) dusha0020, ой сори, а я про 8. :-)))
Тогда наверное просто: Активизировать("фоПодразделениеНовое");
4. Кошки рулят 26.09.12 17:33 Сейчас в теме
А зачем эти реквизиты делаются недоступными, если нужно их пропускать при обходе?
И почему вообще это нужно делать программно? Что за блажь?
11. dicwork 26.09.12 20:36 Сейчас в теме
(4) Кошки рулят
Объясните почему программное управление обходом объектов это блажь. Пользователь ввел какие-то поля, если программа смогла по этим данным заполнить часть полей на форме - прекрасно. При дальнейшем движении по форме нужно пропустить уже заполненные поля. Зачем пользователю лишний раз щелкать Enter. И я не считаю создание удобства работы для пользователя блажью. Если это невозможно в 1С, то так и скажите и я так и скажу пользователю, а если это возможно то подскажите как.
31. Кошки рулят 04.10.12 19:07 Сейчас в теме
(11) dicwork, Каша у тебя в голове, поэтому и блажь. Валишь в кучу весь хлам и думаешь, что это твою значимость поднимет? А получается, что таким образом пургу метешь реальную.
Так как стоит задача в (1) никакого программного пропуска полей не требуется. Нужно просто поставить флажок "Пропускать при вводе" у "следующих 4 полей". И нечего дурить там, где это совершенно не требуется ...
Ну, а, уж, устанавливать программно Доступность в 0 - это вообще маразм по ту сторону оси абсцис ... Об чем, собственно, и было (4).
8. foxey 4 26.09.12 18:28 Сейчас в теме
Т.к. реквизиты имеют префикс в названии "старый", рискну предположить, что они просто читаются извне и не подразумевают свое интерактивное изменение. Надо изначально на форме в визуальном редакторе задать им атрибуты "доступность" и "редактирование" в ложь (убрать галочки), а обработкой просто их заполнять. А передачу фокуса в реквизит "новый.." настроить тоже в визуальном редакторе формы и позабыть про "Активизировать"...
9. dicwork 26.09.12 20:17 Сейчас в теме
(8) foxey
Для этого конкретного случая такое решение подходит, но в другой обработке мне все равно нужно при определенных введенных данных давать или не давать пользователю возможность изменения поля и при переходе между полями пропускать поле не требующее изменения. Я видел в конфигурации использование "Активизировать" на форме справочника или документа. Мне же нужно выполнять такие же действия на форме внешней обработки.
15. Gal_B 27.09.12 12:06 Сейчас в теме
А флаг на Пропускать при вводе в свойствах Формы не помогает?
18. EdwardXot 27.09.12 13:57 Сейчас в теме
(15) Gal_B, Это конечно проще всего, но пропустить, как я понял, надо по условию...
16. ibazh 27.09.12 12:08 Сейчас в теме
Пропускать при вводе должно помочь, если нет, можно все поля добавлять на форму динамически открывая к них доступ
19. Gal_B 27.09.12 15:20 Сейчас в теме
Вообще-то Активизировать() - это метод подбора.Т.е. его применение заведомо не коректно. Мне кажется вся проблема в том, ОТКУДА вызывается :
Форма.фоДолжностьСтарая.Доступность(0); 
Форма.фоПодразделениеСтарое.Доступность(0); 
Форма.фоОкладТарифСтарый.Доступность(0); 
Форма.фоРазрядСтарый.Доступность(0); 
Да и не совсем понятно с како формой имеем дело: списка, диалога? Можно вообще все "не угодное" на отдельный слой вынести.
20. dicwork 27.09.12 16:09 Сейчас в теме
(19) Gal_B
Это форма внешней обработки
21. foxey 4 28.09.12 09:21 Сейчас в теме
Как у меня организована передача фокуса в форме документа "Путевой лист". Использую фиктивное закрытие формы.
Перем ПередатьФокус;
...

Процедура ПриЗакрытии()
Если ПустоеЗначение(ПередатьФокус) = 0 тогда
Активизировать(ПередатьФокус);
СтатусВозврата(0);
ПередатьФокус = "";
Возврат;
КонецЕсли;
КонецПроцедуры //ПриЗакрытии
...
Процедура РассчитатьТопливо()
// Эта процедурка прописана в нескольких реквизитах документа (СпидометрВыезда, СпидометрВозвращения и т.д.) на вкладке "Дополнительно" в поле "Формула". Реквизиты оформлены как поле ввода числа.
Если Автомобиль.Выбран() = 0 Тогда
Возврат;
КонецЕсли;
Если СпидометрВозвращения < СпидометрВыезда Тогда
Расход = 0;
РасходНорма = 0;
Разница = 0;
ПробегПринятый = 0;
ПробегФакт = 0;
Результ = "";
Возврат;
КонецЕсли;
ПересчетРасхода();
Если Форма.АктивныйЭлемент() = "СпидометрВыезда" Тогда
ПередатьФокус = "СпидометрВозвращения";
Форма.Закрыть(0);
ИначеЕсли Форма.АктивныйЭлемент() = "СпидометрВозвращения" Тогда
ПередатьФокус = "Выдано";
Форма.Закрыть(0);
ИначеЕсли Форма.АктивныйЭлемент() = "Выдано" Тогда
ПередатьФокус = "ОстатокНачальный";
Форма.Закрыть(0);
ИначеЕсли Форма.АктивныйЭлемент() = "ОстатокНачальный" Тогда
ПередатьФокус = "ОстатокКонечный";
Форма.Закрыть(0);
ИначеЕсли Форма.АктивныйЭлемент() = "ОстатокКонечный" Тогда
ПередатьФокус = "Сдано";
Форма.Закрыть(0);
КонецЕсли;
КонецПроцедуры // РассчитатьТопливо()
user702226_bakatnuk; ll13; Vital451; Dnki; nado_hto; dicwork; +6 Ответить
22. Ёпрст 1067 28.09.12 10:17 Сейчас в теме
(0) Активизировать в ложном закрытии формы и привет.
ЗЫ: не забудьте перечислить мне вознаграждение за верный ответ
Светлый ум; dicwork; +2 Ответить
23. dicwork 28.09.12 10:41 Сейчас в теме
(22) Ёпрст
Если уж внимательно прочитать эту ветку, то первым упомянул об этом способе vcv. foxey привел пример кода реализующего этот способ. Так что я считаю что foxey в большей мере заслуживает вознаграждение. Но вознаграждение назначал не я и не знаю вправе ли я распоряжаться чужим вознаграждением. Плюс поставил всем кто помог.
24. vcv 89 28.09.12 12:18 Сейчас в теме
(23) Что касается внимательного чтения ветки, то первым про "ложное закрытие" сказал не я, а EdwardXot. :-)
25. dicwork 28.09.12 12:36 Сейчас в теме
(24) vcv
Ну там было "много букаф - ни осилил" :-)
Мне очень понравился ответ foxey конкретно по делу и с примером использования.
26. vcv 89 28.09.12 13:20 Сейчас в теме
(25) Что бы не ждать пару дюжин постов до внятного и развёрнутого примера кода, нужно его открыто попросить. Иначе многие считают, что тут собрание плюс-минус специалистов, которые достаточно владеют поиском в интернете, способны спросить поисковик что-то вроде "1c 7.7 "ложное закрытие" и получить на первой же странице ссылки с примерами. Например, яндекс выдал на первой странице результатов поиска "v7: Активизировать поле ввода" http://www.forum.mista.ru/topic.php?id=555012
30. dicwork 28.09.12 15:13 Сейчас в теме
(26) vcv
Я сначала думал, что у меня что-то неправильно в синтаксисе. Честно говоря я не думал, что это окажется так сложно и на короткие и непонятные фразы ("ложное закрытие") не среагировал (раньше мне не приходилось сталкиваться с таким понятием). В документации о таких "фокусах" нет никакой информации, а с интернетом на работе не все так просто.
27. dusha0020 1120 28.09.12 13:28 Сейчас в теме
(23) dicwork, Я разрешаю. И вообще, это Ваш топик - вот и решайте кому выплачивать. Мне тема показалась интересной и 0,19$m были не круглыми. Мне лично (14) понравилось оригинальностью, хотя и не очень надежно. Добавлю еще 0,4. Выдавайте:)
33. Светлый ум 454 04.08.14 06:27 Сейчас в теме
(22)Вместе с ложным закрытием - необходимо реквизит флагЛожноеЗакрытие (булево) создать.
28. dicwork 28.09.12 14:55 Сейчас в теме
29. dicwork 28.09.12 14:56 Сейчас в теме
Почему-то не добавило первый раз
32. under44 26.07.13 14:23 Сейчас в теме
Кошки рулят, тупой как пробка...
Я потерял лишнюю минуту, листая сообщения этого идиота.
Фокус это блажь? Банить таких "спецов" сразу надо. Ибо сталкивался по личному опыту... на словах ты Лев Толстой, а на деле - **й простой.

(я бы не удалял это сообщение, как напоминание, что люди задают вопрос, чтобы получить ответ, а не выслушивать бредни ПТУшников)

и спасибо ответившим по делу.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот