Итак вопрос №1: Как открыть форму еще не записанного документа (не заполнить на основании) ?
Ответ: Чтобы открыть форму нам нужно связать ее с ссылкой объекта, но объект еще не записан. Многие пытаются использовать метод УстановитьСсылкуНового() но это не прокатывает. После долгих чтений я сделал вот так:
&НаКлиенте
Процедура Команда(Команда)
Форма = ПолучитьФорму("Документ.НашДокумент.ФормаОбъекта");
ДанныеФормы = Форма.Объект; // Получаем объект формы в переменную
ЗаполнитьДокументНаСервере(ДанныеФормы); // Заполняем документ на сервере
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); // копируем наш объект в объект формы и далее открываем ее
Форма.Открыть();
КонецПроцедуры
// Можно использовать безконтекстный вызов, оптимизируем передачу данных
&НаСервереБезКонтекста
Функция ЗаполнитьДокументНаСервере(ДанныеФормы);
Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.НашДокумент")); // Получаем объект из данных формы ИЛИ
Док = Документы.НашДокумент.СоздатьДокумент();
// Заполняем реквизиты объекта или другие действия ********
ЗначениеВДанныеФормы(Док,ДанныеФормы); // Кладем обратно в объект формы уже созданный документ
КонецФункции
2. Как открыть форму уже записанного документа?
Здесь есть два метода ОткрытьФорму() или ОткрытьЗначение(). В обоих случаях нужно передавать ссылку на записанный документ.
&НаКлиенте
Процедура Команда(Команда)
СсылкаОбъекта = СоздатьНаСервере();
//1.
ОткрытьФорму("Документ.НашДокумент.Егоформа", Новый Структура("Ключ", СсылкаОбъекта)); // Через параметры мы передаем ссылку документа
//2.
ОткрытьЗначение(СсылкаОбъекта);
КонецПроцедуры
&НаСервере
Функция ЗаполнитьДокументНаСервере()
// Используем метод создать
НовыйОбъект = Документы.НашДокумент.СоздатьДокумент();
// Заполняем его
НовыйОбъект.Записать(); // Обязательно записываем
Возврат НовыйОбъект.Ссылка; //Возвращаем ссылку
КонецФункции
На уникальность материла не претендую, сам только "начинающий" так что если что не так - критикуйте!