Как добавить колонку в список задач 1С без изменения типового запроса

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

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

Почему отсутствует событие СписокПриПолученииДанныхНаСервере?

Для начала проанализируем ситуацию: в управляемом приложении парадигма работы с динамическими списками изменилась. В отличие от обычных форм (версии 8.2), где данные отрисовывались построчно с возможностью перехвата каждой строки на сервере, динамические списки в управляемых формах оптимизированы для минимизации серверных вызовов. Вместо событий обработки строк 1С предлагает использовать возможности самого языка запросов или механизм Условного оформления. Если нам нужно вывести дополнительные данные, которых изначально нет в запросе, правильным путем будет модификация самого текста запроса динамического списка.

Метод 1: Использование Схемы Запроса для программного изменения списка

Рассмотрим наиболее гибкий способ — использование объекта СхемаЗапроса. Этот метод позволяет разобрать существующий текст запроса, добавить в него нужные поля и собрать его обратно. Это гораздо надежнее, чем простая работа со строками через СтрЗаменить.

Разберем реализацию в событии формы ПриСозданииНаСервере. Нам необходимо выполнить следующие шаги:

  1. Получить исходный текст запроса из динамического списка.
  2. Инициализировать объект СхемаЗапроса.
  3. Найти нужный пакет запросов и оператор выбора.
  4. Добавить новое поле (например, вычисляемое выражение или связь с другой таблицей).
  5. Установить обновленный текст обратно в динамический список.
  6. Программно создать элемент формы (колонку) для отображения данных.

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // 1. Получаем исходный текст запроса
    ТекстЗапросаИсходный = Список.ТекстЗапроса;
    
    // 2. Инициализируем схему запроса
    СхемаЗапроса = Новый СхемаЗапроса;
    СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапросаИсходный);
    
    // 3. Работаем с первым пакетом и первым оператором выбора
    ПакетИсходный = СхемаЗапроса.ПакетЗапросов[0];
    ОператорИсходный = ПакетИсходный.Операторы[0];
    
    // 4. Добавляем новое поле. Например, признак наличия файлов или произвольное условие.
    // Текст поля может быть любым корректным выражением на языке запросов 1С.
    ТекстПоляНоваяКолонка = "ВЫБОР КОГДА Истина ТОГДА 1 ИНАЧЕ 0 КОНЕЦ"; 
    НовоеПоле = ОператорИсходный.ВыбираемыеПоля.Добавить(ТекстПоляНоваяКолонка);
    
    // Устанавливаем псевдоним для новой колонки в пакете запроса
    ПакетИсходный.Колонки[ПакетИсходный.Колонки.Количество() - 1].Псевдоним = "НоваяКолонка";
    
    // 5. Возвращаем измененный текст в динамический список
    Список.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
    
    // 6. Программно добавляем колонку на форму
    // Проверяем, чтобы элемент не был создан ранее
    Если Элементы.Найти("НоваяКолонка") = Неопределено Тогда
        
        // Вставляем новую колонку, например, перед колонкой "Наименование"
        НовыйЭлемент = Элементы.Вставить("НоваяКолонка", Тип("ПолеФормы"), Элементы.Список, Элементы.Наименование); 
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка; // Или ПолеВвода, если это текст
        НовыйЭлемент.ПутьКДанным = "Список.НоваяКолонка";
        НовыйЭлемент.Заголовок = "Статус проверки";
        
    КонецЕсли;

КонецПроцедуры

Важные нюансы при работе с динамическими списками

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

Альтернативный современный подход: Расширения конфигурации

Если ваша версия платформы 8.3.6 и выше, мы рекомендуем рассмотреть использование Расширений конфигурации. Это более современный и "чистый" способ модификации типовых форм. Вместо написания кода через СхемаЗапроса, вы можете:

  1. Добавить форму списка задачи в расширение.
  2. В визуальном конструкторе изменить запрос динамического списка, добавив нужные поля.
  3. Добавить соответствующие элементы на форму перетаскиванием.

Этот способ предпочтительнее тем, что он сохраняет поддержку типового решения и упрощает процесс обновления конфигурации, так как изменения хранятся отдельно.

Использование пользовательских полей и характеристик

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

В режиме "1С:Предприятие" пользователь или администратор может зайти в меню Еще — Настроить список, перейти на вкладку Пользовательские поля и добавить новое поле-выражение. Эти поля также можно выводить в список в качестве колонок.

Кроме того, для задач часто актуален механизм Характеристик (Дополнительные сведения и реквизиты). Если включить поддержку характеристик в настройках динамического списка, дополнительные реквизиты станут доступны для добавления в список автоматически, без единой строчки кода.

Заключение

Мы рассмотрели основной технический прием добавления колонок в списки 1С программным способом. Использование СхемаЗапроса — это мощный инструмент для разработчика, позволяющий динамически адаптировать интерфейс под нужды бизнеса, сохраняя при этом гибкость типового решения. Однако всегда стоит помнить о наличии таких инструментов, как расширения и пользовательские настройки, которые могут решить задачу быстрее и эффективнее.

← На главную