Как настроить разные колонки в списке для разных видов документов в 1С?

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

Часто возникает ситуация, когда в едином списке документов (например, "Внутренние документы" в 1С:Документооборот) хранятся совершенно разные по своей сути сущности. Для "Договоров" пользователям важно видеть сумму, контрагента и срок действия, а для "Информационно-справочных документов" — адресата, подразделение и гриф доступа. Стандартный путь через меню "Еще - Настройки - Изменить форму" здесь не работает, так как платформа применяет выбранный состав колонок для всего списка глобально. Разберем по шагам, как грамотно обойти это ограничение и настроить разный интерфейс для каждого вида документа.

Вариант 1: Использование ключа пользовательских настроек (Оптимальный метод)

Проанализируем самый элегантный и правильный с точки зрения архитектуры платформы подход. У объекта динамического списка есть специальное свойство КлючТекущихПользовательскихНастроек. Платформа 1С сохраняет ширину, видимость, порядок колонок и отборы именно в привязке к этому ключу.

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

  1. В форме списка документов (обычно слева) есть дерево папок или видов документов. Нам необходимо перехватить событие активизации строки в этом дереве.
  2. В обработчике этого события мы формируем уникальную строку-идентификатор для текущего выбранного вида документа.
  3. Присваиваем эту строку свойству динамического списка.

Пример программного кода, который можно разместить в модуле формы:


&НаКлиенте
Процедура ДеревоВидовДокументовПриАктивизацииСтроки(Элемент)
    
    ТекущиеДанные = Элементы.ДеревоВидовДокументов.ТекущиеДанные;
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Формируем уникальный ключ настроек
    НовыйКлюч = "НастройкиСписка_" + СтрЗаменить(ТекущиеДанные.ВидДокумента.Наименование, " ", "");
    
    // Присваиваем ключ динамическому списку
    Элементы.Список.КлючТекущихПользовательскихНастроек = НовыйКлюч;
    
КонецПроцедуры

Важное преимущество: При таком подходе пользователю достаточно один раз настроить удобные ему колонки для "Договоров" и отдельно для "Служебных записок". Платформа автоматически запомнит обе конфигурации и будет мгновенно переключать их при смене папки или вида. Никакого жесткого кодирования колонок не требуется.

Вариант 2: Программное управление видимостью колонок

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

Критическая ошибка: Начинающие разработчики часто пытаются привязать скрытие колонок к событию активизации строки самого динамического списка. Делать так категорически не рекомендуется! Это приведет к постоянному обновлению формы при обычном пролистывании списка колесиком мыши, сильным "тормозам" и визуальному мерцанию.

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


&НаКлиенте
Процедура УстановитьВидимостьКолонокПоВиду(ИмяВидаДокумента)
    
    // Сначала скрываем специфические колонки
    Элементы.СписокСумма.Видимость = Ложь;
    Элементы.СписокКонтрагент.Видимость = Ложь;
    Элементы.СписокПодразделение.Видимость = Ложь;
    
    // Включаем нужные колонки в зависимости от вида
    Если ИмяВидаДокумента = "Договор" Тогда
        Элементы.СписокСумма.Видимость = Истина;
        Элементы.СписокКонтрагент.Видимость = Истина;
    ИначеЕсли ИмяВидаДокумента = "Служебная записка" Тогда
        Элементы.СписокПодразделение.Видимость = Истина;
    КонецЕсли;
    
КонецПроцедуры

Вариант 3: Использование вариантов настроек компоновщика

Посмотрим на еще один мощный механизм — настройки компоновки данных. В свойствах динамического списка можно заранее создать несколько вариантов настроек (по сути, готовых схем с разным набором полей и отборов).

В программном коде при смене вида документа мы обращаемся к свойству КомпоновщикНастроек и загружаем нужный вариант. Этот метод отлично подходит для корпоративных систем, где стандарты отображения строго фиксированы, и пользователь не должен случайно "сломать" интерфейс, отключив важную колонку.


&НаСервере
Процедура ЗагрузитьНастройкиСписка(ИмяВарианта)
    
    Схема = Элементы.Список.ПолучитьВыполняемуюСхемуКомпоновкиДанных();
    Настройки = Схема.ВариантыНастроек.Найти(ИмяВарианта).Настройки;
    
    // Загружаем настройки в список
    Список.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    
КонецПроцедуры

Вариант 4: Условное оформление как альтернатива программированию

Выясним причину, почему вообще требуется скрывать колонки. Часто проблема заключается в визуальном шуме: если в списке вперемешку идут договоры и справки, колонки суммы для справок пустуют, а общая таблица становится нечитаемой.

Если вы не хотите прибегать к программированию (или у вас нет возможности дорабатывать систему), воспользуйтесь стандартным механизмом платформы — условным оформлением. Перейдите в меню "Еще - Настройки - Изменить вариант - Условное оформление".

Здесь вы можете задать правила: например, если вид документа не равен "Договор", то цвет текста в колонке "Сумма" делать белым (или сливающимся с фоном), либо очищать текст ячейки. Колонки физически останутся на экране, но перестанут перегружать внимание пользователя ненужной информацией в тех строках, где они не имеют смысла.

Рекомендации по внедрению доработок

В завершение проанализируем ситуацию с модификацией типовых конфигураций (например, 1С:Документооборот КОРП). Чтобы реализовать варианты 1, 2 или 3, потребуется написание кода. Выполнять такие доработки следует исключительно через механизм Расширений конфигурации.

Создав расширение, вы сможете безопасно "перехватить" форму списка внутренних документов, добавить обработчики для дерева папок и написать код для управления колонками динамического списка. Основная конфигурация при этом останется на поддержке, что позволит администраторам легко и быстро обновлять базу данных при выходе новых релизов от фирмы "1С".

← На главную