Имя: Пароль:
1C
1С v8
ТЗ, значение одной из колонок - произвольный СЗ
0 ICWiner
 
12.04.14
12:55
На форме ТЗ, суть такая же как в типовом конструкторе запросов. Первая колонка - строка, вторая - любая ссылка, примитивные типы и список значений. При начале выбора пишу след код:

ТекстЗапроса = СохраненныйЗапрос;
    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Попытка
        ПараметрыЗапроса = Запрос.НайтиПараметры();
    Исключение
        Возврат;
    КонецПопытки;
    
    Для каждого ПараметрЗапроса Из ПараметрыЗапроса Цикл
     ИмяПараметра =  ПараметрЗапроса.Имя;
    Если ЭлементыФормы.ТабПараметров.ТекущиеДанные.НаименованиеПараметра <> ИмяПараметра Тогда
         продолжить;
     КонецЕсли;
     Если ТипЗнч(Элемент.Значение) = неопределено Тогда
           возврат;
      КонецЕсли;
    Тип = "";
    Есть = Ложь;
    Для каждого ТекТип Из ПараметрыЗапроса[ИмяПараметра].ТипЗначения.Типы() Цикл
        Если ТекТип = Тип("ДАТА")
            ИЛИ ТекТип = Тип("Число")
                ИЛИ ТекТип = Тип("Строка")
                    ИЛИ ТекТип = Тип("Булево")
                            Тогда
            Есть = Истина;
        КонецЕсли;
    КонецЦикла;
    Если Не Есть Тогда
        Тип = "СписокЗначений";
    КонецЕсли;
    ТипСтр = Новый ОписаниеТипов(ПараметрыЗапроса[ИмяПараметра].ТипЗначения);
    Элемент.ОграничениеТипа = Новый ОписаниеТипов(ТипСтр,Тип);
    Значение = Элемент.Значение;
    Элемент.Значение = Элемент.ОграничениеТипа.ПривестиЗначение(Значение);
    Элемент.ВыбиратьТип = Истина;
    КонецЦикла;

После сей нехитрой конструкции при выборе типа остается только список значений и тип параметра. Только вот незадача - при выборе списка значений ничего не меняется. Можно опять выбирать тип - СЗ или конкретный тип. Вроде консольку всю облазил - видимых отличий нет. Что сделать чтоб при выборе типа списка значений далее открывался сам список и там уже можно было забивать элементы?
1 ICWiner
 
14.04.14
04:44
Апну что ле
Программист всегда исправляет последнюю ошибку.