|   |   | 
| 
 | v7: Условие в ПрямомЗапросе 1С++ | ☑ | ||
|---|---|---|---|---|
| 0
    
        smitti911 24.11.14✎ 14:14 | 
        Здравствуйте. Чет туплю. Есть такой вот запрос (класс ПрямойЗапрос) :
 оПЗ.Текст="ВЫБРАТЬ | $Жур.ТекущийДокумент КАК [Документ $Документ] |, $Жур.ВидДокумента КАК Документ_вид |, $Жур.Проведен КАК Проведен |, $Жур.ВремяДокумента КАК [ВремяДокумента $Время] |, $Жур.ДатаДокумента КАК [ДатаДокумента $Дата] | |, ВЫБОР КОГДА (($Жур.ВидДокумента в (:ВидДокумента.РасходнаяНакладнаяБ)) И ($Расх.Бетон = 1)) | ТОГДА 1 | КОГДА ($Жур.ВидДокумента в (:ВидДокумента.Калькуляция)) | ТОГДА 1 | КОГДА ($Жур.ВидДокумента в (:ВидДокумента.СчетБ)) И ($Счет.Бетон = 1) | ТОГДА 1 | ИНАЧЕ 0 КОНЕЦ КАК [Признак :Число.1.0] |ИЗ | ЖурналДокументов КАК Жур $nolock | |ЛЕВОЕ СОЕДИНЕНИЕ Документ.Калькуляция КАК Калк $nolock |ПО $Калк.ТекущийДокумент = $Жур.ТекущийДокумент | |ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладнаяБ КАК Расх $nolock |ПО $Расх.ТекущийДокумент = $Жур.ТекущийДокумент | |ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетБ КАК Счет $nolock |ПО $Счет.ТекущийДокумент = $Жур.ТекущийДокумент | |ГДЕ // |($Жур.Проведен = 1) | $Жур.ДатаДокумента МЕЖДУ :НачПериода и :КонПериода~ |И (($Жур.ВидДокумента = :ВидДокумента.РасходнаяНакладнаяБ) |ИЛИ ($Жур.ВидДокумента = :ВидДокумента.Калькуляция) |ИЛИ ($Жур.ВидДокумента = :ВидДокумента.СчетБ)) // |И (Признак = 1) Можна ли поставить фильтр на переменную Признак . Если раскомментировать последнюю строку - то выдает ошибку no such column | |||
| 1
    
        фобка 24.11.14✎ 14:16 | 
        Переменная в тексте запроса не прокатит     | |||
| 2
    
        фобка 24.11.14✎ 14:16 | 
        чо за Признак?     | |||
| 3
    
        smitti911 24.11.14✎ 14:17 | 
        Очень жаль.Придется фильтровать результат запроса после выполнения :(     | |||
| 4
    
        smitti911 24.11.14✎ 14:17 | 
        Признак - это просто имя переменной в запросе     | |||
| 5
    
        akaBrr 24.11.14✎ 14:26 | 
        (4) а просто значение переменной как планируется задавать?     | |||
| 6
    
        akaBrr 24.11.14✎ 14:27 | 
        +(5) почему у вас НачПериода не "просто переменная"?     | |||
| 7
    
        Попытка1С 24.11.14✎ 14:28 | 
        И   (Признак = :ВыбПризнак)
 Запрос.УстановитьТекстовыйПарметр("ВыбПризнак",трям) | |||
| 8
    
        Попытка1С 24.11.14✎ 14:28 | 
        Только вместо Признак должно быть что=то относящеесе к запросу хотя бы     | |||
| 9
    
        akaBrr 24.11.14✎ 14:33 | 
        (7) лучше ":Признак = 1"     | |||
| 10
    
        Попытка1С 24.11.14✎ 14:37 | 
        (9) Так мало ли что у него там     | |||
| 11
    
        Попытка1С 24.11.14✎ 14:38 | 
        А так вот
 | ИНАЧЕ 0 КОНЕЦ КАК [Признак :Число.1.0] | |||
| 12
    
        Попытка1С 24.11.14✎ 14:39 | 
        Тогда в запросе пиши тупо
 ГДЕ (($Жур.ВидДокумента в (:ВидДокумента.РасходнаяНакладнаяБ)) И ($Расх.Бетон = 1)) ИЛИ ($Жур.ВидДокумента в (:ВидДокумента.Калькуляция)) ИЛИ ($Жур.ВидДокумента в (:ВидДокумента.СчетБ)) И ($Счет.Бетон = 1)) | |||
| 13
    
        dk 24.11.14✎ 14:40 | 
        просто скопируй все из признака в условие
 ВЫБОР КОГДА (($Жур.ВидДокумента в (:ВидДокумента.РасходнаяНакладнаяБ)) И ($Расх.Бетон = 1)) | ТОГДА 1 | КОГДА ($Жур.ВидДокумента в (:ВидДокумента.Калькуляция)) | ТОГДА 1 | КОГДА ($Жур.ВидДокумента в (:ВидДокумента.СчетБ)) И ($Счет.Бетон = 1) | ТОГДА 1 | ИНАЧЕ 0 КОНЕЦ) = 1 | |||
| 14
    
        smitti911 24.11.14✎ 14:48 | 
        Спасибо за ответы.Сейчас попробую и отпишусь...     | |||
| 15
    
        smitti911 24.11.14✎ 14:51 | 
        Мммдаа, помогает только засунуть все в "ГДЕ"  :
 | $Жур.ДатаДокумента МЕЖДУ :НачПериода и :КонПериода~ |И ((($Жур.ВидДокумента = :ВидДокумента.РасходнаяНакладнаяБ) И ($Расх.Бетон = 1)) |ИЛИ ($Жур.ВидДокумента = :ВидДокумента.Калькуляция) |ИЛИ (($Жур.ВидДокумента = :ВидДокумента.СчетБ) И ($Счет.Бетон = 1))) | |||
| 16
    
        smitti911 24.11.14✎ 14:52 | 
        Если будут еще условия то "ГДЕ" разрастется еще на пару строк :)     | |||
| 17
    
        dk 24.11.14✎ 14:56 | 
        если условия капец здоровые можно обернуть еще в один запрос, тогда можно ставить условия на просто Признак = 1     | |||
| 18
    
        smitti911 24.11.14✎ 14:57 | 
        (17) Я думал про это...     | |||
| 19
    
        smitti911 24.11.14✎ 14:59 | 
        Еще вопрос: Можно ли использовать класс ПоставщикДанных.Документ* для отображения результата запроса.То есть некий список документов разных видов.Или создавать ТабличноеПоле с поставщиком ТЗ?     | |||
| 20
    
        ado 24.11.14✎ 15:06 | 
        Что тебе в итоге нужно то? Зачем тебе в запросе условие на переменную, не относящуюся к запросу?
 (19) А чем не устраивает поставщик ODBC? | |||
| 21
    
        КонецЦикла 24.11.14✎ 15:11 | ||||
| 22
    
        smitti911 24.11.14✎ 15:11 | 
        (20) Там будет очень хитрое условие, вот и хотелось знать пойдет ли фильтр по переменной  "Признак".
 В классе Поставщик данных хотелось получить красивую формочку с командной панелькой и использованием всех возможностей данного класса... | |||
| 23
    
        smitti911 24.11.14✎ 15:11 | 
        База DBF     | |||
| 24
    
        КонецЦикла 24.11.14✎ 15:12 | 
        (22) Да, форма прекрасна...     | |||
| 25
    
        ado 24.11.14✎ 15:16 | 
        (22) В зависимости от внешней переменной просто присоединяй разные условия к запросу.
 Ээээ, а какая еще форма у поставщика данных? Форму то все равно с помощью ТП придется делать, поставщик только данные для нее поставляет, не? | |||
| 26
    
        КонецЦикла 24.11.14✎ 15:18 | 
        (25) Еще есть замечательные другие классы :)     | |||
| 27
    
        ado 24.11.14✎ 15:32 | 
        (26) Штатно в составе 1С++ или внешние?     | |||
| 28
    
        smitti911 24.11.14✎ 15:36 | ||||
| 29
    
        smitti911 24.11.14✎ 15:36 | 
        (25) Имелось ввиду командная панель Поставщика. Если ТипЗначений - Документ.***** - то в панели доступны кнопки выбора периода,отбора, и т.д.     | |||
| 30
    
        ado 24.11.14✎ 15:39 | 
        (28) Мммм, а можно ссылку источник этой красоты?     | |||
| 31
    
        akaBrr 24.11.14✎ 15:39 | ||||
| 32
    
        ado 24.11.14✎ 15:41 | 
        Спасибо, а то в доках я про это что-то ничего не вижу (или плохо смотрю?)     | |||
| 33
    
        КонецЦикла 24.11.14✎ 15:50 | 
        (30) Ссылку дали, выглядит примерно так
 http://1c911.by/uskorenie-1s-77.htm#1 | |||
| 34
    
        smitti911 24.11.14✎ 15:51 | 
        (33) Вот мне и надо такой журнальчик но с разными видами доков.     | |||
| 35
    
        Попытка1С 24.11.14✎ 16:24 | 
        (34) А зачем ты вот это джонишь?
 |ЛЕВОЕ СОЕДИНЕНИЕ Документ.Калькуляция КАК Калк $nolock |ПО $Калк.ТекущийДокумент = $Жур.ТекущийДокумент | |||
| 36
    
        smitti911 24.11.14✎ 16:41 | 
        (35) Будет условие :
 $Калк.ТМЦ В (ВЫБРАТЬ val ИЗ #СписокТМЦ) | |||
| 37
    
        ado 24.11.14✎ 16:58 | 
        (33) Лепота. Жаль только FormEx в требованиях. Он у нас сейчас не используется, а подключить новую ВК -- это целая история (не техническая, организационная).     | |||
| 38
    
        Эльниньо 25.11.14✎ 11:10 | 
        Сколько тут прямозапросечников.
 Неужели ни одного безработного нет? | |||
| 39
    
        КонецЦикла 25.11.14✎ 11:11 | 
        (38) Есть безработные :)     | |||
| 40
    
        DCKiller 25.11.14✎ 11:12 | 
        (38) Работу предлагаешь? Прям в Питере? :)     | |||
| 41
    
        Banned 25.11.14✎ 11:13 | 
        (38) А что по деньгам?     | |||
| 42
    
        Эльниньо 25.11.14✎ 11:25 | 
        В личку, велкам     | |||
| 43
    
        Banned 25.11.14✎ 12:17 | 
        (42) ну это скучно же ))
 Сначала хотя бы порядок цифр... 50-70-100-150? )) | |||
| 44
    
        smitti911 25.11.14✎ 19:01 | 
        Проблема с запросом к регистру. Флаг БыстраяОбработкаДвижений = 0 , у реквизитов регистра флаг отбора движений = 0.
 Текст запроса : оПЗ.Текст=" |ВЫБРАТЬ | $РегОб.Счет КАК [Счет $Счет] |, $РегОб.ТМЦ КАК [ТМЦ $Справочник.ТМЦ] |, НАЧАЛОПЕРИОДА($Жур.ДатаДокумента, Месяц ) КАК [Месяц $Дата] |, $РегОб.ТекущийДокумент [Док $Документ] |, $Жур.ВидДокумента КАК Док_вид |, $РегОб.ПризнакДвижения КАК ПризнакДвижения |, $РегОб.Склад КАК [Склад $Справочник.МестаХранения] |, СУММА($РегОб.ПриходСуммаСебест) КАК ОборотС |, СУММА($РегОб.ПриходКво) КАК ОборотК |, 0 КАК [ИспКво :Число.15.3] | |FROM Регистр.ОборотыБ КАК РегОб | |ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Жур $nolock |ПО $Жур.ТекущийДокумент = $РегОб.ТекущийДокумент | |ГДЕ $РегОб.ПризнакДвижения = :Перечисление.ПризнакДвижения.Приход |И $РегОб.ВидДвижения = 0 |И $РегОб.Счет = :ВыбСчет~ |И $РегОб.Склад В (ВЫБРАТЬ val ИЗ #СписокСкладов) |И ($Жур.Проведен = 1) |И ($Жур.ДатаДокумента МЕЖДУ :НачПериода и :КонПериода~) |И $Жур.ВидДокумента = :ВидДокумента.ПриходнаяНакладнаяБ // |И (ТМЦ В (ВЫБРАТЬ val ИЗ #СписокТМЦ)) | |СГРУППИРОВАТЬ $РегОб.ТМЦ,$РегОб.Склад,$РегОб.ТекущийДокумент | |УПОРЯДОЧИТЬ $РегОб.ТМЦ,$РегОб.Склад,$РегОб.ТекущийДокумент УБЫВ |"; //}Текст запроса ОпределитьСклады(НаДату); оПЗ.УстановитьТекстовыйПараметр("НачПериода",НачДата); оПЗ.УстановитьТекстовыйПараметр("КонПериода",КонДата); оПЗ.УстановитьТекстовыйПараметр("ВыбСчет",СчетПоКоду("281")); СпСкл = СоздатьОбъект("СписокЗначений"); Для Поз = 1 По глСписокТоргСкладов.РазмерСписка() Цикл ТекЗн = глСписокТоргСкладов.ПолучитьЗначение(Поз); Если Число(ТекЗн.Код) = 50 Тогда Продолжить; КонецЕсли; СпСкл.ДобавитьЗначение(ТекЗн); КонецЦикла; оПЗ.УложитьСписокЗначений(СпСкл,"#СписокСкладов"); Проблема : Подбор индекса для таблицы RA18284: Ограничения: SP18296[ПризнакДвижения]=; DEBKRED=; SP18285[Счет]=; Упорядочить: SP18288[ТМЦ], SP18287[Склад], IDDOC, Найдено в кэше Индекс не выбран. Стоимость: 9982 Подбор индекса для таблицы RA18284: Ограничения: SP18296[ПризнакДвижения]=; DEBKRED=; SP18285[Счет]=; Упорядочить: SP18288[ТМЦ], SP18287[Склад], IDDOC, Найдено в кэше Индекс не выбран. Стоимость: 9982 Подбор индекса для таблицы 1SJOURN: Ограничения: IDDOCDEF=; IDDOC=; Найдено в кэше Выбран индекс IDDOC: IDDOC Стоимость: 20 Подбор индекса для таблицы 1SJOURN: Ограничения: IDDOCDEF=; IDDOC=; Найдено в кэше Выбран индекс IDDOC: IDDOC Стоимость: 20 Как можно побороть Стоимость: 9982 ? | |||
| 45
    
        trad 25.11.14✎ 19:15 | 
        внутреннее соединение
 если не поможет, внутреннее соединение и поменять таблицы местами | |||
| 46
    
        КонецЦикла 25.11.14✎ 21:53 | 
        Если уж настолько критично - подобрать штатный индекс или свой создать
 Но другая сторона - проиграешь по времени записи движений Еще вариант - использование временных таблиц (иногда пригождается) http://1c911.by/stati_1s/statya-primery-resheniya-nestandartnyh-zadach-na-t-sql-v-1s.htm#4 | |||
| 47
    
        smitti911 26.11.14✎ 00:06 | 
        внутреннее соединение и поменять таблицы местами - это помогло, спасибо.
 Подбор индекса для таблицы 1SJOURN: Ограничения: IDDOCDEF=; IDDOC=; Найдено в кэше Выбран индекс IDDOC: IDDOC Стоимость: 20 Подбор индекса для таблицы RA18284: Ограничения: SP18296[ПризнакДвижения]=; DEBKRED=; SP18285[Счет]=; IDDOC=; Упорядочить: SP18288[ТМЦ], SP18287[Склад], IDDOC, Найдено в кэше Выбран индекс IDLINE: IDDOC+STR(LINENO,4)+STR(ACTNO,6) Стоимость: 54 Подбор индекса для таблицы 1SJOURN: Ограничения: IDDOCDEF=; Найдено в кэше Выбран индекс DOCTYPE: IDDOCDEF+DTOS(DATE)+TIME+IDDOC Стоимость: 80 Подбор индекса для таблицы RA18284: Ограничения: SP18296[ПризнакДвижения]=; DEBKRED=; SP18285[Счет]=; Упорядочить: SP18288[ТМЦ], SP18287[Склад], IDDOC, Найдено в кэше Индекс не выбран. Стоимость: 9982 Подбор индекса для таблицы RA18284: Ограничения: SP18296[ПризнакДвижения]=; DEBKRED=; SP18285[Счет]=; IDDOC=; Найдено в кэше Выбран индекс IDLINE: IDDOC+STR(LINENO,4)+STR(ACTNO,6) Стоимость: 54 Подбор индекса для таблицы RA18284: Ограничения: SP18296[ПризнакДвижения]=; DEBKRED=; SP18285[Счет]=; IDDOC=; Найдено в кэше Выбран индекс IDLINE: IDDOC+STR(LINENO,4)+STR(ACTNO,6) Стоимость: 54 Может попробую еще временные таблицы | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |