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

09.11.20

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Передача реквизитов, данных между формами одного объекта(УФ)
.epf 9,31Kb
36
36 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

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

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

12000 руб.

02.09.2020    171901    962    403    

924

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14411    109    46    

108

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

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

22200 руб.

06.10.2023    17315    43    15    

75

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

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

9360 руб.

17.05.2024    27309    96    48    

138

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

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

15000 руб.

10.11.2023    11918    45    27    

67

SALE! %

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

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

4800 3840 руб.

14.01.2013    191285    1152    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

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

20000 руб.

07.10.2021    18101    7    32    

42

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1136    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. KurganPX 22.10.15 16:38 Сейчас в теме
С одной стороны - оригинально, с другой, ни что не мешает использовать параметры - это если при открытии и функцию "Оповестить" с параметром, содержащим идентификатор открытой формы.
2. nixel 1441 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_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
Объект.Наименование = Параметры.Наименование ;
Объект.Владелец = Параметры.СсылкаНаРодителя;
Объект.ХарактеристикаПродукции = Параметры.Характеристика;
КонецПроцедуры
ksenya_yar; mark2_tourer; Mr_Skelegreen; HalWin; +4 Ответить
5. mxm2 1268 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 1268 26.04.19 15:04 Сейчас в теме
(7) Ага, только заголовок статьи "Передача реквизитов, данных между формами одного объекта (УФ)"
9. Dunda 49 03.03.21 14:38 Сейчас в теме
Спасибо за подробную инструкцию. все работает!!!
10. user1624078 22.12.21 15:45 Сейчас в теме
(5) Можно без выпендривания - ВернутьПутьКФормам ????
11. Profenix 21 21.10.22 22:15 Сейчас в теме
А можно еще проще:
Сначала.
Значение = ОткрытьФормуМодально("ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма1"); 

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

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