Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 июл 2022, 03:12

Передача данных из одной управляемой формы в другую

Автор Funt432286, 26 окт 2017, 15:52

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

Funt432286

Всем добрый день!
Я новичек в 1с-конфигурировании. Пытаюсь создать копию программы написанной на DELPHI, не могу найти ответ на один вопрос.
У меня есть управляемая форма для СПРАВОЧНИКА, на ней есть кнопка, которая вызывает управляемую форму ДОКУМЕНТА. Необходимо, чтобы при открытии формы документа, поля автоматически заполнялись данными из открытой формы справочника, а при закрытии формы ДОКУМЕНТ измененные данные передавались обратно на форму СПРАВОЧНИКА.
Буду очень благодарен за помощь!

dv.garkin

Смотри в сторону передать параметры в ОткрытьФорму, в синтакс-помощнике об том написано.

Funt432286

К сожалению не могу разобраться с синтаксисом данной процедуры. Может кто подскажет, если не трудно! Нужная форма открывается, а вот с передачей данных из полей ввода - проблема.

alex0402

ЦитироватьОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>, <ОписаниеОповещенияОЗакрытии>, <РежимОткрытияОкна>)

<Параметры> (необязательный)

Тип: Структура.
Параметры формы. Ключ структуры - имя параметра, а значение - значение параметра формы. Имя элемента должно совпадать с именем параметра структуры.
П = Новый Структура("Ключ", Поставщик);
Форма = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", П);
Форма.Открыть();


т.е. нужно передать произвольную структуру и проанализировать ее в ПриСозданииНаСервере в самой форме.
Спасибо за Сказать спасибо

Funt432286


dv.garkin

Короче, как-то вот так будет:
В форме, которая главная пишем следующий код:

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

ПараметрыФормы = Новый Структура("Проверка", "Это проверка"); //Это параметры, которые передаются в открываемую форму
ОткрытьФорму("ОбщаяФорма.ФормаВторая", ПараметрыФормы, ЭтаФорма, ЭтаФорма.УникальныйИдентификатор, , ,Оп);
КонецПроцедуры

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


Далее, в открываемой форме пишем там


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

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

Добавлено: 27 окт 2017, 10:11


Хотя на счет только на Сервере, я чет затупил:

УправляемаяФорма (ManagedForm)
Параметры (Parameters)
Использование:

Только чтение.
Описание:

Тип: ДанныеФормыСтруктура.
Содержит коллекцию параметров формы.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).

Добавлено: 27 окт 2017, 10:15


Да, все верно, только на Сервере ПриСозданииНаСервере Параметры есть, дальше они уже пустые. Только что проверил.

bsn-chita

Цитировать
Да, все верно, только на Сервере ПриСозданииНаСервере Параметры есть, дальше они уже пустые. Только что проверил.
Если в управляемой форме(там где реквизиты\команды\параметры) создать параметр и установить галочку Ключевой параметр, то он будет доступен на протяжении всей жизни формы.

dv.garkin

Кстати, вот еще один интересный способ обмена данными между формами, так сделаны формы Подбора

ПоместитьВоВременноеХранилище(Товары.Выгрузить(), АдресТоваровДокумента);


А вот так вытаскиваем

Товары.Загрузить(ПолучитьИзВременногоХранилища(АдресТоваровДокумента));


Вообще интересный вариант применяется в 1С'овских конфигурациях для решения данной задачи.

При открытии формы подбора устанавливается Владелец формы в ЭтотОбъект

ФормаПодбора = ОткрытьФорму("ОбщаяФорма.ФормаПодбора", ПараметрыПодбора, ЭтотОбъект);


Далее, когда уже все набрано и нажимаем Закрыть форму подбора, вызываем экспортную процедуру из формы Владельца


ВладелецФормы.ОбработатьПодбор();
Закрыть();


А там просто получаем данные из Хранилища

&НаКлиенте
Процедура ОбработатьПодбор() Экспорт

ПолучитьТоварыИзХранилища(АдресТоваровВХранилище); 

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

Funt432286

Как-то ВСЕ очень сложно с пониманием и синтаксисом. Почему нельзя сделать просто, например как на DELPHI:
  if Messagedlg('Îôîðìèòü çàÿâêó íà äàííûé ìàòåðèàë?', mtconfirmation,[mbYes,mbNo],0)=mrYes
  then begin
    Application.CreateForm(TfmZakazMat, fmZakazMat);    / открытие формы
    fmZakazMat.Visible:=True;
{-- передача данных из объекта ПОЛЕ ввода исходной формы (Edit) в поле ввода открываемой -- }
    fmZakazMat.eMaterial.Text := dbeNamePaper.Text+' / '+dbeMasPaper.Text+' / '+dbeFormat.Text;
    fmZakazMat.eFirma.Text    := dbeFirma.Text;
    fmZakazMat.eKolMat.Text   := fmPaperMan.eZakazList.Text;
    fmZakazMat.eOtdel.Text    := 'öèôðîâàÿ ïå÷àòü';
    fmZakazMat.btnOform_M.Enabled := True;
  end;

Таким образом можно реализовать передачу данных из формы справочника в форму документа на 1С?
Или на крайний случай, передачу данных из списка справочника выбранного элемента на форму документа по нажатию кнопки на форме списка?

alex0402

Цитата: Funt432286 от 03 ноя 2017, 00:31Таким образом можно реализовать передачу данных из формы справочника в форму документа на 1С?

Таким образом можно было в обычном приложении, когда было слабое разделение вычислений клиент-сервер.
Спасибо за Сказать спасибо

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск