Приветствую Вас ГостьПятница, 14.11.2025, 18:11

Каталог статей


Программно изменить текст запроса динамического списка

В некоторых случаях требуется программно изменить текст запроса динамического списка, но снимать с поддержки сам список не хочется.

В этом случае можно использовать объект СхемаЗапросов. 

Например надо добавить колонку Статус в динамическому запросу. Статус определяется по срезу последних регистра сведений.

В динамическом списке как правило один запрос с первой основной таблицей, поэтому берем 1-й источник, определяем для него псевдоним и связываем с нужной таблицей (ЗначенияСтатусовОбъектовСрезПоследних) по измерению ОбъектСтатуса

Процедура ПодготовитьФормуСписка(ДанныеРазмещенияСтатуса, ИмяОбъектаПолное, Форма, Элементы)
        
    Если Не Форма.Список.ПроизвольныйЗапрос Тогда //Если динамический список не на произвольном запросе, то ничего не можем сделать.
        Возврат;
    КонецЕсли;
    
    Если Элементы.Найти("Статус") <> Неопределено Тогда //Список уже настроен
        Возврат;
    КонецЕсли;
    
    Схема = Новый СхемаЗапроса();
    Схема.РежимКомпоновкиДанных = Истина;
    Схема.УстановитьТекстЗапроса(Форма.Список.ТекстЗапроса);
    Пакет = Схема.ПакетЗапросов[Схема.ПакетЗапросов.Количество() - 1];
    Оператор = Пакет.Операторы[0];
    ПсевдонимИСточника = Оператор.Источники[0].Источник.Псевдоним; //Нужен для указания связи с основной таблицей
    
    //Добавляем таблицу в запрос и задаем левое соединение
    Оператор.Источники.Добавить("РегистрСведений.ЗначенияСтатусовОбъектов.СрезПоследних", "ЗначенияСтатусовОбъектовСрезПоследних");
    ИсточникСтатусОбъектов = Оператор.Источники[0];
    ИсточникСтатусОбъектов.Соединения.Добавить(
     "ЗначенияСтатусовОбъектовСрезПоследних", 
     ПсевдонимИСточника + ".Ссылка = ЗначенияСтатусовОбъектовСрезПоследних.ОбъектСтатуса");
    НовСоединение = ИсточникСтатусОбъектов.Соединения.НайтиПоПсевдониму("ЗначенияСтатусовОбъектовСрезПоследних");
    НовСоединение.ОбязательноеСоединение = Истина;
    НовСоединение.ТипСоединения = ТипСоединенияСхемыЗапроса.ЛевоеВнешнее;
     
    Оператор.ВыбираемыеПоля.Добавить("ЗначенияСтатусовОбъектовСрезПоследних.Статус");
    Пакет.Колонки[Оператор.ВыбираемыеПоля.Количество() - 1].Псевдоним = "Статус";
    
    Форма.Список.ТекстЗапроса = Схема.ПолучитьТекстЗапроса(); 
     //Добавляем элемент на форму для отображения колонки "Статус"   
    ЭлементСтатус = Элементы.Добавить("Статус", Тип("ПолеФормы"), Элементы.Найти("Список"));
    ЭлементСтатус.ПутьКДанным = "Список.Статус"; 
    
КонецПроцедуры 
Категория: Формы | Добавил: leshic (Вчера)
Просмотров: 3 | Рейтинг: 0.0/0
Всего комментариев: 0
Вход на сайт
Поиск
Категории раздела
СКД [52]
Регистры [7]
Формы [50]
Администрирование [53]
Запросы [11]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [57]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0