Как из одной формы открыть другую 1с
Как из одной формы открыть другую, передав параметры, и получить обратно результат?
1. ОткрытьМодально, параметр закрытия, метод Закрыть
2. Реквизиты формы (или свойства расширения формы)
Реквизиты формы видимы снаружи как свойства объекта Форма. Их можно создать столько сколько нужно и присвоить им нужный тип.
3. Через ЭлементыФормы (не очень красиво)
5. Экспортные переменные модулей форм
Они становятся видимы снаружи, примерно как реквизиты форм:
6. Экспортные переменные модуля объекта, если он является основным реквизитом формы
Например, есть форма элемента справочника, т.е. ее основной реквизит имеет тип «СправочникОбъект.Номенклатура». Тогда экспортная переменная в модуле объекта расширяет контекст модуля формы и становится видна снаружи.
7. Глобальные переменные (экспортные переменные модуля приложения)
9. СохранитьЗначение, ВосстановитьЗначение
10. Параметры сеанса
Обратите внимание! Попытка прочитать неинициализированный параметр сеанса приводит к ошибке! Поэтому нужно инициализировать все параметры сеанса раньше, например, еще в процедуре ПриНачалеРаботыСистемы.
11. Объекты базы данных (справочники, константы, регистры сведений и т.д.)
Открытие формы внутри другой формы
Управляемые формы позволяют достаточно гибко работать с открытием/переключением форм и окон приложения. В настоящей статье рассмотрим пример открытия одной управляемой формы внутри другой.
Пример
Для демонстрации напишем простую обработку, в которой будет единственный реквизит формы «ИмяФормыДляОткрытия» строкового типа и команда формы.
Программный код обработчика команды следующий:
Для открытия новой формы в текущем окне нам нужно в качестве пятого параметра метода «ОткрытьФорму» передать окно текущей формы. Так мы и сделали в примере выше.
Тестируем
В качестве примера имени формы введем путь основной формы объекта справочника «Номеклатура» (пример актуален для конфигурации «Управление торговлей» релиза 11):
Вот так это выглядит в режиме 1С:Предприятие:

нажам на кнопку команды «ОткрытьФормуПоИмени» в текущем окне будет открыта форма элемента номенклатуры:

Эта возможность повсеместно используется в типовых конфигурациях, например, при переходе от элемента справочника «Номенклатура» к списку присоединенных файлов по общей команде «Присоединенные файлы».

Обработчик общей команды представлен на следующем листинге:
Обратите внимание, тут в качестве окна для открываемой формы указывается окно формы-владельца.
Таким образом, открытие формы в текущем окне позволяет экономно использовать экранное пространство и создавать удобный интерфейс для пользователей.
Передать значение из одной формы в другую в 1С:Предприятии
При закрытии формы может потребоваться вернуть из нее некоторые значения. Например, при нажатии на кнопку основной формы, открывается другая произвольная форма. После выполнения необходимых действий дополнительная форма закрывается, а в основную передается значение.
Открытие формы
Необходимо модально открыть произвольную форму с помощью функции ОткрытьФормуМодально().
Закрытие формы с возвратом значения
У открытой формы необходимо вызвать встроенный метод Закрыть(), который на вход принимает возвращаемое значение. Тип возвращаемого значения произвольный. В данном примере возвращается структура.
Комментарии (0)
Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться
Открытие формы в 1С 8.3 с передачей параметров на примере
В этой статье я приведу небольшой пример, который может возникнуть в реальной жизни, и который будет полезен начинающим программистам 1С, особенно тем, кто столкнулся с открытием одной управляемой формы из другой формы и передачей значений с формы на форму.
Рассмотрим следующую задачу: в табличной части некоторого документа есть реквизит «Пояснение» (тип строка), для удобства работы пользователей необходимо сделать так, чтобы при нажатии на кнопку «Лупа» поля ввода этого реквизита текущей строки табличной части, открывалась форма с многострочным полем ввода, где пользователь может ввести нужный ему текст. После нажатия на кнопку «Поместить» открывшейся формы вся информация из поля ввода должна быть передана в соответствующее поле текущей строки табличной части.
Для демонстрации решения, я использую учебную конфигурацию, где в табличной части документа «Поступление товаров и услуга» имеется реквизит «Пояснение» (строка (250)).

На форме документа у поля «Пояснение» таблицы формы в свойство «КнопкаОткрытия» установим значение «Да».

В результате у нас у соответствующего поля на форме появится кнопка Открыть.

Теперь создадим произвольную форму документа, которую назовем ФормаВводаПояснения.

У этой формы создадим реквизит управляемой формы «Ввод пояснения» (строка (250))

И поместим этот реквизит на форму в виде поля ввода. У поля ввода установим многострочный режим и уберем заголовок.

У командной панели формы снимем флаг «Автозаполнение»

Создадим команду формы «Поместить», которую разместим в командной панели формы в виде кнопки. И у этой кнопки установим флаг у свойства «Кнопка по умолчанию»

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

Теперь сделаем так, чтобы при открытии формы значение из этого параметра передавалось в реквизит «Ввод пояснения» из нашей формы. Для этого у нашей формы ввода пояснения создадим событие при создании на сервере.

В этом обработчике напишем следующий код
Нам осталось отработать нажатие на кнопку «Поместить», для этого создадим обработчик соответствующей команды в клиентском контексте.

В этом обработчике мы будем закрывать форму, а в качестве параметра закрытия передадим реквизит формы.
С этой формой мы закончили, перейдем к форме документа. На форме документа у поля Пояснения таблицы формы создадим обработчик события ПриОткрытии в клиентском контексте.

Это событие возникает, когда пользователь нажимает на кнопку «Открыть» соответствующего поля.
В обработчике события, первым делом, в параметр СтандартнаяОбработка установим значение Ложь. Тогда при нажатии на кнопку открытия, не будет срабатывать стандартная обработка платформы, которая срабатывает при нажатии на эту кнопку.
Теперь в этой же процедуре нам нужно получить значение поля Пояснение текущей строки.
Это значение мы будем передавать в качестве параметра в форму ввода пояснения при её открытии. Для этого я создам структуру, где в качестве ключа будет название параметра из формы ввода пояснения (ПриемникПояснения), который мы создали в форме ввода пояснения, а в качестве значения структуры будет значение, которое мы только что получили.
Открывать формы мы будем при помощи метода глобального контекста ОткрытьФорму, передадим в неё параметры ввода, а также установим, чтобы блокировалось окно владельца.
Если мы на этом остановимся, то у нас форма ввода пояснения откроется, информация из формы документа там появится, но информация с формы пояснения не будет передана в форму документа, как мы планировали. Для того, чтобы это произошло необходимо создать описание оповещения, в котором будет указан метод, который сработает после закрытия формы ввода описания. В конечном итоге у нас должен получиться следующий обработчик события нажатия на кнопку открытия.
В описании оповещения мы указали процедуру ПослеВыбораПояснения. Нам необходимо создать такую процедуру в клиентском контексте, и сделать её экспортной.
В этой процедуре, мы текущему значению поля Пояснение присваиваем результат закрытия формы ввода пояснения.
На этом наше программирование закончено. Работа выполнена.

Другие статьи про открытие управляемых форм:
Подробно вопросы передачи параметров, открытия форм рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомиться с разработкой управляемого приложения.

Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С
- Без сложных технических терминов;
- Более 600 страниц практического материала;
- Каждый пример сопровождается рисунком (скриншот);
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
Промо-код на скидку в 15% — 48PVXHeYu
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
Эти книги плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей
5 Replies to “Открытие формы в 1С 8.3 с передачей параметров на примере”
Не работает….после внесения текста в дополнительной форме…Он не передается в основную форму
Это потому что нужно вводить не текст со статьи, а код. Тут и так всё разжевали и в рот положили, а если вы в модули текст пишите, который не имеет никакой логической составляющей, то конечно ничего работать не будет.
Спасибо большое! Отличная статья, всё доходчиво! Всё актуально. Работает на ЗУП 3.1 (3.1.20.36)