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

09.11.20

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

10000 руб.

02.09.2020    129578    700    390    

749

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

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

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

18000 руб.

06.10.2023    9034    25    6    

49

Infostart УДиФ: Управление данными и формами 1С

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

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

10000 руб.

10.11.2023    5217    14    2    

39

PowerTools

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

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

3600 руб.

14.01.2013    179593    1091    0    

868

OneDebugger - инструмент для отладки кода без использования режима конфигуратора

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

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

5400 руб.

17.05.2024    3805    3    12    

27

Бустер Конвертации данных 3 (Infostart Toolkit)

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

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

15000 руб.

07.10.2021    15334    3    12    

38

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

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

5000 руб.

07.02.2018    100249    240    97    

299

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28642    4    10    

17
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. KurganPX 22.10.15 16:38 Сейчас в теме
С одной стороны - оригинально, с другой, ни что не мешает использовать параметры - это если при открытии и функцию "Оповестить" с параметром, содержащим идентификатор открытой формы.
2. nixel 1413 30.10.15 13:36 Сейчас в теме
Разработка управляемого интерфейса
Там все это есть более подробно, аккуратно и корректно.
3. dj_serega 392 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 1413 22.10.22 09:34 Сейчас в теме
(11) почти во всех современных решениях модальные окна запрещены. А в вебе эта конструкция просто не будет работать.
user623300_it-otdel.ts; fuser; +2 Ответить
13. user623300_it-otdel.ts 06.02.24 08:43 Сейчас в теме
Оставьте свое сообщение