Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 сен 2024, 02:17

Логика в запросе

Автор Sinsinmin, 18 мар 2011, 09:50

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

Sinsinmin

ОсновноеУсловие = "(Формовка.Дата МЕЖДУ &НачальнаяДата И &КонечнаяДата И ФормовкаНомерноеЛитье.Отливка = &Отливка)";

Если ФлагЖёлтый = Истина Тогда //Сдана
Если фильтр = "" Тогда
Фильтр = Фильтр + " И ((НЕ ЗаявкиНаГодноеНомерноеЛитьеСрезПервых.Регистратор ЕСТЬ NULL) И ( ОтгрузкиНомерноеЛитьеСрезПервых.Регистратор ЕСТЬ NULL))";
Иначе
Фильтр = Фильтр + " ИЛИ"+ ОсновноеУсловие + " И ((НЕ ЗаявкиНаГодноеНомерноеЛитьеСрезПервых.Регистратор ЕСТЬ NULL) И ( ОтгрузкиНомерноеЛитьеСрезПервых.Регистратор ЕСТЬ NULL))";
КонецЕсли;
КонецЕсли;

Если ФлагЗелёный = Истина Тогда //Отгружена
Если Фильтр = "" тогда
Фильтр = Фильтр + " И (Не ОтгрузкиНомерноеЛитьеСрезПервых.Регистратор Есть NULL)";
Иначе
Фильтр = Фильтр + " ИЛИ"+ ОсновноеУсловие + " И (Не ОтгрузкиНомерноеЛитьеСрезПервых.Регистратор Есть NULL)"
КонецЕсли;
КонецЕсли;


Я не могу добавить кавычку дополнительную.  В общем всем спасибо. Ошибка была правильно в кавычках, но эту ошибку пришлось исправлять дописывая лишний раз условия, но на скорость выполнения запроса на сервере это не как не повлияло. А заменив регистратор.дата на регистратор возможно стало работать быстрее.

***Vjacheslav***

 :thrtjrej: :thrtjrej: :thrtjrej: нашел три отличия, слепой!!!Пятница пора домой... И еще без даты будет работать быстрее. А лучше всего большие запросы обрабатывать с помощью СКД(результат ввиде ТабЗнач). Потому что обычным запросом может нехватить системной памяти для обработки запроса и работает дольше.   

Klyacksa

Вы сами себя запутали. Какие-то непонятные лишние "И"... Возможно и в них дело. Про "дополнительную кавычку" не поняла вообще.
Исходя из Вашего кода, я бы написала так:

ОсновноеУсловие =" (Формовка.Дата МЕЖДУ &НачальнаяДата И &КонечнаяДата И ФормовкаНомерноеЛитье.Отливка = &Отливка) ";
УсловиеЖелтое = " ((НЕ ЗаявкиНаГодноеНомерноеЛитьеСрезПервых.Регистратор ЕСТЬ NULL) И ( ОтгрузкиНомерноеЛитьеСрезПервых.Регистратор ЕСТЬ NULL)) ";
УсловиеЗеленое="  (Не ОтгрузкиНомерноеЛитьеСрезПервых.Регистратор Есть NULL) ";
Если ФлагЖелтый тогда
     Фильтр=?(СтрДлина(Фильтр)=0,УсловиеЖелтое,Фильтр+" ИЛИ "+ОсновноеУсловие+" И "+УсловиеЖелтое);
КонецЕсли;

Если ФлагЗеленый тогда
     Фильтр=?(СтрДлина(Фильтр)=0,УсловиеЗеленое,Фильтр+" ИЛИ "+ОсновноеУсловие+" И "+УсловиеЗеленое);
КонецЕсли;
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Sinsinmin

хорошо) только условий всего 6) я просто привёл два для примера

Sinsinmin

условия с помощью чек боксов

Klyacksa

Ну пусть будет 6, разницы не вижу особой :)
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Sinsinmin

ну и я особой разницы не вижу между моими условиями и вашими.

Klyacksa

Ну как минимум вот это вот возвращает кривые данные:
Если фильтр = "" Тогда
            Фильтр = Фильтр + " И ((НЕ ...

То есть, если фильтр пустой, то получится текст " И ((НЕ ..." вместо "((НЕ ..."
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Sinsinmin

Нет всё отлично работает. Видимо вы судите по куску кода а не по целому.
   
|ГДЕ
| (Формовка.Дата МЕЖДУ &НачальнаяДата И &КонечнаяДата
| И ФормовкаНомерноеЛитье.Отливка = &Отливка)"+ДопУсловие+фильтр+"

Klyacksa

Ну что прислали, по тому и сужу.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск