Відкриття форм вибору 1С 8 в керованому інтерфейсі

User Rating: 5 / 5

Сьогодні ми поговоримо про те, як програмно відкривати форми вибору у новому керованому інтерфейсі.

Раніше у "звичайному додатку" ми писали так:

Між цими операторами ми могли змінити властивості форми, наприклад, задати відбір. Ми могли вказати конкретну форму на ім'я. Могли змінювати її зовнішній вигляд, звертаючись до властивостей елементів форми по їх імені через точку (форма. Кнопка1. Видимість = Брехня;)

Тепер ми маємо керований інтерфейс і тут все інакше. Засідка у розділенні коду на серверну частину та клієнтську. Звертатися до об'єктів і їх метаданим ми можемо лише з сервері, а відкривати форми маємо клієнта.

1. Найпростіший випадок, коли нам не потрібно керувати вибором (налаштовувати відбори, передавати параметри в форму вибору).

Оскільки форми можна відкривати тільки на клієнті, це буде клієнтський шматок коду. Користуватися будемо функцієюВвестиЗначення( , , ). Власне, з її опису зрозуміло. Повертає вона прапор того, чи був виконаний користувачем вибір, перший параметр ми передаємо контейнер, в який повернеться значення вибору, в другий текст, який відобразиться в заголовку вікна вибору, в третій масив типів.

Ось приклад використання:

Перем ВибТМЦ;

МасивТипів = Новий Масив;

МасивТипов.Додати(Тип("ДовідникПосилання.Номенклатура"));

ОписТиповТМЦ = Новий ОписТипів(Масив);

Якщо ВвестиЗначення(ВибТМЦ, "Виберіть номенклатуру", ОписТиповТМЦ) Тоді

//Обробка обраного значення

КінецьЯкщо;

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

2. Іноді, перед вибором значення, нам потрібно встановити будь-які відбори та параметри вибору. Наприклад, нам потрібно вибрати договір контрагента. Перший спосіб нам відкриє всі догвоори, а нам потрібно з відбором по власнику.

Є два методи для відкриття форм:ВідкритиФорму таВідкритиФормуМодально. У першому методі ми відкриємо форму і шматок коду, з якого відкрили форму, продовжить виконуватися, не отримавши результату вибору. Результат вибору в залежності від способу дзвінка буде поміщений або в полі введення або отриманий у визначеній процедурі "Обробка Вибору".

У нашому випадку нам потрібно отримати обране значення в якусь змінну і продовжити обробку з урахуванням обраного значення, не передаючи управління в інші процедури. Тому нам підійдеВідкритиФормуМодально.

Відразу зазначу, що це поганий шлях для web-інтерфейсу, т.к. модальні вікна відкриваються у новому вікні браузера, які зазвичай заблоковані. Але якщо користувачеві заздалегідь роз'яснити, що до чого, то я думаю він впорається з цією проблемою))

Отже, дивимося опис процедури, має 4 параметри. У першому ми вказуємо рядок з повним шляхом до форми "Довідник. Договори Контрагентів. Форма Вибору". У другому ми вказуємо параметри вибору, про них трохи нижче. У третій - власника, це форма або поле вибору, яке отримає результат вибору, ми його не заповнюємо. Четвертий параметр у нашому ліку теж не використовується.

Отже, для простого вибору нам підійде рядок:

&НаКлієнті

Процедура Команда1(Команда)

рез = ВідкритиФормуМодально("Довідник.ДоговориКонтрагентів.ФормаВибору");

КінецьПроцедури

Але цеповний аналог медода №1, і ми побачимо форму вибору всіх договорів без відбору за власником. Тобто. так робити можна тільки якщо ми хочемо конкретизувати ім'я форми вибору.

Щоб встановити вибір, нам допоможе другий параметр.

У моєму прикладі я намалював в обробці поле вибору, що посилається на реквізит форми обробки"контрагент" з типом даних "ДовідникПосилання.Контрагенти ". і написав наступний шматок коду:

&НаКлієнті

Процедура Команда1(Команда)

Відбори = Новий Структура("Власник", Контрагент);

ПараметриВибору = Новий Структура("Відбір", Відбори);

рез = ВідкритиФормуМодально("Довідник.ДоговориКонтрагентів.ФормаВибору",ПараметриВибору);

КінецьПроцедури

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