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

Публикация № 1100132

Программирование - Практика программирования

Параметры выбора связи СКД

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

Вступление

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

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


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

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

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

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


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

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

Пример 1 

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

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

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

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

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


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

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

Пример 2 

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

 

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

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

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

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

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

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

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

Пример 3

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

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

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

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


Связь по типу 

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

Пример 4 

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

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

 

Пример 5 

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

 

Заключение 

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

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

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

103

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. bulpi 155 01.08.19 12:00 Сейчас в теме
Автор, все бы хорошо, но вот этот пример :
Процедура ДоговорПриНачалеРедактирования(Элемент, Отказ)
очень корявый. Недостойный такой хорошей статьи.

1)Такого события "ПриНачалеРедактирования" не существует у реквизита управляемой формы типа Справочник. Есть "НачалоВыбора"
2)ЭтаФорма.Контрагент
Кофий ... Пальта... ЗвОнят...
На хрена ЭтаФорма. ???????
2. ZloyProger 4 01.08.19 13:58 Сейчас в теме
(1) Если Договор - это таблица формы, то вполне будет такое событие) А с ЭтаФорма действительно не понятно..
3. CMK0001 02.08.19 08:09 Сейчас в теме
4. skv_79 156 02.08.19 11:52 Сейчас в теме
Спасибо, очень интересно.
5. ids79 3209 02.08.19 13:01 Сейчас в теме
Спасибо за статью.
Очень подробно описали.
Я в своей первой статье по СКД написал тоже об этом, но очень кратко, без примеров.
Важный момент, который еще стоит указать, что все эти параметры влияют только на редактирование отборов в настройках компоновки. На вывод самого отчета они ни как не влияют.
Еще, на счет структуры "Отбор". Это стандартный параметр, который можно использовать при любом открытии форм списков, наряду с другими параметрами: ТекущаяСтрока, РежимВыбора и т.п. Значения, указанные в этой структуре будут потом добавлены в фиксированные настройки динамического списка формы выбора.
Kinestetik; +1 Ответить
6. selez-a 16 14.08.19 13:34 Сейчас в теме
Спасибо за статью. Получил полезную информацию.
7. asu-kag 22.08.19 08:50 Сейчас в теме
Спасибо, как раз понадобилось.
Делаю аналогично, для отбора договора по контрагенту, но не отрабатывает.
Или это только для управляемых работает? а для обычных можно как-то также сделать?
Прикрепленные файлы:
Оставьте свое сообщение