Имя: Пароль:
1C
1С v8
Программное изменение запроса динамического списка
0 Nyarlathotep
 
19.08.19
13:22
Всем привет!

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

"&НаКлиенте
процедура ЦФУПриИзменении(Элемент)
    
    если значениеЗаполнено(ЦФУ) тогда
        список.ТекстЗапроса = получитьТекстЗапросаСфильтром();
        список.Параметры.УстановитьЗначениеПараметра("ЦФУ", ЦФУ);
    иначе
        список.ТекстЗапроса = получитьТиповойТекстЗапроса();
    конецЕсли;
    
    элементы.Список.Обновить();
    ОбновитьОтображениеДанных();
    
конецПроцедуры

функция получитьТекстЗапросаСфильтром()

    возврат  "ВЫБРАТЬ
             |    ЗаказНаВнутреннееПотреблениеТовары.Ссылка КАК Заказ,
             |    ЗаказНаВнутреннееПотреблениеТовары.ЦФУ
             |ПОМЕСТИТЬ фильтрПоТабличнойЧасти
             |ИЗ
             |    Документ.ЗаказНаВнутреннееПотребление.Товары КАК ЗаказНаВнутреннееПотреблениеТовары
             |ГДЕ
             |    ЗаказНаВнутреннееПотреблениеТовары.ЦФУ = &ЦФУ
             |
             |СГРУППИРОВАТЬ ПО
             |    ЗаказНаВнутреннееПотреблениеТовары.Ссылка,
             |    ЗаказНаВнутреннееПотреблениеТовары.ЦФУ
             |;
             |
             |////////////////////////////////////////////////////////////////////////////////
             |ВЫБРАТЬ
             |    ДокументЗаказНаВнутреннееПотребление.Ссылка,
             |    ДокументЗаказНаВнутреннееПотребление.ПометкаУдаления,
             |    ДокументЗаказНаВнутреннееПотребление.Номер,
             |    ДокументЗаказНаВнутреннееПотребление.Дата,
             |    ДокументЗаказНаВнутреннееПотребление.Проведен,
             |    ДокументЗаказНаВнутреннееПотребление.ЖелаемаяДатаОтгрузки,
             |    ДокументЗаказНаВнутреннееПотребление.Комментарий,
             |    ДокументЗаказНаВнутреннееПотребление.Организация,
             |    ДокументЗаказНаВнутреннееПотребление.Ответственный,
             |    ДокументЗаказНаВнутреннееПотребление.Подразделение,
             |    ДокументЗаказНаВнутреннееПотребление.Склад,
             |    ДокументЗаказНаВнутреннееПотребление.Статус,
             |    ДокументЗаказНаВнутреннееПотребление.МаксимальныйКодСтроки,
             |    ДокументЗаказНаВнутреннееПотребление.Сделка,
             |    ДокументЗаказНаВнутреннееПотребление.ХозяйственнаяОперация,
             |    ДокументЗаказНаВнутреннееПотребление.ПодразделениеОрганизации,
             |    ВЫБОР
             |        КОГДА ДокументЗаказНаВнутреннееПотребление.агСогласованоРуководитель = ИСТИНА
             |            ТОГДА 1
             |        ИНАЧЕ 0
             |    КОНЕЦ КАК Руководитель,
             |    ВЫБОР
             |        КОГДА ДокументЗаказНаВнутреннееПотребление.агСогласованоБухгалтерия = ИСТИНА
             |            ТОГДА 1
             |        ИНАЧЕ 0
             |    КОНЕЦ КАК Бухгалтерия,
             |    ВЫБОР
             |        КОГДА ДокументЗаказНаВнутреннееПотребление.агСогласованоФинДеп = ИСТИНА
             |            ТОГДА 1
             |        ИНАЧЕ 0
             |    КОНЕЦ КАК ФинДеп
             |ИЗ
             |    Документ.ЗаказНаВнутреннееПотребление КАК ДокументЗаказНаВнутреннееПотребление
             |ГДЕ
             |    ДокументЗаказНаВнутреннееПотребление.Ссылка В
             |            (ВЫБРАТЬ
             |                фильтрПоТабличнойЧасти.Заказ
             |            ИЗ
             |                фильтрПоТабличнойЧасти)";

конецФункции"

на строке

"список.Параметры.УстановитьЗначениеПараметра("ЦФУ", ЦФУ);"

получаю ошибку:

"{Документ.ЗаказНаВнутреннееПотребление.Форма.ФормаСписка.Форма(220)}: Ошибка при вызове метода контекста (УстановитьЗначениеПараметра)
        список.Параметры.УстановитьЗначениеПараметра("ЦФУ", ЦФУ);
по причине:
Параметр с указанным именем не найден"

Но параметр в тексте, который я устанавливаю, есть. Что делаю не так? Как сделать, чтобы заработало?
1 ildary
 
19.08.19
13:24
(0) Я не увидел в запросе никаких &ЦФУ. Не надо путать параметр и выводимое поле.
2 ildary
 
19.08.19
13:25
+(1) был невнимателен, каюсь.
3 Nyarlathotep
 
19.08.19
13:31
(0) Сделал вот так:

&НаКлиенте
процедура ЦФУПриИзменении(Элемент)
    
    установитьЗапросСписка();
    
    элементы.Список.Обновить();
    ОбновитьОтображениеДанных();
    
конецПроцедуры

&НаСервере
процедура установитьЗапросСписка()
    
    если значениеЗаполнено(ЦФУ) тогда
        список.ТекстЗапроса = получитьТекстЗапросаСфильтром();
        список.Параметры.УстановитьЗначениеПараметра("ЦФУ", ЦФУ);
    иначе
        список.ТекстЗапроса = получитьТиповойТекстЗапроса();
    конецЕсли;
    
конецПроцедуры

теперь вот такое пишет:

"Основная таблица динамического списка задана неверно"

основная таблица в списке такая:

"Документ.ЗаказНаВнутреннееПотребление"

я ее не менял.
4 PuhUfa
 
19.08.19
13:37
(3) В динамическом списке можно использовать временные таблицы?
5 Anarki
 
19.08.19
13:39
(4)Уже можно
6 Anarki
 
19.08.19
13:40
(0) Не хочешь отбор просто наложить на ДС? типо ОбщегоНазанчения.УстановитьОтборДинамическогоСпика(Дс, отбор)
7 Nyarlathotep
 
19.08.19
13:44
(6) Мне нужен отбор по 1 колонке табличной части, в одном документе в табличной части могут в нужной колонке быть разные значения, нужно показать документы, где хотя бы в 1 строке табличной части есть указанное пользователем значение, притом нужно оставить возможность не использовать данный фильтр вообще, ваш метод сработает?
8 Nyarlathotep
 
19.08.19
13:48
(4) у клиента установлена совместимость с "Версия 8.2.16", возможно поэтому не работает, сделал вот так:

"функция получитьТекстЗапросаСфильтром()

    //возврат  "ВЫБРАТЬ
    //         |    ЗаказНаВнутреннееПотреблениеТовары.Ссылка КАК Заказ,
    //         |    ЗаказНаВнутреннееПотреблениеТовары.ЦФУ
    //         |ПОМЕСТИТЬ фильтрПоТабличнойЧасти
    //         |ИЗ
    //         |    Документ.ЗаказНаВнутреннееПотребление.Товары КАК ЗаказНаВнутреннееПотреблениеТовары
    //         |ГДЕ
    //         |    ЗаказНаВнутреннееПотреблениеТовары.ЦФУ = &ЦФУ
    //         |
    //         |СГРУППИРОВАТЬ ПО
    //         |    ЗаказНаВнутреннееПотреблениеТовары.Ссылка,
    //         |    ЗаказНаВнутреннееПотреблениеТовары.ЦФУ
    //         |;
    //         |
    //         |////////////////////////////////////////////////////////////////////////////////
    возврат  "ВЫБРАТЬ
             |    ДокументЗаказНаВнутреннееПотребление.Ссылка,
             |    ДокументЗаказНаВнутреннееПотребление.ПометкаУдаления,
             |    ДокументЗаказНаВнутреннееПотребление.Номер,
             |    ДокументЗаказНаВнутреннееПотребление.Дата,
             |    ДокументЗаказНаВнутреннееПотребление.Проведен,
             |    ДокументЗаказНаВнутреннееПотребление.ЖелаемаяДатаОтгрузки,
             |    ДокументЗаказНаВнутреннееПотребление.Комментарий,
             |    ДокументЗаказНаВнутреннееПотребление.Организация,
             |    ДокументЗаказНаВнутреннееПотребление.Ответственный,
             |    ДокументЗаказНаВнутреннееПотребление.Подразделение,
             |    ДокументЗаказНаВнутреннееПотребление.Склад,
             |    ДокументЗаказНаВнутреннееПотребление.Статус,
             |    ДокументЗаказНаВнутреннееПотребление.МаксимальныйКодСтроки,
             |    ДокументЗаказНаВнутреннееПотребление.Сделка,
             |    ДокументЗаказНаВнутреннееПотребление.ХозяйственнаяОперация,
             |    ДокументЗаказНаВнутреннееПотребление.ПодразделениеОрганизации,
             |    ВЫБОР
             |        КОГДА ДокументЗаказНаВнутреннееПотребление.агСогласованоРуководитель = ИСТИНА
             |            ТОГДА 1
             |        ИНАЧЕ 0
             |    КОНЕЦ КАК Руководитель,
             |    ВЫБОР
             |        КОГДА ДокументЗаказНаВнутреннееПотребление.агСогласованоБухгалтерия = ИСТИНА
             |            ТОГДА 1
             |        ИНАЧЕ 0
             |    КОНЕЦ КАК Бухгалтерия,
             |    ВЫБОР
             |        КОГДА ДокументЗаказНаВнутреннееПотребление.агСогласованоФинДеп = ИСТИНА
             |            ТОГДА 1
             |        ИНАЧЕ 0
             |    КОНЕЦ КАК ФинДеп
             |ИЗ
             |    Документ.ЗаказНаВнутреннееПотребление КАК ДокументЗаказНаВнутреннееПотребление
             |ГДЕ
             |    ДокументЗаказНаВнутреннееПотребление.Ссылка В
             |            (ВЫБРАТЬ
             |                ЗаказНаВнутреннееПотреблениеТовары.Ссылка
             |            ИЗ
             |                Документ.ЗаказНаВнутреннееПотребление.Товары КАК ЗаказНаВнутреннееПотреблениеТовары
             |            ГДЕ
             |                ЗаказНаВнутреннееПотреблениеТовары.ЦФУ = &ЦФУ)";

конецФункции"

все работает как надо.
9 Вафель
 
19.08.19
14:21
если бы не запрос, а стал запрос, то могут слететь колонки номер, дата.
ибо по дефолту они привязаны к англискому синониму