crown

Царь-царевич, король-королевич… (Вывод нескольких значений в ячейку на 1С)

Новая задачка на сегодня. Имеется динамический список, мы хотим в одну из его колонок вывести список каких-то значений через запятую.

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

Для решения этой задачи создадим на форме динамический список. Установим настройку списка в виде произвольного запроса:

Запрос получает все книжные полки из базы данных. Обратите внимание, что поле «СоставПредставление» заполняется пустой строкой — зарезервируем её для дальнейшего вывода состава полки. Составом будем называть входящие в полку книги.

Далее воспользуемся событием ПриПолученииДанныхНаСервере() динамического списка. Оно доступно в 1С, начиная с версии 8.3.10. Вызывается, когда динамический список обращается к базе данных за очередной порцией информации. Тут нужно сказать, что динамический список выводит таблицу не полностью, а малыми порциями. В целях экономии ресурсов, он ограничивает выборку по несколько десятков строк за раз, необходимых для вывода отображаемой пользователю информации. Выводимые в данный момент строки передаются в свойства «Строки» события ПриПолученииДанныхНаСервере().

DynListQuery

Для начала получим из выводимых строк данные обо всех полках:

Теперь обратимся к БД и проверим наличие книг на отобранных полках:

Для каждой полки создадим строку-представление её состава. Сопоставим каждой полке её состав:

Остаётся лишь вывести полученные данные назад в свойство «Строки»:

Вот и всё! Итоговый результат выглядит примерно так:

Книжные полки

PS. Полный листинг кода:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *