Здравствуйте.
Я вроде-бы где-то видел, и говорили мне, что можно запрос разделить по условию.
Т.е. у меня есть кнопка и флаг. В зависимости от флага у меня выполняются немного разные действия.
Что я хочу получить, к примеру пишу запрос:
|Выбрать из реализаций
|По реализациям
|Где Реализация + условия
(И тут разветвление)
Если Флаг тогда
| По условию 2
Иначе
| По условию 3
Выполнить запрос
Вроде бы можно к запросу дописать какой-то оператор, который разобьет текстовое поле запроса и позволит добавить условие самой 1с и в зависимости от условия продолжить выполнять запрос.
Я вроде-бы где-то видел, и говорили мне, что можно запрос разделить по условию.
Т.е. у меня есть кнопка и флаг. В зависимости от флага у меня выполняются немного разные действия.
Что я хочу получить, к примеру пишу запрос:
|Выбрать из реализаций
|По реализациям
|Где Реализация + условия
(И тут разветвление)
Если Флаг тогда
| По условию 2
Иначе
| По условию 3
Выполнить запрос
Вроде бы можно к запросу дописать какой-то оператор, который разобьет текстовое поле запроса и позволит добавить условие самой 1с и в зависимости от условия продолжить выполнять запрос.
По теме из базы знаний
- 50+ советов для успешной сдачи 1С: Специалист по платформе
- Как сдать экзамен 1С:Специалист по платформе?
- Оптимизатор запросов. Вторая часть
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
- Зачем и как читать чужой код? Какой результат ожидаем получить? Основные подходы
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Я знаю только три варианта:
1. Воспользоваться оператором "ВЫБОР";
2. При выполнении программного кода должен подменяться текст условия в запросе;
3. Почти тоже самое что в п.2: полностью разные тексты запроса в зависимости от условий.
С удовольствием узнаю что-нибудь новенькое для меня.
1. Воспользоваться оператором "ВЫБОР";
2. При выполнении программного кода должен подменяться текст условия в запросе;
3. Почти тоже самое что в п.2: полностью разные тексты запроса в зависимости от условий.
С удовольствием узнаю что-нибудь новенькое для меня.
примитив
|Выбрать из реализаций
|По реализациям
|Где Реализация + условия
(И тут разветвление)
|//По условию 2
|//По условию 3
Если <условие2> Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//По условию 2"," твоё выражение с нужным условием 2")
ИначеЕсли <условие3>
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"//По условию 3"," твоё выражение с нужным условием 3")
Иначе .....
Показать
Если нужен конструктор, тогда так
|Выбрать из реализаций
|По реализациям
|Где Реализация + условия
|//(И тут разветвление)
|и 1=1
|и 2=2
|....
|и 100=100
Если <условие2> Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"1=1"," твоё выражение с нужным условием 2")
ИначеЕсли <условие3>
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"2=2"," твоё выражение с нужным условием 3")
Иначе .....
|Выбрать из реализаций
|По реализациям
|Где Реализация + условия
|//(И тут разветвление)
|и 1=1
|и 2=2
|....
|и 100=100
Если <условие2> Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"1=1"," твоё выражение с нужным условием 2")
ИначеЕсли <условие3>
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"2=2"," твоё выражение с нужным условием 3")
Иначе .....
(8) Ёпрст, (9) NatalyaVP,
Я наверное тугодогоняющий.
Переписал по условию запрос. Он работает, ноне отрабатывает условия.
Я наверное тугодогоняющий.
Переписал по условию запрос. Он работает, ноне отрабатывает условия.
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка,
| РеализацияТоваровУслуг.Контрагент,
| РеализацияТоваровУслуг.Организация,
| РеализацияТоваровУслуг.Склад,
| РеализацияТоваровУслуг.ДоговорКонтрагента
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| ГДЕ
| РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон
| И 1=1
| И 2=2
| И ВЫБОР
| КОГДА &Организация = ЗНАЧЕНИЕ(СПравочник.Организации.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ РеализацияТоваровУслуг.Организация = &Организация
| КОНЕЦ
| И РеализацияТоваровУслуг.Контрагент В ИЕРАРХИИ(&Контрагент)
| И РеализацияТоваровУслуг.ПометкаУдаления = &ПометкаУдаления";
Если БезВозвратов тогда
ТекстЗапроса=СтрЗаменить(ТекстЗапроса, "1=1", "
|НЕ РеализацияТоваровУслуг.Сделка В
| (ВЫБРАТЬ
| РеализацияТоваровУслуг.Сделка
| ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
| ПО
| РеализацияТоваровУслуг.Сделка = ВозвратТоваровОтПокупателя.Сделка
| И ВозвратТоваровОтПокупателя.ПометкаУдаления = &ПометкаУдаления
| И ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон
| И ВЫБОР
| КОГДА &Организация = ЗНАЧЕНИЕ(СПравочник.Организации.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ ВозвратТоваровОтПокупателя.Организация = &Организация
| КОНЕЦ)");
Иначе
ТекстЗапроса=СтрЗаменить(ТекстЗапроса, "2=2", "
|ГДЕ
| НЕ РеализацияТоваровУслуг.Ссылка В
| (ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка
| ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
| ПО
| РеализацияТоваровУслуг.Ссылка = ПриходныйКассовыйОрдер.ДокументОснование
| И ПриходныйКассовыйОрдер.ДокументОснование.Дата МЕЖДУ &ДатаНач И &ДатаКон
| И ВЫБОР
| КОГДА &Организация = ЗНАЧЕНИЕ(СПравочник.Организации.ПустаяСсылка)
| ТОГДА ИСТИНА
| ИНАЧЕ ПриходныйКассовыйОрдер.ДокументОснование.Организация = &Организация
| КОНЕЦ
| И ПриходныйКассовыйОрдер.ДокументОснование.Контрагент В ИЕРАРХИИ(&Контрагент)
| И ПриходныйКассовыйОрдер.ПометкаУдаления = &ПометкаУдаления)");
КонецЕсли;
Показать
Можно еще проще:
такую конструкцию легко в цикл запихнуть
Текст="";
Текст = Текст+
"ВЫБРАТЬ
| КадроваяИсторияСотрудниковИнтервальный.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ Уволенные
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
|ГДЕ
| РАЗНОСТЬДАТ(КадроваяИсторияСотрудниковИнтервальный.ДатаНачала, КадроваяИсторияСотрудниковИнтервальный.ДатаОкончания, ЧАС) > 1
| И КадроваяИсторияСотрудниковИнтервальный.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение)
| И КадроваяИсторияСотрудниковИнтервальный.Сотрудник В(&Сотрудники)
|;
|
|";
Если ЗначениеЗаполнено(ЗарплатныйПроект)Тогда
Текст=Текст+
"////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо КАК ФизическоеЛицо,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект КАК ЗарплатныйПроект,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.Организация КАК Организация,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.НомерЛицевогоСчета КАК НомерЛицевогоСчета,
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ДатаОткрытияЛицевогоСчета КАК ДатаОткрытияЛицевогоСчета
|ПОМЕСТИТЬ вт_ЛицСчетаЗПпроектВСЕ
|ИЗ
| РегистрСведений.ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам КАК ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам
|ГДЕ
| ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ЗарплатныйПроект = &зпПроект
| И ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам.ФизическоеЛицо В
| (ВЫБРАТЬ
| Физики.ФизическоеЛицо КАК ФизическоеЛицо
| ИЗ
| Физики КАК Физики)";
Иначе
Текст=Текст+" ///еще чего-нибудь";
Запрос.Текст=Текст;
РезультатЗапроса=Запрос.Выполнить().Выгрузить();
Показатьтакую конструкцию легко в цикл запихнуть
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот