Как создать документ, заполнить и добавить в ТЧ другого документа

1. Gendelf 04.05.18 14:41 Сейчас в теме
1С 8.3 КА 2.4 (упр. формы)
Добрый день, есть проблема, которую никак не удается решить. Есть документ Заявка в ней ТЧ_Перевозки, по кнопке создаю документ Перевозка, пользователь заполняет форму и проводит документ. Этот документ должен добавиться в ТЧ_Перевозки.

Создаю документ так:
ЭтотОбъект.Записать();
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ЗаявкаОснование", Объект.Ссылка);
Форма = ПолучитьФорму("Документ.Перевозка.ФормаОбъекта", ПараметрыФормы);
ДанныеФормы = Форма.Объект;
КнСоздатьПеревозкуНаСервере(ДанныеФормы,Объект.Ссылка);
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);		
Форма.Открыть();

Процедура КнСоздатьПеревозкуНаСервере(ДанныеФормы, ДокЗаявка)
ДокументПеревозка = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.Перевозка"));

//частично заполняю документ

ЗначениеВДанныеФормы(ДокументПеревозка,ДанныеФормы);
КонецПроцедуры
Показать


После этого пытался ПриСозданииНаСервере отловить ссылку, и добавить туда свежесозданный документ, но ничего не вышло. Я уверен есть более правильное решение. Подскажите пожалуйста, или киньте пример подобной ситуации.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Неопределено 91 04.05.18 15:08 Сейчас в теме
(1) Если я понимаю правильно и у вас на форме документа Заявка есть кнопка, которая создаёт документ Перевозка, ссылку на который вам нужно добавить в табличную часть Перевозки документа Заявка, зачем вам модуль документа Перевозка? У вас есть некая процедура, создающая документ. Если она работает и документ создаётся, значит в этой процедуре есть строка с текстом типа
НовыйДокументПеревозка.Записать(РежимЗаписиДокумента.Проведение);
Ключевое слово для поиска "Записать". После этой строки для получения ссылки вам нужно что-то вроде
НовыйДокументПеревозка.Ссылка
Следует понимать что "НовыйДокументПеревозка" на самом деле может называться как угодно.
3. Gendelf 04.05.18 18:50 Сейчас в теме
(2)
НовыйДокументПеревозка

Всё верно.
Если документ сразу записать, то проблем конечно нет. Но что если записывать его не будут... пользователи они ведь такие, ткнут, чтобы посмотреть и закроют.
4. Неопределено 91 05.05.18 05:38 Сейчас в теме
(3) А если не запишут, то и добавлять в ТЧ ничего не стоит. Тогда нужно как-то обыгрывать: либо не дать им возможности не записать документ, либо выводить предупреждение о том что документ не был записан.
5. Gendelf 05.05.18 08:35 Сейчас в теме
(4) Решил задачу, коряво, но работает.

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

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

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

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


Показать
7. Неопределено 91 05.05.18 09:39 Сейчас в теме
(5) Мне всё ещё непонятно зачем нужно было лезть в этот модуль. Всё что нужно для описанной проблемы решается в команде кнопки создания документа Перевозка формы документа Заявка.
8. Gendelf 05.05.18 09:43 Сейчас в теме
(7) эти доработки позволят не создавать документ Перевозка, пока пользователь сам его не запишет. Если запишет, мы добавим в Заявку, если нет, то объект не будет создан.
9. Gendelf 05.05.18 09:45 Сейчас в теме
(7) если есть более простое решение, то я бы хотел его увидеть. Читал что можно открыть заполненный документ и передать туда Владельца, чтобы при записи Перевозки уже был "отклик" в Заявку, что документ создан. Но повторить не смог!
10. Неопределено 91 05.05.18 09:52 Сейчас в теме
(9) Покажите код команды, которая открывает форму документа Перевозка из формы документа Заявка.
11. Gendelf 05.05.18 09:57 Сейчас в теме
(10)

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

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


Показать
14. Неопределено 91 05.05.18 10:14 Сейчас в теме
(11) Не совсем как я ожидал. А после строки
Форма.Открыть();
пробовали ещё раз получить объект формы и проверить записан ли он?
15. Gendelf 05.05.18 10:16 Сейчас в теме
(14) хм, попробую сегодня, отпишусь.
18. Gendelf 06.05.18 07:56 Сейчас в теме
(14) к сожалению объект на тот момент ещё не создан, а Форма.Объект хранит в себе ДанныеФормыСтруктура со всеми реквизитами документа
6. Gendelf 05.05.18 08:36 Сейчас в теме
Имеет право на жизнь? :-)
12. SlavaKron 05.05.18 10:02 Сейчас в теме
В заявке хранится ссылка на перевозку, а в перевозке — ссылка на заявку, я правильно понял? Если так, надо что-то менять, — у вас объекты ссылаются друг на друга.
13. Gendelf 05.05.18 10:08 Сейчас в теме
(12) да, чем это грозит? В одной заявке могут быть несколько перевозок, в одной перевозке - несколько заявок.
16. SlavaKron 05.05.18 10:16 Сейчас в теме
(13)Могут возникнуть противоречивые связи, например, один из доков поставлен на удаление или удалена строка ТЧ, в то же время параллельно существуют данные, указывающие на наличие связи.
17. Gendelf 05.05.18 10:27 Сейчас в теме
(16) спасибо за пищу для размышления. Надо предусмотреть, удалить док не смогут, т.к. на него есть ссылка, он хоть и помеченный, но будет в базе. А вот из ТЧ могут удалить легко =/
19. DmitriyV 06.05.18 14:58 Сейчас в теме
Добавьте табличную часть в обработку заполнения по сортировке убывания документов, вызвав тем самым сдвиг последовательности без ограничения пользователя вопросом о смысле жизни и обновив систему компоновки методом благополучия
20. Gendelf 08.05.18 08:12 Сейчас в теме
(19) перечитал много раз, можно чуточку конкретнее? )
Оставьте свое сообщение

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