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