Часто в процессе разработки прикладных решений на платформе 1С:Предприятие возникает задача выбора нескольких элементов из справочника для одной строки табличной части. Стандартная логика работы ПолеВвода в 1С предполагает выбор только одного значения. Разберем, как обойти это ограничение и реализовать функционал множественного выбора с сохранением данных в одной ячейке.
Поскольку реквизит табличной части не может напрямую хранить коллекцию объектов, самым доступным способом для обычных форм является хранение выбранных значений в виде строки, где элементы разделены запятыми. Чтобы пользователю было удобно выбирать данные, мы будем использовать СписокЗначений и метод ОтметитьЭлементы().
Для начала, установите тип реквизита табличной части в значение Строка (неограниченной длины). Затем в событии табличного поля НачалоВыбора реализуйте механизм открытия окна выбора.
Рассмотрим процесс по шагам, чтобы вы могли легко внедрить это решение в свою конфигурацию:
СписокЗначений, в который добавьте все возможные варианты свойств.ОтметитьЭлементы(), который предоставит пользователю удобный интерфейс с флажками.Посмотрим, как выглядит программный код для реализации этого функционала:
// Пример кода в обработчике НачалоВыбора
СписокВидов = Новый СписокЗначений;
// Заполнение списка доступными вариантами
СписокВидов.Добавить("Первое свойство");
СписокВидов.Добавить("Второе свойство");
СписокВидов.Добавить("Третье свойство");
// Если нужно отобразить текущие значения как отмеченные,
// используйте парсинг строки и установку пометки:
// СписокВидов.Добавить("Свойство", , Истина);
Если СписокВидов.ОтметитьЭлементы("Вид свойства") Тогда
РезСтр = "";
Для Каждого Элемент Из СписокВидов Цикл
Если Элемент.Пометка Тогда
РезСтр = РезСтр + ?(ПустаяСтрока(РезСтр),"",", ") + Элемент.Значение;
КонецЕсли;
КонецЦикла;
// Запись результата в ячейку текущей строки
ЭлементыФормы.ИмяВашейТабличнойЧасти.ТекущиеДанные.ИмяКолонки = РезСтр;
КонецЕсли;
Чтобы пользователь видел, какие значения были выбраны в прошлый раз, необходимо реализовать функцию разбора строки. Это позволит при повторном открытии окна выбора автоматически проставить галочки напротив нужных пунктов.
// Вспомогательная функция для разбиения строки
Функция РазложитьСтрокуВМассив(Знач Стр, Разделитель = ",") Экспорт
МассивСтрок = Новый Массив;
Пока Истина Цикл
Поз = Найти(Стр, Разделитель);
Если Поз = 0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр, Поз - 1));
Стр = Сред(Стр, Поз + 1);
КонецЦикла;
КонецФункции
Несмотря на то, что описанный выше метод решает поставленную задачу, важно учитывать следующие нюансы профессиональной разработки на 1С:
Управляемых форм) рекомендуется применять механизмы ПланВидовХарактеристик или использовать JSON для сериализации сложных структур данных, если отказ от строкового хранения невозможен.Используя данный подход, вы сможете значительно упростить интерфейс ввода данных для пользователей, избавившись от необходимости создавать множество отдельных колонок с типом Булево для каждого свойства, что сделает табличную часть визуально более чистой и понятной.