v7: переделать запрос на прямой #587123


#0 by lamme
Есть запрос. Помогите передалть на прямой запрос.    Запрос=СоздатьОбъект("Запрос"); В итоге получается таблица Пытаюсь передалть на прямой запрос - знаний не хватет |SELECT  ПродажиОбороты.Товар [Товар $Справочник.Товары], ПродажиОбороты.КоличествоОборот , $ПродажиОбороты.Склад Затруднения 1. как указать колонку период=месяц 2. как указать что продажи нужны по скл1 и скл2
#0 by lamme
Есть запрос. Помогите передалть на прямой запрос.    Запрос=СоздатьОбъект("Запрос"); В итоге получается таблица Пытаюсь передалть на прямой запрос - знаний не хватет |SELECT  ПродажиОбороты.Товар [Товар $Справочник.Товары], ПродажиОбороты.КоличествоОборот , $ПродажиОбороты.Склад Затруднения 1. как указать колонку период=месяц 2. как указать что продажи нужны по скл1 и скл2
#1 by Aleksey
Прямой какой? 1SQlite, 1С++, или как?
#2 by lamme
1С++
#3 by lamme
с выводом итогов по месяцам разобрался |SELECT  ПродажиОбороты.Товар [Товар $Справочник.Товары], ПродажиОбороты.КоличествоОборот, ПродажиОбороты.Период |FROM $РегистрОбороты.Продажи(:НачДата~, :КонДата~ ,Месяц,,(Склад = :выбСкл) AND (Товар IN (SELECT Val From #Группа)),Товар,Количество) AS ПродажиОбороты как указать - что нужны колво продано1 при условии что склад  =  выбСкл1 и продано2 при условии что склад  =  выбСкл2 и
#4 by lamme
?
#5 by lamme
ну не делать же 2 запроса потом в какой то ТЗ объединять их
#6 by Дядя Васька
Так не?
#7 by Гефест
Кури конструкцию case-when-else Но лучше группируй по складу
#8 by lamme
тут вроде бы получиться что продажи смотрим или по выбСкл1 или по выбСкл2 проверю конечно .. но мучают сомнения
#9 by Дядя Васька
А, пардон... Ну тогда джойнить надо.
#10 by lamme
ну да .. в итоге получается таблица с колонками Товар, КолвоОборот, Месяц где в КолвоОборот - одновременно входят продажи по ВыбСкл1 и ВыбСкл2 а надо как то разделить эти 2 цифры по этим 2 складам
#11 by lamme
, а ткните пример - как это сделать а
#12 by DCKiller
#13 by lamme
ух ты .. прикольно .. а пардон - это в какую часть запросса вставлять
#14 by Дядя Васька
За синтаксис не ручаюсь, но смысл такой.
#15 by Дядя Васька
Ну в смысле так конечно:
#16 by lamme
а где вернее будет, или это все об одном и том же ?
#17 by Андрей_Андреич
Я один такой тупой? - Зачем группировка по "ПродажиОбороты.КоличествоОборот"? - Это yадо через Sum
#18 by lamme
щас попробую
#19 by lamme
тыкаюсь - как могу. поэтому - пардон за возможные ляпы
#20 by Дядя Васька
В Select, но не взлетит, если по обоим сразу выбирать через или он же тебе по складам не разобьет что по обоим продавалось, итог по обоим вернет вроде как.
#21 by Дядя Васька
Через CASE как-то так может получиться:
#22 by Дядя Васька
короче все равно вложенный
#23 by lamme
че то у меня не хотит :( грит - Incorrect syntax near the keyword 'ON'.
#24 by Дядя Васька
ну и в группировку там склад еще...
#25 by Дядя Васька
Я там со скобками намудрил походу. Тупо синтаксическая ошибка, года два на ++ не писал.
#26 by lamme
не хотит ругается на ON
#27 by Дядя Васька
Запятая явно не в тему опять же. Что-то такое. Отлаживай. Нагугли синтаксис INNER JOIN
#28 by ParaWiz
и кстати замени :КонДата~ на :КонДата~~ ... если нужны результаты включая весь день КонДата
#29 by Попытка1С
На самом деле надо так (:НачДата, :КонДата~,...) Группировки: Товар, Период, Склад. Продажи в sum Нужные склады укладываешь в список, Условие Склад in (Select val from #СпСклады) Все это хозяйство выгружаешь в индексированную таблицу, создаешь индексы по обходу и вперед.
#30 by Дядя Васька
Зачем обходить, когда можно сделать прямо в запросе?
#31 by Попытка1С
Можно сделать а можно и не делать это кому как.
#32 by Андрей_Андреич
#33 by Андрей_Андреич
Это вместо Case. Корявенько, конечно.
#34 by Попытка1С
Ну тогда уж Выборка.Товар
#35 by Андрей_Андреич
Согласен - на коленке за секунду сляпано - косяки запросто
#36 by DCKiller
Да уж, ну вы все и писаки :) Мне это сразу напомнило древний баян  про какой-то советсткий НИИ, в котором пытались математическими методами определить, сколько х..ев поместится в ведро. Раздуть из мухи такого слона - это только на мисте могут. Запрос простейший, а намудрили столько, что автор, по ходу, уже в ужасе рвет волосы у себя на попе, читая все это и повторяет про себя "Лучше бы я не спрашивал!.." :)
#37 by Андрей_Андреич
Понятно, что вариантов написания может быть много. А ТС лучше на тематический форум 1cpp вопросы задавать - здесь все 7.7 уже забыли и какашками кидаются
#38 by lamme
не - спросить то можно было а вот ответы .. пока понятно мало что - поэтому и не понятно
#39 by DCKiller
Может, сделаем уже вот хотя бы как-то вот так, а? "SELECT $СпрКлиенты.ID As Агент, РегПродажи.Товар, РегПродажи.Период, РегПродажи.Склад, THEN РегПродажи.КоличествоОборот ELSE 0 END) As ПроданоСкл1, THEN РегПродажи.КоличествоОборот ELSE 0 END) As ПроданоСкл2 FROM $РегистрОбороты.Продажи(:Нач~, :Кон~, Месяц, , Склад IN (SELECT val FROM #ВТСклады) AND Товар IN (SELECT val FROM #ВТТовары), (Товар, Склад), (Количество)) As РегПродажи INNER JOIN $Справочник.Контрагенты As СпрКлиенты ON СпрКлиенты.ID = РегПродажи.Клиент РегПродажи.Товар, РегПродажи.Склад, РегПродажи.Период, $СпрКлиенты.Агент" По крайней мере, хотя бы посмотришь, что получится...
#40 by lamme
спасибо получилось примерно вот так |SELECT   |ПродажиОбороты.Товар [Товар $Справочник.Товары], ПродажиОбороты.Период,ПродажиОбороты.Склад [Товар $Справочник.Склады], Надо еще проверить достоверность полученных цифр
#41 by Андрей_Андреич
Группировать надо только по товару и периоду
#42 by lamme
если убираю группировку по складу - начинает ругаться на Склады   Column 'ПродажиОбороты.Склад' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
#43 by ЧеловекДуши
Зачем так уродовать суммы :) Берд...
#44 by ЧеловекДуши
+ я насчет складов 1 - 2
#45 by ЧеловекДуши
+ Добавь группировку "Склад" и у тебя будет сумма по каждому складу.
#46 by Ёпрст
все правильно, склад есть в селект листе
#47 by ЧеловекДуши
+ в итоговую таблицу
#48 by lamme
в готовый запрос сможешь написать пока у меня работает корректно. понять не могу - что не верно
#49 by Ёпрст
см.
#50 by ЧеловекДуши
Сделай так Все ровно у тебя уже есть группировка по складам. А уже в отчете ты будешь раскидывать склады так, как тебе надо.
#51 by ЧеловекДуши
+ Строку " , ПродажиОбороты.КоличествоОборот" из группировки убери!
#52 by ЧеловекДуши
У тебя плохое представление того, а что же ты хочешь получить и для чего это было сделано в старом отчете :)
#53 by Ёпрст
в запросе выкини из селекта Склад и из гроупбай тоже - получишь сабж.
#54 by lamme
неа. я так уже пробовал. так получаться 4 колонки Товар*Период*Склад*КолвоПродано а надо чтобы КолвоПродано в одном запрсое считало по разным складам. т.е. - дает данные Товар*Период*Склад(по идее не нужная колонка)*ПроданоСклад1*ПроданоСклад2
#55 by ЧеловекДуши
Если слушать то делай так |SELECT    ,SUM(CASE WHEN ПродажиОбороты.Склад = :выбСкл1 THEN ПродажиОбороты.КоличествоОборот ELSE 0 END) As ПроданоСкл1  ,SUM(CASE WHEN ПродажиОбороты.Склад = :выбСкл2  THEN ПродажиОбороты.КоличествоОборот ELSE 0 END) As ПроданоСкл2 ... // ...х... - это номер склада по списку...  ,SUM(CASE WHEN ПродажиОбороты.Склад = :выбСкл(...х...)  THEN ПродажиОбороты.КоличествоОборот ELSE 0 END) As ПроданоСкл(...х...) ... |
#56 by Дядя Васька
Не совсем корректно, у тебя в каждой строке только один склад. По условиям задачи вроде как если товар присутствует на обоих складах, то это надо в одной строке вывести. Подобный вариант еще в предложил, Select From Select нужен.
#57 by lamme
ну я так и сделал в
#58 by Ёпрст
че курим то ?
#59 by lamme
эт верно ... :(
#60 by Ёпрст
#61 by Дядя Васька
так как-то будет:
#62 by ЧеловекДуши
Рекомендую вместо периода воспользоваться этой функцией на SQL ФункПР - Это имя твоей фугкции @len1 - Это строка даты, в виде ггггммдд, как по DATE_TIME_IDDOC @len2 - Это папраметр для получения периода На выходе этой функции ты получаешь тип дата        |create FUNCTION  "+ФункПР+"( @len1 varchar, @len2 int) RETURNS datetime
#63 by Дядя Васька
+ Ну и период в первый select конечно
#64 by ЧеловекДуши
Ты группировку посмотри, ты лишние сделал
#65 by ЧеловекДуши
+ В начале запроса поставь set LANGUAGE russian А то дата будет неправильная :)
#66 by Дядя Васька
Да пофик, Продажи с группировкой месяц все равно по одному количеству в месяц выдаст. По смыслу они там вообще не нужны никакие, результат уже сгруппирован, разве что синтаксис такой что требует. Но проверить не на чем.
#67 by ЧеловекДуши
Ага... умник... Отчет делается за год...
#68 by ЧеловекДуши
Если ты недогнал.
#69 by ЧеловекДуши
+ Он там суммы группирует :)
#70 by Дядя Васька
Да не, это ты не догнал. Я про суммы и говорю. Их по одной на месяц получается, в функции периодика задана. Складывать их не надо. Ему именно такой результат и нужен. С группировкой по сумме или без нее он будет одинаковый.
#71 by Андрей_Андреич
Но методически неверно приучать писать таким образом. Человек же тебе верит...
#72 by Mikeware
Такое ощущение, что все "после корпоратива", с больной головой...
#73 by Дядя Васька
Методически там вообще GROUP BY не нужен, о чем оговорился :) Правда есть вероятность что нужен синтаксически. А по смыслу в группировке по остальным полям толку столько же, сколько и по числовому в данном случае...
#74 by Mikeware
Он там нужен и методически, и синтаксически. Только не по складам.
#75 by Дядя Васька
В функции продаже в параметрах уже указан, период Месяц, группировка (Склад,Товар), условия по оным и что в разрезе их нужно взять количество. Дальнейшая группировка просто повторяет то что уже передали в параметрах. Никакой детализации по лишним измерениям она вернуть не должна. Так зачем повторяться? Ничего не меняет же в результатах.
#76 by Ёпрст
укуренный ? Ты запрос в хоть видел, какой нужен в итоге ? :))
#77 by Дядя Васька
Даже два варианта написал как это сделать :) В Например. Там да, нужна, только в верхнем запросе, а не в том что с функцией.
#78 by Андрей_Андреич
Пора лепить голосовалку - кто больше укуренный :) Автора жалко - запросик-то и правда плевый.
#79 by Дядя Васька
т.е. правильно как-то так. Там-то просто копипастил:
#80 by Андрей_Андреич
Наконец-то
#81 by Андрей_Андреич
Период забыл?
#82 by Дядя Васька
Забыл. В оговаривался уже по этому поводу. Ну это мелочи, суммы верные и так.
#83 by Дядя Васька
А наконец-то было в , тут уже вариант с извращениями ))
#84 by trad
а на хуа подзапрос? даже не учитывая этого и периода, еще есть как минимум одна грубейшая ошибка.
#85 by Андрей_Андреич
:НачДата~ хвостик неправильно загнут?
#86 by trad
ага
#87 by trad
и если с подзапросом, то этот запрос не рабочий по причине алиасов
#88 by viktor_vv
Ну  и я встряну :). Это только мне кажется, что :НачДата~ надо заменить на :НачДата , а то за первый день периодв данные не попадут.
#89 by lamme
Кстати .. с утра фантазия .. почти эротического плана возникла .. а есть какая ниб штуковина или механизм .. который брал бы запрос из и легким движением правого пальца левой руки - превращался бы в прямой запрос , например как в ?
#90 by Попытка1С
Вообще есть конструктор 1С++ если что. Он конечно из ничего не сделает, но поможет для начала точно.
#91 by lamme
пользовался. видел. там надо самому делать запрос. я ж про другое ... есть обыкновенный запрос - оппа - готов прямой.
#92 by SnarkHunter
А ключ от квартиры нужен? От той, в которой деньги лежат?
#93 by lamme
не ключ не .. квартира - да, можно. а ключ ... как том мало
#94 by Дядя Васька
А как без подзапроса чтобы не джойнить? Не сгруппируешь как надо.
#95 by Андрей_Андреич
#96 by Андрей_Андреич
|, ПоСкладм.Период - ошибка надо ПоСкладАм
#97 by VladZ
А если у тебя со временем появится третий склад - будешь запрос переписывать?
#98 by Mikeware
Да его и динамически сформировать - не проблема...
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С