При разработке конфигураций на платформе 1С часто возникает задача: пользователь хочет выбрать несколько элементов справочника для одной строки документа. На первый взгляд кажется логичным хранить эти значения в одной ячейке, однако опытные разработчики знают, что такой подход ведет к серьезным архитектурным проблемам. Давайте разберем, почему попытки «запихнуть» список значений в одну ячейку — это тупиковый путь, и какие стандартные решения предлагает методология 1С.
Рассмотрим ситуацию, когда разработчик пытается хранить список через разделители или использует сериализацию данных, например, ЗначениеВСтрокуВнутр. На первый взгляд это кажется удобным, но в процессе эксплуатации системы вы столкнетесь с рядом критических трудностей:
Самый правильный путь, продиктованный архитектурой 1С — это использование отдельных строк в табличной части. Если в документе нужно указать несколько «Мест назначения», для каждого из них создается отдельная запись.
Для того чтобы не утомлять пользователя ручным добавлением каждой строки, мы рекомендуем реализовать механизм Подбора. Это позволяет пользователю открыть форму списка справочника, отметить необходимые элементы галочками и перенести их все разом в табличную часть.
Разберем алгоритм реализации подбора:
МестаОбъектов в режиме выбора со свойством МножественныйВыбор = Истина.ОбработкаВыбора формы документа программно добавляем переданные элементы в табличную часть.Пример логики обработки выбора:
&НаКлиенте
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
Если ТипЗнч(ЗначениеВыбора) = Тип("Массив") Тогда
Для Каждого ВыбранныйЭлемент Из ЗначениеВыбора Цикл
НоваяСтрока = Объект.МестаНазначения.Добавить();
НоваяСтрока.Место = ВыбранныйЭлемент;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Если задача требует, чтобы данные были логически отделены, но при этом жестко привязаны к документу, вы можете создать подчиненную табличную часть. В основной части документа вы храните идентификатор, а в подчиненной — список выбранных значений. Однако важно понимать, что с точки зрения удобства интерфейса этот вариант сложнее, так как пользователю приходится работать с двумя списками одновременно.
Если «Места назначения» должны использоваться в разных документах или для других бизнес-процессов, рассмотрите возможность выноса данных в независимый РегистрСведений. В этом случае документом-регистратором будет сам документ, а в регистре будут храниться записи о связи документа с конкретными элементами справочника. Это дает колоссальные преимущества при построении отчетов: любой отчет на базе СистемаКомпоновкиДанных (СКД) сможет легко и быстро получить аналитику по таким данным.
Проанализировав ситуацию, мы приходим к выводу, что профессиональная разработка в 1С строится на использовании стандартных механизмов хранения. Вместо того чтобы изобретать велосипед с сериализацией данных, следуйте этим советам:
Помните: правильная архитектура сегодня — это отсутствие «головной боли» при обновлении и обслуживании системы завтра. Работайте в рамках стандарта, и ваша конфигурация будет надежной и легкой в поддержке.