Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 13:42

Передача данных с одной формы на другую

Автор Buktoria, 06 янв 2022, 12:20

0 Пользователей и 1 гость просматривают эту тему.

Buktoria

Здравствуйте, может найдутся добрые люди, которые смогут объяснить новичку, как сделать передачу данных с одной формы на другую
Для примера можем взять Справочник Книги с реквизитом Наименование
И Документ Выдача Книг с реквизитами Книга и Дата Возврата, как передать наименование книги из формы справочника в форму документа в строку Книга
Помогите пожалуйста понять, буду очень благодарна)

alexandr_ll

Buktoria, Какой тип значения у реквизита "Книга" в  документе?

Buktoria


Алексей_1985_06

Buktoria, Используйте параметры формы!
Для примера:
https://www.1s-up.ru/otkrytie-formy-v-1s-8-3-s-peredachej-parametrov-na-primere/

Открытие формы в 1С 8.3 с передачей параметров на примере - Программирование в 1С для всех

В этой статье я приведу небольшой пример, который может возникнуть в реальной жизни, и который будет полезен начинающим программистам 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. Закрепите полученные знания при помощи задачника;

alexandr_ll

Buktoria, Так у вас при выборе реквизита "Книга" разве не появляется его наименование?

Алексей_1985_06

Цитата: alexandr_ll от 06 янв 2022, 13:24Buktoria, Так у вас при выборе реквизита "Книга" разве не появляется его наименование?
Наверное нужно из формы справочника открыть форму документа, так?
Если да то вот пример с передачей параметры из одной формы в другую, подставьте только свои данные:

// В месте вызова.
// Формируем параметр формы.
Параметры = Новый Структура();
Параметры.Вставить("Важность", ПредопределенноеЗначение("Перечисление.Важность.Важно"));
// Открываем форму с указанием параметров.
ОткрытьФорму("ОбщаяФорма.ФормаПросмотра", Параметры);
...
// В модуле формы.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
 Если Параметры.Важность = Перечисления.Важность.Важно Тогда
 ...
 КонецЕсли;
КонецПроцедуры

Buktoria

alexandr_ll, нужно чтобы при переходе с формы справочника где хранятся названия книг, на форму документа Выдача книг, в строке сразу отображались выбранная книга

Buktoria

На форме справочника создала команду для открытия формы документа

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыпоненияКоманды)
ПараметрыФормы = Новый Структура ("МассивКниг", ПараметрыКоманды) ;
ОткрытьФорму("Документ.ВыдачаКниг.ФормаОбъекта", ПараметрыФормы, ПараметрВыпоненияКоманды.Источник,ПараметрВыпоненияКоманды.Уникальность,ПараметрВыпоненияКоманды.Окно);

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

Форма открывается

а вот что и куда дальше записывать не могу разобраться

Buktoria

Если попробовать так?

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, Стандартная Обработка)
Если ЗначениеЗаполнено(ЭтаФорма.Параметры.МассивКниг) Тогда

.... (сюда не понимаю, что писать, так как нашла пример с таб частью, а у меня просто реквизит)

КонецЕсли;
КонецПроцедуры

Buktoria


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск