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

09.11.20

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

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

Файлы

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

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

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

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

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

15500 руб.

02.09.2020    212796    1159    413    

1049

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

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

8400 руб.

20.08.2024    40378    219    115    

209

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    26476    67    30    

96

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

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

16000 руб.

10.11.2023    18776    75    39    

92

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

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

9500 руб.

17.05.2024    37571    134    55    

176

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

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше.<br/> Далее в публикации:<br/> MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

9900 руб.

25.08.2025    3823    6    10    

14

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

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

3600 руб.

27.12.2024    3661    7    0    

12
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. KurganPX 22.10.15 16:38 Сейчас в теме
С одной стороны - оригинально, с другой, ни что не мешает использовать параметры - это если при открытии и функцию "Оповестить" с параметром, содержащим идентификатор открытой формы.
2. nixel 1461 30.10.15 13:36 Сейчас в теме
Разработка управляемого интерфейса
Там все это есть более подробно, аккуратно и корректно.
3. dj_serega 395 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 1278 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/

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

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

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