Как по ссылке найти открытую форму

Получение формы по ссылке

Я
   Kashafeev

29.08.14 — 13:34

Имеются открытая форма документа и ссылка на документ. Как закрыть эту форму?

   Kashafeev

1 — 29.08.14 — 13:34

(0) …закрыть форму имея только ссылку на документ

   arccos6pi

2 — 29.08.14 — 13:37

(0) (1) это вообще как так?

просто Закрыть() не прокатывает?

   Maxus43

3 — 29.08.14 — 13:40

если имеется объект, то можно легко… со ссылкой — проблемней

   Kashafeev

4 — 29.08.14 — 13:49

(3) По ссылке можно получить объект. Так как?

   arccos6pi

5 — 29.08.14 — 13:49

(3) а что у нас теперь объект по ссылке не получается?

   Maxus43

6 — 29.08.14 — 13:52

(4)(5) Если есть ОТКРЫТАЯ Форма документа — значит объект уже создан. Если мы получим объект по ссылке в это время — мы получим ДРУГОЙ объект

   Maxus43

7 — 29.08.14 — 13:53

получить открытую форму объекта элементарно:

ФРМ = ДокументОбъект.ПолучитьФорму();

Сообщить(ФРМ.Открыта());

   Kashafeev

8 — 29.08.14 — 13:53

(6) Ладно, а допустим такая ситуация: я имею Уникальный Идентификатор формы. Как её закрыть?

   Maxus43

9 — 29.08.14 — 13:55

(8) СП украли?

ДокументМенеджер.<Имя документа> (DocumentManager.<Имя документа>)

ПолучитьФорму (GetForm)

Синтаксис:

ПолучитьФорму(<Форма>, <Владелец>, <КлючУникальности>)

<КлючУникальности> (необязательный)

Тип: Произвольный.

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

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

   Maxus43

10 — 29.08.14 — 13:56

или что ты имеешь ввиду под Уникальным идентификатором формы?

   arccos6pi

11 — 29.08.14 — 13:57

(9) ему нужно закрыть открытую форму

   Maxus43

12 — 29.08.14 — 13:57

(11) чтобы закрыть закрытую — надо её получить.

Закрыть форму:

НайденнаяФорма.Закрыть();

внезапно?)

   Maxus43

13 — 29.08.14 — 13:58

*чтобы закрыть открытую

   arccos6pi

14 — 29.08.14 — 13:58

(8) вы понятнее можете объяснить что хотите сделать

   Kashafeev

15 — 29.08.14 — 13:59

(14) (13) Спасибо огромное. То что надо было :)

   Maxus43

16 — 29.08.14 — 14:00

(15) что надо было? Форма.Закрыть(); ???

   Kashafeev

17 — 29.08.14 — 14:26

(16)     

Грубо говоря да:)

ДокументОбъект = ссылкаСобытие.ПолучитьОбъект();

Форма = ДокументОбъект.ПолучитьФорму(,,УникальныйИдентификаторФормы);

Форма.Закрыть();

   Kashafeev

18 — 29.08.14 — 14:42

(16) А ещё такой вопрос: ПолучитьОбъект по ссылке можно только наСервере, а форму можно получить только НаКлиенте. Передавать объект на клиент нельзя. Как быть?

  

Kashafeev

19 — 29.08.14 — 16:15

Ап

Изначально было всего 2 строчки:

ДокументОбъект = Получить объект по ссылке
ФормаДокумента = ДокументОбъект.ПоулчитьФОрму("ФормаДокумента");

И эту ересь в УП теперь на кучу строк нужно переписать.

В общих модулях имеется 2 функции, выполняемые — одна на сервере, другая на клиенте.

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

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



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

Не могу разобраться в получении формы по ссылке.

УправляемоеПриложение.Поиск открытой формы по идентификатору

&НаКлиенте

Функция НайтиУправляемуюФорму(УникальныйИдентификатор, Отказ = Ложь) Экспорт

    Перем Окно, СодержимоеОкна, Форма;

    Отказ = Ложь;

    Для Каждого Окно Из ПолучитьОкна() Цикл

        Для Каждого СодержимоеОкна Из Окно.Содержимое Цикл

            Если ТипЗнч(СодержимоеОкна) = Тип("УправляемаяФорма")

                    И СодержимоеОкна.УникальныйИдентификатор = УникальныйИдентификатор Тогда

                Возврат СодержимоеОкна;

            КонецЕсли;

        КонецЦикла;

    КонецЦикла;

    Отказ = Истина;

    Сообщить(Формат(Отказ, "БЛ=Нашел!; БИ='Не нашел!'"));

КонецФункции

Популярные сообщения из этого блога

Когда нужно в макете (табличном документе) изменить ширину колонки  для конкретных строк: 1. Выделить всю строку (строки). Именно всю, фокус для выделенной области не работает. 2. Нажимаем и не отпускает Ctrl 3. С помощью мыши изменяют ширину любой из колонок — будет задан вопрос об создании нового формата строк — соглашаемся. Как же прекрасен мир, где для модификаций не достаточно просто использовать контекстное меню и диалог редактора свойств, где нужно знать заветные слова и таинства танца. 90ые, моё почтение. UPD Программно, тоже самое, можно сделать через ТабДок = Новый ТабличныйДокумент(); ТабДок.Область(1,,1,).СоздатьФорматСтрок(); ТабДок.Область(1,1).ШиринаКолонок = 70; ТабДок.Область(1,2).ШиринаКолонок = 30; ТабДок.Область(2,,2,).СоздатьФорматСтрок(); ТабДок.Область(2,1).ШиринаКолонок = 30; ТабДок.Область(2,2).ШиринаКолонок = 70; ТабДок.Показать();

Вводная Если на форме есть элемент управления со списком выбора, в моем конкретном примере это Колонка Значение (Число (3,0)) с настроенным списком выбора. По умолчанию платформа отображает именно строковое значения, а не текст представления  из списка выбора (когда как при выборе значения из списка показываются именно представления). Решение Для Управляемых форм необходимо настроить правила условного оформления, для обычных форм — оформление ячеек при выводе данных.

Вводная: реализовать ввод Заказа поставщику на основании Заказа на Ремонт. решить через расширения конфигурации. Хочу обратить ваше внимание, не нужно добавлять в расширение критерий отбора, для 8.3.12 нам не доступно добавлениеизменение состава критерия. Более того может зависать конфигуратор (столкнулся с последней версией 8.3.14 + ERP) Разработку рекомендую вести с применением хранилища и для расширения. Иначе устанете потом выгребать чего лишнего включили в расширение при добавлении таких или схожих обектов с составными типами и подобное. Все текущие типовые решения сейчас идут в режиме совместимости 8.3.12, в прочем и для 8.3.14 (и даже 8.3.15 ничего не поменялось). Что нам нужно было бы сделать при отказе от поддержки: 1) добавить наш документ в Критерий отбора (состав, реквизиты); 2) в раздел Ввод на основании целевого документа. И что с целью сохранения поддержки. Как сделать это же для расширения: 1) Добавить реквизит расширения Документы.ЗаказПоставщику._За

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

ПолучитьФорму(«Документ.ПоступлениеТоваровУслуг.ФормаДокумента»).Открыть()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&amp;НаКлиенте
Процедура Команда1(Команда)
ОткрытьФорму(«Справочник.Контрагенты.ФормаОбъекта»);
КонецПроцедуры

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

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

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

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

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

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

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

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

&amp;НаКлиенте
Процедура Команда1(Команда)
Параметр=новый структура;

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

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

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

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

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

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

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

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

&amp;НаКлиенте
Процедура Команда1(Команда)
Параметр=новый структура;

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

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

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

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

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

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

Открыть ссылку используя ПоказатьЗначение

Самый простой способ, использовать метод глобального контекста ПоказатьЗначение. Который показывает в диалоге значение переданное в параметре.

ПоказатьЗначение(<ОписаниеОповещенияОЗавершении>, <Значение>)

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

Таким образом открытие ссылки будет выглядеть следующим образом:

ПоказатьЗначение(, Ссылка);

Если в вашей конфигурации разрешено открытие модальных окон (Свойства конфигурации -> Режим использования модальности, принимает значения Использовать или Использовать с предупреждениями), то можно использовать метод ОткрытьЗначение.

ОткрытьЗначение(<Значение>)

Открытие формы по ссылке

Также в 1с открыть ссылку можно при помощи метода ОткрытьФорму. Этот способ более сложен в реализации, но зато универсален. У него довольно много параметров, но для данной задачи нас интересуют первые два.

ОткрытьФорму(<ИмяФормы>, <Параметры>)

ИмяФормы — в параметре следует указать полный путь к форме, которую вы собираетесь открыть.

Пример 1. Можно указать форму, которая является формой объекта по умолчанию:

"Документ.ПоступлениеТоваров.ФормаОбъекта"

Пример 2. Либо указать имя конкретной формы, которую вы хотите открыть. Если, например, форм объекта несколько.

"Документ.ПоступлениеТоваров.Форма.МояФормаОбъекта"

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

Пример 3. Открыть форму объекта для документа Поступление товаров.

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

Получить более подробную информацию по методу ОткрытьФорму можно в статье Как в 1с открыть форму программно

Открытие формы по навигационной ссылке

Если у вас есть навигационная ссылка на документ или справочник, перейти по ней и открыть форму объекта можно, используя метод ПерейтиПоНавигационнойСсылке.

ПерейтиПоНавигационнойСсылке(<НавигационнаяСсылка>)

Пример 4.

НавигационнаяСсылка = "e1cib/data/Документ._ДемоПоступлениеТоваров?ref=acb79eb068770e2511e47c89f0b33406";
ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка);

Также навигационную ссылку можно получить из обычной ссылки. Для этого используется метод ПолучитьНавигационнуюСсылку.

ПолучитьНавигационнуюСсылку(<Объект>, <ИмяРеквизита>, <Индекс>)

В параметр Объект, в том числе, можно передать ссылку на документ или справочник.

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

НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Ссылка);
ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка);


Понравилась статья? Поделить с друзьями:
  • Как найти код пароль экранного времени
  • Как найти хорду в окружности примеры
  • Как найти скриншот который сделан на компьютере
  • Как найти площадь пальца
  • Архив вконтакте как найти нужный диалог