1с открыть форму с параметрами заполнения
Программирование в 1С для всех
В этой статье я приведу небольшой пример, который может возникнуть в реальной жизни, и который будет полезен начинающим программистам 1С, особенно тем, кто столкнулся с открытием одной управляемой формы из другой формы и передачей значений с формы на форму.
Рассмотрим следующую задачу: в табличной части некоторого документа есть реквизит «Пояснение» (тип строка), для удобства работы пользователей необходимо сделать так, чтобы при нажатии на кнопку «Лупа» поля ввода этого реквизита текущей строки табличной части, открывалась форма с многострочным полем ввода, где пользователь может ввести нужный ему текст. После нажатия на кнопку «Поместить» открывшейся формы вся информация из поля ввода должна быть передана в соответствующее поле текущей строки табличной части.
Для демонстрации решения, я использую учебную конфигурацию, где в табличной части документа «Поступление товаров и услуга» имеется реквизит «Пояснение» (строка (250)).
На форме документа у поля «Пояснение» таблицы формы в свойство «КнопкаОткрытия» установим значение «Да».
В результате у нас у соответствующего поля на форме появится кнопка Открыть.
Теперь создадим произвольную форму документа, которую назовем ФормаВводаПояснения.
У этой формы создадим реквизит управляемой формы «Ввод пояснения» (строка (250))
И поместим этот реквизит на форму в виде поля ввода. У поля ввода установим многострочный режим и уберем заголовок.
У командной панели формы снимем флаг «Автозаполнение»
Создадим команду формы «Поместить», которую разместим в командной панели формы в виде кнопки. И у этой кнопки установим флаг у свойства «Кнопка по умолчанию»
Теперь займемся параметрами. Вполне возможно, что в нашем поле таблицы формы документа уже будет какая-то информация, поэтому её необходимо будет передать в форму ввода пояснения. Для этого на форме ввода пояснения создадим параметр ПриемникПояснения, в который, впоследствии, и будем передавать значение пояснения из формы документа.
Теперь сделаем так, чтобы при открытии формы значение из этого параметра передавалось в реквизит «Ввод пояснения» из нашей формы. Для этого у нашей формы ввода пояснения создадим событие при создании на сервере.
В этом обработчике напишем следующий код
Нам осталось отработать нажатие на кнопку «Поместить», для этого создадим обработчик соответствующей команды в клиентском контексте.
В этом обработчике мы будем закрывать форму, а в качестве параметра закрытия передадим реквизит формы.
С этой формой мы закончили, перейдем к форме документа. На форме документа у поля Пояснения таблицы формы создадим обработчик события ПриОткрытии в клиентском контексте.
Это событие возникает, когда пользователь нажимает на кнопку «Открыть» соответствующего поля.
В обработчике события, первым делом, в параметр СтандартнаяОбработка установим значение Ложь. Тогда при нажатии на кнопку открытия, не будет срабатывать стандартная обработка платформы, которая срабатывает при нажатии на эту кнопку.
Теперь в этой же процедуре нам нужно получить значение поля Пояснение текущей строки.
Это значение мы будем передавать в качестве параметра в форму ввода пояснения при её открытии. Для этого я создам структуру, где в качестве ключа будет название параметра из формы ввода пояснения (ПриемникПояснения), который мы создали в форме ввода пояснения, а в качестве значения структуры будет значение, которое мы только что получили.
Открывать формы мы будем при помощи метода глобального контекста ОткрытьФорму, передадим в неё параметры ввода, а также установим, чтобы блокировалось окно владельца.
Если мы на этом остановимся, то у нас форма ввода пояснения откроется, информация из формы документа там появится, но информация с формы пояснения не будет передана в форму документа, как мы планировали. Для того, чтобы это произошло необходимо создать описание оповещения, в котором будет указан метод, который сработает после закрытия формы ввода описания. В конечном итоге у нас должен получиться следующий обработчик события нажатия на кнопку открытия.
В описании оповещения мы указали процедуру ПослеВыбораПояснения. Нам необходимо создать такую процедуру в клиентском контексте, и сделать её экспортной.
В этой процедуре, мы текущему значению поля Пояснение присваиваем результат закрытия формы ввода пояснения.
На этом наше программирование закончено. Работа выполнена.
Другие статьи про открытие управляемых форм:
Подробно вопросы передачи параметров, открытия форм рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомиться с разработкой управляемого приложения.
Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С
Промо-код на скидку в 15% — 48PVXHeYu
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Эти книги плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей
One thought on “ Открытие формы в 1С 8.3 с передачей параметров на примере ”
Не работает….после внесения текста в дополнительной форме…Он не передается в основную форму
Открытие форм
Область применения: управляемое приложение, мобильное приложение.
Рекомендация обусловлена соображениями
2. В случаях когда форма требует параметризации при открытии, все ее параметры следует указывать в наборе параметров формы. Таким образом, набор параметров формы декларативно описывает возможности формы по ее параметризации.
Параметры формы из этого набора могут быть указаны в вызывающем коде при открытии формы ( ОткрытьФорму ).
3. Не следует применять другие способы параметризации формы при открытии. Например, нужно избегать обращения к методам и свойствам формы после ее открытия.
Например, вместо
МояФорма = Форма.ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме»);
МояФорма.Элементы.ГруппаШаг.ТекущаяСтраница = МойФорма.Элементы.ГруппаШаг.Страницы.Приветствие;
следует по той же причине использовать параметры формы:
ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме», Новый Структура(«РежимОткрытия», «Приветствие»));
4. Для получения результата работы формы, вместо непосредственного обращения к элементам и реквизитам формы
ФормаВопроса = ПолучитьФорму(«ОбщаяФорма.ФормаВопроса»);
ФормаВопроса.ОткрытьМодально();
Если ФормаВопроса.БольшеНеПоказыватьНапоминание Тогда
// …
следует использовать процедуры-обработчики оповещений, которые будут вызваны при завершении работы пользователя с формой:
Оповещение = Новый ОписаниеОповещения(«БольшеНеПоказыватьНапоминаниеЗавершение», ЭтотОбъект);
ОткрытьФорму(«ОбщаяФорма.ФормаВопроса». Оповещение, РежимОткрытияОкнаФормы.БлокироватьВеcьИнтерфейс);
.
&НаКлиенте
Процедура БольшеНеПоказыватьНапоминаниеЗавершение(БольшеНеПоказыватьНапоминание, Параметры) Экспорт
Если БольшеНеПоказыватьНапоминание = Неопределено Тогда
Возврат;
КонецЕсли;
Если БольшеНеПоказыватьНапоминание Тогда
// …
5. Другие ограничения:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
…
КонецПроцедуры
6. Следующие виды форм должны быть всегда доступны пользователю в режиме 1С:Предприятия из меню «Все функции» вне зависимости от того, размещены ли соответствующие объекты в командном интерфейсе приложения или нет:
Как в 1с открыть форму программно
В статье будет рассказано о том, как в 1с открыть форму программно. Все описанное ниже, касается только управляемого приложения. Подробно рассмотрим метод глобального контекста ОткрытьФорму.
Также можете ознакомиться с более простыми, но менее гибкими способами открыть форму по ссылке: Как в 1с открыть ссылку.
Метод ОткрытьФорму по имени
Самый гибкий и настраиваемый способ программного открытия формы в 1с 8. Рассмотрим подробно его параметры, а также разберем несколько примеров его использования.
Следует заметить, что метод ОткрытьФорму является клиентским. Т.е его можно использовать либо в общих модулях с установленным флагом Клиент, либо в процедурах (функциях) форм с директивой &НаКлиенте.
Рассмотрим параметры метода и приведем необходимые примеры.
ИмяФормы
Содержит полный путь к форме. Можно указать, как путь к форме по умолчанию, так и путь к произвольной форме объекта метаданных. Имя формы указывается в следующих двух форматах:
Пример 1. Путь к форме выбора по умолчанию, справочника Номенклатура.
Пример 2. Путь к форме СменаПочты справочника Пользователи, по ее имени.
Параметры
Содержит Структуру параметров, которые передаются в открываемую форму. Для каждого типа формы, существует набор стандартных параметров, которые не нужно дополнительно обрабатывать в самой форме. Также набор параметров может различаться и для объектов метаданных. Например, параметр Ключ, для форм объектов. В него можно передать ссылку на открываемый объект (если его не передать, будет открыта форма нового объекта).
Также в структуру можно передавать произвольные параметры, которые можно обрабатывать программно, в открываемой форме. Например в обработчике события ПриСозданииНаСервере.
Рассмотрим примеры открытия различных форм с использованием параметров.
Пример 3. Открыть форму объекта справочника Пользователи, используя ссылку на объект.
Пример 4. Открыть форму списка справочника Номенклатура с отбором по реквизиту ВидНоменклатуры и по списку родителей.
Здесь Отбор — это стандартный параметр для форм, использующих в качестве основного реквизита Динамический список. Например, это формы списка и выбора. Он представляет из себя Структуру, в которую можно добавить значения элементов отбора. В Ключ — имя реквизита, в Значение — значение отбора.
Данным способом можно отобрать значения, используя вид сравнения Равно или ВСписке. Для отбора ВСписке следует добавить в структуру Массив, ФиксированныйМассив, либо СписокЗначений. Следует заметить, что отбор ВИерархии установить данным способом не выйдет.
Владелец
В данный параметр передается элемент формы или форма клиентского приложения (управляемая форма) полностью. Используется для указания подчинения открываемой формы.
Это может потребоваться для многих целей, например для:
Пример 5. Реализовать программный выбор элемента Номенклатура, в поле ввода.
В данном случае необходимо:
Параметр ТекущаяСтрока, позволяет выделять ранее выбранный элемент в форме выбора. Стоит заменить, что в обычной ситуации такой метод выбора значений не применяется. Его применяют только тогда, когда нет возможности настроить форму выбора под условия задачи.
Уникальность
В параметре можно задать ключ уникальности формы произвольного типа. При открытии формы, платформа будет анализировать, есть в текущем сеансе уже открытая форма, с таким же ключом уникальности. Если такая форма будет найдена, то она будет активизирована, а новая не откроется. Этот механизм работает только для одинаковых форм. Если вы будете открывать формы объекта разных документов с одинаковым ключом, то откроются обе.
По умолчанию, платформа сама генерирует ключ уникальности. Поэтому помимо использования собственного ключа, в параметре Уникальность, можно регулировать использование стандартного. Если передать в него значение Ложь, то будет использован стандартный ключ, если значение Истина, то ключ не будет использоваться совсем. Т.е. будет создаваться новая форма, при каждом использовании метода ОткрытьФорму. Значением по умолчанию является Ложь, поэтому специально задавать его не требуется.
Пример 6. Одновременно открыть две формы объекта справочника Пользователи, по одной и той же ссылке.
В параметре можно указать окно, в котором будет открыта новая форма. Тип параметра ОкноКлиентскогоПриложения.
Пример 7. Реализовать программный выбор элемента Номенклатура, в поле ввода. Реализовать выбор в окне формы, на которой расположено поле.
В этом примере мы получаем окно текущей формы и используем его для открытия формы выбора справочника.
НавигационнаяСсылка
Позволяет установить собственную навигационную ссылку для открываемой формы. Устанавливаемая навигационная ссылка должна иметь тип Строка. Значение по умолчанию: Неопределено, при использовании этого значения, навигационная ссылка задается автоматически.
ОписаниеОповещенияОЗакрытии
В параметр передается описание процедуры, которая будет вызвана после закрытия открываемой формы. Тип параметра: ОписаниеОповещения.
Пример 8. В 1с открыть форму программно. Использовать форму объекта справочника Пользователи. После ее закрытия сообщить, что карточка пользователя закрыта.
Используемые в примере параметры описания оповещения:
Описанная процедура обязательно должна иметь два параметра:
Также описанная процедура должна быть экспортной.
РежимОткрытияОкна
Позволяет указать режим открытия управляемой формы. По умолчанию Неопределено, вручную можно задать одно из значений системного перечисления РежимОткрытияОкнаФормы:
Метод ОткрытьФорму по форме
Существует еще один вариант синтаксиса метода ОткрытьФорму.
Используется, если вы уже получили форму, произвели с ней какие-то действия и теперь ее необходимо открыть.
Пример 9. Получить форму списка справочника Номенклатура, а затем в 1с открыть форму программно.
Открыть форму нового объекта с заполнением
В управляемых формах появилась очевидная проблема: Как открыть форму с объектом который я программно заполнил, но не сохранил еще в базу?
ОТВЕТ: По умолчанию — никак.
Единственное что можно заставить сделать систему по умолчанию, при открытии формы, это выполнить стандартную функцию модуля объекта ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка), где ДанныеЗаполнения — это структура которую мы передали при открытии формы.
Сначала небольшой кусок кода чтобы не забыть что какие ключи надо передавать при открытии формы.
Данные = Новый Структура();
Данные.Вставить(«Наименование», «ТЕСТ НАИМЕНОВАНИЯ»);
Данные.Вставить(«Комментарий», «ТЕСТ»);
Данные.Вставить(«Артикул», «ТЕСТ»);
ПараметрыФормы = Новый Структура(«ЗначенияЗаполнения», Данные);
ОткрытьФорму(«Справочник.Номенклатура.ФормаОбъекта», ПараметрыФормы);
Собственно что здесь важно:
ПРИМЕЧАНИЕ:
В открывшейся форме все данные которые вы ей передадите будут так же лежать в переменной Параметры.ЗначенияЗаполнения в модуле формы объекта
У переменной Параметры, есть еще несколько предопределенных ключей
Передавать можно несколько параметров одновременно.
ДОПОЛНИТЕЛЬНЫЙ ХАК
Если по каким-то причинам, нет желания пихать логику заполнения в сам объект. Вот идея и немного кода для облегчения жизни:
В функцию ОбработкаЗаполнения все равно придется написать немного своего кода, хорошо то что он может быть универсальный и его можно запихать в расширение (очень полезно для стандартных конфигураций)
Порядок действий:
Редактор формы
Редактор формы используется для создания и редактирования форм объектов прикладного решения. Формы объектов используются системой для визуального отображения данных в процессе работы пользователя.
Редактор формы содержит несколько закладок, обеспечивающих редактирование всех составляющих формы.
В отдельном окне, в нижней части редактора, отображается внешний вид формы в режиме 1С:Предприятие.
Редактирование элементов
Редактор форм позволяет разработчику использовать широкий набор возможностей для изменения внешнего вида формы — того вида, который форма будет иметь в режиме 1С:Предприятие. Перечислим основные из этих возможностей:
Страницы, закладки
Редактор форм позволяет добавлять в форму специальные элементы, которые помогают придать форме собственный узнаваемый стиль, сделать доступ к данным простым и понятным, а также разместить большой объем информации на ограниченной площади.
Редактор позволяет добавить в форму несколько элементов Группа — Страницы, каждая из которых может содержать несколько элементов Группа — Страница.
Например, форма документа может содержать один элемент Группа — Страницы, которому подчинены несколько элементов Группа — Страница с заголовками Изображение, Характеристики и Описание:
Тогда в режиме 1С:Предприятие она будет выглядеть следующим образом:
Заголовок каждой группы — страницы отображается на отдельной закладке. Разработчик имеет возможность задать режим отображения закладок: снизу или сверху:
Например, закладки можно расположить снизу:
Элементы
Редактор позволяет добавлять в форму различные элементы. Добавлять элементы можно с помощью команды добавления или путем перетаскивания реквизитов формы в дерево элементов:
Все элементы формы представляются в виде иерархической структуры, корнем которой является сама форма. Это позволяет быстро перемещаться к нужному элементу формы:
Располагая элементы выше/ниже в дереве, подчиняя их другим элементам и задавая свойства элементов-групп можно задавать порядок, в котором пользователь будет обходить элементы управления формы при вводе и редактировании данных. В режиме 1С:Предприятие элементы формы будут обходиться в порядке их иерархии и в соответствии с тем, какой тип группировки выбран для групп: вертикальная или горизонтальная.
Разделители
Разделители являются специальными элементами, с помощью которых возможно перераспределение пространства формы без изменения ее размеров. Платформа в режиме 1С:Предприятие самостоятельно добавляет эти элементы в форму. Разделитель обладает способностью «захватываться» мышью и перемещаться внутри формы в ее пределах с учетом возможности расположения других элементов и ориентации разделителя:
При перемещении разделителя, все элементы, связанные с разделителем, будут изменять свои размеры или перемещаться.
Модуль формы
Для редактирования модуля формы конфигуратор вызывает редактор текстов и модулей. Этот редактор предоставляет разработчику большое разнообразие возможностей для создания и изменения текста модуля. Подробнее…
Реквизиты формы
Редактирование реквизитов формы выполняется в списке, который позволяет создавать новые реквизиты, изменять имеющиеся и удалять ненужные реквизиты. Свойства реквизитов задаются с помощью палитры свойств.
Если у формы существует основной реквизит, определяющий поведение формы, отличное от типового, — он выделяется жирным шрифтом.
Командный интерфейс формы
Командный интерфейс формы редактируется в дереве. Основные ветви дерева содержат команды, добавленные в панель навигации окна, в котором будет показана форма, и в командную панель формы. Внутри каждой из этих ветвей команды разделены по стандартным группам.
Часть команд в командный интерфейс платформа добавляет автоматически. Наряду с этим разработчик самостоятельно может добавить в командный интерфейс команды, перетащив их из списка команд формы или из списка доступных глобальных команд. Для всех команд, добавленных в командный интерфейс, разработчик может задать их видимость для различных ролей, определенных в конфигурации.
Команды формы
Команды формы редактируются в списке. Разработчик имеет возможность добавить, удалить команды формы и задать их свойства с помощью палитры свойств. В том числе назначить для команды процедуру, которая будет выполняться при вызове этой команды пользователем.
На закладках Стандартные команды и Глобальные команды разработчику предоставляются списки команд, генерируемых платформой и доступных для использования в данной форме. Их свойства изменять нельзя, можно только добавлять их в форму.
С помощью мыши разработчик может перетащить команду в командный интерфейс формы. Также можно перетащить команду и прямо в дерево элементов, если нужно, например, отобразить эту команду в виде кнопки, расположенной в форме.
Параметры формы
Параметры формы редактируются в списке. Разработчик имеет возможность добавить, удалить параметры формы и задать их свойства с помощью палитры свойств.

























