Имя: Пароль:
1C
1C 7.7
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
Спасибо, что не дОжил...