Вывод дополнительных полей с множественными значениями
В дополнительных полях типа «Строковый», «Целочисленный», «Десятичный», «Перечисление», «Дата», «Дата и время», «Дата и время UTC» можно разрешить принимать множественные значения:

Это означает, что поле может хранить несколько равноценных значений, каждое их которых можно использовать в фильтрах и выводить в рассылках.

Такие значения собраны в коллекцию, поэтому для их вывода используется цикл for...end for.
Рассмотрим примеры кода для различных задач.
Вывести все значения поля подряд
Без дополнительного форматирования значения будут выданы в строку через пробел.
Используемые параметры имеют различия в зависимости от типа дополнительного поля.
Тип «Перечисление»
Например, в онлайн-магазине зоотоваров пользователь может указать своих домашних животных, даже если их несколько, чтобы получать актуальные коммуникации:

В полях типа «Перечисление» можно обращаться как к названию, так и к внешнему идентификатору значения:

Пример верстки для вывода всех значений:
Ваши питомцы:<br>
        
        @{for pet in Recipient.CustomField.Pets}
        — ${pet.Name}<br>
        @{end for}
        <br>
        Никого не забыли? Поправить список можно в личном кабинете.
        Клиент со следующими данными:

Результат в письме:
Ваши питомцы:
- Собаки
- РыбкиНикого не забыли? Поправить список можно в личном кабинете.
Остальные типы
У отдельных значений строк, дат и чисел нет собственных идентификаторов, поэтому вывод происходит через заданную переменную элемента:

Например, у товара есть несколько фотографий, все они хранятся в дополнительном поле типа «Строка»:

Пример верстки для вывода всех изображений:
${Product.Name} снова в наличии!
        @{for image in Product.CustomField.AllImages}
            <img src="${image}">
        @{end for}
        Вывести значения через запятую
Рассмотрим на том же примере, но с другим форматированием:
Ваши питомцы:
        @{set all = ""}
        @{for pet in Recipient.CustomField.Pets}
            @{if all != ""}
                @{set all = all & ", "}
            @{end if}
            @{set all = all & pet.Name}
        @{end for}
        ${all}
        <br>
        Никого не забыли? Поправить список можно в личном кабинете.
        Результат:
Ваши питомцы: Собаки, Рыбки
Никого не забыли? Поправить список можно в личном кабинете.
Вывести часть значений
Например, в рассылке даются рестораны с перечислением их категорий блюд. Нужно выводить не более двух категорий, чтобы карточки ресторанов в письме были одинаковыми по высоте.
Пример верстки:
@{for rest in Products.GetBySegment("Restaurants").Take(10)}
        <span class="title">${rest.Name}</span> <br>
            @{set counter = 0}
            @{for cat in rest.CustomField.Categories}
                @{if counter < 2}
                    ${cat.Name}<br>
                    @{set counter = counter + 1}
                @{end if}
            @{end for}
        @{end for}
        Результат:
Гарцующий Пони
Эль
Сидр
Работа с отдельными значениями
Каждое значение можно форматировать: добавить теги HTML или использовать функции шаблонизатора.
Например, в каталоге косметических средств назначения продукта передаются в дополнительном поле. Нужно выводить их в письме брошенной корзины, чтобы дополнительно мотивировать покупку. Формат: ненумерованный список, строчные буквы.
Пример верстки:
@{for prod in Session.GetAddedToListProducts("Korzina").Take(6)}
        ${prod.Name}
        ...
        <ul>Применение:
        @{for use in prod.CustomField.Usage}
        <li><i>${ToLower(use.Name)}</i></li>
        @{end for}
        </ul>
        @{end for}
        Результат:
Отшелушивающий тоник
...Применение:
- разглаживает мелкие морщины
- осветляет пигментные пятна
- придает коже сияние
Проверить наличие и количество
Проверить поле на наличие значений можно с помощью функции Count
Например, у лекции в дополнительном поле хранятся даты будущих выступлений по той же теме:

При отмене регистрации пользователю нужно отправить рекомендации, как попасть на лекцию в другое время, если она ещё будет повторяться.
Пример верстки:
Нам жаль, что у вас не получится посетить лекцию. <br><br>
        @{if Count(Product.CustomField.AltDate) > 0}
        Возможно вам подойдет другое время:<br>
            @{for time in Products.SearchInIdentity("C1").GetByValue("Care").CustomField.AltDate}
                ${FormatDateTime(time, "f")}<br>
            @{end for}
        @{end if}
        При отмене такой лекции:

Пользователь получит в письме:
Нам жаль, что у вас не получится посетить лекцию.
Возможно вам подойдет другое время:
пятница, 22 сентября 2023 г. 17:00
вторник, 3 октября 2023 г. 20:00
суббота, 25 ноября 2023 г. 12:00
Если же у продукта поле пустое, блок про другие даты будет отсутствовать:
Нам жаль, что у вас не получится посетить лекцию.
Вывести текст в зависимости от значения
Можно персонализировать письма клиентам в зависимости от разных значений поля.
Например, если продукты в заказе сделаны из определенных материалов, нужно вывести советы по уходу за ними.
Пример верстки:
@{for line in Order.Items}
            @{if Count(line.Product.CustomField.CareTips) > 0}
                Советы по уходу:<br>
                @{for item in line.Product.CustomField.CareTips} 
                    @{if item.ExternalId = "Suede"}
        Избегайте контакта с водой, используйте мягкую щетку для удаления пыли и грязи.
                    @{else if item.ExternalId = "Leather"}
        Применяйте кремы и масла для увлажнения и сохранения гибкости.
                    @{else if item.ExternalId = "Silk"}
        Избегайте вытягивания и длительного воздействия солнечных лучей.<br>
                    @{end if}
                @{end for}
            @{end if}
        @{end for}
        При покупке данного продукта:

В его описании будет:
Советы по уходу:
Применяйте кремы и масла для увлажнения и сохранения гибкости.
Избегайте контакта с водой, используйте мягкую щетку для удаления пыли и грязи.