1. Главная страница » Компьютеры » 1С открыть форму существующего документа

1С открыть форму существующего документа

Автор: | 16.12.2019

Очень часто при 1С разработке возникает необходимость программным способом открыть форму какого-нибудь существующего объекта. Например, нужно открыть какой-нибудь документ, или какой-нибудь справочник.
Для того чтобы открыть управляемую форму какого-то уже существующего объекта используется параметр формы Ключ.

О простом открытии формы, и об открытии формы с передачей параметров, читайте в моей статье:

Открыть форму имеющегося объекта с использованием параметра формы Ключ достаточно просто: создаем структуру, у которой будет связка КлючИЗначение с названием ключа «Ключ», а со значением – ссылкой на открываемый объект. И эту структуру в качестве параметра указываем в методе ОткрытьФорму.
Пример кода с открытием формы документа:

ПараметрыФормы = Новый Структура ;
ПараметрыФормы . Вставить ( «Ключ» , ДокументСсылка );
ОткрытьФорму ( «Документ.Заказ.Форма.ФормаДокумента» , ПараметрыФормы );

Открытие формы элемента справочника аналогично:

ПараметрыФормы = Новый Структура ;
ПараметрыФормы . Вставить ( «Ключ» , СправочникСсылка );
ОткрытьФорму ( «Справочник.Контрагенты.Форма.ФормаЭлемента» , ПараметрыФормы );

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

&НаКлиенте
Процедура ПриОткрытии ( Отказ )

Если Параметры . Ключ . Пустая () тогда
//действия для формы нового объекта
иначе
//действия для формы существующего объекта
КонецЕсли;

Подробно вопросы работы с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.

Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей

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

Это самый медленный метод открытия форм. Тем не менее, он позволяет программно обработать форму перед открытием. Для обработки код нужно немного изменить:

Читайте также:  1080 Ti титан цена

Надо учитывать, что при получении формы будет выполняться еще процедура события ПриСозданииНаСервере.

Рассмотрим другие методы, которые позволяют открывать формы в управляемом приложении 1С быстрее и удобнее. В зависимости от конкретной ситуации могут использоваться разные методы.

1. Как открыть форму объекта в управляемом приложении, если есть ссылка на него.

В этом случае все предельно просто.

2. Как открыть форму выбора и получить потом выбранное значение.

Для этого существует функция ВвестиЗначение(). У функции 3 параметра:

  • Переменная, в которую будет записано выбранное значение;
  • Подсказка, которая будет отображена в окне выбора;
  • Описание типов выбираемых значений. Может быть несколько типов, тогда перед выбором конкретного значения будет предложено выбрать тип.

В результате выполнения функции откроется форма выбора по умолчанию для объекта указанного типа.

Перем Значение ;
Массив = новый массив ;
Массив . Добавить ( Тип ( "СправочникСсылка.Номенклатура" ) ) ;
Массив . Добавить ( Тип ( "СправочникСсылка.Контрагенты" ) ) ;

ОписаниеТипов = новый ОписаниеТипов ( Массив ) ;

Рез = ВвестиЗначение ( Значение , "Подсказка" , ОписаниеТипов ) ;

Предыдущие способы позволяли открывать только формы, установленные для объектов по умолчанию (форму объекта или форму выбора). Если нужно открыть произвольную форму, то можно воспользоваться функцией ОткрытьФорму().

Эта функция имеет довольно много параметров. Рассмотрим некоторые из них:

  • Имя формы — тут можно выбрать либо одну из стандартных форм объекта, например, ФормаВыбора или ФормаСписка. Или конкретную, созданную разработчиками форму.
  • Параметры — позволяет передать в форму в виде структуры некоторые параметры перед ее открытием, тем самым определив выводимые данные. Параметры могут представлять собой любые данные, которые можно передавать с клиента на сервер. Переданные при открытии формы параметры можно обработать в процедуре ПриСозданииНаСервере() у открываемой формы.
  • Режим открытия формы — имеет 3 варианта: независимый, блокировать весь интерфейс, блокировать форму владельца.

Рассмотрим, как применяется функция ОткрытьФорму() в различных ситуациях.

3. Как открыть форму существующего объекта

У каждой формы есть один ключевой реквизит. Он выделен жирным в списке реквизитов формы и обычно называется Объект у форм элементов справочников, документов. У других объектов название может быть другим. Для открытия формы существующего объекта нужно передать в открываемую форму параметр Ключ со значением в виде ссылки на объект.

&НаКлиенте
Процедура Команда 1 ( Команда )
Параметр = новый структура ;
Параметр . Вставить ( "Ключ" , НайтиС ( ) ) ;
ОткрытьФорму ( "Справочник.Контрагенты.ФормаОбъекта" , Параметр ) ;
КонецПроцедуры

&НаСервере
Функция НайтиС ( ) ;
Возврат Справочники . Контрагенты . НайтиПоРеквизиту ( "ИНН" , "745107734623" )
КонецФункции

4. Как открыть форму нового объекта

Тут подойдет просто функция ОткрытьФорму() без всяких параметров.

5. Как открыть форму нового объекта и заполнить ее на основании чего-либо

Нужно передать параметр Основание, значением которого будет являться ссылка на объект-основание заполнения. При этом будет запущена процедура ОбработкаЗаполнения().

В этом примере будет создан документ Реализация товаров и услуг и заполнен на основании счета на оплату покупателю, ссылка на который была передана.

6. Как открыть форму и задать на ней отбор

Отбор на формах 1С может быть простым и сложным. Простой отбор предусматривает выражения типа Организация = ООО «Рога и копыта». Сложный отбор предполагает и другие типы сравнения, например, В списке. В данной статье рассмотрим организацию простого отбора, а сложному будет посвящена отдельная статья.

Чтобы организовать простой отбор, нужно передать в открываемую форму параметр с ключом Отбор, значением будет являться структура, в которой ключ — имя поля динамического списка, а значение — искомые данные.

Например, откроем форму списка справочника НомераГТД и сделаем там отбор по владельцу — элементу справочника Номенклатура.

Отбор = новый Структура ;
Отбор . Вставить ( "Владелец" , СсылкаНаНоменклатуру ) ;

Параметр . Вставить ( "Отбор" , Отбор ) ;

ОткрытьФорму ( "Справочник.НомераГТД.ФормаСписка" , Параметр ) ;
КонецПроцедуры

7. Как открыть форму записи регистра сведений

Для этого понадобится ключ записи регистра сведений.

Ключ записи — это значения всех измерений и период (если регистр периодический). То есть ключ записи — это параметры, по которым можно однозначно идентифицировать запись.

Алгоритм открытия следующий:

  1. Заносим в структуру данные ключа записи с необходимыми значениями.
  2. Помещаем полученную структуру в массив.
  3. Из массива создаем ключ записи.
  4. Передаем в открываемую форму параметр Ключ с ключом записи из п.3 в качестве значения.

ПараметрыКлюча = новый Структура ;
ПараметрыКлюча . Вставить ( "Номенклатура" , СсылкаНаНоменклатуру ) ;
ПараметрыКлюча . Вставить ( "ТипЦены" , СсылкаНаТипЦен ) ;
ПараметрыКлюча . Вставить ( "Период" , Дата ) ;

МассивКлюча = Новый Массив ;
МассивКлюча . Добавить ( ПараметрыКлюча ) ;

КлючЗаписи = Новый ( "РегистрСведенийКлючЗаписи.ЦеныНоменклатуры" , МассивКлюча ) ;

Параметр . Вставить ( "Ключ" , КлючЗаписи ) ;

ОткрытьФорму ( "РегистрСведений.ЦеныНоменклатуры.ФормаЗаписи" , Параметр ) ;
КонецПроцедуры

Всем доброго дня!
Думаю, что информация в данной теме будет очень полезна многим посетителям этого форума.
Долгое время не мог решить задачу – как открыть форму нового документа так, чтобы она открылась не пустая, а уже частично заполненная программно, при этом сам документ еще не записан в базу? Очень много времени потратил на поиски решения данной проблемы в интернете, посетил много форумов, на которых поднимался данный вопрос, но лишь на немногих из них попадались варианты решения. Самый простой из них – сначала программно создать новый документ, программно заполнить нужные его реквизиты, записать документ в базу, и потом уже открыть его пользователю. А что, если пользователь не захочет его сохранять? Что, если он передумает, и закроет открытую форму? В этом случае уже записанный документ так и останется в базе данных. А кому нужны в базе лишние документы?
А если же не сохранять документ, то самый популярный вариант – использовать метод ПолучитьФорму(«Документы.НужныйВидДокумента.ФормаДокумента»). Но в этом случае можно получить пустую форму документа и просто вывести на экран методом Открыть(). Это тоже не вариант…
Спустя какое-то время задачу удалось решить с помощью функции глобального контекста «ЗаполнитьЗначенияСвойств».

Глобальный контекст
ЗаполнитьЗначенияСвойств (FillPropertyValues)
Синтаксис:
ЗаполнитьЗначенияСвойств( , , , )
Описание:
Копирует значения свойств в свойства . Сопоставление производится по именам свойств.

Читайте также:  Apple ipad pro размеры

На примере своей задачи хотел бы объяснить, как можно использовать эту функцию для заполнения формы нового документа. Задача была в следующем – Имеется один документ (Заказ-наряд), реквизитом табличной части которого является другой документ (Оказание услуг). Так вот, нужно было сделать так, чтобы при добавлении в табличную часть «Заказ-наряда» нового документа «Оказание услуг», на экран выводилась форма нового документа «Оказание услуг» с уже заполненными реквизитами, взятыми из того заказ-наряда, из которого было вызвано создание. При этом, чтобы сам новый документ, на момент появления его формы на экране, еще не был записан в базу. Это нужно было сделать, если пользователь вдруг решит не заполнять документ и просто закроет форму.
Вот фрагмент кода с решением задачи:

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

То есть, все операции делаем непосредственно на клиенте, без обращения к серверу, в пределах одной самостоятельно созданной процедуры. По сути, таким способом можно заполнить и открыть форму как любого документа, так и справочника. Сначала я заполнил реквизиты из одной формы в другую, используя объекты форм, а затем, с помощью объекта «Структура», в который вставил недостающие реквизиты, заполнил еще некоторые реквизиты открываемой формы, а затем открыл форму.
Надеюсь, что эта темя сэкономит время многим, кто столкнулся с подобной задачей!

При открытии формы существующего объекта необходимо кроме имени формы указать также и на тот объект, форма которого должна быть открыта. Для этого используется параметр формы Ключ и ссылка на интересующий нас объект.

Например, если из формы списка организаций нужно открыть форму той организации, на которой находится курсор, сделать это можно следующим способом:

Параметры формы передаем в виде структуры, где имя элемента структуры соответствует имени параметра формы, а значение — это то значение, в которое мы хотим установить параметр формы.

Если требуется открыть не основную, а произвольную форму объекта, созданную в конфигураторе, вместо стандартного имени основной формы (ФормаОбъекта ) указывается слово Форма и через точку за ним — имя формы, созданной в конфигураторе.

СсылкаНаЭлементСправочника = Элементы.Список.ТекущаяСтрока; ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлементСправочника); ОткрытьФорму("Справочник.Организации.Форма.УниверсальнаяФормаОбъекта", ПараметрыФормы);

Следует заметить, что в том случае, когда кроме ссылки на объект никакие параметры в открываемую форму передавать не нужно и нужна именно основная форма существующего объекта, можно использовать более простой способ — открывать форму с помощью процедуры ОткрытьЗначение() :

Такой способ обладает меньшей универсальностью, но в некоторых случаях он экономит время и силы. Например, в рассмотренном случае одна такая строка может заменить всю написанную нами ранее процедуру из трех строк.

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

В то же время эта информация может быть заранее известна разработчику внутри его алгоритма, и, используя функцию ОткрытьФорму() , разработчик может открывать нужную форму без дополнительных обращений к серверу, сразу же указывая стандартное имя основной формы.

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

Читайте также:  Gps модуль neo 6m

Это самый медленный метод открытия форм. Тем не менее, он позволяет программно обработать форму перед открытием. Для обработки код нужно немного изменить:

Форма= ПолучитьФорму( "Документ.ПоступлениеТоваровУслуг.ФормаДокумента" ) ;
//Тут выполняем действия с формой
Форма. Открыть() ;

Надо учитывать, что при получении формы будет выполняться еще процедура события ПриСозданииНаСервере.

Рассмотрим другие методы, которые позволяют открывать формы в управляемом приложении 1С быстрее и удобнее. В зависимости от конкретной ситуации могут использоваться разные методы.

1. Как открыть форму объекта в управляемом приложении, если есть ссылка на него.

В этом случае все предельно просто.

СпрСсылка= Справочники. Номенклатура. НайтиПоКоду("000000001" ) ;
ОткрытьЗначение(СпрСсылка) ;

2. Как открыть форму выбора и получить потом выбранное значение.

Для этого существует функция ВвестиЗначение(). У функции 3 параметра:

  • Переменная, в которую будет записано выбранное значение;
  • Подсказка, которая будет отображена в окне выбора;
  • Описание типов выбираемых значений. Может быть несколько типов, тогда перед выбором конкретного значения будет предложено выбрать тип.

В результате выполнения функции откроется форма выбора по умолчанию для объекта указанного типа.

Перем Значение;
Массив= новый массив;
Массив. Добавить(Тип( "СправочникСсылка.Номенклатура" ) ) ;
Массив. Добавить(Тип( "СправочникСсылка.Контрагенты" ) ) ;

ОписаниеТипов= новый ОписаниеТипов(Массив) ;

Рез= ВвестиЗначение(Значение, "Подсказка" , ОписаниеТипов) ;

Предыдущие способы позволяли открывать только формы, установленные для объектов по умолчанию (форму объекта или форму выбора). Если нужно открыть произвольную форму, то можно воспользоваться функцией ОткрытьФорму().

Эта функция имеет довольно много параметров. Рассмотрим некоторые из них:

  • Имя формы — тут можно выбрать либо одну из стандартных форм объекта, например, ФормаВыбора или ФормаСписка . Или конкретную, созданную разработчиками форму.
  • Параметры — позволяет передать в форму в виде структуры некоторые параметры перед ее открытием, тем самым определив выводимые данные. Параметры могут представлять собой любые данные, которые можно передавать с клиента на сервер. Переданные при открытии формы параметры можно обработать в процедуре ПриСозданииНаСервере() у открываемой формы.
  • Режим открытия формы — имеет 3 варианта: независимый, блокировать весь интерфейс, блокировать форму владельца.

Рассмотрим, как применяется функция ОткрытьФорму() в различных ситуациях.

3. Как открыть форму существующего объекта

У каждой формы есть один ключевой реквизит. Он выделен жирным в списке реквизитов формы и обычно называется Объект у форм элементов справочников, документов. У других объектов название может быть другим. Для открытия формы существующего объекта нужно передать в открываемую форму параметр Ключ со значением в виде ссылки на объект.

&НаСервере
Функция НайтиС() ;
Возврат Справочники. Контрагенты. НайтиПоРеквизиту ("ИНН" , "745107734623" )
КонецФункции

4. Как открыть форму нового объекта

Тут подойдет просто функция ОткрытьФорму() без всяких параметров.

5. Как открыть форму нового объекта и заполнить ее на основании чего-либо

Нужно передать параметр Основание , значением которого будет являться ссылка на объект-основание заполнения. При этом будет запущена процедура ОбработкаЗаполнения().

&НаКлиенте
Процедура Команда1 (Команда)
Параметр= новый структура;
Параметр. Вставить("Основание" , СсылкаНаСчетПокупателю) ;
ОткрытьФорму( "Документ.РеализацияТоваровУслуг.ФормаОбъекта" , Параметр) ;
КонецПроцедуры

В этом примере будет создан документ Реализация товаров и услуг и заполнен на основании счета на оплату покупателю, ссылка на который была передана.

6. Как открыть форму и задать на ней отбор

Отбор на формах 1С может быть простым и сложным. Простой отбор предусматривает выражения типа Организация = ООО «Рога и копыта». Сложный отбор предполагает и другие типы сравнения, например, В списке . В данной статье рассмотрим организацию простого отбора, а сложному будет посвящена отдельная статья.

Чтобы организовать простой отбор, нужно передать в открываемую форму параметр с ключом Отбор , значением будет являться структура, в которой ключ — имя поля динамического списка, а значение — искомые данные.

Например, откроем форму списка справочника НомераГТД и сделаем там отбор по владельцу — элементу справочника Номенклатура .

Отбор= новый Структура;
Отбор. Вставить("Владелец" , СсылкаНаНоменклатуру) ;

Параметр. Вставить("Отбор" , Отбор) ;

ОткрытьФорму( "Справочник.НомераГТД.ФормаСписка" , Параметр) ;
КонецПроцедуры

7. Как открыть форму записи регистра сведений

Для этого понадобится ключ записи регистра сведений.

Ключ записи — это значения всех измерений и период (если регистр периодический). То есть ключ записи — это параметры, по которым можно однозначно идентифицировать запись.

Алгоритм открытия следующий:

  1. Заносим в структуру данные ключа записи с необходимыми значениями.
  2. Помещаем полученную структуру в массив.
  3. Из массива создаем ключ записи.
  4. Передаем в открываемую форму параметр Ключ с ключом записи из п.3 в качестве значения.

ПараметрыКлюча= новый Структура;
ПараметрыКлюча. Вставить("Номенклатура" , СсылкаНаНоменклатуру) ;
ПараметрыКлюча. Вставить("ТипЦены" , СсылкаНаТипЦен) ;
ПараметрыКлюча. Вставить("Период" , Дата) ;

МассивКлюча = Новый Массив;
МассивКлюча. Добавить(ПараметрыКлюча) ;

КлючЗаписи = Новый( "РегистрСведенийКлючЗаписи.ЦеныНоменклатуры" , МассивКлюча) ;

Параметр. Вставить("Ключ" , КлючЗаписи) ;

ОткрытьФорму( "РегистрСведений.ЦеныНоменклатуры.ФормаЗаписи" , Параметр) ;
КонецПроцедуры

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *