Как передать реквизит формы в другую форму

Ключевые слова: передать значение, значение в форму, передать параметр, передать параметр в форму, параметр в форму, передать праметр в форму

Как из одной формы открыть другую, передав параметры, и получить обратно результат?

Варианты:

1. ОткрытьМодально, параметр закрытия, метод Закрыть

//первая форма
ВозвращаемоеЗначение = ДругаяФорма.ОткрытьМодально();

//в другой форме:
ЭтаФорма.Закрыть(ВозвращаемоеЗначение);

2. Реквизиты формы (или свойства расширения формы)

Реквизиты формы видимы снаружи как свойства объекта Форма. Их можно создать столько сколько нужно и присвоить им нужный тип.

//в первой форме
ДругаяФорма.ИмяРеквизита = Значение;

см. также: Книга знаний: v8: Реквизиты форм

3. Через ЭлементыФормы (не очень красиво)

//в первой форме
ДругаяФорма = ДокументСсылка.ПолучитьФорму();
ДругаяФорма.ЭлементыФормы.ИмяПоля.Значение = Значение;

4. Оповещения

//в первой форме оповестить все открытые формы
Оповестить("ИмяСобытия","Форма1",Данные)

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

5. Экспортные переменные модулей форм

Они становятся видимы снаружи, примерно как реквизиты форм:

//в первой форме
ДругаяФорма.ИмяПеременной = Значение;

//в другой форме
Перем ИмяПеременной Экспорт;

6. Экспортные переменные модуля объекта, если он является основным реквизитом формы

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

//в первой форме
ДругаяФорма.ИмяПеременной = Значение;

//в модуле объекта 
Перем ИмяПеременной Экспорт;

7. Глобальные переменные (экспортные переменные модуля приложения)

8. Внешний файл

9. СохранитьЗначение, ВосстановитьЗначение

10. Параметры сеанса

//в первой форме
ПараметрыСеанса.ИмяПараметра = Значение;

//в другой форме
Если ПараметрыСеанса.ИмяПараметра = Значение Тогда
КонецЕсли;

Обратите внимание! Попытка прочитать неинициализированный параметр сеанса приводит к ошибке! Поэтому нужно инициализировать все параметры сеанса раньше, например, еще в процедуре ПриНачалеРаботыСистемы.

11. Объекты базы данных (справочники, константы, регистры сведений и т.д.)

12. Частный случай — при вызове формы для выбора значения в элемент, например поле ввода, не передается ссылка на текущую форму, в которой этот элемент располагается. Поэтому данные или ссылку на эту форму можно передать в некоторых редко используемых реквизитах поля ввода, например: «СписокВыбора».

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

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

Рассмотрим два способа решения этой задачи: без обращения к серверу и с обращением к серверу.

Без обращения к серверу

Создадим форму списка у справочника Номенклатура не назначая ее основной. Добавим реквизит формы ПодобранныеНоменклатуры (тип ТаблицаЗначений) и разместим соответствующий элемент формы. Для полей динамического списка ЭтоГруппа и Ссылка установим флаг ИспользоватьВсегда. Чуть позже станет понятно, для чего.

Все действия выбора будут сводиться к добавлению строки в таблицу ПодобранныеНоменклатуры элементов динамического списка. Если элемент уже был добавлен в таблицу, то увеличиваем его количество. Код обработки выбора элемента списка номенклатуры:

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    // Проверка на наличие выбранной строки в динамическом списке
    ТекущиеДанные = Элементы.Список.ТекущиеДанные;
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;       
    // Для групп номенклатуры подбор не производится. Именно для обращения
    // к свойству «ЭтоГруппа» был установлен флаг «Использовать всегда», иначе
    // при отсутствии колонки «Это группа» в списке вылетала бы ошибка
    // «Поле объекта не найдено»
    Если ТекущиеДанные.ЭтоГруппа Тогда
        Возврат;
    КонецЕсли;
    // Отключаем стандартную обработку
    СтандартнаяОбработка = Ложь;
    // Ищем товар в таблице ПодобранныеНоменклатуры. Если нет — добавляем
    // строку, иначе увеличиваем количество
    РезультатПоиска = ПодобранныеНоменклатуры.НайтиСтроки(
        Новый Структура("Наименование", ТекущиеДанные.Ссылка)
    );
    Если РезультатПоиска.Количество() = 0 Тогда
        Строка = ПодобранныеНоменклатуры.Добавить();
        Строка.Наименование = ТекущиеДанные.Ссылка;
    Иначе
        Строка = РезультатПоиска[0];
    КонецЕсли;
    Строка.Количество = Строка.Количество + 1;
КонецПроцедуры

Форма подбора номенклатур вызывается из формы документа ПриходнаяНакладная по команде Подбор:

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

Когда в форме выбора необходимые номенклатуры подобраны, выполняется команда ПеренестиКлиент:

&НаКлиенте
Процедура ПеренестиКлиент(Команда)
    // Передаем данные выбора владельцу формы, т.е. документу ПриходнаяНакладная
    ОповеститьОВыборе(ПодобранныеНоменклатуры); 
КонецПроцедуры

Теперь подобранные номенклатуры доступны в обработчике ОбработкаВыбора элемента формы документа:

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

С обращением к серверу

Отличия в реализации подбора будут в этом случае только в передаче данных в документ и, затем, обработки подобранных номенклатур в документе. Вот таким образом будет выглядеть команда передачи данных в документ из подбора:

&НаКлиенте
Процедура ПеренестиСервер(Команда)
    // Помещаем подобранные номенклатуры во временное хранилище на
    // сервере  и получаем соответствующий адрес в нем
    Адрес = ПодготовитьДанныеПодбора();
    // Передаем владельцу формы данные выбора 
    ОповеститьОВыборе(Адрес); 
КонецПроцедуры

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

Обработчик события ОбработкаВыбора элемента формы документа:

&НаКлиенте
Процедура СоставОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    // Обрабатываем выбранные номенклатуры на сервере
    ОбработатьВыбранноеЗначение(ВыбранноеЗначение);
КонецПроцедуры

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

Поиск:
1С:Предприятие • Документ • Обработка выбора • Открыть форму • Список • Справочник • Управляемая форма

Передача данных между обычными формами 1С

Существует несколько вариантов передачи данных между формами в режиме обычного приложения 1С предприятия

Быстрый переход

  • Список способов
    • Механизм работы в первом случае:
    • Метод Оповестить() второго способа
    • Обмен через объекты-посредники:
    • Остальные методы:

Список способов

  1. Непосредственная запись в реквизиты формы
  2. Оповещение формы
  3. Оповещение владельца формы (о выборе, о записи)
  4. Оповещение подчиненным формам (об активизации строки, объекта)
  5. Оповещение об изменении
  6. Через объекты посредники (справочники, регистры сведений, файлы)

Механизм работы в первом случае:

  • получается объект типа «Форма», например через метод Справочники.Контрагенты.ПолучитьФорму () или ЭтаФорма.Владелец (если форма является подчиненной и владелец задан)
  • запись в известные заранее реквизиты формы

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

Метод Оповестить() второго способа

Является самым универсальным для обмена, поскольку предоставляет возможности:

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

Обмен через объекты-посредники:

  • Требует наличия объекта, доступа к нему
  • Не вызывает события изменения как и в первом случае
  • Требует периодического считывания данных для проверки
  • Позволяет передавать известные заранее типы значений

Используется, например, при организации чатов, оповещениях пользователей об обновлениях

Остальные методы:

ОповеститьОбАктивизацииОповеститьОбАктивизацииОбъекта, ОповеститьОбИзменении, ОповеститьОВыборе, ОповеститьОЗаписиНового, ОповеститьОЗаписиНовогоОбъекта  являются узкоспециализированными и односторонними (владельцу формы, подчиненным формам)

Делать деньги без рекламы может только монетный двор.

2 / 2 / 0

Регистрация: 06.04.2018

Сообщений: 149

1

Передача значений реквизитов между формами

30.06.2022, 11:22. Показов 1541. Ответов 14


Подскажите пожалуйста как можно передавать значения реквизитов в другую форму?
У меня есть документ Прием на работу и справочник Сотрудники. Мне нужно передавать реквизиты и их значения из Приема на работу в Сотрудники.
Нужные реквизиты для передачи в другую форму подчеркнуты

Передача значений реквизитов между формами



0



262 / 218 / 94

Регистрация: 07.04.2011

Сообщений: 1,342

30.06.2022, 18:51

2

ПараметрыФормы = Новый Структура(«МойКлюч»,МоеЗначение);
ОткрытьФорму(,,ПараметрыФормы).При открытии передаете параметры

И в событии «ПриСозданииНаСервере» открываемой формы ловите «Параметры» и дергаете из них то что надо.



0



2 / 2 / 0

Регистрация: 06.04.2018

Сообщений: 149

13.07.2022, 12:44

 [ТС]

3

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



0



1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,395

13.07.2022, 15:05

4

cyberlohh, получитьформу с ключом ссылка на сотрудника. а там в объекте все реквизиты



0



2 / 2 / 0

Регистрация: 06.04.2018

Сообщений: 149

13.07.2022, 15:06

 [ТС]

5

Я не силен в этом. Не подскажите как это сделать?



0



cyberlohh

2 / 2 / 0

Регистрация: 06.04.2018

Сообщений: 149

13.07.2022, 15:08

 [ТС]

6

В форме документа «Прием на работу» добавил такой код

1C
1
2
3
Длительность = Объект.ДлительностьИспытательногоСрока;
    ПараметрыФормы = Новый Структура("ДлительностьИспытательногоСрока", Длительность);
    ОткрытьФорму("Справочник.Сотрудники.Форма.ФормаЭлемента", ПараметрыФормы);



0



1142 / 689 / 203

Регистрация: 22.04.2013

Сообщений: 5,159

Записей в блоге: 1

13.07.2022, 15:39

7

молодец. всё получилось?



0



2 / 2 / 0

Регистрация: 06.04.2018

Сообщений: 149

13.07.2022, 15:41

 [ТС]

8

Неа. Передача значений не осуществляется и как ее реализовать я хз.
Может, у тебя есть идеи?



0



1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,395

13.07.2022, 15:42

9

cyberlohh, см скрин

Миниатюры

Передача значений реквизитов между формами
 



0



2 / 2 / 0

Регистрация: 06.04.2018

Сообщений: 149

13.07.2022, 16:00

 [ТС]

10

Сотрудник = ПолучитьС(); выходит ошибка, что переменная с заданным именем не определена
И даже если вместо «ПолучитьС» ввести «Получить», то выходит такая же ошибка



0



1142 / 689 / 203

Регистрация: 22.04.2013

Сообщений: 5,159

Записей в блоге: 1

13.07.2022, 16:08

11

а что вы написали? а то нострадамус в отпуске. июль, сами понимаете



0



cyberlohh

2 / 2 / 0

Регистрация: 06.04.2018

Сообщений: 149

13.07.2022, 16:11

 [ТС]

12

1C
1
2
3
4
5
6
7
&НаКлиенте
Процедура Расш1_ПослеЗаписиПосле(ПараметрыЗаписи)
     Длительность = Элементы.ДлительностьИспытательногоСрока;
    Параметры = Новый Структура();
    Параметры.Вставить("ДлительностьИспытательногоСрока", Длительность);
    ПолучитьФорму("Документ.ПриемНаРаботу.ФормаДокумента",Параметры);
    КонецПроцедуры

Только это, и то выводит ошибку. Я уже совсем потерялся с этим



0



262 / 218 / 94

Регистрация: 07.04.2011

Сообщений: 1,342

13.07.2022, 17:21

13

А получитьФорму разве не должно результат возвращать?
Форма =ПолучитьФорму…



0



262 / 218 / 94

Регистрация: 07.04.2011

Сообщений: 1,342

13.07.2022, 17:23

14

Вот лично сегодня открывал форму с параметрами.Все работает.
Где они не передаются? Я не вижу кода ПРИНИМАЮЩЕГО эти параметры.



0



polax

1808 / 1228 / 442

Регистрация: 16.01.2015

Сообщений: 5,395

13.07.2022, 18:01

15

Цитата
Сообщение от cyberlohh
Посмотреть сообщение

&НаКлиенте
Процедура Расш1_ПослеЗаписиПосле(ПараметрыЗаписи)
     Длительность = Элементы.ДлительностьИспытательногоСрока;
    Параметры = Новый Структура();
    Параметры.Вставить(«ДлительностьИспытательногоСрок а», Длительность);
    ПолучитьФорму(«Документ.ПриемНаРаботу.ФормаДокумен та»,Параметры);
    КонецПроцедуры

Выкинуть. Сделано без малейшего понимания. Да и вопрос задан неверно. Судя по попытки кода просто надо получить данные из справочника, чтобы заполнить создаваемый документ.
В событии ПриИзменении реквизита Сотрудник создаваемого документа Прием на работу (в расширении):

1C
1
2
3
4
5
6
7
8
&НаКлиенте
Процедура Расш1_СотрудникПриИзмененииПосле(Элемент)
  Объект.ДлительностьИспытательногоСрока = ПолучитьДлительность(Объект.Сотрудник)   
    КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьДлительность(Сотрудник)
Возврат Сотрудник.ДлительностьИспытательногоСрока;
КонецФункции

Не по теме:

ЗЫ Зарекся отвечать на такие вопросы. По три-четыре раза в неделю одно и тоже. Но тут-то как был задан!



0



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

Открытие формы

Необходимо модально открыть произвольную форму с помощью функции ОткрытьФормуМодально().

Значение = ОткрытьФормуМодально("ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма1"); 

Закрытие формы с возвратом значения

У открытой формы необходимо вызвать встроенный метод Закрыть(), который на вход принимает возвращаемое значение. Тип возвращаемого значения произвольный. В данном примере возвращается структура.

Процедура ДополнительнаяФормаКнопкаВыполнитьНажатие(Кнопка)

Значение

= Новый Структура();
Значение.Вставить("Параметр1", "Значение1");
Значение.Вставить("Параметр2", "Значение2");
Значение.Вставить("Параметр3", "Значение3");
ЭтаФорма.Закрыть(Значение);КонецПроцедуры

Всем привет. Осваиваю управляемые формы. У документа две формы. Из первой нужно открыть вторую (там редактируется скрытая табличная часть).  Как это лучше сделать? Через временное хранилище передавать «объект» или как-то через параметры формы? Я понимаю, вопрос элементарный, но я что-то не могу понять как сделать.

Т.е. проблема в том, что открывается форма, никак не связанная с первой.

а может лучше на 1 форме сделать 2 закладки и рулить программно их видимостью?

ОткрытьФорму(<ИмяФормы>, <Параметры>… <Параметры> (необязательный) Тип: Структура. Параметры формы. Ключ структуры — имя параметра, а значение — значение параметра формы. Имя элемента должно совпадать с именем параметра структуры.

Глянь топик 24 в сообщении … впрочем и само обсуждение — тоже глянь :)

Как передавать параметры я знаю. Ты как предлагаешь? Так:     Ну допустим. В открывающейся форме этот параметр будет доступен при создании на сервере через Параметры.ИмяПараметра? Во-первых мне в открывающейся форме нужно завести параметр. С каким типом? ДанныеФормыСтруктура? Этого сделать, как ты понимаешь, нельзя. Да и вообще задача не параметр в форму передать(!), а сделать так, чтобы в подчиненной форме можно было продолжить редактирование текущего открытого документа, а потом закрыть форму и продолжить работу в основной.

Здесь как-то надо в прикладной тип перевести данные формы, передать их в другую форму и там из прикладного типа снова сделать «данные формы структура».

Упс, я пас. «Что сделать» и «Как сделать» — это несколько разные вопросы. Я могу сказать как бы я это сделал: если очень хочется табличную часть редактировать в отдельной форме — то я бы использовал внешнюю обработку табличной части. А то, что вы предлагаете… эээ… как бы помягче сказать… не очень :(

всё-же почему не 1 форма с группой страницы у которой 2 группы типа страница. Переключая видимость групп типа страница получите совсем разного наполнения формы… или вам обязательно в 2 разных окнах?

Да ситуация тривиальнее некуда. Вот в обычных формах как было. Можно было присобачить к документу несколько форм, установить им основной реквизит и разместить хоть каждый реквизит на отдельной форме. Потом в какой бы ты форме не работал — ты работаешь с прикладным объектом «документ объект», будь то новый или существующий. Даже программировать ничего не надо, просто формы открывать. Вот надо то же, но на управляемых реализовать. А не потому, что интерфейс не позволяет этого сделать. И вообще я переделываю то, что было в обычных формах реализовано на управляемые. И не думал, что такие сложности будут. А там сделано именно так. Не хочется пользователям объяснять «извините, я не знаю как сделать, поэтому у вас теперь будет не кнопка, а закладка». Ну не айс короче.

так делай видимой в 1 момент времени только 1 закладку и типа так и было!

В общем, получилось. Уж не знаю на сколько красиво или коряво. Если кто знает как решить именно эту задачу (а не сделать по-другому) красивее, подскажите пожалуйста. Модуль основной формы: Модуль вспомогательной формы: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Понравилась статья? Поделить с друзьями:
  • Как перезагрузить вебасто на газель бизнес
  • Как перейти с ип на ооо не закрывая бизнес
  • Как переключить whatsapp на бизнес аккаунт
  • Как переключить страницу фейсбук на бизнес
  • Как переоформить лизинг на другую компанию