v7: 1С++ Запрос по регистру ПартииНаличие #623263


#0 by Pro100
Задача: Выбрать все продажи товаров(в том числе и возвраты) от определенного поставщика за определенный период В 1С запрос следующий: Что-то прямой запрос показывается все остатки и приход, расход совсем не такие какие выбрала 1С своим запросом. Гуру прямых запросов подскажите пожалуйста, где ошибся в прямом запросе? вот прямой запрос: FROM $Регистр.ПартииНаличие AS ПартииНаличие With (NOLOCK)        ДвиженияИГраницыПериода,        INNER JOIN $Регистр.ПартииНаличие AS ПартииНаличие With (NOLOCK) ON $ПартииНаличие.Фирма = Фирма AND $ПартииНаличие.Номенклатура = Номенклатура AND $ПартииНаличие.Партия = Партия        INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON ПартииНаличие.IDDOC = Журнал.IDDOC        INNER JOIN $Справочник.Партии AS Партии With (NOLOCK) ON $ПартииНаличие.Партия = Партии.ID,        Количество) AS ПартииНаличиеОстаткиОбороты ON $ПартииНаличие.Фирма = ПартииНаличиеОстаткиОбороты.Фирма AND $ПартииНаличие.Номенклатура = ПартииНаличиеОстаткиОбороты.Номенклатура AND $ПартииНаличие.Партия = ПартииНаличиеОстаткиОбороты.Партия    INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON ПартииНаличие.IDDOC = Журнал.IDDOC    INNER JOIN $Справочник.Партии AS Партии With (NOLOCK) ON $ПартииНаличие.Партия = Партии.ID WHERE ($Партии.Поставщик = :ВыбПоставщик) GROUP BY ПартииНаличиеОстаткиОбороты.Период
#1 by AleksAnt
Возможно надо :КонДата заменить на :КонДата~
#2 by GLazNik
Кривой запрос. $РегистрОстаткиОбороты.ПартииНаличие возвращает уже просуммированные данные. Так ты еще этот результат соединяешь с $Регистр.ПартииНаличие в результате чего у тебя просуммированные записи размножаются, а потом еще и суммируешь. И вообще я не люблю $РегистрОстаткиОбороты
#3 by Светлый Гений
А если мы выбираем продажи, зачем нам остатки?
#4 by GLazNik
+ Если на то пошло, приход и расход бери из $Регистр.ПартииНаличие. Начальный и конечный остаток из $РегистрОстаткиОбороты.ПартииНаличие, но убери джойны в параметрах виртуальных таблиц и вместо агрегатных функций sum для остатков используй, например max
#5 by Светлый Гений
Лучше тогда делать по регистру Продажи
#6 by Pro100
Не помогает, результат тот же. Этот регистр $РегистрОстаткиОбороты, нужен чтобы получить Нач.Остаток, приход, расход, кон.остаток.
#7 by Ёпрст
какая то каша
#8 by GLazNik
я понимаю зачем он нужен. Но ты его используешь неправильно. И я понимаю зачем ты используешь $Регистр.ПартииНаличие (что б получить движения в разрезе кодов операций) Скорее всего задача стоит шире: переделать существующий функционал (отчет) на прямые запросы.
#9 by GLazNik
+100500 :)
#10 by Pro100
$Регистр.ПартииНаличие использую чтобы получить Документ и КодОперации. Ну по поводу отчета, да слишком долго формируется и принял решение переделать на прямые запросы, вот и пытаюсь получить результат, иначе оставил бы запрос 1С и не спрашивал бы тут.
#11 by Pro100
В чем именно каша то? Выбираю Документ и КодОперации из $Регистр.ПартииНаличие, чтобы нормально документ показывался присоединяю журнал, чтобы сделать отбор по поставщику присоединяю справочник партий и оттуда выбираю поставщика. также соединяю с $РегистрОстаткиОбороты.ПартииНаличие чтобы получить цифры по нач.остаток, приход, расход, кон.остаток
#12 by GLazNik
ты вот убери группировку, и посмотри какую ерунду возвращает у тебя запрос. Возможно сам поймешь что не так.
#13 by Светлый Гений
А как ты думаешь, что вернет тебе соединение таблиц $Регистр.ПартииНаличие и $РегистрОстаткиОбороты.ПартииНаличие?
#14 by Ёпрст
да во всём.. особенно, в нелепых соединениях унутри ВТ
#15 by Pro100
что-то при соединении этих двух таблиц вернул цифры какие-то нереальные. Поэтому и прошу подсказать, как можно соединить, чтобы получить данные.
#16 by Светлый Гений
Вот и я о том же, что надо разобраться сначала на простых примерах, а потом уже огород городить
#17 by GLazNik
Без группировки скорее всего не совсем нереальные цифры. Скорее количество цифр нереальное :) Пойди от простого к сложному. Сперва получи только движения в нужном тебе виде. Затем только остатки. Потом уже соединяй эти наборы данных.
#18 by Pro100
Щас буду пробовать ))
#19 by Pro100
Пробую по шагам. Делаю запрос:        ДвиженияИГраницыПериода,        INNER JOIN $Справочник.Партии AS Партии With (NOLOCK) ON Партия = Партии.ID,        Количество) AS ПартииНаличиеОстаткиОбороты ORDER BY ПартииНаличиеОстаткиОбороты.Период Данные верные показываются, например расход проверил по одной позиции номенклатуры, все верно. Вопрос следующий: Что присоединить к этому запросу, чтобы увидеть документ который сделал движение?
#20 by GLazNik
Если тебе нужен КодОперации то РегистрОстаткиОбороты не подойдет. Нужно приход и расход получать из $Регистр.ПартииНаличие. И правильно его сгруппировать.
#21 by Ёпрст
не надо ничего присоединять - всё и так есть. Задай нужную периодичность, конкретно Документ и наслаждайся
#22 by GLazNik
а разве виртуальные таблицы научились выдавать реквизиты (КодОперации) регистров?
#23 by Ёпрст
реквизиты - нет, документ движения - да
#24 by GLazNik
ну как бы в изначальном запросе есть Группировка КодОперации;
#25 by Pro100
Как получить из $Регистр.ПартииНаличие приход и расход? если там только количество есть и все... При периодичности документ появляется только позиция документа и вид документа, позиция документа - это что-то совсем не сам документ...
#26 by GLazNik
там еще есть DEBKRED
#27 by Pro100
Такс, с этим понял смысл. Но встает вопрос как за определенный период выбрать из этой таблицы? Ведь без периода, он мне всю таблицу попытается вывести, а мне это совсем не нужно
#28 by Ёпрст
позиция документа и вид документа - это и есть сам документ , если что
#29 by Ёпрст
Если че, все ПРОДАЖИ и ВОЗВРАТЫ и Поставщики есть в другом, "правильном" регистре - Продажи.
#30 by GLazNik
позицию документа и вид документа можно легко превратить в документ Примерно так: right(Таб.ПозицияДокумента) as [$Документ Док], Таб.ВидДокумента as Док_вид если у регистра установлен признак «Быстрая обработка движений», то можно повесить условие на DATE_TIME_IDDOC. Иначе соединяем с 1sjourn
#31 by GLazNik
+ right(Таб.ПозицияДокумента,9)
#32 by Pro100
Не пойму как в данном запросе можно вид документа указать? Ругается, что не найдено дополнительное типизирующее поле для Док, ведь вид документа же следом идет        ДвиженияИГраницыПериода,        INNER JOIN $Справочник.Партии AS Партии With (NOLOCK) ON Партия = Партии.ID,
#33 by GLazNik
Char - Идентификатор объекта, кроме того, в наборе данных должна находиться колонка с именем составленным из имени этой колонки и суффикса {_вид|_kind} (чувствительно к регистру), в которой должны содержаться идентификаторы видов документов. Тип колонки SQL: int, DBF: char.
#34 by Pro100
Заработало, спасибо! Вот только как теперь КодОперации вытащить? )))
#35 by GLazNik
только через таблицу движений ($Регистр.ПартииНаличие)
#36 by Pro100
Все, вроде получилось, через вложенный подзапрос ))
#37 by Ёпрст
см. 29
#38 by Ёпрст
а в партиях - удачи с вырезанием списаний/перемещени и прочего
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

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