Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как правильно составить параметризованный запрос?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
andrew76
Добрый вечер ,
имеется следующий запрос на выборку данных из документа ГПОотгрузка:
выборка должна по идее работать в вилке дат- в периоде между ДатаНач и ДатаКон,
а на выходе в выборку попадают документы с датой в вилку не попадающие,т.е
если пользователь указывает период с 01-10-2014 по 30-10-2014 ,то в выборку лезут
данные за ноябрь 2014 года.Подозреваю ,что ,это и-за условия № 3.
Как правильно составить этот запрос?

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

Если ПустаяСтрока(ВыбГород)=0 тогда
     Запрос.Текст = Запрос.Текст +"
     |И (ГПОтгрузка.ОбъектУчета=&Город)";  
КонецЕсли;                      

//условие №3
Если ПустаяСтрока(Плат)=0 тогда
     Запрос.Текст = Запрос.Текст +"
     |И (ГПОтгрузка.Плательщик.Грп=&Плател) ИЛИ (ГПОтгрузка.Плательщик.Грп=&Плател1);"
КонецЕсли;



 ! 

Правила, п.4,5
 
stark
здесь
|И ((ГПОтгрузка.Плательщик.Грп=&Плател) ИЛИ (ГПОтгрузка.Плательщик.Грп=&Плател1));"
andrew76
не совсем понял-что не так в условии №3 запроса?
Petre
Проверьте в табло:

Ложь И (Ложь Или Истина)

и

Ложь И Ложь Или Истина
andrew76
Проверил -выполняются оба условия, но тогда не выполняется условие по датам.
Что делать - не знаю.
|И ((ГПОтгрузка.Плательщик.Грп=&Плател) ИЛИ (ГПОтгрузка.Плательщик.Грп=&Плател1))
Petre
Цитата(andrew76 @ 18.12.14, 16:06) необходимо зарегистрироваться для просмотра ссылки
Проверил -выполняются оба условия, но тогда не выполняется условие по датам.
Что делать - не знаю.

Ничего не понятно. Расшифруйте.
andrew76
Расшифровываю :
вот это условие (ниже приведённое) выполняется полностью : т.е то выражение -что после "И"- истина и то выражение что после "ИЛИ"-тоже истина.Это условие выполняется ,но в выборку лезут данные , за пределами
вилки дат(1-е условие запроса)

|И ((ГПОтгрузка.Плательщик.Грп=&Плател) ИЛИ (ГПОтгрузка.Плательщик.Грп=&Плател1))
logist
Воспроизведите вариант при котором используются все параметры, дойдите отладчиком до места где текст сформировался, и давайте сюда текст запросы который выполняется фактически.
Petre
И еще раз внимательно перепроверьте какие даты передаете параметрами в запрос. Можно даже сделать скрин табло со всеми параметрами запроса.
andrew76
Текст запроса,который выполняется фактически:
"гнать" запрос начинает,когда выполняется последнее условие.

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

а
И ((ГПОтгрузка.Плательщик.Грп=&Плател) ИЛИ (ГПОтгрузка.Плательщик.Грп=&Плател1))
logist
Petre, вот правильно говорит. Вам нужно добиться того, что бы результирующий запрос имел такую последнюю строку:
|И (ГПОтгрузка.Плательщик.Грп=&Плател ИЛИ ГПОтгрузка.Плательщик.Грп=&Плател1);"

В том, варианте что у Вас срабатывает - условие ИЛИ отрабатывает как:
ГПОтгрузка.Дата МЕЖДУ &ДатаНач И &ДатаКон И ГПОтгрузка.ОбъектУчета=&Город И ГПОтгрузка.Плательщик.Грп=&Плател
ИЛИ
ГПОтгрузка.Плательщик.Грп=&Плател1

p.s. и старайтесь не думать о семершном программировании в 8-ке, писать ПустаяСтрока(Плат)=0 считается "не по стандарту" smile.gif, в 8-ке достаточно написать Если ЗначениеЗаполнено(Плат) Тогда, а так же в запросе не нужно заключать параметры в скобки.
Сделайте вот так
  |ГПОтгрузка.Дата МЕЖДУ &ДатаНач И &ДатаКон
  |И ГПОтгрузка.ОбъектУчета=&Город
  |И (ГПОтгрузка.Плательщик.Грп=&Плател ИЛИ ГПОтгрузка.Плательщик.Грп=&Плател1);"
andrew76
Спасибо за советы,о результатах напишу в понедельник.
andrew76
Всё работает ! Дякую , паны добродии ! .«Пальцы нажал».
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.