Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
Никак не могу понять , почему не работает запрос. Задачка на данный момент следующая. Есть документы РеестрПлатежей с табличной частью с полем Клиент из справочника Контрагенты. Нужно за определённый период выбрать все документы в которых поле клиент равно тому что ввел пользователь в поле на форме Клввод (т.е нечеткий поиск по нескольким буквам). Вот тест запроса:
ТекстЗапроса = "
|SEL ECT
| Док.IDDoc AS [Документ $Документ.РеестрПлатежей],
| $Док.магазин AS [Наименование $Справочник.МагазиныКухниСити],
| $Док.ВыбСпособОплаты AS [Способ $Перечисление.СпособОплаты],
| $Док.ВыбВалюта AS ВалютаДокП,
| $ОбщийРеквизит.Фирма AS ФирмаДокП,
| $ДокС.Клиент AS [Клиент $Справочник.Контрагенты]";
ТекстЗапроса=ТекстЗапроса+" FR OM $ДокументСтроки.РеестрПлатежей AS ДокС ";
ТекстЗапроса=ТекстЗапроса+"
|INNER JOIN
| $Документ.РеестрПлатежей as Док ON Док.IDDoc = ДокС.IDDoc ";
ТекстЗапроса = ТекстЗапроса + "
|INNER JOIN _1sjourn AS Журнал (nolock) ON Журнал.IDDoc = Док.IDDoc
|WHERE
| Журнал.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND UPPER($ДокС.Клиент) LIKE :КлвводП
|";
RS.УстановитьТекстовыйПараметр("НачДата", НачДата);
RS.УстановитьТекстовыйПараметр("КонДата", КонДата);
RS.УстановитьТекстовыйПараметр("КлвводП","%"+ВРег(СокрЛП(Клввод))+"%");
При вводе в поле Клввод букв ничего не находит. Если вводишь цифру, то показывает документы не понятно по какому принципцу.
Заранее очень благодарен!
ТекстЗапроса = "
|SEL ECT
| Док.IDDoc AS [Документ $Документ.РеестрПлатежей],
| $Док.магазин AS [Наименование $Справочник.МагазиныКухниСити],
| $Док.ВыбСпособОплаты AS [Способ $Перечисление.СпособОплаты],
| $Док.ВыбВалюта AS ВалютаДокП,
| $ОбщийРеквизит.Фирма AS ФирмаДокП,
| $ДокС.Клиент AS [Клиент $Справочник.Контрагенты]";
ТекстЗапроса=ТекстЗапроса+" FR OM $ДокументСтроки.РеестрПлатежей AS ДокС ";
ТекстЗапроса=ТекстЗапроса+"
|INNER JOIN
| $Документ.РеестрПлатежей as Док ON Док.IDDoc = ДокС.IDDoc ";
ТекстЗапроса = ТекстЗапроса + "
|INNER JOIN _1sjourn AS Журнал (nolock) ON Журнал.IDDoc = Док.IDDoc
|WHERE
| Журнал.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND UPPER($ДокС.Клиент) LIKE :КлвводП
|";
RS.УстановитьТекстовыйПараметр("НачДата", НачДата);
RS.УстановитьТекстовыйПараметр("КонДата", КонДата);
RS.УстановитьТекстовыйПараметр("КлвводП","%"+ВРег(СокрЛП(Клввод))+"%");
При вводе в поле Клввод букв ничего не находит. Если вводишь цифру, то показывает документы не понятно по какому принципцу.
Заранее очень благодарен!
По теме из базы знаний
- Работа с периодическими реквизитами 1С версии 7.7 при помощи прямых запросов.
- Расчет итогов по группам справочника в прямом запросе.
- Последний тюнинг известной обработки 1CQA (консоль прямых запросов 1С++) для 1С:Предприятие-77.
- Реализация условий в прямых запросах к журналу расчета.
- Подсистема "COMExchange": «прямые» запросы к базе 1С через ADO или как простые элементы сделать “предопределёнными”.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
$ДокС.Клиент - это char(9) ссылка на запись в таблице справочника. Применять к нему лайк неправильно. Для корректной работы с наименованием вам нужно приджоинть таблицу справочника клиенты и вот там уже делать лайк по полю DESCR.
P/S небольшое замечание по синтаксису. Условие отбора по журналу документов лучше использовать в операторе JOIN а не в WHERE. Проще читать запросы и разбираться в коде и стилистически в рамках SQL так будет более правильно. А как у вас написано это мувитон :)
P/S небольшое замечание по синтаксису. Условие отбора по журналу документов лучше использовать в операторе JOIN а не в WHERE. Проще читать запросы и разбираться в коде и стилистически в рамках SQL так будет более правильно. А как у вас написано это мувитон :)
Ну вот вам в помощь :)
Код |
---|
ТекстЗапроса = "
|SELECT
| Док.IDDoc AS [Документ $Документ.РеестрПлатежей],
| $Док.магазин AS [Наименование $Справочник.МагазиныКухниСити],
| $Док.ВыбСпособОплаты AS [Способ $Перечисление.СпособОплаты],
| $Док.ВыбВалюта AS ВалютаДокП,
| $ОбщийРеквизит.Фирма AS ФирмаДокП,
| $ДокС.Клиент AS [Клиент $Справочник.Контрагенты]";
|FROM $ДокументСтроки.РеестрПлатежей AS ДокС ";
|INNER JOIN
| $Документ.РеестрПлатежей as Док ON
| Док.IDDoc = ДокС.IDDoc ";
|INNER JOIN
| _1sjourn AS Журнал (nolock) ON
| Журнал.IDDoc = Док.IDDoc AND
| Журнал.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
|INNER JOIN
| $Справочник.Клиенты AS СпрКл ON
| СпрКл.ID = $Док.Клиент
|WHERE
| UPPER(СпрКл.DESCR) LIKE :КлвводП
|";
Показать полностью |
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот