Как программно открыть и заполнить форму?
Рассмотрим такую задачу. Есть сложная форма, с большим количеством реквизитов. Для многих из них в конфигураторе установлено свойство ЗаполнятьИзДанныхЗаполнения . В результате при открытии этой формы для нового объекта ее реквизиты могут быть заполнены различными начальными значениями. Это зависит и от точки навигации, в которой расположена команда создания нового объекта, и от программного алгоритма, описанного в модуле самого объекта.
Теперь предположим, что в процессе выполнения некоторого программного кода требуется открыть эту форму. Но не «пустую», а так, чтобы ее реквизиты были заполнены теми значениями, которые должны получиться в результате работы всех алгоритмов, заложенных в форму.
Можно было бы получить программный объект формы и затем напрямую установить значения ее реквизитов. Но тогда в этом месте программного кода пришлось бы дублировать весь тот алгоритм, который отвечает за начальное заполнение формы. Это может быть трудоемко, и поддерживать такое решение сложно, т. к. при изменении этого алгоритма его придется менять не в одном месте, в модуле объекта, а синхронно еще в нескольких местах конфигурации. Нет никакой гарантии, что что-то не будет пропущено и что все такие изменения будут работать правильно.
Поэтому существует другой, более удобный и простой способ решения такой задачи. Открывая форму программно, можно передать ей набор данных заполнения, который она получила бы, если бы открывалась интерактивной командой.
Например, программно нужно открыть форму новой накладной точно так, как если бы она открывалась интерактивной командой из списка накладных, отобранного по поставщику и складу. Предположим, что в переменных СсылкаНаПоставщика и СсылкаНаСклад у нас имеются необходимые ссылки. Тогда можно использовать следующий код:
Данные заполнения можно передать в открываемую форму с помощью параметра ЗначенияЗаполнения . В этот параметр нужно передать те данные, которые передала бы туда платформа, если бы выполнялось аналогичное интерактивное действие.
В нашем случае платформа передала бы в данные заполнения ссылку на поставщика и ссылку на склад, по которым отобран список накладных. Поэтому мы в данные заполнения передаем структуру, содержащую два элемента: для реквизита Поставщик — ссылку на поставщика, а для реквизита Склад — ссылку на склад.
Может встретиться и более сложная ситуация, когда в программном коде необходимо полностью съимитировать интерактивные действия пользователя по созданию нового объекта, не открывая форму этого объекта.
В этом случае можно создать программно объект, а затем вызвать его метод Заполнить() . В этом случае платформа выполнит все те же действия и вызовет все те же события, которые она бы вызвала в случае интерактивного создания нового объекта. В метод Заполнить() в качестве параметра точно так же можно передать структуру, содержащую данные заполнения:
Как создать документ и открыть его форму?
Для этих целей существует два возможных сценария работы:
- открыть форму нового документа и предоставить пользователю самому интерактивно заполнить документ и записать данные объекта в базу данных.
- создать новый документ программно, программно заполнить его данными и программно записать. Затем, если нужно, показать его пользователю.
В первом сценарии проще всего использовать функцию ОткрытьФорму(). Это можно сделать на клиенте.
При этом создается новый документ и открывается для редактирования основная форма этого документа.
Если нужно какое-то предварительное заполнение документа начальными данными, то это можно сделать либо с помощью свойств реквизитов документа ЗначениеЗаполнения, ЗаполнятьИзДанныхЗаполнения, либо в обработчике события документа Обработка заполнения. Подробнее об этом событии можно посмотреть в вопросе Как при открытии формы определить, что создается новый элемент?
Во втором случае можно программно создать документ на сервере, заполнить данными, если это нужно в обработчике события Обработка заполнения, записать, и передать ссылку на новый документ в процедуру ОткрытьЗначение(), которая откроет форму этого документа. Например:
Подробнее об использовании методов ОткрытьЗначение() и ОткрытьФорму() можно прочитать в синтакс-помощнике: Глобальный контекст — Процедуры и функции для интерактивной работы:
УФ: Программно получить и открыть форму объекта в 1С. Открытие формы для ввода значения
Различные варианты, как можно программно получить и открыть форму объекта (справочника, документа и т.д.):
2. ПоказатьЗначение(, Объект);
3. Пример для получения и открытия формы элемента справочника Номенклатура (здесь Объект – это элемент справочника Номенклатура):
4. Пример для открытия формы элемента справочника Номенклатура (здесь Объект – это элемент справочника Номенклатура):
Открыть форму для ввода значения:
- ПоказатьВводДаты();
- ПоказатьВводЗначения();
- ПоказатьВводСтроки();
- ПоказатьВводЧисла();
- ПоказатьВопрос();
и др., искать в Синтакс-помощнике по началу строки «Показать».
Оставить коментарий Отменить ответ
Эту статью хорошо дополняют
UI в 1С: как быстро создать интерфейс сервисом 1C Maker
Простой и доступный инструмент для оперативного решения вопросов по визуализации ТЗ
1С Hard Skills / 8.11.2022
Производительный режим RLS в 1С
Преимущества и недостатки стандартного и производительного режима RLS
1С Hard Skills / 13.07.2022
Как работают виртуальные таблицы Остатки, Обороты, ОстаткиИОбороты, особенности применения в СКД. Особенности объекта СтандартныйПериод
1С Hard Skills / 31.03.2022
Рекомендуемая вакансия 1С Hard Skills
Эту и другие технические статьи написали наши программисты 1С и получили за них премии. Если вы тоже работаете с 1С и любите делиться опытом, приходите разработчиком в Neti
Функция ОткрытьФорму()
Функция ОткрытьФорму() имеет несколько вариантов синтаксиса:
Вариант синтаксиса 1: По имени
Функция ОткрытьФорму() имеет следующий синтаксис:
А также альтернативный англоязычный синтаксис:
Параметры
Описание параметров процедуры ОткрытьФорму() :
- ФормаОбъекта (ObjectForm) — форма объекта по умолчанию;
- ФормаГруппы (FolderForm) — форма группы по умолчанию;
- ФормаЗаписи (RecordForm) — форма записи регистра по умолчанию;
- ФормаСписка (ListForm) — форма списка по умолчанию;
- ФормаВыбора (ChoiceForm) — форма выбора по умолчанию;
- ФормаВыбораГруппы (FolderChoiceForm) — форма выбора группы по умолчанию;
- ФормаКонстант (ConstantsForm) — форма констант по умолчанию;
- Форма (Form) — форма отчета и обработки по умолчанию;
- ФормаНастроек (SettingsForm) — форма настроек отчета по умолчанию;
- ФормаЗагрузки (LoadForm) — форма загрузки настроек;
- ФормаСохранения (SaveForm) — форма сохранения настроек;
- БлокироватьВеcьИнтерфейс — Блокировать весь интерфейс. При этом блокируется работа всех остальных открытых окон приложения, включая главное окно
- БлокироватьОкноВладельца — Блокировать только форму-владельца, переданного в параметре ВладелецФормы . Новое окно открывается поверх окна-владельца
- Независимый — Независимое окно (обычный режим открытия формы). В интерфейсе «В отдельных окнах» открывается отдельное окно, а в интерфейсах «В закладках» или «Такси» форма открывается в рабочей области основного окна
Возвращаемое значение
Описание варианта 1
Функция ОткрытьФорму() открывает форму по имени. Перед открытием осуществляется поиск ранее открытой формы того же типа и совпадающими параметрами: значениям ключевых параметров формы, владельца формы, пользовательского ключа уникальности. Для форм ФормаОбъекта , ФормаЗаписи , ФормаНабораЗаписей , ФормаКонстант при поиске ранее открытых форм, владелец не учитывается.
Вариант синтаксиса 2: По форме
Функция ОткрытьФорму() имеет следующий синтаксис:
А также альтернативный англоязычный синтаксис:
Параметры
Описание параметров процедуры ОткрытьФорму() :
Возвращаемое значение
Описание варианта 2
Функция ОткрытьФорму() открывает форму, полученную ранее функциями ОткрытьФорму() или ПолучитьФорму()
Доступность
Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение(клиент).