Консультация № 146320
07.10.2008, 12:24
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты. Помогите пожалуйста по 8,1. Есть запрос по взаиморасчетах (это часть большей обработки). Если пользователь в окне Фильтры виберет отбор по подразделению, подразделение попадет в ТаблицуОтбора, соответственно СтрокаПодразделение будет отлична от Неопределено и соответствующая строка попадет в запрос. Далее запросом будет установлен параметр - и все хорошо. Но это только тогда, если пользователь выбрал одно подразделение. А ведь пользователь может выбирать несколько подразделений в списке. Тогда выдается ошибка: нельзя сравнивать строки неограниченной длины или разных типов. Как обойти это ограничение?. Кстати, то же самое когда вибырать Организацию в списке, ВидДоговора в списке.

Приложение:
Если СуммаУпрНачальныйОстаток = Истина Тогда
Запрос3 = Новый Запрос;
Запрос3.Текст =
"ВЫБРАТЬ
| ВзаиморасчетыКомпанииОстаткиИОбороты.СуммаУпрНачальныйОстаток КАК СуммаУпрНачальныйОстаток,
| ВзаиморасчетыКомпанииОстаткиИОбороты.СуммаУпрКонечныйОстаток КАК СуммаУпрКонечныйОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыКомпании.ОстаткиИОбороты(&ДатаНачала, &ДатаКонца, , , ) КАК ВзаиморасчетыКомпанииОстаткиИОбороты
|ГДЕ
| ВзаиморасчетыКомпанииОстаткиИОбороты.Контрагент.Ссылка = &Контрагент";
СтрокаВидДоговора = ТаблицаОтбора.Найти("ВидДоговора");
Если СтрокаВидДоговора <> Неопределено Тогда
Запрос3.Текст = Запрос3.Текст +
" И ВзаиморасчетыКомпанииОстаткиИОбороты.ДоговорВзаиморасчетов.ВидДоговора = &ВидДоговора";
КонецЕсли;
СтрокаПодразделение = ТаблицаОтбора.Найти("Подразделение");
Если СтрокаПодразделение <> Неопределено Тогда
Запрос3.Текст = Запрос3.Текст +
" И ВзаиморасчетыКомпанииОстаткиИОбороты.ДоговорВзаиморасчетов.Подразделение.Ссылка = &Подразделение";
КонецЕсли;
СтрокаОрганизация = ТаблицаОтбора.Найти("Организация");
Если СтрокаОрганизация <> Неопределено Тогда
Запрос3.Текст = Запрос3.Текст +
" И ВзаиморасчетыКомпанииОстаткиИОбороты.ДоговорВзаиморасчетов.Организация.Ссылка = &Организация";
КонецЕсли;
Запрос3.Текст = Запрос3.Текст + "
|
|ИТОГИ
| СУММА(СуммаУпрНачальныйОстаток),
| СУММА(СуммаУпрКонечныйОстаток)
|ПО
| ВзаиморасчетыКомпанииОстаткиИОбороты.Контрагент.Ссылка";

Запрос3.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос3.УстановитьПараметр("ДатаКонца", ДатаКонца);
Запрос3.УстановитьПараметр("Контрагент", ТекущаяСтрока.Контрагент);
Попытка
Запрос3.УстановитьПараметр("Подразделение", СтрокаПодразделение.ЗначениеОтбора);
Исключение
КонецПопытки;
Попытка
Запрос3.УстановитьПараметр("Организация", СтрокаОрганизация.ЗначениеОтбора);
Исключение
КонецПопытки;
Попытка
Запрос3.УстановитьПараметр("ВидДоговора", СтрокаВидДоговора.ЗначениеОтбора);
Исключение
КонецПопытки;

Результат = Запрос3.Выполнить();

Обсуждение

Неизвестный
07.10.2008, 23:24
общий
08.10.2008, 00:40
это ответ
Здравствуйте, М.Денис!
Попробуйте заменить условие в самом запросе. Не жестко "=" а использовать массив ("В").

Если СтрокаОрганизация <> Неопределено Тогда
Запрос3.Текст = Запрос3.Текст +
" И ВзаиморасчетыКомпанииОстаткиИОбороты. ДоговорВзаиморасчетов.Организация.Ссылка В(&Организация)";
КонецЕсли;

Аналогично сделать и для других частей, которые вы фильтруете.
Форма ответа