Программное открытие новой формы объекта (справочника, документа и прочее) с заполненными значениями полей

16.04.26

Разработка - Механизмы платформы 1С

Корректное открытие формы несуществующего элемента (документа, регистра и прочее) со всеми необходимыми заполненными реквизитами.

В практике программирования в 1С регулярно возникает необходимость или желание открыть форму ещё не существующего объекта с уже заполненными полями. Однако, почти никто не знает, как это корректно сделать — слишком уж неочевидные методы приходится при этом использовать. Поиск в интернете также слабо помогает и содержит ошибки.

Раскрываю эту тему максимально полно и окончательно.

На клиенте:

1 — получаем форму объекта

2 — создаём на основании объекта Объект новую переменную. При этом, происходит неявное копирование.

3 — Передаём новую переменную на сервер

4 — После возврата с сервера, используем метод КопироватьДанныеФормы

5 — Далее, открываем форму объекта, и она уже будет заполнена

 


&НаКлиенте
Процедура ОткрытьФормуНового(Команда)

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

 

На сервере, создаём программно новый объект элемента справочника (документа), заполняем его необходимыми данными, но не записываем в информационную базу, а используем метод ЗначениеВДанныеФормы. При заполнении элемента доступны все его реквизиты и табличные части, делаем всё максимально стандартно, как привыкли.

 

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

 

Ещё раз: в серверной процедуре НЕ НАДО ничего записывать. Объект создаётся в памяти, используется для заполнения значений формы и в конце процедуры неявно уничтожается. А на клиенте Вы получите в результате открытую форму незаписанного нового объекта справочника (документа) (в данном случае используется пример справочника Номенклатура), и сможете уже его записать или отказаться от записи.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Механизмы платформы 1С Программист Бесплатно (free)

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    31441    TitanLuchs    107    

149

Механизмы платформы 1С Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    17208    bayselonarrend    127    

68

Механизмы платформы 1С Программист 1С:Предприятие 8 Бесплатно (free)

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    20954    user2122906    9    

66

Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 Бесплатно (free)

Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.

17.01.2025    36574    user2122906    12    

62

Механизмы платформы 1С WEB-интеграция Программист 1С:Предприятие 8 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    32067    dsdred    106    

148

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    28137    bayselonarrend    22    

177

Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    15279    dsdred    22    

86
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. koln 16.04.26 12:05 Сейчас в теме
В процедуре "ЗаполнитьСтруктуруДанныхНаСервере" вы заполняете только реквизиты объекта. Почему, в таком случае, не воспользоваться стандартным обработчиком "ОбработкаЗаполнения" модуля объекта?
2. Vasvas05 27 16.04.26 12:07 Сейчас в теме
https://infostart.ru/1c/articles/118784/
давно забытое, но не теряет актуальности
3. SlavaKron 16.04.26 13:47 Сейчас в теме
Приём давно известный, но не всегда подходит.
Не отработает ПриЧтенииНаСервере, так как объект новый. А значит, не заполнятся какие-нибудь служебные реквизиты формы.
ПриСозданииНаСервере отработает для незаполненного объекта. Это также может сломать логику формы после заполнения объекта через КопироватьДанныеФормы.
4. coollerinc 188 16.04.26 13:47 Сейчас в теме
Давно я видел этот способ, но так и не понял прикола, зачем создавать новый объект, потом что то копировать, если и так можно заполнять у формы Объект сразу на клиенте. Например вот так, если кто то объяснит буду благодарен.
	ФормаНового = ПолучитьФорму("Справочник.Номенклатура.ФормаОбъекта");
	ФормаНового.Объект.Наименование	= "Ваше наименование";
	ФормаНового.Открыть();

Вообще метод ОткрытьФорму тоже возвращает форму и можно написать, так, просто изменение объекта, сработает позже события ПриОткрытии
ФормаНового = ОткрытьФорму("Справочник.Номенклатура.ФормаОбъекта");
	ФормаНового.Объект.Наименование	= "Ваше наименование";

Ну и как по мне, желательно, что бы логика была на стороне формы и модуля объекта. Вообще не помню что бы я использовал метод ПолучитьФорму() в управляемых формах
5. SlavaKron 16.04.26 13:59 Сейчас в теме
(4)
так и не понял прикола

1. Возможность заполнять на сервере без костылей в виде массива структур.
2. Возможность использовать прикладной объект: в общих модулях часто заполнение работает именно с прикладными объектами.
6. coollerinc 188 16.04.26 16:00 Сейчас в теме
(5) Нее, это явно какой то костыль.Бегло прошелся поиском по типовой конфигурации УХ КопироватьДанныеФормы и ПолучитьФорму используется в основном с отчетами. С документами не увидел
7. SlavaKron 16.04.26 17:17 Сейчас в теме
(6) Бит.Финанс это практикуют.
8. n_mezentsev 113 17.04.26 10:53 Сейчас в теме
Не понимаю, зачем эта строчка:
КопироватьДанныеФормы(СтруктураДанных, ФормаНового.Объект);

Какое-то масло масленое, мы ведь только что заполнили ФормаНового.Объект операцией:
 ЗначениеВДанныеФормы(СпрОб, СтруктураДанных);

Неужели для ДанныеФормыСтруктура реализовано столь желанное копирование при присвоении??)))
9. SlavaKron 17.04.26 13:53 Сейчас в теме
(8)
копирование при присвоении
"Копирование" происходит не при присвоении СтруктураДанных = ФормаНового.Объект, а при завершении процедуры ЗаполнитьСтруктуруДанныхНаСервере: в переменную СтруктураДанных присваивается новое ДанныеФормыСтруктура из серверного вызова.
n_mezentsev; +1 Ответить
10. ixijixi 2145 17.04.26 16:25 Сейчас в теме
Использовать метод ПолучитьФорму() надо только в том случае, если это действительно необходимо. В остальных случаях рекомендуется использовать метод ОткрытьФорму(), передавая необходимые данные при открытии формы в качестве параметров. Такая рекомендация продиктована соображениями повышения устойчивости выполнения кода, а также сохранения единой стилистики кода прикладных решений.

https://its.1c.ru/db/pubv8devui/content/184/hdoc
Для отправки сообщения требуется регистрация/авторизация