В арсенале прикладного разработчика весомое пополнение. Мощный инструмент в борьбе против таблиц с огромным числом реквизитов, растягивающих форму карточки до небывалых размеров. Удобный функционал объединения выбора из нескольких справочников в одном поле как на карточке формы, так и в диалоговом окне. Встречайте: поля множественного выбора.
Поля множественного выбора позволяют:
Использование полей доступно в:
Также поля множественного выбора поддерживают вызов карточки по Ctrl+F4 и подсказки.
В качестве примера мы возьмем справочник, так как принципы работы с полями множественного выбора в типах карточек электронных документов не отличаются от типов справочников.
На панели управления редактора формы появился новый Control - “Поле выбора записей”. Выбрав этот Control, кликаем на форму и получаем поле множественного выбора.
Акцентируем свое внимание на трех свойствах поля множественного выбора:
Для выбора одной записи из нескольких справочников необходимо, чтобы реквизиты принадлежали разделу “Карточка”. В нашем примере полем множественного выбора будет поле Ответственный, реквизитами которого является реквизит Работник (спр. Работники) и реквизит Контакт (спр. Контактные лица организации). В качестве реквизита для отображения укажем строковый реквизит ФИО ответственного (рекв. для отобр.).
Поле множественного выбора для реквизитов карточки предоставляет возможность выбирать только одну запись справочника. При этом мы можем выбрать как из представленных в диалоге записей, используя встроенный фильтр, так и непосредственно открыть форму-список нужного нам справочника и выбрать оттуда.
При выборе значения в реквизит для отображения занесется DisplayText выбранной записи справочника. При этом становится проще написать программный поиск записи справочника, использую в качестве фильтра этот строковый реквизит.
Для выбора нескольких записей из одного справочника необходимо использовать один реквизит любого табличного раздела. В нашем примере полем множественного выбора будет поле Пользователи, в котором будет участвовать только один реквизит табличного раздела №1 Пользователи (спр. Пользователи).
Для каждого выбранного значения будет записано свое значение реквизита для отображения.
Для полей множественного выбора, использующих реквизиты табличного раздела, можно настроить отображение в форме-списке текущего справочника выбранных значений поля множественного выбора. Для этого необходимо завести не сохраняемый строковый реквизит карточки и добавить следующий код на событие “Открытие” набора данных:
// В форме-списке необходимо отобразить значения поля множественного выбора.
// Поле множественного выбора использует реквизиты ПользовательТ, первого детального набора данных.
UsersFunctionName = CreateSQLPivotFunction(Object.DetailDataSet(1); ArrayOf('ПользовательТ'); TRUE)
// Реквизит с кодом “Вычисление” является не сохраняемым строковым реквизитом.
ChangeReferenceDataset(Format("%s(%s.%s),Вычисления"; ArrayOf(UsersFunctionName; Object.TableName; Object.Requisites(SYSREQ_ID).SQLFieldName)))
Теперь в форме-списке мы сможем увидеть выбранные значения, настроив отображение реквизита Вычисления. В справке по функции CreateSQLPivotFunction вы найдете подробное описание работы с ней.
Для выбора нескольких записей из нескольких справочников необходимо использовать реквизиты любого табличного раздела. В нашем примере полем множественного выбора будет поле Уполномоченные, в котором будут участвовать реквизиты табличного раздела №1 – реквизит Работник (спр. Работники) и реквизит Контактное лицо (спр. Контактные лица организации). В качестве реквизита для отображения определим реквизит Уполномоченные (рекв. для отобр.).
Где полностью “раскрывается” поле множественного выбора, так это при работе с реквизитами табличных разделов. Одним словом – красота!
Вернемся к реквизитам для отображения при использовании реквизитов табличных разделов в полях множественного выбора. Для полей Пользователи и Уполномоченные мы использовали реквизиты одного и того же табличного раздела. Рассмотрим ситуацию изнутри – как заполнился у нас табличный раздел?
Состояние табличного раздела №1.
Любимые “диалоги” тоже не обошли стороной и добавили возможность использовать поля множественного выбора. Чтобы добавить поле множественного выбора, достаточно установить соответствующий тип поля. Результат выбора значений в поле множественного выбора вернется через “;”.
Для выбора одной записи из нескольких справочников:
Result = InputDialog("Произвольная строка|Ответственные";;"String:20|Reference:РАБ#КНТ#ПРС"; "Поле множественного выбора")
Для выбора нескольких записей из одного справочника:
Result = InputDialog("Произвольная строка|Ответственные";;"String:20|ReferenceM:РАБ"; "Поле множественного выбора")
Для выбора нескольких записей из нескольких справочников:
Result = InputDialog("Произвольная строка|Ответственные";;"String:20|ReferenceM:РАБ#КНТ#ПРС"; "Поле множественного выбора")
Поля множественного выбора поддерживаются и в веб-доступе. Реализованы они с помощью удобных выпадающих списков.
Новые возможности для прикладной разработки, простота в использовании и приятный интерфейс полей множественного выбора – чем вам ни повод окунуться с головой в мир прикладной разработки на ISBL!
Пример разработки с полями множественного выбора: Примеры полей множественного выбора.zip (10,35 Кб)
Крутой контрол! Пойду такой же заказывать для билдера Prestima.
Для полноты не хватает заметки о том, как это все поддерживается в вебе.
Добрый день. Правильно ли я понимаю, что эта красота лишь внешняя, не имеющая за собой изменений самой структуры таблиц БД? То есть:
1) Будет ли работать навигация при использовании записей справочников из табличных разделов?
2) Будет ли автоматически обновляться значение видимого реквизита при изменении, например, наименования указанной ранее записи (выбор одной/нескольких записей из нескольких справочников)?
Прочие вопросы:
3) Может ли одно и то же поле множественного выбора быть размещено на нескольких разных закладках на форме?
4) Будет ли увеличено количество детальных разделов для ТКЭД (в версии 4.8 их по-прежнему всего 6, из которых еще и 2 занято под служебные нужды)? Дело в том, что использование такого множественного выбора сильно ограничено количеством самих табличных частей, в которых могут располагаться реквизиты.
5) Поддерживаю вопрос Андрея Курова про возможность использования в веб-доступе.
Артем, отвечу на часть вопросов.
1) Будет, т.к. контроль работает поверх стандартных реквизитов типа "Справочник".
2) В зависимости от того, задан ли реквизит для отображения у контроля. Если задан - то будет отображаться наименование на момент выбора записи, если не задан - всегда будет отображаться актуальное на текущий момент наименование. Собственно, в этом и назначение реквизита для отображения.
3) Такая возможность не поддерживается. Также нельзя комбинировать использование грида и контроля множественного выбора для одного раздела.
4) Не планируется. Несколько контролей множественного выбора можно связывать с одним табличным разделом (с разными реквизитами), поэтому ограничение на количество табличных разделов в ТКЭД некритично.
Поля множественного выбора доступны и в веб-доступе 4.9. Принцип выбора немного отличается(выбор осуществляется с помощью выпадающих списков), но он тоже очень удобен.
Вопрос на счет функций InputDialog, InputDialogEx: как использовать механизм ведущего справочника для полей с множественным выбором?
Подразделение является ведущим полем по отношению к работникам, поэтому должны выбираться работники только из выбранного выше подразделения. Для поля с множественным выбором (Работники) данный механизм почему - то не работает. Как быть?
Рез = ВводМеню('Подразделение|Работники';'03|';'Аналитика:ПОД|АналитикаМ:РАБ')
В таблице будет 5 строк:
1 Иванова null
2 Петрова null
3 null Вектор
...
Одна запись используется строго одним полем, это контролируется самим полем.
В данном запросе в поле Подразделение по умолчанию встанет подразделение (например ИТ), для заполнения поля работники будет выведен диалог с множественным выбором работников отфильтрованных по подразделению (в наем случае ИТ). Я думаю здесь просто имеет место быть недоработка.
Добавили в ТКЭД поле с множественным выбором проектов, сейчас встал вопрос как добавить в поиск это поле? При настройке критериев поиска нет этих табличных реквизитов
Андрей, предлагаю оформить идею по увеличению количества табличных частей в ТКЭД.
Комбинирование нескольких таблиц в одной возможно, но ни к чему особо хорошему не приведет (особенно, если нужно эти данные передавать в рамках интеграции или навешивать проверки на качество их заполнения).
Ранее писал об абсолютно реальном примере нехватки (все по тем же договорным документам); нам пришлось просто убить 1 наименее критичный табличный раздел в ТКЭД, полностью перенеся с него логику в связанный справочник, чтобы на его место засунуть новый, более важный. Еще раз повторить подобный фокус уже не удастся... Поддерживаю пожелание об увеличении количества доступных табличных разделов в ТКЭД.
Попробую еще раз.
1. Если нам надо использовать несколько полей множественного выбора в карточке, то их данные можно хранить в одном табличном разделе. Таким образом, ограниченное количество табличных частей не является проблемой в данной ситуации, т.к. они не требуют большого количества табличных разделов.
Пример рассмотрен в статье - поля "Пользователи" и "Уполномоченные" хранятся в одном табличном разделе (см. "Выбор нескольких записей из нескольких справочников".)
2. Сами по себе поля множественного выбора никак не решают вопрос нехватки табличных частей. Еще раз предлагаю оформить идею по их увеличению в ТКЭД.
Я хотел сказать, что вопрос с увеличением количества табличных частей в ТКЭД закрыт, Дмитрий, вас я понял, идею я оформил.
В таблицах выбор записей из справочника автоматически фильтруется по контексту НОР.
При использовании этого контрола фильтр по контексту НОР у меня не отработал. Все записи, включая записи других НОР, доступны.
Возможно ли определить фильтр на предлагаемые пользователю записи при работе с контролом Поле множественного выбора? Если да, то как?
Добрый день! Подскажите, почему не могу выбрать табличную часть в качестве реквизитов в поле реквизиты как описано? Табличные части есть, доступен только выбор карточки
К вопросу ограничений использования реквизитов, в статье написано что:
На самом деле так же нельзя использовать и реквизиты, участвующие в обычных полях выбора, для начинающих разработчиков может быть не очевидно.
Добрый день, подскажите, а как сделать поле множественного выбора из справочника подразделения с иерархией по орг.структуре,
Values = "*Подразделение"
ValueTypes = "ReferenceM:ПОД"
DefaultValues = "Поле множественного выбора"
Параметры = InputDialog(Values;DefaultValues;ValueTypes;"Выберите подразделения")
Выдает общий список всех подразделений без иерархии, а нужно, чтобы при выборе подразделения верхнего уровня, также выбирались все подчиненные подразделения.
Заранее спасибо
Авторизуйтесь, чтобы написать комментарий