|
v7: Связать таблицы RG и RA | ☑ | ||
---|---|---|---|---|
0
Pr0gLamer
25.05.12
✎
19:06
|
Вечер добрый.
Стоит задача выгрузить в Excel данные из таблиц регистра ПартииТоваров (RG277 и RA277) так,чтобы получить начальный остаток,конечный остаток,расход,приход с детализацией по всем возможным полям. Я нашёл в инете статью и построил запрос,который прекрасно с этим справляется, если не требуется брать поля из таблицы _1SJOURN Вот собственно запрос.Подскажите как поступить,чтобы можно было связать RG277 и RA277,не дублируя строк в выборке? Declare @PERIODR DateTime Declare @PERIODN Char(8) Declare @PERIODK Char(8) Declare @PERIODN2 Char(8) Declare @PERIODK2 Char(8) -- присвоение переменным значений SET @PERIODR = Convert(DateTime,'20120101',112) SET @PERIODN = '20120101' SET @PERIODK = '20120105' SET @PERIODK2 = '20120331' SELECT Staff.DESCR As Товар, Place.DESCR As Склад, Firm.DESCR As Фирма, --Avtor.DESCR As Автор, --Контрагенты.DESCR As Контрагент, --Направления.DESCR As Направление, --SUBSTRING(Док.DATE_TIME_IDDOC,0,9) As Дата, Filial.DESCR As Филиал, --Sender.DESCR As Поставщик, --Postavka.DOCNO As Поставка, --IncDoc.DOCNO As ПрихДокумент, --Док.DOCNO As Документ, --TMP.ДокИд As Документ, SUM(TMP.ПрибыльДоллар) As ПрибДоллар, SUM(TMP.ОборотДоллар) As ОборДоллар, SUM(TMP.НачОст) As НачОст, SUM(TMP.Приход) As Приход, SUM(TMP.Расход) As Расход, SUM(TMP.НачОст + TMP.Приход - TMP.Расход) As КонОст FROM ( SELECT TabRegOst.SP279 As Товар, TabRegOst.SP3870 AS Склад, TabRegOst.SP278 As Фирма, TabRegOst.SP3946 As Филиал, --TabRegOst.SP282 As Поставщик, --TabRegOst.SP283 As Поставка, --TabRegOst.SP284 As ПрихДокумент, --NULL AS ДокИД, TabRegOst.SP285 As НачОст, 0 As ОборотДоллар, 0 As ПрибыльДоллар, 0 As Приход, 0 As Расход FROM test_perf.dbo.RG277 As TabRegOst WHERE TabRegOst.PERIOD = Convert(DateTime,'20120101',112) UNION ALL SELECT TabReg.SP279 As Товар, TabReg.SP3870 AS Склад, TabReg.SP278 As Фирма, TabReg.SP3946 As Филиал, --TabReg.SP282 As Поставщик, --TabReg.SP283 As Поставка, --TabReg.SP284 As ПрихДокумент, --NULL AS ДокИД, (TabReg.SP285 * ((TabReg.DEBKRED+1)%2)) - (TabReg.SP285 * TabReg.DEBKRED) As НачОст, 0 As ОборотДоллар, 0 As ПрибыльДоллар, 0 As Приход, 0 As Расход FROM test_perf.dbo.RA277 As TabReg INNER JOIN test_perf.dbo._1SJOURN As TabJ ON (TabReg.IDDOC = TabJ.IDDOC) WHERE TabJ.DATE_TIME_IDDOC >= '20120101' AND TabJ.DATE_TIME_IDDOC < '20120105' UNION ALL SELECT TabReg2.SP279 As Товар, TabReg2.SP3870 AS Склад, TabReg2.SP278 As Фирма, TabReg2.SP3946 As Филиал, --TabReg2.SP282 As Поставщик, --TabReg2.SP283 As Поставка, --TabReg2.SP284 As ПрихДокумент, -- TabReg2.IDDOC AS ДокИД, 0 As НачОст, TabReg2.SP3627 As ОборотДоллар, TabReg2.SP3623 As ПрибыльДоллар, (TabReg2.SP285 * ((TabReg2.DEBKRED+1)%2)) As Приход, (TabReg2.SP285 * TabReg2.DEBKRED) As Расход FROM test_perf.dbo.RA277 As TabReg2 INNER JOIN test_perf.dbo._1SJOURN As TabJ ON (TabReg2.IDDOC = TabJ.IDDOC) WHERE TabJ.DATE_TIME_IDDOC >= '20120105' AND TabJ.DATE_TIME_IDDOC < '20120331' ) AS TMP --Товар INNER JOIN test_perf.dbo.SC135 AS Staff ON TMP.Товар = Staff.ID --Склад INNER JOIN test_perf.dbo.SC129 As Place ON Place.ID = SUBSTRING(TMP.Склад,5,9) --Фирма(пустые не учитывам никогда) INNER JOIN test_perf.dbo.SC407 As Firm ON Firm.ID = TMP.Фирма --Филиал INNER JOIN test_perf.dbo.SC3896 As Filial ON Filial.ID = TMP.Филиал WHERE -- TabRegOst.PERIOD = '20120101' Staff.PARENTID = ' 2Y0S ' GROUP BY --Док.DATE_TIME_IDDOC, Staff.DESCR, --Контрагенты.DESCR, Place.DESCR, Firm.DESCR, Filial.DESCR --TMP.ДокИд, --Док.DOCNO, --Avtor.DESCR, --Направления.DESCR --TMP.Автор --Sender.DESCR, --Postavka.DOCNO, --IncDoc.DOCNO HAVING (SUM(TMP.НачОст) > 0) OR (SUM(TMP.Приход) > 0) OR (SUM(TMP.Расход) > 0) OR (SUM(TMP.НачОст + TMP.Приход - TMP.Расход) > 0) ORDER BY Staff.DESCR, --Sender.DESCR, Place.DESCR, Firm.DESCR, --Postavka.DOCNO, Filial.DESCR --IncDoc.DOCNO |
|||
1
YouAreEmpty
25.05.12
✎
19:11
|
(0) епт.. это и есть те самые прямые запросы в 7.7?
|
|||
2
mehfk
25.05.12
✎
19:14
|
Это писец, пилять, прочти "эффективное использование ВК 1C++" Толи Ситникова
И какого рожна вот эти строки "--TMP.ДокИд," - типа чтобы участники форума запутывались? |
|||
3
mehfk
25.05.12
✎
19:17
|
(0) В качестве PR, от вас демобаза (или реальная база) + внятное тз + 5000 руб = завтра результат.
|
|||
4
Джинн
25.05.12
✎
19:21
|
> Стоит задача выгрузить в Excel данные из таблиц регистра ПартииТоваров (RG277 и RA277) так,чтобы получить начальный остаток,конечный остаток,расход,приход с детализацией по всем возможным полям.
Рассказываю - отчет Ведомость по партиям, кнопка Сформировать, Файл-> Сохранить как... |
|||
5
Злопчинский
25.05.12
✎
19:38
|
(4) это для понимающих... а то там параллельно Измерению "Партия" есть измерения "датаПартии" и "ЦенаПрод" - так что кошерным ответом будет наверное использование универсального отчета по регистру...
. (4) ждем вопроса по типу "не дождлся пока сохранит".. ;-) |
|||
6
Pr0gLamer
28.05.12
✎
10:53
|
Перефразирую,ибо сам понимаю,что спросил непонятно.Вот структура таблицы RG277.Как мне её свзяать с таблицей _1SJOURN?
F=PERIOD |Period Registr |D |0 |0 F=SP278 |(P)Фирма |C |9 |0 F=SP3946 |(P)Филиал |C |9 |0 F=SP279 |(P)Товар |C |9 |0 F=SP280 |(P)Статус |C |1 |0 F=SP3870 |(P)МестоХранения |C |13 |0 F=SP282 |(P)Поставщик |C |9 |0 F=SP283 |(P)Поставка |C |13 |0 F=SP284 |(P)ПрихДокумент |C |13 |0 F=SP285 |(P)ОстатокТовара |N |14 |5 F=SP286 |(P)Стоимость |N |18 |5 F=SP287 |(P)ПродСтоимость |N |18 |5 F=SP288 |(P)НДС |N |18 |5 |
|||
7
Mikeware
28.05.12
✎
10:56
|
(6) RG - остатки. Journ - документы. Как ты хочешь связать остатки с документами???
зы. открой для себя 1с++ |
|||
8
nicxxx
28.05.12
✎
10:58
|
можно связать RA227:
from RA227 inner join 1sjourn as j on j.iddoc = ra227.iddoc |
|||
9
Ёпрст
28.05.12
✎
11:02
|
(0)
Нихрена не понял, о каком дублировании идёт речь и что ты хочешь вообще (8) это у него уже есть в запросе. |
|||
10
nicxxx
28.05.12
✎
11:03
|
(9) запрос не читал, много букв
|
|||
11
Pr0gLamer
28.05.12
✎
11:08
|
нужен начальный остаток на месяц(из таблицы RG277) и iddoc(из таблицы RA277).В RG277 нет поля iddoc и я не могу сделать UNION ALL
|
|||
12
Ёпрст
28.05.12
✎
11:21
|
(11) :)))
select null Док from RG277 union all select iddoc from RA277 |
|||
13
Pr0gLamer
28.05.12
✎
11:25
|
если делать так то записи будут дублироваться.Хотелось бы извратиться так,чтобы в (12) вместо null возвращался документ такой же как в RA277
|
|||
14
Ёпрст
28.05.12
✎
11:26
|
(13) наркоман шо ле ?
Хоть понимаешь что в RG и в RA хранится ? |
|||
15
mikecool
28.05.12
✎
11:26
|
(13) откуда в остатках документы движений?
|
|||
16
Ёпрст
28.05.12
✎
11:27
|
и это, ничего там дублироваться не будет, если че.. в group by нужно всего лишь будет добавить документ
|
|||
17
Pr0gLamer
28.05.12
✎
11:29
|
получится что в одной строке остатки,где документ null будут остатки,в другой строке где не null будут расход и приход.
|
|||
18
Mikeware
28.05.12
✎
11:31
|
(17) Ну и группируй по номнклатуре.
а вообще, открой для себя виртуальную таблицу ОстаткиОбороты. |
|||
19
Ёпрст
28.05.12
✎
11:31
|
(17) и ?
|
|||
20
Pr0gLamer
28.05.12
✎
11:32
|
(19) необходимо чтобы была одна строка
|
|||
21
Ёпрст
28.05.12
✎
11:33
|
(20) болеем ?
Как ты себе представляешь остаток по документу движения регистра ? |
|||
22
Pr0gLamer
28.05.12
✎
11:42
|
необходимо показать в таком виде
НачОст | Расход Документом | Приход документом | КонОст |
|||
23
Mikeware
28.05.12
✎
11:44
|
(22) тогда RG тут совершенно не к месту...
|
|||
24
dk
28.05.12
✎
11:47
|
(22) фильтров нема?
тогда тупо выгрузи движения и остаток на 1-ю строку а начост и коност пропиши формулами в экселе |
|||
25
Pr0gLamer
28.05.12
✎
11:48
|
у меня должна быть сводная таблица в идеале
|
|||
26
stix2010
28.05.12
✎
11:48
|
(0) жестоко так, в Exel,у меня в справочнике номенклатуры 80 тыс. позиций
|
|||
27
Pr0gLamer
28.05.12
✎
18:25
|
спасибо всем.В итоге уговорил составителя ТЗ сделать по-человечески =)
|
|||
28
SnarkHunter
28.05.12
✎
18:27
|
Спасибо, что не дОжил...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |