Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Помогите доработать запрос

Помогите доработать запрос
Я
   dmitn
 
13.02.20 - 15:50
[1C]
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
        |    ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток,
        |    ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , ) КАК ТоварыНаСкладахОстаткиИОбороты";
    Если ЗначениеЗаполнено(Склад) Тогда
        Запрос.Текст = Запрос.Текст +
        " ГДЕ ТоварыНаСкладахОстаткиИОбороты.Склад = &Склад";
    КонецЕсли;
[/1C]

чтобы не было этого дополнительного условия, чтобы условие было в самом запросе.
 
 
   unbred
 
1 - 13.02.20 - 15:51
зачем?
   shuhard
 
2 - 13.02.20 - 15:53
(0) дык &Склад=Значение(Справочник.Склады.Пустаяссылка) ИЛИ ТоварыНаСкладахОстаткиИОбороты.Склад = &Склад
   dmitn
 
3 - 13.02.20 - 15:53
(1) чтобы не разрывать запрос
   IOANNscrp
 
4 - 13.02.20 - 15:56
(0) РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , ,&Склад =Значение(Справочник.Склады.Пустаяссылка) или Склад = &Склад ) КАК ТоварыНаСкладахОстаткиИОбороты";
   unenu
 
5 - 13.02.20 - 15:58
ГДЕ
ВЫБОР КОГДА &НетОтбораПоСкладам
    ТОГДА ИСТИНА  
ИНАЧЕ
    ТоварыНаСкладахОстаткиИОбороты.Склад = &Склад
КОНЕЦ

или запихнуть это в отбор виртуальной таблицы

всякие ИЛИ и ЗначениеЗаполнено() - ересь адская и на больших БД дадут вам по лбу.
   FIXXXL
 
6 - 13.02.20 - 16:07
(5) ВЫБОР круче ИЛИ? :)
   unbred
 
7 - 13.02.20 - 16:12
(6) ВЫБОР проверяет одно условие. ИЛИ проверяет n условий.
   FIXXXL
 
8 - 13.02.20 - 16:16
(7) да ну? а если я напишу "бороду" КОГДА - ТОГДА?
   unenu
 
9 - 13.02.20 - 16:18
(8) о бороде речь не шла, я указал фрагмент для задачи из темы.
   ИУБиПовиц
 
10 - 13.02.20 - 16:21
Сделайте условие в запросе, а затем    Если НЕ ЗначениеЗаполнено(Склад) Тогда СтрЗаменить условие на ""
   080808Ник
 
11 - 13.02.20 - 16:29
(6) при или индекс не работает. а вот при выбор хороший вопрос)
   arsik
 
12 - 13.02.20 - 16:35
(2) (4) Криво будет запрос по скорости работать.
Я делаю так
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
|    ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток,
|    ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
|ИЗ
|    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , &УсловиеСклад) КАК ТоварыНаСкладахОстаткиИОбороты";

Если ЗначениеЗаполнено(Склад) Тогда
   Запрос.Текст = стрЗаменить(Запрос.Текст,"&УсловиеСклад","СкладКомпании = &Склад");
иначе
   Запрос.Текст = стрЗаменить(Запрос.Текст,"&УсловиеСклад","Истина");

КонецЕсли;

   Йохохо
 
13 - 13.02.20 - 16:36
(11) при ИЛИ работают ленивые вычисления оптимизатора, тоже ничего вопрос
   hhhh
 
14 - 13.02.20 - 16:41
(11) при выбор тоже не работает индекс
   Андроны едут
 
15 - 13.02.20 - 16:50
(0) В старые добрые времена использовали построитель
   Андроны едут
 
16 - 13.02.20 - 16:55
старики говорят ещё можно так 

РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , , , &Склад В (Склад, Значение(Справочник.Склады.Пустаяссылка)))
   unenu
 
17 - 13.02.20 - 17:06
(16) тот же хрен только в другой руке, что и с ИЛИ - индексы тю-тю, да еще и подзапрос.
вобщем у меня на большой БД Выбор Когда лечит на скуле, остальное по барабану.
перестанет лечить будем крутить по другому.

ес-но речь о тех случаях когда невозможно модифицировать запрос на лету по методу предтавлений или как в коде выше.
   080808Ник
 
18 - 13.02.20 - 17:12
Запрос = Новый Запрос;
    Текст =
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    |    ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , ) КАК ТоварыНаСкладахОстаткиИОбороты";
    Если ЗначениеЗаполнено(Склад) Тогда
        СхемаЗапроса = Новый СхемаЗапроса;
        СхемаЗапроса.УстановитьТекстЗапроса(Текст);
        СхемаЗапроса.ПакетЗапросов[0].Операторы[0].Источники[0].Источник.Параметры[4].Выражение = Новый ВыражениеСхемыЗапроса("Склад=&Склад");
        Текст = СхемаЗапроса.ПолучитьТекстЗапроса();
    КонецЕсли;    
    Запрос.текст = Текст;
   famnam
 
19 - 14.02.20 - 06:38
(15) а сейчас не используют?
   D_E_S_131
 
20 - 14.02.20 - 10:25
(18) Вот очень хорошее решение через СхемуЗапроса, а не через анахронизм ПостроительОтчета. +++

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.