Открыть форму незаписанного объекта и записать интерактивно под переданной ссылкой нового

1. DrDrewAvenue 20.02.24 08:25 Сейчас в теме
Коллеги, всем доброго дня!

Имеется такая задача, и я не поминаю решаема ли она в принципе.

На форме есть таблица созданных, но не записанных документов в базу.
Есть реквизит формы "СозданныеДокументы" с типом ТЗ, данные туда добавляются вот так:
НовыйСсылка = Документы[ТипДокумента].ПолучитьСсылку(Новый УникальныйИдентификатор);
	ДокОбъект.УстановитьСсылкуНового(НовыйСсылка);

	НоваяСтрока = СозданныеДокументы.Добавить();
	НоваяСтрока.ДокументСсылка = НовыйСсылка;
	НоваяСтрока.АдресДокументаВХ = ПоместитьВоВременноеХранилище(ОбщегоНазначения.ЗначениеВСтрокуXML(ДокОбъект), УникальныйИдентификатор);


Есть таблица формы, которую видит пользователь, там есть текстовое представление этих созданных и не записанных ещё документов. А поле с ссылкой скрыто от пользователя. Есть обработчик, который открывает форму нового объекта:

&НаКлиенте
Процедура ПеремещенияОСПредставлениеПеремещениеОСОткрытие(Элемент, СтандартнаяОбработка)

	СтандартнаяОбработка = Ложь;
	
	ТекущиеДанные = Элемент.Родитель.ТекущиеДанные;

	ПараметрыФормы = Новый Структура;
	ДокументСсылка = ТекущиеДанные.ДокументПеремещениеОС;
	ДокументСсылка = ПроверитьНаличиеОбъекта(ДокументСсылка);
	
	Если ЗначениеЗаполнено(ДокументСсылка) Тогда
		ПараметрыФормы.Вставить("Ключ", ДокументСсылка);
	КонецЕсли;
	
	Если ТекущиеДанные.ВидПеремещения = "Перемещение ОС" Тогда	
		Форма = ПолучитьФорму("Документ.ПеремещениеОС.ФормаОбъекта", ПараметрыФормы, ЭтаФорма);
	ИначеЕсли ТекущиеДанные.ВидПеремещения = "Перемещение ОС за баланс" Тогда
		Форма = ПолучитьФорму("Документ.Син_ПеремещениеОСзаБаланс.ФормаОбъекта", ПараметрыФормы, ЭтаФорма);
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(ДокументСсылка) Тогда 
		ДанныеФормы = Форма.Объект;
		ЗаполнитьДокументНаСервере(ДанныеФормы, ТекущиеДанные.ДокументПеремещениеОС);
		КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
		Форма.Модифицированность = Истина;
	КонецЕсли;
	
	Форма.Открыть();

КонецПроцедуры
Показать


И вспомогательные методы для открытия формы нового:
&НаСервереБезКонтекста
Функция ПроверитьНаличиеОбъекта(Ссылка)
	
	ЗначениеВозврата = Неопределено;
	
	Если Ссылка.ПолучитьОбъект() <> Неопределено Тогда
		ЗначениеВозврата = Ссылка
	КонецЕсли;
	
	Возврат ЗначениеВозврата
	
КонецФункции

&НаСервере
Функция ЗаполнитьДокументНаСервере(ДанныеФормы, ДокументСсылка)
	
	ТаблицаСозданныеДокументы = РеквизитФормыВЗначение("СозданныеДокументы");
	
	СтрокаТаблицы = ТаблицаСозданныеДокументы.Найти(ДокументСсылка, "ДокументСсылка");

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

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

Показать


В общем получается, что если открыть новый объект и записать его интерактивно, то ссылка устанавливается уже другая, не та, которая нужна. Если писать документы программно через команду формы, то такой вариант отрабатывается.

Сделано это всё для того, чтобы пользователь мог ознакомиться с содержимым документа. И если он решит записать документ интерактивно, то я обрабатываю событие формы-обработки "ОбработкаЗаписиНового", в котором удаляю данные по этому документу из всех таблиц, в которых хранятся созданные и НЕзаписанные документы и перемещаю их в таблицы записанных документов.
Программно, повторюсь это работает, есть кнопка на форме - Записать выбранные. И данные из таблицы создаваемых документов переезжают в таблицу записанных документов.

Решаема ли в принципе такая задача? Передать каким-то образом ссылку нового и записать под этой ссылкой объект именно интерактивно?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 20.02.24 09:44 Сейчас в теме
Затейники.
Пользователю достаточно показать содержимое, которое будет в документе. В таблице значений или еще как. А документ делать уже тогда, когда дело доходит до реального создания документа.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот