Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
11 Дек 2017, 22:08
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Фильтр в запросе  (Прочитано 5274 раз)

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

Оффлайн AlterMann

  • *
  • Сообщений: 32
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-21
  • Сайт: 
  • Профессия: Ученик 1С
Всем здравствуйте.
В 1с программирую месяц.

Конструктором построил запрос. Чтобы он был более удобен, я хочу добавить возможность отфильтровать результат запроса по некоторым заданным параметрам (на пример контрагент). Реализовать фильтрацию я решил через условия в запросе, но после добавления этих условий оказалось, что теперь, чтобы запрос отработал необходимо, чтобы в каждом окне фильтра было задано конкретное значение. Если хоть одно значение не задано, то запрос формируется пустым. А хотелось бы наоборот: если все поля пустые, то запрос формируется по всем документам, если в окне "контрагент" есть значение, то документы только этого контрагента, ну а если окна "товар" и "ответственный менеджер" тоже заполнены, то соответственно выборка, удовлетворяющая всем условиям.

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

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


Оффлайн mixqn

  • Администратор
  • *****
  • Сообщений: 1346
  • РЕПУТАЦИЯ: 166
  • КПД: 12%
  • Who is John Galt?
  • Регистрация: 2012-08-15
  • Сайт: 3gmaster.net
  • Профессия: Программист 1С
Re: Фильтр в запросе
« Ответ #1: 26 Ноя 2012, 14:54 »
одно из двух: либо не пользуйся запросом (вместо этого смотри на построитель отчета, либо СКД), либо формируй текст запроса кодом, путем анализа заполненности параметров. типа такого:
Если ЗначениеЗаполнено(Контрагент) Тогда
    ТекстЗапроса = ТекстЗапроса + "
|   И Претензия.Контрагент = &Контрагент";
КонецЕсли;

ну и так далее

Оффлайн AlterMann

  • *
  • Сообщений: 32
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-21
  • Сайт: 
  • Профессия: Ученик 1С
Re: Фильтр в запросе
« Ответ #2: 26 Ноя 2012, 15:20 »
mixqn, а как закончить редактирование запроса после ответственного менеджера?
Вот так?
|ГДЕ
| Претензия.ПретенезияОбработана = &ПретенезияОбработана";
Если ЗначениеЗаполнено(Товар) Тогда
ТекстЗапроса = ТекстЗапроса + "
| Претензия.ТабличнаяЧасть1.Товар = &Товар";
КонецЕсли;
    Если ЗначениеЗаполнено(Контрагент) Тогда
ТекстЗапроса = ТекстЗапроса + "
| Претензия.Контрагент = &Контрагент";
КонецЕсли;
Если ЗначениеЗаполнено(ОтветственныйМенеджер) Тогда
ТекстЗапроса = ТекстЗапроса + "
| Претензия.ОтветственныйМенеджер = &ОтветственныйМенеджер";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|УПОРЯДОЧИТЬ ПО

Оффлайн mixqn

  • Администратор
  • *****
  • Сообщений: 1346
  • РЕПУТАЦИЯ: 166
  • КПД: 12%
  • Who is John Galt?
  • Регистрация: 2012-08-15
  • Сайт: 3gmaster.net
  • Профессия: Программист 1С
Re: Фильтр в запросе
« Ответ #3: 26 Ноя 2012, 15:31 »
AlterMann, приблизительно так. только алгоритм у вас будет более сложный - надо проверять, когда добавлять "И", а когда не надо. я только показал направление, весь код некогда пока писать. если не разберетесь, может вечерком посмотрю, напишу код целиком.

Оффлайн AlterMann

  • *
  • Сообщений: 32
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-21
  • Сайт: 
  • Профессия: Ученик 1С
Re: Фильтр в запросе
« Ответ #4: 26 Ноя 2012, 15:43 »
AlterMann, приблизительно так. только алгоритм у вас будет более сложный - надо проверять, когда добавлять "И", а когда не надо. я только показал направление, весь код некогда пока писать. если не разберетесь, может вечерком посмотрю, напишу код целиком.
Спасибо, mixqn, я пока сам поковыряюсь.

Оффлайн Promblem

  • *
  • Сообщений: 1
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-26
  • Сайт: 
  • Профессия: Ученик 1С
Re: Фильтр в запросе
« Ответ #5: 26 Ноя 2012, 16:43 »
что означает + в конце строки
 Если ЗначениеЗаполнено(Контрагент) Тогда
        ТекстЗапроса = ТекстЗапроса + "

Оффлайн mixqn

  • Администратор
  • *****
  • Сообщений: 1346
  • РЕПУТАЦИЯ: 166
  • КПД: 12%
  • Who is John Galt?
  • Регистрация: 2012-08-15
  • Сайт: 3gmaster.net
  • Профессия: Программист 1С
Re: Фильтр в запросе
« Ответ #6: 26 Ноя 2012, 16:52 »
Promblem, смотрите внимательнее, + не
в конце строки
(строка заканчивается там, где есть ";" ), это просто +.
буквально означает: + строка такая-то (далее в кавычках после +)


Оффлайн AlterMann

  • *
  • Сообщений: 32
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-11-21
  • Сайт: 
  • Профессия: Ученик 1С
Re: Фильтр в запросе
« Ответ #7: 27 Ноя 2012, 09:29 »
Все получилось! В итоге должно быть вот так:
ТекстЗапроса=
"ВЫБРАТЬ
| Претензия.Номер КАК Номер,
| Претензия.ДатаРеализации КАК ДатаРеализации,
| Претензия.Контрагент КАК Контрагент,
| Претензия.ОтветственныйМенеджер КАК ОтветственныйМенеджер,
| ПретензияТабличнаяЧасть1.Товар КАК Товар,
| ПретензияТабличнаяЧасть1.ОписаниеБрака КАК ОписаниеБрака,
| Претензия.ПретенезияОбработана
|ИЗ
| Документ.Претензия.ТабличнаяЧасть1 КАК ПретензияТабличнаяЧасть1
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Претензия КАК Претензия
| ПО ПретензияТабличнаяЧасть1.Ссылка = Претензия.Ссылка
|ГДЕ
| Претензия.ПретенезияОбработана = &ПретенезияОбработана";
Если ЗначениеЗаполнено(Товар) Тогда
ТекстЗапроса = ТекстЗапроса + "
| И Претензия.ТабличнаяЧасть1.Товар = &Товар";
КонецЕсли;
    Если ЗначениеЗаполнено(Контрагент) Тогда
ТекстЗапроса = ТекстЗапроса + "
| И Претензия.Контрагент = &Контрагент";
КонецЕсли;
Если ЗначениеЗаполнено(ОтветственныйМенеджер) Тогда
ТекстЗапроса = ТекстЗапроса + "
| И Претензия.ОтветственныйМенеджер = &ОтветственныйМенеджер";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|УПОРЯДОЧИТЬ ПО
| Номер,
| ДатаРеализации,
| Контрагент,
| Товар,
| ОписаниеБрака,
| ОтветственныйМенеджер";
Спасибо, mixqn!

Оффлайн mixqn

  • Администратор
  • *****
  • Сообщений: 1346
  • РЕПУТАЦИЯ: 166
  • КПД: 12%
  • Who is John Galt?
  • Регистрация: 2012-08-15
  • Сайт: 3gmaster.net
  • Профессия: Программист 1С
Re: Фильтр в запросе
« Ответ #8: 27 Ноя 2012, 10:19 »
рад, что смог помочь )) приходите еще ;)

Оффлайн markgenuine

  • ***
  • Сообщений: 217
  • РЕПУТАЦИЯ: 18
  • КПД: 8%
  • Регистрация: 2012-11-17
  • Сайт: 
Re: Фильтр в запросе
« Ответ #9: 27 Ноя 2012, 10:43 »
Вопрос по теме, чтобы не флудить...как в СКД задать 2 условия:
ПоступлениеТоваровУслугТовары.Ссылка.ДатаВходящегоСчетаФактуры
ПоступлениеТоваровУслугТовары.Ссылка.НомерСчетаФактуры фильтр на то что заполнен или нет, по сути мне нужно выводить поступления товаров только те которые без СФ.
Спасибо
Добавлено: 27 Ноя 2012, 12:23

Все ришл свой вопрос сам, спасибо

Последний раз редактировалось: markgenuine; 27 Ноя 2012, 12:23


 

Получить номер недели в месяце в запросе [номер недели]

Автор MuI_I_IkaРаздел Алгоритмы

Ответов: 0
Просмотров: 4118
Последний ответ 15 Июл 2015, 18:24
от MuI_I_Ika
РС "СостояниеОСОрганизаций" в запросе

Автор ILLUMIРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 1112
Последний ответ 07 Янв 2015, 05:33
от ILLUMI
Как исправить при обновлении ИБ: Ошибка в запросе набора данных по причине: {(58, 2)}: Несовместимые типы "ВЫБОР" <<?>>ВЫБОР

Автор dollРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 2109
Последний ответ 01 Янв 2017, 20:27
от Геннадий ОбьГЭС
"Поле не найдено" в запросе, но оно есть.

Автор ferrari314Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 2658
Последний ответ 27 Окт 2015, 10:29
от vitasw
Временная таблица во вложенном запросе+Группировка VS Таблица значений + Свернуть

Автор TsaigerРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 580
Последний ответ 14 Июл 2017, 23:10
от Tsaiger

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
166 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
56 Сообщений
alex0402
46 Сообщений
andron81_81
44 Сообщений
AIFrame
36 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
BuhRust
28 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 324
  • Точка Скрытых: 0
  • Точка Пользователей: 3
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal