Skip to content

Instantly share code, notes, and snippets.

@MikeRzhevsky
Created February 22, 2022 11:49
Show Gist options
  • Save MikeRzhevsky/e68c2c66df9a472331cd3de09a68e92f to your computer and use it in GitHub Desktop.
Save MikeRzhevsky/e68c2c66df9a472331cd3de09a68e92f to your computer and use it in GitHub Desktop.
{{ config(
as_columnstore=false
, post_hook=["
{{ create_nonclustered_index( ['Товар']) }}
{{ create_nonclustered_index( ['СкладКуда']) }}
{{ create_nonclustered_index( ['СкладОткуда']) }}
"]
)
}}
{% set start_date = '20210101' %}
with СкладКуда as (
select Регистратор, Склад as СклКуда, max(whn.Наименование) as КудаНаименование, Товар as Товар, sum(ОстатокТовара) as КолКуда,
Период
from {{ source('1c' , 'РегистрНакопления.ОстаткиТоваров') }}
left join {{ source('1c' , 'Справочник.МестаХранения') }} whn on whn.Ссылка = Склад
where ТипДвижения = 0 and Период > '{{start_date}}'
group by Регистратор,Склад,Товар, Период
),
СкладОткуда as (
select Регистратор, Склад as СклОткуда, max(whn.Наименование) as ОткудаНаименование, Товар as Товар, sum(ОстатокТовара) as КолОткуда,
Период
from {{ source('1c' , 'РегистрНакопления.ОстаткиТоваров') }}
left join {{ source('1c' , 'Справочник.МестаХранения') }} whn on whn.Ссылка = Склад
where ТипДвижения = 1 and Период > '{{start_date}}'
group by Регистратор,Склад,Товар,Период
)
select {{ BinaryToChar( 'куда.Товар' ) }} as Товар, куда.Товар as ТоварБин, куда.КудаНаименование as СкладКуда, откуда.ОткудаНаименование as СкладОткуда,
куда.КолКуда as Количество, куда.Период
from СкладКуда куда
join СкладОткуда откуда on откуда.Регистратор = куда.Регистратор
and откуда.Товар = куда.Товар and куда.КолКуда = откуда.КолОткуда
union all -- Товар больше чем переместили
select {{ BinaryToChar( 'куда.Товар' ) }} as Товар, куда.Товар as ТоварБин, куда.КудаНаименование as СкладКуда, null as СкладОткуда,
iif(откуда.КолОткуда is not null, (куда.КолКуда-откуда.КолОткуда),куда.КолКуда) as Количество,
куда.Период
from СкладКуда куда
left join СкладОткуда откуда on откуда.Регистратор = куда.Регистратор
and откуда.Товар = куда.Товар and куда.КолКуда > откуда.КолОткуда
union all -- в обратную сторону не переместили еще
select {{ BinaryToChar( 'откуда.Товар' ) }} as Товар, откуда.Товар as ТоварБин, null as СкладКуда, откуда.ОткудаНаименование as СкладОткуда,
iif(куда.КолКуда is not null, (откуда.КолОткуда - куда.КолКуда),откуда.КолОткуда) as Количество,
откуда.Период
from СкладОткуда откуда
left join СкладКуда куда on куда.Регистратор = откуда.Регистратор
and куда.Товар = откуда.Товар and откуда.КолОткуда > куда.КолКуда
@MikeRzhevsky
Copy link
Author

declare @temptable table (Товар binary(16), СкладКуда nvarchar(64), СкладОткуда nvarchar(64), Количество int, Период Date);

with СкладКуда as (
select Регистратор, Склад as СклКуда,max(whn.Наименование) as КудаНаименование, Товар
from CifraTest.[1c_a].[РегистрНакопления.ОстаткиТоваров]
left join "CifraTest"."1c_a"."Справочник.МестаХранения" whn on whn.Ссылка = Склад
where ТипДвижения = 0 and Период between '20210101' and '20210105'
group by Регистратор, Товар, Склад
),
СкладОткуда as (
select Регистратор, Склад as СклОткуда, max(whn.Наименование) as ОткудаНаименование, Товар as Товар
from CifraTest.[1c_a].[РегистрНакопления.ОстаткиТоваров]
left join "CifraTest"."1c_a"."Справочник.МестаХранения" whn on whn.Ссылка = Склад
where ТипДвижения = 1 and Период between '20210101' and '20210105'
group by Регистратор,Склад,Товар,Период
)

--insert into @temptable

select откуда.Товар,СкладКуда.КудаНаименование as СкладКуда, whn.Наименование as СкладОткуда,
откуда.ОстатокТовара as Количество,откуда.Период
from CifraTest.[1c_a].[РегистрНакопления.ОстаткиТоваров] as откуда
LEFT OUTER JOIN СкладКуда on СкладКуда.Регистратор = откуда.Регистратор and СкладКуда.Товар = откуда.Товар and СкладКуда.СклКуда <> откуда.Склад
LEFT JOIN "CifraTest"."1c_a"."Справочник.МестаХранения" whn on whn.Ссылка = откуда.Склад
where откуда.ТипДвижения = 1 and откуда.Период between '20210101' and '20210105'
/union all
select куда.Товар, whn.Наименование as СкладКуда,
СкладОткуда.ОткудаНаименование as СкладОткуда, куда.ОстатокТовара as Количество, куда.Период
from CifraTest.[1c_a].[РегистрНакопления.ОстаткиТоваров] as куда
LEFT OUTER JOIN СкладОткуда on СкладОткуда.Регистратор = куда.Регистратор and СкладОткуда.Товар = куда.Товар
LEFT JOIN "CifraTest"."1c_a"."Справочник.МестаХранения" whn on whn.Ссылка = куда.Склад
where куда.ТипДвижения = 0 and куда.Период between '20210101' and '20210115'
/

 select * from @temptable 
 where СкладКуда = 'Ozon'  or СкладОткуда = 'Ozon'



 	 select * from CifraTest.[1c_a].[РегистрНакопления.ОстаткиТоваров]  -- 5982 3156
 where 
-- [Склад] = 0x80F5A8494DAAE3A211EA7EFD9B95F39E and
  [Период] between '20210101' and '20210115'
 and ТипДвижения = 1

 -- left join 6165	
 -- join 3...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment