Передача реквизитов, данных между формами (УФ)

09.11.20

Разработка - Инструментарий разработчика

Показан механизм, как можно передавать данные между управляемыми формами

Скачать исходный код

Наименование Файл Версия Размер
Передача реквизитов, данных между формами одного объекта(УФ)
.epf 9,31Kb
33
.epf 9,31Kb 33 Скачать

Разные управляемые формы одного объекта имеют при открыти формы свое Представление реквизитов Объекта.  Чтобы передать данные реквизита одной формы в другую, надо сделать следующее. 

1) Первая форма передает реквизит Второй форме. Из первой открываем Вторую.

Перед открытием Второй формы передаваемый реквизит сохраняем во временное хранилище. Адрес временного хранилища передаем в качестве параметра при открытии Второй формы. На Второй форме получаем данные из временного хранилища и используем их.

При открытии Второй формы.

&НаКлиенте
Процедура Открыть1(Команда)
СтрутураПараметров = Новый Структура;
СтрутураПараметров.Вставить("Адрес",ПоместитьДанныеВоВременноеХранилище()); 
// передаем в качестве параметра адрес временного хранилища
ИМЯ=ПолучитьПолноеИмяФормы("Вторая");
ОткрытьФорму(Имя,СтрутураПараметров,ЭтаФорма,);
КонецПроцедуры
//помещаем нужные нам данные для передачи во временно хранилище
//Объект.Строка
&НаСервере
Функция ПоместитьДанныеВоВременноеХранилище() 
Адрес = ПоместитьВоВременноеХранилище(Объект.Строка,ЭтаФорма.УникальныйИдентификатор); 
Возврат Адрес; 
КонецФункции
&НаКлиенте 
Функция ПолучитьПолноеИмяФормы(ИмяФормы)
    СимволТочка = ".";
    ПозицияТочки = СтрДлина(ЭтаФорма.ИмяФормы);
    Пока Сред(ЭтаФорма.ИмяФормы, ПозицияТочки, 1) <> СимволТочка Цикл ПозицияТочки = ПозицияТочки - 1; КонецЦикла; 
    Возврат Лев(ЭтаФорма.ИмяФормы, ПозицияТочки) + ИмяФормы;

КонецФункции

Получаем данные во Второй форме.

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

2) Вторая форма передает реквизит Первой. Вторая открыта из Первой.

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

Передаем данные из Второй формы

//Записываем данные во временное хранилище
//Объект.Строка
&НаСервере
Функция ЗаписатьВХранилище()
	Возврат ПоместитьВоВременноеХранилище(Объект.Строка); 
КонецФункции

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

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

УФ Реквизиты Данные Передача

См. также.

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    135427    744    391    

777

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    10687    25    6    

55

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

5400 руб.

17.05.2024    7642    20    12    

51

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    6615    18    2    

44

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 руб.

14.01.2013    180833    1101    0    

874

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15706    3    12    

38

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    100751    241    97    

300

Инструментарий разработчика Перенос данных 1C Программист Платформа 1С v8.3 Платные (руб)

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

2400 руб.

24.09.2019    24227    17    15    

34
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. KurganPX 22.10.15 16:38 Сейчас в теме
С одной стороны - оригинально, с другой, ни что не мешает использовать параметры - это если при открытии и функцию "Оповестить" с параметром, содержащим идентификатор открытой формы.
2. nixel 1418 30.10.15 13:36 Сейчас в теме
Разработка управляемого интерфейса
Там все это есть более подробно, аккуратно и корректно.
3. dj_serega 393 30.03.16 07:55 Сейчас в теме
Да, вроде оригинально, но как-то через одно место (или только мне так показалось?).
mark2_tourer; Mr_Skelegreen; +2 Ответить
4. Voblhned 58 18.04.18 10:57 Сейчас в теме
А почему нельзя сделать намного проще, ведь хранилище используется для больших объемов данных. Можно чисто через параметры передать.

Вот пример заполнения(расширение конфы) из Характеристик -> Спецификацию на УНФ

&НаКлиенте
Процедура Расш1_ЗаполнитьСпецификациюПосле(Команда)
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Наименование", Объект.Наименование);
ПараметрыОткрытия.Вставить("СсылкаНаРодителя", Объект.Владелец);
ПараметрыОткрытия.Вставить("Характеристика", Объект.Ссылка);
ОткрытьФорму("Справочник.Спецификации.ФормаОбъекта", ПараметрыОткрытия);
КонецПроцедуры


В форме которая принимает прописываем:

&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
Объект.Наименование = Параметры.Наименование ;
Объект.Владелец = Параметры.СсылкаНаРодителя;
Объект.ХарактеристикаПродукции = Параметры.Характеристика;
КонецПроцедуры
mark2_tourer; Mr_Skelegreen; HalWin; +3 Ответить
5. mxm2 1267 05.07.18 09:39 Сейчас в теме
Так проще:

Вариант 1: Если требуется значение реквизитов на сервере (производятся некие серверные вычисления до открытия формы) то:

При открытии формы нужно дополнительно передать параметр ЭтаФорма.Объект:

ОткрытьФорму(ВернутьПутьКФормам() + "ФормаДокумента", Новый Структура("СсылкаНаЭлемент, ЗакрыватьПриЗакрытииВладельца, ОбъектОтВладельца", ТД.Ссылка, Истина, ЭтаФорма.Объект), ЭтаФорма, ТД.Ссылка.УникальныйИдентификатор());


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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	КопироватьДанныеФормы(Параметры.ОбъектОтВладельца, Объект);
...
...
КонецПроцедуры


Вариант 2: Если требуется значение реквизитов на клиенте (при открытии формы не требуется вызова сервера):

При открытии формы достаточно передать владельца формы ЭтаФорма:

ОткрытьФорму(ВернутьПутьКФормам() + "ФормаДокумента", Новый Структура("СсылкаНаЭлемент, ЗакрыватьПриЗакрытииВладельца", ТД.Ссылка, Истина), ЭтаФорма, ТД.Ссылка.УникальныйИдентификатор());


В открываемой форме (ПриОткрытии):

&НаКлиенте
Процедура ПриОткрытии(Отказ)
  КопироватьДанныеФормы(ВладелецФормы.Объект, Объект);
  ...
КонецПроцедуры


Тут все более-менее стандартно, подробнее второй вариант: http://1c-e.ru/%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0-%D1%80%D0%B5%D0%BA%D0%B2%D0%B8%D0%B7%D0%B8%D1%82%D0%BE%D0%B2­-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0-%D0%B8%D0%B7-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2/

Единственное о чем стоит не забыть, так это о том, что для сложных реквизитов (типа Таблиц значений) в каждой из форм участвующих в передаче, нужно прописывать состав элементов (колонок) в конфигураторе.
user_2010; marku; DataReducer; kotlovD; +4 Ответить
6. kotlovD 88 30.01.19 10:10 Сейчас в теме
(5) Спасибо, то что надо! Комментарий ценнее публикации
Mr_Skelegreen; +1 Ответить
7. AlexeyX 25.04.19 16:57 Сейчас в теме
Комментарий в (5) - это действительно для форм одного объекта.
А метод в статье подходит для всего, хоть для передачи во внешнюю обработку.
8. mxm2 1267 26.04.19 15:04 Сейчас в теме
(7) Ага, только заголовок статьи "Передача реквизитов, данных между формами одного объекта (УФ)"
9. Dunda 48 03.03.21 14:38 Сейчас в теме
Спасибо за подробную инструкцию. все работает!!!
10. user1624078 22.12.21 15:45 Сейчас в теме
(5) Можно без выпендривания - ВернутьПутьКФормам ????
11. Profenix 17 21.10.22 22:15 Сейчас в теме
А можно еще проще:
Сначала.
Значение = ОткрытьФормуМодально("ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма1"); 

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

КонецПроцедуры
Показать
12. nixel 1418 22.10.22 09:34 Сейчас в теме
(11) почти во всех современных решениях модальные окна запрещены. А в вебе эта конструкция просто не будет работать.
user623300_it-otdel.ts; fuser; +2 Ответить
13. user623300_it-otdel.ts 06.02.24 08:43 Сейчас в теме
Оставьте свое сообщение