|
v7: Помогите с прямым запросом | ☑ | ||
---|---|---|---|---|
0
Sk0rp
25.01.12
✎
16:18
|
Черный запрос выглядит так:
ТекстЗапроса = " |Период с НачДата по ПоДату; |Без Итогов; | |Номенклатура = Регистр.ПартииТоваров.Товар; |Покупатель = Регистр.ПартииТоваров.ТекущийДокумент.РасходнаяНакладная.Клиент; | |ПродСтоимость = Регистр.ПартииТоваров.Оборот; |Количество = Регистр.ПартииТоваров.ОстатокТовара; |КодОперации = Регистр.ПартииТоваров.КодОперации; | |Функция СуммаОбщая = Расход(ПродСтоимость); |Функция КоличествоОбщее = Расход(Количество); | |Группировка Номенклатура без упорядочивания без групп; | |Условие(Покупатель = ВыбПокупатель); |Условие(Номенклатура в Фильтр); |Условие(КодОперации = ПродажаТовара); |"; Надо переписать на прямой запрос, т.к. в SQL базе он чертовски медленный (в файловой работает в сотни раз быстрее) Я не большой специалист по прямым запросам и проблема у меня вот в чем. В таблице "$Регистр.ПартииТоваров" есть ссылка на документ движения, но нет поля ОстатокТовараРасход, которое есть в виртуальной таблице $РегистрОбороты.ПартииТоваров, но там нет ссылки на документ. Как мне и с таблицей документов пересечь и расход за период получить? Правильнее всего было бы использовать для такой задачи оборотный регистр Продажи, но его в этой конфигурации нет. |
|||
1
Ёпрст
25.01.12
✎
16:21
|
(0) ну и каша в голове..
Остатка в виртуальной табличке РегистрОбороты тоже нет, если что |
|||
2
Ёпрст
25.01.12
✎
16:21
|
+1 там только обороты
|
|||
3
Sk0rp
25.01.12
✎
16:22
|
(2) Так мне только оборот и нужен, я про остаток нигде не писал.
|
|||
4
Ёпрст
25.01.12
✎
16:22
|
+2 и там есть документ движения регистра при указании периодичности Документ
|
|||
5
Ёпрст
25.01.12
✎
16:23
|
(3) да вижу уже..
И нафига ресурс регистра обзывать ОстатокТовара ? |
|||
6
Ёпрст
25.01.12
✎
16:24
|
А по теме, в виртуальной табличке РегистрОбороты задай периодичность Документ и имей свой документ движения через ВидДокумента + райт(ПозицияДокумента,9)
|
|||
7
Sk0rp
25.01.12
✎
16:25
|
(5) Это типовой регистр из ТиС 8.7
|
|||
8
Sk0rp
25.01.12
✎
16:31
|
(6) Спасибо. Нашел.
|
|||
9
Sk0rp
25.01.12
✎
16:39
|
В догонку: по виртульной таблице оборотов можно сумму по реквизиту регистра получить?
Регистр.ПартииТоваров.Оборот - это не ресурс, а реквизит. А то конструктор запросов из OpenConf Не дает его в запрос добавить. |
|||
10
viktor_vv
25.01.12
✎
16:44
|
(9) Неа.
|
|||
11
Ёпрст
25.01.12
✎
16:46
|
(9) нет.
для реквизитов регистра придётся руками писать из таблички движения регистра - Регистр.ИмяРегистра |
|||
12
viktor_vv
25.01.12
✎
16:46
|
Так если тебе только движения, тяни не из виртуальной таблицы, а из реальной таблицы движений регистра, там и до реквизита достучишься, может чуть медленне будет.
|
|||
13
Sk0rp
25.01.12
✎
16:50
|
(12) Так с сделал сначала, не понял как только Расход выбрать?
|
|||
14
viktor_vv
25.01.12
✎
16:55
|
РегОст.debkred - 0 приход, 1 расход.
|
|||
15
Ёпрст
25.01.12
✎
16:55
|
(13) :))
вот что значит конструкторы всякие..они сушат мозг. ЗЫ: смотреть флаг debkred регистра, 1 - расход, 0- приход |
|||
16
Sk0rp
25.01.12
✎
16:59
|
(14), (15) ОК, спасибо.
|
|||
17
Sk0rp
25.01.12
✎
18:18
|
Что-то я все равно не понимаю:
|SELECT $ПартииТоваров.Товар [Товар $Справочник.Номенклатура] | , Sum($ПартииТоваров.ПродСтоимость) СуммаПродажи | , Sum($ПартииТоваров.ОстатокТовара) Продано |FROM $Регистр.ПартииТоваров AS ПартииТоваров With (NOLOCK) | INNER JOIN $Документ.РасходнаяНакладная AS РасходнаяНакладная With (NOLOCK) ON ПартииТоваров.IDDOC = РасходнаяНакладная.IDDOC | INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON ПартииТоваров.IDDOC = Журнал.IDDOC |WHERE ($ПартииТоваров.КодОперации = :ПродажаТовара) | AND ($ПартииТоваров.Товар = :ВыбТовар) | AND ($РасходнаяНакладная.Клиент = :ВыбПокупатель) | AND (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~) |GROUP BY $ПартииТоваров.Товар В "Продано" правильный оборот, в "СуммаПродажи" ноль. Не хочет сумму по реквизиту считать. Что не так делаю? |
|||
18
viktor_vv
25.01.12
✎
18:25
|
А такой выполни, че покажет.
|SELECT $ПартииТоваров.Товар [Товар $Справочник.Номенклатура] | ,$ПартииТоваров.ПродСтоимость СуммаПродажи | ,$ПартииТоваров.ОстатокТовара Продано |FROM $Регистр.ПартииТоваров AS ПартииТоваров With (NOLOCK) | INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON ПартииТоваров.IDDOC = Журнал.IDDOC |WHERE ($ПартииТоваров.КодОперации = :ПродажаТовара) | AND ($ПартииТоваров.Товар = :ВыбТовар) | AND (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~) |
|||
19
Sk0rp
25.01.12
✎
18:30
|
(18) Кучу строк с одинаковым товаром, везде Продано заполнено, СуммаПродажи везде нули.
Реквизит в движения точно заполнен, т.к. черным запросом все выводится. |
|||
20
Sk0rp
25.01.12
✎
18:39
|
В SQL это так приходит:
SELECT ПартииТоваров.sp1131 [Товар $Справочник.Номенклатура] ,ПартииТоваров.sp2799 СуммаПродажи ,ПартииТоваров.sp1133 Продано FROM ra1130 AS ПартииТоваров With (NOLOCK) INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON ПартииТоваров.IDDOC = Журнал.IDDOC WHERE (ПартииТоваров.sp3027 = 'П') AND (ПартииТоваров.sp1131 = ' PYI ') AND (Журнал.DATE_TIME_IDDOC BETWEEN '20110330' AND '20120124Z') |
|||
21
viktor_vv
25.01.12
✎
18:40
|
Оставь только
|WHERE | ($ПартииТоваров.Товар = :ВыбТовар) | AND (Журнал.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~) И в селект добавь |SELECT $ПартииТоваров.Товар [Товар $Справочник.Номенклатура] | ,$ПартииТоваров.КодОпреации as [КодОперации $Перечисление.КодыОпераций] | ,$ПартииТоваров.ПродСтоимость СуммаПродажи И смотри по твоему коду есть суммы заполненые. |
|||
22
viktor_vv
25.01.12
✎
18:43
|
Блин, ну ты даешь. Вот это сравни
|ПродСтоимость = Регистр.ПартииТоваров.Оборот; и $ПартииТоваров.ПродСтоимость СуммаПродажи |
|||
23
viktor_vv
25.01.12
✎
18:44
|
Самый прикол, что у тебя есть или измеренеие или реквизит ПродСтоимость, поэтому ошибка не выходит, но он не заполнен. А черным запросом ты берешь из "Оборот".
|
|||
24
Sk0rp
25.01.12
✎
18:46
|
А-А-А-А-А-А !!!!!
все точно! Огромное спасибо |
|||
25
monsterZE
26.01.12
✎
17:09
|
Чтобы не плодить тем, подниму =) как выдернуть сумму из документа?
ТекстЗапроса = " |SELECT | Жур.IDDoc as [Док $Документ], | Жур.IDDocDef as Док_вид, | $Док.Вид as [ВидР $Перечисление.ВидРасходной] // | SUM($ДокС.Сумма) as Сумма |FROM | _1SJourn as Жур |INNER JOIN | $Документ.РасходнаяНОФ as Док ON Док.IDDoc = Жур.IDDoc // |INNER JOIN // | $ДокументСтроки.РасходнаяНОФ as ДокС ON ДокС.IDDoc = Жур.IDDoc |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND | Жур.IDDocDef = $ВидДокумента.РасходнаяНОФ AND | $Док.Вид = $Перечисление.ВидРасходной.ДоплатаЗаНал"; |
|||
26
Ёпрст
26.01.12
✎
17:11
|
если сумма - реквизит шапки - взять из таблички dh
если сумма - реквизит табличной части - проссуммировать из таблички dt если сумма - реквизит табличной части с галкой итог по колонке - взять с таблички шапки dh |
|||
27
monsterZE
26.01.12
✎
17:12
|
ну вобще она с галкой итог
выше, это я попробывал просуммировать =) |
|||
28
monsterZE
26.01.12
✎
17:15
|
вобщем прекрасно взялось как реквизит шапки, а как правильно, если надо просуммировать?
|
|||
29
Ёпрст
26.01.12
✎
17:16
|
(28) ну, как у тебя в коде, расскоменти и привет
|
|||
30
Ёпрст
26.01.12
✎
17:18
|
только еще group by нужен..
|
|||
31
Ёпрст
26.01.12
✎
17:18
|
по iddoc
|
|||
32
monsterZE
26.01.12
✎
17:48
|
Ёпрст4, спасибо, что всего оперативно помогаешь (отвечаешь)! =)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |