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

Процедура ПриЗакрытии()
 Если ПустоеЗначение(ПередатьФокус) = 0 тогда
  Активизировать(ПередатьФокус);
  СтатусВозврата(0);
  ПередатьФокус = "";
  Возврат;
 КонецЕсли;
КонецПроцедуры //ПриЗакрытии
...
Процедура РассчитатьТопливо()
// Эта процедурка прописана в нескольких реквизитах документа (СпидометрВыезда, СпидометрВозвращения и т.д.) на вкладке "Дополнительно" в поле "Формула". Реквизиты оформлены как поле ввода числа.
 Если Автомобиль.Выбран() = 0 Тогда
     Возврат;
 КонецЕсли;
 Если СпидометрВозвращения < СпидометрВыезда Тогда
  Расход = 0;
  РасходНорма = 0;
  Разница = 0;
  ПробегПринятый = 0;
  ПробегФакт = 0;
  Результ = "";
  Возврат;
 КонецЕсли;
 ПересчетРасхода();
 Если Форма.АктивныйЭлемент() = "СпидометрВыезда" Тогда
  ПередатьФокус = "СпидометрВозвращения";
  Форма.Закрыть(0);
 ИначеЕсли Форма.АктивныйЭлемент() = "СпидометрВозвращения" Тогда
  ПередатьФокус = "Выдано";
  Форма.Закрыть(0);
 ИначеЕсли Форма.АктивныйЭлемент() = "Выдано" Тогда
  ПередатьФокус = "ОстатокНачальный";
  Форма.Закрыть(0);
 ИначеЕсли Форма.АктивныйЭлемент() = "ОстатокНачальный" Тогда
  ПередатьФокус = "ОстатокКонечный";
  Форма.Закрыть(0);
 ИначеЕсли Форма.АктивныйЭлемент() = "ОстатокКонечный" Тогда
  ПередатьФокус = "Сдано";
  Форма.Закрыть(0);
 КонецЕсли;
КонецПроцедуры // РассчитатьТопливо()
---
dicwork, у меня получилось добиться результата путем создания дополнительной кнопки.
Создаем дополнительную кнопку, можно за пределами формы, чтобы не привлекала внимание.
Назначаем ей процедуру АктивизацияПоля() и горячую клавишу, например Alt+F7

```1c
    Процедура АктивизацияПоля()
    Активизировать("НужноеПоле")
    КонецПроцедуры
```

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

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

PS. Все-таки в новом представлении кодов есть огрехи - не видна последняя строчка КонецПроцедуры
В Opera отображается, в IE8 нет.
---
Ненадёжно. Лучше "ложным закрытием".
---
dicwork, сделать это возможно с помощью процедуры Активизировать.
---
Alexey26
Вообще-то эта проблема была решена еще в 2012 году с помощью "ложного закрытия". Так что Ваше сообщение опоздало годика так на 3 :-)
---
А где написано что Активизировать(), это метод объекта Форма???
Это метод, который должен использоваться в контексте модуля любой формы, по этому пишем просто:

```1c
    Активизировать("фоПодразделениеНовое", 1);
```
---
см (2). У объекта Форма нет метода Активизировать.
---
EdwardXot
Завтра на работе посмотрю какую ошибку выдавала во время выполнения 1С в таком случае и напишу. Я пробовал такой вариант.
---
dicwork,
Ааааа, ты наверное об этой ошибке:
"В данной формуле не может быть вызвана эта процедура (функция)"
Действительно, метод Активизировать() не отрабатывает из формул элементов диалога.
Погугли текст ошибки, там есть варианты обхода, в частности через "ложное закрытие". Хотя я бы попробовал обработать выбор через ПриНачалеВыбораЗначения(), здесь Активизировать() отработает.
---
EdwardXot,
Например, вот-так:

```1c
    Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога,ФлагСтандОбр)
    Если ИдентЭлемДиалога = "фоДолжностьСтарая" Тогда
    Если Сотрудник.Выбран() = 1 Тогда // условие может быть другое, в зависимости от ситуации
    ФлагСтандартнойОбработки = 0;
    Активизировать("фоПодразделениеНовое",1);
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
```
---
ЭтаФорма.ТекущийЭлемент = ЭтаФорма.ЭлементыФормы.фоПодразделениеНовое;
---
Tanya_o, 1С 7.7 в разделе топика.
---
dusha0020, ой сори, а я про 8. :-)))
Тогда наверное просто: Активизировать("фоПодразделениеНовое");
---
А зачем эти реквизиты делаются недоступными, если нужно их пропускать при обходе?
И почему вообще это нужно делать программно? Что за блажь?
---
Кошки рулят
Объясните почему программное управление обходом объектов это блажь. Пользователь ввел какие-то поля, если программа смогла по этим данным заполнить часть полей на форме - прекрасно. При дальнейшем движении по форме нужно пропустить уже заполненные поля. Зачем пользователю лишний раз щелкать Enter. И я не считаю создание удобства работы для пользователя блажью. Если это невозможно в 1С, то так и скажите и я так и скажу пользователю, а если это возможно то подскажите как.
---
dicwork, Каша у тебя в голове, поэтому и блажь. Валишь в кучу весь хлам и думаешь, что это твою значимость поднимет? А получается, что таким образом пургу метешь реальную.
Так как стоит задача в (1) никакого программного пропуска полей не требуется. Нужно просто поставить флажок "Пропускать при вводе" у "следующих 4 полей". И нечего дурить там, где это совершенно не требуется ...
Ну, а, уж, устанавливать программно Доступность в 0 - это вообще маразм по ту сторону оси абсцис ... Об чем, собственно, и было (4).
---
Т.к. реквизиты имеют префикс в названии "старый", рискну предположить, что они просто читаются извне и не подразумевают свое интерактивное изменение. Надо изначально на форме в визуальном редакторе задать им атрибуты "доступность" и "редактирование" в ложь (убрать галочки), а обработкой просто их заполнять. А передачу фокуса в реквизит "новый.." настроить тоже в визуальном редакторе формы и позабыть про "Активизировать"...
---
foxey
Для этого конкретного случая такое решение подходит, но в другой обработке мне все равно нужно при определенных введенных данных давать или не давать пользователю возможность изменения поля и при переходе между полями пропускать поле не требующее изменения. Я видел в конфигурации использование "Активизировать" на форме справочника или документа. Мне же нужно выполнять такие же действия на форме внешней обработки.
---
А флаг на Пропускать при вводе в свойствах Формы не помогает?
---
Gal_B, Это конечно проще всего, но пропустить, как я понял, надо по условию...
---
Пропускать при вводе должно помочь, если нет, можно все поля добавлять на форму динамически открывая к них доступ
---
Вообще-то Активизировать() - это метод подбора.Т.е. его применение заведомо не коректно. Мне кажется вся проблема в том, ОТКУДА вызывается :
```1c
    Форма.фоДолжностьСтарая.Доступность(0);
    Форма.фоПодразделениеСтарое.Доступность(0);
    Форма.фоОкладТарифСтарый.Доступность(0);
    Форма.фоРазрядСтарый.Доступность(0);
```
 Да и не совсем понятно с како формой имеем дело: списка, диалога? Можно вообще все "не угодное" на отдельный слой вынести.
---
Gal_B
Это форма внешней обработки
---
Как у меня организована передача фокуса в форме документа "Путевой лист". Использую фиктивное закрытие формы.
Перем ПередатьФокус;
...

Процедура ПриЗакрытии()
 Если ПустоеЗначение(ПередатьФокус) = 0 тогда
  Активизировать(ПередатьФокус);
  СтатусВозврата(0);
  ПередатьФокус = "";
  Возврат;
 КонецЕсли;
КонецПроцедуры //ПриЗакрытии
...
Процедура РассчитатьТопливо()
// Эта процедурка прописана в нескольких реквизитах документа (СпидометрВыезда, СпидометрВозвращения и т.д.) на вкладке "Дополнительно" в поле "Формула". Реквизиты оформлены как поле ввода числа.
 Если Автомобиль.Выбран() = 0 Тогда
     Возврат;
 КонецЕсли;
 Если СпидометрВозвращения < СпидометрВыезда Тогда
  Расход = 0;
  РасходНорма = 0;
  Разница = 0;
  ПробегПринятый = 0;
  ПробегФакт = 0;
  Результ = "";
  Возврат;
 КонецЕсли;
 ПересчетРасхода();
 Если Форма.АктивныйЭлемент() = "СпидометрВыезда" Тогда
  ПередатьФокус = "СпидометрВозвращения";
  Форма.Закрыть(0);
 ИначеЕсли Форма.АктивныйЭлемент() = "СпидометрВозвращения" Тогда
  ПередатьФокус = "Выдано";
  Форма.Закрыть(0);
 ИначеЕсли Форма.АктивныйЭлемент() = "Выдано" Тогда
  ПередатьФокус = "ОстатокНачальный";
  Форма.Закрыть(0);
 ИначеЕсли Форма.АктивныйЭлемент() = "ОстатокНачальный" Тогда
  ПередатьФокус = "ОстатокКонечный";
  Форма.Закрыть(0);
 ИначеЕсли Форма.АктивныйЭлемент() = "ОстатокКонечный" Тогда
  ПередатьФокус = "Сдано";
  Форма.Закрыть(0);
 КонецЕсли;
КонецПроцедуры // РассчитатьТопливо()
---
Активизировать в ложном закрытии формы и привет.
ЗЫ: не забудьте перечислить мне вознаграждение за верный ответ
---
Ёпрст
Если уж внимательно прочитать эту ветку, то первым упомянул об этом способе vcv. foxey привел пример кода реализующего этот способ. Так что я считаю что foxey в большей мере заслуживает вознаграждение. Но вознаграждение назначал не я и не знаю вправе ли я распоряжаться чужим вознаграждением. Плюс поставил всем кто помог.
---
Что касается внимательного чтения ветки, то первым про "ложное закрытие" сказал не я, а EdwardXot. :-)
---
vcv
Ну там было "много букаф - ни осилил" :-)
Мне очень понравился ответ foxey конкретно по делу и с примером использования.
---
Что бы не ждать пару дюжин постов до внятного и развёрнутого примера кода, нужно его открыто попросить. Иначе многие считают, что тут собрание плюс-минус специалистов, которые достаточно владеют поиском в интернете, способны спросить поисковик что-то вроде "1c 7.7 "ложное закрытие" и получить на первой же странице ссылки с примерами. Например, яндекс выдал на первой странице результатов поиска "v7: Активизировать поле ввода" http://www.forum.mista.ru/topic.php?id=555012
---
vcv
Я сначала думал, что у меня что-то неправильно в синтаксисе. Честно говоря я не думал, что это окажется так сложно и на короткие и непонятные фразы ("ложное закрытие") не среагировал (раньше мне не приходилось сталкиваться с таким понятием). В документации о таких "фокусах" нет никакой информации, а с интернетом на работе не все так просто.
---
dicwork, Я разрешаю. И вообще, это Ваш топик - вот и решайте кому выплачивать. Мне тема показалась интересной и 0,19$m были не круглыми. Мне лично (14) понравилось оригинальностью, хотя и не очень надежно. Добавлю еще 0,4. Выдавайте:)
---
Вместе с ложным закрытием - необходимо реквизит флагЛожноеЗакрытие (булево) создать.
---
Округлю от себя до 1,5
---
Почему-то не добавило первый раз
---
Кошки рулят, тупой как пробка...
Я потерял лишнюю минуту, листая сообщения этого идиота.
Фокус это блажь? Банить таких "спецов" сразу надо. Ибо сталкивался по личному опыту... на словах ты Лев Толстой, а на деле - **й простой.

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

и спасибо ответившим по делу.