При разработке в платформе 1С:Предприятие 7.7 программисты часто сталкиваются с ситуацией, когда вызов функции ОткрытьФорму() для нового документа не приводит к открытию окна. Проанализируем, почему это происходит и какими способами можно открыть форму нового документа.
Если требуется просто открыть пользователю форму для ввода нового документа конкретного вида, используется прямой вызов функции ОткрытьФорму() с указанием вида метаданных в первом параметре.
Важно обратить внимание на второй параметр: в него передается переменная, в которую платформа возвращает контекст созданной формы. Не следует передавать служебное слово Контекст текущего модуля напрямую, если необходимо корректно обработать возвращаемое значение. Подготовим пустую переменную перед вызовом:
ПеремКонтекст = "";
ОткрытьФорму("Документ.Бронь_Подрезки", ПеремКонтекст);
Если требуется передать в открываемую форму начальные данные или параметры, в качестве второго параметра можно передать значение или объект СписокЗначений. В самом открываемом документе эти параметры можно считать в процедуре ПриОткрытии() через свойство Форма.Параметр.
Рассмотрим ситуацию, когда документ создается и предварительно заполняется программным путем через объект СоздатьОбъект("Документ.Вид").
В платформе 1С 7.7 объект документа, созданный через СоздатьОбъект(), существует только в оперативной памяти и еще не имеет ссылки в базе данных (значение ТекущийДокумент() не определено). Если передать незаписанный объект в ОткрытьФорму(), платформа не сможет открыть его форму.
Чтобы открыть форму созданного программно документа, его необходимо предварительно записать в базу данных с помощью метода Записать(), после чего передать его ссылку в ОткрытьФорму():
ДокБронь = СоздатьОбъект("Документ.Бронь_Подрезки");
ДокБронь.Новый();
// Заполнение реквизитов документа
ДокБронь.Записать();
// Открытие формы уже сохраненного документа
ОткрытьФорму(ДокБронь.ТекущийДокумент(), Контекст);
Разберем основные причины, по которым форма документа может не открываться:
ПриОткрытии(), ВводНового() или ВводНаОсновании() команды СтатусВозврата(0), которая отменяет открытие формы.