Разбираемся с параметрами редактирования СКД

Связь по типу, Параметры выбора, Связи параметров выбора

Вступление

В конструкторе СКД на некоторых вкладках есть колонка Параметры редактирования (или Параметры ввода, что то же самое по сути).
Настройка этого значения выполняется через специальное окно с одноименным названием.

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

Самые простые параметры редактирования 

Наиболее простыми для использования являются следующие параметры: Формат редактирования, Быстрый выбор, Выбор групп и элементов. С ними все понятно, поэтому их пропустим.

Маска — также описывать не буду. Он используется только для ввода значений строкового типа. Правила настройки этого параметра можно найти в Синтаксис-помощнике по слову Маска.

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

Связи параметров выбора 

Настраиваются через специальное окно Редактирование связей параметров выбора.
Рассмотрим на примере как заполнять поля этой формы.

Пример 1 

Добавим в СКД параметры Контрагент и Договор .
Мы хотим, чтобы если пользователь выбрал контрагента, то при выборе договора отображались только договоры этого контрагента (в нашей конфигурации справочник Договоры подчинен справочнику Контрагенты).

Тогда достаточно в поле Параметр выбора указать имя реквизита из справочника Договоры контрагентов, в нашем случае это Владелец, поэтому запишем: Отбор.Владелец.
Зачем добавлять слово Отбор, опишу ниже.

В колонку Поле — нужно выбрать параметр Контрагент.

Теперь, если у параметра Контрагент стоит флаг Использование и контрагент выбран, то при выборе договора, будет накладываться отбор по владельцу.
Если же Контрагент не выбран или флаг у контрагента не установлен, то при выборе договора будут отображаться все договоры.

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

Параметры выбора 

Настраиваются через специальное окно Редактирование параметров выбора
Рассмотрим на примере как заполнять поля этой формы.

Пример 2 

Поля Контрагент и Договор из первого примера. 
Мы хотим, чтобы пользователь мог выбрать только договор с видом С покупателем или Прочее и не помеченный на удаление.
Добавляем два параметра:
1. Параметр выбора = Отбор.ПометкаУдаления;  Значение = ЛОЖЬ
2. Параметр выбора = Отбор.ВидДоговора;  Значение = список из двух элементов : С покупателем, Прочее
Эти два параметра будут устанавливаться всегда независимо от выбранности/невыбранности параметра Контрагент.

 

Зачем нужно слово Отбор? 

Почему в поле Параметр выбора необходимо использовать приставку Отбор? Какие еще параметры можно указывать и на что это влияет? 

Это один из ключевых вопросов данной статьи, который и стал поводом к ее написанию.

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

&НаКлиенте
Процедура ДоговорПриНачалеРедактирования(Элемент, Отказ)
Отказ = Истина;

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

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

ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Отбор", Отбор);
ПараметрыОткрытия.Вставить("ТекущаяСтрока", ЭтаФорма.Договор);

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

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

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

Чтобы получше разобраться поэкспериментируем

Пример 3

Добавим по два параметра в Параметры выбора и в Связи параметров выбора.
 

Поставим точку останова в форме выбора при создании на сервере

Видим, что параметры, переданные без точек пришли как отдельные, а параметры, имеющие точки пришли в виде структуры.

Значит приставка перед точкой — является именем структуры, а после точки — имя ключа в этой структуре.

Связь по типу 

В настройке данного параметра сбивает с толку наличие поля Элемент связи с типом число.
Чтобы понять как его настраивать разберем два примера.

Пример 4 

Создадим в СКД параметр Счет.
И еще три параметра Субконто1, Субконто2, Субконто3.
Мы хотим, чтобы если выбран Счет, то во параметре СубконтоN автоматически устанавливался отбор со значениями соответствующего субконто.
В этом случае для параметра Субконто1 настраиваем Связь по типу:
Поле = Счет (ПараметрыДанных.Счет), Элемент связи = 1 (номер субконто)
Для остальных двух параметров аналогично, только Элемент связи будет 2 и 3.

Теперь при выбранном параметре Счет, в полях СубконтоN будут доступны только значения, соответствующие типу субконто

 

Пример 5 

Создадим в СКД параметры Вид субконто и Субконто.
Мы хотим, чтобы при выборе вида, были доступны только значения соответствующие виду субконто.
В этом случае для параметра Субконто1 настраиваем Связь по типу:
Поле = ВидСубконто (ПараметрыДанных.ВидСубконто), Элемент связи = 0 (не имеет значение в данном случае)

 

Заключение 

Данный механизм в СКД аналогичен тому, который позволяет настраивать параметры реквизитов в справочниках, документах и т.д. 

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

Думаю, что данное описание поможет разобраться в этом механизме и начать его применять.
 

9 Comments

  1. ZloyProger

    (1) Если Договор — это таблица формы, то вполне будет такое событие) А с ЭтаФорма действительно не понятно..

    Reply
  2. CMK0001

    Спасибо. Очень полезно.

    Reply
  3. skv_79

    Спасибо, очень интересно.

    Reply
  4. ids79

    Спасибо за статью.

    Очень подробно описали.

    Я в своей первой статье по СКД написал тоже об этом, но очень кратко, без примеров.

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

    Еще, на счет структуры «Отбор». Это стандартный параметр, который можно использовать при любом открытии форм списков, наряду с другими параметрами: ТекущаяСтрока, РежимВыбора и т.п. Значения, указанные в этой структуре будут потом добавлены в фиксированные настройки динамического списка формы выбора.

    Reply
  5. selez-a

    Спасибо за статью. Получил полезную информацию.

    Reply
  6. asu-kag

    Спасибо, как раз понадобилось.

    Делаю аналогично, для отбора договора по контрагенту, но не отрабатывает.

    Или это только для управляемых работает? а для обычных можно как-то также сделать?

    Reply
  7. ovt256

    Спасибо за статью!

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

    Reply
  8. ovt256

    (7)

    Вероятно, настраивать следует параметры отчета (см. Рис 3 статьи), а Вы настраиваете поле.

    Reply
  9. Spacer

    (8) Надо смотреть как настроены характеристики. У характеристик владельцем может быть либо Номенклатура,

    либо ВидНоменклатуры если вариант использования характеристик — «общие для вида номенклатуры».

    Reply

Leave a Comment

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