Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 12:04

Ошибка: ожидается выражение ВЫБРАТЬ...

Автор Lun, 16 сен 2019, 00:29

0 Пользователей и 1 гость просматривают эту тему.

Lun

Здравствуйте!
Есть такой запрос, формирующий источник данных динамического списка.
В начале работы параметр СписокХешКодов = "" и 1-ое условие ГДЕ дает ИСТИНА и не налагается фильтр. Все работает нормальо. Мне нужно, чтобы при установке СписокХешКодов = "какая строка", срабатывал фильтр по этой строке. Но как только я делаю в программном коде (по нажатию кнопки) такую установку, получаю ошибку:
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
Прошу объяснить, что она означает и как с ней бороться ?

текст запроса:

ВЫБРАТЬ
СписокДокументовФайлы.Файл КАК Файл,
КОЛИЧЕСТВО(СписокДокументовФайлы.Файл) КАК Количество
ПОМЕСТИТЬ Колво
ИЗ
Справочник.СписокДокументов.Файлы КАК СписокДокументовФайлы

СГРУППИРОВАТЬ ПО
СписокДокументовФайлы.Файл
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СправочникСписокФайлов.Ссылка,
СправочникСписокФайлов.Родитель,
СправочникСписокФайлов.ЭтоГруппа,
СправочникСписокФайлов.ПометкаУдаления,
СправочникСписокФайлов.Код,
СправочникСписокФайлов.Наименование,
СправочникСписокФайлов.ОригинальныйПуть,
"" КАК ОригинальныйПутьАвтозамена,
СправочникСписокФайлов.ОригинальныйИмя,
СправочникСписокФайлов.ОригинальныйРасширение,
СправочникСписокФайлов.ПрежнийПуть,
"" КАК ТекущийПутьПреобрАвтозамена,
СправочникСписокФайлов.ПрежнийИмя,
СправочникСписокФайлов.ПрежнийРасширение,
СправочникСписокФайлов.Размер КАК Размер,
СправочникСписокФайлов.Хеш КАК Хеш,
СправочникСписокФайлов.Предопределенный,
СправочникСписокФайлов.ИмяПредопределенныхДанных,
СправочникСписокФайлов.Дата,
СправочникСписокФайлов.Раздел.Ссылка,
СправочникСписокФайлов.Раздел.КраткоеНаименование,
СправочникСписокФайлов.Марка,
Колво.Количество КАК Колво
ИЗ
Справочник.СписокФайлов КАК СправочникСписокФайлов
ЛЕВОЕ СОЕДИНЕНИЕ Колво КАК Колво
ПО (Колво.Файл = СправочникСписокФайлов.Ссылка)
ГДЕ
( СправочникСписокФайлов.Хеш = &СписокХешКодов или &СписокХешКодов="")
И (&ЛюбойРаздел = ИСТИНА
ИЛИ СправочникСписокФайлов.Раздел = НЕОПРЕДЕЛЕНО
И &Раздел = ЗНАЧЕНИЕ(Справочник.Разделы.ПустойРаздел)
ИЛИ СправочникСписокФайлов.Раздел = &Раздел
И &Раздел <> ЗНАЧЕНИЕ(Справочник.Разделы.ПустойРаздел))
{ГДЕ
СправочникСписокФайлов.Хеш,
СправочникСписокФайлов.Размер}

LexaK

видимо неправильно как-то параметр устанавливаете
выкладывайте код модуля, где/как параметр СписокХешКодов задаете
если помогло нажмите: Спасибо!

Lun

Странно, но Раздел устанавливаю также и все работает.
Вот мой код. Для Фильтрации команда (кнопка) вызывает УстановитьФильтрПоХешКодам. Она формирует массив строк (Элемент.Хеш - это строка) и вызывает УстановитьОтборПоХешКодам.
Та содержит неиспользуемый блок (помечен в комменте - начало ... конец), это остатки от экспериментов. Фактически далее параметр < МассивХешКодовФайлов > передается УстПар без изменений.
Устпар берет 1-ый элемент массива (строка) и передает его как параметр.
Раньше я передавал в УстПар сам массив и в запросе пытался фильтровать по массиву (оператор - В), происходила та же ошибка, думал, что из-за массива, но если передаю не массив  только одну строку (как сейчас), то ошибка остается. И непонятно, почему ВЫБРАТЬ не нравится...


&НаКлиенте
процедура УстановитьФильтрПоХешКодам(Команда)
// КОМАНДА --> Фильтруем список по хеш-кодам выделенных файлов
Строки = Элементы.Список.ВыделенныеСтроки;
МассивХешКодов = новый массив;
для каждого Строка из Строки цикл
// Получаем тип ДанныеФормыСтруктура
Элемент = Элементы.Список.ДанныеСтроки(Строка);
Хеш = Элемент.Хеш;
МассивХешКодов.Добавить(Хеш);
КонецЦикла;

УстановитьОтборПоХешКодам(МассивХешКодов);
КонецПроцедуры


// Устанавливает отбор файлов - по списку хеш-кодов (на входе - массив хеш-кодов файлов)
&НаКлиенте
Процедура УстановитьОтборПоХешКодам(МассивХешКодовФайлов)

// неиспользуемый блок - НАЧАЛО
// формируем список хеш-кодов файлов
Первый = истина;
Список = "";
Разделитель = ";";
для й = 0 по МассивХешКодовФайлов.ВГраница() цикл
если первый тогда
Список = МассивХешКодовФайлов [й];
первый = ложь;
иначе
Список = Список + Разделитель + МассивХешКодовФайлов [й];
КонецЕсли;
КонецЦикла;

// формируем список значений для отбора
СписокХешКодовФайлов = новый СписокЗначений;
СписокХешКодовФайлов.ЗагрузитьЗначения(МассивХешКодовФайлов);
// неиспользуемый блок - КОНЕЦ


УстПар( МассивХешКодовФайлов);

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

&насервере
процедура УстПар(МассивХешКодовФайлов)
//Список.Параметры.УстановитьЗначениеПараметра("ФильтроватьПоХешКодам", истина);
Список.Параметры.УстановитьЗначениеПараметра("СписокХешКодов", МассивХешКодовФайлов[0]);
КонецПроцедуры




Цитата: LexaK от 16 сен 2019, 09:51
видимо неправильно как-то параметр устанавливаете
выкладывайте код модуля, где/как параметр СписокХешКодов задаете

LexaK

вы свое дина.список переопределяете на строку, попробуйте переименовать вот это
Цитировать
Список = "";
    Разделитель = ";";
    для й = 0 по МассивХешКодовФайлов.ВГраница() цикл
        если первый тогда
            Список = МассивХешКодовФайлов [й];
            первый = ложь;
        иначе
            Список = Список + Разделитель + МассивХешКодовФайлов [й];
        КонецЕсли;   
    КонецЦикла;   
так
Цитировать
лкСписок = "";
    Разделитель = ";";
    для й = 0 по МассивХешКодовФайлов.ВГраница() цикл
        если первый тогда
            лкСписок = МассивХешКодовФайлов [й];
            первый = ложь;
        иначе
            лкСписок = Список + Разделитель + МассивХешКодовФайлов [й];
        КонецЕсли;   
    КонецЦикла;   
если помогло нажмите: Спасибо!

Lun

Спасибо!
:zebzdr:
Так оно было...
Да, старый добрый Паскаль, такого бы не позволил.. :)

Теги: Запрос 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск