Как добавить колонку с флажками в список документов и объединить данные из разных источников

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

В процессе разработки в среде 1С:Предприятие 8.3 часто возникает задача визуального выделения определенных признаков документа непосредственно в списке. Одной из самых популярных задач является отображение признака «Оригинал получен». Если в документ уже добавлен соответствующий реквизит типа Булево, следующим логичным шагом становится его вывод в общую форму списка или специализированную обработку.

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

Метод 1. Настройка визуализации: заменяем текст «Да/Нет» на флажок

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

Вариант А. Использование вида элемента «Поле флажка»

Это самый простой способ, встроенный в платформу. Выполним следующие шаги:

  1. Откроем форму, на которой расположен динамический список.
  2. В дереве элементов формы найдем нужную колонку (поле), связанную с реквизитом ОригиналПолучен.
  3. В палитре свойств этого элемента изменим значение свойства Вид с Поле ввода на Поле флажка.
  4. Чтобы флажок выглядел корректно и его можно было изменять (если это предусмотрено логикой), найдем свойство Редактирование и установим значение Непосредственно.

Вариант Б. Условное оформление и картинки (стандарт БСП)

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

  1. Добавим в динамический список колонку (например, через запрос), которая возвращает 0 или 1 (или Истина/Ложь).
  2. В настройках формы перейдем на вкладку Условное оформление.
  3. Создадим новое правило: в поле Оформление выберем КартинкаЗначений и укажем стандартную картинку флажка из библиотеки.
  4. В условии укажем, что наше поле равно Истина.
  5. В поле Отображать снимем галочку с текста, чтобы осталась только картинка.

Метод 2. Объединение данных из разных типов документов в одну колонку

Выясним причину основной сложности автора темы: когда реквизит «Оригинал получен» добавлен в несколько разных документов (например, «Реализация товаров и услуг» и «Акт выполненных работ»), при создании общего списка или журнала документов система создает отдельные колонки для каждого типа. Наша задача — «схлопнуть» их в одно поле.

Для этого нам потребуется использовать произвольный запрос в настройках динамического списка. Рассмотрим пример кода запроса, который объединяет данные:


ВЫБРАТЬ
    ДокСписок.Ссылка КАК Ссылка,
    ДокСписок.Дата КАК Дата,
    ДокСписок.Номер КАК Номер,
    ВЫБОР
        КОГДА ДокСписок.Ссылка ССЫЛКА Документ.РеализацияТоваровУслуг 
            ТОГДА ВЫРАЗИТЬ(ДокСписок.Ссылка КАК Документ.РеализацияТоваровУслуг).ОригиналПолучен
        КОГДА ДокСписок.Ссылка ССЫЛКА Документ.АктВыполненныхРабот 
            ТОГДА ВЫРАЗИТЬ(ДокСписок.Ссылка КАК Документ.АктВыполненныхРабот).ОригиналПолучен
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК ФлагОригинала
ИЗ
    ЖурналДокументов.Продажи КАК ДокСписок

Проанализируем этот запрос. Мы используем конструкцию ВЫБОР ... КОГДА ... ТОГДА, которая проверяет тип ссылки документа. Оператор ВЫРАЗИТЬ необходим для того, чтобы система понимала, к какому именно объекту мы обращаемся и могла извлечь его специфический реквизит ОригиналПолучен. В итоге мы получаем виртуальное поле ФлагОригинала, которое будет заполнено для всех типов документов в списке.

Метод 3. Использование механизма «Общие реквизиты»

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

В дереве метаданных можно создать объект Общий реквизит:

  1. Назовем его ОригиналПолучен, тип Булево.
  2. В свойстве Состав отметим галочками все документы, в которых этот реквизит должен присутствовать.
  3. Установим использование Автоматически.

Преимущество этого метода в том, что в динамическом списке (даже в стандартном журнале) это поле появится автоматически как единая колонка для всех включенных в состав документов. Вам не придется писать сложные конструкции ВЫБОР в запросе.

Метод 4. Интеграция с Библиотекой стандартных подсистем (БСП)

Если вы работаете в современной типовой конфигурации (БП 3.0, УТ 11, ERP), разберем, почему «изобретение велосипеда» может быть лишним. В составе БСП есть подсистема «Состояния оригиналов первичных документов».

Посмотрим на преимущества этого механизма:

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

Оптимизация производительности

При работе с динамическими списками, особенно если в базе тысячи документов, важно помнить о скорости работы. Рассмотрим важные моменты:

  1. Индексирование: Если вы добавили свой реквизит ОригиналПолучен напрямую в документ, обязательно установите у него свойство Индексировать. Это позволит пользователям мгновенно сортировать список по наличию оригинала и делать быстрые отборы.
  2. Объем данных: Старайтесь не выносить в запрос динамического списка тяжелые функции или соединения с большими таблицами. Использование конструкции ВЫБОР по ссылке, как показано выше, является достаточно производительным решением для платформы 1С.

Таким образом, мы рассмотрели все этапы решения задачи: от визуального отображения через Поле флажка до архитектурно правильного объединения данных через Общие реквизиты или использование механизмов БСП. Выбор конкретного метода зависит от масштаба вашей задачи и того, является ли конфигурация типовой или самописной.

← На главную