Как реализовать выбор нескольких значений в одной ячейке табличной части 1С?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Часто в процессе разработки прикладных решений на платформе 1С:Предприятие возникает задача выбора нескольких элементов из справочника для одной строки табличной части. Стандартная логика работы ПолеВвода в 1С предполагает выбор только одного значения. Разберем, как обойти это ограничение и реализовать функционал множественного выбора с сохранением данных в одной ячейке.

Реализация через строковое представление списка

Поскольку реквизит табличной части не может напрямую хранить коллекцию объектов, самым доступным способом для обычных форм является хранение выбранных значений в виде строки, где элементы разделены запятыми. Чтобы пользователю было удобно выбирать данные, мы будем использовать СписокЗначений и метод ОтметитьЭлементы().

Для начала, установите тип реквизита табличной части в значение Строка (неограниченной длины). Затем в событии табличного поля НачалоВыбора реализуйте механизм открытия окна выбора.

Пошаговый алгоритм настройки события

Рассмотрим процесс по шагам, чтобы вы могли легко внедрить это решение в свою конфигурацию:

  1. Создайте СписокЗначений, в который добавьте все возможные варианты свойств.
  2. Если в ячейке уже есть сохраненные ранее данные, преобразуйте их обратно в массив или список, чтобы отметить уже выбранные элементы галками.
  3. Вызовите метод ОтметитьЭлементы(), который предоставит пользователю удобный интерфейс с флажками.
  4. При положительном ответе пользователя переберите список, соберите все отмеченные значения в единую строку и запишите её в текущую ячейку табличной части.

Посмотрим, как выглядит программный код для реализации этого функционала:


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

// Если нужно отобразить текущие значения как отмеченные, 
// используйте парсинг строки и установку пометки:
// СписокВидов.Добавить("Свойство", , Истина); 

Если СписокВидов.ОтметитьЭлементы("Вид свойства") Тогда
    РезСтр = "";
    Для Каждого Элемент Из СписокВидов Цикл
        Если Элемент.Пометка Тогда
            РезСтр = РезСтр + ?(ПустаяСтрока(РезСтр),"",", ") + Элемент.Значение;
        КонецЕсли;
    КонецЦикла;
    
    // Запись результата в ячейку текущей строки
    ЭлементыФормы.ИмяВашейТабличнойЧасти.ТекущиеДанные.ИмяКолонки = РезСтр;
КонецЕсли;

Как обеспечить корректную работу с уже выбранными данными?

Чтобы пользователь видел, какие значения были выбраны в прошлый раз, необходимо реализовать функцию разбора строки. Это позволит при повторном открытии окна выбора автоматически проставить галочки напротив нужных пунктов.


// Вспомогательная функция для разбиения строки
Функция РазложитьСтрокуВМассив(Знач Стр, Разделитель = ",") Экспорт
    МассивСтрок = Новый Массив;
    Пока Истина Цикл
        Поз = Найти(Стр, Разделитель);
        Если Поз = 0 Тогда
            МассивСтрок.Добавить(Стр);
            Возврат МассивСтрок;
        КонецЕсли;
        МассивСтрок.Добавить(Лев(Стр, Поз - 1));
        Стр = Сред(Стр, Поз + 1);
    КонецЦикла;
КонецФункции

Важные рекомендации по архитектуре данных

Несмотря на то, что описанный выше метод решает поставленную задачу, важно учитывать следующие нюансы профессиональной разработки на 1С:

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

← На главную