Открытие формы в 1С 8.3 с передачей параметров на примере

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

Рассмотрим следующую задачу: в табличной части некоторого документа есть реквизит «Пояснение» (тип строка), для удобства работы пользователей необходимо сделать так, чтобы при нажатии на кнопку «Лупа» поля ввода этого реквизита текущей строки табличной части, открывалась форма с многострочным полем ввода, где пользователь может ввести нужный ему текст. После нажатия на кнопку «Поместить» открывшейся формы вся информация из поля ввода должна быть передана в соответствующее поле текущей строки табличной части.

Для демонстрации решения, я использую учебную конфигурацию, где в табличной части документа «Поступление товаров и услуга» имеется реквизит «Пояснение» (строка (250)).

Реквизит табличной части документа

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

Свойство КнопкаОткрытия поля ввода

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

Кнопка открыть на форме

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

Создание новой формы документа

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

Создание реквизита новой формы документа

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

Свойства поля ввода формы

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

Флаг автозаполение команды формы

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

Свойство кнопка по умолчанию кнопки формы

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

Параметр управляемой формы

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

Событие управляемой формы ПриСозданииНаСервере

В этом обработчике напишем следующий код

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    ВводПояснения = Параметры.ПриемникПояснения;

КонецПроцедуры

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

Создание обработчика команды формы

В этом обработчике мы будем закрывать форму, а в качестве параметра закрытия передадим реквизит формы.

&НаКлиенте
Процедура Поместить(Команда)

    Закрыть(ВводПояснения);

КонецПроцедуры

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

Создание обработчика события ПриОткрытии

Это событие возникает, когда пользователь нажимает на кнопку «Открыть» соответствующего поля.

В обработчике события, первым делом, в параметр СтандартнаяОбработка установим значение Ложь.  Тогда при нажатии на кнопку открытия, не будет срабатывать стандартная обработка платформы, которая срабатывает при нажатии на эту кнопку.

&НаКлиенте
Процедура СписокТоваровПояснениеОткрытие(Элемент, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

КонецПроцедуры

Теперь в этой же процедуре нам нужно получить значение поля Пояснение текущей строки.

 

ТекущаяСтрока = Элементы.СписокТоваров.ТекущиеДанные;
ЗначениеПояснения = ТекущаяСтрока.Пояснение;

 

Это значение мы будем передавать в качестве параметра в форму ввода пояснения при её открытии. Для этого я создам структуру, где в качестве ключа будет название параметра из формы ввода пояснения (ПриемникПояснения), который мы создали в форме ввода пояснения, а в качестве значения структуры будет значение, которое мы только что получили.

ПараметрыВвода = Новый Структура("ПриемникПояснения",ЗначениеПояснения);

Открывать формы мы будем при помощи метода глобального контекста ОткрытьФорму, передадим в неё параметры ввода, а также установим, чтобы блокировалось окно владельца.

ОткрытьФорму("Документ.ПоступлениеТоваров.Форма.ФормаВводаПояснения",ПараметрыВвода,,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

 

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

&НаКлиенте
Процедура СписокТоваровПояснениеОткрытие(Элемент, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
    ТекущаяСтрока = Элементы.СписокТоваров.ТекущиеДанные;
    ЗначениеПояснения = ТекущаяСтрока.Пояснение;

    ПараметрыВвода = Новый Структура("ПриемникПояснения",ЗначениеПояснения);
    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораПояснения",ЭтаФорма);

    ОткрытьФорму("Документ.ПоступлениеТоваров.Форма.ФормаВводаПояснения",ПараметрыВвода,,,,,ОписаниеОповещения,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

КонецПроцедуры

 

В описании оповещения мы указали процедуру ПослеВыбораПояснения. Нам необходимо создать такую процедуру в клиентском контексте, и сделать её экспортной.

&НаКлиенте
Процедура ПослеВыбораПояснения(Результат, ДопПараметры) Экспорт
    Если Результат = Неопределено Тогда
        Возврат;
    КонецЕсли;
    Элементы.СписокТоваров.ТекущиеДанные.Пояснение = Результат;
КонецПроцедуры

 

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

На этом наше программирование закончено. Работа выполнена.

Открытие формы ввода пояснения

Другие статьи про открытие управляемых форм:

Программное открытие управляемой формы выбора

Открытие управляемой формы по верх окон

Открытие обычной формы в управляемом приложении

Открытие формы на основании другого объекта

Открытие управляемой формы существующего объекта

Открытие управляемой формы с передачей параметров

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

Книга «Основы разработки в 1С: Такси»

Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С

  1. Без сложных технических терминов;
  2. Более 600 страниц практического материала;
  3. Каждый пример сопровождается рисунком (скриншот);
  4. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!

Промо-код на скидку в 15% — 48PVXHeYu

 

Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»

Книга «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

 

 

 

Эти книги плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

16 − 15 =