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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке конфигураций на платформе 1С часто возникает задача: пользователь хочет выбрать несколько элементов справочника для одной строки документа. На первый взгляд кажется логичным хранить эти значения в одной ячейке, однако опытные разработчики знают, что такой подход ведет к серьезным архитектурным проблемам. Давайте разберем, почему попытки «запихнуть» список значений в одну ячейку — это тупиковый путь, и какие стандартные решения предлагает методология 1С.

Почему не стоит хранить списки внутри одной ячейки

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

Решение 1: Использование табличной части (Рекомендуемый стандарт)

Самый правильный путь, продиктованный архитектурой 1С — это использование отдельных строк в табличной части. Если в документе нужно указать несколько «Мест назначения», для каждого из них создается отдельная запись.

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

Разберем алгоритм реализации подбора:

  1. Создаем команду на форме «Подбор».
  2. В обработчике команды вызываем форму справочника МестаОбъектов в режиме выбора со свойством МножественныйВыбор = Истина.
  3. В обработчике события ОбработкаВыбора формы документа программно добавляем переданные элементы в табличную часть.

Пример логики обработки выбора:


&НаКлиенте
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
    Если ТипЗнч(ЗначениеВыбора) = Тип("Массив") Тогда
        Для Каждого ВыбранныйЭлемент Из ЗначениеВыбора Цикл
            НоваяСтрока = Объект.МестаНазначения.Добавить();
            НоваяСтрока.Место = ВыбранныйЭлемент;
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

Решение 2: Использование вспомогательной табличной части (Вложенные структуры)

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

Решение 3: Использование регистра сведений

Если «Места назначения» должны использоваться в разных документах или для других бизнес-процессов, рассмотрите возможность выноса данных в независимый РегистрСведений. В этом случае документом-регистратором будет сам документ, а в регистре будут храниться записи о связи документа с конкретными элементами справочника. Это дает колоссальные преимущества при построении отчетов: любой отчет на базе СистемаКомпоновкиДанных (СКД) сможет легко и быстро получить аналитику по таким данным.

Итог: что выбрать?

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

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

← На главную