Есть обработка. При выборе в определенное поле данных из справочника подставляются данные в четыре следующих поля. А как программно пропустить эти поля, чтобы не проходить по ним.
Сейчас сделал так:
[1C-CODE] Форма.фоДолжностьСтарая.Доступность(0);
Форма.фоПодразделениеСтарое.Доступность(0);
Форма.фоОкладТарифСтарый.Доступность(0);
Форма.фоРазрядСтарый.Доступность(0);
Форма.Активизировать("фоПодразделениеНовое", 1);
[/CODE
при выполнении ругается
Форма.Активизировать("фоПодразделениеНовое", 1);
{-------------------)}: Поле агрегатного объекта не обнаружено (Активизировать)
(1) dicwork, у меня получилось добиться результата путем создания дополнительной кнопки.
Создаем дополнительную кнопку, можно за пределами формы, чтобы не привлекала внимание.
Назначаем ей процедуру АктивизацияПоля() и горячую клавишу, например Alt+F7
Если КакоеТоУсловие=1 Тогда
//здесь выполняем действия со старыми реквизитами
//...
wsh = CreateObject("wScript.Shell");
wsh.SendKeys("%{F7}")
КонецЕсли;
PS. Все-таки в новом представлении кодов есть огрехи - не видна последняя строчка КонецПроцедуры
В Opera отображается, в IE8 нет.
А где написано что Активизировать(), это метод объекта Форма???
Это метод, который должен использоваться в контексте модуля любой формы, по этому пишем просто:
(10) dicwork,
Ааааа, ты наверное об этой ошибке:
"В данной формуле не может быть вызвана эта процедура (функция)"
Действительно, метод Активизировать() не отрабатывает из формул элементов диалога.
Погугли текст ошибки, там есть варианты обхода, в частности через "ложное закрытие". Хотя я бы попробовал обработать выбор через ПриНачалеВыбораЗначения(), здесь Активизировать() отработает.
Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога,ФлагСтандОбр)
Если ИдентЭлемДиалога = "фоДолжностьСтарая" Тогда
Если Сотрудник.Выбран() = 1 Тогда // условие может быть другое, в зависимости от ситуации
ФлагСтандартнойОбработки = 0;
Активизировать("фоПодразделениеНовое",1);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
(4) Кошки рулят
Объясните почему программное управление обходом объектов это блажь. Пользователь ввел какие-то поля, если программа смогла по этим данным заполнить часть полей на форме - прекрасно. При дальнейшем движении по форме нужно пропустить уже заполненные поля. Зачем пользователю лишний раз щелкать Enter. И я не считаю создание удобства работы для пользователя блажью. Если это невозможно в 1С, то так и скажите и я так и скажу пользователю, а если это возможно то подскажите как.
(11) dicwork, Каша у тебя в голове, поэтому и блажь. Валишь в кучу весь хлам и думаешь, что это твою значимость поднимет? А получается, что таким образом пургу метешь реальную.
Так как стоит задача в (1) никакого программного пропуска полей не требуется. Нужно просто поставить флажок "Пропускать при вводе" у "следующих 4 полей". И нечего дурить там, где это совершенно не требуется ...
Ну, а, уж, устанавливать программно Доступность в 0 - это вообще маразм по ту сторону оси абсцис ... Об чем, собственно, и было (4).
Т.к. реквизиты имеют префикс в названии "старый", рискну предположить, что они просто читаются извне и не подразумевают свое интерактивное изменение. Надо изначально на форме в визуальном редакторе задать им атрибуты "доступность" и "редактирование" в ложь (убрать галочки), а обработкой просто их заполнять. А передачу фокуса в реквизит "новый.." настроить тоже в визуальном редакторе формы и позабыть про "Активизировать"...
(8) foxey
Для этого конкретного случая такое решение подходит, но в другой обработке мне все равно нужно при определенных введенных данных давать или не давать пользователю возможность изменения поля и при переходе между полями пропускать поле не требующее изменения. Я видел в конфигурации использование "Активизировать" на форме справочника или документа. Мне же нужно выполнять такие же действия на форме внешней обработки.
(22) Ёпрст
Если уж внимательно прочитать эту ветку, то первым упомянул об этом способе vcv. foxey привел пример кода реализующего этот способ. Так что я считаю что foxey в большей мере заслуживает вознаграждение. Но вознаграждение назначал не я и не знаю вправе ли я распоряжаться чужим вознаграждением. Плюс поставил всем кто помог.
(25) Что бы не ждать пару дюжин постов до внятного и развёрнутого примера кода, нужно его открыто попросить. Иначе многие считают, что тут собрание плюс-минус специалистов, которые достаточно владеют поиском в интернете, способны спросить поисковик что-то вроде "1c 7.7 "ложное закрытие" и получить на первой же странице ссылки с примерами. Например, яндекс выдал на первой странице результатов поиска "v7: Активизировать поле ввода" http://www.forum.mista.ru/topic.php?id=555012
(26) vcv
Я сначала думал, что у меня что-то неправильно в синтаксисе. Честно говоря я не думал, что это окажется так сложно и на короткие и непонятные фразы ("ложное закрытие") не среагировал (раньше мне не приходилось сталкиваться с таким понятием). В документации о таких "фокусах" нет никакой информации, а с интернетом на работе не все так просто.
(23) dicwork, Я разрешаю. И вообще, это Ваш топик - вот и решайте кому выплачивать. Мне тема показалась интересной и 0,19$m были не круглыми. Мне лично (14) понравилось оригинальностью, хотя и не очень надежно. Добавлю еще 0,4. Выдавайте:)
Кошки рулят, тупой как пробка...
Я потерял лишнюю минуту, листая сообщения этого идиота.
Фокус это блажь? Банить таких "спецов" сразу надо. Ибо сталкивался по личному опыту... на словах ты Лев Толстой, а на деле - **й простой.
(я бы не удалял это сообщение, как напоминание, что люди задают вопрос, чтобы получить ответ, а не выслушивать бредни ПТУшников)