Каталог решений - Полное копирование одной формы в другую

Полное копирование одной формы в другую

Полное копирование одной формы в другую

В наличии

Однажды я столкнулся с необходимостью открыть форму ЛЮБОГО документа с определенными изменениями, не зависящими от структуры объекта (например, заблокировать все кнопки). В интернете решения я не нашел. Обычно на форумах на запросы подобного рода отвечают чем-то вроде «покажи первоначальную задачу, а не спрашивай как реализовать то, что ты придумал». Тем не менее, мне стало интересно, как это можно сделать.

Категория:

Описание

Возможные варианты использования:

  • У вас есть документ, вам надо что-то в нем поменять, но срабатывает событие "при изменении" и едут суммы. Во внешней форме можно это сделать без обработчиков событий.
  • Вам нужно заполнить реквизит формы (не объекта). Групповое изменение реквизитов работает с объектами, а не с данными формы.
  • Нужно изменить заблокированные реквизиты формы (серенькие).

Изначально идея была такова (упрощенно):

ФормаИсточник = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта");
ФормаПриемник = ПолучитьФорму("ВнешняяОбработка.с_ЗаполнениеИзВнешнейФормы.Форма");

Для Каждого ЭлементИсточник Из ФормаИсточник.Элементы Цикл
	
	ЭлементПриемник = ФормаПриемник.Элементы.Добавить(ЭлементИсточник.Имя, 
		ЭлементИсточник.ТипЭлемента, ФормаПриемник.Элементы[ЭлементИсточник.Родитель.Имя]);
	
	ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник);

КонецЦикла;

Но такой подход оказался нежизнеспособным. Для того чтобы скопировать элементы одной формы на другую, нужно иметь к ним обеим одновременный доступ. А из-за того, что метод ПолучитьФорму() доступен только на клиенте, управлять копированием можно только с клиента. Но на клиенте недоступно свойство ПутьКДанным элементов формы, не доступен метод ПолучитьРеквизиты(). Они доступны только в серверном контексте. А к нему есть доступ только у самой формы.

Поместить форму во временное хранилище и передать через клиента адрес тоже не получится, потому что она не сериализуется. Единственный выход — сериализовать форму самостоятельно.

 

has been added to your cart:
Оформление заказа