Как открыть форму с заполнением реквизитов

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

Открытие формы с заполнением (передача в параметре открываемой формы и реализация метода «ОбработкаЗаполнения()») выполняется одинаково в управляемом и обычном приложении (проверял на платформе 8.3.5.1146 — управляемое приложение и на платформе 8.2.18.102 — обычное приложение).

В том месте кода, откуда нужно сделать открытие и заполнение формы нужно добавить приблизительно такой код:

ПараметрыЗаполнения = Новый Структура;

ПараметрыЗаполнения.Вставить(«ТестРеквизит», «Тест строка»);

ПараметрыФормы = Новый Структура(«ЗначенияЗаполнения», ПараметрыЗаполнения);

фНовыйДокумент = ПолучитьФорму(«Документ.ТестДокумент.Форма.ФормаДокумента», ПараметрыФормы, ЭтаФорма);

фНовыйДокумент.Открыть();

В структуру «ПараметрыЗаполнения» записываются все нужные для заполнения данные, затем эта структура вставляется в другую структуру под названием «ПараметрыФормы».

Причем ключ, под которым структура «ПараметрыЗаполнения» вставляется в структуру «ПараметрыФормы», должен называться именно «ЗначенияЗаполнения» иначе, ничего не работать не будет.

Далее нужно реализовать событие модуля формы заполняемого объекта — «ОбработкаЗаполнения()». Я для этого использую следующую конструкцию, которая, на мой взгляд, изящно выглядит и позволяет избежать всех возможных ошибок (поправьте, если я ошибаюсь):

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

Если ТипЗнч(ДанныеЗаполнения) = Тип(«Структура») Тогда

ДанныеЗаполнения.Свойство(«ТестРеквизит», ТестРеквизит);

КонецЕсли;

КонецПроцедуры

Напомню, что метод структуры «Свойство()» проверяет наличие в структуре элементы с именем, указанным в первом параметре и записывает найденное значение во второй параметр — в данном случае это реквизит заполняемого объекта (если элемент с указанным именем в структуре не найден, то во второй параметр записывается «Неопределено»).

На этом все, надеюсь данная статья Вам помогла.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Загрузка…

Рассмотрим такую задачу. Есть сложная форма, с большим количеством реквизитов. Для многих из них в конфигураторе установлено свойство ЗаполнятьИзДанныхЗаполнения. В результате при открытии этой формы для нового объекта ее реквизиты могут быть заполнены различными начальными значениями. Это зависит и от точки навигации, в которой расположена команда создания нового объекта, и от программного алгоритма, описанного в модуле самого объекта.

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

Можно было бы получить программный объект формы и затем напрямую установить значения ее реквизитов. Но тогда в этом месте программного кода пришлось бы дублировать весь тот алгоритм, который отвечает за начальное заполнение формы. Это может быть трудоемко, и поддерживать такое решение сложно, т. к. при изменении этого алгоритма его придется менять не в одном месте, в модуле объекта, а синхронно еще в нескольких местах конфигурации. Нет никакой гарантии, что что-то не будет пропущено и что все такие изменения будут работать правильно.

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

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

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

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

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

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

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

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

ЭлементыОтбора = Новый Структура("Поставщик, Склад", СсылкаНаПоставщика, СсылкаНаСклад);
ОбъектНакладной = Документы.Накладная.СоздатьДокумент();
ОбъектНакладной.Заполнить(ЭлементыОтбора);
// Действия, имитирующие интерактивный ввод данных пользователем
...
ОбъектНакладной.Дата = ТекущаяДатаСеанса();
...
ОбъектНакладной.Записать();

Как открыть форму с заполненным реквизитом

Я
   Evladar

05.07.11 — 10:18

Вопрос такой:

На Форме1 есть РеквизитФормы1 и ТабличноеПоле1 с типом значения данных — РегистрСведенийСписок.

При добавлении строки в это ТабличноеПоле открывается ФормаЗаписи РегистраСведений, на которой есть Реквизит2.

Требуется, чтобы при открытии формы записи регистра сведений в Реквизит2 сразу подставлялся РеквизитФормы1 из Формы1.

Как сделать? Что-то не получается через Оповещение.. (

  

Партнерская программа EFSOL Oblako

   МишельЛагранж

1 — 05.07.11 — 10:20

Передавать с Форма1 при добавлении строки и заполнять данными в ФормаЗаписи при открытии нужные реквизиты.

   Evladar

2 — 05.07.11 — 10:30

(1) Так через что передать-то?

   Evladar

3 — 05.07.11 — 13:17

Ау!! Люди добрые!!!…

   Dem1urg

4 — 05.07.11 — 13:30

Как-то так.

Форма = ЧтоТамУТебяНаписано.ПолучитьФорму();

Форма.Реквизит2 = Форма1.Реквизит1;

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

   Evladar

5 — 05.07.11 — 13:33

Я делаю так:

В первой форме:

Процедура РСДокументыПередНачаломДобавления(Элемент, Отказ, Копирование)

   Оповестить(«ДобавитьДокументДляТранспортнойУслуги»,ДокументТранспортнойУслуги,ЭтаФорма);

КонецПроцедуры

Во второй форме:

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

   Если ИмяСобытия = «ДобавитьДокументДляТранспортнойУслуги»  Тогда

       Сообщить(«Работай, сука!!!!»);

       ДокументТранспортнойУслуги = Параметр;

  КонецЕсли;

КонецПроцедуры

Но отладчик даже не попадает в ОбработкуОповещения!!!

   Шапокляк

6 — 05.07.11 — 13:36

Ну так первая форма саму себя оповещает (чтоб не забыть, наверно). А второй форме до этого оповещения нет дела.

   Sarmen

7 — 05.07.11 — 13:41

Через структуру заполнения попробовать?

   Sarmen

8 — 05.07.11 — 13:45

У Реквизит2 — установить: заполнять из данных заполнения.

Для открытия формы записи:

СтруктураЗаполнения = Новый Структура(«Реквизит2», <ЗначениеРеквизита>);

СтруктураПараметров = Новый Структура(«ДанныеЗаполнения», СтруктураЗаполнения );

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

вот что-то типа такого?

   Sarmen

9 — 05.07.11 — 13:49

такое вроде только для управляемых форм работает…

   Evladar

10 — 05.07.11 — 14:51

(6) Не понимаю замечания. Это же источник. Он является необязательным даже.

(9) Что для управляемых? Оповещение должно работать для всех.

Так почему же не попадает внутрь ОбработкиОповещения??

   Шапокляк

11 — 05.07.11 — 15:00

(10) А РСДокументыПередНачаломДобавления срабатывает когда уже вторая форма открыта? Вы вроде в (0) говорили, что вторая форма должна только начать открываться в этот момент?

   5 Элемент

12 — 05.07.11 — 15:02

Сто пудов забыл для формы заполнить свойство ОбработкаОповещения

   Necessitudo

13 — 05.07.11 — 15:03

А свойство ЗначениеЗаполнения в палитре свойств тупо проставить низя?

   Evladar

14 — 05.07.11 — 15:32

(11) Процедура РСДокументыПередНачаломДобавления срабатывает до открытия второй Формы.

(12) Проверил еще раз: заполнено (

(13) Нет, нельзя.

   Шапокляк

15 — 05.07.11 — 15:38

(14) Ну вот, а кого тогда оповещают-то, если форма не открыта? Оповещение ведь срабатывает для У Ж Е открытых форм. А нельзя открыть эту вторую форму так, чтоб ее владельцем была первая форма? А в процедуре Приоткрытии второй формы попробовать получить нужный параметр из владельца?

  

Dem1urg

16 — 05.07.11 — 22:23

Так а чем (4) то не устраивает?

Программное открытие форм в управляемом приложении 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(Команда)
Параметр=новый структура;

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

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

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

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

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

На чтение 6 мин Просмотров 6.3к. Опубликовано 19.08.2021

Программное открытие форм в управляемом и обычном приложении 1С сильно отличается.

Содержание

  1. Программное открытие формы в обычном приложении
  2. Программное открытие формы в управляемом приложении
  3. Как открыть форму объекта в управляемом приложении, если есть ссылка на него?
  4. Как создать документ и открыть его форму?
  5. Как открыть форму выбора и получить потом выбранное значение?
  6. Функция ОткрытьФорму() в управляемом приложении 1С
  7. Как программно открыть форму существующего объекта?
  8. Как программно открыть форму нового объекта и заполнить ее на основании чего-либо?
  9. Как программно открыть форму и задать на ней отбор?
  10. Как программно открыть форму записи регистра сведений?

Программное открытие формы в обычном приложении

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

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

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

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

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

Рассмотрим другие методы открытия форм в управляемом приложении 1С.

Программное открытие формы в управляемом приложении

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

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

Метод глобально контекста ОткрытьЗначение() показывает в диалоге переданное значение. При этом, вид диалога зависит от типа переданного значения. Поскольку в данном примере мы передаем ссылку на элемент справочника, то метод открывает основную форму справочника Номенклатура.

Как создать документ и открыть его форму?

В 1С для этих целей существует два возможных сценария работы:

  1. открыть форму нового документа и предоставить пользователю самому интерактивно записать данные объекта в базу данных.
  2. создать новый документ программно, программно заполнить его данными и программно записать. Затем, если нужно, показать его пользователю.

В первом сценарии проще всего использовать метод глобального контекста ОткрытьФорму().

Это можно сделать на клиенте.

//Открываем форму документа ПриходнаяНакладная
ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаОбъекта");

При этом создается новый документ и открывается для редактирования основная форма этого документа.

При необходимости можно предварительно заполнить документ начальными данными, например с помощью свойств реквизитов документа ЗначениеЗаполненияЗаполнятьИзДанныхЗаполнения либо в обработчике события документа ОбработкаЗаполнения.

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

Например:

&НаКлиенте
Процедура ПриходнаяНакладная(Команда)

    СсылкаНаДокумент = СоздатьНовыйДокумент();
    ОткрытьЗначение(СсылкаНаДокумент);

КонецПроцедуры

&НаСервере
Функция СоздатьНовыйДокумент()

   НовыйДокумент = Документы.ПриходнаяНакладная.СоздатьДокумент();
   НовыйДокумент.Номер = "111";
   НовыйДокумент.Дата = ТекущаяДата();
   НовыйДокумент.Записать();

   Возврат НовыйДокумент.Ссылка;

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

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

Для этого воспользуемся функцией ВвестиЗначение(). 

ВвестиЗначение(<Значение>, <Подсказка>, <Тип>);

  • Значение — переменная, в которую будет помещено выбранное значение;
  • Подсказка — Текст заголовка окна диалога ввода значения. Может использоваться в качестве подсказки пользователю. Значение по умолчанию: Пустая строка.
  • Тип — тип вводимого значения. Если параметр не указан, используется тип параметра <Значение>. Может быть несколько типов, тогда перед выбором конкретного значения будет предложено выбрать тип.

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

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

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

Функция ОткрытьФорму() в управляемом приложении 1С

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

ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>, <ОписаниеОповещенияОЗакрытии>, <РежимОткрытияОкна>);

Некоторые параметры функции:

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

Переданные при открытии формы параметры можно обработать в процедуре ПриСозданииНаСервере() у открываемой формы.

Как программно открыть форму существующего объекта?

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

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

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

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

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

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

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

Как программно открыть форму и задать на ней отбор?

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

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

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

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

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

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

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

Вывод результата запроса на форму УП в таблицу значений (аналог СоздатьКолонки() для УП) 2
при разработке на обычных формах было удобно выводить результат запроса используя метод СоздатьКолоки(): Процедура ПоискНажатие(Элемент)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ДокументоОборот.Этап,
| ДокументоОборот.Отдел,
| Докуме


Как обновить динамический список или реквизит на форме клиента? 25
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр


Как отобразить дерево значений на управляемой форме 0
Создадим новую внешнюю обработку. Добавляем управляемую форму и создаем обработчик ПриСозданииНаСервере(). Никаких реквизитов и элементов “вручную” не добавляем, будем делать это программно. НаСервере
Процедура ПриСозданииНаСервере(Отказ, Станда


Как передать таблицу значений с сервера на клиент? 5
Многие спрашиваю, как передать тз с сервера на клиент — ниже несколько вариантов как это можно реализовать: Через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр НаКлиенте
Процедура ПолучитьТаблицу НаСервер(Команд а)
ТЗВСтроке = ПолучитьТЗНаС


Комиссионная торговля 0
Добрый день. УТ11 (11.4.13.46) Наша организация принимает товар на комиссию. В отчете комитенту цена комитента — ставится последняя, а нужно по фактическому поступлению. Подскажите пожалуйста, может кто то сталкивался с подобной проблемой. Спасибо.


Посмотреть все результаты поиска похожих

Работа с формами

  • Как открыть форму объекта имея ссылку на него?
  • Как открыть форму выбора произвольного объекта?
  • Как открыть форму существующего объекта ссылочного типа?
  • Открыть форму существующей записи регистра?
  • Как открыть форму нового объекта с обработкой заполнения?
  • Как правильно организовать выбор (подбор) в табличную часть?
  • Как открыть форму и установить в ней отбор?
  • Как в форме отобразить картинку, сохраненную в реквизите справочника?
  • Как в журнале документов «УчетКадров» отобрать только документы «ПриемНаРаботу»?
  • Как узнать интервал дат в открытом текущем журнале?
  • Как при открытии справочника сделать отбор по контрагентам, входящим в список?
  • Как обеспечить, чтобы для выбора значения покупателя в расходной накладной справочник контрагенты открывался сразу с открытой группой «Покупатели»?
  • Как в форме обеспечить выбор реквизита, подчиненного Владельцу?
  • Как не открывая форму внешней обработки выполнить ее процедуру для определенного объекта?
  • Как вывести многострочное предупреждение?
  • Как задать вопрос пользователю?
  • Как открыть форму объекта имея ссылку на него?

    &НаКлиенте
    Процедура ОткрытьФорму(Команда)
    	ОткрытьЗначение(СсылкаНаОбъект); 
    КонецПроцедуры

    Как открыть форму выбора произвольного объекта?

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

    Как открыть форму существующего объекта ссылочного типа?

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

    Открыть форму существующей записи регистра?

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

    Как открыть форму нового объекта с обработкой заполнения?

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

    В это случае вызывается процедура «ОбработкаЗаполнения» модуля объекта. Эта процедура имеет единственный параметр «Основание». Если мы в параметры вставим ключ «Основание», то он будет передан в процедуру «ОбработкаЗаполнения»:

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

    Как правильно организовать выбор (подбор) в табличную часть?

    Все параметры, указанные в параметреметода открыть форму, доступны в событии «ПриСозданииНаСервере» открываемой формы:

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

    В событии «ПриСозданииНаСервере» формы элемента справочника Проекты можно будет получить «ЛюбойПараметр»:

    &НаСервере
    Процедура ПриСозданииНаСервере()
    	Если Параметры.Свойство("ЛюбойПараметр") Тогда
    		ПереданныйПараметр = Параметры.ЛюбойПараметр;
    	    //Программная обработка формы
    	КонецЕсли;
    КонецПроцедуры

    При открытии формы выбора у Владельца сработает событие «ОбработкаВыбора»:

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

    При выборе в произвольной форме стоит использовать метод ОповеститьОВыборе(), при этом установив через параметры свойство открываемой формы ЗакрыватьПриВыборе = Истина:

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

    В самой форме организуем программно выбор таким образом:

    &НаКлиенте
    Процедура Выбрать(Команда)
        РезультатВыбора = ПодготовитьРезультатВыбора();
        ОповеститьОВыборе(РезультатВыбора);
    КонецПроцедуры
    
    
    &НаСервере
    Функция ПодготовитьРезультатВыбора()
    	//Готовим результат выбора
    КонецФункции

    В результате выполнения метода ОповеститьОВыборе форма подбора закроется и вызовется событие «ОбработкаВыбора» элемента управления «Товары».

    Как открыть форму и установить в ней отбор?

    Для организации отбора при открытии формы нужно использовать параметр «Отбор», тип Структура, где Ключ – это Имя поля динамического списока, а значение это собственно то, почему нужно фильтровать данные

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

    В случае если отбор сложный и его можно установить только программно:

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

    В самой форме в событии «ПриСозданииНаСервере» задаем отбор списка:

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

    Как в форме отобразить картинку, сохраненную в реквизите справочника?

    // Значение, сохраненное в реквизите справочника, имеющем тип 
    // ХранилищеЗначения, можно только получить. 
    СохраненнаяКартинка = Фотография.Получить(); 
    
    Если СохраненнаяКартинка <> Неопределено Тогда 
    	// Если в хранилище было что-нибудь заранее записано… 
    	ЭлементыФормы.Фото.Картинка = СохраненнаяКартинка; 
    КонецЕсли;

    Как в журнале документов «УчетКадров» отобрать только документы «ПриемНаРаботу»?

    ЖурналДокументовСписок.Отбор.ВидДокумента.Установить(Метаданные.Документы.ПриемНаРаботу);

    Как узнать интервал дат в открытом текущем журнале?

    Если ЖурналДокументовСписок.Отбор.Дата.Использование Тогда 
    	Сообщить(ЖурналДокументовСписок.Отбор.Дата); 
    Иначе 
    	Сообщить("Без ограничения по датам"); 
    КонецЕсли;

    Как при открытии справочника сделать отбор по контрагентам, входящим в список?

    Процедура ПриОткрытии() 
    
    	СправочникСписок.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке; 
    	СправочникСписок.Отбор.Ссылка.Значение = СписокКонтрагентов; 
    	СправочникСписок.Отбор.Ссылка.Использование = Истина; 
    
    КонецПроцедуры

    Как обеспечить, чтобы для выбора значения покупателя в расходной накладной справочник контрагенты открывался сразу с открытой группой «Покупатели»?

    Процедура КонтрагентНачалоВыбора(Элемент, СтандартнаяОбработка) 
    
    	Если Элемент.Значение.Пустая() Тогда 
    		СтандартнаяОбработка = Ложь; 
    		ФормаВыбора = Справочники.Контрагенты.ПолучитьФормуВыбора( , Элемент); 
    		ФормаВыбора.ВыборПокупателя = Истина; 
    		ФормаВыбора.Открыть(); 
    	КонецЕсли; 
    
    КонецПроцедуры 
    
    
    Если ВыборПокупателя Тогда 
    	ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина; 
    	ЭлементыФормы.СправочникСписок.ТекущийРодитель = Константы.ГруппаПокупатели.Получить(); 
    КонецЕсли;
    
    
    Если ВыборПокупателя Тогда 
    	ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина; 
    	ЭлементыФормы.СправочникСписок.ТекущийРодитель = Справочники.Контрагенты.Покупатели; 
    КонецЕсли;

    Как в форме обеспечить выбор реквизита, подчиненного Владельцу?

    // При начале выбора реквизита Помещение вызывается процедура:
    Процедура ПомещениеНачалоВыбора(Элемент, СтандартнаяОбработка)
    
    	СтандартнаяОбработка = Ложь; 
    
    	ФормаВыбора = Справочники.ПереченьПомещенийОбъекта.ПолучитьФормуВыбора( , Элемент); 
    	ФормаВыбора.СправочникСписок.Отбор.Владелец.ВидСравнения = ВидСравнения.Равно;
    	ФормаВыбора.СправочникСписок.Отбор.Владелец.Использование = Истина;
    	ФормаВыбора.СправочникСписок.Отбор.Владелец.Значение = Владелец;
    
    	Помещение = ФормаВыбора.ОткрытьМодально();
    	
    	Если Помещение <> неопределено Тогда
    		ЭлементыФормы.Помещения.ТекущаяСтрока.Помещение = Помещение;
    	КонецЕсли;
    
    КонецПроцедуры

    Как не открывая форму внешней обработки выполнить ее процедуру для определенного объекта?

    Обработка = ВнешниеОбработки.Создать(ИмяФайла); 
    Обработка.Печать(Ссылка);

    Как вывести многострочное предупреждение?

    Предупреждение("На складе: " + Остаток + Символы.ПС + "В резерве : " + 
    	Зарезервировано + Символы.ПС + "Свободный остаток: " + 
    	(Остаток - Зарезервировано), 20, "Состояние остатков");

    Как задать вопрос пользователю?

    Если Товары.Количество() > 0 Тогда
    	Ответ = Вопрос("Табличная часть будет очищена! Продолжить?", 
    	РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да, "Внимание!");
    	Если Ответ = КодВозвратаДиалога.Нет Тогда
    		Возврат;
    	КонецЕсли;
    КонецЕсли;
    Товары.Очистить();

    Понравилась статья? Поделить с друзьями:
  • Как отметить свою компанию на яндекс карте
  • Как отправить капот транспортной компанией
  • Как отправить комод транспортной компанией
  • Как отправить реквизиты карточки сбербанка
  • Как отправить реквизиты карты работодателю