Відбір у керованій формі 1с. Як відкрити форму списку з певним відбором? Встановлення відбору конфігуратора

Як відкрити форму списку з певним відбором?

Є кілька способів для того, щоб відкрити форму списку з деяким заздалегідь встановленим відбором. Розглянемо їх по-порядку:

1. Перший спосіб полягає в тому, що при відкритті форми можна задати параметр форми Відбір і відкрити форму списку з цим параметром. Параметр Відбір є структурою. Імена елементів відповідають іменам полів, якими проводиться відбір, а значення містять значення відбору. Це параметр розширення керованої форми динамічного списку. Тобто існує у форм, основним реквізитом яких є реквізит типу Динамічний Список, наприклад у форм списку та форм вибору.

У процесі відкриття форми буде встановлено відбір за вказаним полем. Наприклад, у наступному прикладі відкривається список прибуткових накладних з відбором по полю Номер 333.

ЗначенняОтбору = Новий Структура("Номер", "333");

ПараметриВибору = Новий Структура("Отбор", ЗначенняОтбору);

ВідкритиФорму("Документ.ПриходнаяНакладная.ФормаСписка",ПараметриВибору);

2. Можна відкрити форму списку без параметрів:

ВідкритиФорму("Документ.ПриходнаяНакладная.ФормаСписка");

І потім, в обробнику події форми списку прибуткових накладних При створенні на серверінаписати код, який створює відбір у динамічному списку, що є основним реквізитом форми:

&На Сервері

Процедура при створенні на сервері (відмова, стандартна обробка)

ЕлементВідбору = Список.

ЕлементОтбора.ЛевоеЗначение = Новий ПолеКомпонівкиДаних("Номер");

ЕлементОтбора.Вид Порівняння = ВидПорівнянняКомпонівкиДаних.Більше;

ЕлементОтбору.Використання = Істина;

ЕлементВідбору.РежимВідображення = РежимВідображенняЕлементаНалаштуванняКомпонуванняДаних.Недоступний;

ЕлементОтбору.ПравоеЗначення = "000000001";

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

Переваги даного методу в тому, що Порівняння у відбору можна задавати не тільки рівно, як в першому випадку, а і більше, менше і т.п.

Але такий спосіб має й дуже істотний недолік: з цим відбором форма буде відкриватися завжди. Звідки б її не викликали. Тому таку форму слід призначати основний. А якщо все ж таки вона основна - то перед встановленням відбору, необхідно передбачити якийсь аналіз того, звідки відкривається ця форма. Наприклад, аналізуючи параметри форми.

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

Для цього у формі списку номенклатури створимо команду та відповідну їй кнопку Прибуткові накладні.

Обробник виконання цієї команди заповнимо так:

&На Клієнті

Процедура ПрибутковіНакладні(Команда)

ФормаСписку = ОтриматиФорму("Документ.ПриходнаяНакладная.ФормаСписка");

ФормаСписку.ФільтрПоТовару = Елементи.Список.ПоточнийРядок;

ФормаСписку.Відкрити();

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

У цьому обробнику ми отримуємо форму списку прибуткових накладних та передаємо у параметр форми ФільтрПоТовару посилання на поточний елемент у списку номенклатури та відкриваємо форму з цим параметром.

Потім створимо форму списку документів ПрибутковаНакладнаі створимо реквізит форми ФільтрПоТовару, який ми будемо використовувати як параметр форми при її відкритті. Тепер відкриємо палітру властивостей основного реквізиту форми Список. Встановити прапор Довільний Запитта у рядку Налаштування спискунатиснемо Відкрити.

У полі Запит введемо наступний текст запиту:

ВИБРАТИ

ДокументПриходнаяНакладная.Номер,

ДокументПрибутковаНакладна.Дата

З

Документ.ПриходнаяНакладная ЯК ДокументПриходнаяНакладная

ДЕ

ДокументПриходнаяНакладная.Товари.Товар = &Товар

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

&На Клієнті

Процедура Прі Відкриття (Відмова)

Список.Параметри.ВстановитиЗначенняПараметра("Товар", ФільтрПоТовару);

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

Тут Список.Параметри- це список параметрів запиту динамічного списку для реквізиту Список. Значення параметра Товар встановлюється рівним значенню параметра форми ФільтрПотовару.

В результаті після натискання кнопки Прибуткові накладніу формі списку номенклатури ми отримуватимемо список лише тих прибуткових накладних, у яких є номенклатура, виділена на даний момент у списку номенклатури.

Демонстраційний приклад для 3-го варіанта знаходиться в каталозі 1CITS/EXE/FAQ/Відкрити ФормуСотбором.dt. Приклад виконано на версії платформи 8.2.9.356.

Код 1C v 8.х ДовідникСписок.Отбор.Сбросить();
ДовідникСписок.Отбор.статус.ВидСравнения=ВидСравнения.Содержит;
ДовідникСписок.Отбор.Статус.Значение="Прийнята";
ДовідникСписок.Отбор.Статус.Установить();

Для 1С 8.2:
Є кілька способів для того, щоб відкрити форму списку з деяким заздалегідь встановленим відбором. Розглянемо їх по-порядку:

1. Перший спосіб полягає в тому, що при відкритті форми можна встановити параметр форми Відбір, і відкрити форму списку з цим параметром. Параметр Відбір є структурою. Імена елементів відповідають іменам полів, якими проводиться відбір, а значення містять значення відбору. Це параметр розширення керованої форми динамічного списку. Тобто він існує у форм, основним реквізитом яких є реквізит типу Динамічний Список, наприклад форм списку і форм вибору.

У процесі відкриття форми буде встановлено відбір за вказаним полем.
Код 1C v 8.2 УП // Наприклад, у прикладі відкривається список прибуткових накладних з відбором по полю Номер, що дорівнює 333.
ЗначенняОтбору = Новий Структура("Номер", "333");
ПараметриВибору = Новий Структура("Отбор", ЗначенняОтбору);

ВідкритиФорму("Документ.ПриходнаяНакладная.ФормаСписка",ПараметриВибору);

// Наприклад, у наступному прикладі відкривається список видаткових накладних
// з відбором по полю Контрагент, що дорівнює «ВАТ Рогу та копита».
Значення Відбору = Новий Структура («Контрагент», «ВАТ Рогу та копита»);
ПараметриВибору = Новий Структура(«Відбір», ЗначенняОтбору);
ВідкритиФорму(«Документ.ПриходнаяНакладная.ФормаСписка», ПараметриВибору);

2. Можна відкрити форму списку без параметрів:
Код 1C v 8.2 УП ВідкритиФорму("Документ.ПриходнаяНакладная.ФормаСписка");

І потім, в обробнику події форми списку прибуткових накладних При створенні на сервері написати код, який створює відбір в динамічному списку, що є основним реквізитом форми:
Код 1C v 8.2 УП &На Сервері

ЕлементВідбору = Список.
ЕлементОтбора.ЛевоеЗначение = Новий ПолеКомпонівкиДаних("Номер");


ЕлементВідбору.РежимВідображення = РежимВідображенняЕлементаНалаштуванняКомпонуванняДаних.Недоступний;
ЕлементОтбору.ПравоеЗначення = "000000001";
КінецьПроцедури

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

Переваги даного методу в тому, що Порівнянняу відбору можна ставити як Рівно, як у першому випадку, а й Більше, Менше тощо.

Але такий спосіб має й дуже істотний недолік: з цим відбором форма буде відкриватися завжди. Звідки б її не викликали. Тому таку форму слід призначати основний. А якщо все ж таки вона основна - то перед встановленням відбору, необхідно передбачити якийсь аналіз того, звідки відкривається ця форма. Наприклад, аналізуючи параметри форми.

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

Для цього у формі списку номенклатури створимо команду та відповідну їй кнопку Прибуткові накладні.

Обробник виконання цієї команди заповнимо так:
Код 1C v 8.2 УП &НаКлієнті
Процедура ПрибутковіНакладні(Команда)

ФормаСписку = ОтриматиФорму("Документ.ПриходнаяНакладная.ФормаСписка");
ФормаСписку.ФільтрПоТовару = Елементи.Список.ПоточнийРядок;
ФормаСписку.Відкрити();

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

У цьому обробнику ми отримуємо форму списку прибуткових накладних та передаємо у параметр форми ФільтрПоТовару посилання на поточний елемент у списку номенклатури та відкриваємо форму з цим параметром.

Потім створимо форму списку документів ПриходнаяНакладная і створимо реквізит форми ФільтрПотовару, який ми будемо використовувати як параметр форми при її відкритті. Тепер відкриємо палітру властивостей основного реквізиту форми Список. Встановимо прапор ДовільнийЗапитта у рядку Налаштування списку натиснемо Відкрити.

У полі Запит введемо наступний текст запиту:
Код 1C v 8.2 УП ВИБРАТИ
ДокументПриходнаяНакладная.Номер,
ДокументПриходнаНакладна.Дата
З
Документ.ПриходнаяНакладная ЯК ДокументПриходнаяНакладная
ДЕ
ДокументПриходнаяНакладная.Товари.Товар = &Товар

У запиті ми використовуємо параметр Товар, який і буде передаватися посилання на поточний рядок у списку номенклатури, що міститься в параметрі форми списку прибуткових накладних ФільтрПотовару. Для цього в обробнику події форми списку При відкритті напишемо код для встановлення значення параметра запиту Товар:
Код 1C v 8.2 УП
&На Клієнті
Процедура Прі Відкриття (Відмова)

Список.Параметри.ВстановитиЗначенняПараметра("Товар", ФільтрПоТовару);

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

Тут Список.Параметри- це список параметрів запиту динамічного списку реквізиту Список. Значення параметра Товар встановлюється рівним значенню параметра форми ФільтрПоТовару.

В результаті за натисканням кнопки Прибуткові накладні у формі списку номенклатури ми отримуватимемо список тільки тих прибуткових накладних, у яких є номенклатура, виділена на даний момент у списку номенклатури.

Цей код дозволяє відкрити список документів із встановленим відбором, також можна відкрити список елементів довідника з потрібним добором

Код 1C v 8.2 УП Форма = ВідкритиФорму("Документ.ВитратнаНакладна.Форма.ФормаСписку"); // Відкриваємо форму
Відбір Власник = Форма. Список. //Добав відбір
ВідбірВласник.ВидПорівняння = ВидПорівнянняКомпонуванняДаних.Рівне; //Як порівнюватимемо
ВибірВласник.Використання = Істина; // Встановлюємо галку використанняНовий ПолеКомпонівкиДаних("Номенклатура")
ВідбірВласник.ЛівеЗначення = Новий ПолеКомпонівкиДаних("Контрагент"); //По якому реквізиту робитимемо відбір
ВідбірВласник.ПравеЗначення = Об'єкт.Контрагент; // І саме значення відбору

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

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

Параметр Відбір є структурою. Імена елементів відповідають іменам полів, якими проводиться відбір, а значення містять значення відбору. Це параметр розширення керованої форми динамічного списку. Тобто він існує у форм, основним реквізитом яких є реквізит типу Динамічний Список, наприклад у форм списку та форм вибору.

Наприклад, у наступному прикладі відкривається список прибуткових накладних з відбором по полю Номер 333.

Код 1C v 8.2 УП ЗначенняВідбору = Новий Структура("Номер", "333");
ПараметриВибору = Новий Структура("Отбор", ЗначенняОтбору);
ВідкритиФорму("Документ.ПриходнаяНакладная.ФормаСписка", ПараметриВибору);

Другий спосіб

Можна відкрити форму списку без параметрів:

Код 1C v 8.2 УП ВідкритиФорму("Документ.ПриходнаяНакладная.ФормаСписка");

І потім, в обробнику події форми списку прибуткових накладних При створенні на сервері написати код, який створює відбір в динамічному списку, що є основним реквізитом форми:

Код 1C v 8.2 УП &На Сервері
Процедура при створенні на сервері (відмова, стандартна обробка)
ЕлементВідбору = Список.
ЕлементОтбора.ЛевоеЗначение = Новий ПолеКомпонівкиДаних("Номер");
ЕлементОтбора.Вид Порівняння = ВидПорівнянняКомпонівкиДаних.Більше;
ЕлементОтбору.Використання = Істина;
ЕлементВідбору.РежимВідображення = РежимВідображенняЕлементаНалаштуванняКомпонуванняДаних.Недоступний;
ЕлементОтбору.ПравоеЗначення = "000000001";
КінецьПроцедури

Переваги даного методу в тому, що Порівняння у відбору можна задавати не тільки рівно, як в першому випадку, а і більше, менше і т.п.

Але такий спосіб має й дуже істотний недолік: з цим відбором форма буде відкриватися завжди. Звідки б її не викликали. Тому таку форму слід призначати основний. А якщо все ж таки вона основна - то перед встановленням відбору необхідно передбачити якийсь аналіз того, звідки відкривається ця форма. Наприклад, аналізуючи параметри форми.

Третій спосіб

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

Наприклад, нам потрібно відкрити список прибуткових накладних, у яких є номенклатура, виділена в списку номенклатури.

Для цього у формі списку номенклатури створимо команду та відповідну їй кнопку Прибуткові накладні.

Обробник виконання цієї команди заповнимо так:

Код 1C v 8.2 УП &НаКлієнті
Процедура ПрибутковіНакладні(Команда)
ПараметриВибору = Новий Структура("ФільтрПоТовару", Елементи.Список.ПоточнаРядок);
ВідкритиФорму("Документ.ПриходнаяНакладная.ФормаСписка", ПараметриВибору);
КінецьПроцедури

У цьому обробнику ми відкриваємо форму списку прибуткових накладних, передаючи у параметр форми ФільтрПотовар посилання на поточний елемент у списку номенклатури.

Потім створимо форму списку документів ПриходнаяНакладная і створимо параметр форми ФільтрПоТовару, який ми будемо використовувати для відкриття форми з потрібним відбором.

Тепер відкриємо палітру властивостей основного реквізиту форми Список. Встановимо прапорець Довільний Запит і в рядку Настройка списку натиснемо Відкрити.

У полі Запит введемо наступний текст запиту:

Код 1C v 8.2 УП ВИБРАТИ
ДокументПриходнаяНакладная.Номер,
ДокументПрибутковаНакладна.Дата
З
Документ.ПриходнаяНакладная ЯК ДокументПриходнаяНакладная
ДЕ
ДокументПриходнаяНакладная.Товари.Товар = &Товар

У запиті ми використовуємо параметр Товар, який і буде передаватися посилання на поточний рядок у списку номенклатури, що міститься в параметрі форми списку прибуткових накладних ФільтрПотовару.

Для цього в обробнику події форми списку При створенні на сервері напишемо код для встановлення значення параметра запиту Товар:

Код 1C v 8.2 УП &НаКлієнті
Процедура Прі Відкриття (Відмова)
Список.Параметри.ВстановитиЗначенняПараметра("Товар", Параметри.ФільтрПоТовару);
КінецьПроцедури

Тут список.Параметри - це список параметрів запиту динамічного списку для реквізиту Список. Значення параметра Товар встановлюється рівним значенню параметра форми ФільтрПоТовару.

В результаті за натисканням кнопки Прибуткові накладні у формі списку номенклатури ми отримуватимемо список тільки тих прибуткових накладних, у яких є номенклатура, виділена на даний момент у списку номенклатури.

Для того щоб відкрити форму вибору з відбором 1с 8.2(Звичайні форми), нам потрібно виконати деякі дії. Спершу ми її отримаємо. Після цього виставимо відбір і програмно відкриємо, приклад коду:

Відбір на формі у полі введення 1С 8.2 з кількома значеннями

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

Для початку отримуємо форму вибору, у параметрах передаємо "Елемент" (власника), встановлюємо прапор режиму вибору. Потім створюємо список значень і масив, відзначаємо що як відбір коли встановлюється вид порівняння у списку, може бути об'єкт тільки з типом СписокЗначень. Додаємо елементи в масив, потім цей масив завантажуємо в СписокЗначень, який у результаті ми встановлюємо у відборі. Також не забуваємо увімкнути прапор використання даного відбору, та встановити ВидПорівняння.

Встановлення відбору в полі введення на формі 1С 8.3, подія ПочатокВибору

Тепер розглянемо відбір у полі введення на керованій формі 1С 8.3. Знайдемо на формі елемент, що цікавить нас, в якому ми будемо встановлювати відбір, у нашому випадку це поле «Організація». Знаходимо подію «Початок Вибору», клацаємо на лупу і опиняємось у процедурі. Ми бачимо параметр Дані Вибору, цей параметр має тип СписокЗначень. Для того, щоб обмежити вибір необхідними елементами, нам необхідно заповнити СписокЗначень. Елементи вибрати можемо тільки на сервері, тому створюємо процедуру з директивою компіляції &На сервері. У цій процедурі заповнюємо Дані Вибору.