analytics/sql_db_mag_pbi/mag_pbi_schema.sql
2026-02-18 14:57:48 +03:00

20717 lines
1.4 MiB
Transact-SQL
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

USE [mag_pbi]
GO
/****** Object: Schema [analytics] Script Date: 18.02.2026 14:56:02 ******/
CREATE SCHEMA [analytics]
GO
/****** Object: Schema [artem] Script Date: 18.02.2026 14:56:02 ******/
CREATE SCHEMA [artem]
GO
/****** Object: Schema [ostatki] Script Date: 18.02.2026 14:56:02 ******/
CREATE SCHEMA [ostatki]
GO
/****** Object: Schema [pbi] Script Date: 18.02.2026 14:56:02 ******/
CREATE SCHEMA [pbi]
GO
/****** Object: Schema [pbiProd] Script Date: 18.02.2026 14:56:02 ******/
CREATE SCHEMA [pbiProd]
GO
/****** Object: Schema [sebest] Script Date: 18.02.2026 14:56:02 ******/
CREATE SCHEMA [sebest]
GO
/****** Object: Schema [stg] Script Date: 18.02.2026 14:56:02 ******/
CREATE SCHEMA [stg]
GO
/****** Object: Table [pbi].[pricelist] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[pricelist](
[Цена] [numeric](15, 6) NOT NULL,
[Вид цены] [nvarchar](50) NULL,
[1c_id] [binary](16) NOT NULL,
[artic_id] [nvarchar](36) NULL,
[Дата] [datetime2](0) NULL,
[_Period] [datetime2](0) NOT NULL
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[Себестоимость] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[Себестоимость](
[id] [int] IDENTITY(1,1) NOT NULL,
[Период] [datetime2](0) NULL,
[Статья] [varchar](255) NOT NULL,
[Вид операции] [varchar](255) NOT NULL,
[Хоз операция] [varchar](255) NOT NULL,
[Организация] [varchar](255) NULL,
[Партнер] [varchar](255) NULL,
[Контрагент] [varchar](255) NULL,
[Менеджер] [varchar](255) NULL,
[Тип документа] [varchar](255) NULL,
[Номер документа] [varchar](255) NULL,
[Валюта документа] [varchar](255) NULL,
[Ценовая группа] [varchar](255) NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](38, 15) NULL,
[СуммаБезНДС] [numeric](38, 15) NULL,
[СуммаРучнойСкидки] [numeric](38, 15) NULL,
[СуммаАвтоСкидки] [numeric](38, 15) NULL,
[Закупка] [numeric](38, 15) NULL,
[Закупка, usd2] [numeric](38, 15) NULL,
[Курс usd2] [numeric](15, 3) NULL,
[Курс usd] [numeric](15, 3) NULL,
[Таможня] [numeric](38, 15) NULL,
[ЕАЭС] [numeric](38, 15) NULL,
[Учетная цена] [numeric](38, 15) NULL,
[Учетная цена USD2+2] [numeric](38, 15) NULL,
[Заказ закрыт] [datetime] NULL,
[Номер заказа] [nchar](11) NULL,
[Маркетинг] [numeric](38, 15) NULL,
[Доставка] [numeric](38, 15) NULL,
[НДС] [numeric](38, 15) NULL,
[Сборка] [numeric](38, 15) NULL,
[ЗатратыМП] [numeric](38, 15) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](38, 15) NULL,
[Учетная стоимость USD2+2] [numeric](38, 15) NULL,
[Номер регистратора] [nchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[СебестоимостьПродажи] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[СебестоимостьПродажи](
[id] [int] IDENTITY(1,1) NOT NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](38, 15) NULL,
[СуммаБезНДС] [numeric](38, 15) NULL,
[СуммаРучнойСкидки] [numeric](38, 15) NULL,
[СуммаАвтоСкидки] [numeric](38, 15) NULL,
[Закупка] [numeric](38, 15) NULL,
[Закупка, usd2] [numeric](38, 15) NULL,
[Таможня] [numeric](38, 15) NULL,
[ЕАЭС] [numeric](38, 15) NULL,
[Учетная цена] [numeric](38, 15) NULL,
[Учетная цена USD2+2] [numeric](38, 15) NULL,
[Маркетинг] [numeric](38, 15) NULL,
[Доставка] [numeric](38, 15) NULL,
[НДС] [numeric](38, 15) NULL,
[Сборка] [numeric](38, 15) NULL,
[ЗатратыМП] [numeric](38, 15) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](38, 15) NULL,
[Учетная стоимость USD2+2] [numeric](38, 15) NULL,
[sebes_id] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: View [pbi].[Себестоимость+СебестоимостьПродаж] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*where [Вид операции] = 'Продажа'
and sebesSales.ЗатратыМП <> 0 */
CREATE VIEW [pbi].[Себестоимость+СебестоимостьПродаж]
AS
SELECT
[id],
[Период],
[Статья],
[Вид операции],
[Хоз операция],
[Организация],
[Партнер],
[PartnerId],
[Контрагент],
[Менеджер],
[Тип документа],
[Номер документа],
[Валюта документа],
[Ценовая группа],
[1c_document_id],
[1c_id],
[artic_id],
[Количество],
[Сумма],
[СуммаБезНДС],
[СуммаРучнойСкидки],
[СуммаАвтоСкидки],
CASE
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND PriceListPrice IS NOT NULL THEN -(PriceListPrice * [Количество]) / 1000
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND AnyPrice IS NOT NULL THEN -(AnyPrice * [Количество]) / 1000
ELSE [Закупка]
END AS [Закупка],
CASE
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND PriceListPrice IS NOT NULL THEN -(PriceListPrice / [Курс usd2] * [Количество]) / 1000
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND AnyPrice IS NOT NULL THEN -(AnyPrice / [Курс usd2] * [Количество]) / 1000
ELSE [Закупка, usd2]
END AS [Закупка, usd2],
[Курс usd2],
[Курс usd],
[Таможня],
CASE
WHEN ([Закупка] = 0 AND [Вид операции] = 'Продажа') AND PriceListPrice IS NOT NULL THEN PriceListPrice / 1000
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND AnyPrice IS NOT NULL THEN AnyPrice / 1000
ELSE [Учетная цена]
END AS [Учетная цена],
CASE
WHEN ([Закупка] = 0 AND [Вид операции] = 'Продажа') AND PriceListPrice IS NOT NULL THEN PriceListPrice / [Курс usd2] / 1000
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND AnyPrice IS NOT NULL THEN AnyPrice / [Курс usd2] / 1000
ELSE [Учетная цена USD2+2]
END AS [Учетная цена USD2+2],
CASE
WHEN ([Закупка] = 0 AND [Вид операции] = 'Продажа') AND PriceListPrice IS NOT NULL THEN (PriceListPrice * [Количество]) / 1000
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND AnyPrice IS NOT NULL THEN (AnyPrice * [Количество]) / 1000
ELSE [Учетная стоимость]
END AS [Учетная стоимость],
CASE
WHEN ([Закупка] = 0 AND [Вид операции] = 'Продажа') AND PriceListPrice IS NOT NULL THEN (PriceListPrice / [Курс usd2] * [Количество]) / 1000
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND AnyPrice IS NOT NULL THEN (AnyPrice / [Курс usd2] * [Количество]) / 1000
ELSE [Учетная стоимость USD2+2]
END AS [Учетная стоимость USD2+2],
[Заказ закрыт],
[Номер заказа],
[Доставка],
[НДС],
[Сборка],
PriceListPrice
FROM
(SELECT
sebes.id,
sebes.Период,
sebes.Статья,
sebes.[Вид операции],
sebes.[Хоз операция],
sebes.Организация,
sebes.Партнер,
sebes.PartnerId,
sebes.Контрагент,
sebes.Менеджер,
sebes.[Тип документа],
sebes.[Номер документа],
sebes.[Валюта документа],
sebes.[Ценовая группа],
sebes.[1c_document_id],
sebes.[1c_id],
sebes.artic_id,
sebes.Количество,
sebes.Сумма AS Сумма,
sebes.СуммаБезНДС,
sebes.СуммаРучнойСкидки,
sebes.СуммаАвтоСкидки,
CASE
WHEN sebesSales.sZakupka IS NOT NULL THEN sebesSales.sZakupka
ELSE [Закупка]
END AS Закупка,
CASE
WHEN sebesSales.sZakupkaUsd2 IS NOT NULL THEN sebesSales.sZakupkaUsd2
ELSE [Закупка, usd2]
END AS [Закупка, usd2],
sebes.[Курс usd2],
sebes.[Курс usd],
CASE
WHEN sebesSales.customs IS NOT NULL THEN sebesSales.customs
ELSE [Таможня]
END AS Таможня,
CASE
WHEN sebesSales.uchetprice IS NOT NULL THEN sebesSales.uchetprice
ELSE [Учетная цена]
END AS [Учетная цена],
CASE
WHEN sebesSales.uchetpriceUSD22 IS NOT NULL THEN sebesSales.uchetpriceUSD22
ELSE [Учетная цена USD2+2]
END AS [Учетная цена USD2+2],
CASE
WHEN sebesSales.uchetstoimost IS NOT NULL THEN sebesSales.uchetstoimost
ELSE [Учетная стоимость]
END AS [Учетная стоимость],
CASE
WHEN sebesSales.uchetstoimostUSD22 IS NOT NULL THEN sebesSales.uchetstoimostUSD22
ELSE [Учетная стоимость USD2+2]
END AS [Учетная стоимость USD2+2],
sebes.[Заказ закрыт],
sebes.[Номер заказа],
CASE
WHEN sebesSales.delivery IS NOT NULL THEN sebesSales.delivery
ELSE [Доставка]
END AS Доставка,
CASE
WHEN sebesSales.NAT IS NOT NULL THEN sebesSales.NAT
ELSE [НДС]
END AS НДС,
CASE
WHEN sebesSales.assemble IS NOT NULL THEN sebesSales.assemble
ELSE [Сборка]
END AS Сборка,
(SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
WHERE [Вид цены] = 'Учетная цена (руб)'
AND Дата <= sebes.Период
AND sebes.artic_id = artic_id
ORDER BY Дата DESC) AS PriceListPrice,
(SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
WHERE [Вид цены] = 'Учетная цена (руб)'
AND sebes.artic_id = artic_id
ORDER BY Дата) AS AnyPrice
FROM
pbi.Себестоимость AS sebes
LEFT OUTER JOIN
(SELECT
[1c_document_id] AS onecid,
artic_id AS articid,
Закупка AS sZakupka,
[Закупка, usd2] AS sZakupkaUsd2,
Таможня AS customs,
ЕАЭС AS eas,
Доставка AS delivery,
НДС AS NAT,
Сборка AS assemble,
Сумма AS SumSales,
ЗатратыМП,
sebes_id,
[Учетная цена] AS uchetprice,
[Учетная цена USD2+2] AS uchetpriceUSD22,
[Учетная стоимость] AS uchetstoimost,
[Учетная стоимость USD2+2] AS uchetstoimostUSD22
FROM
pbi.СебестоимостьПродажи) AS sebesSales ON sebesSales.sebes_id = sebes.id
) AS mainTab
GO
/****** Object: Table [pbi].[ostatki_short] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[ostatki_short](
[artic_id] [nvarchar](36) NULL,
[1c_id] [binary](16) NOT NULL,
[Code] [nchar](11) NOT NULL,
[sklad] [nvarchar](50) NOT NULL,
[Категория склада] [varchar](15) NOT NULL,
[upakovok] [numeric](38, 12) NULL,
[quantity] [numeric](38, 3) NULL,
[upakovka] [numeric](38, 6) NULL,
[date] [datetime] NULL,
[Учетная цена, старое] [numeric](38, 15) NULL,
[upakovok_ship] [numeric](38, 15) NULL,
[quantity_ship] [numeric](38, 15) NULL
) ON [PRIMARY]
GO
/****** Object: View [pbi].[ОстаткиTotal] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbi].[ОстаткиTotal]
AS
SELECT [artic_id]
,[Code]
,[sklad]
,[Категория склада]
,[upakovka]
,[date]
-- количество упаковок накопительным итогом
,coalesce(sum([upakovok]) over (partition by [sklad], [artic_id] order by osh.[date]
rows between unbounded preceding and current row),
0) as total_upakovok
-- количество шт накопительным итогом
,coalesce(sum([quantity]) over (partition by [sklad], [artic_id] order by osh.[date]
rows between unbounded preceding and current row),
0) as total_quantity
FROM mag_pbi.pbi.ostatki_short osh
WHERE [Категория склада] <> 'Виртуальный'
GO
/****** Object: View [pbi].[БазоваяУпаковка] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [pbi].[БазоваяУпаковка]as
--Вынимаем из таблицы упаковок Габариты номенклатуры по базовой упаковке
SELECT
_Code as code
, n._IDRRef
, _OwnerID_RRRef
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),5,12) )) as artic_id
, upakovka --as [Базовая упаковка]
, [вес], [Высота], [Глубина], [Ширина], [Объем]--, md
/*, isnull(
(case n.[_Fld28142]
WHEN 0 THEN upakovka
ELSE max_upakovka end)
, 1) as 'Базовая упаковка'*/
FROM mag_2019.dbo._Reference188X1 n --справочник номенклатуры
LEFT JOIN (
SELECT
a._Fld24768 as upakovka/*, MAX(_Fld24768)as max_upakovka*/
, a._Fld24761 as 'Вес'
, a._Fld24763 as 'Высота'
, a._Fld24765 as 'Глубина'
, a._Fld24775 as 'Ширина'
, a._Fld24771 as 'Объем'
, a._OwnerID_RRRef
, a._Marked as md
FROM [MAG_2019].dbo._Reference347X1 a
LEFT JOIN [MAG_2019].dbo._Reference347X1 b
ON b._OwnerID_RRRef = a._OwnerID_RRRef AND a._Fld24768 > b._Fld24768
AND a._Marked = 0x00 AND b._Marked = 0x00
WHERE (b._Fld24768 is null)
AND a._Marked = 0x00 --AND b._Marked = 0x00
AND a._OwnerID_RRRef IN (SELECT _IDRRef FROM mag_2019.dbo._Reference188X1 WHERE [_Fld28142] = 0)
UNION ALL
SELECT
a._Fld24768 as upakovka/*, MAX(_Fld24768)as max_upakovka*/
, a._Fld24761 as 'Вес'
, a._Fld24763 as 'Высота'
, a._Fld24765 as 'Глубина'
, a._Fld24775 as 'Ширина'
, a._Fld24771 as 'Объем'
, a._OwnerID_RRRef
, a._Marked
FROM [MAG_2019].dbo._Reference347X1 a
LEFT JOIN [MAG_2019].dbo._Reference347X1 b
ON b._OwnerID_RRRef = a._OwnerID_RRRef AND a._Fld24768 < b._Fld24768
AND a._Marked = 0x00 AND b._Marked = 0x00
WHERE b._Fld24768 is null
AND a._Marked = 0 --AND b._Marked = 0
AND a._OwnerID_RRRef IN (SELECT _IDRRef FROM mag_2019.dbo._Reference188X1 WHERE [_Fld28142] <> 0)
) as up
ON n._IDRRef = up._OwnerID_RRRef
WHERE n._Fld21101RRef IN (0x80C5305A3A00E12B11E5845202CA01FB, 0x80C5305A3A00E12B11E584520AEC30EC)
GO
/****** Object: View [pbi].[Заказы_тех] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE view [pbi].[Заказы_тех] as
SELECT
DATEADD(year, -2000, z._Date_Time) as [Дата заказа поставщику]
,z._Number as 'Номер заказа поставщику'
, t._Fld3473RRef as [1C_id]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),5,12) )) as partner_id
, (SELECT r._Description FROM [MAG_2019].[dbo].[_Reference168] r WHERE r._IDRRef = z._Fld3410RRef) as 'Контрагент'
,case [_Fld3417RRef]
when 0xB9440E49408A17534955319EBF0DAE60 then 'Согласован'
when 0x99FD3E66AA3EFB074984044D5A69CFD5 then 'В пути'
when 0x973A5675AC6A17F64DA37EC6C22FC12C then 'Подтвержден'
when 0xA55F81415BA33BC24A053ED26C6EC02E then 'Закрыт'
when 0xA87A8B13710A30B447DFF1614E84D167 then 'В производстве'
when 0x8542BD023FE7B70E4613087D853F26E4 then 'Тех. заказ'
end as 'Статус'
, t._Fld3473RRef as [nom_1c_id]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2),5,12) ))as artic_id
, t._Fld3477 as [Количество]
, convert (decimal(10,2), t._Fld3477/(case (SELECT TOP 1 upakovka FROM pbi.[БазоваяУпаковка] up WHERE t._Fld3473RRef = up._OwnerID_RRRef)
when 0 then 1 when null then 1 else (SELECT TOP 1 upakovka FROM pbi.[БазоваяУпаковка] up WHERE t._Fld3473RRef = up._OwnerID_RRRef) end)) as 'Кол. упаковок'
, t._Fld3480/1000 as [Цена]
, t._Fld3481/1000 as [Сумма]
, t._Fld3481/1000 *
(SELECT TOP 1 _Fld13220/_Fld13221 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = z._Fld3414RRef --валюта документа
AND _Period <= z._Date_Time
ORDER BY _Period desc) /
(SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= z._Date_Time
ORDER BY _Period desc) as [Сумма всего тех заказы, usd]
/*, case z.[_Fld3414RRef]
when 0x80CD002590EC174111E581505088A8D5 then 'usd'
else 'руб'
end as 'Валюта'*/
, (SELECT _DESCRIPTION FROM [MAG_2019].[dbo].[_Reference50] /*валюты*/ v WHERE v._IDRRef = [_Fld3414RRef]) as 'Валюта'
/*, case when
( SELECT COUNT(*)
FROM mag_2019.[dbo].[_AccumRg16344] AS zakupka --РН Закупка
INNER JOIN [mag_2019].[dbo]._Reference160 an
ON an._IDRRef = zakupka.[_Fld16349RRef]
WHERE an._Fld20498RRef = t._Fld3473RRef AND zakupka._Fld16357_RRRef = z.[_IDRRef]
) = 0
THEN 'В пути до РФ' ELSE 'В пути в РФ' END as 'Где товар'*/
FROM [MAG_2019].[dbo].[_Document408X1] z /* документ заказ поставщику */
INNER JOIN [MAG_2019].[dbo].[_Document408_VT3470X1] t /* табличная часть заказа поставщику */
ON t._Document408_IDRRef = z._IDRRef
LEFT JOIN [mag_2019].[dbo]._Reference215X1 p /* партнер */
ON p._IDRRef = z._Fld3409RRef
--LEFT JOIN mag_2019.[dbo].[_AccumRg16344] AS zakupka --РН Закупка. Присоединено для проверки,что у заказа нет пту, далее фильтрация по регистратору из закупки по NULL
--ON zakupka._Fld16357_RRRef = z.[_IDRRef]
WHERE
(z.[_Fld3417RRef] = 0x8542BD023FE7B70E4613087D853F26E4 /*'Тех. заказ'*/ ) -- статус
AND z._Posted = 1
AND z._Marked = 0
AND [_Fld3491RRef] = 0 /* причина отмены не указана */
--AND z.[_Fld3414RRef] = 0x80CD002590EC174111E581505088A8D5 -- отбор по USD
/*
SELECT TOP (1000)
case [_Fld3417RRef]
when 0xB9440E49408A17534955319EBF0DAE60 then 'Согласован'
when 0x99FD3E66AA3EFB074984044D5A69CFD5 then 'В пути'
when 0x973A5675AC6A17F64DA37EC6C22FC12C then 'Подтвержден'
when 0xA55F81415BA33BC24A053ED26C6EC02E then 'Закрыт'
when 0xA87A8B13710A30B447DFF1614E84D167 then 'В производстве'
end as 'Статус'
,z._Number as 'Номер документа'
,z._Date_Time
,[_Active]
,[_RecordKind]
,[_Fld16330RRef]
,[_Fld16331RRef] /* Номенклатура */
,[_Fld16332RRef]
,[_Fld16333]
,[_Fld16334RRef]
,[_Fld16335] /* Заказано */
,[_Fld16336]
,[_Fld16337RRef]
FROM [MAG_2019].[dbo].[_AccumRg16329] r /* регистр накопления заказы поставщикам */
INNER JOIN [MAG_2019].[dbo].[_Document408X1] z /* документ заказ поставщику */
ON r._Fld16330RRef = z._IDRRef
WHERE r._Active = 0
AND [_Fld3417RRef] = 0xA87A8B13710A30B447DFF1614E84D167 /*В производстве*/ OR [_Fld3417RRef] = 0x99FD3E66AA3EFB074984044D5A69CFD5 /*В пути*/
*/
/*
SELECT
TOP (1000)
[_Fld3417RRef]
,
case [_Fld3417RRef]
when 0xB9440E49408A17534955319EBF0DAE60 then 'Согласован'
when 0x99FD3E66AA3EFB074984044D5A69CFD5 then 'В пути'
when 0x973A5675AC6A17F64DA37EC6C22FC12C then 'Подтвержден'
when 0xA55F81415BA33BC24A053ED26C6EC02E then 'Закрыт'
when 0xA87A8B13710A30B447DFF1614E84D167 then 'В производстве'
end as 'Статус'
,[_IDRRef]
FROM [MAG_2019].[dbo].[_Document408X1] /* документ заказ поставщику */
WHERE _Marked = 0 AND _Posted = 1
*/
GO
/****** Object: View [analytics].[Курсы валют на сегодня] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******//*
SELECT TOP (1000) [_Period]
,[_Fld13219RRef]
,[_Fld13220]
,[_Fld13221]
--,[_Fld1150]
, r._Description
FROM [MAG_2019].[dbo].[_InfoRg13218] i
INNER JOIN [MAG_2019].[dbo].[_Reference50] r
ON i._Fld13219RRef = r._IDRRef
*/
CREATE VIEW [analytics].[Курсы валют на сегодня] as
SELECT
r._Description as currency
,( SELECT top 1 [_Fld13220] FROM [MAG_2019].[dbo].[_InfoRg13218] i WHERE i._Fld13219RRef = r._IDRRef ORDER BY [_Period] DESC) as rate
FROM
[MAG_2019].[dbo].[_Reference50] r
GO
/****** Object: View [analytics].[Проекты] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [analytics].[Проекты] as
SELECT
p.[_IDRRef] as '1c_id'
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),5,12) )) as 'id'
, us._Description as 'Ответственный'
,[_Code] as 'Код УТ'
,p.[_Description] as 'Название'
,[_Fld22715] as 'Завершен'
,[_Fld22711] as 'ПлановаяДатаНачала'
,[_Fld22712] as 'ДатаНачала'
,[_Fld22713] as 'ПлановаяДатаОкончания'
,[_Fld22714] as 'ДатаОкончания'
,[_Fld22716] as 'Комментарий'
FROM [MAG_2019].[dbo].[_Reference258] p /* Справочник.Проекты */
LEFT JOIN [MAG_2019].[dbo].[_Reference228X1] us
ON us._IDRRef = [_Fld22710RRef]
WHERE p._Marked = 0
GO
/****** Object: Table [pbi].[enums] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[enums](
[_IDRref] [binary](16) NOT NULL,
[value] [nvarchar](150) NOT NULL,
[enum] [nvarchar](50) NOT NULL
) ON [PRIMARY]
GO
/****** Object: View [analytics].[Заявки_на_оплату_поабличной_части] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [analytics].[Заявки_на_оплату_поабличной_части] as
SELECT
z._Number as 'Номер заявки'
--, z._Posted, z_t._Fld3964RRef, z._IDRRef
, DATEADD(year, -2000, z.[_Date_Time]) as [Дата создания]
--, DATEADD(year, -2000,z.[_Fld3902]) as 'Дата оплаты план'
--, CONVERT(datetime2, FORMAT(DATEADD(year, -2000, [_Fld3902]),'yyyy-MM-dd'), 120) as 'Дата оплаты план'
,DATEADD(year, -2000, [_Fld3902]) as 'Дата оплаты план'
, CASE
WHEN z.[_Fld3880RRef]= 0x96388D3803D0E2B243682753FD602008 THEN 'Согласована'
WHEN z.[_Fld3880RRef] = 0xA53B783FB8E84C2D4A977FB197BB9B6A THEN 'Не согласована'
WHEN z.[_Fld3880RRef] = 0xB22A4A3C82F7B70D452E0F89A2703597 THEN 'К оплате'
WHEN z.[_Fld3880RRef] = 0x9EB3FD405C68C64C42B491437EDE1CAB THEN 'Отклонена'
END as 'Статус'
, spv._Description as 'Валюта'
, dds._Description as 'Статья ДДС'
, dds._IDRRef as '1c_dds_id'
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), dds._IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), dds._IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), dds._IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), dds._IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), dds._IDRRef, 2),5,12) ))as 'dds id'
, z_t._Fld3959 as 'Сумма'
, case spv._Description
WHEN 'USD' THEN _Fld3959 * (SELECT rate FROM [mag_pbi].[analytics].[Курсы валют на сегодня] WHERE currency='USD2')
ELSE _Fld3959 * (SELECT rate FROM [mag_pbi].[analytics].[Курсы валют на сегодня] WHERE currency=spv._Description)
END
as 'Сумма в руб.'
, CASE WHEN (SELECT
SUM(CASE WHEN [_RecordKind] = 0 THEN [_Fld16211] ELSE -[_Fld16211] END) AS summ
FROM [MAG_2019].[dbo].[_AccumRg16206] -- РегистрНакопления.ДенежныеСредстваКВыплате
WHERE [_Fld16207_RRRef] = _Document416_IDRRef
) = 0 THEN 1 ELSE 0 END as 'Оплачено'
, e.value as 'Хоз. операция'
, z.[_Fld3900] as 'Комментарий заявки'
, z_t.[_Fld3968] as 'Комментарий расшифровки'
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = z_t._Fld3957RRef) as 'Партнер'
, (SELECT _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = z._Fld3891RRef)as 'Получатель'
, case when org._Description = 'АНТУРАЖ ЛТД ООО' then 'Безнал' ELSE 'Наличные' END as 'Форма оплаты'
, org._Description as 'organization'
, p.id as 'project id'
, p.[1c_id] as '1c_project_id'
FROM [MAG_2019].[dbo].[_Document416_VT3955] z_t /*Документ.ЗаявкаНаРасходованиеДенежныхСредств.ТабличнаяЧасть.РасшифровкаПлатежа*/
INNER JOIN [MAG_2019].[dbo].[_Document416] z /* Документ.ЗаявкаНаРасходованиеДенежныхСредств */
ON z._IDRRef = z_t._Document416_IDRRef
LEFT JOIN mag_pbi.pbi.enums e ON e._IDRref = z.[_Fld3881RRef] AND e.enum = 'Хоз. операции'/*Перечисление хозяйственная операция*/
LEFT JOIN [MAG_2019].[dbo].[_Reference50] spv ON spv._IDRRef = z.[_Fld3883RRef] /*Справочник.Валюты */
LEFT JOIN [MAG_2019].[dbo].[_Reference316] dds /*Справочник.СтатьиДвиженияДенежныхСредств*/ ON dds._IDRRef = z_t._Fld3964RRef
LEFT JOIN [MAG_2019].[dbo].[_Reference198X1] org ON org._IDRRef = z._Fld3879RRef/*справочник организации*/
LEFT JOIN [mag_pbi].[analytics].[Проекты] p
ON p.[1c_id] = [_Fld28407RRef]
WHERE z._Posted = 1 AND z._Marked = 0x00
AND z.[_Fld3880RRef] <> 0x9EB3FD405C68C64C42B491437EDE1CAB
GO
/****** Object: Table [analytics].[manufacturers] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[manufacturers](
[id] [int] IDENTITY(1,1) NOT NULL,
[manufacturer] [nvarchar](max) NOT NULL,
[days_of_sales] [int] NOT NULL,
[logistics_days] [int] NOT NULL,
[roic_norm] [decimal](12, 4) NULL,
CONSTRAINT [PK_manufacturers] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
/****** Object: Table [analytics].[manufacturer_payment_stage] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[manufacturer_payment_stage](
[id] [int] IDENTITY(1,1) NOT NULL,
[manufacturer_id] [int] NOT NULL,
[name] [nvarchar](255) NOT NULL,
[days] [int] NOT NULL,
[percent] [decimal](9, 4) NOT NULL,
[sort_order] [int] NOT NULL,
CONSTRAINT [PK_manufacturer_payment_stage] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: View [analytics].[v_manufacturers_roi_compat] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[v_manufacturers_roi_compat] AS
SELECT
man.id,
man.manufacturer,
man.roic_norm AS ROI_norm,
n_stage.[percent] / 100.0 AS n_percent,
n_stage.[days] AS n_days,
m_stage.[percent] / 100.0 AS m_percent,
m_stage.[days] AS m_days
FROM [analytics].[manufacturers] man
LEFT JOIN (
SELECT manufacturer_id, [percent], [days],
ROW_NUMBER() OVER (PARTITION BY manufacturer_id ORDER BY sort_order, [days]) AS rn
FROM [analytics].[manufacturer_payment_stage]
) n_stage ON n_stage.manufacturer_id = man.id AND n_stage.rn = 1
LEFT JOIN (
SELECT manufacturer_id, [percent], [days],
ROW_NUMBER() OVER (PARTITION BY manufacturer_id ORDER BY sort_order, [days]) AS rn
FROM [analytics].[manufacturer_payment_stage]
) m_stage ON m_stage.manufacturer_id = man.id AND m_stage.rn = 2;
GO
/****** Object: View [pbi].[УчетнаяСуммаДляPBI] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Скрипт для команды SelectTopNRows из среды SSMS ******/
CREATE view [pbi].[УчетнаяСуммаДляPBI]
as
SELECT
DATEADD(year, -2000, [_Period]) as [Период]
, [_RecorderRRef] as [1c_document_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef] , 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef] , 2),21,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef] , 2),17,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef] , 2),1,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef] , 2),5,12))) as [artic_id]
, [_Fld15567] as [Количество]
, isnull(
[_Fld15567] *
(SELECT top 1 [_Fld27138] / 1000 FROM [mag_2019].[dbo].[_InfoRg27129X1] -- РегистрСведений.ITS_ОсновнойОтчет
WHERE _Fld27130RRef = analitikaUchetaNomenklaturi._Fld20498RRef AND [_Fld27138] > 0
AND datediff(month,_Period, r._Period) >= 0
order by _period desc),
[_Fld15567] *
(SELECT TOP (1) [Цена]/1000
FROM [mag_pbi].[pbi].[pricelist]
where [1c_id] = analitikaUchetaNomenklaturi._Fld20498RRef and [Вид цены] = 'Учетная цена (руб)'
ORDER BY _Period desc)
) as [Учетная сумма, руб]
, CASE
WHEN refNomenclatura._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN --'Валютная'
-- Если валютная ценовая группа, то берем учетную цену (вал)
r._Fld15567 *
(SELECT TOP (1) [Цена] / 1000
FROM [mag_pbi].[pbi].[pricelist] pl
where [1c_id] = analitikaUchetaNomenklaturi._Fld20498RRef and [Вид цены] = 'Учетная цена (вал)'
AND pl._Period <= r._Period
ORDER BY _Period desc)
ELSE --WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN --'Рублевая'
--делим учетную цену (руб) на курс
r._Fld15567 *
(SELECT TOP (1) [Цена] / 1000
FROM [mag_pbi].[pbi].[pricelist] pl
where [1c_id] = analitikaUchetaNomenklaturi._Fld20498RRef and [Вид цены] = 'Учетная цена (руб)'
AND pl._Period <= r._Period
ORDER BY _Period desc) / (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= r._Period
ORDER BY _Period desc)
END
as [Учетная сумма, usd]
FROM [MAG_2019].[dbo].[_AccumRg15547] as r
LEFT JOIN [MAG_2019].[dbo].[_Reference160] as analitikaUchetaNomenklaturi
ON r._Fld15548RRef = analitikaUchetaNomenklaturi._IDRRef
LEFT JOIN [MAG_2019].[dbo].[_Reference188X1] as refNomenclatura
ON refNomenclatura.[_IDRRef] = analitikaUchetaNomenklaturi.[_Fld20498RRef]
GO
/****** Object: Table [pbi].[nomenclature] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[nomenclature](
[artic_id] [nvarchar](36) NULL,
[1c_id] [binary](16) NOT NULL,
[code] [nchar](11) NOT NULL,
[cenovaya_gruppa] [varchar](12) NOT NULL,
[description] [nvarchar](150) NOT NULL,
[artic] [nvarchar](50) NULL,
[vid_nomen] [binary](16) NULL,
[Производитель] [nvarchar](max) NULL,
[group_id] [nvarchar](36) NULL,
[1c_group] [binary](16) NOT NULL,
[card] [nvarchar](max) NULL,
[photo] [nvarchar](max) NOT NULL,
[base] [int] NOT NULL,
[Знаменатель веса] [numeric](15, 3) NULL,
[Числитель веса] [numeric](15, 4) NULL,
[Знаменатель объема] [numeric](15, 3) NULL,
[Числитель объема] [numeric](15, 6) NULL,
[Количество упак в коробе] [numeric](10, 0) NULL,
[Количество упак в кванте] [numeric](10, 0) NULL,
[id magok] [nvarchar](15) NULL,
[Товарныйменеджера] [nvarchar](1024) NULL,
[МенеджерПоЗакупкам2] [nvarchar](1024) NULL,
[РуководительНаправления] [nvarchar](1024) NULL,
[Менеджер OZON] [nvarchar](1024) NULL,
[Менеджер WB] [nvarchar](1024) NULL,
[АБС статус] [nvarchar](1024) NULL,
[АБС план] [nvarchar](1024) NULL,
[ABC Парето] [nvarchar](1024) NULL,
[XYZ статус 12м] [nvarchar](1024) NULL,
[Комментарий для матрицы] [nvarchar](1024) NULL,
[Коллекция] [nvarchar](1024) NULL,
[Ценовой сегмент Магок] [nvarchar](1024) NULL,
[Ценовой сегмент МП] [nvarchar](1024) NULL,
[Кол-во упак в заказе Магок] [nvarchar](1024) NULL,
[Бренд] [nvarchar](1024) NULL,
[Тип товара] [nvarchar](1024) NULL,
[Метка] [nvarchar](1024) NULL,
[Ширина, мм] [nvarchar](1024) NULL,
[Цвет] [nvarchar](1024) NULL,
[Номер цвета] [nvarchar](1024) NULL,
[Тип шнура] [nvarchar](1024) NULL,
[Тип плетения] [nvarchar](1024) NULL,
[Размер] [nvarchar](1024) NULL,
[Особенность] [nvarchar](1024) NULL,
[Форма] [nvarchar](1024) NULL,
[Ширина] [nvarchar](1024) NULL,
[Формат упаковки] [nvarchar](1024) NULL,
[Макс. запас] [nvarchar](1024) NULL,
[Мин. запас] [nvarchar](1024) NULL,
[QTY PACKS] [nvarchar](1024) NULL,
[Да/Нет Собственное пр-во] [nvarchar](1024) NULL,
[ID OZON] [nvarchar](1024) NULL,
[ID WB] [nvarchar](1024) NULL,
[WB] [nvarchar](1024) NULL,
[Ozon] [nvarchar](1024) NULL,
[СТМ] [nvarchar](1024) NULL,
[Выгружать на я.маркет] [nvarchar](1024) NULL,
[Выгружать в Google Merchant] [nvarchar](1024) NULL,
[Товар МП] [nvarchar](1024) NULL,
[Неликвид] [nvarchar](1024) NULL,
[Статус] [nvarchar](1024) NULL,
[Сквозной цвет] [nvarchar](1024) NULL,
[Базовая упаковка] [numeric](15, 3) NULL,
[Качество контента Ozon] [int] NULL,
[Качество контента WB] [int] NULL,
[Качество контента WB by Ozon] [int] NULL,
[Качество контента Magok] [int] NULL,
[Вид номенклатуры] [nvarchar](50) NULL,
[max_year_quantity] [numeric](38, 3) NULL,
[max_quarter_quantity] [numeric](38, 3) NULL,
[Цена учетная, руб] [decimal](18, 7) NULL,
[Цена учетная, usd] [decimal](18, 7) NULL,
[СредниеМесячныеПродажи] [float] NULL,
[СКО_МесячныхПродаж] [float] NULL,
[minAvailableQty] [decimal](18, 4) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
/****** Object: View [pbi].[Стоимость обработки заказа] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [pbi].[Стоимость обработки заказа] as
select
dateadd(year, -2000, [_Period]) as [date]
, CASE _RecorderTRef WHEN 0x000001CA THEN doc._Number ELSE doc484._Number END as [Номер отчета комиссионера]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), [_Fld33391RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33391RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33391RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33391RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36),[_Fld33391RRef], 2),5,12) )) as [artic_id]
,[_Fld33391RRef] as [1c_id]--номенклатура
, _Description as [Статья себестоимости]
, _Fld33394/1000 as [Сумма]
, (_Fld33394/1000) /
(SELECT TOP 1 _Fld13220/_Fld13221 FROM [mag_2019].[dbo].[_InfoRg13218] k--РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, k._Period) <= dateadd(year, -2000, s.[_Period])
ORDER BY k._Period desc) as [Расходы МП, usd]
, (SELECT _description FROM [MAG_2019].[dbo].[_Reference198X1] /*организации*/ org WHERE org._IDRRef =
CASE _RecorderTRef WHEN 0x000001CA THEN doc._Fld5484RRef ELSE doc484._Fld7208RRef END
) as [Организация]
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef =
CASE _RecorderTRef WHEN 0x000001CA THEN doc._Fld5485RRef ELSE doc484._Fld7210RRef END
) as [Партнер]
, (SELECT _Code FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef =
CASE _RecorderTRef WHEN 0x000001CA THEN doc._Fld5485RRef ELSE doc484._Fld7210RRef END
) as [ПартнерКод]
, (SELECT TOP 1 _Fld13220/_Fld13221 FROM [mag_2019].[dbo].[_InfoRg13218] k--РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, k._Period) <= dateadd(year, -2000, s.[_Period])
ORDER BY k._Period desc) as [Курс]
from
[MAG_2019].dbo._AccumRg33390 s-- РегистрНакопления СтоимостьОбработкиЗаказа
left join [MAG_2019].dbo._Reference28342 -- Справочник СтатьиСебестоимости
on _Fld33393RRef = _IDRRef
left join [MAG_2019].dbo._Document458 as Doc -- Документ ОтчетКомиссионера
on _RecorderRRef = Doc._IDRRef
LEFT JOIN [MAG_2019].dbo._Document484 as Doc484 -- Документ приобритение услуг и прочих активов
ON _RecorderRRef = Doc484._IDRRef
GO
/****** Object: View [pbi].[РекламаМаркетплейсы] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbi].[РекламаМаркетплейсы] as
SELECT
DATEADD(year, -2000, [_Period]) AS [Дата]
,[_Fld33745] as [Узел]
,[_Fld33746RRef] as [1c_id]
,LOWER(CONCAT(
SUBSTRING ( convert(nvarchar(36), [_Fld33746RRef], 2), 25,8),'-',
SUBSTRING ( convert(nvarchar(36), [_Fld33746RRef], 2),21,4),'-',
SUBSTRING ( convert(nvarchar(36), [_Fld33746RRef], 2),17,4),'-',
SUBSTRING ( convert(nvarchar(36), [_Fld33746RRef], 2),1,4),'-',
SUBSTRING ( convert(nvarchar(36), [_Fld33746RRef], 2),5,12) )) as [artic_id]
,[_Fld33747] as [Номер кампании]
,[_Fld33748] as [Тип кампании]
,[_Fld33749] as [Просмотры]
,[_Fld33750] as [Клики]
,NULL as [atbs кол-во добавлений в корзину]
,[_Fld33751]/1000 as [Затраты, руб]
,[_Fld33751]/1000 / (SELECT TOP 1 _Fld13220/_Fld13221 FROM [mag_2019].[dbo].[_InfoRg13218] k--РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, k._Period) <= dateadd(year, -2000, oz.[_Period])
ORDER BY k._Period desc) as [Затраты, usd]
,[_Fld33752]/1000 as [Стоимость клика, руб]
,[_Fld33753] as [Количество заказов]
,[_Fld33754]/1000 as [Сумма заказов]
,[_Fld33755] as [Ставка поиск, %]
,[_Fld33756]/1000 as [Ставка поиск, руб]
,[_Fld33757] as [Охват, %]
,NULL as [cr кол-во заказов / кол-во посещений]
,NULL as [Заказано товаров, упак]
,NULL as [Дата начала]
,[_Fld33758] as [id_product]
FROM [MAG_2019].[dbo].[_InfoRg33744] oz /*РегистрСведений.ДанныеПоРекламеOzon*/
UNION ALL
SELECT
DATEADD(year, -2000, [_Period]) AS [Дата]
,[_Fld33721] as [Узел]
,[_Fld33722RRef] as [1c_id]
,LOWER(CONCAT(
SUBSTRING ( convert(nvarchar(36), [_Fld33722RRef], 2), 25,8),'-',
SUBSTRING ( convert(nvarchar(36), [_Fld33722RRef], 2),21,4),'-',
SUBSTRING ( convert(nvarchar(36), [_Fld33722RRef], 2),17,4),'-',
SUBSTRING ( convert(nvarchar(36), [_Fld33722RRef], 2),1,4),'-',
SUBSTRING ( convert(nvarchar(36), [_Fld33722RRef], 2),5,12) )) as [artic_id]
,convert(nvarchar(150),[_Fld33724]) as [Номер кампании]
,[_Fld33723] as [Тип кампании]
,[_Fld33725] as [Просмотры]
,[_Fld33726] as [Клики]
,[_Fld33728] as [atbs кол-во добавлений в корзину]
,[_Fld33727]/1000 as [Затраты, руб]
,[_Fld33727]/1000 / (SELECT TOP 1 _Fld13220/_Fld13221 FROM [mag_2019].[dbo].[_InfoRg13218] k--РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, k._Period) <= dateadd(year, -2000, wb.[_Period])
ORDER BY k._Period desc) as [Затраты, usd]
,([_Fld33727]/1000)/(case [_Fld33726]
when 0 then 1
else ISNULL([_Fld33726], 1) end) as [Стоимость клика, руб]
,[_Fld33729] as [Количество заказов]
,[_Fld33732]/1000 as [Сумма заказов]
,NULL as [Ставка поиск, %]
,NULL as [Ставка поиск, руб]
,NULL as [Охват, %]
,[_Fld33730] as [cr кол-во заказов / кол-во посещений]
,[_Fld33731] as [Заказано товаров, упак]
,DATEADD(year, -2000, [_Fld33734]) as [Дата начала]
,[_Fld33733] as [id_product]
FROM [MAG_2019].[dbo].[_InfoRg33720] wb /*РегистрСведений.ДанныеПоРекламеWB*/
GO
/****** Object: Table [pbi].[groups] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[groups](
[_Description] [varchar](255) NULL,
[g] [varchar](255) NULL,
[g1] [varchar](255) NULL,
[g2] [varchar](255) NULL,
[g3] [varchar](255) NULL,
[group_id] [nvarchar](36) NULL,
[_ParentIDRRef] [nvarchar](36) NULL,
[lvl] [int] NULL,
[path] [varchar](255) NULL,
[code] [nchar](11) NULL,
[1c_id] [binary](16) NULL,
[план] [float] NULL,
[first group] [nvarchar](36) NULL
) ON [PRIMARY]
GO
/****** Object: Table [pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi](
[id] [int] NOT NULL,
[Период] [datetime2](0) NULL,
[Статья] [varchar](50) NOT NULL,
[Вид операции] [varchar](25) NOT NULL,
[Хоз операция] [varchar](50) NULL,
[Организация] [varchar](255) NULL,
[Партнер] [varchar](255) NULL,
[Контрагент] [varchar](255) NULL,
[Менеджер] [varchar](255) NULL,
[Тип документа] [varchar](50) NULL,
[Номер документа] [varchar](25) NULL,
[Валюта документа] [varchar](25) NULL,
[Ценовая группа] [varchar](25) NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](21, 9) NULL,
[СуммаБезНДС] [numeric](21, 9) NULL,
[СуммаРучнойСкидки] [numeric](21, 9) NULL,
[СуммаАвтоСкидки] [numeric](21, 9) NULL,
[Закупка] [numeric](21, 9) NULL,
[Закупка, usd2] [numeric](21, 9) NULL,
[Курс usd2] [numeric](15, 3) NULL,
[Курс usd] [numeric](15, 3) NULL,
[Таможня] [numeric](21, 9) NULL,
[ЕАЭС] [numeric](21, 9) NULL,
[Учетная цена] [numeric](21, 9) NULL,
[Учетная цена USD2+2] [numeric](21, 9) NULL,
[Заказ закрыт] [datetime] NULL,
[Номер заказа] [nchar](11) NULL,
[Маркетинг] [numeric](21, 9) NULL,
[Доставка] [numeric](21, 9) NULL,
[НДС] [numeric](21, 9) NULL,
[Производство] [numeric](21, 9) NULL,
[ЗатратыМП] [numeric](21, 9) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](21, 9) NULL,
[Учетная стоимость USD2+2] [numeric](21, 9) NULL,
[Номер регистратора] [nchar](10) NULL,
[Code] [nchar](11) NULL,
[ЗатратыСкладХранение] [numeric](21, 9) NULL,
[Приемка] [numeric](21, 9) NULL,
[АтсМаркировка] [numeric](21, 9) NULL,
[ВремяВыполненияМинут] [numeric](21, 9) NULL,
[СборкаЗаказа] [numeric](21, 9) NULL,
[КоличествоУпаковок] [numeric](15, 3) NULL,
[Сумма скидки] [numeric](21, 9) NULL,
[Сумма скидки USD2+2] [numeric](21, 9) NULL,
[Доп расходы] [numeric](21, 9) NULL,
[Доп расходы USD2+2] [numeric](21, 9) NULL,
[Учетная сумма, руб] [decimal](21, 9) NULL,
[Учетная сумма, usd] [decimal](21, 9) NULL,
[Источник заказа] [nvarchar](50) NULL
) ON [PRIMARY]
GO
/****** Object: View [pbiProd].[СводныйСебестоимость Для PBI] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [pbiProd].[СводныйСебестоимость Для PBI] as
SELECT
s.*
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi] s
INNER JOIN [mag_2019].[dbo]._Reference188X1 n /*номенклатура*/ ON n._IDRRef = s.[1c_id]
INNER JOIN [mag_pbi].[pbi].[groups] g ON n._ParentIDRRef = g.[1c_id]
WHERE g.g <> '*Внутренняя'
AND [Статья] NOT IN ('Пересчет товара', 'Пересчет товара', 'Сборка заказа', 'Атс маркировка', 'Приемка товара')
GO
/****** Object: View [analytics].[Продажи_Учёт_Маржа_по_дням] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [analytics].[Продажи_Учёт_Маржа_по_дням]
AS
WITH base AS (
-- Продажи и учетная сумма (только Статья = 'Реализация')
SELECT
CAST(s.[Период] AS date) AS [d],
s.[1c_id],
s.Code,
SUM(CAST(s.[Сумма] AS decimal(38,6))) AS sales_sum,
SUM(CAST(s.[Учетная сумма, руб] AS decimal(38,6))) AS accounting_sum,
CAST(0 AS decimal(38,6)) AS ads_cost,
CAST(0 AS decimal(38,6)) AS order_cost
FROM [mag_pbi].[pbiProd].[СводныйСебестоимость Для PBI] AS s
WHERE s.[Статья] = N'Реализация'
GROUP BY CAST(s.[Период] AS date), s.[1c_id], s.Code
UNION ALL
-- Реклама (затраты)
SELECT
CAST(r.[Дата] AS date) AS [d],
r.[1c_id],
n.code,
CAST(0 AS decimal(38,6)) AS sales_sum,
CAST(0 AS decimal(38,6)) AS accounting_sum,
SUM(CAST(r.[Затраты, руб] AS decimal(38,6))) AS ads_cost,
CAST(0 AS decimal(38,6)) AS order_cost
FROM [mag_pbi].[pbi].[РекламаМаркетплейсы] AS r
INNER JOIN mag_pbi.pbi.nomenclature n ON r.[1c_id] = n.[1c_id]
GROUP BY CAST(r.[Дата] AS date), r.[1c_id],n.code
UNION ALL
-- Стоимость обработки заказа (затраты)
SELECT
CAST(o.[date] AS date) AS [d],
o.[1c_id],
n.code,
CAST(0 AS decimal(38,6)) AS sales_sum,
CAST(0 AS decimal(38,6)) AS accounting_sum,
CAST(0 AS decimal(38,6)) AS ads_cost,
SUM(CAST(o.[Сумма] AS decimal(38,6))) AS order_cost
FROM [mag_pbi].[pbi].[Стоимость обработки заказа] AS o
INNER JOIN pbi.nomenclature n ON o.[1c_id] = n.[1c_id]
GROUP BY CAST(o.[date] AS date), o.[1c_id], n.code
)
SELECT
b.[d],
b.[1c_id],
b.Code,
SUM(b.sales_sum) AS [Сумма продаж],
SUM(b.accounting_sum) AS [Учетная сумма],
SUM(b.ads_cost) AS [Затраты на рекламу],
SUM(b.order_cost) AS [Стоимость обработки],
-- «Чистая выручка» после вычета рекламных и обработочных затрат
(SUM(b.sales_sum) - SUM(b.ads_cost) - SUM(b.order_cost)) AS [Сумма продаж (нетто)],
-- Торговая надбавка = нетто-продажи минус учетная сумма
(SUM(b.sales_sum) - SUM(b.ads_cost) - SUM(b.order_cost) - SUM(b.accounting_sum)) AS [Торговая надбавка]
FROM base b
GROUP BY b.[d], b.[1c_id],b.Code;
/*
SELECT
[Период] --datetime2(0)
,[Статья]
,[1c_id]
,[Количество]
,[Сумма]
,[Учетная сумма, руб]
FROM [mag_pbi].[pbiProd].[СводныйСебестоимость Для PBI] s
WHERE s.Статья = N'Реализация'
SELECT
[Дата] --datetime2(0)
,[1c_id]
,[Затраты, руб]
FROM [mag_pbi].[pbi].[РекламаМаркетплейсы]
SELECT
[date] --datetime2(0)
,[1c_id]
,[Сумма]
FROM [mag_pbi].[pbi].[Стоимость обработки заказа]
*/
GO
/****** Object: View [analytics].[v_contractors] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- -----------------------------------------------------------------------------
-- 1. Представления для списков из 1С
-- -----------------------------------------------------------------------------
-- Контрагенты: [pbi].[ПартнерыКонтрагенты] уже существует (из _Reference168)
-- Для удобства создаём представление analytics.v_contractors с search-friendly полями
CREATE VIEW [analytics].[v_contractors] AS
SELECT
c._IDRRef AS contractor_1c_id, -- бинарный ключ 1С
LOWER(CONCAT(
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 25, 8), '-',
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 21, 4), '-',
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 17, 4), '-',
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 1, 4), '-',
SUBSTRING(CONVERT(nvarchar(36), c._IDRRef, 2), 5, 12)
)) AS contractor_id, -- строковый id для API/поиска
c._Description AS contractor_name
FROM [MAG_2019].[dbo].[_Reference168] c
WHERE c._Marked = 0;
GO
/****** Object: View [analytics].[v_producers] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Производители из справочника 1С _Reference260
CREATE VIEW [analytics].[v_producers] AS
SELECT
pr._IDRRef AS producer_1c_id, -- бинарный ключ 1С
LOWER(CONCAT(
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 25, 8), '-',
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 21, 4), '-',
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 17, 4), '-',
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 1, 4), '-',
SUBSTRING(CONVERT(nvarchar(36), pr._IDRRef, 2), 5, 12)
)) AS producer_id, -- строковый id для API/поиска
pr._Description AS producer_name
FROM [MAG_2019].[dbo].[_Reference260] pr
WHERE pr._Marked = 0;
GO
/****** Object: Table [analytics].[manufacturer_counterparty_map] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[manufacturer_counterparty_map](
[id] [int] IDENTITY(1,1) NOT NULL,
[manufacturer_id] [int] NOT NULL,
[contractor_1c_id] [binary](16) NOT NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY],
CONSTRAINT [UQ_mcm_contractor] UNIQUE NONCLUSTERED
(
[contractor_1c_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY],
CONSTRAINT [UQ_mcm_pair] UNIQUE NONCLUSTERED
(
[manufacturer_id] ASC,
[contractor_1c_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: View [analytics].[v_manufacturer_counterparty_mapping] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Представление для API: map + manufacturer + contractor/producer (из 1С)
CREATE VIEW [analytics].[v_manufacturer_counterparty_mapping] AS
SELECT
mcm.id,
mcm.manufacturer_id,
p.producer_id,
man.manufacturer AS manufacturer_name,
mcm.contractor_1c_id,
c.contractor_id,
c.contractor_name AS contractor_name,
man.days_of_sales,
man.logistics_days,
man.roic_norm
FROM [analytics].[manufacturer_counterparty_map] mcm
LEFT JOIN [analytics].[manufacturers] man ON man.id = mcm.manufacturer_id
LEFT JOIN [analytics].[v_contractors] c ON c.contractor_1c_id = mcm.contractor_1c_id
LEFT JOIN [analytics].[v_producers] p ON LTRIM(RTRIM(p.producer_name)) = LTRIM(RTRIM(man.manufacturer));
GO
/****** Object: Table [analytics].[аналитика за 365 дн.] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[аналитика за 365 дн.](
[1c_id] [binary](16) NULL,
[Code] [nchar](11) NULL,
[Продано шт] [numeric](38, 3) NULL,
[Продажи шт / день] [numeric](38, 6) NULL,
[Остаток дней продаж] [numeric](38, 6) NULL,
[Продажи / год, руб.] [decimal](38, 2) NULL,
[учетная сумма / год, руб.] [decimal](38, 2) NULL,
[ТН / год, руб.] [decimal](38, 2) NULL,
[Стоимость МП год, руб.] [decimal](38, 2) NULL,
[%ТН год, руб.] [decimal](38, 2) NULL,
[Дней в продаже / год] [bigint] NULL,
[Дней в продаже / квартал] [bigint] NULL,
[Продажи / квартал, руб.] [decimal](38, 2) NULL,
[учетная сумма / квартал, руб.] [decimal](38, 2) NULL,
[ТН / квартал, руб.] [decimal](38, 2) NULL,
[ТН / месяц, руб.] [decimal](38, 6) NULL,
[Оплаченный остаток] [decimal](38, 2) NULL,
[Рентабельность / год] [decimal](38, 6) NULL,
[Рентабельность / квартал] [decimal](38, 6) NULL,
[Рентабельность / будущий год] [decimal](38, 6) NULL,
[Рентабельность по остатку / год] [decimal](38, 6) NULL,
[Рентабельность по остатку / квартал] [decimal](38, 6) NULL,
[Рентабельность по остатку / будущий год] [decimal](38, 6) NULL
) ON [PRIMARY]
GO
/****** Object: View [analytics].[Заказы] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[Заказы]
AS
SELECT
DATEADD(YEAR, -2000, z._Date_Time) AS [Дата заказа поставщику],
z._Number AS [Номер заказа поставщику],
t._Fld3473RRef AS [1C_id],
LOWER(
SUBSTRING(CONVERT(nvarchar(36), p._IDRRef, 2), 25, 8) + '-' +
SUBSTRING(CONVERT(nvarchar(36), p._IDRRef, 2), 21, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), p._IDRRef, 2), 17, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), p._IDRRef, 2), 1, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), p._IDRRef, 2), 5, 12)
) AS partner_id,
r._Description AS Контрагент,
CASE z._Fld3417RRef
WHEN 0xB9440E49408A17534955319EBF0DAE60 THEN 'Согласован'
WHEN 0x99FD3E66AA3EFB074984044D5A69CFD5 THEN 'В пути'
WHEN 0x973A5675AC6A17F64DA37EC6C22FC12C THEN 'Подтвержден'
WHEN 0xA55F81415BA33BC24A053ED26C6EC02E THEN 'Закрыт'
WHEN 0xA87A8B13710A30B447DFF1614E84D167 THEN 'В производстве'
WHEN 0x8542BD023FE7B70E4613087D853F26E4 THEN 'Тех. заказ'
WHEN 0xB38AD6232E2D17D44287D9924E5E6DF2 THEN 'На согласовании'
WHEN 0xB2A33CF1C7286AF3463F20D54AE5A0BC THEN 'Выгружен на складе'
ELSE 'Неизвестно'
END AS Статус,
t._Fld3473RRef AS nom_1c_id,
n._Description AS Наименование,
n._Code AS code,
n._Fld21043 AS Артикул,
LOWER(
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 25, 8) + '-' +
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 21, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 17, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 1, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 5, 12)
) AS artic_id,
t._Fld3477 AS Количество,
CONVERT(decimal(10, 2), t._Fld3477 / pack.base_pack) AS [Кол. упаковок],
t._Fld3480 AS Цена,
t._Fld3481 AS Сумма,
g.g,
g.path,
v._Description AS Валюта,
CASE v._Description
WHEN 'USD' THEN _Fld3481 * (SELECT rate FROM [mag_pbi].[analytics].[Курсы валют на сегодня] WHERE currency='USD2')
ELSE _Fld3481 * (SELECT rate FROM [mag_pbi].[analytics].[Курсы валют на сегодня] WHERE currency=v._Description)
END AS 'Сумма в руб.',
CASE
WHEN z._Fld3420 < '4000' THEN DATEADD(MONTH, 4, GETDATE())
ELSE DATEADD(YEAR, -2000, z._Fld3420)
END
as 'Желаемая дата',
z._Fld3432 as 'Комментарий'
FROM MAG_2019.dbo._Document408X1 AS z -- Документ заказ поставщику
INNER JOIN MAG_2019.dbo._Document408_VT3470X1 AS t ON t._Document408_IDRRef = z._IDRRef -- табличная часть
LEFT JOIN MAG_2019.dbo._Reference215X1 AS p ON p._IDRRef = z._Fld3409RRef -- Справочник.Партнеры
LEFT JOIN MAG_2019.dbo._Reference168 AS r ON r._IDRRef = z._Fld3410RRef -- Справочник.Контрагенты
INNER JOIN MAG_2019.dbo._Reference188X1 AS n ON n._IDRRef = t._Fld3473RRef -- Номенклатура
LEFT JOIN MAG_2019.dbo._Reference50 AS v ON v._IDRRef = z._Fld3414RRef -- Справочник.Валюты
INNER JOIN pbi.groups AS g ON n._ParentIDRRef = g.[1c_id] -- группы
OUTER APPLY (
SELECT TOP 1
ISNULL(NULLIF(up.upakovka, 0), 1) AS base_pack
FROM pbi.БазоваяУпаковка up
WHERE up._OwnerID_RRRef = t._Fld3473RRef
) AS pack
WHERE
z._Posted = 1
AND z._Marked = 0
AND t._Fld3491RRef = 0
--AND g NOT LIKE '*Внутр%'
--AND z._Fld3417RRef <> 0xA55F81415BA33BC24A053ED26C6EC02E /* Не закрыт */
--AND z._Fld3417RRef <> 0x8542BD023FE7B70E4613087D853F26E4 /* Не Тех. заказ */
--AND z._Fld3417RRef <> 0x973A5675AC6A17F64DA37EC6C22FC12C /* Не Подтвержден */
GO
/****** Object: View [analytics].[get_orders_list] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[get_orders_list] AS
SELECT
DATEADD(YEAR, -2000, z._Date_Time) AS [Дата заказа поставщику],
CAST(DATEADD(YEAR, -2000, z._Fld3420) AS DATE) AS [Желаемая дата поступления],
z._Number AS [Номер заказа поставщику],
p._Description AS [Партнер],
r._Description AS [Контрагент],
CASE z._Fld3417RRef
WHEN 0xB9440E49408A17534955319EBF0DAE60 THEN N'Согласован'
WHEN 0x99FD3E66AA3EFB074984044D5A69CFD5 THEN N'В производстве'
WHEN 0x973A5675AC6A17F64DA37EC6C22FC12C THEN N'Частично отгружен'
WHEN 0xA55F81415BA33BC24A053ED26C6EC02E THEN N'Заказ отменён'
WHEN 0xA87A8B13710A30B447DFF1614E84D167 THEN N'В пути и произв.'
WHEN 0x8542BD023FE7B70E4613087D853F26E4 THEN N'Полностью отгружен'
WHEN 0xB38AD6232E2D17D44287D9924E5E6DF2 THEN N'Нет в заявке на оплату'
WHEN 0xB2A33CF1C728AF3463F20D54AE5A0BC THEN N'Заявка в процессе'
ELSE N'Неизвестно'
END AS [Статус],
v._Description AS [Валюта],
z._Fld3418 AS [Сумма],
CASE v._Description
WHEN 'USD' THEN z._Fld3418 * (SELECT rate FROM [analytics].[Курсы валют на сегодня] WHERE currency='USD2')
ELSE z._Fld3418 * (SELECT rate FROM [analytics].[Курсы валют на сегодня] WHERE currency=v._Description)
END AS [Сумма в руб],
ISNULL(man.[manufacturer], N'Не найдено') AS manufacturer,
ISNULL(man.[ROI_norm], 136) / 100 AS roi_year_normalized,
man.[n_percent],
man.[n_days],
man.[m_percent],
man.[m_days],
CASE WHEN z._Fld3418 = 0 THEN 0
ELSE (
SELECT SUM(zak.[Сумма] * a.[%ТН год, руб.])
FROM [analytics].[Заказы] zak
INNER JOIN [analytics].[аналитика за 365 дн.] a ON a.[1c_id] = zak.[1C_id]
WHERE zak.[Номер заказа поставщику] = z._Number
) / z._Fld3418
END AS [average_year_turnover],
z._Fld3432 AS comment
FROM MAG_2019.dbo._Document408X1 AS z
LEFT JOIN MAG_2019.dbo._Reference215X1 AS p ON p._IDRRef = z._Fld3409RRef -- Партнёр
LEFT JOIN MAG_2019.dbo._Reference168 AS r ON r._IDRRef = z._Fld3410RRef -- Контрагент
LEFT JOIN MAG_2019.dbo._Reference50 AS v ON v._IDRRef = z._Fld3414RRef -- Валюта
LEFT JOIN [analytics].[manufacturer_counterparty_map] map ON map.contractor_1c_id = r._IDRRef
LEFT JOIN [analytics].[v_manufacturers_roi_compat] man ON man.id = map.manufacturer_id
WHERE z._Posted = 1
AND z._Marked = 0
AND z._Fld3417RRef <> 0xA55F81415BA33BC24A053ED26C6EC02E -- не «Заказ отменён»
AND z._Fld3417RRef <> 0x8542BD023FE7B70E4613087D853F26E4 -- не «Полностью отгружен»
AND z._Fld3417RRef <> 0x973A5675AC6A17F64DA37EC6C22FC12C; -- не «Частично отгружен»
GO
/****** Object: View [analytics].[get_orders_by_group] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE view [analytics].[get_orders_by_group] as
SELECT
z.[Статус] as status
,z.[Номер заказа поставщику] as order_number
,z.[1C_id]
,z.[Дата заказа поставщику] as order_date
,z.Валюта as currency
, n._code as 'code'
,[Кол. упаковок] as packages
,z.Количество as units
,[Цена] as price
,[Сумма в руб.] as 'sum'
, z.Сумма as amount
,FORMAT([Желаемая дата], 'yyyy-MM') as 'month'
,g.path
FROM [mag_pbi].[analytics].[Заказы] z
INNER JOIN [mag_2019].[dbo]._Reference188X1 n /*номенклатура*/ ON n._IDRRef = z.[1c_id]
INNER JOIN [mag_pbi].[pbi].[groups] g ON n._ParentIDRRef = g.[1c_id]
--WHERE [Статус]='В пути' OR [Статус] = 'В производстве' OR [Статус] = 'Выгружен на складе'
WHERE
z.Статус NOT IN ('Тех. заказ', 'Подтвержден' ,'Закрыт')
GO
/****** Object: View [pbi].[Организация] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [pbi].[Организация] as --Справочник организаций
select
DISTINCT([Организация])
FROM [mag_pbi].[pbi].[Себестоимость+СебестоимостьПродаж]
WHERE [Организация] IS NOT NULL
GO
/****** Object: Table [analytics].[forecast] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[forecast](
[id] [int] IDENTITY(1,1) NOT NULL,
[scenario_id] [int] NOT NULL,
[1c_id] [binary](16) NOT NULL,
[code] [nvarchar](36) NOT NULL,
[month] [date] NOT NULL,
[value] [decimal](18, 3) NOT NULL,
[updated_at] [datetime2](0) NOT NULL,
[updated_by] [nvarchar](128) NOT NULL,
[opt] [decimal](18, 3) NOT NULL,
[mp] [decimal](18, 3) NOT NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: View [analytics].[get_forecast_by_group] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [analytics].[get_forecast_by_group] as
SELECT
n.code as code
,f.[scenario_id]
,FORMAT(f.[month], 'yyyy-MM-01') AS [month]
,f.[value] as quantity_base
,g.path
FROM [mag_pbi].[analytics].forecast f
INNER JOIN mag_pbi.pbi.nomenclature n /*номенклатура*/
ON n.[1c_id] = f.[1c_id]
INNER JOIN mag_pbi.pbi.groups g
ON n.[1c_group] = g.[1c_id]
WHERE g.g not like '*%' AND [value] > 0
GO
/****** Object: View [pbi].[sklad_2019] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [pbi].[sklad_2019] as
SELECT [_IDRRef]
,[_Description]
, case [_Fld28161RRef]
when 0x8B77E59222988E024EF951B150F9CF19 then 'Хранение'
when 0x97043CB3EDC3B7064C08D641662E9C0E then 'Фасовка'
when 0xB710CAB5DA47384D4182043584307EE3 then 'Розничная точка'
when 0xBE296DC2882AAAC94C381C08FD79DA2D then 'Виртуальный'
else 'Неопределено'
end
as [Категория]
FROM [MAG_2019].[dbo].[_Reference298X1]
where _folder = 1 AND _Marked = 0
--WHERE [_Fld28161RRef] = 0x8B77E59222988E024EF951B150F9CF19
GO
/****** Object: View [ostatki].[РезервыМПиОПТ] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/**Беру РН СвободныеОстатки, считаю итоги в разрезе склада и номенклатуры, присоединяю заказклиента, чтобы получить хоз операцию, возможно надо хардкодить по клиентам, т.к помимо
МП есть еще 2 клиента**/
CREATE VIEW [ostatki].[РезервыМПиОПТ] as
SELECT
Номенклатура as [1c_id]
,LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), Номенклатура, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), Номенклатура, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), Номенклатура, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), Номенклатура, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), Номенклатура, 2),5,12) ))
as artic_id
, wharehouse_id
, ( SELECT s._Description FROM [mag_pbi].[pbi].[sklad_2019] s /*склад*/ WHERE s._IDRRef = wharehouse_id) as Склад
, sum([Резерв]) as [Резерв]
, [Где товар]
FROM (
SELECT
ostatki.[_Fld17246RRef] AS Номенклатура,
ostatki.[_Fld17248RRef] AS wharehouse_id,
--[_Fld17250] - колонка [В Резерве Со Склада] РН СвободныеОстатки
-- суммируем резервы мп
CASE WHEN ostatki.[_RecordKind] = 1 THEN -[_Fld17250] ELSE [_Fld17250] END as [Резерв],
CASE [_Fld3156RRef]
WHEN 0x9D3D5976F5C778CF4B2C4A59A606D3E5 THEN 'резервМП'
ELSE 'резервОПТ'
END as 'Где товар'
/*
CASE
WHEN [_Fld3156RRef] = 0x9D3D5976F5C778CF4B2C4A59A606D3E5 --хозоперация комиссия
THEN CASE WHEN ostatki.[_RecordKind] = 1 THEN -[_Fld17250] ELSE [_Fld17250] END
ELSE 0
END AS РезервМпСоСклада,
-- суммируем резервы опт
CASE
WHEN [_Fld3156RRef] = 0xA2130CEA734FC86C419139394DEC627E -- хозперация реализация
THEN CASE WHEN ostatki.[_RecordKind] = 1 THEN -[_Fld17250] ELSE [_Fld17250] END
ELSE 0
END AS ОптРезервыСоСклада*/
FROM
[MAG_2019].[dbo].[_AccumRg17245] AS ostatki --РН СвободныеОстатки
INNER JOIN [MAG_2019].[dbo].[_Document404X1] AS doczakaz
ON doczakaz._IDRRef = ostatki._RecorderRRef
WHERE ostatki.[_RecorderTRef] = 0x00000194 -- Только заказы клиентов
AND [_Fld17250] <> 0
)as t
GROUP BY Номенклатура, wharehouse_id, [Где товар]
GO
/****** Object: View [pbi].[Заказо_в_производстве] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE view [pbi].[Заказо_в_производстве] as
SELECT
DATEADD(year, -2000, z._Date_Time) as [Дата заказа поставщику]
,z._Number as 'Номер заказа поставщику'
, t._Fld3473RRef as [1C_id]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),5,12) )) as partner_id
, (SELECT r._Description FROM [MAG_2019].[dbo].[_Reference168] r WHERE r._IDRRef = z._Fld3410RRef) as 'Контрагент'
,case [_Fld3417RRef]
when 0xB9440E49408A17534955319EBF0DAE60 then 'Согласован'
when 0x99FD3E66AA3EFB074984044D5A69CFD5 then 'В пути'
when 0x973A5675AC6A17F64DA37EC6C22FC12C then 'Подтвержден'
when 0xA55F81415BA33BC24A053ED26C6EC02E then 'Закрыт'
when 0xA87A8B13710A30B447DFF1614E84D167 then 'В производстве'
when 0x8542BD023FE7B70E4613087D853F26E4 then 'Тех. заказ'
end as 'Статус'
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2),5,12) ))as artic_id
, t._Fld3477 as [Количество]
, convert (decimal(10,2), t._Fld3477/(case (SELECT TOP 1 upakovka FROM pbi.[БазоваяУпаковка] up WHERE t._Fld3473RRef = up._OwnerID_RRRef)
when 0 then 1 when null then 1 else (SELECT TOP 1 upakovka FROM pbi.[БазоваяУпаковка] up WHERE t._Fld3473RRef = up._OwnerID_RRRef) end)) as 'Кол. упаковок'
, t._Fld3480/1000 as [Цена]
, t._Fld3481/1000 as [Сумма]
, t._Fld3481/1000 *
(SELECT TOP 1 _Fld13220/_Fld13221 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = z._Fld3414RRef --валюта документа
AND _Period <= z._Date_Time
ORDER BY _Period desc) /
(SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= z._Date_Time
ORDER BY _Period desc) as [Сумма всего в пр-ве, usd]
, (SELECT _DESCRIPTION FROM [MAG_2019].[dbo].[_Reference50] /*валюты*/ v WHERE v._IDRRef = [_Fld3414RRef]) as 'Валюта'
, e.value as 'Хоз. операция'
, case e.value
WHEN 'Закупка у поставщика' THEN 'Производство РФ'
WHEN 'Импорт (товары в пути)' THEN 'Производство Импорт'
WHEN 'Ввоз из ЕАЭС' THEN 'Производство ЕАЭС'
END as 'Где товар'
/*, case z.[_Fld3414RRef]
when 0x80CD002590EC174111E581505088A8D5 then 'usd'
else 'руб'
end as 'Валюта'
*/
FROM [MAG_2019].[dbo].[_Document408X1] z /* документ заказ поставщику */
INNER JOIN [MAG_2019].[dbo].[_Document408_VT3470X1] t /* табличная часть заказа поставщику */
ON t._Document408_IDRRef = z._IDRRef
LEFT JOIN [mag_2019].[dbo]._Reference215X1 p /* партнер */
ON p._IDRRef = z._Fld3409RRef
LEFT JOIN mag_pbi.pbi.enums e ON e._IDRref = z.[_Fld3431RRef] AND e.enum = 'Хоз. операции'/*Перечисление хозяйственная операция*/
WHERE
([_Fld3417RRef] = 0xA87A8B13710A30B447DFF1614E84D167 /* В производстве */)
AND z._Posted = 1
AND z._Marked = 0
AND [_Fld3491RRef] = 0 /* причина отмены не указана */
/*
SELECT TOP (1000)
case [_Fld3417RRef]
when 0xB9440E49408A17534955319EBF0DAE60 then 'Согласован'
when 0x99FD3E66AA3EFB074984044D5A69CFD5 then 'В пути'
when 0x973A5675AC6A17F64DA37EC6C22FC12C then 'Подтвержден'
when 0xA55F81415BA33BC24A053ED26C6EC02E then 'Закрыт'
when 0xA87A8B13710A30B447DFF1614E84D167 then 'В производстве'
when 0x8542BD023FE7B70E4613087D853F26E4 then 'Тех заказ'
end as 'Статус'
,z._Number as 'Номер документа'
,z._Date_Time
,[_Active]
,[_RecordKind]
,[_Fld16330RRef]
,[_Fld16331RRef] /* Номенклатура */
,[_Fld16332RRef]
,[_Fld16333]
,[_Fld16334RRef]
,[_Fld16335] /* Заказано */
,[_Fld16336]
,[_Fld16337RRef]
FROM [MAG_2019].[dbo].[_AccumRg16329] r /* регистр накопления заказы поставщикам */
INNER JOIN [MAG_2019].[dbo].[_Document408X1] z /* документ заказ поставщику */
ON r._Fld16330RRef = z._IDRRef
WHERE r._Active = 0
AND [_Fld3417RRef] = 0xA87A8B13710A30B447DFF1614E84D167 /*В производстве*/ OR [_Fld3417RRef] = 0x99FD3E66AA3EFB074984044D5A69CFD5 /*В пути*/
*/
/*
SELECT
TOP (1000)
[_Fld3417RRef]
,
case [_Fld3417RRef]
when 0xB9440E49408A17534955319EBF0DAE60 then 'Согласован'
when 0x99FD3E66AA3EFB074984044D5A69CFD5 then 'В пути'
when 0x973A5675AC6A17F64DA37EC6C22FC12C then 'Подтвержден'
when 0xA55F81415BA33BC24A053ED26C6EC02E then 'Закрыт'
when 0xA87A8B13710A30B447DFF1614E84D167 then 'В производстве'
end as 'Статус'
,[_IDRRef]
FROM [MAG_2019].[dbo].[_Document408X1] /* документ заказ поставщику */
WHERE _Marked = 0 AND _Posted = 1
*/
GO
/****** Object: View [analytics].[Товары на складах] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE view [analytics].[Товары на складах] as
SELECT
t._Fld17485RRef as [1c_id]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), t._Fld17485RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), t._Fld17485RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), t._Fld17485RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), t._Fld17485RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), t._Fld17485RRef, 2),5,12) ))
as artic_id
, s._Description as sklad
, s.[Категория] as [Где товар]
, sum( [_Fld17491]*(case _RecordKind when 0 then 1 when 1 then -1 end) ) as quantity
FROM [mag_2019].[dbo].[_AccumRg17484] t /*регистр товары на складах*/
--INNER JOIN [mag_2019].[dbo]._Reference188X1 n /*номенклатура*/ ON n._IDRRef = t._Fld17485RRef
--INNER JOIN [mag_pbi].[pbi].[groups] g ON n._ParentIDRRef = g.[1c_id]
INNER JOIN [mag_pbi].[pbi].[sklad_2019] s /*склад*/ ON s._IDRRef = t._Fld17488RRef
WHERE s.[Категория]='Хранение' OR s.[Категория]='Фасовка' --g.path like 'Игрушки%'
GROUP BY t._Fld17485RRef, s._Description, s.[Категория]
GO
/****** Object: View [pbi].[Заказо_в_пути] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE view [pbi].[Заказо_в_пути] as
SELECT
DATEADD(year, -2000, z._Date_Time) as [Дата заказа поставщику]
,z._Number as 'Номер заказа поставщику'
, t._Fld3473RRef as [1C_id]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),5,12) )) as partner_id
, (SELECT r._Description FROM [MAG_2019].[dbo].[_Reference168] r WHERE r._IDRRef = z._Fld3410RRef) as 'Контрагент'
,case [_Fld3417RRef]
when 0xB9440E49408A17534955319EBF0DAE60 then 'Согласован'
when 0x99FD3E66AA3EFB074984044D5A69CFD5 then 'В пути'
when 0x973A5675AC6A17F64DA37EC6C22FC12C then 'Подтвержден'
when 0xA55F81415BA33BC24A053ED26C6EC02E then 'Закрыт'
when 0xA87A8B13710A30B447DFF1614E84D167 then 'В производстве'
when 0x8542BD023FE7B70E4613087D853F26E4 then 'Тех. заказ'
end as 'Статус'
, t._Fld3473RRef as [nom_1c_id]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), t._Fld3473RRef, 2),5,12) ))as artic_id
, t._Fld3477 as [Количество]
, convert (decimal(10,2), t._Fld3477/(case (SELECT TOP 1 upakovka FROM pbi.[БазоваяУпаковка] up WHERE t._Fld3473RRef = up._OwnerID_RRRef)
when 0 then 1 when null then 1 else (SELECT TOP 1 upakovka FROM pbi.[БазоваяУпаковка] up WHERE t._Fld3473RRef = up._OwnerID_RRRef) end)) as 'Кол. упаковок'
, t._Fld3480/1000 as [Цена]
, t._Fld3481/1000 as [Сумма]
, t._Fld3481/1000 *
(SELECT TOP 1 _Fld13220/_Fld13221 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = z._Fld3414RRef --валюта документа
AND _Period <= z._Date_Time
ORDER BY _Period desc) /
(SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= z._Date_Time
ORDER BY _Period desc) as [Сумма всего в пути, usd]
/*, case z.[_Fld3414RRef]
when 0x80CD002590EC174111E581505088A8D5 then 'usd'
else 'руб'
end as 'Валюта'*/
, (SELECT _DESCRIPTION FROM [MAG_2019].[dbo].[_Reference50] /*валюты*/ v WHERE v._IDRRef = [_Fld3414RRef]) as 'Валюта'
, case when
( SELECT COUNT(*)
FROM mag_2019.[dbo].[_AccumRg16344] AS zakupka --РН Закупка
INNER JOIN [mag_2019].[dbo]._Reference160 an
ON an._IDRRef = zakupka.[_Fld16349RRef]
WHERE an._Fld20498RRef = t._Fld3473RRef AND zakupka._Fld16357_RRRef = z.[_IDRRef]
) = 0
THEN 'В пути до РФ' ELSE 'В пути в РФ' END as 'Где товар'
FROM [MAG_2019].[dbo].[_Document408X1] z /* документ заказ поставщику */
INNER JOIN [MAG_2019].[dbo].[_Document408_VT3470X1] t /* табличная часть заказа поставщику */
ON t._Document408_IDRRef = z._IDRRef
LEFT JOIN [mag_2019].[dbo]._Reference215X1 p /* партнер */
ON p._IDRRef = z._Fld3409RRef
--LEFT JOIN mag_2019.[dbo].[_AccumRg16344] AS zakupka --РН Закупка. Присоединено для проверки,что у заказа нет пту, далее фильтрация по регистратору из закупки по NULL
--ON zakupka._Fld16357_RRRef = z.[_IDRRef]
WHERE
(z.[_Fld3417RRef] = 0x99FD3E66AA3EFB074984044D5A69CFD5 /*'В пути'*/ ) -- статус
AND z._Posted = 1
AND z._Marked = 0
AND [_Fld3491RRef] = 0 /* причина отмены не указана */
--AND z.[_Fld3414RRef] = 0x80CD002590EC174111E581505088A8D5 -- отбор по USD
/*
SELECT TOP (1000)
case [_Fld3417RRef]
when 0xB9440E49408A17534955319EBF0DAE60 then 'Согласован'
when 0x99FD3E66AA3EFB074984044D5A69CFD5 then 'В пути'
when 0x973A5675AC6A17F64DA37EC6C22FC12C then 'Подтвержден'
when 0xA55F81415BA33BC24A053ED26C6EC02E then 'Закрыт'
when 0xA87A8B13710A30B447DFF1614E84D167 then 'В производстве'
end as 'Статус'
,z._Number as 'Номер документа'
,z._Date_Time
,[_Active]
,[_RecordKind]
,[_Fld16330RRef]
,[_Fld16331RRef] /* Номенклатура */
,[_Fld16332RRef]
,[_Fld16333]
,[_Fld16334RRef]
,[_Fld16335] /* Заказано */
,[_Fld16336]
,[_Fld16337RRef]
FROM [MAG_2019].[dbo].[_AccumRg16329] r /* регистр накопления заказы поставщикам */
INNER JOIN [MAG_2019].[dbo].[_Document408X1] z /* документ заказ поставщику */
ON r._Fld16330RRef = z._IDRRef
WHERE r._Active = 0
AND [_Fld3417RRef] = 0xA87A8B13710A30B447DFF1614E84D167 /*В производстве*/ OR [_Fld3417RRef] = 0x99FD3E66AA3EFB074984044D5A69CFD5 /*В пути*/
*/
/*
SELECT
TOP (1000)
[_Fld3417RRef]
,
case [_Fld3417RRef]
when 0xB9440E49408A17534955319EBF0DAE60 then 'Согласован'
when 0x99FD3E66AA3EFB074984044D5A69CFD5 then 'В пути'
when 0x973A5675AC6A17F64DA37EC6C22FC12C then 'Подтвержден'
when 0xA55F81415BA33BC24A053ED26C6EC02E then 'Закрыт'
when 0xA87A8B13710A30B447DFF1614E84D167 then 'В производстве'
end as 'Статус'
,[_IDRRef]
FROM [MAG_2019].[dbo].[_Document408X1] /* документ заказ поставщику */
WHERE _Marked = 0 AND _Posted = 1
*/
GO
/****** Object: View [analytics].[nomenclature] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[nomenclature] as
SELECT
LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),5,12) ))as artic_id
, n._IDRRef as '1c_id'
, n._Code as code
, CASE
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Рублевая'
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Валютная'
ELSE 'Неопределено'
END as cenovaya_gruppa
, n._Description as description /*Наименование*/
, n._Fld21043 as artic /*Артикул*/
, n._Fld21053RRef as vid_nomen
, cast( (SELECT _Description FROM [MAG_2019].[dbo].[_Reference260] pr WHERE pr._IDRRef = n._Fld21079RRef) as nvarchar(max)) as 'Производитель'
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2),5,12) ))as group_id
, n._ParentIDRRef as '1c_group'
--, isnull(us._Description, 'Менеджер') as [manager]
, qr._Fld27045 as 'card'
, concat('https://media.magok.ru/', f._Fld21201) as 'photo'
, 2019 as base
, n._Fld21046 as [Знаменатель веса]
, n._Fld21049 as [Числитель веса]
, n._Fld21089 as [Знаменатель объема]
, n._Fld21092 as [Числитель объема]
, n._Fld33413 as [id magok]
, (SELECT TOP 1 upakovka FROM pbi.[БазоваяУпаковка] up WHERE n._IDRRef = up._OwnerID_RRRef) as 'Базовая упаковка'
, (select r._Description from [MAG_2019].[dbo].[_Reference69] /*виды ном*/ r WHERE r._IDRRef = n._Fld21053RRef) as [Вид номенклатуры]
from
[mag_2019].[dbo]._Reference188X1 n /*номенклатура*/
LEFT JOIN [mag_2019].[dbo].[_InfoRg27043X1] /* Регистр сведений QR коды */ qr ON qr._Fld27044RRef = n._IDRRef
LEFT JOIN [mag_2019].[dbo]._Reference191X1 f /*номенклатураПрисоедФайлы*/
ON f._IDRRef = n._Fld21086RRef
WHERE n._Folder = 1
GO
/****** Object: View [analytics].[Внешние остатки] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[Внешние остатки] as
SELECT nod._Description AS [Узел]
, ost._Fld33601 AS [Тип]
, ost._Fld33595 AS [Склад]
, DATEADD(YEAR, -2000, ost._Fld33596) AS [Дата обновления]
, [_Fld28683RRef] as [1c_id]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), [_Fld28683RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), [_Fld28683RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld28683RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld28683RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36),[_Fld28683RRef], 2),5,12) ))
as [artic_id]
, n.code AS [code]
, n.[1c_group] as [group_id]
, ost._Fld33599 AS [id_внешний]
, ost._Fld33602 AS [Количество]
, ost._Fld33603 AS [Доступное кол-во]
FROM [MAG_2019].[dbo].[_InfoRg28682X1] AS ost /* РегистрСведений.ОстаткиТоваровВоВнешнихСистемах */
LEFT JOIN [mag_pbi].[pbi].[nomenclature] n ON n.[1c_id] = ost._Fld28683RRef /* Справочник.Номенклатура */
LEFT JOIN [MAG_2019].[dbo].[_Node28072X1] nod ON nod._IDRRef = ost._Fld28684RRef /* ПланОбмена.ВнешниеСистемы */
GO
/****** Object: View [analytics].[Остатки МП] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[Остатки МП] as
SELECT
t.[Где товар],
t.artic_id,
t.[1c_id],
sum(t.quantity) as quantity
FROM (
select
case
WHEN CHARINDEX('Ozon', [Узел])>0 then 'Ozon'
WHEN CHARINDEX('WildBerries', [Узел])>0 then 'WildBerries'
END
as 'Где товар'
,
[1c_id],
[artic_id],
sum([Доступное кол-во]) as quantity
FROM [mag_pbi].[analytics].[Внешние остатки] as t
WHERE t.[Дата обновления] >= FORMAT(GETDATE(), 'yyyy-MM-dd')
group by Узел, [1c_id], [artic_id]
) as t
GROUP BY t.[Где товар],
t.artic_id,
t.[1c_id]
GO
/****** Object: View [analytics].[Где товар] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[Где товар] as
SELECT
[1c_id]
, [artic_id]
, [Где товар]
, quantity
FROM [analytics].[Товары на складах]
UNION ALL
SELECT
[1c_id]
, [artic_id]
, [Где товар]
, quantity
FROM [analytics].[Остатки МП]
UNION ALL
SELECT
[1c_id]
, [artic_id]
, [Где товар]
, Резерв as quantity
FROM [ostatki].[РезервыМПиОПТ]
UNION ALL
SELECT
[1c_id]
, [artic_id]
, [Где товар]
, Количество as quantity
FROM [pbi].[Заказо_в_пути]-- where [Номер заказа поставщику] = 'АНУТ-003313'
UNION ALL
SELECT
[1c_id]
, [artic_id]
, [Где товар]
, Количество as quantity
FROM [pbi].[Заказо_в_производстве]
GO
/****** Object: Table [pbiProd].[СебестоимостьСводныйОт2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbiProd].[СебестоимостьСводныйОт2022](
[id] [int] IDENTITY(1,1) NOT NULL,
[Период] [datetime2](0) NULL,
[Статья] [varchar](50) NOT NULL,
[Вид операции] [varchar](25) NOT NULL,
[Хоз операция] [varchar](50) NULL,
[Организация] [varchar](255) NULL,
[Партнер] [varchar](255) NULL,
[Контрагент] [varchar](255) NULL,
[Менеджер] [varchar](255) NULL,
[Тип документа] [varchar](50) NULL,
[Номер документа] [varchar](25) NULL,
[Валюта документа] [varchar](25) NULL,
[Ценовая группа] [varchar](25) NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](21, 9) NULL,
[СуммаБезНДС] [numeric](21, 9) NULL,
[СуммаРучнойСкидки] [numeric](21, 9) NULL,
[СуммаАвтоСкидки] [numeric](21, 9) NULL,
[Закупка] [numeric](21, 9) NULL,
[Закупка, usd2] [numeric](21, 9) NULL,
[Курс usd2] [numeric](15, 3) NULL,
[Курс usd] [numeric](15, 3) NULL,
[Таможня] [numeric](21, 9) NULL,
[ЕАЭС] [numeric](21, 9) NULL,
[Учетная цена] [numeric](21, 9) NULL,
[Учетная цена USD2+2] [numeric](21, 9) NULL,
[Заказ закрыт] [datetime] NULL,
[Номер заказа] [nchar](11) NULL,
[Маркетинг] [numeric](21, 9) NULL,
[Доставка] [numeric](21, 9) NULL,
[НДС] [numeric](21, 9) NULL,
[Производство] [numeric](21, 9) NULL,
[ЗатратыМП] [numeric](21, 9) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](21, 9) NULL,
[Учетная стоимость USD2+2] [numeric](21, 9) NULL,
[Номер регистратора] [nchar](10) NULL,
[Code] [nchar](11) NULL,
[ЗатратыСкладХранение] [numeric](21, 9) NULL,
[Приемка] [numeric](21, 9) NULL,
[АтсМаркировка] [numeric](21, 9) NULL,
[ВремяВыполненияМинут] [numeric](21, 9) NULL,
[СборкаЗаказа] [numeric](21, 9) NULL,
[КоличествоУпаковок] [numeric](15, 3) NULL,
[Сумма скидки] [numeric](21, 9) NULL,
[Сумма скидки USD2+2] [numeric](21, 9) NULL,
[Доп расходы] [numeric](21, 9) NULL,
[Доп расходы USD2+2] [numeric](21, 9) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: View [pbi].[Партнеры] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [pbi].[Партнеры] AS
WITH base AS (
select
--, p.*
p._IDRRef as [1c_id]
, p._Code
, LOWER(CONCAT(
SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2), 25,8),'-',
SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),21,4),'-',
SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),17,4),'-',
SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),1,4),'-',
SUBSTRING ( convert(nvarchar(36), p._IDRRef, 2),5,12) )) as [partner_id]
, (SELECT TOP 1 _Fld27512 FROM [MAG_2019].[dbo].[_InfoRg27507X1] WHERE _Fld27510_RRRef = p._IDRRef) as [bitrix_id] /* Bitrix ID Партнер из РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов */
, p._Description as [partner]
, r._Description as region
, (SELECT TOP 1 q._Description FROM [mag_2019].[dbo].[_Reference48] q WHERE q.[_IDRRef] = r.[_ParentIDRRef]) as oblast
, (SELECT TOP 1 g._Description
FROM [mag_2019].[dbo].[_Reference48] g
WHERE g.[_IDRRef] = (
SELECT TOP 1 q._ParentIDRRef FROM [mag_2019].[dbo].[_Reference48] q WHERE q.[_IDRRef] = r.[_ParentIDRRef])) as okrug
, p._Fld21809RRef as [1c_manager_id]
, (SELECT _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = p._Fld21809RRef) as [Основной менеджер]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), p._Fld21809RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), p._Fld21809RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), p._Fld21809RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), p._Fld21809RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), p._Fld21809RRef, 2),5,12) ))as manager_id
, (select _Description from [MAG_2019].[dbo].[_Reference133X1] r1
where r1._IDRRef =
(select _Fld21824_RRRef from [MAG_2019].[dbo].[_Reference215_VT21821X1]
where _Reference215_IDRRef = p._IDRRef AND _Fld21823RRef = 0x997EB49691D57EFD11ECC5660A03B95B
))as [Направление деятельности]
, (SELECT _Description FROM [MAG_2019].[dbo].[_Reference133X1] r1
WHERE r1._IDRRef =
(SELECT _Fld21824_RRRef
FROM [MAG_2019].[dbo].[_Reference215_VT21821X1]
WHERE _Reference215_IDRRef = p._IDRRef AND _Fld21823RRef = 0x80EE0CC47A052DFD11E74AB551FB3177
)) as [Что шьют?]
, (SELECT _Description FROM [MAG_2019].[dbo].[_Reference133X1] r1
WHERE r1._IDRRef =
(SELECT _Fld21824_RRRef FROM [MAG_2019].[dbo].[_Reference215_VT21821X1]
WHERE _Reference215_IDRRef = p._IDRRef AND _Fld21823RRef = 0x997DB49691D57EFD11EC9C58903BD50D
)) as [Статус партнера]
, (SELECT _Description FROM [MAG_2019].[dbo].[_Reference133X1] r1
WHERE r1._IDRRef =
(SELECT _Fld21824_RRRef FROM [MAG_2019].[dbo].[_Reference215_VT21821X1]
WHERE _Reference215_IDRRef = p._IDRRef AND _Fld21823RRef = 0x998DB49691D57EFD11F0A297E91F7A80
)) as [Статус по динамике 2025/2024]
, (SELECT _Description FROM [MAG_2019].[dbo].[_Reference133X1] r1
WHERE r1._IDRRef =
(SELECT _Fld21824_RRRef FROM [MAG_2019].[dbo].[_Reference215_VT21821X1]
WHERE _Reference215_IDRRef = p._IDRRef AND _Fld21823RRef = 0x998DB49691D57EFD11F0A29821A66692
)) as [Статус по обороту 2025]
,(SELECT _Description
FROM MAG_2019.dbo._Reference133X1 AS r1
WHERE (_IDRRef =
(SELECT _Fld21824_RRRef
FROM MAG_2019.dbo._Reference215_VT21821X1 AS _Reference215_VT21821X1_1
WHERE (_Reference215_IDRRef = p._IDRRef) AND (_Fld21823RRef = 0x80D40CC47A052DFD11E6B18C02F2A68E)))) AS Category
, case when p._Fld21805 =0x01 then 1 else 0 end as 'client' /**/
, case when p._Fld21807 =0x01 then 1 else 0 end as 'supplier' /**/
, case when p._Fld21810 =0x01 then 1 else 0 end as 'konkurent' /**/
, p._IDRRef as partner_ref
, DATEADD(year, -2000, p._Fld21804) as [ДатаРегистрации]
, (select Sg._Description FROM [MAG_2019].[dbo].[_Reference286] Sg /*Справочник Сегменты клиентов*/
where Sg._IDRRef =
(select top 1 _Fld13942RRef from [MAG_2019].[dbo].[_InfoRg13941] /*РС Партнеры Сегмента*/
where _Fld13943RRef = p._IDRRef)) as [Сегмент]
FROM [mag_2019].[dbo]._Reference215X1 p /* партнер */
LEFT JOIN [mag_2019].[dbo].[_Reference48] r /* бизнес регион */
ON p._Fld21802RRef = r._IDRRef
/*LEFT JOIN [MAG_2019].[dbo].[_Reference215_VT21821X1] ref -- доп реквизиты партнеров
ON ref._Reference215_IDRRef = p._IDRRef
LEFT JOIN [MAG_2019].[dbo].[_Reference181] r1 --справочник направления деятельности
ON r1._IDRRef = ref._Fld21824_RRRef
where 0x997EB49691D57EFD11ECC5660A03B95B = ref._Fld21823RRef -- отбираем по доп реквизиту "направление деятельности(битрикс24)" таблица chr1109
*/
WHERE p._Marked = 0
)
SELECT
b.[1c_id]
,b.[_Code]
,b.[partner_id]
,b.[bitrix_id]
,b.[partner]
,b.[region]
,b.[oblast]
,b.[okrug]
,b.[1c_manager_id]
,b.[Основной менеджер]
,b.[manager_id]
,b.[Направление деятельности]
,b.[Что шьют?]
,b.[Статус партнера]
,b.[Статус по динамике 2025/2024]
,b.[Статус по обороту 2025]
,b.[Category]
,b.[client]
,b.[supplier]
,b.[konkurent]
,b.[partner_ref]
,b.[ДатаРегистрации]
,b.[Сегмент]
, (select top 1 [Период] FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[PartnerId] = b.[partner_id]
AND [Вид операции] = 'Расход' AND [Статья] = 'Реализация'
ORDER BY [Период] ASC) as [Дата первого заказа]
FROM base b
GO
/****** Object: View [analytics].[Заявки_без_проектаеоплачено] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [analytics].[Заявки_без_проектаеоплачено] as
SELECT [Номер заявки]
,[Дата создания]
,[Дата оплаты план]
,[Статус]
,[Валюта]
,[Статья ДДС]
,[1c_dds_id]
,[dds id]
,[Сумма]
,[Сумма в руб.]
,[Оплачено]
,[Хоз. операция]
,[Комментарий заявки]
,[Комментарий расшифровки]
,[Партнер]
,[Получатель]
,[Форма оплаты]
,[organization]
,[project id]
,[1c_project_id]
FROM [mag_pbi].[analytics].[Заявки_на_оплату_поабличной_части]
WHERE [Оплачено]=0 AND [project id] is null AND [Дата оплаты план] >= '2024-06-01'
GO
/****** Object: View [pbi].[Резервы] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbi].[Резервы]
AS
WITH base AS (
SELECT
CAST(GETDATE() AS DATE) AS [Дата обновления],
so._Fld17246RRef, -- оставляем GUID для связи с упаковкой
s._Description as [Склад],
-- считаем суммы один раз
--SUM(CASE WHEN _RecordKind = 1 THEN -so._Fld17250 ELSE so._Fld17249 END) as [В наличии, шт],
SUM(CASE WHEN _RecordKind = 1 THEN -so._Fld17250 ELSE so._Fld17250 END) as [В резерве со склада, шт],
SUM(CASE WHEN _RecordKind = 1 THEN -so._Fld17251 ELSE so._Fld17251 END) as [В резерве под заказ, шт]
FROM [MAG_2019].[dbo].[_AccumRg17245] so /*РегистрНакопления.СвободныеОстатки*/
INNER JOIN [mag_pbi].[pbi].[sklad_2019] s /*склад*/ ON s._IDRRef = so._Fld17248RRef
WHERE (so._Fld17250 > 0 OR so._Fld17251 > 0) AND so._Period > '01-01-4025'
GROUP BY so._Fld17246RRef, s._Description
)
SELECT
b.[Дата обновления],
-- строим artic_id только здесь
LOWER(CONCAT(
SUBSTRING ( convert(nvarchar(36), b._Fld17246RRef, 2), 25,8),'-',
SUBSTRING ( convert(nvarchar(36), b._Fld17246RRef, 2),21,4),'-',
SUBSTRING ( convert(nvarchar(36), b._Fld17246RRef, 2),17,4),'-',
SUBSTRING ( convert(nvarchar(36), b._Fld17246RRef, 2),1,4),'-',
SUBSTRING ( convert(nvarchar(36), b._Fld17246RRef, 2),5,12)
)) as [artic_id],
b.[Склад],
--b.[В резерве со склада, шт],
--b.[В резерве под заказ, шт],
--b.[В наличии, шт],
/*b.[В наличии, шт] /
CASE
WHEN up.upakovka = 0 OR up.upakovka IS NULL THEN 1
ELSE up.upakovka
END as [В наличии, упак],*/
(b.[В резерве со склада, шт] + b.[В резерве под заказ, шт]) as [В резерве всего, шт],
(b.[В резерве со склада, шт] + b.[В резерве под заказ, шт]) /
CASE
WHEN up.upakovka = 0 OR up.upakovka IS NULL THEN 1
ELSE up.upakovka
END as [В резерве всего, упак]
FROM base b
OUTER APPLY (
SELECT TOP 1 upakovka
FROM mag_pbi.pbi.[БазоваяУпаковка] up
WHERE up._OwnerID_RRRef = b._Fld17246RRef
) up
WHERE b.[В резерве со склада, шт] <> 0 OR b.[В резерве под заказ, шт] <> 0;
GO
/****** Object: View [analytics].[get_nomenclature_by_group] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE view [analytics].[get_nomenclature_by_group] as
SELECT
n.code as code,
n.description as 'description',
n.artic as artic,
g.path,
--concat('https://media.magok.ru/', f._Fld21201) as 'photo',
n.photo,
n.Производитель as 'manufacturer',
n.Бренд as 'brand',
n.[1c_id] as [1C_id],
n.[Статус] as status,
n.[АБС статус] as ABC
, wb._Fld28246 as [WB]
, wbip._Fld28246 as [WBIP]
, ozon._Fld28246 as [OZON]
, ozonip._Fld28246 as [OZONIP]
--, factory.Количество as factoryQuantity
--, way.Количество as onwayQuantity
, n.[max_year_quantity]
, n.[max_quarter_quantity]
, n.[Цена учетная, руб]
, n.[Цена учетная, usd]
, n.[СКО_МесячныхПродаж]
, n.cenovaya_gruppa
from [mag_pbi].[pbi].nomenclature n /*номенклатура*/
--INNER JOIN [mag_reports].[sales].[w_groups] g
INNER JOIN mag_pbi.pbi.groups g
ON n.[1c_group] = g.[1c_id]
/*LEFT JOIN [mag_2019].[dbo]._Reference191X1 f /*номенклатураПрисоедФайлы*/
ON f._IDRRef = n._Fld21086RRef*/
LEFT JOIN [MAG_2019].[dbo].[_InfoRg28243X1] wbip -- идентификаторы объектов во внешних системах
ON wbip.[_Fld28244_RRRef] = n.[1c_id] AND wbip._Fld28245RRef = 0x997FB49691D57EFD11ED51180696FB46
LEFT JOIN [MAG_2019].[dbo].[_InfoRg28243X1] ozonip -- идентификаторы объектов во внешних системах
ON ozonip.[_Fld28244_RRRef] = n.[1c_id] AND ozonip._Fld28245RRef = 0x9987B49691D57EFD11EED582B1EEAA3C
LEFT JOIN [MAG_2019].[dbo].[_InfoRg28243X1] ozon -- идентификаторы объектов во внешних системах
ON ozon.[_Fld28244_RRRef] = n.[1c_id] AND ozon._Fld28245RRef = 0xAEC3B496910DCFD611EC0EF79C3B458F
LEFT JOIN [MAG_2019].[dbo].[_InfoRg28243X1] wb -- идентификаторы объектов во внешних системах
ON wb.[_Fld28244_RRRef] = n.[1c_id] AND wb._Fld28245RRef = 0xAEC3B496910DCFD611EC000B54C819F4
/*
LEFT JOIN [mag_pbi].[pbi].[Заказо_в_производстве] factory
ON factory.[1C_id] = n.[1c_id]
LEFT JOIN [mag_pbi].[pbi].[Заказо_в_пути] way
ON way.[1C_id] = n.[1c_id]
*/
--WHERE n._Folder = 1
--AND g.path like 'Игрушки%'
/*
SELECT
n.code
, n.description
, n.artic
, g.path
, n.photo
FROM [mag_pbi].[pbi].[nomenclature] n
INNER JOIN [mag_reports].[sales].[w_groups] g
ON n.group_id = g.group_id
*/
GO
/****** Object: View [analytics].[get_quantity_by_group] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE view [analytics].[get_quantity_by_group] as
SELECT
n.Code as code
, s._Description as sklad
, s.[Категория] as [Категория склада]
--, sum( [_Fld17491]*(case _RecordKind when 0 then 1 when 1 then -1 end) ) as quantity
, convert( decimal(10,2), sum( [_Fld17491]*(case _RecordKind when 0 then 1 when 1 then -1 end) ) ) as quantity_base
, convert(
decimal(10,2), sum( [_Fld17491]*(case _RecordKind when 0 then 1 when 1 then -1 end) )
/
(case
(SELECT TOP 1 upakovka FROM pbi.[БазоваяУпаковка] up WHERE n.[1c_id] = up._OwnerID_RRRef)
when 0 then 1
when null then 1
else (SELECT TOP 1 upakovka FROM pbi.[БазоваяУпаковка] up WHERE n.[1c_id] = up._OwnerID_RRRef)
end)
) as quantity
, g.path
FROM [mag_2019].[dbo].[_AccumRg17484] t /*регистр товары на складах*/
INNER JOIN [mag_pbi].[pbi].nomenclature n /*номенклатура*/ ON n.[1c_id] = t._Fld17485RRef
INNER JOIN [mag_pbi].[pbi].[groups] g ON n.[1c_group] = g.[1c_id]
INNER JOIN [mag_pbi].[pbi].[sklad_2019] s /*склад*/ ON s._IDRRef = t._Fld17488RRef
WHERE s.[Категория]='Хранение' OR s.[Категория]='Фасовка' OR s.[Категория] = 'Розничная точка' --g.path like 'Игрушки%'
GROUP BY n.code, s._Description, s.[Категория], g.path, n.[1c_id]
GO
/****** Object: View [analytics].[Бюджет ДДС] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [analytics].[Бюджет ДДС] as
SELECT
DATEADD(year, -2000,[_Period]) as 'Месяц план'
, [_Fld28390RRef] as '1c_project_id'
--, CONVERT(VARCHAR(64), [_Fld28390RRef], 1)
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), [_Fld28390RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), [_Fld28390RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld28390RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld28390RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld28390RRef], 2),5,12) )) as 'project id'
,[_Fld28391] as 'Сумма'
, dds._Description as 'Статья ДДС'
, dds._IDRRef as '1c_dds_id'
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), dds._IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), dds._IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), dds._IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), dds._IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), dds._IDRRef, 2),5,12) )) as 'dds id'
, CASE budget._Fld33808Rref
WHEN 0xB3F668344C8DBA57427B6BC0D450CEA1 THEN 'Наличные'
WHEN 0xB5530D030E40BC264A41E266D1E84B1A THEN 'Безнал'
END as [Форма оплаты]
FROM [MAG_2019].[dbo].[_InfoRg28389] budget /* РегистрСведений.БюджетДДС */
LEFT JOIN [MAG_2019].[dbo].[_Reference316] dds /*Справочник.СтатьиДвиженияДенежныхСредств*/ ON dds._IDRRef = budget.[_Fld33803RRef]
--WHERE _Active = 1
GO
/****** Object: View [analytics].[Ожидаемый расход] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [analytics].[Ожидаемый расход] as
SELECT
[Дата оплаты план]
,[Статья ДДС]
,[Сумма в руб.] / 1000 [Сумма в руб.]
,[Форма оплаты]
, 'Заявка' as [Тип]
, [Хоз. операция]
FROM [mag_pbi].[analytics].[Заявки_без_проектаеоплачено]
UNION ALL
SELECT [Месяц план]
,[Статья ДДС]
,[Сумма] / 1000 [Сумма]
,[Форма оплаты]
, 'Бюджет' as [Тип]
, 'Бюджет' as [Хоз. операция]
FROM [mag_pbi].[analytics].[Бюджет ДДС]
GO
/****** Object: View [analytics].[get_mp_quantity_by_group] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE view [analytics].[get_mp_quantity_by_group] as
SELECT
t.code
, [Узел]
, [Склад]
, g.path
, [Доступное кол-во] as quantity
, [Доступное кол-во]
*
(case
(SELECT TOP 1 upakovka FROM pbi.[БазоваяУпаковка] up WHERE t.[1c_id] = up._OwnerID_RRRef)
when 0 then 1
when null then 1
else (SELECT TOP 1 upakovka FROM pbi.[БазоваяУпаковка] up WHERE t.[1c_id] = up._OwnerID_RRRef)
end)
as quantity_base
--, (SELECT TOP 1 [Доступное кол-во] FROM [mag_pbi].[analytics].[Внешние остатки] v WHERE v.[code]=t.[code] AND v.[Узел]=t.[Узел] AND v.[Склад]=t.[Склад] ORDER BY [Дата обновления] DESC) as quantity
FROM [mag_pbi].[analytics].[Внешние остатки] as t
INNER JOIN [mag_pbi].[pbi].[groups] g ON t.group_id = g.[1c_id]
WHERE t.[Дата обновления] >= FORMAT(GETDATE(), 'yyyy-MM-dd')
GO
/****** Object: View [analytics].[ЗаявкиТовары] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[ЗаявкиТовары]
AS
WITH req AS
(
SELECT
z._IDRRef AS zayavka_id,
/* Дата заявки без времени */
CONVERT(date, DATEADD(YEAR, -2000, z._Date_Time)) AS zayavka_date,
z._Number AS zayavka_number,
z._Fld34044RRef AS zayavka_status_ref,
t._LineNo34053 AS line_no,
t._Fld34054RRef AS nom_1c_id,
CONVERT(decimal(18, 3), t._Fld34056) AS qty_initial
FROM MAG_2019.dbo._Document34036 z
JOIN MAG_2019.dbo._Document34036_VT34052 t
ON t._Document34036_IDRRef = z._IDRRef
WHERE
z._Posted = 1
AND z._Marked = 0
),
deduct AS
(
SELECT
tpo._Fld34117RRef AS zayavka_id,
tpo._Fld3473RRef AS nom_1c_id,
SUM(CONVERT(decimal(18, 3), tpo._Fld3477)) AS qty_deduct
FROM MAG_2019.dbo._Document408X1 po
JOIN MAG_2019.dbo._Document408_VT3470X1 tpo
ON tpo._Document408_IDRRef = po._IDRRef
WHERE
po._Posted = 1
AND po._Marked = 0
AND tpo._Fld3491RRef = 0
AND po._Fld3417RRef IN
(
0x99FD3E66AA3EFB074984044D5A69CFD5, /* В пути */
0xA55F81415BA33BC24A053ED26C6EC02E, /* Закрыт */
0xB2A33CF1C7286AF3463F20D54AE5A0BC, /* Выгружен на складе */
0x97B9E76E7BCACEF3450504B1FAFC3230 /* Принят */
)
GROUP BY
tpo._Fld34117RRef,
tpo._Fld3473RRef
)
SELECT
r.zayavka_date AS [Дата заявки],
r.zayavka_number AS [Номер заявки],
CASE r.zayavka_status_ref
WHEN 0xB9D8F6098E165A4945FD453A8394D9A6 THEN N'Планируется'
WHEN 0x89144CF303169EA446E30A9CFAC257D1 THEN N'На согласовании'
WHEN 0x8734648F71AB3BE645DCAC11CF62F9AE THEN N'Выполнено'
WHEN 0xA6CC3F7ADAD37C7D473BFD1D132A96E8 THEN N'В производстве'
ELSE N'Неизвестно'
END AS [Статус заявки],
r.line_no AS line_no,
/* nom_1c_id (сырой) */
r.nom_1c_id AS nom_1c_id,
/* nom_1c_id в нужном формате */
LOWER(
SUBSTRING(CONVERT(nvarchar(36), r.nom_1c_id, 2), 25, 8) + '-' +
SUBSTRING(CONVERT(nvarchar(36), r.nom_1c_id, 2), 21, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), r.nom_1c_id, 2), 17, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), r.nom_1c_id, 2), 1, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), r.nom_1c_id, 2), 5, 12)
) AS artic_id,
n._Description AS [Номенклатура],
n._Code AS code,
n._Fld21043 AS [Артикул],
g.g,
g.path,
r.qty_initial AS [Количество начальное],
CONVERT(decimal(18, 3), r.qty_initial / pack.base_pack) AS [Кол. упаковок начальное],
ISNULL(d.qty_deduct, 0) AS [Количество заказано (вычет)],
CONVERT(decimal(18, 3), ISNULL(d.qty_deduct, 0) / pack.base_pack) AS [Кол. упаковок заказано (вычет)],
CONVERT(decimal(18, 3), r.qty_initial - ISNULL(d.qty_deduct, 0)) AS [Количество текущее],
CONVERT(decimal(18, 3), (r.qty_initial - ISNULL(d.qty_deduct, 0)) / pack.base_pack) AS [Кол. упаковок текущее]
FROM req r
JOIN MAG_2019.dbo._Reference188X1 n
ON n._IDRRef = r.nom_1c_id
LEFT JOIN pbi.[groups] g
ON n._ParentIDRRef = g.[1c_id]
OUTER APPLY
(
SELECT TOP 1
ISNULL(NULLIF(up.upakovka, 0), 1) AS base_pack
FROM pbi.[БазоваяУпаковка] up
WHERE up._OwnerID_RRRef = r.nom_1c_id
) AS pack
LEFT JOIN deduct d
ON d.zayavka_id = r.zayavka_id
AND d.nom_1c_id = r.nom_1c_id
;
GO
/****** Object: Table [analytics].[forecast_scenarios] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[forecast_scenarios](
[scenario_id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](200) NOT NULL,
[description] [nvarchar](1000) NULL,
[created_at] [datetime2](0) NOT NULL,
[created_by] [nvarchar](128) NULL,
[params_json] [nvarchar](max) NULL,
[active] [bit] NOT NULL,
PRIMARY KEY CLUSTERED
(
[scenario_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
/****** Object: View [analytics].[get_forecast_scenarios] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [analytics].[get_forecast_scenarios] as
SELECT [scenario_id]
,[name]
,[description]
,[created_by]
FROM [mag_pbi].[analytics].[forecast_scenarios]
WHERE active = 1
GO
/****** Object: View [pbi].[ПартнерыКонтрагенты] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
create view [pbi].[ПартнерыКонтрагенты] as
SELECT
_Description
, _IDRRef
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), c._IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), c._IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), c._IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), c._IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), c._IDRRef, 2),5,12) ))as cagent_id
,c._Fld20612RRef as partner_1cid
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), c._Fld20612RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), c._Fld20612RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), c._Fld20612RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), c._Fld20612RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), c._Fld20612RRef, 2),5,12) ))as partner_id
from MAG_2019.dbo._Reference168 c
GO
/****** Object: View [analytics].[ЗаказыВЗаявках] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[ЗаказыВЗаявках]
AS
SELECT
CONVERT(date, DATEADD(YEAR, -2000, z._Date_Time)) AS [Дата заказа поставщику],
z._Number AS [Номер заказа поставщику],
/* заявка из ТЧ */
CASE WHEN za._IDRRef IS NOT NULL THEN t._Fld34117RRef END AS [Заявка_1c_id],
ISNULL(za._Number, N'Без заявки') AS [Номер заявки],
CASE
WHEN za._IDRRef IS NOT NULL THEN CONVERT(date, DATEADD(YEAR, -2000, za._Date_Time))
END AS [Дата заявки],
/* Контрагент (текст) */
r._Description AS [Контрагент],
/* cagent_id (строка GUID) из 1С-ссылки контрагента */
LOWER(
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 25, 8) + '-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 21, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 17, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 1, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 5, 12)
) AS cagent_id,
pc.partner_1cid,
pc.partner_id,
CASE z._Fld3417RRef
WHEN 0xB9440E49408A17534955319EBF0DAE60 THEN N'Согласован'
WHEN 0x99FD3E66AA3EFB074984044D5A69CFD5 THEN N'В пути'
WHEN 0x973A5675AC6A17F64DA37EC6C22FC12C THEN N'Подтвержден'
WHEN 0xA55F81415BA33BC24A053ED26C6EC02E THEN N'Закрыт'
WHEN 0xA87A8B13710A30B447DFF1614E84D167 THEN N'В производстве'
WHEN 0x8542BD023FE7B70E4613087D853F26E4 THEN N'Тех. заказ'
WHEN 0xB38AD6232E2D17D44287D9924E5E6DF2 THEN N'На согласовании'
WHEN 0xB2A33CF1C7286AF3463F20D54AE5A0BC THEN N'Выгружен на складе'
ELSE N'Неизвестно'
END AS [Статус],
/* номенклатура */
t._Fld3473RRef AS nom_1c_id,
/* nom_1c_id в нужном формате */
LOWER(
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 25, 8) + '-' +
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 21, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 17, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 1, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 5, 12)
) AS artic_id,
n._Description AS [Наименование],
n._Code AS code,
n._Fld21043 AS [Артикул],
t._Fld3477 AS [Количество],
CONVERT(decimal(10, 2), t._Fld3477 / pack.base_pack) AS [Кол. упаковок],
t._Fld3480 AS [Цена],
t._Fld3481 AS [Сумма],
g.g,
g.path,
/* Валюта + Сумма в руб. */
v._Description AS [Валюта],
CASE v._Description
WHEN 'USD' THEN t._Fld3481 * (
SELECT rate
FROM [analytics].[Курсы валют на сегодня]
WHERE currency = 'USD2'
)
ELSE t._Fld3481 * (
SELECT rate
FROM [analytics].[Курсы валют на сегодня]
WHERE currency = v._Description
)
END AS [Сумма в руб.]
FROM [MAG_2019].dbo._Document408X1 z
JOIN [MAG_2019].dbo._Document408_VT3470X1 t
ON t._Document408_IDRRef = z._IDRRef
LEFT JOIN [MAG_2019].dbo._Document34036 za
ON za._IDRRef = t._Fld34117RRef
LEFT JOIN [MAG_2019].dbo._Reference168 r
ON r._IDRRef = z._Fld3410RRef
LEFT JOIN [pbi].[ПартнерыКонтрагенты] pc
ON pc.cagent_id = LOWER(
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 25, 8) + '-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 21, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 17, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 1, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 5, 12)
)
JOIN [MAG_2019].dbo._Reference188X1 n
ON n._IDRRef = t._Fld3473RRef
LEFT JOIN [MAG_2019].dbo._Reference50 v
ON v._IDRRef = z._Fld3414RRef
LEFT JOIN [pbi].[groups] g
ON n._ParentIDRRef = g.[1c_id]
OUTER APPLY (
SELECT TOP 1
ISNULL(NULLIF(up.upakovka, 0), 1) AS base_pack
FROM [pbi].[БазоваяУпаковка] up
WHERE up._OwnerID_RRRef = t._Fld3473RRef
) AS pack
WHERE
z._Posted = 1
AND z._Marked = 0
AND t._Fld3491RRef = 0;
GO
/****** Object: View [analytics].[get_sales_monthly_by_group] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
/*
select
sum([Сумма])
, (SELECT sum([Сумма]) FROM [mag_pbi].[pbi].[Стоимость обработки заказа] obr WHERE obr.[1c_id] = s.[1c_id])
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE [Вид операции]='Расход' AND [Статья]='Реализация'
AND code = 'УТ-00210548'
GROUP BY s.[1c_id]
*/
CREATE view [analytics].[get_sales_monthly_by_group] as
SELECT
sales.date
, n._Code as code
, g.path
, sum(sales.sum) as sum
, sum(sales.quantity) as quantity
, sum(sales.quantity_base) as quantity_base
FROM
(
select
FORMAT([Период], 'yyyy-MM') as date
, s.Сумма as sum
, s.[1c_id]
, s.Количество as quantity_base
, s.КоличествоУпаковок as quantity
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE [Вид операции]='Расход' AND [Статья]='Реализация'
) as sales
INNER JOIN [mag_2019].[dbo]._Reference188X1 n
ON n._IDRRef = sales.[1c_id]
INNER JOIN [mag_pbi].[pbi].[groups] g ON n._ParentIDRRef = g.[1c_id]
GROUP BY sales.date, n._Code, g.path
GO
/****** Object: View [analytics].[get_mpcosts_monthly_by_group] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [analytics].[get_mpcosts_monthly_by_group] as
SELECT
sales.date
, n.code as code
, g.path
, sum(sales.sum) as sum
FROM
(
select
FORMAT([date], 'yyyy-MM') as date
, s.Сумма as sum
, s.[1c_id]
FROM [mag_pbi].[pbi].[Стоимость обработки заказа] s
) as sales
INNER JOIN [mag_pbi].[pbi].nomenclature n
ON n.[1c_id] = sales.[1c_id]
INNER JOIN [mag_pbi].[pbi].[groups] g ON n.[1c_group] = g.[1c_id]
GROUP BY sales.date, n.code, g.path
GO
/****** Object: Table [analytics].[deficit_proposal] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[deficit_proposal](
[id] [int] IDENTITY(1,1) NOT NULL,
[scenario_id] [int] NOT NULL,
[group_name] [nvarchar](100) NOT NULL,
[1c_id] [binary](16) NOT NULL,
[code] [nvarchar](100) NOT NULL,
[place_month] [date] NOT NULL,
[arrival_month] [date] NOT NULL,
[demand_window_C] [decimal](18, 3) NOT NULL,
[projected_stock_at_T] [decimal](18, 3) NOT NULL,
[order_qty] [decimal](18, 3) NOT NULL,
[updated_at] [datetime2](0) NOT NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY],
CONSTRAINT [UX_deficit_proposal] UNIQUE NONCLUSTERED
(
[scenario_id] ASC,
[group_name] ASC,
[1c_id] ASC,
[arrival_month] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: View [analytics].[deficit_orders] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[deficit_orders] AS
SELECT
[scenario_id] as [scenario_id]
, 'Дефицит' as [status]
, d.[1c_id]
, [place_month] as [order_date]
, 'руб.' as [currency]
, d.[code]
, [order_qty]
, n.[Цена учетная, руб] as [price]
, d.order_qty * n.[Цена учетная, руб] as [sum]
, [arrival_month]
FROM [mag_pbi].[analytics].[deficit_proposal] d
INNER JOIN pbi.nomenclature n ON n.[1c_id] = d.[1c_id]
GO
/****** Object: View [pbi].[nomeclature_for_pbi] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbi].[nomeclature_for_pbi] as
SELECT
n.[artic_id]
,n.[1c_id]
,n.[code]
,n.[cenovaya_gruppa]
,n.[description]
,n.[artic]
,n.[vid_nomen]
,n.[Производитель]
,n.[group_id]
,n.[1c_group]
,n.[card]
,n.[photo]
,n.[base]
,n.[Знаменатель веса]
,n.[Числитель веса]
,n.[Знаменатель объема]
,n.[Числитель объема]
,n.[Количество упак в коробе]
,n.[Количество упак в кванте]
,n.[id magok]
,n.[Товарныйменеджера]
,n.[МенеджерПоЗакупкам2]
,n.[РуководительНаправления]
,n.[Менеджер OZON]
,n.[Менеджер WB]
,n.[АБС статус]
,n.[АБС план]
,n.[ABC Парето]
,n.[XYZ статус 12м]
,n.[Комментарий для матрицы]
,n.[Коллекция]
,n.[Ценовой сегмент Магок]
,n.[Ценовой сегмент МП]
,n.[Кол-во упак в заказе Магок]
,n.[Бренд]
,n.[Тип товара]
,n.[Метка]
,n.[Ширина, мм]
,n.[Цвет]
,n.[Номер цвета]
,n.[Тип шнура]
,n.[Тип плетения]
,n.[Размер]
,n.[Особенность]
,n.[Форма]
,n.[Ширина]
,n.[Формат упаковки]
,n.[Макс. запас]
,n.[Мин. запас]
,n.[QTY PACKS]
,n.[Да/Нет Собственное пр-во]
,n.[ID OZON]
,n.[ID WB]
,n.[WB]
,n.[Ozon]
,n.[СТМ]
,n.[Выгружать на я.маркет]
,n.[Выгружать в Google Merchant]
,n.[Товар МП]
,n.[Неликвид]
,n.[Статус]
,n.[Сквозной цвет]
,n.[Базовая упаковка]
,n.[Качество контента Ozon]
,n.[Качество контента WB]
,n.[Качество контента WB by Ozon]
,n.[Качество контента Magok]
,n.[Вид номенклатуры]
,n.[max_year_quantity]
,n.[max_quarter_quantity]
,n.[Цена учетная, руб]
,n.[Цена учетная, usd]
,n.[СредниеМесячныеПродажи]
,n.[СКО_МесячныхПродаж]
--,n.[minAvailableQty10]
,n.[minAvailableQty]
--,analytics.[1c_id]
--,analytics.[Code]
, [Продано шт]
, [Остаток дней продаж]
, [Дней в продаже / год]
, [Дней в продаже / квартал]
, [Продажи / квартал, руб.]
, [Продажи шт / день]
--, [Продажи шт / день опт]
--, [Остаток дней продаж опт]
, [Продажи / год, руб.]
, [ТН / год, руб.]
, [ТН / квартал, руб.]
, [ТН / месяц, руб.]
, [Стоимость МП год, руб.]
, [%ТН год, руб.]
, [учетная сумма / год, руб.]
, [учетная сумма / квартал, руб.]
, [Оплаченный остаток]
, [Рентабельность / год]
, [Рентабельность / квартал]
, [Рентабельность / будущий год]
--, [Рентабельность по остатку / год]
--, [Рентабельность по остатку / квартал]
--, [Рентабельность по остатку / будущий год]
FROM mag_pbi.pbi.nomenclature n
LEFT JOIN [mag_pbi].[analytics].[аналитика за 365 дн.] analytics /* Аналитика за 365 дн */ ON analytics.[1c_id] = n.[1c_id]
GO
/****** Object: View [pbi].[Заказы в заявках] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbi].[Заказы в заявках]
AS
SELECT [Дата заказа поставщику]
,[Номер заказа поставщику]
--,[Заявка_1c_id]
,[Номер заявки]
,[Дата заявки]
,[Контрагент]
--,[cagent_id]
--,[partner_1cid]
,[partner_id]
,[Статус]
--,[nom_1c_id]
,[artic_id]
--,[Наименование]
--,[code]
--,[Артикул]
,[Количество]
,[Кол. упаковок]
,[Цена]/1000 as 'Цена'
,[Сумма]/1000 as 'Сумма'
--,[g]
--,[path]
,[Количество] * (SELECT n._Fld21092 / ISNULL(NULLIF(n._Fld21089, 0), 1) FROM mag_2019.dbo._Reference188X1 n WHERE [nom_1c_id] = n._IDRRef) as [Объем, м3]
,[Валюта]
,[Сумма в руб.]/1000 as 'Сумма в руб'
FROM [mag_pbi].[analytics].[ЗаказыВЗаявках]
WHERE [g] NOT LIKE '*Внутренняя'
AND [Статус] NOT IN ('Закрыт')
GO
/****** Object: Table [pbi].[СебестоимостьПродажиОт2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[СебестоимостьПродажиОт2022](
[id] [int] IDENTITY(1,1) NOT NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](38, 15) NULL,
[СуммаБезНДС] [numeric](38, 15) NULL,
[СуммаРучнойСкидки] [numeric](38, 15) NULL,
[СуммаАвтоСкидки] [numeric](38, 15) NULL,
[Закупка] [numeric](38, 15) NULL,
[Закупка, usd2] [numeric](38, 15) NULL,
[Таможня] [numeric](38, 15) NULL,
[ЕАЭС] [numeric](38, 15) NULL,
[Учетная цена] [numeric](38, 15) NULL,
[Учетная цена USD2+2] [numeric](38, 15) NULL,
[Маркетинг] [numeric](38, 15) NULL,
[Доставка] [numeric](38, 15) NULL,
[НДС] [numeric](38, 15) NULL,
[Сборка] [numeric](38, 15) NULL,
[ЗатратыМП] [numeric](38, 15) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](38, 15) NULL,
[Учетная стоимость USD2+2] [numeric](38, 15) NULL,
[sebes_id] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: View [pbi].[Себестоимость+СебестоимостьПродажОт2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*where [Вид операции] = 'Продажа'
and sebesSales.ЗатратыМП <> 0 */
CREATE VIEW [pbi].[Себестоимость+СебестоимостьПродажОт2022]
AS
SELECT
[id],
[Период],
[Статья],
[Вид операции],
[Хоз операция],
[Организация],
[Партнер],
[PartnerId],
[Контрагент],
[Менеджер],
[Тип документа],
[Номер документа],
[Валюта документа],
[Ценовая группа],
[1c_document_id],
[1c_id],
[artic_id],
[Количество],
[Сумма],
[СуммаБезНДС],
[СуммаРучнойСкидки],
[СуммаАвтоСкидки],
CASE
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND PriceListPrice IS NOT NULL THEN -(PriceListPrice * [Количество]) / 1000
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND AnyPrice IS NOT NULL THEN -(AnyPrice * [Количество]) / 1000
ELSE [Закупка]
END AS [Закупка],
CASE
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND PriceListPrice IS NOT NULL THEN -(PriceListPrice / [Курс usd2] * [Количество]) / 1000
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND AnyPrice IS NOT NULL THEN -(AnyPrice / [Курс usd2] * [Количество]) / 1000
ELSE [Закупка, usd2]
END AS [Закупка, usd2],
[Курс usd2],
[Курс usd],
[Таможня],
CASE
WHEN ([Закупка] = 0 AND [Вид операции] = 'Продажа') AND PriceListPrice IS NOT NULL THEN PriceListPrice / 1000
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND AnyPrice IS NOT NULL THEN AnyPrice / 1000
ELSE [Учетная цена]
END AS [Учетная цена],
CASE
WHEN ([Закупка] = 0 AND [Вид операции] = 'Продажа') AND PriceListPrice IS NOT NULL THEN PriceListPrice / [Курс usd2] / 1000
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND AnyPrice IS NOT NULL THEN AnyPrice / [Курс usd2] / 1000
ELSE [Учетная цена USD2+2]
END AS [Учетная цена USD2+2],
CASE
WHEN ([Закупка] = 0 AND [Вид операции] = 'Продажа') AND PriceListPrice IS NOT NULL THEN (PriceListPrice * [Количество]) / 1000
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND AnyPrice IS NOT NULL THEN (AnyPrice * [Количество]) / 1000
ELSE [Учетная стоимость]
END AS [Учетная стоимость],
CASE
WHEN ([Закупка] = 0 AND [Вид операции] = 'Продажа') AND PriceListPrice IS NOT NULL THEN (PriceListPrice / [Курс usd2] * [Количество]) / 1000
WHEN [Закупка] = 0 AND [Вид операции] = 'Продажа' AND AnyPrice IS NOT NULL THEN (AnyPrice / [Курс usd2] * [Количество]) / 1000
ELSE [Учетная стоимость USD2+2]
END AS [Учетная стоимость USD2+2],
[Заказ закрыт],
[Номер заказа],
[Доставка],
[НДС],
[Сборка],
PriceListPrice
FROM
(SELECT
sebes.id,
sebes.Период,
sebes.Статья,
sebes.[Вид операции],
sebes.[Хоз операция],
sebes.Организация,
sebes.Партнер,
sebes.PartnerId,
sebes.Контрагент,
sebes.Менеджер,
sebes.[Тип документа],
sebes.[Номер документа],
sebes.[Валюта документа],
sebes.[Ценовая группа],
sebes.[1c_document_id],
sebes.[1c_id],
sebes.artic_id,
sebes.Количество,
sebes.Сумма AS Сумма,
sebes.СуммаБезНДС,
sebes.СуммаРучнойСкидки,
sebes.СуммаАвтоСкидки,
CASE
WHEN sebesSales.sZakupka IS NOT NULL THEN sebesSales.sZakupka
ELSE [Закупка]
END AS Закупка,
CASE
WHEN sebesSales.sZakupkaUsd2 IS NOT NULL THEN sebesSales.sZakupkaUsd2
ELSE [Закупка, usd2]
END AS [Закупка, usd2],
sebes.[Курс usd2],
sebes.[Курс usd],
CASE
WHEN sebesSales.customs IS NOT NULL THEN sebesSales.customs
ELSE [Таможня]
END AS Таможня,
CASE
WHEN sebesSales.uchetprice IS NOT NULL THEN sebesSales.uchetprice
ELSE [Учетная цена]
END AS [Учетная цена],
CASE
WHEN sebesSales.uchetpriceUSD22 IS NOT NULL THEN sebesSales.uchetpriceUSD22
ELSE [Учетная цена USD2+2]
END AS [Учетная цена USD2+2],
CASE
WHEN sebesSales.uchetstoimost IS NOT NULL THEN sebesSales.uchetstoimost
ELSE [Учетная стоимость]
END AS [Учетная стоимость],
CASE
WHEN sebesSales.uchetstoimostUSD22 IS NOT NULL THEN sebesSales.uchetstoimostUSD22
ELSE [Учетная стоимость USD2+2]
END AS [Учетная стоимость USD2+2],
sebes.[Заказ закрыт],
sebes.[Номер заказа],
CASE
WHEN sebesSales.delivery IS NOT NULL THEN sebesSales.delivery
ELSE [Доставка]
END AS Доставка,
CASE
WHEN sebesSales.NAT IS NOT NULL THEN sebesSales.NAT
ELSE [НДС]
END AS НДС,
CASE
WHEN sebesSales.assemble IS NOT NULL THEN sebesSales.assemble
ELSE [Сборка]
END AS Сборка,
(SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
WHERE [Вид цены] = 'Учетная цена (руб)'
AND Дата <= sebes.Период
AND sebes.artic_id = artic_id
ORDER BY Дата DESC) AS PriceListPrice,
(SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
WHERE [Вид цены] = 'Учетная цена (руб)'
AND sebes.artic_id = artic_id
ORDER BY Дата) AS AnyPrice
FROM
[pbi].[СебестоимостьОт2022] AS sebes
LEFT OUTER JOIN
(SELECT
[1c_document_id] AS onecid,
artic_id AS articid,
Закупка AS sZakupka,
[Закупка, usd2] AS sZakupkaUsd2,
Таможня AS customs,
ЕАЭС AS eas,
Доставка AS delivery,
НДС AS NAT,
Сборка AS assemble,
Сумма AS SumSales,
ЗатратыМП,
sebes_id,
[Учетная цена] AS uchetprice,
[Учетная цена USD2+2] AS uchetpriceUSD22,
[Учетная стоимость] AS uchetstoimost,
[Учетная стоимость USD2+2] AS uchetstoimostUSD22
FROM
[pbi].[СебестоимостьПродажиОт2022]) AS sebesSales ON sebesSales.sebes_id = sebes.id
) AS mainTab
GO
/****** Object: View [analytics].[get_analytics_by_group] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [analytics].[get_analytics_by_group]
AS
SELECT
n.code
, a.[Остаток дней продаж]
, a.[Дней в продаже / год]
, a.[Дней в продаже / квартал]
, a.[Продажи шт / день]
, a.[ТН / год, руб.]
, a.[ТН / квартал, руб.]
, a.[ТН / месяц, руб.]
, a.[Стоимость МП год, руб.]
, a.[%ТН год, руб.]
, a.[учетная сумма / год, руб.]
, a.[Оплаченный остаток]
, a.[Рентабельность / год]
, a.[Рентабельность / квартал]
, a.[Рентабельность / будущий год]
, [Рентабельность по остатку / год]
, [Рентабельность по остатку / квартал]
, [Рентабельность по остатку / будущий год]
FROM
analytics.[аналитика за 365 дн.] AS a
INNER JOIN pbi.nomenclature AS n ON n.[1c_id] = a.[1c_id]
INNER JOIN pbi.groups AS g ON n.[1c_group] = g.[1c_id]
WHERE (g.g NOT LIKE '*%')
GO
/****** Object: View [analytics].[Где товар с упаковками] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE view [analytics].[Где товар с упаковками] as
SELECT [1c_id]
,t.[artic_id]
,[Где товар]
,[quantity] as Штук
, case WHEN upak.upakovka <>0 then t.quantity / upak.upakovka
else 0 END as Упаковок
, upak.вес
, Высота
, Глубина
, Ширина
, Объем
FROM [mag_pbi].[analytics].[Где товар] t
INNER JOIN [mag_pbi].[pbi].[БазоваяУпаковка] upak
ON t.[1c_id] = upak.[_IDRRef]
GO
/****** Object: View [pbi].[Заказы] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbi].[Заказы]
AS
SELECT
DATEADD(YEAR, -2000, z._Date_Time) AS [Дата заказа поставщику],
z._Number AS [Номер заказа поставщику],
--t._Fld3473RRef AS [1C_id],
LOWER(
SUBSTRING(CONVERT(nvarchar(36), p._IDRRef, 2), 25, 8) + '-' +
SUBSTRING(CONVERT(nvarchar(36), p._IDRRef, 2), 21, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), p._IDRRef, 2), 17, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), p._IDRRef, 2), 1, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), p._IDRRef, 2), 5, 12)
) AS partner_id,
p._Description AS Партнер,
r._Description AS Контрагент,
CASE z._Fld3417RRef
WHEN 0xB9440E49408A17534955319EBF0DAE60 THEN 'Согласован'
WHEN 0x99FD3E66AA3EFB074984044D5A69CFD5 THEN 'В пути'
WHEN 0x973A5675AC6A17F64DA37EC6C22FC12C THEN 'Подтвержден'
WHEN 0xA55F81415BA33BC24A053ED26C6EC02E THEN 'Закрыт'
WHEN 0xA87A8B13710A30B447DFF1614E84D167 THEN 'В производстве'
WHEN 0x8542BD023FE7B70E4613087D853F26E4 THEN 'Тех. заказ'
WHEN 0xB38AD6232E2D17D44287D9924E5E6DF2 THEN 'На согласовании'
WHEN 0xB2A33CF1C7286AF3463F20D54AE5A0BC THEN 'Выгружен на складе'
ELSE 'Неизвестно'
END AS Статус,
--t._Fld3473RRef AS nom_1c_id,
LOWER(
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 25, 8) + '-' +
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 21, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 17, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 1, 4) + '-' +
SUBSTRING(CONVERT(nvarchar(36), t._Fld3473RRef, 2), 5, 12)
) AS artic_id,
t._Fld3473RRef as [1c_id],
t._Fld3477 AS Количество,
CONVERT(decimal(10, 2), t._Fld3477 / pack.base_pack) AS [Кол. упаковок],
t._Fld3477 * (SELECT n._Fld21092 / ISNULL(NULLIF(n._Fld21089, 0), 1) FROM mag_2019.dbo._Reference188X1 n WHERE t._Fld3473RRef = n._IDRRef) as [Объем, м3],
t._Fld3480 / 1000 AS Цена,
t._Fld3481 / 1000 AS Сумма,
t._Fld3481/1000 *
(SELECT TOP 1 _Fld13220/_Fld13221 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = z._Fld3414RRef --валюта документа
AND _Period <= z._Date_Time
ORDER BY _Period desc) /
(SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= z._Date_Time
ORDER BY _Period desc) as [Сумма всего, usd2],
v._Description AS Валюта,
case v._Description
WHEN 'USD' THEN _Fld3481 / 1000 * (SELECT rate FROM [mag_pbi].[analytics].[Курсы валют на сегодня] WHERE currency='USD2')
ELSE _Fld3481 / 1000 * (SELECT rate FROM [mag_pbi].[analytics].[Курсы валют на сегодня] WHERE currency=v._Description)
END
as 'Сумма в руб.',
CASE
WHEN z._Fld3420 < '4000' THEN DATEADD(MONTH, 4, GETDATE())
ELSE DATEADD(YEAR, -2000, z._Fld3420)
END
as 'Желаемая дата'
FROM MAG_2019.dbo._Document408X1 AS z -- заказы поставщику
INNER JOIN MAG_2019.dbo._Document408_VT3470X1 AS t ON t._Document408_IDRRef = z._IDRRef --табличная часть заказов поставщику
LEFT JOIN MAG_2019.dbo._Reference215X1 AS p ON p._IDRRef = z._Fld3409RRef --партнеры
LEFT JOIN MAG_2019.dbo._Reference168 AS r ON r._IDRRef = z._Fld3410RRef --контрагенты
LEFT JOIN MAG_2019.dbo._Reference50 AS v ON v._IDRRef = z._Fld3414RRef --валюты
INNER JOIN MAG_2019.dbo._Reference188X1 AS n ON n._IDRRef = t._Fld3473RRef
INNER JOIN pbi.groups AS g ON n._ParentIDRRef = g.[1c_id]
OUTER APPLY (
SELECT TOP 1
ISNULL(NULLIF(up.upakovka, 0), 1) AS base_pack
FROM pbi.БазоваяУпаковка up
WHERE up._OwnerID_RRRef = t._Fld3473RRef
) AS pack
WHERE
z._Posted = 1
AND z._Marked = 0
AND t._Fld3491RRef = 0
AND g NOT LIKE '*Внутр%'
GO
/****** Object: View [pbi].[v_nomenclature_full] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbi].[v_nomenclature_full]
AS
WITH ref188 AS (
SELECT
n._Code,
n._IDRRef,
n._Fld28142
FROM MAG_2019.dbo._Reference188X1 AS n
WHERE n._Fld21101RRef IN (
0x80C5305A3A00E12B11E5845202CA01FB,
0x80C5305A3A00E12B11E584520AEC30EC
)
),
up_min AS (
-- минимальная упаковка для Owner, только для номенклатур где _Fld28142 = 0
SELECT
a._OwnerID_RRRef,
a._Fld24768 AS upakovka,
a._Fld24761 AS Вес,
a._Fld24763 AS Высота,
a._Fld24765 AS Глубина,
a._Fld24775 AS Ширина,
a._Fld24771 AS Объем
FROM MAG_2019.dbo._Reference347X1 AS a
LEFT JOIN MAG_2019.dbo._Reference347X1 AS b
ON b._OwnerID_RRRef = a._OwnerID_RRRef
AND a._Fld24768 > b._Fld24768
AND a._Marked = 0x00
AND b._Marked = 0x00
INNER JOIN ref188 AS r
ON r._IDRRef = a._OwnerID_RRRef
AND r._Fld28142 = 0
WHERE b._Fld24768 IS NULL
AND a._Marked = 0x00
),
up_max AS (
-- максимальная упаковка для Owner, только для номенклатур где _Fld28142 <> 0
SELECT
a._OwnerID_RRRef,
a._Fld24768 AS upakovka,
a._Fld24761 AS Вес,
a._Fld24763 AS Высота,
a._Fld24765 AS Глубина,
a._Fld24775 AS Ширина,
a._Fld24771 AS Объем
FROM MAG_2019.dbo._Reference347X1 AS a
LEFT JOIN MAG_2019.dbo._Reference347X1 AS b
ON b._OwnerID_RRRef = a._OwnerID_RRRef
AND a._Fld24768 < b._Fld24768
AND a._Marked = 0x00
AND b._Marked = 0x00
INNER JOIN ref188 AS r
ON r._IDRRef = a._OwnerID_RRRef
AND r._Fld28142 <> 0
WHERE b._Fld24768 IS NULL
AND a._Marked = 0x00
),
up AS (
SELECT * FROM up_min
UNION ALL
SELECT * FROM up_max
),
ref1c AS (
SELECT
r._Code AS code,
r._IDRRef,
up._OwnerID_RRRef,
LOWER(
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 25, 8) + N'-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 21, 4) + N'-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 17, 4) + N'-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 1, 4) + N'-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 5, 12)
) AS artic_id,
up.upakovka,
up.Вес,
up.Высота,
up.Глубина,
up.Ширина,
up.Объем
FROM ref188 AS r
LEFT JOIN up
ON up._OwnerID_RRRef = r._IDRRef
),
bc AS (
SELECT
_Fld15521RRef AS _IDRRef,
STRING_AGG(barcode, N'; ') AS barcodes
FROM (
SELECT DISTINCT
i._Fld15521RRef,
CONVERT(nvarchar(64), i._Fld15520) AS barcode
FROM MAG_2019.dbo._InfoRg15519 AS i
) AS x
GROUP BY _Fld15521RRef
)
SELECT
nom.artic_id,
nom.[1c_id],
nom.code,
nom.cenovaya_gruppa,
nom.description,
nom.artic,
nom.vid_nomen,
nom.Производитель,
nom.group_id,
nom.[1c_group],
nom.card,
nom.photo,
nom.base,
nom.[Знаменатель веса],
nom.[Числитель веса],
nom.[Знаменатель объема],
nom.[Числитель объема],
nom.[Количество упак в коробе],
nom.[Количество упак в кванте],
nom.[id magok],
nom.Товарныйменеджера,
nom.МенеджерПоЗакупкам2,
nom.РуководительНаправления,
nom.[Менеджер OZON],
nom.[Менеджер WB],
nom.[АБС статус],
nom.[АБС план],
nom.[ABC Парето],
nom.[XYZ статус 12м],
nom.[Комментарий для матрицы],
nom.Коллекция,
nom.[Ценовой сегмент Магок],
nom.[Ценовой сегмент МП],
nom.[Кол-во упак в заказе Магок],
nom.Бренд,
nom.[Тип товара],
nom.Метка,
nom.[Ширина, мм],
nom.Цвет,
nom.[Номер цвета],
nom.[Тип шнура],
nom.[Тип плетения],
nom.Размер,
nom.Особенность,
nom.Форма,
nom.Ширина,
nom.[Формат упаковки],
nom.[Макс. запас],
nom.[Мин. запас],
nom.[QTY PACKS],
nom.[Да/Нет Собственное пр-во],
nom.[ID OZON],
nom.[ID WB],
nom.WB,
nom.Ozon,
nom.СТМ,
nom.[Выгружать на я.маркет],
nom.[Выгружать в Google Merchant],
nom.[Товар МП],
nom.Неликвид,
nom.Статус,
nom.[Сквозной цвет],
nom.[Базовая упаковка],
nom.[Качество контента Ozon],
nom.[Качество контента WB],
nom.[Качество контента WB by Ozon],
nom.[Качество контента Magok],
nom.[Вид номенклатуры],
nom.max_year_quantity,
nom.max_quarter_quantity,
nom.[Цена учетная, руб],
nom.[Цена учетная, usd],
nom.СредниеМесячныеПродажи,
nom.СКО_МесячныхПродаж,
nom.minAvailableQty,
g._Description AS group__Description,
g.g,
g.g1,
g.g2,
g.g3,
g.group_id AS group__group_id,
g._ParentIDRRef AS group__ParentIDRRef,
g.lvl AS group__lvl,
g.path AS group__path,
g.code AS group__code,
g.[1c_id] AS group__1c_id,
g.план AS group__план,
g.[first group] AS group__first_group,
ref1c._IDRRef AS ref_1c__IDRRef,
ref1c._OwnerID_RRRef AS ref_1c__OwnerID_RRRef,
ref1c.artic_id AS ref_1c__artic_id,
ref1c.upakovka AS ref_1c__upakovka,
ref1c.Вес AS ref_1c__Вес,
ref1c.Высота AS ref_1c__Высота,
ref1c.Глубина AS ref_1c__Глубина,
ref1c.Ширина AS ref_1c__Ширина,
ref1c.Объем AS ref_1c__Объем,
bc.barcodes AS ref_1c__barcodes
FROM pbi.nomenclature AS nom
LEFT JOIN pbi.groups AS g
ON g.[1c_id] = nom.[1c_group]
LEFT JOIN ref1c
ON ref1c.code = nom.code
LEFT JOIN bc
ON bc._IDRRef = ref1c._IDRRef;
GO
/****** Object: Table [pbi].[СебестоимостьПродажиТест] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[СебестоимостьПродажиТест](
[id] [int] IDENTITY(1,1) NOT NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](38, 15) NULL,
[СуммаБезНДС] [numeric](38, 15) NULL,
[СуммаРучнойСкидки] [numeric](38, 15) NULL,
[СуммаАвтоСкидки] [numeric](38, 15) NULL,
[Закупка] [numeric](38, 15) NULL,
[Закупка, usd2] [numeric](38, 15) NULL,
[Таможня] [numeric](38, 15) NULL,
[ЕАЭС] [numeric](38, 15) NULL,
[Учетная цена] [numeric](38, 15) NULL,
[Учетная цена USD2+2] [numeric](38, 15) NULL,
[Маркетинг] [numeric](38, 15) NULL,
[Доставка] [numeric](38, 15) NULL,
[НДС] [numeric](38, 15) NULL,
[Сборка] [numeric](38, 15) NULL,
[ЗатратыМП] [numeric](38, 15) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](38, 15) NULL,
[Учетная стоимость USD2+2] [numeric](38, 15) NULL,
[sebes_id] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[СебестоимостьТест] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[СебестоимостьТест](
[id] [int] IDENTITY(1,1) NOT NULL,
[Период] [datetime2](0) NULL,
[Статья] [varchar](255) NOT NULL,
[Вид операции] [varchar](255) NOT NULL,
[Хоз операция] [varchar](255) NOT NULL,
[Организация] [varchar](255) NULL,
[Партнер] [varchar](255) NULL,
[Контрагент] [varchar](255) NULL,
[Менеджер] [varchar](255) NULL,
[Тип документа] [varchar](255) NULL,
[Номер документа] [varchar](255) NULL,
[Валюта документа] [varchar](255) NULL,
[Ценовая группа] [varchar](255) NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](38, 15) NULL,
[СуммаБезНДС] [numeric](38, 15) NULL,
[СуммаРучнойСкидки] [numeric](38, 15) NULL,
[СуммаАвтоСкидки] [numeric](38, 15) NULL,
[Закупка] [numeric](38, 15) NULL,
[Закупка, usd2] [numeric](38, 15) NULL,
[Курс usd2] [numeric](15, 3) NULL,
[Курс usd] [numeric](15, 3) NULL,
[Таможня] [numeric](38, 15) NULL,
[ЕАЭС] [numeric](38, 15) NULL,
[Учетная цена] [numeric](38, 15) NULL,
[Учетная цена USD2+2] [numeric](38, 15) NULL,
[Заказ закрыт] [datetime] NULL,
[Номер заказа] [nchar](11) NULL,
[Маркетинг] [numeric](38, 15) NULL,
[Доставка] [numeric](38, 15) NULL,
[НДС] [numeric](38, 15) NULL,
[Сборка] [numeric](38, 15) NULL,
[ЗатратыМП] [numeric](38, 15) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](38, 15) NULL,
[Учетная стоимость USD2+2] [numeric](38, 15) NULL,
[Номер регистратора] [nchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: View [pbi].[Себестоимость+СебестоимостьПродажТестовая] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*where [Вид операции] = 'Продажа'
and sebesSales.ЗатратыМП <> 0 */
CREATE VIEW [pbi].[Себестоимость+СебестоимостьПродажТестовая]
AS
SELECT [id]
,[Период]
,[Статья]
,[Вид операции]
,[Хоз операция]
,[Организация]
,[Партнер]
,[PartnerId]
,[Контрагент]
,[Менеджер]
,[Тип документа]
,[Номер документа]
,[Валюта документа]
,[Ценовая группа]
,[1c_document_id]
,[1c_id]
,[artic_id]
,[Количество]
,[Сумма]
,[СуммаБезНДС]
,[СуммаРучнойСкидки]
,[СуммаАвтоСкидки]
--,[Закупка]
,CASE WHEN [Закупка] = 0 and [Вид операции] = 'Продажа' THEN
-(PriceListPrice * [Количество]) / 1000
ELSE [Закупка]
END AS [Закупка]
--,[Закупка, usd2]
,CASE WHEN [Закупка] = 0 and [Вид операции] = 'Продажа' THEN
-(PriceListPrice / [Курс usd2] * [Количество]) / 1000
ELSE [Закупка, usd2]
END AS [Закупка, usd2]
,[Курс usd2]
,[Курс usd]
,[Таможня]
, CASE WHEN (YEAR([Период]) < 2022 ) and PriceListPrice is not null THEN
PriceListPrice / 1000
WHEN (YEAR([Период]) < 2022 ) and PriceListPrice is null THEN
PriceListPriceUSD2 / 1000 * [Курс usd2]
ELSE
[Учетная цена]
END AS [Учетная цена]
, CASE WHEN (YEAR([Период]) < 2022 ) and PriceListPrice is not null THEN
PriceListPrice / 1000 / [Курс usd2]
WHEN (YEAR([Период]) < 2022 ) and PriceListPrice is null THEN
PriceListPriceUSD2 / 1000
ELSE
[Учетная цена USD2+2]
END AS [Учетная цена USD2+2]
, CASE WHEN (YEAR([Период]) < 2022 ) and PriceListPrice is not null THEN
(PriceListPrice * [Количество]) / 1000
WHEN (YEAR([Период]) < 2022 ) and PriceListPrice is null THEN
(PriceListPriceUSD2 * [Количество]) / 1000 * [Курс usd2]
ELSE
[Учетная стоимость]
END AS [Учетная стоимость]
, CASE WHEN (YEAR([Период]) < 2022 ) and PriceListPrice is not null THEN
(PriceListPrice * [Количество]) / 1000 / [Курс usd2]
WHEN (YEAR([Период]) < 2022 ) and PriceListPrice is null THEN
(PriceListPriceUSD2 * [Количество]) / 1000
ELSE
[Учетная стоимость USD2+2]
END AS [Учетная стоимость USD2+2]
,[Заказ закрыт]
,[Номер заказа]
,[Доставка]
,[НДС]
,[Сборка]
, PriceListPrice
FROM (SELECT
sebes.id,
sebes.Период,
sebes.Статья,
sebes.[Вид операции],
sebes.[Хоз операция],
sebes.Организация,
sebes.Партнер,
sebes.PartnerId,
sebes.Контрагент,
sebes.Менеджер,
sebes.[Тип документа],
sebes.[Номер документа],
sebes.[Валюта документа],
sebes.[Ценовая группа],
sebes.[1c_document_id],
sebes.[1c_id],
sebes.artic_id,
sebes.Количество,
sebes.Сумма AS Сумма,
sebes.СуммаБезНДС,
sebes.СуммаРучнойСкидки,
sebes.СуммаАвтоСкидки,
CASE WHEN sebesSales.sZakupka IS NOT NULL THEN sebesSales.sZakupka ELSE [Закупка] END AS Закупка,
CASE WHEN sebesSales.sZakupkaUsd2 IS NOT NULL THEN sebesSales.sZakupkaUsd2 ELSE [Закупка, usd2] END AS [Закупка, usd2],
sebes.[Курс usd2],
sebes.[Курс usd],
CASE WHEN sebesSales.customs IS NOT NULL THEN sebesSales.customs ELSE [Таможня] END AS Таможня,
CASE WHEN sebesSales.uchetprice IS NOT NULL THEN sebesSales.uchetprice ELSE [Учетная цена] END AS [Учетная цена],
CASE WHEN sebesSales.uchetpriceUSD22 IS NOT NULL THEN sebesSales.uchetpriceUSD22 ELSE [Учетная цена USD2+2] END AS [Учетная цена USD2+2],
CASE WHEN sebesSales.uchetstoimost IS NOT NULL THEN sebesSales.uchetstoimost ELSE [Учетная стоимость] END AS [Учетная стоимость],
CASE WHEN sebesSales.uchetstoimostUSD22 IS NOT NULL THEN sebesSales.uchetstoimostUSD22 ELSE [Учетная стоимость USD2+2] END AS [Учетная стоимость USD2+2],
sebes.[Заказ закрыт],
sebes.[Номер заказа],
CASE WHEN sebesSales.delivery IS NOT NULL THEN sebesSales.delivery ELSE [Доставка] END AS Доставка,
CASE WHEN sebesSales.NAT IS NOT NULL THEN sebesSales.NAT ELSE [НДС] END AS НДС,
CASE WHEN sebesSales.assemble IS NOT NULL THEN sebesSales.assemble ELSE [Сборка] END AS Сборка,
--UchetPrice.Price as PriceListPrice
(SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
WHERE [Вид цены] = 'Учетная цена (руб)'
AND Дата <= sebes.Период
and sebes.artic_id = artic_id
ORDER BY Дата desc ) as PriceListPrice
, (SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
WHERE [Вид цены] = 'Учетная цена (вал)'
AND Дата <= sebes.Период
and sebes.artic_id = artic_id
ORDER BY Дата desc ) as PriceListPriceUSD2
FROM pbi.СебестоимостьТест AS sebes
LEFT OUTER JOIN
(SELECT [1c_document_id] AS onecid, artic_id AS articid, Закупка AS sZakupka, [Закупка, usd2] AS sZakupkaUsd2, Таможня AS customs, ЕАЭС AS eas, Доставка AS delivery, НДС AS NAT, Сборка AS assemble, Сумма AS SumSales,
ЗатратыМП, sebes_id, [Учетная цена] AS uchetprice, [Учетная цена USD2+2] AS uchetpriceUSD22, [Учетная стоимость] AS uchetstoimost, [Учетная стоимость USD2+2] AS uchetstoimostUSD22
FROM pbi.СебестоимостьПродажиТест) AS sebesSales ON sebesSales.sebes_id = sebes.id
) AS mainTab
GO
/****** Object: Table [pbiProd].[СебестоимостьОт2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbiProd].[СебестоимостьОт2022](
[id] [int] IDENTITY(1,1) NOT NULL,
[Период] [datetime2](0) NULL,
[Статья] [varchar](50) NOT NULL,
[Вид операции] [varchar](25) NOT NULL,
[Хоз операция] [varchar](50) NULL,
[Организация] [varchar](255) NULL,
[Партнер] [varchar](255) NULL,
[Контрагент] [varchar](255) NULL,
[Менеджер] [varchar](255) NULL,
[Тип документа] [varchar](50) NULL,
[Номер документа] [varchar](25) NULL,
[Валюта документа] [varchar](25) NULL,
[Ценовая группа] [varchar](25) NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](21, 9) NULL,
[СуммаБезНДС] [numeric](21, 9) NULL,
[СуммаРучнойСкидки] [numeric](21, 9) NULL,
[СуммаАвтоСкидки] [numeric](21, 9) NULL,
[Закупка] [numeric](21, 9) NULL,
[Закупка, usd2] [numeric](21, 9) NULL,
[Курс usd2] [numeric](15, 3) NULL,
[Курс usd] [numeric](15, 3) NULL,
[Таможня] [numeric](21, 9) NULL,
[ЕАЭС] [numeric](21, 9) NULL,
[Учетная цена] [numeric](21, 9) NULL,
[Учетная цена USD2+2] [numeric](21, 9) NULL,
[Заказ закрыт] [datetime] NULL,
[Номер заказа] [nchar](11) NULL,
[Маркетинг] [numeric](21, 9) NULL,
[Доставка] [numeric](21, 9) NULL,
[НДС] [numeric](21, 9) NULL,
[Производство] [numeric](21, 9) NULL,
[ЗатратыМП] [numeric](21, 9) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](21, 9) NULL,
[Учетная стоимость USD2+2] [numeric](21, 9) NULL,
[Номер регистратора] [nchar](10) NULL,
[ЗатратыСкладХранение] [numeric](21, 9) NULL,
[ЗатратыСкладЗарплата] [numeric](21, 9) NULL,
[Приемка] [numeric](21, 9) NULL,
[АтсМаркировка] [numeric](21, 9) NULL,
[ВремяВыполненияМинут] [numeric](21, 9) NULL,
[СборкаЗаказа] [numeric](21, 9) NULL,
[Доставка USD2+2] [numeric](21, 9) NULL,
[НДС USD2+2] [numeric](21, 9) NULL,
[Таможня USD2+2] [numeric](21, 9) NULL,
[Производство USD2+2] [numeric](21, 9) NULL,
[КоличествоУпаковок] [numeric](15, 3) NULL,
[Сумма скидки] [numeric](21, 9) NULL,
[Сумма скидки USD2+2] [numeric](21, 9) NULL,
[Доп расходы] [numeric](21, 9) NULL,
[Доп расходы USD2+2] [numeric](21, 9) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: View [pbiProd].[ИтогСебестоимостьПродажОт2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbiProd].[ИтогСебестоимостьПродажОт2022]
AS
SELECT id, Период, Статья, [Вид операции], [Хоз операция], Организация, Партнер, PartnerId, Контрагент, Менеджер, [Тип документа], [Номер документа], [Валюта документа], [Ценовая группа], [1c_document_id], [1c_id], artic_id, Количество, Сумма, СуммаБезНДС, СуммаРучнойСкидки, СуммаАвтоСкидки, CASE WHEN [Закупка] = 0 AND
[Вид операции] = 'Расход' AND PriceListPrice IS NOT NULL THEN - (PriceListPrice * [Количество]) / 1000 WHEN [Закупка] = 0 AND [Вид операции] = 'Расход' AND AnyPrice IS NOT NULL THEN - (AnyPrice * [Количество]) / 1000 ELSE [Закупка] END AS Закупка,
CASE WHEN [Закупка] = 0 AND [Вид операции] = 'Расход' AND PriceListPrice IS NOT NULL THEN - (PriceListPrice / [Курс usd2] * [Количество]) / 1000 WHEN [Закупка] = 0 AND [Вид операции] = 'Расход' AND AnyPrice IS NOT NULL
THEN - (AnyPrice / [Курс usd2] * [Количество]) / 1000 ELSE [Закупка, usd2] END AS [Закупка, usd2], [Курс usd2], [Курс usd], Таможня, CASE WHEN ([Закупка] = 0 AND [Вид операции] = 'Расход') AND PriceListPrice IS NOT NULL
THEN PriceListPrice / 1000 WHEN [Закупка] = 0 AND [Вид операции] = 'Расход' AND AnyPrice IS NOT NULL THEN AnyPrice / 1000 ELSE [Учетная цена] END AS [Учетная цена], CASE WHEN ([Закупка] = 0 AND [Вид операции] = 'Расход') AND
PriceListPrice IS NOT NULL THEN PriceListPrice / [Курс usd2] / 1000 WHEN [Закупка] = 0 AND [Вид операции] = 'Расход' AND AnyPrice IS NOT NULL THEN AnyPrice / [Курс usd2] / 1000 ELSE [Учетная цена USD2+2] END AS [Учетная цена USD2+2],
CASE WHEN ([Закупка] = 0 AND [Вид операции] = 'Расход') AND PriceListPrice IS NOT NULL THEN (PriceListPrice * [Количество]) / 1000 WHEN [Закупка] = 0 AND [Вид операции] = 'Расход' AND AnyPrice IS NOT NULL THEN (AnyPrice * [Количество])
/ 1000 ELSE [Учетная стоимость] END AS [Учетная стоимость], CASE WHEN ([Закупка] = 0 AND [Вид операции] = 'Расход') AND PriceListPrice IS NOT NULL THEN (PriceListPrice / [Курс usd2] * [Количество]) / 1000 WHEN [Закупка] = 0 AND [Вид операции] = 'Расход' AND
AnyPrice IS NOT NULL THEN (AnyPrice / [Курс usd2] * [Количество]) / 1000 ELSE [Учетная стоимость USD2+2] END AS [Учетная стоимость USD2+2], [Заказ закрыт], [Номер заказа], Доставка, НДС, [Производство], PriceListPrice, [ЗатратыСкладХранение], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доп расходы], [Доп расходы USD2+2]
FROM (SELECT id, Период, Статья, [Вид операции], [Хоз операция], Организация, Партнер, PartnerId, Контрагент, Менеджер, [Тип документа], [Номер документа], [Валюта документа], [Ценовая группа], [1c_document_id], [1c_id], artic_id, Количество, CASE
WHEN rtu.[_Fld7917RRef] = 0x9987B49691D57EFD11EF1297BB0BAF58 or SoglClient.[_Fld23646RRef] = 0x9987B49691D57EFD11EF1297BB0BAF58
THEN Сумма * 1.2
ELSE Сумма
END as Сумма, СуммаБезНДС, СуммаРучнойСкидки, СуммаАвтоСкидки, Закупка, [Закупка, usd2],
[Курс usd2], [Курс usd], Таможня, [Учетная цена], [Учетная цена USD2+2], [Учетная стоимость], [Учетная стоимость USD2+2], [Заказ закрыт], [Номер заказа], Доставка, НДС, [Производство],
(SELECT TOP (1) Цена
FROM pbi.pricelist
WHERE ([Вид цены] = 'Учетная цена (руб)') AND (Дата <= sebes.Период) AND (sebes.artic_id = artic_id)
ORDER BY Дата DESC) AS PriceListPrice,
(SELECT TOP (1) Цена
FROM pbi.pricelist AS pricelist_1
WHERE ([Вид цены] = 'Учетная цена (руб)') AND (sebes.artic_id = artic_id)
ORDER BY Дата) AS AnyPrice, [ЗатратыСкладХранение], [Приемка], [АтсМаркировка]
, [ВремяВыполненияМинут], [СборкаЗаказа], [Доп расходы], [Доп расходы USD2+2]
FROM [pbiProd].[СебестоимостьОт2022] AS sebes LEFT JOIN [MAG_2019].[dbo].[_Document500X1] as rtu
on sebes.[1c_document_id] = rtu.[_IDRRef]
LEFT JOIN [MAG_2019].[dbo].[_Reference300] as SoglClient
on SoglClient.[_IDRRef] = rtu.[_Fld7917RRef]) AS mainTab
GO
/****** Object: View [pbi].[Внешние остатки] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbi].[Внешние остатки]
AS
SELECT nod._Description AS [Узел]
, ost._Fld33601 AS [Тип]
, ost._Fld33595 AS [Склад]
, DATEADD(YEAR, -2000, ost._Fld33596) AS [Дата обновления]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), [_Fld28683RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), [_Fld28683RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld28683RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld28683RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36),[_Fld28683RRef], 2),5,12) )) as [artic_id]
--, n._Code AS [Код УТ]
, ost._Fld33599 AS [id_внешний]
, ost._Fld33602 AS [Количество]
, ost._Fld33603 AS [Доступное кол-во]
, ost._Fld33602 * (case
(SELECT TOP 1 upakovka FROM mag_pbi.pbi.[БазоваяУпаковка] up
WHERE ost._Fld28683RRef = up._OwnerID_RRRef)
when 0 then 1
else (SELECT TOP 1 upakovka FROM mag_pbi.pbi.[БазоваяУпаковка] up
WHERE ost._Fld28683RRef = up._OwnerID_RRRef) end
)
as [Остаток МП, шт]
FROM [MAG_2019].[dbo].[_InfoRg28682X1] AS ost /* РегистрСведений.ОстаткиТоваровВоВнешнихСистемах */
--LEFT JOIN [MAG_2019].[dbo].[_Reference188X1] n ON n._IDRRef = ost._Fld28683RRef /* Справочник.Номенклатура */
LEFT JOIN [MAG_2019].[dbo].[_Node28072X1] nod ON nod._IDRRef = ost._Fld28684RRef /* ПланОбмена.ВнешниеСистемы */
WHERE --YEAR([_Fld33596]) > 4023
ost._Fld33596 = (SELECT top 1 _Fld33596 FROM [MAG_2019].[dbo].[_InfoRg28682X1] ORDER BY _Fld33596 DESC )
GO
/****** Object: View [analytics].[Заявки_на_оплату] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[Заявки_на_оплату]
AS SELECT
[_Number] as 'Номер заявки'
, _Document416_IDRRef
,DATEADD(year, -2000, [_Fld3902]) as 'Дата оплаты план'
, CASE
WHEN [_Fld3880RRef]= 0x96388D3803D0E2B243682753FD602008 THEN 'Согласована'
WHEN [_Fld3880RRef] = 0xA53B783FB8E84C2D4A977FB197BB9B6A THEN 'Не согласована'
WHEN [_Fld3880RRef] = 0xB22A4A3C82F7B70D452E0F89A2703597 THEN 'К оплате'
WHEN [_Fld3880RRef] = 0x9EB3FD405C68C64C42B491437EDE1CAB THEN 'Отклонена'
END as 'Статус'
, [_Fld3882] as 'Сумма'
, case spv._Description
WHEN 'USD' THEN [_Fld3882] * (SELECT rate FROM [mag_pbi].[analytics].[Курсы валют на сегодня] WHERE currency='USD2')
ELSE [_Fld3882] * (SELECT rate FROM [mag_pbi].[analytics].[Курсы валют на сегодня] WHERE currency=spv._Description)
END
as 'Сумма в руб.'
, CASE WHEN (SELECT
SUM(CASE WHEN [_RecordKind] = 0 THEN [_Fld16211] ELSE -[_Fld16211] END) AS summ
FROM [MAG_2019].[dbo].[_AccumRg16206] -- РегистрНакопления.ДенежныеСредстваКВыплате
WHERE [_Fld16207_RRRef] = _Document416_IDRRef
) = 0 THEN 1 ELSE 0 END as 'Оплачено'
, spv._Description as 'Валюта документа'
,DATEADD(year, -2000, [_Date_Time]) as [Дата создания]
--,DATEADD(year, -2000, [_Fld3890]) as 'Дата оплаты желат'
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), dr._Fld3957RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), dr._Fld3957RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), dr._Fld3957RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), dr._Fld3957RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), dr._Fld3957RRef, 2),5,12) ))as partner_id
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = dr._Fld3957RRef) as 'Партнер'
, (SELECT _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = r._Fld3891RRef)as 'Получатель'
,[_Fld3900] as 'Комментарий'
, (SELECT _Description FROM [MAG_2019].[dbo].[_Reference316] dds /*Справочник.СтатьиДвиженияДенежныхСредств*/ WHERE dds._IDRRef = r._Fld3904RRef) as 'Статья ДДС'
, e.value as 'Хоз. операция'
FROM [MAG_2019].[dbo].[_Document416] r /*ЗаявкаНаРасходованиеДенежныхСредств */
LEFT JOIN [MAG_2019].[dbo].[_Document416_VT3955] dr /*Документ.ЗаявкаНаРасходованиеДенежныхСредств.ТабличнаяЧасть.РасшифровкаПлатежа*/ ON r._IDRRef = dr._Document416_IDRRef
LEFT JOIN mag_pbi.pbi.enums e ON e._IDRref = r.[_Fld3881RRef] AND e.enum = 'Хоз. операции'/*Перечисление хозяйственная операция*/
LEFT JOIN [MAG_2019].[dbo].[_Reference50] spv ON spv._IDRRef = r.[_Fld3883RRef] /*Справочник.Валюты */
--LEFT JOIN [MAG_2019].[dbo].[_AccumRg16206]
WHERE /*[_Fld3881RRef]=0xB96DB293C2F88D8C46DF79811923F574 AND */ r.[_Posted] = 0x01 AND r._Marked = 0x00
GO
/****** Object: Table [pbiProd].[СебестоимостьДо2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbiProd].[СебестоимостьДо2022](
[id] [int] IDENTITY(1,1) NOT NULL,
[Период] [datetime2](0) NULL,
[Статья] [varchar](255) NOT NULL,
[Вид операции] [varchar](255) NOT NULL,
[Хоз операция] [varchar](255) NOT NULL,
[Организация] [varchar](255) NULL,
[Партнер] [varchar](255) NULL,
[Контрагент] [varchar](255) NULL,
[Менеджер] [varchar](255) NULL,
[Тип документа] [varchar](255) NULL,
[Номер документа] [varchar](255) NULL,
[Валюта документа] [varchar](255) NULL,
[Ценовая группа] [varchar](255) NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](38, 15) NULL,
[СуммаБезНДС] [numeric](38, 15) NULL,
[СуммаРучнойСкидки] [numeric](38, 15) NULL,
[СуммаАвтоСкидки] [numeric](38, 15) NULL,
[Закупка] [numeric](38, 15) NULL,
[Закупка, usd2] [numeric](38, 15) NULL,
[Курс usd2] [numeric](15, 3) NULL,
[Курс usd] [numeric](15, 3) NULL,
[Таможня] [numeric](38, 15) NULL,
[ЕАЭС] [numeric](38, 15) NULL,
[Учетная цена] [numeric](38, 15) NULL,
[Учетная цена USD2+2] [numeric](38, 15) NULL,
[Заказ закрыт] [datetime] NULL,
[Номер заказа] [nchar](11) NULL,
[Маркетинг] [numeric](38, 15) NULL,
[Доставка] [numeric](38, 15) NULL,
[НДС] [numeric](38, 15) NULL,
[Производство] [numeric](38, 15) NULL,
[ЗатратыМП] [numeric](38, 15) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](38, 15) NULL,
[Учетная стоимость USD2+2] [numeric](38, 15) NULL,
[Номер регистратора] [nchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: View [pbiProd].[СводныйСебестоимость] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbiProd].[СводныйСебестоимость]
AS
SELECT
[Период]
,[Статья]
,[Вид операции]
,[Хоз операция]
,[Организация]
,[Партнер]
,[PartnerId]
,[Контрагент]
,[Менеджер]
,[Тип документа]
,[Номер документа]
,[Валюта документа]
,[Ценовая группа]
,[1c_document_id]
,[1c_id]
,[artic_id]
,[Количество]
,[Сумма]
,[СуммаБезНДС]
,[СуммаРучнойСкидки]
,[СуммаАвтоСкидки]
,[Закупка]
,[Закупка, usd2]
,[Курс usd2]
,[Курс usd]
,[Таможня]
,[Учетная цена]
,[Учетная цена USD2+2]
,[Учетная стоимость]
,[Учетная стоимость USD2+2]
,[Заказ закрыт]
,[Номер заказа]
,[Доставка]
,[НДС]
,[Производство]
,[ЗатратыСкладХранение]
,[Приемка]
,[АтсМаркировка]
,[ВремяВыполненияМинут]
,[СборкаЗаказа]
,[Доп расходы]
,[Доп расходы USD2+2]
FROM [mag_pbi].[pbiProd].[ИтогСебестоимостьПродажОт2022]
UNION ALL
SELECT
[Период]
, CASE WHEN [Статья] = 'Сборка' THEN 'Производство товара'
ELSE [Статья] END AS [Статья]
, CASE WHEN [Вид операции] = 'Закупка' THEN 'Приход'
ELSE 'Расход' END AS [Вид операции]
,[Хоз операция]
,[Организация]
,[Партнер]
,[PartnerId]
,[Контрагент]
,[Менеджер]
,[Тип документа]
,[Номер документа]
,[Валюта документа]
,[Ценовая группа]
,[1c_document_id]
,[1c_id]
,[artic_id]
,[Количество]
,[Сумма]
,[СуммаБезНДС]
,[СуммаРучнойСкидки]
,[СуммаАвтоСкидки]
,[Закупка]
,[Закупка, usd2]
,[Курс usd2]
,[Курс usd]
,[Таможня]
,[Учетная цена]
,[Учетная цена USD2+2]
,[Учетная стоимость]
,[Учетная стоимость USD2+2]
,[Заказ закрыт]
,[Номер заказа]
,[Доставка]
,[НДС]
,[Производство]
, 0 as [ЗатратыСкладХранение]
, 0 as [Приемка]
, 0 as [АтсМаркировка]
, 0 as [ВремяВыполненияМинут]
, 0 as [СборкаЗаказа]
, 0 as [Доп расходы]
, 0 as [Доп расходы USD2+2]
FROM [mag_pbi].[pbiProd].[СебестоимостьДо2022]
GO
/****** Object: Table [pbi].[w_ostatok_da_net] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[w_ostatok_da_net](
[dt] [date] NULL,
[_IDRREF] [binary](16) NOT NULL,
[artic_id] [nvarchar](36) NULL,
[minAvailableQty] [decimal](18, 4) NULL,
[ostatok] [numeric](15, 6) NULL,
[quantity] [numeric](15, 6) NULL,
[upakovok] [numeric](15, 6) NULL,
[sellable_stock] [decimal](18, 6) NULL,
[quantity_mp] [numeric](15, 6) NULL,
[upakovok_mp] [numeric](15, 6) NULL,
[dostupno_upakovok_mp] [numeric](15, 6) NULL,
[ostatok_mp] [numeric](15, 6) NULL,
[ostatok_all] [numeric](15, 6) NULL
) ON [PRIMARY]
GO
/****** Object: Table [analytics].[seasonality_groups] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[seasonality_groups](
[g] [varchar](255) NULL,
[g1] [varchar](255) NULL,
[month] [tinyint] NOT NULL,
[koef] [numeric](38, 23) NULL
) ON [PRIMARY]
GO
/****** Object: View [analytics].[ForecastBasesKs] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[ForecastBasesKs] AS
WITH MaxDate AS (
SELECT MAX(Период) AS max_date
FROM [pbiProd].[СводныйСебестоимость Для PBI]
WHERE Статья = 'реализация'
),
LastFullMonth AS (
SELECT
YEAR(DATEADD(MONTH, -1, max_date)) AS last_year,
MONTH(DATEADD(MONTH, -1, max_date)) AS last_month
FROM MaxDate
),
-- 1. Продажи по SKU × месяц
Sales AS (
SELECT
artic_id,
YEAR(Период) AS Год,
MONTH(Период) AS Месяц,
SUM(Количество) AS total_sales
FROM [pbiProd].[СводныйСебестоимость Для PBI]
WHERE Статья = 'реализация'
GROUP BY artic_id, YEAR(Период), MONTH(Период)
),
-- 2. Дни в продаже (по флагу ostatok_all)
Stock AS (
SELECT
artic_id,
YEAR(dt) AS Год,
MONTH(dt) AS Месяц,
SUM(CASE WHEN ostatok_all = 1 THEN 1 ELSE 0 END) AS days_available
FROM [pbi].[w_ostatok_da_net]
GROUP BY artic_id, YEAR(dt), MONTH(dt)
),
-- 3. База: нормализованные продажи (только Основной + Маркетплейс)
Base AS (
SELECT
s.artic_id,
n.code,
n.description,
s.Год,
s.Месяц,
s.total_sales,
st.days_available,
-- сезонность: либо родная, либо общая (по группе 0)
COALESCE(sg_main.seasonal_koef, sg_def.seasonal_koef) AS seasonal_koef,
s.total_sales / NULLIF(COALESCE(sg_main.seasonal_koef, sg_def.seasonal_koef), 0) AS Normalized_sales,
CASE WHEN st.days_available > 19 THEN 1 ELSE 0 END AS valid_month,
CASE WHEN st.days_available > 19
THEN s.total_sales / NULLIF(COALESCE(sg_main.seasonal_koef, sg_def.seasonal_koef), 0)
ELSE NULL
END AS normalized_valid_sales
FROM Sales s
LEFT JOIN Stock st
ON s.artic_id = st.artic_id
AND s.Год = st.Год
AND s.Месяц = st.Месяц
JOIN [pbi].[nomenclature] n
ON s.artic_id = n.artic_id
LEFT JOIN [analytics].[seasonality_groups] sg_main
ON n.[1c_group] = sg_main.group_1c_id
AND s.Месяц = sg_main.[month]
LEFT JOIN [analytics].[seasonality_groups] sg_def
ON sg_def.group_1c_id = 0x00000000000000000000000000000000
AND sg_def.[month] = s.Месяц
WHERE n.Статус IN ('Основной', 'Маркетплейс')
),
-- 4. Пронумеровка месяцев (только до последнего полного месяца)
Windowed AS (
SELECT
b.*,
ROW_NUMBER() OVER (
PARTITION BY b.artic_id
ORDER BY (b.Год*100 + b.Месяц) DESC
) AS rn_desc
FROM Base b
CROSS JOIN LastFullMonth lm
WHERE (b.Год*100 + b.Месяц) <= (lm.last_year*100 + lm.last_month)
),
-- 4b. Последний валидный месяц (строгий, для контроля)
LastValid AS (
SELECT artic_id, normalized_valid_sales AS Base_LastMonth
FROM (
SELECT
artic_id,
normalized_valid_sales,
ROW_NUMBER() OVER (
PARTITION BY artic_id
ORDER BY (Год*100 + Месяц) DESC
) AS rn
FROM Windowed
WHERE valid_month = 1
AND normalized_valid_sales IS NOT NULL
) x
WHERE rn = 1
),
-- 5. Строгие базы (12M, 3M) только по валидным месяцам
StrictAggregates AS (
SELECT
w.artic_id,
AVG(CASE WHEN rn_desc <= 12 AND valid_month = 1 THEN normalized_valid_sales END) AS Base_12M,
CASE
WHEN MIN(CASE WHEN rn_desc <= 3 THEN valid_month END) = 1
THEN AVG(CASE WHEN rn_desc <= 3 THEN normalized_valid_sales END)
ELSE NULL
END AS Base_3M
FROM Windowed w
GROUP BY w.artic_id
),
-- 6. Irregular-база: средняя нормализованная продажа за последние 12 календарных месяцев,
-- только по месяцам с total_sales > 0
IrregularBase AS (
SELECT
w.artic_id,
AVG(w.Normalized_sales) AS Base_Irregular
FROM Windowed w
CROSS JOIN LastFullMonth lm
WHERE (w.Год * 12 + w.Месяц) > (lm.last_year * 12 + lm.last_month - 12) -- последние 12 месяцев
AND (w.Год * 12 + w.Месяц) <= (lm.last_year * 12 + lm.last_month)
AND w.total_sales > 0
AND w.Normalized_sales IS NOT NULL
GROUP BY w.artic_id
),
-- 7. TREND (регрессия по ln(sales), окно ~24 мес по валидным)
TrendData AS (
SELECT
w.artic_id,
ROW_NUMBER() OVER (
PARTITION BY w.artic_id
ORDER BY (w.Год*100 + w.Месяц)
) - 1 AS t,
LOG(w.normalized_valid_sales) AS ln_sales
FROM Windowed w
CROSS JOIN LastFullMonth lm
WHERE (w.Год*100 + w.Месяц) > (lm.last_year*100 + lm.last_month - 200)
AND (w.Год*100 + w.Месяц) <= (lm.last_year*100 + lm.last_month)
AND w.normalized_valid_sales > 0
),
TrendAgg AS (
SELECT
artic_id,
COUNT(*) AS n_obs,
EXP(
(AVG(t*ln_sales) - AVG(t)*AVG(ln_sales))
/ NULLIF(AVG(t*t) - AVG(t)*AVG(t), 0)
) AS g_raw
FROM TrendData
GROUP BY artic_id
HAVING COUNT(*) >= 6
),
TrendFinal AS (
SELECT
artic_id,
POWER(
CASE
WHEN POWER(g_raw, 12) < 0.7 THEN 0.7
WHEN POWER(g_raw, 12) > 1.5 THEN 1.5
ELSE POWER(g_raw, 12)
END,
1.0/12
) AS Ktrend
FROM TrendAgg
)
-- === ФИНАЛ (одна строка на активный SKU) ===
SELECT
n.artic_id,
n.code,
n.description,
-- строгие базы
sa.Base_12M,
sa.Base_3M,
ib.Base_Irregular,
-- единая выбранная база
CASE
WHEN sa.Base_3M IS NOT NULL THEN sa.Base_3M
WHEN sa.Base_12M IS NOT NULL THEN sa.Base_12M
ELSE ib.Base_Irregular
END AS Base_Selected,
lv.Base_LastMonth,
tf.Ktrend
FROM pbi.nomenclature n
LEFT JOIN StrictAggregates sa ON n.artic_id = sa.artic_id
LEFT JOIN IrregularBase ib ON n.artic_id = ib.artic_id
LEFT JOIN LastValid lv ON n.artic_id = lv.artic_id
LEFT JOIN TrendFinal tf ON n.artic_id = tf.artic_id
WHERE n.Статус IN ('Основной', 'Маркетплейс');
GO
/****** Object: View [analytics].[income_expence] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [analytics].[income_expence] as
SELECT
t.*,
CONCAT(t.[Номер документа], ' ', t.[Дата]) as 'Номерата'
FROM
-- См. WHERE в самом низу
-- WHERE g <> 'Прочие перемещения ДС' AND [Статья ДДС] <> 'Закупкариобретение валюты'
(
SELECT
'' as 'Получатель'
, c.[path] as 'path'
, case WHEN c.g1='Конвертация валюты' THEN 'Закупка' ELSE c.first_group END as g
, c.g1
, c.g2
, c.g3
, c.g4
, c._Description as 'Статья ДДС'
, e.value as 'operation'
, convert(date, DATEADD(year, -2000, [_Period]), 104) as 'Дата'
, FORMAT(DATEADD(year, -2000, [_Period]), 'yyyy') as 'Год'
, FORMAT(DATEADD(year, -2000, [_Period]), 'MM') as 'Месяц'
,case _RecordKind when 1 then -acc._Fld16165 / 1000 when 0 then acc._Fld16165 / 1000 end as 'Сумма'
,case _RecordKind when 1 then -acc._Fld16166 / 1000 when 0 then acc._Fld16166 / 1000 end as 'Сумма упр(приход)'
,case _RecordKind when 1 then -acc._Fld16167 / 1000 when 0 then acc._Fld16167 / 1000 end as 'Сумма регл(приход)'
, org._Description as 'organization'
, rs._Description as 'schet'
, 'Безнал' as 'type'
, (SELECT _DESCRIPTION FROM [MAG_2019].[dbo].[_Reference50] /*валюты*/ v WHERE v._IDRRef = rs._Fld18073RRef) as 'valuta'
, case acc._RecorderTRef
WHEN 0x000001FD THEN
(SELECT d._Number FROM MAG_2019.dbo._Document509 d WHERE d._IDRRef = acc._RecorderRRef )
WHEN 0x000001E1 THEN
(SELECT d._Number FROM MAG_2019.dbo._Document481 d WHERE d._IDRRef = acc._RecorderRRef )
WHEN 0x000001F1 THEN
(SELECT d._Number FROM MAG_2019.dbo._Document497 d WHERE d._IDRRef = acc._RecorderRRef )
WHEN 0x00000181 THEN
(SELECT d._Number FROM MAG_2019.dbo._Document385 d WHERE d._IDRRef = acc._RecorderRRef )
END as [Номер документа]
FROM [mag_2019].[dbo].[_AccumRg16162] acc /* регистр денежные средства б/н */
LEFT JOIN [MAG_2019].[dbo].[_Reference198X1] org ON org._IDRRef = acc._Fld16163RRef/*справочник организации*/
LEFT JOIN [MAG_2019].[dbo].[_Reference47] rs ON rs._IDRRef = acc._Fld16164RRef/* справочник банковские счета */
LEFT JOIN [mag_reports].[costs].[costs_groups] c ON c._IDRref = acc._Fld16171RRef /* статья ДДС */
LEFT JOIN mag_reports.dbo.enums e ON e._IDRref = acc._Fld16170RRef AND e.enum = 'Хоз. операции'/*Перечисление хозяйственная операция*/
WHERE 1=1
--AND path not like '%Прочие перемещения ДС%'
-- WHERE path is not null
/*and path not like '%Сдача денежных средств в банк (в рублях)%'
and path not like '%Перевод ДС ИП - ЧП%'
and path not like '%Прочие перемещения ДС %'
and path not like '%Расходы | расход%'
*/
UNION all
SELECT
( SELECT _Description FROM [MAG_2019].dbo._Reference168 /* контрагенты */ WHERE _IDRRef =
(SELECT top 1 _Fld3891RRef FROM [MAG_2019].dbo._Document416 /* заявка на расход ДС */ d416 WHERE d416._IDRref = /*ro_tbl._Fld7773RRef*/
(SELECT top 1 _Document495_IDRRef FROM [MAG_2019].dbo._Document495_VT7759 ro_tbl /* Расходный кассовый ордер табл */ WHERE ro_tbl._Document495_IDRRef = ro._IDRRef )
)
)
as 'Получатель'
, c.[path] as 'path'
, case WHEN c.g1='Конвертация валюты' THEN 'Закупка' ELSE c.first_group END as g
, c.g1
, c.g2
, c.g3
, c.g4
, c._Description as 'Статья ДДС'
, e.value as 'operation'
, convert(date, DATEADD(year, -2000, [_Period]), 104) as 'Дата'
, FORMAT(DATEADD(year, -2000, [_Period]), 'yyyy') as 'Год'
, FORMAT(DATEADD(year, -2000, [_Period]), 'MM') as 'Месяц'
,case _RecordKind when 1 then -_Fld16220 / 1000 when 0 then _Fld16220 / 1000 end as 'Сумма'
,case _RecordKind when 1 then -acc._Fld16221 / 1000 when 0 then acc._Fld16221 / 1000 end as 'Сумма упр(приход)'
,case _RecordKind when 1 then -acc._Fld16222 / 1000 when 0 then acc._Fld16222 / 1000 end as 'Сумма регл(приход)'
, org._Description
, k._Description
,'Наличные' as 'type'
,(SELECT _DESCRIPTION FROM [MAG_2019].[dbo].[_Reference50] /*валюты*/ v WHERE v._IDRRef = k._Fld20385RRef) as 'valuta'
, case acc._RecorderTRef
WHEN 0x000001EF THEN
(SELECT d._Number FROM MAG_2019.dbo._Document495 d WHERE d._IDRRef = acc._RecorderRRef )
WHEN 0x000001E5 THEN
(SELECT d._Number FROM MAG_2019.dbo._Document485 d WHERE d._IDRRef = acc._RecorderRRef )
WHEN 0x000001F1 THEN
(SELECT d._Number FROM MAG_2019.dbo._Document497 d WHERE d._IDRRef = acc._RecorderRRef )
WHEN 0x00000181 THEN
(SELECT d._Number FROM MAG_2019.dbo._Document385 d WHERE d._IDRRef = acc._RecorderRRef )
END as [Номер документа]
FROM [mag_2019].[dbo].[_AccumRg16217] acc /* регистр денежные средства нал */
LEFT JOIN [MAG_2019].[dbo].[_Reference198X1] org ON org._IDRRef = acc._Fld16218RRef/*справочник организации*/
LEFT JOIN [MAG_2019].[dbo].[_Reference147] k /* кассы */ ON k._IDRRef = acc._Fld16219RRef
LEFT JOIN [mag_reports].[costs].[costs_groups] c ON c._IDRref = acc._Fld16224RRef
LEFT JOIN mag_reports.dbo.enums e ON e._IDRref = acc._Fld16223RRef AND e.enum = 'Хоз. операции'/*Перечисление хозяйственная операция*/
LEFT JOIN [MAG_2019].dbo._Document495 ro /* Расходный кассовый ордер */ ON ro._IDRRef = acc._RecorderRRef
WHERE
1=1
--AND path not like '%Прочие перемещения ДС%'
--path is not null
/*and path not like '%Сдача денежных средств в банк (в рублях)%'
and path not like '%Перевод ДС ИП - ЧП%'
and path not like '%Прочие перемещения ДС %'
and path not like '%Расходы | расход%'*/
/*
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2019-01-01', 0, -652685 / 1000 , -652685 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2019-02-01', 0, -847900 / 1000 , -847900 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2019-03-01', 0, -856435 / 1000 ,- 856435 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2019-04-01', 0, -974905 / 1000 , -974905 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2019-05-01', 0, -977626 / 1000 , -977626 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2019-06-01', 0, -662517 / 1000 , -662517 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2019-07-01', 0, -748000 / 1000 , -748000 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2019-08-01', 0, -877971 / 1000 , -877971 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2019-09-01', 0, -946906 / 1000 , -946906 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2019-10-01', 0, -1325939 / 1000 , -1325939 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2019-11-01', 0, -1172364 / 1000 , -1172364 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2019-12-01', 0, -946108 / 1000 , -946108 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2020-01-01', 0, -955189 / 1000 , -955189 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2020-02-01', 0, -987967 / 1000 , -987967 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2020-03-01', 0, -1092812 / 1000 , -1092812 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2020-04-01', 0, -600712 / 1000 , -600712 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2020-05-01', 0, -886494 / 1000 , -886494 / 1000 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2020-06-01', 0, -950 , -950 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2020-07-01', 0, -958.5 , -958.5 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2020-08-01', 0, -987.2 , -987.2 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2020-09-01', 0, -1034 , -1034 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2020-10-01', 0, -1119 , -1119 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2020-11-01', 0, -1291 , -1291 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2020-12-01', 0, -1112 , -1112 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2021-01-01', 0, -1019 , -1019 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2021-02-01', 0, -1188 , -1188 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2021-03-01', 0, -1446 , -1446 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2021-04-01', 0, -1330 , -1330 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2021-05-01', 0, -927 , -927 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2021-06-01', 0, -1140 , -1140 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2021-07-01', 0, -881 , -881 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2021-08-01', 0, -1238 , -1238 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2021-09-01', 0, -1403 , -1403 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2021-10-01', 0, -1495 , -1495 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2021-11-01', 0, -1043 , -1043 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2021-12-01', 0, -1197 , -1197 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2022-01-01', 0, -1405 , -1405 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2022-02-01', 0, -1418 , -1418 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2022-03-01', 0, -1254 , -1254 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2022-04-01', 0, -1461 , -1461 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2022-05-01', 0, -1275 , -1275 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2022-06-01', 0, -1502 , -1502 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2022-07-01', 0, -1524 , -1524 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2022-08-01', 0, -1384 , -1384 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2022-09-01', 0, -1623 , -1623 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2022-10-01', 0, -1699 , -1699 , '', '', '', 'руб.', '' union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2022-11-01', 0, -1963 , -1963 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2022-12-01', 0, -1743 , -1743 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2023-01-01', 0, -1560 , -1560 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2023-02-01', 0, -1727 , -1727 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2023-03-01', 0, -2104 , -2104 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2023-04-01', 0, -1504 , -1504 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2023-05-01', 0, -1674 , -1674 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2023-06-01', 0, -1503 , -1503 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2023-07-01', 0, -1582 , -1582 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2023-08-01', 0, -1569 , -1569 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2023-09-01', 0, -2104 , -2104 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2023-10-01', 0, -2104 , -2104 , '', '', '', 'руб.', '' union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2023-11-01', 0, -2104 , -2104 , '', '', '', 'руб.', '' union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2023-12-01', 0, -2104 , -2104 , '', '', '', 'руб.', ''
union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2024-01-01', 0, -1611 , -1611 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2024-02-01', 0, -1759 , -1759 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2024-03-01', 0, -1853 , -1853 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2024-04-01', 0, -1718 , -1718 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2024-05-01', 0, -1516 , -1516 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2024-06-01', 0, -1682 , -1682 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2024-07-01', 0, -1669 , -1669 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2024-08-01', 0, -1669 , -1669 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2024-09-01', 0, -1709 , -1709 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2024-10-01', 0, -1899 , -1899 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2024-11-01', 0, -2228 , -2228 , '', '', '', 'руб.', ''union all
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2024-12-01', 0, -2320 , -2320 , '', '', '', 'руб.', ''
union all --2025
select '', 'Зарплата|Топы' , 'Зарплата', 'Топы', '', '', '', 'ТОП_Оплата труда', 'Выдача ДС подотчетнику', '2025-01-01', 0, -1604 , -1604 , '', '', '', 'руб.', ''--union all
*/
) as t
WHERE g <> 'Прочие перемещения ДС' AND [Статья ДДС] <> 'Закупкариобретение валюты'
GO
/****** Object: View [pbi].[Расходы по годам] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [pbi].[Расходы по годам] as
SELECT [Категория], Год, sum( Сумма) as [Сумма] FROM (
SELECT
g as 'Категория'
, Год
, -[Сумма] as 'Сумма'
FROM [mag_pbi].[analytics].[income_expence]
WHERE Дата > '2018'
AND g NOT IN ('Приход', 'Закупка')
AND g1 NOT IN ('Дедовск_Аренда склада А', 'Сдача А', 'Сдача Е1')
) as t
GROUP BY [Категория], Год
GO
/****** Object: View [analytics].[doprekvizit] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[doprekvizit]
AS
SELECT
CASE WHEN i._Marked = 0x00 THEN 0 ELSE 1 END AS [ПометкаУдаления],
i._Type AS [ТипЗначения],
i._Fld28453 AS [ТипЗначенияВнешнейСистемы],
i._Fld17721 AS [description],
LOWER(
CONCAT(
SUBSTRING(h.hex, 25, 8), '-',
SUBSTRING(h.hex, 21, 4), '-',
SUBSTRING(h.hex, 17, 4), '-',
SUBSTRING(h.hex, 1, 4), '-',
SUBSTRING(h.hex, 5, 12)
)
) AS [uid],
i._Fld28554 AS [ИмяВоВнешнейСистеме],
CASE i._Fld28553 WHEN 0x01 THEN 1 ELSE 0 END AS [ВыгружатьВоВнешниеСистемы],
CASE i._Fld33511 WHEN 0x01 THEN 1 ELSE 0 END AS [ВыгружатьНаСайт],
CASE i._Fld28529 WHEN 0x01 THEN 1 ELSE 0 END AS [ФильтрНаСайте],
CASE i._Fld28530 WHEN 0x01 THEN 1 ELSE 0 END AS [ОтображатьНаСайте],
CASE i._Fld27792 WHEN 0x01 THEN 1 ELSE 0 END AS [АТС_НеПроверять],
CASE i._Fld17724 WHEN 0x01 THEN 1 ELSE 0 END AS [ЗаполнятьОбязательно]
FROM MAG_2019.dbo._Chrc1109 AS i
CROSS APPLY (SELECT CONVERT(varchar(36), i._IDRRef, 2) AS hex) AS h;
GO
/****** Object: View [analytics].[doprekvizitvalues] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[doprekvizitvalues]
AS
SELECT
n._Code AS [code],
'DopRekvizit' AS [type],
-- GUID r._Reference188_IDRRef в текстовом виде (uid)
LOWER(
SUBSTRING(h.hex_ref,25,8) + '-' +
SUBSTRING(h.hex_ref,21,4) + '-' +
SUBSTRING(h.hex_ref,17,4) + '-' +
SUBSTRING(h.hex_ref, 1,4) + '-' +
SUBSTRING(h.hex_ref, 5,12)
) AS [uid],
r._Reference188_IDRRef AS [uid_bin],
r._Fld21137RRef AS [value_bin],
r._Fld21137RRef AS [name_uid_bin],
-- GUID r._Fld21137RRef в текстовом виде (name_uid)
LOWER(
SUBSTRING(h.hex_name,25,8) + '-' +
SUBSTRING(h.hex_name,21,4) + '-' +
SUBSTRING(h.hex_name,17,4) + '-' +
SUBSTRING(h.hex_name, 1,4) + '-' +
SUBSTRING(h.hex_name, 5,12)
) AS [name_uid],
c._Fld17721 AS [name],
pbi.get_rekvizit_value(
r._Reference188_IDRRef,
r._Fld21137RRef,
r._Fld21138_TYPE,
r._Fld21138_L,
r._Fld21138_N,
r._Fld21138_T,
r._Fld21138_S,
r._Fld21138_RTRef,
r._Fld21138_RRRef
) AS [value]
FROM MAG_2019.dbo._Reference188_VT21135X1 AS r
INNER JOIN MAG_2019.dbo._Reference188X1 AS n ON r._Reference188_IDRRef = n._IDRRef
INNER JOIN MAG_2019.dbo._Chrc1109 AS c ON c._IDRRef = r._Fld21137RRef
CROSS APPLY (
SELECT
CONVERT(varchar(36), r._Reference188_IDRRef, 2) AS hex_ref,
CONVERT(varchar(36), r._Fld21137RRef, 2) AS hex_name
) AS h;
GO
/****** Object: View [analytics].[images] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[images]
AS
SELECT
n._Code AS [КодУТ],
-- GUID r._IDRRef -> текст (КартинкаИД)
LOWER(
SUBSTRING(h.hex_r,25,8) + '-' +
SUBSTRING(h.hex_r,21,4) + '-' +
SUBSTRING(h.hex_r,17,4) + '-' +
SUBSTRING(h.hex_r, 1,4) + '-' +
SUBSTRING(h.hex_r, 5,12)
) AS [КартинкаИД],
-- Путь к файлу
CONCAT('media.magok.ru/', r._Fld21201) AS [Путь],
CASE WHEN r._Fld28532 = 0x01 THEN 1 ELSE 0 END AS [Основное],
ISNULL(v._Description, N'') AS [ВнешняяСистема],
CASE WHEN r._Marked = 0x00 THEN 0 ELSE 1 END AS [ПометкаУдаления],
-- GUID n._IDRRef -> текст (НоменклатураИД)
LOWER(
SUBSTRING(h.hex_n,25,8) + '-' +
SUBSTRING(h.hex_n,21,4) + '-' +
SUBSTRING(h.hex_n,17,4) + '-' +
SUBSTRING(h.hex_n, 1,4) + '-' +
SUBSTRING(h.hex_n, 5,12)
) AS [НоменклатураИД]
FROM MAG_2019.dbo._Reference191X1 AS r
INNER JOIN MAG_2019.dbo._Reference188X1 AS n
ON n._IDRRef = r._Fld21192RRef
LEFT JOIN MAG_2019.dbo._Node28072X1 AS v
ON v._IDRRef = r._Fld28611RRef
CROSS APPLY (
SELECT
CONVERT(varchar(36), r._IDRRef, 2) AS hex_r,
CONVERT(varchar(36), n._IDRRef, 2) AS hex_n
) AS h;
GO
/****** Object: View [analytics].[Группы_статей_ДДС] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [analytics].[Группы_статей_ДДС] as
WITH DirectReports([Статья ддс], g, g1,g2,g3,g4,[1c_id],[id], [_ParentIDRRef], lvl, [path]/*Name, Title, EmployeeID, EmployeeLevel, Sort*/)
AS (SELECT
CONVERT(varchar(255), e.[_Description]),
CONVERT(varchar(255),e.[_Description]), --g
CONVERT(varchar(255),''), --g1
CONVERT(varchar(255),''), --g2
CONVERT(varchar(255),''), --g3
CONVERT(varchar(255),''), --g4
e._IDRRef,
LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), _IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), _IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), _IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), _IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), _IDRRef, 2),5,12) )),
e._ParentIDRRef,
1,
CONVERT(varchar(255), e.[_Description])
FROM [mag_2019].[dbo].[_Reference316] AS e
WHERE e._ParentIDRRef = 0x00000000000000000000000000000000 AND e._Marked = 0
UNION ALL
SELECT CONVERT(varchar(255), /*REPLICATE ('| ' , lvl) +*/ e._Description),
CONVERT(varchar(255),d.g),
/*g1*/ CASE lvl + 1 WHEN 2 THEN CONVERT(varchar(255),e._Description) ELSE CONVERT(varchar(255),d.g1) END,
/*g2*/ CASE lvl + 1 WHEN 3 THEN CONVERT(varchar(255),e._Description) ELSE CONVERT(varchar(255),d.g2) END,
/*g3*/ CASE lvl + 1 WHEN 4 THEN CONVERT(varchar(255),e._Description) ELSE CONVERT(varchar(255),d.g3) END,
/*g4*/ CASE lvl + 1 WHEN 5 THEN CONVERT(varchar(255),e._Description) ELSE CONVERT(varchar(255),d.g4) END,
e._IDRRef,
LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), _IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), _IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), _IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), _IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), _IDRRef, 2),5,12) )),
e._ParentIDRRef,
lvl + 1,
CONVERT (varchar(255), RTRIM(path) + ' | ' + e._Description)
FROM [mag_2019].[dbo].[_Reference316] AS e
INNER JOIN DirectReports AS d ON e._ParentIDRRef = d.[1c_id]
WHERE e._Marked = 0
)
SELECT *
FROM DirectReports
--ORDER BY Sort
GO
/****** Object: View [analytics].[Ожидаемое_поступление] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [analytics].[Ожидаемое_поступление] as
SELECT
d._Number as [Номер]
, CONVERT(datetime2, FORMAT(DATEADD(year, -2000, [_Date_Time]),'yyyy-MM-dd'), 120) as [Дата поступления]
, CASE _Fld5074RRef
WHEN 0xB5530D030E40BC264A41E266D1E84B1A then 'Безнал'
WHEN 0xB3F668344C8DBA57427B6BC0D450CEA1 then 'Наличные'
ELSE 'Любая'
END as [Форма оплаты]
, d._Fld5070 / 1000 as 'Сумма'
, (SELECT _Description FROM [MAG_2019].[dbo].[_Reference316] dds /*Справочник.СтатьиДвиженияДенежныхСредств*/ WHERE dds._IDRRef = d._Fld5072RRef) as 'Статья ДДС'
, (SELECT _Description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = d._Fld5069RRef) as 'Организация'
, (SELECT _Description FROM [MAG_2019].[dbo].[_Reference50] spv /*Справочник.Валюты */ WHERE spv._IDRRef = d._Fld5071RRef) as 'Валюта документа'
, d._Fld5073 as 'Назначение платежа'
FROM MAG_2019.dbo._Document443 d /* Документ.ОжидаемоеПоступлениеДенежныхСредств */
WHERE d._Marked = 0x00 AND d._Posted = 0x01
/*
0xB5530D030E40BC264A41E266D1E84B1A безнал
0xB3F668344C8DBA57427B6BC0D450CEA1 нал
*/
GO
/****** Object: View [dbo].[tovar_bez_kontenta] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/** Беру свободные остатки, ищу товары больше нуля, присоединяю доп реквизиты и таблицу значений доп реквизитов, чтобы понять статус товара.
Далее соединяю с внешними файлами по ссылке номенклатуры из свободных остатков, беру 1 попавшуюся фотку, где null там нет фото, тоже самое делаю с ценами
соединяю свободные остатки с ценами номенклатуры выбираю по двум видам цен (валютка, рублевая) *
*Беру свободные остатки, ищу товары больше нуля, присоединяю доп реквизиты и таблицу значений доп реквизитов, чтобы понять статус товара.
Далее соединяю с внешними файлами по ссылке номенклатуры из свободных остатков, беру 1 попавшуюся фотку, где null там нет фото, тоже самое делаю с ценами
соединяю свободные остатки с ценами номенклатуры выбираю по двум видам цен (валютка, рублевая) **/
CREATE VIEW [dbo].[tovar_bez_kontenta]
AS
SELECT SUM(CASE WHEN [_RecordKind] = 1 THEN - [_Fld17249] ELSE [_Fld17249] END) AS ВНаличии, ostatki._Fld17246RRef AS Номенклатура, tabznach._Description AS Статус, CASE WHEN photo._Fld21192RRef IS NULL
THEN 'Нет' ELSE 'Да' END AS НаличиеФото, CASE WHEN price._Fld15490RRef IS NULL THEN 'Нет' ELSE 'Да' END AS НаличиеЦены, CASE WHEN IdMP._Fld28244_RRRef IS NULL
THEN 'Нет' ELSE 'Да' END AS ЕстьИдМаркета
FROM MAG_2019.dbo._AccumRg17245 AS ostatki LEFT OUTER JOIN
(SELECT _Fld21138_RRRef, _Reference188_IDRRef
FROM MAG_2019.dbo._Reference188_VT21135X1
WHERE (_Fld21137RRef = 0x80DB0CC47A052DFD11E6E88DD05808D1)) AS DopRekv ON ostatki._Fld17246RRef = DopRekv._Reference188_IDRRef LEFT OUTER JOIN
MAG_2019.dbo._Reference133X1 AS tabznach ON DopRekv._Fld21138_RRRef = tabznach._IDRRef LEFT OUTER JOIN
(SELECT _Fld21192RRef, MIN(_IDRRef) AS FirstPhoto
FROM MAG_2019.dbo._Reference191X1
GROUP BY _Fld21192RRef) AS photo ON photo._Fld21192RRef = ostatki._Fld17246RRef LEFT OUTER JOIN
(SELECT _Fld15490RRef, MIN(_Period) AS FirstPrice
FROM MAG_2019.dbo._InfoRg15489
WHERE (_Fld15492RRef = 0x80C5305A3A00E12B11E58A143E5B131D) OR
(_Fld15492RRef = 0x80C5305A3A00E12B11E58A144F47AACF)
GROUP BY _Fld15490RRef) AS price ON price._Fld15490RRef = ostatki._Fld17246RRef LEFT OUTER JOIN
(SELECT _Fld28244_RRRef, MIN(_Fld28245RRef) AS FirstIdMP
FROM MAG_2019.dbo._InfoRg28243X1
GROUP BY _Fld28244_RRRef) AS IdMP ON IdMP._Fld28244_RRRef = ostatki._Fld17246RRef
WHERE (DopRekv._Fld21138_RRRef <> 0xAEACB496910DCFD611EA896A13FE2E89)
GROUP BY ostatki._Fld17246RRef, tabznach._Description, photo._Fld21192RRef, price._Fld15490RRef, IdMP._Fld28244_RRRef
HAVING (SUM(CASE WHEN [_RecordKind] = 1 THEN - [_Fld17249] ELSE [_Fld17249] END) > 0) AND (photo._Fld21192RRef IS NULL OR
price._Fld15490RRef IS NULL)
GO
/****** Object: View [dbo].[СтоимостьОпераций_Отбор] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[СтоимостьОпераций_Отбор]
AS
/* формула (КолвоСтрокВОтборе/5000+КолвоУпаковокОтобранных/20000)/2*30000*/
SELECT rn_otbor.[_Period],
rn_otbor.[_RecorderRRef] AS ссылкаотбор,
rn_otbor.[_Fld17380RRef] AS номенклатура,
rn_otbor.[_Fld17387] AS отобраноЕдХр, /*COALESCE(_Fld24768,1) AS Числитель, --числитель из упаковки*/
(rn_otbor.[_Fld17387] / COALESCE (_Fld24768,1)) AS КолвоУпаковок, /*количество отобранного в упаковках*/
((COUNT(*) OVER (PARTITION BY rn_otbor.[_RecorderRRef]) / 5000.0 + (rn_otbor.[_Fld17387] / COALESCE (_Fld24768,1)) / 20000.0) / 2 * 30000) AS СтоимостьСборки /*формула от склада в начале*/
FROM [MAG_2019].[dbo].[_AccumRg17378] AS rn_otbor /*Рн ТоварыКОтбору*/
LEFT JOIN
(SELECT _OwnerID_RRRef,
_Fld24768
FROM
(SELECT _OwnerID_RRRef,
_Fld24768,
ROW_NUMBER() OVER (PARTITION BY _OwnerID_RRRef
ORDER BY _ParentIDRRef DESC) AS rn
FROM [MAG_2019].[dbo].[_Reference347X1] /*справочник упаковки единицы измерения*/
WHERE _Marked = 0x00/*не помечена на удаление*/) AS ranked
WHERE rn = 1) AS upak ON upak._OwnerID_RRRef = rn_otbor._Fld17380RRef
WHERE rn_otbor.[_RecordKind] = 0 /*толькоприходы*/
AND rn_otbor.[_RecorderTRef] = 0x000001C5 /*регистратор отбор*/
AND rn_otbor.[_Fld17387] > 0
GO
/****** Object: View [dbo].[СтоимостьОпераций_Фасовка] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Скрипт для команды SelectTopNRows из среды SSMS ******/
CREATE VIEW [dbo].[СтоимостьОпераций_Фасовка]
AS
SELECT TOP (100) PERCENT _Period, _RecorderRRef AS ссылказаказнасборку, _Fld33653RRef AS номенклатура, _Fld33656 AS колворабот, _Fld33658 AS сумма, _Fld33658 / 2 AS стоимостьработыфасовщика
FROM MAG_2019.dbo._AccumRg33652
WHERE (_RecorderTRef = 0x00000197)
ORDER BY _Period DESC
GO
/****** Object: View [ostatki].[OstatkiMarketSklad] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [ostatki].[OstatkiMarketSklad]
AS
WITH tabMain AS (SELECT _Fld28683RRef, _Fld28684RRef, MAX(_Fld33596) AS MaxDate
FROM MAG_2019.dbo._InfoRg28682X1 WITH (NOLOCK)
WHERE (_Fld33601 = 'Остатки')
GROUP BY _Fld28683RRef, _Fld28684RRef), FilteredRekv AS
(SELECT DISTINCT _Reference188_IDRRef
FROM MAG_2019.dbo._Reference188_VT21135X1 WITH (NOLOCK)
WHERE (_Fld21137RRef IN (0xAEC2B496910DCFD611EBE86B75A98522, 0xAEC3B496910DCFD611EC1BAAEA86F8FE)) AND (_Fld21138_L = 0x01))
SELECT nom._Code AS CodeUT, uzel._Description AS Uzel, ost._Fld33599 AS ID, SUM(ost._Fld33602) AS KolvoMarket, MAX(ISNULL(free.[в наличии], 0) - ISNULL(free.[В Резерве Со Склада], 0)
- ISNULL(free.[В Резерве Под Заказ], 0)) AS KolvoSklad
FROM tabMain AS tm INNER JOIN
MAG_2019.dbo._InfoRg28682X1 AS ost WITH (NOLOCK) ON ost._Fld28683RRef = tm._Fld28683RRef AND ost._Fld28684RRef = tm._Fld28684RRef AND ost._Fld33596 = tm.MaxDate INNER JOIN
MAG_2019.dbo._Reference188X1 AS nom WITH (NOLOCK) ON nom._IDRRef = tm._Fld28683RRef INNER JOIN
FilteredRekv AS rekv ON rekv._Reference188_IDRRef = nom._IDRRef LEFT OUTER JOIN
mag_reports.sklad.Свободные_остатки_срез AS free WITH (NOLOCK) ON free.[1c_id] = tm._Fld28683RRef AND free.[Категория склада] = 'Хранение' INNER JOIN
MAG_2019.dbo._Node28072X1 AS uzel WITH (NOLOCK) ON uzel._IDRRef = tm._Fld28684RRef
GROUP BY nom._Code, uzel._Description, ost._Fld33599
GO
/****** Object: View [ostatki].[МаркировкаОчередьВРАботе] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/**Беру документ АТС маркировка, отбираю доки по статусам подготовлено и в работе, группирую по номенклатуре и складу,
суммирую количество, рассовываю количество по статусам (двум колонкам остатков) **/
CREATE VIEW [ostatki].[МаркировкаОчередьВРАботе] as
SELECT
DocMarked.[_Fld27691RRef] AS Склад,
TabMarked.[_Fld27699RRef] AS Номенклатура,
-- колонка для доков в статусе подготовлено
SUM(CASE
WHEN DocMarked.[_Fld27692RRef] = 0x927BBCDBD4443FE64E798FCC81E07916
THEN TabMarked.[_Fld27703]
ELSE 0
END) AS [К выполнению],
-- колонка для доков в статусе в работе
SUM(CASE
WHEN DocMarked.[_Fld27692RRef] = 0xBB36C8856B7EF9644E3B3F5C0BAE134A
THEN TabMarked.[_Fld27703]
ELSE 0
END) AS [В работе]
FROM [MAG_2019].[dbo].[_Document27688] AS DocMarked -- Документ АТС Маркировка
LEFT JOIN [MAG_2019].[dbo].[_Document27688_VT27697] AS TabMarked -- Товары документа АТС Маркировка
ON DocMarked._IDRRef = TabMarked._Document27688_IDRRef
WHERE DocMarked.[_Posted] = 0x01 -- проведен да
AND (DocMarked._Fld27692RRef = 0x927BBCDBD4443FE64E798FCC81E07916 OR DocMarked._Fld27692RRef = 0xBB36C8856B7EF9644E3B3F5C0BAE134A )
GROUP BY
DocMarked.[_Fld27691RRef],
TabMarked.[_Fld27699RRef];
GO
/****** Object: View [ostatki].[НаСогласовании] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Скрипт для команды SelectTopNRows из среды SSMS ******/
CREATE VIEW [ostatki].[НаСогласовании] as
SELECT doc.[_IDRRef]
,DATEADD(YEAR,-2000,doc.[_Date_Time]) AS Дата
,DATEADD(YEAR,-2000,doc.[_Fld3420]) AS ЖелаемаяДатаПоступления
,doc.[_Number] AS НомерЗП
,doc.[_Fld3409RRef] AS Партнер
,doc.[_Fld3417RRef] AS Статус
,doc.[_Fld3431RRef] AS ХозОперация
,nomenk AS Номенклатура
,zakazano AS КЗаказу
FROM [mag_2019].[dbo].[_Document408X1] AS doc --документ ЗаказПоставщику
LEFT JOIN (SELECT --РН ЗаказыПоставщикам. Делаю группировку по номенклатуре и регистратору, чтобы просуммировать колонку с количеством (отмененные позиции делают доп движение с минусом)
_Fld16331RRef AS nomenk
,SUM(_Fld16335) AS zakazano
,_RecorderRRef AS link
FROM [mag_2019].[dbo].[_AccumRg16329]
GROUP BY _Fld16331RRef,_RecorderRRef
) AS zakaz
ON doc.[_IDRRef] = zakaz.link
LEFT JOIN [mag_2019].[dbo].[_AccumRg16344] AS zakupka --РН Закупка. Присоединено для проверки,что у заказа нет пту, далее фильтрация по регистратору из закупки по NULL
ON zakupka._Fld16357_RRRef = doc.[_IDRRef]
WHERE
doc.[_Posted] = 0x01 --проведен
AND
([_Fld3417RRef] = 0xB38AD6232E2D17D44287D9924E5E6DF2 OR [_Fld3417RRef] = 0xB9440E49408A17534955319EBF0DAE60 OR [_Fld3417RRef] = 0x973A5675AC6A17F64DA37EC6C22FC12C) --отборы по статусу ЗП, расшифровка ниже
--0xB38AD6232E2D17D44287D9924E5E6DF2 - на согласовании
--0xB9440E49408A17534955319EBF0DAE60 - согласован
--0x973A5675AC6A17F64DA37EC6C22FC12C - подтвержден
AND
zakupka._RecorderRRef IS NULL
--Считаю, что все, что в статусах "на согласовании", "согласован", "подтвержден" находится на согласовании, т.к. если согласовано, то либо впути, либо в производстве. Так же сделана доп.проверка, что на заказ нет ПТУ (Через РН Закупки)
--через РН закупки (получаю оформленные пту) по ссылке на заказ через соединение отсекаю лишнее,
--из закупок беру остаток, потом через аналитику тяну сслку на номенклатуру, проверяю в РН Товыра к поступлению по полям принимается и к оформлению распоряжений нулевые значения
GO
/****** Object: View [ostatki].[ОчередьНаСборкуРазборку] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [ostatki].[ОчередьНаСборкуРазборку] as
/****** СборкиРазборки в очереди.Беру график поступления товаров, соединяю с товарами к поступлению и выбираю null записи ( в товары к поступлению есть движение только при статусе документа "К выполению", так же
при установке этого статуса создаются документы для сборки.******/
SELECT
график.[_Fld15654RRef] AS Номенклатура
,график.[_Fld15656RRef] AS Склад
,SUM(график.[_Fld15659]) AS Количество --Количество из заказов
FROM [MAG_2019].[dbo].[_AccumRg15653] AS график --РН ГрафикПоступленияТоваров
LEFT JOIN [MAG_2019].[dbo].[_AccumRg17465] AS кпоступлению -- РН ТоварыКПоступлению
ON график.[_RecorderRRef] = кпоступлению._Fld17466_RRRef
WHERE
график.[_RecorderTRef] = 0x00000197 -- тип регистратора ЗаказНаСборкуРазборку
AND кпоступлению._Fld17466_RRRef IS NULL
GROUP BY график.[_Fld15654RRef],график.[_Fld15656RRef]
GO
/****** Object: View [ostatki].[СборкиРазборкиВРаботе] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Заказ на сборку разборку делает движение в РН Товары к поступлению в колонку КОформлениюНакладныхПоРаспоряжению, после оформления закрывающего документа СБОРКА
товаров появляется минусовое движение в ту же колонку******/
CREATE VIEW [ostatki].[СборкиРазборкиВРаботе] as
SELECT
[_Fld17467RRef] AS Номенклатура
,[_Fld17470RRef] AS Склад
,SUM(CASE
WHEN [_RecordKind] = 1 THEN -[_Fld17474]
ELSE [_Fld17474]
END) AS КОформлениюНакладныхПоРаспоряжению
FROM [MAG_2019].[dbo].[_AccumRg17465] --РН ТоварыКПоступлению
WHERE [_Fld17466_RTRef] = 0x00000197 -- где документ поступления(распоржения) = заказ на сборку разборку
GROUP BY [_Fld17467RRef],[_Fld17470RRef]
HAVING
SUM(CASE
WHEN [_RecordKind] = 1 THEN -[_Fld17474]
ELSE [_Fld17474]
END) != 0
GO
/****** Object: View [ostatki].[СобираетсяИКСборке] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [ostatki].[СобираетсяИКСборке] as
SELECT
[_Fld17394RRef] AS Номенклатура
,[_Fld17391RRef] AS Склад,
SUM(CASE
WHEN [_RecordKind] = 1 THEN -[_Fld17402] --считаю итоги по колонке собирается
ELSE [_Fld17402]
END) AS Вереди,
SUM(CASE
WHEN [_RecordKind] = 1 THEN -[_Fld17403] --считаю итоги по колонке собрано
ELSE [_Fld17403]
END) AS Собирается
FROM [MAG_2019].[dbo].[_AccumRg17390] --РН ТоварыКОтгрузке
GROUP BY [_Fld17391RRef],[_Fld17394RRef] -- Группировка по складу и номенклатуре
HAVING --фильтрую нулевые
SUM(CASE
WHEN [_RecordKind] = 1 THEN -[_Fld17402]
ELSE [_Fld17402]
END) != 0
OR
SUM(CASE
WHEN [_RecordKind] = 1 THEN -[_Fld17403]
ELSE [_Fld17403]
END) != 0
GO
/****** Object: View [ostatki].[СобраноНеОплачено] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/**Беру регистр товары к отгрузке, группирую по полям, считаю итог по колонке к отгрузке (РСО в статусе отгрузке) товар упакован
Тоже самое делаю с расчетами клиентов, подсчитываю итог к оплате и внутренним соединением отбираю записи по которым итог оплаты <> 0**/
CREATE VIEW [ostatki].[СобраноНеОплачено] as
/**Беру регистр товары к отгрузке, группирую по полям, считаю итог по колонке к отгрузке (РСО в статусе отгрузке) товар упакован
Тоже самое делаю с расчетами клиентов, подсчитываю итог к оплате и внутренним соединением отбираю записи по которым итог оплаты <> 0**/
SELECT
[_Fld17391RRef] AS Склад
,[_Fld17393_RRRef] AS ДокументОтгрузки
,[_Fld17394RRef] AS Номенклатура
,SUM(CASE
WHEN [_RecordKind] = 1 THEN -[_Fld17399] -- считаю итоги
ELSE [_Fld17399]
END) AS КОтгрузке
FROM [MAG_2019].[dbo].[_AccumRg17390] AS otgruzka --РН ТоварыКОтгрузке
JOIN (
SELECT
_Fld17136_RRRef AS ЗаказКлиента,
SUM(CASE
WHEN [_RecordKind] = 1 THEN -_Fld17139 --К оплате
ELSE _Fld17139
END ) AS Оплачивается
FROM [MAG_2019].[dbo]._AccumRg17134 --РН РасчетыСКлиентами
GROUP BY _Fld17136_RRRef
) AS oplata
ON oplata.ЗаказКлиента = otgruzka.[_Fld17393_RRRef]
WHERE
[_Fld17392_RTRef] = 0x000000D7 --отбор по типу ЗаказКлиента
--AND
-- [_Fld17393_RRRef] = 0x89910B421F3F9FD34C8BBD4F8B7C855A
GROUP BY
[_Fld17391RRef], [_Fld17394RRef], [_Fld17393_RRRef] --группировка по складу, документу отгрузки и номенклатуре
HAVING
SUM(CASE
WHEN [_RecordKind] = 1 THEN -[_Fld17399] --выбираю записи где к отгрузке больше нуля
ELSE [_Fld17399]
END) > 0
AND
SUM(oplata.Оплачивается) <> 0 -- фильтруем по к оплате клиента
GO
/****** Object: View [ostatki].[ТоварыВПеремещении] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Заказ на перемещение делает движение в РН Товары к поступлению в колонку КОформлениюНакладныхПоРаспоряжению, после оформления закрывающего документа ПЕРЕМЕЩЕНЕ
товаров появляется минусовое движение в ту же колонку******/
CREATE VIEW [ostatki].[ТоварыВПеремещении] as
SELECT
[_Fld17467RRef] AS Номенклатура
,[_Fld17470RRef] AS Склад
,SUM(CASE
WHEN [_RecordKind] = 1 THEN -[_Fld17474]
ELSE [_Fld17474]
END) AS КОформлениюНакладныхПоРаспоряжению
FROM mag_2019.[dbo].[_AccumRg17465] --РН ТоварыКПоступлению
WHERE [_Fld17466_RTRef] = 0x00000196 -- где документ поступления(распоржения) = заказ на перемещение
GROUP BY [_Fld17467RRef],[_Fld17470RRef]
HAVING
SUM(CASE
WHEN [_RecordKind] = 1 THEN -[_Fld17474]
ELSE [_Fld17474]
END) != 0
GO
/****** Object: View [pbi].[groups_view] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [pbi].[groups_view]
as
WITH DirectReports(_Description, g, g1, g2, g3, [_IDRRef], [_ParentIDRRef], lvl, [path], [code]/*Name, Title, EmployeeID, EmployeeLevel, Sort*/)
AS (SELECT
CONVERT(varchar(255), e.[_Description]),
CONVERT(varchar(255),e.[_Description]),
CONVERT(varchar(255),''), --g1
CONVERT(varchar(255),''), --g2
CONVERT(varchar(255),''), --g3
e._IDRRef,
e._ParentIDRRef,
1,
CONVERT(varchar(255), e.[_Description]),
e._Code
FROM [mag_2019].[dbo]._Reference188X1 AS e
WHERE e._ParentIDRRef = 0x00000000000000000000000000000000 AND _Description <> '' /*AND _Marked = 0 */AND _Folder = 0x00
UNION ALL
SELECT CONVERT(varchar(255), /* REPLICATE ('| ' , lvl) + */ e._Description),
CONVERT(varchar(255),d.g),
/*g1*/ CASE lvl + 1 WHEN 2 THEN CONVERT(varchar(255),e._Description) ELSE CONVERT(varchar(255),d.g1) END,
/*g2*/ CASE lvl + 1 WHEN 3 THEN CONVERT(varchar(255),e._Description) ELSE CONVERT(varchar(255),d.g2) END,
/*g3*/ CASE lvl + 1 WHEN 4 THEN CONVERT(varchar(255),e._Description) ELSE CONVERT(varchar(255),d.g3) END,
e._IDRRef,
e._ParentIDRRef,
lvl + 1,
CONVERT (varchar(255), RTRIM(path) + ' | ' + e._Description),
e._Code
FROM [mag_2019].[dbo]._Reference188X1 AS e
INNER JOIN DirectReports AS d ON e._ParentIDRRef = d._IDRRef
WHERE e._Description <> '' /*AND _Marked = 0 */ AND _Folder = 0x00
)
SELECT _Description, g, g1, g2, g3
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),5,12) )) as group_id
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2),5,12) )) as '_ParentIDRRef'
--, convert(uniqueidentifier, [_IDRRef]) as group_id
--, convert(uniqueidentifier, [_ParentIDRRef]) as [_ParentIDRRef]
, lvl, [path]
, code
, n._IDRRef as [1c_id]
FROM DirectReports n
--ORDER BY Sort
GO
/****** Object: View [pbi].[node_mp] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbi].[node_mp] AS
SELECT v._Description as [Узел],
o._Description as [Организация],
CASE
WHEN v._Description LIKE '%Ozon%' THEN 'a93dedda-0616-11e6-80de-305a3a00e12b'
WHEN v._Description LIKE '%WildBerries%' THEN '51fd191e-bf7d-11e5-80c9-305a3a00e12b'
END AS [partner_id]
FROM [MAG_2019].[dbo].[_Node28072X1] v /* Внешние системы */
LEFT JOIN [MAG_2019].[dbo].[_Reference198X1] o /* Справочник.Организации */ ON v._Fld28430RRef = o._IDRRef
WHERE v._Description LIKE '%Ozon%'
OR v._Description LIKE '%WildBerries%'
GO
/****** Object: View [pbi].[users_1C] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE view [pbi].[users_1C] AS
/* н( добавляем подразделение
select
_IDRRef as [1c_id]
,LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), _IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), _IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), _IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), _IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), _IDRRef, 2),5,12) ))as [user_id]
, _Description as [user]
from [MAG_2019].[dbo].[_Reference228X1] us7 /* Пользователи */
*/
select
us7._IDRRef as [1c_id]
,LOWER
(
CONCAT
(
SUBSTRING(convert(nvarchar(36), us7._IDRRef, 2),25,8),
'-',
SUBSTRING(convert(nvarchar(36), us7._IDRRef, 2),21,4),
'-',
SUBSTRING(convert(nvarchar(36), us7._IDRRef, 2),17,4),
'-',
SUBSTRING(convert(nvarchar(36), us7._IDRRef, 2),1,4),
'-',
SUBSTRING(convert(nvarchar(36), us7._IDRRef, 2),5,12)
)
)as [user_id]
, us7._Description as [user]
, podr._Description as [podr]
, (SELECT par._Description FROM [MAG_2019].[dbo].[_Reference319] par
WHERE podr._ParentIDRRef = par._IDRRef) as [higher_podr]
from [MAG_2019].[dbo].[_Reference228X1] us7 /* Пользователи */
left join [MAG_2019].[dbo].[_Reference319] podr
on us7._Fld22183RRef = podr._IDRRef
/* н) */
GO
/****** Object: View [pbi].[Внешние продажи] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbi].[Внешние продажи]
AS
SELECT nod._Description AS [Узел]
, [_Fld33610] AS [Вид загрузки]
, [_Fld33611] AS [Склад]
, DATEADD(YEAR, -2000, [_Fld33612]) AS [Дата]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), [_Fld33613RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33613RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33613RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33613RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36),[_Fld33613RRef], 2),5,12) )) as [artic_id]
--, n._Code AS [Код УТ]
, [_Fld33614] AS [id_внешний]
, [_Fld33624] AS [Область]
, [_Fld33627] AS [Страна]
, [_Fld33628] AS [Регион]
, [_Fld33615] AS [Количество]
, [_Fld33616]/1000 AS [Сумма]
FROM [MAG_2019].[dbo].[_InfoRg33608X1] outd /* РегистрСведений.ДанныеИзВнешнихСистем */
--LEFT JOIN [MAG_2019].[dbo].[_Reference188X1] n ON n._IDRRef = outd._Fld33613RRef /* Справочник.Номенклатура */
LEFT JOIN [MAG_2019].[dbo].[_Node28072X1] nod ON nod._IDRRef = outd._Fld33609RRef /* ПланОбмена.ВнешниеСистемы */
GO
/****** Object: View [pbi].[Внешний оборот] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [pbi].[Внешний оборот] as
SELECT
DATEADD(YEAR, -2000, [_Period]) as [Дата]
,LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), [_Fld33760RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33760RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33760RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33760RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33760RRef], 2),5,12) )) as [artic_id]
,(SELECT _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = omp._Fld33761RRef ) as [Организация]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), [_Fld33762RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33762RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33762RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33762RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld33762RRef], 2),5,12) )) as [partner_id]
,[_Fld33763] / 1000 as [Сумма оборот МП, руб]
/*,[_Fld33764] as 'id_oborot'*/
FROM [MAG_2019].[dbo].[_InfoRg33759] omp /*РегистрСведений.ОборотМП*/
GO
/****** Object: View [pbi].[Заявки_на_оплату] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbi].[Заявки_на_оплату]
AS SELECT
DATEADD(year, -2000, [_Date_Time]) as [date]
,[_Number] as 'Номер заявки'
, CASE
WHEN [_Fld3880RRef]= 0x96388D3803D0E2B243682753FD602008 THEN 'Согласована'
WHEN [_Fld3880RRef] = 0xA53B783FB8E84C2D4A977FB197BB9B6A THEN 'Не согласована'
WHEN [_Fld3880RRef] = 0xB22A4A3C82F7B70D452E0F89A2703597 THEN 'К оплате'
WHEN [_Fld3880RRef] = 0x9EB3FD405C68C64C42B491437EDE1CAB THEN 'Отклонена'
END as 'Статус'
,[_Fld3882]/1000 as 'Сумма'
, (SELECT _Description FROM [MAG_2019].[dbo].[_Reference50] spv /*Справочник.Валюты */ WHERE spv._IDRRef = r.[_Fld3883RRef]) as 'Валюта документа'
--,DATEADD(year, -2000, [_Fld3890]) as 'Дата оплаты желат'
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), dr._Fld3957RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), dr._Fld3957RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), dr._Fld3957RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), dr._Fld3957RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), dr._Fld3957RRef, 2),5,12) ))as partner_id
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = dr._Fld3957RRef) as 'Партнер'
, (SELECT _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = r._Fld3891RRef)as 'Получатель'
,[_Fld3900] as 'Комментарий'
,DATEADD(year, -2000, [_Fld3902]) as 'Дата оплаты план'
, (SELECT _Description FROM [MAG_2019].[dbo].[_Reference316] dds /*Справочник.СтатьиДвиженияДенежныхСредств*/ WHERE dds._IDRRef = r._Fld3904RRef) as 'Статья ДДС'
FROM [MAG_2019].[dbo].[_Document416] r
LEFT JOIN [MAG_2019].[dbo].[_Document416_VT3955] dr /*ЗаявкаНаРасходованиеДенежныхСредств доп.реквизиты*/ ON r._IDRRef = dr._Document416_IDRRef
WHERE [_Fld3881RRef]=0xB96DB293C2F88D8C46DF79811923F574 AND [_Posted] = 0x01
GO
/****** Object: View [pbi].[значения доп реквизитов номенклатуры] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [pbi].[значения доп реквизитов номенклатуры]as
SELECT
rf._Reference188_IDRRef
, _Fld21137RRef
, [_Fld21138_TYPE]
, [_Fld21138_RTRef]
, case [_Fld21138_TYPE]
WHEN 0x02 THEN CAST(CAST([_Fld21138_L] as int) as nvarchar)
WHEN 0x03 THEN CAST([_Fld21138_N] as nvarchar)
WHEN 0x04 THEN CAST([_Fld21138_T] as nvarchar)
WHEN 0x05 THEN [_Fld21138_S]
WHEN 0x08 THEN
CASE [_Fld21138_RTRef]
WHEN 0x00000085 THEN zn._Description
WHEN 0x0000012A THEN sk._Description
WHEN 0x000000E4 THEN us._Description
WHEN 0x000000BC THEN n._Description
WHEN 0x000000C6 THEN org._Description
END
END as 'value'
FROM [MAG_2019].[dbo].[_Reference188_VT21135X1] rf
LEFT JOIN [MAG_2019].[dbo].[_Reference133X1] zn ON zn._IDRRef = rf._Fld21138_RRRef/*Значения свойств объектов*/
LEFT JOIN [MAG_2019].[dbo].[_Reference298X1] sk ON sk._IDRRef = rf._Fld21138_RRRef/*склады*/
LEFT JOIN [MAG_2019].[dbo].[_Reference228X1] us ON us._IDRRef = rf._Fld21138_RRRef/*пользователи*/
LEFT JOIN [MAG_2019].[dbo]._Reference188X1 n ON n._IDRRef = rf._Fld21138_RRRef/*номенклатура*/
LEFT JOIN [MAG_2019].[dbo].[_Reference198X1] org ON org._IDRRef = rf._Fld21138_RRRef /*организации*/
GO
/****** Object: View [pbi].[ЛогЗаказов] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [pbi].[ЛогЗаказов] as
SELECT [_Period]
,[_Fld27034RRef] as zakazNum
, case [_Fld27036RRef]
WHEN 0xA0246AE133C0E27F4B98056779E0C46F then 'Создан'
WHEN 5 then 'ОбрабатываетсяМенеджером'
WHEN 5 then 'СобираетсяНаСкладе'
WHEN 5 then 'СобранНаСкладе'
WHEN 0xBD0BB146294D59F849B1A47CC0FADAA8 then 'Отгружен'
WHEN 0xBB03030B7C212B9943817BEBAECB25F6 then 'Закрыт'
WHEN 0x85CE81BA5F726FFB4F95EB78CFC3BB16 then 'КОбеспечению'
WHEN 0x9E7046572889AD6A44C2D0C5B6482CEA then 'КПроверке'
WHEN 0x8D47C8F6E3E225324C30970997C3A72E then 'КОтгрузке'
WHEN 0xBDDE20C3E855004349685F0313E5D26C then 'Оплачен'
else 'СтатусНеопределен' end as 'status'
FROM [MAG_2019].[dbo].[_InfoRg27033X1]
GROUP BY [_Fld27034RRef],_Period, [_Fld27036RRef]
GO
/****** Object: View [pbi].[ПартнерыСегменты] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create view [pbi].[ПартнерыСегменты] as
select
RS._Fld13943RRef as [1c_parnter_id],
LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), _Fld13943RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), _Fld13943RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), _Fld13943RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), _Fld13943RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), _Fld13943RRef, 2),5,12) ))as partner_id,
Sg._Description as [Сегмент]
from MAG_2019.dbo._InfoRg13941 as RS /*РС Партнеры Сегмента*/
left join MAG_2019.dbo._Reference286 as Sg /*Справочник Сегменты клиентов*/
on RS._Fld13942RRef = Sg._IDRRef
GO
/****** Object: View [pbi].[ПланПродажМенеджеров] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Скрипт для команды SelectTopNRows из среды SSMS ******/
CREATE view [pbi].[ПланПродажМенеджеров]
as
SELECT
dateadd(year, -2000, [_Fld27878]) as [_Fld27878]
,[_Fld27879RRef] as [1c_id]
,LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), [_Fld27879RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), [_Fld27879RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld27879RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld27879RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld27879RRef], 2),5,12) ))as [user_id]
,[_Fld27880] as [план продаж]
, us._Description as [Менеджер]
FROM [MAG_2019].[dbo].[_InfoRg27877] i -- регистр сведений план продаж менеджеров
LEFT JOIN [MAG_2019].[dbo].[_Reference228X1] us /* пользователи */ on us._IDRRef =i._Fld27879RRef
GO
/****** Object: View [pbi].[ПланыПродажПоГруппам] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [pbi].[ПланыПродажПоГруппам] as
SELECT
DATEADD(year, -2000, _Fld27907) as [Месяц],
--(SELECT _description FROM MAG_2019.dbo._Reference188X1 n WHERE n._IDRRef = _Fld27908RRef) as [Группа],
--_Fld27908RRef as [Группа],
LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), _Fld27908RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), _Fld27908RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), _Fld27908RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), _Fld27908RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), _Fld27908RRef, 2),5,12) ))as [group_id],
_Fld27909 as [План продаж],
-- _Fld28446 as [План маржи]
(select us7._Description FROM [MAG_2019].[dbo].[_Reference228X1] us7 WHERE us7.[_IDRRef] = rg._Fld33700RRef) as [Товарный менеджер],
(select us7._Description FROM [MAG_2019].[dbo].[_Reference228X1] us7 WHERE us7.[_IDRRef] = rg._Fld33714RRef) as [Менеджер по закупкам]
FROM mag_2019.dbo._InfoRg27906 rg --РегистрСведений.ПланыПродажПоГруппам
WHERE DATEADD(year, -2000, _Fld27907) >= '2023'
GO
/****** Object: View [pbi].[Сборки] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [pbi].[Сборки] as
SELECT
DATEADD(year, -2000, z.[_Date_Time]) as [Дата документа]
,z.[_Number] as [Номер документа]
, k._Fld28069RRef as [Вариант комплектации]
, k._Fld28059RRef as [ИД номенклатура комплекта]
, (SELECT _description FROM MAG_2019.dbo._Reference188X1 n where n._IDRRef = k._Fld28059RRef )-- номенклатура комплекта
as [номенклатура комплекта]
, k._Fld28062 * isnull( (SELECT _Fld24768 FROM [MAG_2019].dbo._Reference347X1 u WHERE u._IDRRef = k._Fld28061RRef), 1)
as [кол-во комплекта]
, t._Fld3381RRef as [ИД номенклатура комплектации]
, (SELECT _description FROM MAG_2019.dbo._Reference188X1 n where n._IDRRef = t._Fld3381RRef )-- номенклатура комплектации
as [номенклатура комплектации]
, t._Fld3386 * isnull( (SELECT _Fld24768 FROM [MAG_2019].dbo._Reference347X1 u WHERE u._IDRRef = t._Fld3384RRef), 1)
as [количество комплектации]
, (
SELECT
sum(r._Fld27811)
FROM [MAG_2019].[dbo].[_Document407_VT27806] r-- работы
WHERE r._Document407_IDRRef = z._IDRRef AND r._Fld28056 = k._Fld28070--код строки
) as [работы]
--, t._Fld3386 -- упаковок комплектации
FROM [MAG_2019].[dbo].[_Document407] z-- Заказ на сборку
INNER JOIN [MAG_2019].[dbo].[_Document407_VT28057] k -- Комплекты
ON z._IDRRef = k._Document407_IDRRef
INNER JOIN [MAG_2019].[dbo].[_Document407_VT3379] t -- товары -- комплектующик
ON t._Document407_IDRRef = z._IDRRef AND t._Fld28055 = k._Fld28070--код строки
WHERE z._Posted = 1
and z.[_Fld3352RRef] = 0x97266ED3BEFAB868480833CDF0FCF236 -- статус закрыт
and t._Fld3392 = 0 --не отменено
and k._Fld28152 = 0 --не отменено
--and z.[_number] = 'АНУТ-000753' and _Date_Time = '4023-03-20 07:01:24'
/* ,[_Fld3348RRef]
,[_Fld3349RRef]
,[_Fld3350RRef]
,[_Fld3351RRef]
,[_Fld3353RRef]
,[_Fld3354RRef]
,[_Fld3355RRef]
,[_Fld3356]
,[_Fld3357]
,[_Fld3358]
,[_Fld3359]
,[_Fld3360]
,[_Fld3361]
,[_Fld3362]
,[_Fld3363]
,[_Fld3364RRef]
,[_Fld3365RRef]
,[_Fld3366RRef]
,[_Fld3367]
,[_Fld3368RRef]
,[_Fld3369RRef]
,[_Fld3370RRef]
,[_Fld3371RRef]
,[_Fld3372]
,[_Fld3373]
,[_Fld3374RRef]
,[_Fld3375RRef]
,[_Fld3376RRef]
,[_Fld3377]
,[_Fld3378RRef]
,[_Fld27875RRef]
,[_Fld27876RRef]
,[_Fld28054RRef]
,[_Fld28230RRef]
,[_Fld28241]
,[_Fld28242]
,[_Fld28681]
,[_Fld1150]*/
GO
/****** Object: View [pbi].[сборки_комплектующие] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE view [pbi].[сборки_комплектующие]as
SELECT
DATEADD(year, -2000, z._Date_Time) as [Период]
, z._Number as [Номер документа]
, n._IDRRef as [1c_id]
, n._Description as [Номенклатура]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36),n._IDRRef, 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), n._IDRRef, 2),21,4),'-',SUBSTRING(convert(nvarchar(36), n._IDRRef, 2),17,4),'-',SUBSTRING(convert(nvarchar(36), n._IDRRef, 2),1,4),'-',SUBSTRING(convert(nvarchar(36), n._IDRRef, 2),5,12))) as [artic_id]
, -1 * t._Fld3386 * isnull( (SELECT _Fld24768 FROM [MAG_2019].dbo._Reference347X1 u WHERE u._IDRRef = t._Fld3384RRef), 1) as [Количество]
, CASE
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Руб'
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Вал'
ELSE 'Неопределено'
END as [Ценовая группа]
, t._Fld28055 as [код строки]
FROM [MAG_2019].[dbo].[_Document407] z-- Заказ на сборку
INNER JOIN [MAG_2019].[dbo].[_Document407_VT3379] t -- товары -- комплектующик
ON t._Document407_IDRRef = z._IDRRef-- AND t._Fld28055 = k._Fld28070--код строки
INNER JOIN MAG_2019.dbo._Reference188X1 n ON n._IDRRef = t._Fld3381RRef
WHERE z._Posted = 1
and z.[_Fld3352RRef] = 0x97266ED3BEFAB868480833CDF0FCF236 -- статус закрыт
and t._Fld3392 = 0 --не отменено
--and t._Fld28055 > 0 -- номер строки комплекта
and z._Fld3375RRef = 0x8374C64FF49E4478480E940AF675A52B -- сборка; разборка - 0xACE76F03B97D94454E799ED5AD2322CE
GO
/****** Object: View [pbi].[Сборки_комплекты] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [pbi].[Сборки_комплекты] as
SELECT
DATEADD(year, -2000, z.[_Date_Time]) as [Период]
,z.[_Number] as [Номер документа]
, k._Fld28069RRef as [Вариант комплектации]
, k._Fld28059RRef as [1c_id]
, n._Description-- номенклатура комплекта
as [номенклатура]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36),n._IDRRef, 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), n._IDRRef, 2),21,4),'-',SUBSTRING(convert(nvarchar(36), n._IDRRef, 2),17,4),'-',SUBSTRING(convert(nvarchar(36), n._IDRRef, 2),1,4),'-',SUBSTRING(convert(nvarchar(36), n._IDRRef, 2),5,12))) as [artic_id]
, k._Fld28062 * isnull( (SELECT _Fld24768 FROM [MAG_2019].dbo._Reference347X1 u WHERE u._IDRRef = k._Fld28061RRef), 1)
as [количество]
, CASE
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Руб'
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Вал'
ELSE 'Неопределено'
END as [Ценовая группа]
, k._Fld28070 as [код строки]
FROM [MAG_2019].[dbo].[_Document407] z-- Заказ на сборку
INNER JOIN [MAG_2019].[dbo].[_Document407_VT28057] k -- Комплекты
ON z._IDRRef = k._Document407_IDRRef
INNER JOIN MAG_2019.dbo._Reference188X1 n
ON n._IDRRef = k._Fld28059RRef
WHERE z._Posted = 1
and z.[_Fld3352RRef] = 0x97266ED3BEFAB868480833CDF0FCF236 -- статус закрыт
and k._Fld28152 = 0 --не отменено
and z._Fld3375RRef = 0x8374C64FF49E4478480E940AF675A52B
--and z.[_number] = 'АНУТ-000753' and _Date_Time = '4023-03-20 07:01:24'
/* ,[_Fld3348RRef]
,[_Fld3349RRef]
,[_Fld3350RRef]
,[_Fld3351RRef]
,[_Fld3353RRef]
,[_Fld3354RRef]
,[_Fld3355RRef]
,[_Fld3356]
,[_Fld3357]
,[_Fld3358]
,[_Fld3359]
,[_Fld3360]
,[_Fld3361]
,[_Fld3362]
,[_Fld3363]
,[_Fld3364RRef]
,[_Fld3365RRef]
,[_Fld3366RRef]
,[_Fld3367]
,[_Fld3368RRef]
,[_Fld3369RRef]
,[_Fld3370RRef]
,[_Fld3371RRef]
,[_Fld3372]
,[_Fld3373]
,[_Fld3374RRef]
,[_Fld3375RRef]
,[_Fld3376RRef]
,[_Fld3377]
,[_Fld3378RRef]
,[_Fld27875RRef]
,[_Fld27876RRef]
,[_Fld28054RRef]
,[_Fld28230RRef]
,[_Fld28241]
,[_Fld28242]
,[_Fld28681]
,[_Fld1150]*/
GO
/****** Object: View [pbi].[СегментыНоменклатуры] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE view [pbi].[СегментыНоменклатуры] as
SELECT
[_Fld13642RRef] --сегмент
, s._Description as [Сегмент]
, [_Fld13643RRef] as [1c_id]--номенклатура
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), [_Fld13643RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), [_Fld13643RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld13643RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld13643RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), [_Fld13643RRef], 2),5,12) ))as artic_id
FROM [MAG_2019].[dbo].[_InfoRg13641] rg -- регистр сведений Номенклатура сегмента
INNER JOIN [MAG_2019].[dbo].[_Reference285X1] s --справочник сегменты
ON s._IDRRef = rg._Fld13642RRef
GO
/****** Object: View [pbi].[Сохраненные настройки 1С для PowerBI] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE VIEW [pbi].[Сохраненные настройки 1С для PowerBI] as
SELECT
[_Fld27871] as [Параметр]
, CASE [_Fld27872_TYPE]
WHEN 5 THEN [_Fld27872_S]
WHEN 3 THEN cast ([_Fld27872_N] as varchar)
END as [Значение]
FROM [MAG_2019].[dbo].[_InfoRg27869] WHERE [_Fld27870] LIKE '%PowerBI%'
GO
/****** Object: Table [analytics].[deficit_money_request] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[deficit_money_request](
[id] [int] IDENTITY(1,1) NOT NULL,
[scenario_id] [int] NOT NULL,
[g] [nvarchar](255) NULL,
[manufacturer] [nvarchar](255) NULL,
[place_month] [date] NOT NULL,
[deficit] [decimal](18, 2) NOT NULL,
[pay_days] [int] NOT NULL,
[percent] [decimal](9, 6) NOT NULL,
[created_at] [datetime2](0) NOT NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [analytics].[forecast_history] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[forecast_history](
[id] [int] IDENTITY(1,1) NOT NULL,
[forecast_id] [int] NOT NULL,
[scenario_id] [int] NOT NULL,
[1c_id] [binary](16) NOT NULL,
[code] [nvarchar](36) NOT NULL,
[month] [date] NOT NULL,
[old_value] [decimal](18, 3) NULL,
[new_value] [decimal](18, 3) NOT NULL,
[changed_at] [datetime2](0) NOT NULL,
[changed_by] [nvarchar](128) NOT NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [analytics].[load_log_w_ostatok_da_net] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[load_log_w_ostatok_da_net](
[id] [int] IDENTITY(1,1) NOT NULL,
[load_time] [datetime] NOT NULL,
[days_back] [int] NOT NULL,
[rows_updated] [int] NOT NULL,
[duration_sec] [int] NOT NULL,
[created_at] [datetime] NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [analytics].[sales_weekly_features] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[sales_weekly_features](
[sku_id] [varbinary](16) NOT NULL,
[week_start] [date] NOT NULL,
[qty_week] [decimal](18, 4) NOT NULL,
[availability_rate] [decimal](6, 4) NOT NULL,
[year_num] [int] NOT NULL,
[month_num] [tinyint] NOT NULL,
[iso_week] [tinyint] NOT NULL,
[quarter_num] [tinyint] NOT NULL,
[dow_monday1] [tinyint] NOT NULL,
[category_l1] [nvarchar](200) NULL,
[minAvailableQty] [decimal](18, 4) NULL,
[lag_w1] [decimal](18, 4) NULL,
[lag_w2] [decimal](18, 4) NULL,
[lag_w4] [decimal](18, 4) NULL,
[lag_w12] [decimal](18, 4) NULL,
[lag_w26] [decimal](18, 4) NULL,
[lag_w52] [decimal](18, 4) NULL,
[ma4] [decimal](18, 4) NULL,
[ma12] [decimal](18, 4) NULL,
[created_at] [datetime2](7) NOT NULL,
CONSTRAINT [PK_sales_weekly_features] PRIMARY KEY CLUSTERED
(
[sku_id] ASC,
[week_start] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [analytics].[seasonality_groups_summ_1] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[seasonality_groups_summ_1](
[g] [varchar](255) NULL,
[g1] [varchar](255) NULL,
[month] [tinyint] NOT NULL,
[koef] [numeric](38, 23) NULL
) ON [PRIMARY]
GO
/****** Object: Table [analytics].[stock_balance] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[stock_balance](
[Дата] [date] NULL,
[artic_id] [nvarchar](36) NULL,
[1c_id] [binary](16) NULL,
[code] [nchar](11) NULL,
[Остаток склад шт] [numeric](38, 3) NULL,
[Остаток склад упак] [numeric](38, 12) NULL,
[Остаток склад руб] [numeric](26, 7) NULL,
[Остаток склад м3] [numeric](26, 7) NULL,
[Остаток МП, шт] [numeric](26, 7) NULL,
[Остаток МП, руб] [numeric](26, 7) NULL,
[Остаток склад + МП, шт] [numeric](26, 7) NULL,
[Остаток склад + МП, руб] [numeric](26, 7) NULL,
[Остаток склад + в пути + произв., упак] [numeric](26, 7) NULL,
[Остаток склад + в пути + произв., руб] [numeric](26, 7) NULL,
[Остаток склад + МП + в пути + произв., упак] [numeric](26, 7) NULL,
[Остаток склад + МП + в пути + произв., руб] [numeric](26, 7) NULL
) ON [PRIMARY]
GO
/****** Object: Table [analytics].[stock_plan_by_arrival] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[stock_plan_by_arrival](
[scenario_id] [int] NOT NULL,
[arrival_month] [date] NOT NULL,
[1c_id] [binary](16) NOT NULL,
[code] [nvarchar](36) NOT NULL,
[opening_qty] [decimal](18, 3) NOT NULL,
[inbound_confirmed] [decimal](18, 3) NOT NULL,
[inbound_deficit] [decimal](18, 3) NOT NULL,
[forecast_demand] [decimal](18, 3) NOT NULL,
[closing_qty] [decimal](18, 3) NOT NULL,
[updated_at] [datetime2](0) NOT NULL,
CONSTRAINT [PK_stock_plan_by_arrival] PRIMARY KEY CLUSTERED
(
[scenario_id] ASC,
[arrival_month] ASC,
[1c_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [analytics].[прогноз из excel] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[прогноз из excel](
[ut_code] [nvarchar](50) NOT NULL,
[type] [nvarchar](10) NOT NULL,
[forecast_month] [date] NOT NULL,
[forecast_value] [float] NULL,
[user_name] [nvarchar](255) NULL,
[updated_at] [datetime] NULL
) ON [PRIMARY]
GO
/****** Object: Table [analytics].[срез учетных цен] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [analytics].[срез учетных цен](
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Учетная цена] [numeric](21, 9) NULL,
[Учетная цена USD2+2] [numeric](21, 9) NULL,
[Период] [nvarchar](4000) NULL,
[количество] [numeric](21, 9) NULL
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[content_rating] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[content_rating](
[code] [varchar](50) NULL,
[ozon] [int] NULL,
[wb] [int] NOT NULL,
[magok] [int] NULL
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[grades_quartal] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[grades_quartal](
[name] [nvarchar](50) NULL,
[quartal] [nvarchar](50) NULL,
[subject] [nvarchar](50) NULL,
[grade] [int] NULL
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[lineage_edges] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[lineage_edges](
[db_name] [nvarchar](128) NULL,
[from_schema] [nvarchar](128) NULL,
[from_object] [nvarchar](128) NULL,
[from_type] [nvarchar](60) NULL,
[to_schema] [nvarchar](128) NULL,
[to_object] [nvarchar](128) NULL,
[to_type] [nvarchar](60) NULL,
[edge_source] [varchar](27) NOT NULL
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[lineage_objects] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[lineage_objects](
[db_name] [nvarchar](128) NULL,
[schema_name] [sysname] NOT NULL,
[object_name] [sysname] NOT NULL,
[object_type] [char](2) NULL,
[object_type_desc] [nvarchar](60) NULL,
[create_date] [datetime] NOT NULL,
[modify_date] [datetime] NOT NULL
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[order_source] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[order_source](
[order_id] [nvarchar](50) NOT NULL,
[source] [nvarchar](50) NULL,
[campaign] [nvarchar](max) NULL,
[banner_group] [nvarchar](max) NULL,
[phrase_or_cond] [nvarchar](max) NULL,
[product_quantity] [nvarchar](50) NULL,
[product_price] [nvarchar](50) NULL,
[product_quantity_json] [nvarchar](max) NULL,
[product_price_json] [nvarchar](max) NULL,
[campaign_name] [nvarchar](500) NULL,
[banner_group_name] [nvarchar](500) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
/****** Object: Table [dbo].[site_product] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[site_product](
[code] [nvarchar](50) NOT NULL,
[name] [nvarchar](255) NOT NULL,
[active] [bit] NOT NULL,
[quantity] [int] NOT NULL,
[price] [decimal](18, 2) NOT NULL,
CONSTRAINT [PK_site_product] PRIMARY KEY CLUSTERED
(
[code] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Turnover] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Turnover](
[id] [int] IDENTITY(1,1) NOT NULL,
[dt] [datetime] NULL,
[ProductID] [int] NULL,
[StorehouseID] [int] NULL,
[Operation] [int] NOT NULL,
[Quantity] [int] NULL
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[yandex_direct_criteria_stats] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[yandex_direct_criteria_stats](
[id] [int] IDENTITY(1,1) NOT NULL,
[date] [date] NOT NULL,
[campaign_name] [nvarchar](500) NULL,
[campaign_id] [nvarchar](50) NOT NULL,
[adgroup_name] [nvarchar](500) NULL,
[adgroup_id] [nvarchar](50) NOT NULL,
[criterion] [nvarchar](1000) NULL,
[criterion_id] [nvarchar](50) NOT NULL,
[impressions] [int] NULL,
[clicks] [int] NULL,
[ctr] [decimal](10, 4) NULL,
[cost] [decimal](18, 2) NULL,
[avg_cpc] [decimal](18, 2) NULL,
[created_at] [datetime] NULL,
[updated_at] [datetime] NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY],
CONSTRAINT [UQ_adgroup_criterion_date] UNIQUE NONCLUSTERED
(
[adgroup_id] ASC,
[criterion_id] ASC,
[date] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[content_rating] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[content_rating](
[code] [varchar](50) NULL,
[ozon] [int] NULL,
[wb] [int] NULL,
[wb_by_ozon] [int] NULL,
[magok] [int] NULL
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[direct_adv_costs] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[direct_adv_costs](
[Дата] [datetime2](0) NULL,
[Кампания] [nvarchar](255) NULL,
[N кампании] [nvarchar](50) NULL,
[Группа] [nvarchar](255) NULL,
[N группы] [nvarchar](50) NULL,
[Условия показа] [nvarchar](255) NULL,
[N условия показа] [nvarchar](50) NULL,
[Показы] [int] NULL,
[Клики] [int] NULL,
[CTR, %] [decimal](18, 2) NULL,
[Расход, руб] [decimal](18, 2) NULL,
[Ср. цена клика, руб] [decimal](18, 2) NULL
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[direct_orders] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[direct_orders](
[Кампания] [nvarchar](255) NULL,
[Группа] [nvarchar](255) NULL,
[Условия показа] [nvarchar](255) NULL,
[ID покупки] [nvarchar](50) NULL,
[Количество покупок] [int] NULL,
[Доход, руб] [decimal](18, 2) NULL
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[nomenclatureVolumeStorehouse] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[nomenclatureVolumeStorehouse](
[Период] [datetime2](0) NOT NULL,
[balance] [numeric](15, 5) NULL,
[1c_id] [binary](16) NULL,
[storehouse] [binary](16) NULL,
[volume] [numeric](15, 5) NULL,
[totalVolume] [numeric](15, 5) NULL
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[ostatki] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[ostatki](
[artic_id] [nvarchar](36) NULL,
[1c_id] [binary](16) NOT NULL,
[Code] [nchar](11) NOT NULL,
[sklad] [nvarchar](50) NOT NULL,
[Категория склада] [varchar](15) NOT NULL,
[upakovok] [numeric](38, 12) NULL,
[quantity] [numeric](26, 3) NULL,
[upakovka] [numeric](15, 3) NULL,
[date] [datetime2](0) NULL,
[Учетная цена по себест] [numeric](38, 15) NULL,
[Учетная цена по себест, usd2+2] [numeric](38, 15) NULL,
[Учетная цена, старое] [numeric](38, 15) NULL,
[upakovok_ship] [numeric](38, 15) NULL,
[quantity_ship] [numeric](38, 15) NULL
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[ostatki_mp] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[ostatki_mp](
[Дата] [date] NOT NULL,
[Узел] [nvarchar](100) NOT NULL,
[artic_id] [nvarchar](36) NOT NULL,
[id_внешний] [nvarchar](36) NULL,
[Остаток МП, упак] [decimal](18, 3) NULL,
[Доступно МП, упак] [decimal](18, 3) NULL,
[Остаток МП, шт] [decimal](18, 3) NULL
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[Turnover] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[Turnover](
[id] [int] IDENTITY(1,1) NOT NULL,
[dt] [datetime] NULL,
[ProductID] [int] NULL,
[StorehouseID] [int] NULL,
[Operation] [int] NOT NULL,
[Quantity] [int] NULL,
CONSTRAINT [pk_turnover] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[Себестоимость2023] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[Себестоимость2023](
[id] [int] IDENTITY(1,1) NOT NULL,
[Период] [datetime2](0) NULL,
[Статья] [varchar](255) NOT NULL,
[Вид операции] [varchar](255) NOT NULL,
[Хоз операция] [varchar](255) NOT NULL,
[Организация] [varchar](255) NULL,
[Партнер] [varchar](255) NULL,
[Контрагент] [varchar](255) NULL,
[Менеджер] [varchar](255) NULL,
[Тип документа] [varchar](255) NULL,
[Номер документа] [varchar](255) NULL,
[Валюта документа] [varchar](255) NULL,
[Ценовая группа] [varchar](255) NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](38, 15) NULL,
[СуммаБезНДС] [numeric](38, 15) NULL,
[СуммаРучнойСкидки] [numeric](38, 15) NULL,
[СуммаАвтоСкидки] [numeric](38, 15) NULL,
[Закупка] [numeric](38, 15) NULL,
[Закупка, usd2] [numeric](38, 15) NULL,
[Курс usd2] [numeric](15, 3) NULL,
[Курс usd] [numeric](15, 3) NULL,
[Таможня] [numeric](38, 15) NULL,
[ЕАЭС] [numeric](38, 15) NULL,
[Учетная цена] [numeric](38, 15) NULL,
[Учетная цена USD2+2] [numeric](38, 15) NULL,
[Заказ закрыт] [datetime] NULL,
[Номер заказа] [nchar](11) NULL,
[Маркетинг] [numeric](38, 15) NULL,
[Доставка] [numeric](38, 15) NULL,
[НДС] [numeric](38, 15) NULL,
[Сборка] [numeric](38, 15) NULL,
[ЗатратыМП] [numeric](38, 15) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](38, 15) NULL,
[Учетная стоимость USD2+2] [numeric](38, 15) NULL,
[Номер регистратора] [nchar](10) NULL,
[ЗатратыСкладХранение] [numeric](38, 15) NULL,
[ЗатратыСкладЗарплата] [numeric](38, 15) NULL,
[Приемка] [numeric](38, 15) NULL,
[АтсМаркировка] [numeric](38, 15) NULL,
[ВремяВыполненияМинут] [numeric](38, 15) NULL,
[СборкаЗаказа] [numeric](38, 15) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[Себестоимость2024] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[Себестоимость2024](
[id] [int] IDENTITY(1,1) NOT NULL,
[Период] [datetime2](0) NULL,
[Статья] [varchar](255) NOT NULL,
[Вид операции] [varchar](255) NOT NULL,
[Хоз операция] [varchar](255) NOT NULL,
[Организация] [varchar](255) NULL,
[Партнер] [varchar](255) NULL,
[Контрагент] [varchar](255) NULL,
[Менеджер] [varchar](255) NULL,
[Тип документа] [varchar](255) NULL,
[Номер документа] [varchar](255) NULL,
[Валюта документа] [varchar](255) NULL,
[Ценовая группа] [varchar](255) NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](38, 15) NULL,
[СуммаБезНДС] [numeric](38, 15) NULL,
[СуммаРучнойСкидки] [numeric](38, 15) NULL,
[СуммаАвтоСкидки] [numeric](38, 15) NULL,
[Закупка] [numeric](38, 15) NULL,
[Закупка, usd2] [numeric](38, 15) NULL,
[Курс usd2] [numeric](15, 3) NULL,
[Курс usd] [numeric](15, 3) NULL,
[Таможня] [numeric](38, 15) NULL,
[ЕАЭС] [numeric](38, 15) NULL,
[Учетная цена] [numeric](38, 15) NULL,
[Учетная цена USD2+2] [numeric](38, 15) NULL,
[Заказ закрыт] [datetime] NULL,
[Номер заказа] [nchar](11) NULL,
[Маркетинг] [numeric](38, 15) NULL,
[Доставка] [numeric](38, 15) NULL,
[НДС] [numeric](38, 15) NULL,
[Сборка] [numeric](38, 15) NULL,
[ЗатратыМП] [numeric](38, 15) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](38, 15) NULL,
[Учетная стоимость USD2+2] [numeric](38, 15) NULL,
[Номер регистратора] [nchar](10) NULL,
[ЗатратыСкладХранение] [numeric](38, 15) NULL,
[ЗатратыСкладЗарплата] [numeric](38, 15) NULL,
[Приемка] [numeric](38, 15) NULL,
[АтсМаркировка] [numeric](38, 15) NULL,
[ВремяВыполненияМинут] [numeric](38, 15) NULL,
[СборкаЗаказа] [numeric](38, 15) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[СебестоимостьДо2022Тест] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[СебестоимостьДо2022Тест](
[id] [int] IDENTITY(1,1) NOT NULL,
[Период] [datetime2](0) NULL,
[Статья] [varchar](255) NOT NULL,
[Вид операции] [varchar](255) NOT NULL,
[Хоз операция] [varchar](255) NOT NULL,
[Организация] [varchar](255) NULL,
[Партнер] [varchar](255) NULL,
[Контрагент] [varchar](255) NULL,
[Менеджер] [varchar](255) NULL,
[Тип документа] [varchar](255) NULL,
[Номер документа] [varchar](255) NULL,
[Валюта документа] [varchar](255) NULL,
[Ценовая группа] [varchar](255) NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](38, 15) NULL,
[СуммаБезНДС] [numeric](38, 15) NULL,
[СуммаРучнойСкидки] [numeric](38, 15) NULL,
[СуммаАвтоСкидки] [numeric](38, 15) NULL,
[Закупка] [numeric](38, 15) NULL,
[Закупка, usd2] [numeric](38, 15) NULL,
[Курс usd2] [numeric](15, 3) NULL,
[Курс usd] [numeric](15, 3) NULL,
[Таможня] [numeric](38, 15) NULL,
[ЕАЭС] [numeric](38, 15) NULL,
[Учетная цена] [numeric](38, 15) NULL,
[Учетная цена USD2+2] [numeric](38, 15) NULL,
[Заказ закрыт] [datetime] NULL,
[Номер заказа] [nchar](11) NULL,
[Маркетинг] [numeric](38, 15) NULL,
[Доставка] [numeric](38, 15) NULL,
[НДС] [numeric](38, 15) NULL,
[Производство] [numeric](38, 15) NULL,
[ЗатратыМП] [numeric](38, 15) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](38, 15) NULL,
[Учетная стоимость USD2+2] [numeric](38, 15) NULL,
[Номер регистратора] [nchar](10) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [pbi].[СебестоимостьСводныйОт2022Тестовый] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbi].[СебестоимостьСводныйОт2022Тестовый](
[id] [int] IDENTITY(1,1) NOT NULL,
[Период] [datetime2](0) NULL,
[Статья] [varchar](255) NOT NULL,
[Вид операции] [varchar](255) NOT NULL,
[Хоз операция] [varchar](255) NOT NULL,
[Организация] [varchar](255) NULL,
[Партнер] [varchar](255) NULL,
[Контрагент] [varchar](255) NULL,
[Менеджер] [varchar](255) NULL,
[Тип документа] [varchar](255) NULL,
[Номер документа] [varchar](255) NULL,
[Валюта документа] [varchar](255) NULL,
[Ценовая группа] [varchar](255) NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](38, 15) NULL,
[СуммаБезНДС] [numeric](38, 15) NULL,
[СуммаРучнойСкидки] [numeric](38, 15) NULL,
[СуммаАвтоСкидки] [numeric](38, 15) NULL,
[Закупка] [numeric](38, 15) NULL,
[Закупка, usd2] [numeric](38, 15) NULL,
[Курс usd2] [numeric](15, 3) NULL,
[Курс usd] [numeric](15, 3) NULL,
[Таможня] [numeric](38, 15) NULL,
[ЕАЭС] [numeric](38, 15) NULL,
[Учетная цена] [numeric](38, 15) NULL,
[Учетная цена USD2+2] [numeric](38, 15) NULL,
[Заказ закрыт] [datetime] NULL,
[Номер заказа] [nchar](11) NULL,
[Маркетинг] [numeric](38, 15) NULL,
[Доставка] [numeric](38, 15) NULL,
[НДС] [numeric](38, 15) NULL,
[Сборка] [numeric](38, 15) NULL,
[ЗатратыМП] [numeric](38, 15) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](38, 15) NULL,
[Учетная стоимость USD2+2] [numeric](38, 15) NULL,
[Номер регистратора] [nchar](10) NULL,
[Code] [nchar](11) NULL,
[ЗатратыСкладХранение] [numeric](38, 15) NULL,
[Приемка] [numeric](38, 15) NULL,
[АтсМаркировка] [numeric](38, 15) NULL,
[ВремяВыполненияМинут] [numeric](38, 15) NULL,
[СборкаЗаказа] [numeric](38, 15) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [pbiProd].[GroupsOfNomenclature] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbiProd].[GroupsOfNomenclature](
[artic_id] [nchar](36) NOT NULL,
[2k] [int] NULL,
[4k] [int] NULL,
[6k] [int] NULL,
[8k] [int] NULL,
[10k] [int] NULL,
[15k] [int] NULL,
[20k] [int] NULL,
[upload] [int] NULL
) ON [PRIMARY]
GO
/****** Object: Table [pbiProd].[Логирование] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbiProd].[Логирование](
[Инфо] [text] NOT NULL,
[Период] [datetime2](0) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
/****** Object: Table [pbiProd].[НоменклатураВПроизводствеПоУровням] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbiProd].[НоменклатураВПроизводствеПоУровням](
[id] [int] IDENTITY(1,1) NOT NULL,
[1c_id] [binary](16) NULL,
[УровеньПроизводства] [numeric](2, 0) NOT NULL,
[RowNum] [numeric](6, 0) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [pbiProd].[СебестоимостьИтогиДо2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbiProd].[СебестоимостьИтогиДо2022](
[id] [int] IDENTITY(1,1) NOT NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](38, 15) NULL,
[СуммаБезНДС] [numeric](38, 15) NULL,
[СуммаРучнойСкидки] [numeric](38, 15) NULL,
[СуммаАвтоСкидки] [numeric](38, 15) NULL,
[Закупка] [numeric](38, 15) NULL,
[Закупка, usd2] [numeric](38, 15) NULL,
[Таможня] [numeric](38, 15) NULL,
[ЕАЭС] [numeric](38, 15) NULL,
[Учетная цена] [numeric](38, 15) NULL,
[Учетная цена USD2+2] [numeric](38, 15) NULL,
[Доставка] [numeric](38, 15) NULL,
[НДС] [numeric](38, 15) NULL,
[Сборка] [numeric](38, 15) NULL,
[ЗатратыМП] [numeric](38, 15) NULL,
[Учетная стоимость] [numeric](38, 15) NULL,
[Учетная стоимость USD2+2] [numeric](38, 15) NULL,
[1c_id] [binary](16) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [pbiProd].[СебестоимостьПроизводствоОт2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbiProd].[СебестоимостьПроизводствоОт2022](
[id] [int] IDENTITY(1,1) NOT NULL,
[Период] [datetime2](0) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Учетная цена] [numeric](21, 9) NULL,
[Учетная цена USD2+2] [numeric](21, 9) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [pbiProd].[СебестоимостьСводныйОт2022_copy_2025-03-26] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbiProd].[СебестоимостьСводныйОт2022_copy_2025-03-26](
[id] [int] IDENTITY(1,1) NOT NULL,
[Период] [datetime2](0) NULL,
[Статья] [varchar](50) NOT NULL,
[Вид операции] [varchar](25) NOT NULL,
[Хоз операция] [varchar](50) NULL,
[Организация] [varchar](255) NULL,
[Партнер] [varchar](255) NULL,
[Контрагент] [varchar](255) NULL,
[Менеджер] [varchar](255) NULL,
[Тип документа] [varchar](50) NULL,
[Номер документа] [varchar](25) NULL,
[Валюта документа] [varchar](25) NULL,
[Ценовая группа] [varchar](25) NULL,
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL,
[Сумма] [numeric](21, 9) NULL,
[СуммаБезНДС] [numeric](21, 9) NULL,
[СуммаРучнойСкидки] [numeric](21, 9) NULL,
[СуммаАвтоСкидки] [numeric](21, 9) NULL,
[Закупка] [numeric](21, 9) NULL,
[Закупка, usd2] [numeric](21, 9) NULL,
[Курс usd2] [numeric](15, 3) NULL,
[Курс usd] [numeric](15, 3) NULL,
[Таможня] [numeric](21, 9) NULL,
[ЕАЭС] [numeric](21, 9) NULL,
[Учетная цена] [numeric](21, 9) NULL,
[Учетная цена USD2+2] [numeric](21, 9) NULL,
[Заказ закрыт] [datetime] NULL,
[Номер заказа] [nchar](11) NULL,
[Маркетинг] [numeric](21, 9) NULL,
[Доставка] [numeric](21, 9) NULL,
[НДС] [numeric](21, 9) NULL,
[Производство] [numeric](21, 9) NULL,
[ЗатратыМП] [numeric](21, 9) NULL,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] [numeric](21, 9) NULL,
[Учетная стоимость USD2+2] [numeric](21, 9) NULL,
[Номер регистратора] [nchar](10) NULL,
[Code] [nchar](11) NULL,
[ЗатратыСкладХранение] [numeric](21, 9) NULL,
[Приемка] [numeric](21, 9) NULL,
[АтсМаркировка] [numeric](21, 9) NULL,
[ВремяВыполненияМинут] [numeric](21, 9) NULL,
[СборкаЗаказа] [numeric](21, 9) NULL,
[КоличествоУпаковок] [numeric](15, 3) NULL
) ON [PRIMARY]
GO
/****** Object: Table [pbiProd].[УчетнаяЦенаПоСебестоимости] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [pbiProd].[УчетнаяЦенаПоСебестоимости](
[artic_id] [nvarchar](36) NOT NULL,
[Учетная цена] [numeric](15, 6) NULL,
[Учетная цена USD2+2] [numeric](15, 9) NULL,
[Период] [datetime2](0) NOT NULL
) ON [PRIMARY]
GO
/****** Object: Table [stg].[forecast_load] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [stg].[forecast_load](
[1c_id] [nvarchar](100) NOT NULL,
[code] [nvarchar](100) NOT NULL,
[month] [nvarchar](50) NOT NULL,
[value] [nvarchar](100) NOT NULL,
[user_name] [nvarchar](200) NOT NULL,
[updated_at] [nvarchar](100) NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [analytics].[deficit_money_request] ADD DEFAULT (sysdatetime()) FOR [created_at]
GO
ALTER TABLE [analytics].[deficit_proposal] ADD DEFAULT (sysutcdatetime()) FOR [updated_at]
GO
ALTER TABLE [analytics].[forecast] ADD DEFAULT (sysutcdatetime()) FOR [updated_at]
GO
ALTER TABLE [analytics].[forecast] ADD CONSTRAINT [DF_forecast_opt] DEFAULT ((0)) FOR [opt]
GO
ALTER TABLE [analytics].[forecast] ADD CONSTRAINT [DF_forecast_mp] DEFAULT ((0)) FOR [mp]
GO
ALTER TABLE [analytics].[forecast_history] ADD DEFAULT (sysutcdatetime()) FOR [changed_at]
GO
ALTER TABLE [analytics].[forecast_scenarios] ADD DEFAULT (sysutcdatetime()) FOR [created_at]
GO
ALTER TABLE [analytics].[forecast_scenarios] ADD CONSTRAINT [DF_forecast_scenarios_active] DEFAULT ((1)) FOR [active]
GO
ALTER TABLE [analytics].[load_log_w_ostatok_da_net] ADD DEFAULT (sysdatetime()) FOR [created_at]
GO
ALTER TABLE [analytics].[manufacturer_payment_stage] ADD DEFAULT ((0)) FOR [sort_order]
GO
ALTER TABLE [analytics].[manufacturers] ADD DEFAULT ((180)) FOR [days_of_sales]
GO
ALTER TABLE [analytics].[manufacturers] ADD DEFAULT ((120)) FOR [logistics_days]
GO
ALTER TABLE [analytics].[sales_weekly_features] ADD DEFAULT (sysutcdatetime()) FOR [created_at]
GO
ALTER TABLE [analytics].[stock_plan_by_arrival] ADD DEFAULT ((0)) FOR [opening_qty]
GO
ALTER TABLE [analytics].[stock_plan_by_arrival] ADD DEFAULT ((0)) FOR [inbound_confirmed]
GO
ALTER TABLE [analytics].[stock_plan_by_arrival] ADD DEFAULT ((0)) FOR [inbound_deficit]
GO
ALTER TABLE [analytics].[stock_plan_by_arrival] ADD DEFAULT ((0)) FOR [forecast_demand]
GO
ALTER TABLE [analytics].[stock_plan_by_arrival] ADD DEFAULT ((0)) FOR [closing_qty]
GO
ALTER TABLE [analytics].[stock_plan_by_arrival] ADD DEFAULT (sysutcdatetime()) FOR [updated_at]
GO
ALTER TABLE [analytics].[срез учетных цен] ADD DEFAULT (NULL) FOR [количество]
GO
ALTER TABLE [dbo].[site_product] ADD DEFAULT ((1)) FOR [active]
GO
ALTER TABLE [dbo].[site_product] ADD DEFAULT ((0)) FOR [quantity]
GO
ALTER TABLE [dbo].[site_product] ADD DEFAULT ((0)) FOR [price]
GO
ALTER TABLE [dbo].[yandex_direct_criteria_stats] ADD DEFAULT ((0)) FOR [impressions]
GO
ALTER TABLE [dbo].[yandex_direct_criteria_stats] ADD DEFAULT ((0)) FOR [clicks]
GO
ALTER TABLE [dbo].[yandex_direct_criteria_stats] ADD DEFAULT ((0)) FOR [ctr]
GO
ALTER TABLE [dbo].[yandex_direct_criteria_stats] ADD DEFAULT ((0)) FOR [cost]
GO
ALTER TABLE [dbo].[yandex_direct_criteria_stats] ADD DEFAULT ((0)) FOR [avg_cpc]
GO
ALTER TABLE [dbo].[yandex_direct_criteria_stats] ADD DEFAULT (getdate()) FOR [created_at]
GO
ALTER TABLE [dbo].[yandex_direct_criteria_stats] ADD DEFAULT (getdate()) FOR [updated_at]
GO
ALTER TABLE [pbi].[ostatki] ADD DEFAULT ((0)) FOR [Учетная цена по себест]
GO
ALTER TABLE [pbi].[ostatki] ADD DEFAULT ((0)) FOR [Учетная цена по себест, usd2+2]
GO
ALTER TABLE [pbi].[ostatki] ADD DEFAULT ((0)) FOR [Учетная цена, старое]
GO
ALTER TABLE [pbi].[ostatki] ADD DEFAULT ((0)) FOR [upakovok_ship]
GO
ALTER TABLE [pbi].[ostatki] ADD DEFAULT ((0)) FOR [quantity_ship]
GO
ALTER TABLE [pbi].[ostatki_short] ADD DEFAULT ((0)) FOR [Учетная цена, старое]
GO
ALTER TABLE [pbi].[ostatki_short] ADD DEFAULT ((0)) FOR [upakovok_ship]
GO
ALTER TABLE [pbi].[ostatki_short] ADD DEFAULT ((0)) FOR [quantity_ship]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ('') FOR [Вид операции]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ('') FOR [Хоз операция]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ('') FOR [Организация]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ('') FOR [Партнер]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ('') FOR [Контрагент]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ('') FOR [Менеджер]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ('') FOR [Тип документа]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ('') FOR [Номер документа]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ('') FOR [Валюта документа]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ('') FOR [Ценовая группа]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Количество]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Сумма]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [СуммаБезНДС]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [СуммаРучнойСкидки]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [СуммаАвтоСкидки]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Закупка]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Закупка, usd2]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Курс usd2]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Курс usd]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Таможня]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [ЕАЭС]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Учетная цена]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Учетная цена USD2+2]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Маркетинг]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Доставка]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [НДС]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Сборка]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [ЗатратыМП]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Учетная стоимость]
GO
ALTER TABLE [pbi].[Себестоимость] ADD DEFAULT ((0)) FOR [Учетная стоимость USD2+2]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [Количество]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [Сумма]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [СуммаБезНДС]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [СуммаРучнойСкидки]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [СуммаАвтоСкидки]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [Закупка]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [Закупка, usd2]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [Таможня]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [ЕАЭС]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [Учетная цена]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [Учетная цена USD2+2]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [Маркетинг]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [Доставка]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [НДС]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [Сборка]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [ЗатратыМП]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [Учетная стоимость]
GO
ALTER TABLE [pbi].[СебестоимостьПродажи] ADD DEFAULT ((0)) FOR [Учетная стоимость USD2+2]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [Количество]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [Сумма]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [СуммаБезНДС]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [СуммаРучнойСкидки]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [СуммаАвтоСкидки]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [Закупка]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [Закупка, usd2]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [Таможня]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [ЕАЭС]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [Учетная цена]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [Учетная цена USD2+2]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [Маркетинг]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [Доставка]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [НДС]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [Сборка]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [ЗатратыМП]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [Учетная стоимость]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиОт2022] ADD DEFAULT ((0)) FOR [Учетная стоимость USD2+2]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [Количество]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [Сумма]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [СуммаБезНДС]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [СуммаРучнойСкидки]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [СуммаАвтоСкидки]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [Закупка]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [Закупка, usd2]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [Таможня]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [ЕАЭС]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [Учетная цена]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [Учетная цена USD2+2]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [Маркетинг]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [Доставка]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [НДС]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [Сборка]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [ЗатратыМП]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [Учетная стоимость]
GO
ALTER TABLE [pbi].[СебестоимостьПродажиТест] ADD DEFAULT ((0)) FOR [Учетная стоимость USD2+2]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ('') FOR [Вид операции]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ('') FOR [Хоз операция]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ('') FOR [Организация]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ('') FOR [Партнер]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ('') FOR [Контрагент]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ('') FOR [Менеджер]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ('') FOR [Тип документа]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ('') FOR [Номер документа]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ('') FOR [Валюта документа]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ('') FOR [Ценовая группа]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Количество]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Сумма]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [СуммаБезНДС]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [СуммаРучнойСкидки]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [СуммаАвтоСкидки]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Закупка]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Закупка, usd2]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Курс usd2]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Курс usd]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Таможня]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [ЕАЭС]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Учетная цена]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Учетная цена USD2+2]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Маркетинг]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Доставка]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [НДС]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Сборка]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [ЗатратыМП]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Учетная стоимость]
GO
ALTER TABLE [pbi].[СебестоимостьТест] ADD DEFAULT ((0)) FOR [Учетная стоимость USD2+2]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ('') FOR [Вид операции]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ('') FOR [Хоз операция]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ('') FOR [Организация]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ('') FOR [Партнер]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ('') FOR [Контрагент]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ('') FOR [Менеджер]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ('') FOR [Тип документа]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ('') FOR [Номер документа]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ('') FOR [Валюта документа]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ('') FOR [Ценовая группа]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Количество]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Сумма]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [СуммаБезНДС]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [СуммаРучнойСкидки]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [СуммаАвтоСкидки]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Закупка]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Закупка, usd2]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Курс usd2]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Курс usd]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Таможня]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [ЕАЭС]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Учетная цена]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Учетная цена USD2+2]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Маркетинг]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Доставка]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [НДС]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Производство]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [ЗатратыМП]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Учетная стоимость]
GO
ALTER TABLE [pbiProd].[СебестоимостьДо2022] ADD DEFAULT ((0)) FOR [Учетная стоимость USD2+2]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [Количество]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [Сумма]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [СуммаБезНДС]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [СуммаРучнойСкидки]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [СуммаАвтоСкидки]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [Закупка]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [Закупка, usd2]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [Таможня]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [ЕАЭС]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [Учетная цена]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [Учетная цена USD2+2]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [Доставка]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [НДС]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [Сборка]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [ЗатратыМП]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [Учетная стоимость]
GO
ALTER TABLE [pbiProd].[СебестоимостьИтогиДо2022] ADD DEFAULT ((0)) FOR [Учетная стоимость USD2+2]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ('') FOR [Вид операции]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ('') FOR [Хоз операция]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ('') FOR [Организация]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ('') FOR [Партнер]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ('') FOR [Контрагент]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ('') FOR [Менеджер]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ('') FOR [Тип документа]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ('') FOR [Номер документа]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ('') FOR [Валюта документа]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ('') FOR [Ценовая группа]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Количество]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Сумма]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [СуммаБезНДС]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [СуммаРучнойСкидки]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [СуммаАвтоСкидки]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Закупка]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Закупка, usd2]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Курс usd2]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Курс usd]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Таможня]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [ЕАЭС]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Учетная цена]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Учетная цена USD2+2]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Маркетинг]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Доставка]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [НДС]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Производство]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [ЗатратыМП]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Учетная стоимость]
GO
ALTER TABLE [pbiProd].[СебестоимостьОт2022] ADD DEFAULT ((0)) FOR [Учетная стоимость USD2+2]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ('') FOR [Вид операции]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ('') FOR [Хоз операция]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ('') FOR [Организация]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ('') FOR [Партнер]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ('') FOR [Контрагент]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ('') FOR [Менеджер]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ('') FOR [Тип документа]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ('') FOR [Номер документа]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ('') FOR [Валюта документа]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ('') FOR [Ценовая группа]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Количество]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Сумма]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [СуммаБезНДС]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [СуммаРучнойСкидки]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [СуммаАвтоСкидки]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Закупка]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Закупка, usd2]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Курс usd2]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Курс usd]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Таможня]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [ЕАЭС]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Учетная цена]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Учетная цена USD2+2]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Маркетинг]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Доставка]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [НДС]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Производство]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [ЗатратыМП]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Учетная стоимость]
GO
ALTER TABLE [pbiProd].[СебестоимостьСводныйОт2022] ADD DEFAULT ((0)) FOR [Учетная стоимость USD2+2]
GO
ALTER TABLE [analytics].[forecast] WITH CHECK ADD CONSTRAINT [FK_forecast_scenario] FOREIGN KEY([scenario_id])
REFERENCES [analytics].[forecast_scenarios] ([scenario_id])
ON DELETE CASCADE
GO
ALTER TABLE [analytics].[forecast] CHECK CONSTRAINT [FK_forecast_scenario]
GO
ALTER TABLE [analytics].[manufacturer_payment_stage] WITH CHECK ADD CONSTRAINT [FK_manufacturer_payment_stage] FOREIGN KEY([manufacturer_id])
REFERENCES [analytics].[manufacturers] ([id])
ON DELETE CASCADE
GO
ALTER TABLE [analytics].[manufacturer_payment_stage] CHECK CONSTRAINT [FK_manufacturer_payment_stage]
GO
/****** Object: StoredProcedure [analytics].[create_forecast_loop] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procedure [analytics].[create_forecast_loop] as begin
DECLARE @from_month DATE = DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1);
DECLARE @to_month_excl DATE = '2027-01-01';
DECLARE @scenario_id INT = 4;
DECLARE @path NVARCHAR(255);
DECLARE cur CURSOR LOCAL FAST_FORWARD FOR
SELECT [path]
FROM [pbi].[groups] g
WHERE [lvl] = 2
AND g.[path] NOT LIKE '*%' -- (опционально) исключить служебные группы
/*AND (
g.[path] LIKE N'Р%' OR
g.[path] LIKE N'С%' OR
g.[path] LIKE N'Т%' OR
g.[path] LIKE N'У%' OR
g.[path] LIKE N'Ф%' OR
g.[path] LIKE N'Х%' OR
g.[path] LIKE N'Ц%' OR
g.[path] LIKE N'Ч%' OR
g.[path] LIKE N'Ш%' OR
g.[path] LIKE N'Щ%' OR
g.[path] LIKE N'Э%' OR
g.[path] LIKE N'Ю%' OR
g.[path] LIKE N'Я%'
)*/
ORDER BY [path];
OPEN cur;
FETCH NEXT FROM cur INTO @path;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT CONCAT('Rebuild forecast for: ', @path);
EXEC [analytics].[sp_build_forecast_s4_by_group]
@path = @path,
@from_month = @from_month,
@to_month_excl = @to_month_excl,
@scenario_id = @scenario_id;
FETCH NEXT FROM cur INTO @path;
END
CLOSE cur;
DEALLOCATE cur;
END
GO
/****** Object: StoredProcedure [analytics].[create_seasonality_groups] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [analytics].[create_seasonality_groups] as
BEGIN
/* 1) Таблица результата */
IF NOT EXISTS (
SELECT 1
FROM sys.tables t
JOIN sys.schemas s ON s.schema_id = t.schema_id
WHERE s.name = 'analytics' AND t.name = 'seasonality_groups'
)
BEGIN
CREATE TABLE [analytics].[seasonality_groups](
[group_1c_id] BINARY(16) NOT NULL,
[month] TINYINT NOT NULL, -- 1..12
[seasonal_koef] DECIMAL(18,6) NOT NULL,
CONSTRAINT [PK_seasonality_groups] PRIMARY KEY ([group_1c_id], [month])
);
CREATE INDEX [IX_seasonality_groups_month]
ON [analytics].[seasonality_groups]([month]);
END
TRUNCATE TABLE [analytics].[seasonality_groups];
/* 2) Пересчёт коэффициентов сезонности для g и g1 */
;WITH
-- Продажи по товарам за последние 24 месяца (кол-во)
[base_sales] AS (
SELECT
[n].[1c_id] AS [sku_1c_id],
[gcur].[g],
[gcur].[g1],
[v].[Период] AS [dt],
CAST([v].[Количество] AS DECIMAL(18,6)) AS [qty]
FROM [mag_pbi].[pbiProd].[СводныйСебестоимость Для PBI] AS [v]
JOIN [pbi].[nomenclature] AS [n]
ON [n].[1c_id] = [v].[1c_id]
LEFT JOIN [pbi].[groups] AS [gcur]
ON [gcur].[1c_id] = [n].[1c_group]
WHERE [v].[Статья] = N'Реализация'
AND [v].[Период] >= DATEADD(YEAR, -2, CAST(GETDATE() AS date))
),
-- Агрегация по месяцам и уровню g (lvl=0)
[lvl0_monthly] AS (
SELECT
[g0].[1c_id] AS [group_1c_id],
DATEFROMPARTS(YEAR([b].[dt]), MONTH([b].[dt]), 1) AS [month_start],
SUM([b].[qty]) AS [qty_m]
FROM [base_sales] AS [b]
JOIN [pbi].[groups] AS [g0]
ON [g0].[lvl] = 1
AND [g0].[g] = [b].[g]
GROUP BY [g0].[1c_id], DATEFROMPARTS(YEAR([b].[dt]), MONTH([b].[dt]), 1)
),
-- Агрегация по месяцам и уровню g1 (lvl=1)
[lvl1_monthly] AS (
SELECT
[g1].[1c_id] AS [group_1c_id],
DATEFROMPARTS(YEAR([b].[dt]), MONTH([b].[dt]), 1) AS [month_start],
SUM([b].[qty]) AS [qty_m]
FROM [base_sales] AS [b]
JOIN [pbi].[groups] AS [g1]
ON [g1].[lvl] = 2
AND [g1].[g1] = [b].[g1]
GROUP BY [g1].[1c_id], DATEFROMPARTS(YEAR([b].[dt]), MONTH([b].[dt]), 1)
),
-- Объединяем уровни
[monthly_union] AS (
SELECT * FROM [lvl0_monthly]
UNION ALL
SELECT * FROM [lvl1_monthly]
),
-- Средние по «месяцу года»
[per_moy] AS (
SELECT
[u].[group_1c_id],
MONTH([u].[month_start]) AS [month],
AVG([u].[qty_m]) AS [avg_qty_moy]
FROM [monthly_union] AS [u]
GROUP BY [u].[group_1c_id], MONTH([u].[month_start])
),
-- Общая средняя по группе
[overall] AS (
SELECT
[u].[group_1c_id],
AVG([u].[qty_m]) AS [overall_avg_monthly]
FROM [monthly_union] AS [u]
GROUP BY [u].[group_1c_id]
),
-- Черновой коэффициент
[raw_koef] AS (
SELECT
[p].[group_1c_id],
[p].[month],
CASE
WHEN [o].[overall_avg_monthly] = 0 THEN 0
ELSE [p].[avg_qty_moy] / [o].[overall_avg_monthly]
END AS [k_raw]
FROM [per_moy] AS [p]
JOIN [overall] AS [o]
ON [o].[group_1c_id] = [p].[group_1c_id]
),
[norm] AS (
SELECT
[r].[group_1c_id],
[r].[month],
[r].[k_raw] / NULLIF(AVG([r].[k_raw]) OVER (PARTITION BY [r].[group_1c_id]), 0) AS [seasonal_koef]
FROM [raw_koef] AS [r]
)
INSERT INTO [analytics].[seasonality_groups] ([group_1c_id], [month], [seasonal_koef])
SELECT [group_1c_id], [month], CAST([seasonal_koef] AS DECIMAL(18,6))
FROM [norm];
END
GO
/****** Object: StoredProcedure [analytics].[sp_build_deficit_proposal] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/* =======================================================================
[analytics].[sp_build_deficit_proposal]
— Дефицит и рекомендации к заказу с учётом:
• стартовых остатков (склад + МП),
• прихода из заказов (4 статуса, включая 'Согласован'),
• прогноза по сценарию,
НЕТ бэк-ордеров: спрос не «копится» ниже нуля,
остаток считается итеративно и не уходит в минус,
• размер заказа = прогноз окна [T .. T + @cover_months).
======================================================================= */
CREATE PROCEDURE [analytics].[sp_build_deficit_proposal]
@scenario_id INT = 4, -- ID сценария прогноза
@group_path NVARCHAR(255) = N'', -- path группы ('' = весь каталог)
@lead_time_m INT = 4, -- срок поставки (мес.)
@cover_months INT = 6, -- покрытие (мес.)
@from_month DATE = NULL, -- старт (1-е число месяца)
@to_month_excl DATE = '2028-01-01', -- полуинтервал [from, to)
@debug BIT = 0
AS
BEGIN
SET NOCOUNT ON;
/* 0) Чистим прошлые данные по сценарию */
DELETE FROM [analytics].[deficit_proposal] WHERE scenario_id = @scenario_id;
/* Нормализация параметров */
SET @group_path = LTRIM(RTRIM(REPLACE(@group_path, '''', N'')));
IF @from_month IS NULL
SET @from_month = DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1);
/* 1) Календарь */
IF OBJECT_ID('tempdb..#cal') IS NOT NULL DROP TABLE #cal;
CREATE TABLE #cal (month_start DATE NOT NULL PRIMARY KEY);
;WITH cal AS (
SELECT @from_month AS month_start
UNION ALL
SELECT DATEADD(MONTH, 1, month_start)
FROM cal
WHERE month_start < DATEADD(MONTH, -1, @to_month_excl)
)
INSERT INTO #cal(month_start)
SELECT month_start FROM cal
OPTION (MAXRECURSION 32767);
/* 2) SKU по group_path */
IF OBJECT_ID('tempdb..#skus') IS NOT NULL DROP TABLE #skus;
CREATE TABLE #skus (
sku_1c_id BINARY(16) NOT NULL PRIMARY KEY,
code NVARCHAR(36) NULL,
minAvail DECIMAL(18,6) NULL
);
INSERT INTO #skus(sku_1c_id, code, minAvail)
SELECT n.[1c_id], n.[code], n.[minAvailableQty]
FROM [pbi].[nomenclature] n
JOIN [pbi].[groups] g ON g.[1c_id] = n.[1c_group]
WHERE g.[path] LIKE @group_path + N'%';
IF NOT EXISTS (SELECT 1 FROM #skus)
BEGIN
RAISERROR(N'По path=%s не найдено SKU.', 16, 1, @group_path);
RETURN;
END
/* 3) Прогноз по сценарию */
IF OBJECT_ID('tempdb..#fcast') IS NOT NULL DROP TABLE #fcast;
CREATE TABLE #fcast (
sku_1c_id BINARY(16) NOT NULL,
[month] DATE NOT NULL,
qty DECIMAL(18,3) NOT NULL,
PRIMARY KEY (sku_1c_id, [month])
);
INSERT INTO #fcast(sku_1c_id, [month], qty)
SELECT f.[1c_id], f.[month], f.[value]
FROM [analytics].[forecast] f
JOIN #skus s ON s.sku_1c_id = f.[1c_id]
WHERE f.[scenario_id] = @scenario_id
AND f.[month] >= @from_month
AND f.[month] < @to_month_excl;
/* 4) Приходы из заказов (по месяцам) */
IF OBJECT_ID('tempdb..#inb_status') IS NOT NULL DROP TABLE #inb_status;
CREATE TABLE #inb_status (
sku_1c_id BINARY(16) NOT NULL,
[month] DATE NOT NULL,
[status] NVARCHAR(100) NOT NULL,
units DECIMAL(18,3) NOT NULL,
PRIMARY KEY (sku_1c_id, [month], [status])
);
INSERT INTO #inb_status(sku_1c_id, [month], [status], units)
SELECT
s.sku_1c_id,
DATEFROMPARTS(TRY_CONVERT(INT, LEFT(o.[month], 4)),
TRY_CONVERT(INT, SUBSTRING(o.[month], 6, 2)), 1),
o.[status],
SUM(COALESCE(o.[units], 0.0))
FROM [analytics].[get_orders_by_group] o
JOIN #skus s ON s.code = o.[code]
WHERE o.[status] IN (N'В пути', N'В производстве', N'Выгружен на складе'/*, N'Согласован'*/)
AND TRY_CONVERT(INT, LEFT(o.[month], 4)) IS NOT NULL
AND TRY_CONVERT(INT, SUBSTRING(o.[month], 6, 2)) BETWEEN 1 AND 12
GROUP BY s.sku_1c_id,
DATEFROMPARTS(TRY_CONVERT(INT, LEFT(o.[month], 4)),
TRY_CONVERT(INT, SUBSTRING(o.[month], 6, 2)), 1),
o.[status];
IF OBJECT_ID('tempdb..#inb') IS NOT NULL DROP TABLE #inb;
CREATE TABLE #inb (
sku_1c_id BINARY(16) NOT NULL,
[month] DATE NOT NULL,
units DECIMAL(18,3) NOT NULL,
PRIMARY KEY (sku_1c_id, [month])
);
INSERT INTO #inb(sku_1c_id, [month], units)
SELECT sku_1c_id, [month], SUM(units)
FROM #inb_status
WHERE [month] >= @from_month AND [month] < @to_month_excl
GROUP BY sku_1c_id, [month];
/* 5) Стартовые остатки: склад + МП */
IF OBJECT_ID('tempdb..#stock_base') IS NOT NULL DROP TABLE #stock_base;
CREATE TABLE #stock_base (sku_1c_id BINARY(16) NOT NULL PRIMARY KEY, qty DECIMAL(18,3) NOT NULL);
INSERT INTO #stock_base(sku_1c_id, qty)
SELECT s.sku_1c_id, COALESCE(b.qty, 0.0)
FROM #skus s
LEFT JOIN (
SELECT code, SUM(COALESCE(quantity_base,0.0)) AS qty
FROM [analytics].[get_quantity_by_group]
GROUP BY code
) b ON b.code = s.code;
IF OBJECT_ID('tempdb..#stock_mp') IS NOT NULL DROP TABLE #stock_mp;
CREATE TABLE #stock_mp (sku_1c_id BINARY(16) NOT NULL PRIMARY KEY, qty DECIMAL(18,3) NOT NULL);
INSERT INTO #stock_mp(sku_1c_id, qty)
SELECT s.sku_1c_id, COALESCE(m.qty, 0.0)
FROM #skus s
LEFT JOIN (
SELECT code, SUM(COALESCE(quantity_base,0.0)) AS qty
FROM [analytics].[get_mp_quantity_by_group]
GROUP BY code
) m ON m.code = s.code;
IF OBJECT_ID('tempdb..#stock0') IS NOT NULL DROP TABLE #stock0;
CREATE TABLE #stock0 (sku_1c_id BINARY(16) NOT NULL PRIMARY KEY, qty DECIMAL(18,3) NOT NULL);
INSERT INTO #stock0(sku_1c_id, qty)
SELECT s.sku_1c_id, COALESCE(b.qty,0) + COALESCE(mp.qty,0)
FROM #skus s
LEFT JOIN #stock_base b ON b.sku_1c_id = s.sku_1c_id
LEFT JOIN #stock_mp mp ON mp.sku_1c_id = s.sku_1c_id;
/* 6) Лента (сырой спрос/приход) */
IF OBJECT_ID('tempdb..#tl') IS NOT NULL DROP TABLE #tl;
CREATE TABLE #tl (
sku_1c_id BINARY(16) NOT NULL,
[month] DATE NOT NULL,
demand_m DECIMAL(18,3) NOT NULL,
inb_m DECIMAL(18,3) NOT NULL,
cum_d DECIMAL(38,3) NULL, -- кумулятив обслуженного спроса
cum_i DECIMAL(38,3) NULL, -- кумулятив прихода
net_stock DECIMAL(38,3) NULL, -- итоговый остаток месяца (>=0)
served_m DECIMAL(18,3) NULL, -- обслуженный спрос в месяце
lost_m DECIMAL(18,3) NULL, -- потерянный спрос в месяце
PRIMARY KEY (sku_1c_id, [month])
);
INSERT INTO #tl(sku_1c_id, [month], demand_m, inb_m)
SELECT s.sku_1c_id, c.month_start,
COALESCE(f.qty, 0.0),
COALESCE(i.units, 0.0)
FROM #skus s
CROSS JOIN #cal c
LEFT JOIN #fcast f ON f.sku_1c_id = s.sku_1c_id AND f.[month] = c.month_start
LEFT JOIN #inb i ON i.sku_1c_id = s.sku_1c_id AND i.[month] = c.month_start;
/* 6.1) Пронумеруем месяцы (для рекурсивного расчёта без бэк-ордеров) */
IF OBJECT_ID('tempdb..#seq') IS NOT NULL DROP TABLE #seq;
CREATE TABLE #seq (
sku_1c_id BINARY(16) NOT NULL,
[month] DATE NOT NULL,
demand_m DECIMAL(18,3) NOT NULL,
inb_m DECIMAL(18,3) NOT NULL,
rn INT NOT NULL,
PRIMARY KEY (sku_1c_id, rn)
);
INSERT INTO #seq(sku_1c_id, [month], demand_m, inb_m, rn)
SELECT t.sku_1c_id, t.[month], t.demand_m, t.inb_m,
ROW_NUMBER() OVER (PARTITION BY t.sku_1c_id ORDER BY t.[month])
FROM #tl t;
/* 6.2) Рекурсивный расчёт: served/lost/net_stock (без накопления спроса ниже нуля) */
IF OBJECT_ID('tempdb..#flow') IS NOT NULL DROP TABLE #flow;
CREATE TABLE #flow(
sku_1c_id BINARY(16) NOT NULL,
rn INT NOT NULL,
[month] DATE NOT NULL,
demand_m DECIMAL(18,3) NOT NULL,
inb_m DECIMAL(18,3) NOT NULL,
served_m DECIMAL(18,3) NOT NULL,
lost_m DECIMAL(18,3) NOT NULL,
net_stock DECIMAL(38,3) NOT NULL,
PRIMARY KEY (sku_1c_id, rn)
);
;WITH r AS (
/* первый месяц */
SELECT
s.sku_1c_id, s.rn, s.[month], s.demand_m, s.inb_m,
CAST(
CASE WHEN st.qty + s.inb_m >= s.demand_m
THEN s.demand_m
ELSE st.qty + s.inb_m
END
AS DECIMAL(18,3)) AS served_m,
CAST(
CASE WHEN st.qty + s.inb_m >= s.demand_m
THEN 0.0
ELSE s.demand_m - (st.qty + s.inb_m)
END
AS DECIMAL(18,3)) AS lost_m,
CAST(
CASE WHEN st.qty + s.inb_m - s.demand_m < 0
THEN 0
ELSE st.qty + s.inb_m - s.demand_m
END
AS DECIMAL(38,3)) AS net_stock
FROM #seq s
JOIN #stock0 st ON st.sku_1c_id = s.sku_1c_id
WHERE s.rn = 1
UNION ALL
/* последующие месяцы */
SELECT
s.sku_1c_id, s.rn, s.[month], s.demand_m, s.inb_m,
CAST(
CASE WHEN r.net_stock + s.inb_m >= s.demand_m
THEN s.demand_m
ELSE r.net_stock + s.inb_m
END
AS DECIMAL(18,3)) AS served_m,
CAST(
CASE WHEN r.net_stock + s.inb_m >= s.demand_m
THEN 0.0
ELSE s.demand_m - (r.net_stock + s.inb_m)
END
AS DECIMAL(18,3)) AS lost_m,
CAST(
CASE WHEN r.net_stock + s.inb_m - s.demand_m < 0
THEN 0
ELSE r.net_stock + s.inb_m - s.demand_m
END
AS DECIMAL(38,3)) AS net_stock
FROM r
JOIN #seq s
ON s.sku_1c_id = r.sku_1c_id
AND s.rn = r.rn + 1
)
INSERT INTO #flow
SELECT * FROM r
OPTION (MAXRECURSION 32767);
/* 6.3) Обновим #tl: кумулятивы по обслуженному спросу/приходу и итоговый остаток */
;WITH cd AS (
SELECT f.sku_1c_id, s.[month],
SUM(f.served_m) OVER (PARTITION BY f.sku_1c_id ORDER BY f.rn ROWS UNBOUNDED PRECEDING) AS cum_d_served,
SUM(s.inb_m) OVER (PARTITION BY s.sku_1c_id ORDER BY s.rn ROWS UNBOUNDED PRECEDING) AS cum_i_raw,
f.net_stock, f.served_m, f.lost_m
FROM #flow f
JOIN #seq s ON s.sku_1c_id = f.sku_1c_id AND s.rn = f.rn
)
UPDATE t
SET t.cum_d = cd.cum_d_served,
t.cum_i = cd.cum_i_raw,
t.net_stock = cd.net_stock,
t.served_m = cd.served_m,
t.lost_m = cd.lost_m
FROM #tl t
JOIN cd ON cd.sku_1c_id = t.sku_1c_id AND cd.[month] = t.[month];
/* 7) Первый месяц дефицита T (учитываем lead_time) */
DECLARE @start_T DATE =
DATEFROMPARTS(YEAR(DATEADD(MONTH, @lead_time_m, @from_month)),
MONTH(DATEADD(MONTH, @lead_time_m, @from_month)), 1);
IF OBJECT_ID('tempdb..#first_def') IS NOT NULL DROP TABLE #first_def;
CREATE TABLE #first_def (sku_1c_id BINARY(16) NOT NULL PRIMARY KEY, T DATE NULL);
INSERT INTO #first_def(sku_1c_id, T)
SELECT d.sku_1c_id, MIN(d.[month]) AS T
FROM (
SELECT t.sku_1c_id, t.[month]
FROM #tl t
JOIN #skus s ON s.sku_1c_id = t.sku_1c_id
WHERE t.net_stock < COALESCE(s.minAvail, 0.0)
AND t.[month] >= @start_T
) d
GROUP BY d.sku_1c_id;
/* 8) Якоря: T, T+C, T+2C ... */
IF OBJECT_ID('tempdb..#anchors') IS NOT NULL DROP TABLE #anchors;
CREATE TABLE #anchors (
sku_1c_id BINARY(16) NOT NULL,
T DATE NOT NULL,
PRIMARY KEY (sku_1c_id, T)
);
;WITH recur AS (
SELECT fd.sku_1c_id, fd.T
FROM #first_def fd
WHERE fd.T IS NOT NULL
UNION ALL
SELECT r.sku_1c_id, DATEADD(MONTH, @cover_months, r.T)
FROM recur r
WHERE DATEADD(MONTH, @cover_months, r.T) < @to_month_excl
)
INSERT INTO #anchors(sku_1c_id, T)
SELECT sku_1c_id, T
FROM recur
OPTION (MAXRECURSION 32767);
/* 9) Подготовка строк к вставке (размер заказа = прогноз окна) */
IF OBJECT_ID('tempdb..#rows_to_insert') IS NOT NULL DROP TABLE #rows_to_insert;
CREATE TABLE #rows_to_insert (
[scenario_id] INT,
[group_name] NVARCHAR(255),
[1c_id] BINARY(16),
[code] NVARCHAR(36),
[place_month] DATE,
[arrival_month] DATE,
[demand_window_C] DECIMAL(18,3),
[projected_stock_at_T] DECIMAL(18,3),
[order_qty] DECIMAL(18,3)
);
;WITH base AS (
SELECT
s.sku_1c_id,
s.code,
a.T,
st.qty AS stock0,
/* прогноз окна [T .. T+C) */
(SELECT SUM(demand_m)
FROM #tl z
WHERE z.sku_1c_id = s.sku_1c_id
AND z.[month] >= a.T
AND z.[month] < DATEADD(MONTH, @cover_months, a.T)
) AS demand_window,
/* кумулятивы до T-1 (обслуженный спрос и приход) */
(SELECT TOP (1) z.cum_i
FROM #tl z
WHERE z.sku_1c_id = s.sku_1c_id
AND z.[month] < a.T
ORDER BY z.[month] DESC
) AS cum_i_before,
(SELECT TOP (1) z.cum_d
FROM #tl z
WHERE z.sku_1c_id = s.sku_1c_id
AND z.[month] < a.T
ORDER BY z.[month] DESC
) AS cum_d_before,
/* приход именно в T */
(SELECT SUM(inb_m)
FROM #tl z
WHERE z.sku_1c_id = s.sku_1c_id
AND z.[month] = a.T
) AS inb_t
FROM #anchors a
JOIN #skus s ON s.sku_1c_id = a.sku_1c_id
JOIN #stock0 st ON st.sku_1c_id = s.sku_1c_id
)
INSERT INTO #rows_to_insert
SELECT
@scenario_id,
@group_path,
b.sku_1c_id,
b.code,
DATEADD(MONTH, -@lead_time_m, b.T) AS place_month,
b.T AS arrival_month,
CAST(ISNULL(b.demand_window,0) AS DECIMAL(18,3)) AS demand_window_C,
/* старт на T (после прихода T), снизу 0 */
CAST(
CASE
WHEN ( ISNULL(b.stock0,0)
+ ISNULL(b.cum_i_before,0)
+ ISNULL(b.inb_t,0)
- ISNULL(b.cum_d_before,0) ) < 0
THEN 0
ELSE ( ISNULL(b.stock0,0)
+ ISNULL(b.cum_i_before,0)
+ ISNULL(b.inb_t,0)
- ISNULL(b.cum_d_before,0) )
END
AS DECIMAL(18,3)) AS projected_stock_at_T,
/* размер заказа = прогноз окна */
CAST(ISNULL(b.demand_window,0) AS DECIMAL(18,3)) AS order_qty
FROM base AS b;
/* 10) Вставка рекомендаций (незначащие — отбрасываем) */
INSERT INTO [analytics].[deficit_proposal]
([scenario_id], [group_name], [1c_id], [code],
[place_month], [arrival_month],
[demand_window_C], [projected_stock_at_T], [order_qty],
[updated_at])
SELECT
scenario_id, group_name, [1c_id], [code],
[place_month], [arrival_month],
[demand_window_C], [projected_stock_at_T], [order_qty],
GETDATE()
FROM #rows_to_insert
WHERE [order_qty] > 0;
/* 11) Отладка по желанию */
IF @debug = 1
BEGIN
SELECT TOP (200)
r.[code], r.[arrival_month], r.[place_month],
r.[projected_stock_at_T], r.[demand_window_C], r.[order_qty]
FROM #rows_to_insert r
ORDER BY r.[arrival_month], r.[code];
END
END
GO
/****** Object: StoredProcedure [analytics].[sp_build_forecast_s4_by_group] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [analytics].[sp_build_forecast_s4_by_group]
@path NVARCHAR(255), -- путь группы (например, N'Игрушки')
@from_month DATE = NULL, -- по умолчанию: 1-е число текущего месяца
@to_month_excl DATE = '2028-01-01', -- полуинтервал [from, to)
@scenario_id INT = 4,
@allow_fallback_all BIT = 0 -- 1 = если группа не найдена/пустая → считать весь каталог с дефолтной сезонностью
AS
BEGIN
SET NOCOUNT ON;
----------------------------------------------------------------
-- Нормализация пути: убираем лишние кавычки и пробелы
----------------------------------------------------------------
SET @path = LTRIM(RTRIM(REPLACE(@path, '''', N'')));
IF @from_month IS NULL
SET @from_month = DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1);
----------------------------------------------------------------
-- Идентификаторы групп для сезонности
----------------------------------------------------------------
DECLARE @season_group_id BINARY(16) = NULL;
DECLARE @DEFAULT_GROUP_ID BINARY(16) = 0x00000000000000000000000000000000;
-- Пытаемся найти группу ровно по path
SELECT @season_group_id = g.[1c_id]
FROM [pbi].[groups] g
WHERE g.[path] = @path;
-- Если нет точного совпадения, ищем верхний узел, начинающийся с @path
IF @season_group_id IS NULL
BEGIN
SELECT TOP (1) @season_group_id = g.[1c_id]
FROM [pbi].[groups] g
WHERE g.[path] LIKE @path + N'%'
ORDER BY g.[lvl] ASC;
END
-- Если группу так и не нашли: по умолчанию НЕ уходим на весь каталог (защита от опечаток)
IF @season_group_id IS NULL AND @allow_fallback_all = 0
BEGIN
RAISERROR (N'Группа с path = %s не найдена. Проверьте параметр @path или запустите с @allow_fallback_all=1 для расчёта по всему каталогу.', 16, 1, @path);
RETURN;
END
-- Если всё-таки нужно фолбэкнуть на дефолтную сезонность
IF @season_group_id IS NULL AND @allow_fallback_all = 1
SET @season_group_id = @DEFAULT_GROUP_ID;
----------------------------------------------------------------
-- TEMP: календарь месяцев [from, to)
----------------------------------------------------------------
IF OBJECT_ID('tempdb..#cal') IS NOT NULL DROP TABLE #cal;
CREATE TABLE #cal (month_start DATE NOT NULL PRIMARY KEY);
;WITH cal AS (
SELECT @from_month AS month_start
UNION ALL
SELECT DATEADD(MONTH, 1, month_start)
FROM cal
WHERE month_start < DATEADD(MONTH, -1, @to_month_excl)
)
INSERT INTO #cal(month_start)
SELECT month_start FROM cal
OPTION (MAXRECURSION 32767);
----------------------------------------------------------------
-- TEMP: SKU под деревом @path; если пусто и разрешён фолбэк → все SKU
----------------------------------------------------------------
IF OBJECT_ID('tempdb..#skus') IS NOT NULL DROP TABLE #skus;
CREATE TABLE #skus (
sku_1c_id BINARY(16) NOT NULL PRIMARY KEY,
code NVARCHAR(36) NULL
);
INSERT INTO #skus(sku_1c_id, code)
SELECT n.[1c_id], n.[code]
FROM [pbi].[nomenclature] n
JOIN [pbi].[groups] g ON g.[1c_id] = n.[1c_group]
WHERE g.[path] LIKE @path + N'%'
OPTION (RECOMPILE);
IF NOT EXISTS (SELECT 1 FROM #skus)
BEGIN
IF @allow_fallback_all = 1
BEGIN
INSERT INTO #skus(sku_1c_id, code)
SELECT n.[1c_id], n.[code]
FROM [pbi].[nomenclature] n;
SET @season_group_id = @DEFAULT_GROUP_ID;
END
ELSE
BEGIN
RAISERROR (N'По path = %s не найдено ни одного SKU. Расчёт не выполнялся.', 16, 1, @path);
RETURN;
END
END
----------------------------------------------------------------
-- TEMP: ставки продаж (шт/день)
----------------------------------------------------------------
IF OBJECT_ID('tempdb..#rate') IS NOT NULL DROP TABLE #rate;
CREATE TABLE #rate (
sku_1c_id BINARY(16) NOT NULL PRIMARY KEY,
rate_per_day DECIMAL(38,6) NOT NULL
);
INSERT INTO #rate(sku_1c_id, rate_per_day)
SELECT a.[1c_id], ISNULL(a.[Продажи шт / день],0)
FROM [analytics].[аналитика за 365 дн.] a
JOIN #skus s ON s.sku_1c_id = a.[1c_id];
----------------------------------------------------------------
-- TEMP: сезонность ТОЛЬКО по @season_group_id; если нет строк — используем дефолт
----------------------------------------------------------------
IF OBJECT_ID('tempdb..#season') IS NOT NULL DROP TABLE #season;
CREATE TABLE #season (
[month] TINYINT NOT NULL PRIMARY KEY, -- 1..12
seasonal_koef DECIMAL(18,6) NOT NULL
);
INSERT INTO #season([month], seasonal_koef)
/*SELECT sg.[month], sg.[seasonal_koef]
FROM [analytics].[seasonality_groups] sg
WHERE sg.[group_1c_id] = @season_group_id;*/
SELECT
[month]
, AVG([koef])
FROM [mag_pbi].[analytics].[seasonality_groups_summ_1]
GROUP BY [month];
/*IF @@ROWCOUNT = 0
BEGIN
INSERT INTO #season([month], seasonal_koef)
SELECT sg.[month], sg.[seasonal_koef]
FROM [analytics].[seasonality_groups] sg
WHERE sg.[group_1c_id] = @DEFAULT_GROUP_ID;
-- если и дефолта нет, #season останется пустой → в формуле будет 1.0
END
*/
----------------------------------------------------------------
-- Удаляем старые строки сценария (батчами, чтобы не держать тяжёлые блокировки)
----------------------------------------------------------------
WHILE 1 = 1
BEGIN
DELETE TOP (50000) f
FROM [analytics].[forecast] f
JOIN #skus s ON s.sku_1c_id = f.[1c_id]
WHERE f.[scenario_id] = @scenario_id
AND f.[month] >= @from_month
AND f.[month] < @to_month_excl;
IF @@ROWCOUNT = 0 BREAK;
END
----------------------------------------------------------------
-- Вставка прогноза: rate_per_day × дни_в_месяце × seasonal_koef(@path/@default)
----------------------------------------------------------------
INSERT INTO [analytics].[forecast]
([scenario_id], [1c_id], [code], [month], [value], [updated_at], [updated_by])
SELECT
@scenario_id,
s.sku_1c_id,
s.code,
c.month_start,
CAST(ISNULL(r.rate_per_day, 0)
* DAY(EOMONTH(c.month_start))
* ISNULL(se.seasonal_koef, 1.0) AS DECIMAL(18,3)) AS value,
GETDATE(),
SUSER_SNAME()
FROM #skus s
CROSS JOIN #cal c
LEFT JOIN #rate r ON r.sku_1c_id = s.sku_1c_id
LEFT JOIN #season se ON se.[month] = MONTH(c.month_start)
OPTION (RECOMPILE);
END
GO
/****** Object: StoredProcedure [analytics].[sp_create_analytics_365] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [analytics].[sp_create_analytics_365]
AS
BEGIN
/*
... твой закомментированный блок без изменений ...
*/
-------------------------------------------------------------
-- 1) Базовая таблица аналитики за 365 дней
-------------------------------------------------------------
DROP TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
SELECT
s.[1c_id],
s.Code,
SUM(s.Количество) as [Продано шт]
INTO [mag_pbi].[analytics].[аналитика за 365 дн.]
FROM [pbiProd].[СводныйСебестоимость Для PBI] s
WHERE s.Статья = N'Реализация'
AND s.[Период] >= DATEADD(day, -365, GETDATE())
GROUP BY [1c_id], s.Code;
-------------------------------------------------------------
-- 2) Продажи шт / день
-------------------------------------------------------------
IF COL_LENGTH('analytics.аналитика за 365 дн.', 'Продажи шт / день') IS NULL
BEGIN
ALTER TABLE [analytics].[аналитика за 365 дн.]
ADD [Продажи шт / день] numeric(38,6) NULL;
/*ALTER TABLE [analytics].[аналитика за 365 дн.]
ADD [Продажи шт / день опт] numeric(38,6) NULL;*/
END;
;WITH bounds AS (
SELECT
CAST(DATEADD(day, -365, CAST(GETDATE() AS date)) AS date) AS start_date,
CAST(GETDATE() AS date) AS end_date
),
days365 AS (
SELECT
t.[_IDRREF] AS [1c_id],
SUM(t.[ostatok]) AS days_on_sale_365
--SUM(t.[ostatok10]) AS days_on_sale_365_opt
FROM [pbi].[w_ostatok_da_net] t
CROSS JOIN bounds b
WHERE t.[dt] >= b.start_date
AND t.[dt] < b.end_date -- исключаем текущий день
GROUP BY t.[_IDRREF]
)
UPDATE a
SET
[Продажи шт / день] =
CASE
WHEN d.days_on_sale_365 > 0
THEN CAST(a.[Продано шт] AS numeric(38,6)) / CAST(d.days_on_sale_365 AS numeric(38,6))
ELSE NULL
END
/*[Продажи шт / день опт] =
CASE
WHEN d.days_on_sale_365_opt > 0
THEN CAST(a.[Продано шт] AS numeric(38,6)) / CAST(d.days_on_sale_365_opt AS numeric(38,6))
ELSE NULL
END*/
FROM [analytics].[аналитика за 365 дн.] a
LEFT JOIN days365 d
ON d.[1c_id] = a.[1c_id];
-------------------------------------------------------------
-- 3) Остаток дней продаж
-------------------------------------------------------------
IF COL_LENGTH('analytics.аналитика за 365 дн.', 'Остаток дней продаж') IS NULL
BEGIN
ALTER TABLE [analytics].[аналитика за 365 дн.]
ADD [Остаток дней продаж] numeric(38,6) NULL;
/*ALTER TABLE [analytics].[аналитика за 365 дн.]
ADD [Остаток дней продаж опт] numeric(38,6) NULL;*/
END;
UPDATE a
SET
[Остаток дней продаж] =
CASE
WHEN a.[Продажи шт / день] > 0
THEN sb.[Остаток склад + МП, шт] / a.[Продажи шт / день]
ELSE NULL
END
/*[Остаток дней продаж опт] =
CASE
WHEN a.[Продажи шт / день опт] > 0
THEN sb.[Остаток склад + МП, шт] / a.[Продажи шт / день опт]
ELSE NULL
END*/
FROM [analytics].[аналитика за 365 дн.] a
LEFT JOIN (
SELECT
n.[1c_id],
s.[Остаток склад + МП, шт]
FROM [mag_pbi].[analytics].[stock_balance] s
INNER JOIN [mag_pbi].[pbi].[nomenclature] n
ON n.artic_id = s.artic_id
) sb
ON sb.[1c_id] = a.[1c_id];
-------------------------------------------------------------
-- 4) Сумма продаж, учетка, ТН (год)
-------------------------------------------------------------
IF COL_LENGTH('analytics.аналитика за 365 дн.', 'Продажи / год, руб.') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [Продажи / год, руб.] decimal(38,2) NULL;
END;
IF COL_LENGTH('analytics.аналитика за 365 дн.', 'учетная сумма / год, руб.') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [учетная сумма / год, руб.] decimal(38,2) NULL;
END;
IF COL_LENGTH('analytics.аналитика за 365 дн.', 'ТН / год, руб.') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [ТН / год, руб.] decimal(38,2) NULL;
END;
IF COL_LENGTH('analytics.аналитика за 365 дн.', 'Стоимость МП год, руб.') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [Стоимость МП год, руб.] decimal(38,2) NULL;
END;
IF COL_LENGTH('analytics.аналитика за 365 дн.', '%ТН год, руб.') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [%ТН год, руб.] decimal(38,2) NULL;
END;
DECLARE @end date = CAST(GETDATE() AS date); -- сегодня (не включаем)
DECLARE @start date = DATEADD(day, -365, @end); -- 365 дней назад
;WITH Y AS (
SELECT
v.[1c_id],
SUM(v.[Сумма продаж]) AS sales_year,
SUM(v.[Учетная сумма]) AS acct_year,
SUM(v.[Стоимость обработки]) AS cost_mp,
SUM(v.[Торговая надбавка]) AS tn_year
FROM [analytics].[Продажи_Учёт_Маржа_по_дням] v
WHERE v.[d] >= @start AND v.[d] < @end
GROUP BY v.[1c_id]
)
UPDATE a
SET
a.[Продажи / год, руб.] = COALESCE(Y.sales_year, 0),
a.[учетная сумма / год, руб.] = COALESCE(Y.acct_year, 0),
a.[ТН / год, руб.] = COALESCE(Y.tn_year, 0),
a.[Стоимость МП год, руб.] = COALESCE(Y.cost_mp, 0),
a.[%ТН год, руб.] = CASE
WHEN NULLIF(COALESCE(Y.acct_year, 0), 0) IS NULL THEN NULL
ELSE
CAST(COALESCE(Y.tn_year, 0) AS decimal(19,6))
/ CAST(NULLIF(Y.acct_year, 0) AS decimal(19,6))
END
FROM [mag_pbi].[analytics].[аналитика за 365 дн.] AS a
LEFT JOIN Y
ON Y.[1c_id] = a.[1c_id];
-------------------------------------------------------------
-- 5) Дней в продаже / год и / квартал
-------------------------------------------------------------
SET @end = CAST(GETDATE() AS date);
DECLARE @startY date = DATEADD(day, -365, @end);
DECLARE @startQ date = DATEADD(month, -3, @end);
IF COL_LENGTH('mag_pbi.analytics.аналитика за 365 дн.', 'Дней в продаже / год') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [Дней в продаже / год] bigint NULL;
END;
IF COL_LENGTH('mag_pbi.analytics.аналитика за 365 дн.', 'Дней в продаже / квартал') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [Дней в продаже / квартал] bigint NULL;
END;
;WITH daysY AS (
SELECT [_IDRREF] AS [1c_id],
COUNT_BIG(*) AS days_in_sale_year
FROM [pbi].[w_ostatok_da_net]
WHERE [dt] >= @startY AND [dt] < @end
AND [ostatok] >= 1
GROUP BY [_IDRREF]
),
daysQ AS (
SELECT [_IDRREF] AS [1c_id],
COUNT_BIG(*) AS days_in_sale_quarter
FROM [pbi].[w_ostatok_da_net]
WHERE [dt] >= @startQ AND [dt] < @end
AND [ostatok] >= 1
GROUP BY [_IDRREF]
),
days AS (
SELECT COALESCE(y.[1c_id], q.[1c_id]) AS [1c_id],
y.days_in_sale_year,
q.days_in_sale_quarter
FROM daysY y
FULL OUTER JOIN daysQ q ON q.[1c_id] = y.[1c_id]
)
UPDATE a
SET
a.[Дней в продаже / год] = d.days_in_sale_year,
a.[Дней в продаже / квартал] = d.days_in_sale_quarter
FROM [mag_pbi].[analytics].[аналитика за 365 дн.] a
LEFT JOIN days d
ON d.[1c_id] = a.[1c_id];
-------------------------------------------------------------
-- 6) Сумма продаж, учетка, ТН (квартал)
-------------------------------------------------------------
IF COL_LENGTH('analytics.аналитика за 365 дн.', 'Продажи / квартал, руб.') IS NULL
BEGIN
ALTER TABLE [analytics].[аналитика за 365 дн.]
ADD [Продажи / квартал, руб.] decimal(38,2) NULL;
END;
IF COL_LENGTH('analytics.аналитика за 365 дн.', 'учетная сумма / квартал, руб.') IS NULL
BEGIN
ALTER TABLE [analytics].[аналитика за 365 дн.]
ADD [учетная сумма / квартал, руб.] decimal(38,2) NULL;
END;
IF COL_LENGTH('analytics.аналитика за 365 дн.', 'ТН / квартал, руб.') IS NULL
BEGIN
ALTER TABLE [analytics].[аналитика за 365 дн.]
ADD [ТН / квартал, руб.] decimal(38,2) NULL;
END;
SET @start = DATEADD(month, -3, @end);
;WITH Q AS (
SELECT
v.[1c_id],
SUM(v.[Сумма продаж]) AS sales_q,
SUM(v.[Учетная сумма]) AS acct_q,
SUM(v.[Торговая надбавка]) AS tn_q
FROM [analytics].[Продажи_Учёт_Маржа_по_дням] v
WHERE v.[d] >= @start AND v.[d] < @end
GROUP BY v.[1c_id]
)
UPDATE a
SET
a.[Продажи / квартал, руб.] = Q.sales_q,
a.[учетная сумма / квартал, руб.] = Q.acct_q,
a.[ТН / квартал, руб.] = Q.tn_q
FROM [analytics].[аналитика за 365 дн.] AS a
LEFT JOIN Q
ON Q.[1c_id] = a.[1c_id];
-------------------------------------------------------------
-- 7) ТН / месяц (по текущей скорости)
-------------------------------------------------------------
IF COL_LENGTH('mag_pbi.analytics.аналитика за 365 дн.', 'ТН / месяц, руб.') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [ТН / месяц, руб.] decimal(38,6) NULL;
END;
UPDATE a
SET a.[ТН / месяц, руб.] =
ISNULL(a.[ТН / год, руб.], 0)
/ NULLIF(a.[Продано шт], 0)
* ISNULL(a.[Продажи шт / день], 0)
* 30
FROM [mag_pbi].[analytics].[аналитика за 365 дн.] a;
-------------------------------------------------------------------------------------
-- 8) ДОПОЛНИТЕЛЬНО: Оплаченный остаток и рентабельности (ROIC и по остатку в руб.)
-- (год назад, квартал назад и на будущий год) по 12-месячному окну
-------------------------------------------------------------------------------------
-- новые колонки
IF COL_LENGTH('mag_pbi.analytics.аналитика за 365 дн.', 'Оплаченный остаток') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [Оплаченный остаток] decimal(38,2) NULL;
END;
IF COL_LENGTH('mag_pbi.analytics.аналитика за 365 дн.', 'Рентабельность / год') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [Рентабельность / год] decimal(38,6) NULL;
END;
IF COL_LENGTH('mag_pbi.analytics.аналитика за 365 дн.', 'Рентабельность / квартал') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [Рентабельность / квартал] decimal(38,6) NULL;
END;
IF COL_LENGTH('mag_pbi.analytics.аналитика за 365 дн.', 'Рентабельность / будущий год') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [Рентабельность / будущий год] decimal(38,6) NULL;
END;
-- новые поля рентабельности по остатку в рублях (сразу в %)
IF COL_LENGTH('mag_pbi.analytics.аналитика за 365 дн.', 'Рентабельность по остатку / год') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [Рентабельность по остатку / год] decimal(38,6) NULL;
END;
IF COL_LENGTH('mag_pbi.analytics.аналитика за 365 дн.', 'Рентабельность по остатку / квартал') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [Рентабельность по остатку / квартал] decimal(38,6) NULL;
END;
IF COL_LENGTH('mag_pbi.analytics.аналитика за 365 дн.', 'Рентабельность по остатку / будущий год') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[analytics].[аналитика за 365 дн.]
ADD [Рентабельность по остатку / будущий год] decimal(38,6) NULL;
END;
---------------------------------------------------------
-- 8.1 Окно 12 полных месяцев
---------------------------------------------------------
DECLARE @mp_today date = CAST(GETDATE() AS date);
DECLARE @mp_lastFullMonth date = EOMONTH(DATEADD(month, -1, @mp_today));
DECLARE @mp_firstMonthStart date = DATEADD(
month, -11,
DATEFROMPARTS(YEAR(@mp_lastFullMonth), MONTH(@mp_lastFullMonth), 1)
);
DECLARE @mp_curMonthStart date = @mp_firstMonthStart;
IF OBJECT_ID('tempdb..#mp_months') IS NOT NULL DROP TABLE #mp_months;
CREATE TABLE #mp_months (
MonthStart date NOT NULL PRIMARY KEY
);
WHILE @mp_curMonthStart <= DATEFROMPARTS(YEAR(@mp_lastFullMonth), MONTH(@mp_lastFullMonth), 1)
BEGIN
INSERT INTO #mp_months (MonthStart) VALUES (@mp_curMonthStart);
SET @mp_curMonthStart = DATEADD(month, 1, @mp_curMonthStart);
END;
---------------------------------------------------------
-- 8.2 Набор SKU из аналитики 365
---------------------------------------------------------
IF OBJECT_ID('tempdb..#mp_s') IS NOT NULL DROP TABLE #mp_s;
CREATE TABLE #mp_s(
[1c_id] binary(16) NOT NULL,
code nchar(11) NOT NULL,
CONSTRAINT PK_mp_s PRIMARY KEY ([1c_id], code)
);
INSERT INTO #mp_s([1c_id], code)
SELECT DISTINCT a.[1c_id], a.[Code]
FROM [mag_pbi].[analytics].[аналитика за 365 дн.] a;
---------------------------------------------------------
-- 8.3 Внешние остатки
---------------------------------------------------------
IF OBJECT_ID('tempdb..#mp_ext_stock') IS NOT NULL DROP TABLE #mp_ext_stock;
CREATE TABLE #mp_ext_stock(
Dt date NOT NULL,
code nchar(11) NOT NULL,
qty numeric(18,3) NOT NULL,
CONSTRAINT PK_mp_ext_stock PRIMARY KEY (Dt, code)
);
INSERT INTO #mp_ext_stock (Dt, code, qty)
SELECT
CAST(o.[Дата обновления] AS date) AS Dt,
o.code,
SUM(o.[Количество]) AS qty
FROM analytics.[Внешние остатки] o
JOIN #mp_s s
ON s.code = o.code
GROUP BY CAST(o.[Дата обновления] AS date), o.code;
---------------------------------------------------------
-- 8.4 Приходы (Закупка / Приход)
---------------------------------------------------------
IF OBJECT_ID('tempdb..#mp_incoming') IS NOT NULL DROP TABLE #mp_incoming;
CREATE TABLE #mp_incoming(
MonthStart date NOT NULL,
[1c_id] binary(16) NOT NULL,
qty numeric(18,3) NOT NULL,
CONSTRAINT PK_mp_incoming PRIMARY KEY (MonthStart, [1c_id])
);
INSERT INTO #mp_incoming (MonthStart, [1c_id], qty)
SELECT
DATEFROMPARTS(YEAR(s.[Период]), MONTH(s.[Период]), 1) AS MonthStart,
s.[1c_id],
SUM(s.[Количество]) AS qty
FROM pbiProd.[СводныйСебестоимость Для PBI] s
JOIN #mp_s sf
ON sf.[1c_id] = s.[1c_id]
WHERE s.[Статья] = N'Закупка'
AND s.[Вид операции] = N'Приход'
AND s.[Период] >= @mp_firstMonthStart
GROUP BY
DATEFROMPARTS(YEAR(s.[Период]), MONTH(s.[Период]), 1),
s.[1c_id];
---------------------------------------------------------
-- 8.5 Обязательства по месяцам
---------------------------------------------------------
IF OBJECT_ID('tempdb..#mp_obligations') IS NOT NULL DROP TABLE #mp_obligations;
CREATE TABLE #mp_obligations(
MonthStart date NOT NULL,
[1c_id] binary(16) NOT NULL,
obligation numeric(18,2) NOT NULL,
CONSTRAINT PK_mp_obligations PRIMARY KEY (MonthStart, [1c_id])
);
;WITH ObligRows AS (
SELECT
m.MonthStart,
inc.[1c_id],
CASE
WHEN EOMONTH(m.MonthStart) < EOMONTH(inc.MonthStart) THEN 0
ELSE
CASE
WHEN full_sum - paid_to_month > 0
THEN full_sum - paid_to_month
ELSE 0
END
END AS ObligationPerIncoming
FROM #mp_months m
JOIN #mp_incoming inc
ON 1 = 1
JOIN pbi.nomenclature n2
ON n2.[1c_id] = inc.[1c_id]
JOIN analytics.manufacturers man2
ON man2.[manufacturer] = n2.Производитель
CROSS APPLY (
SELECT
inc.qty * n2.[Цена учетная, руб] AS full_sum,
(
(CASE
WHEN man2.n_percent IS NOT NULL
AND EOMONTH(m.MonthStart)
>= DATEADD(day, man2.n_days - 90,
EOMONTH(inc.MonthStart))
THEN inc.qty * n2.[Цена учетная, руб] * man2.n_percent
ELSE 0
END)
+
(CASE
WHEN man2.m_percent IS NOT NULL
AND EOMONTH(m.MonthStart)
>= DATEADD(day, man2.m_days - 90,
EOMONTH(inc.MonthStart))
THEN inc.qty * n2.[Цена учетная, руб] * man2.m_percent
ELSE 0
END)
) AS paid_to_month
) calc
)
INSERT INTO #mp_obligations (MonthStart, [1c_id], obligation)
SELECT
MonthStart,
[1c_id],
SUM(ObligationPerIncoming) AS obligation
FROM ObligRows
GROUP BY
MonthStart,
[1c_id];
---------------------------------------------------------
-- 8.6 ТН по месяцам
---------------------------------------------------------
IF OBJECT_ID('tempdb..#mp_tn_monthly') IS NOT NULL DROP TABLE #mp_tn_monthly;
CREATE TABLE #mp_tn_monthly(
MonthStart date NOT NULL,
[1c_id] binary(16) NOT NULL,
tn_amount numeric(18,2) NULL,
CONSTRAINT PK_mp_tn_monthly PRIMARY KEY (MonthStart, [1c_id])
);
INSERT INTO #mp_tn_monthly (MonthStart, [1c_id], tn_amount)
SELECT
DATEFROMPARTS(YEAR(p.[d]), MONTH(p.[d]), 1) AS MonthStart,
p.[1c_id],
SUM(ISNULL(p.[Торговая надбавка],0)) AS tn_amount
FROM [mag_pbi].[analytics].[Продажи_Учёт_Маржа_по_дням] p
JOIN #mp_s s
ON s.[1c_id] = p.[1c_id]
WHERE p.[d] >= @mp_firstMonthStart
AND p.[d] <= @mp_lastFullMonth
GROUP BY
DATEFROMPARTS(YEAR(p.[d]), MONTH(p.[d]), 1),
p.[1c_id];
---------------------------------------------------------
-- 8.7 Помесячный план по всем SKU (остаток, оплаченный остаток, ТН, рубли-дни, остаток учетка руб)
---------------------------------------------------------
IF OBJECT_ID('tempdb..#mp_plan') IS NOT NULL DROP TABLE #mp_plan;
SELECT
s.[1c_id],
s.code,
m.MonthStart,
[Остаток шт] =
ISNULL(intStock.quantity, 0) + ISNULL(ext.qty, 0),
[Остаток учетка руб] =
(ISNULL(intStock.quantity, 0) + ISNULL(ext.qty, 0))
* ISNULL(n.[Цена учетная, руб], 0),
[Оплаченный остаток] =
CAST(
CASE
WHEN paid_raw < 0 THEN 0
ELSE paid_raw
END
AS decimal(18,2)
),
[ТН] = ISNULL(tn.tn_amount, 0),
[рубли-дни] =
CAST(
CASE
WHEN paid_raw < 0 THEN 0
ELSE paid_raw
END * DAY(EOMONTH(m.MonthStart))
AS decimal(18,2)
)
INTO #mp_plan
FROM #mp_months m
CROSS JOIN #mp_s s
OUTER APPLY (
SELECT TOP (1) w1.quantity
FROM [mag_pbi].[pbi].[w_ostatok_da_net] w1
WHERE w1._IDRREF = s.[1c_id]
AND w1.dt <= EOMONTH(m.MonthStart)
ORDER BY w1.dt DESC
) AS intStock
LEFT JOIN #mp_ext_stock ext
ON ext.code = s.code
AND ext.Dt = EOMONTH(m.MonthStart)
LEFT JOIN #mp_obligations ob
ON ob.[1c_id] = s.[1c_id]
AND ob.MonthStart = m.MonthStart
LEFT JOIN [mag_pbi].[pbi].[nomenclature] n
ON n.[1c_id] = s.[1c_id]
LEFT JOIN #mp_tn_monthly tn
ON tn.[1c_id] = s.[1c_id]
AND tn.MonthStart = m.MonthStart
CROSS APPLY (
SELECT
(ISNULL(intStock.quantity, 0) + ISNULL(ext.qty, 0))
* ISNULL(n.[Цена учетная, руб], 0)
- ISNULL(ob.obligation, 0) AS paid_raw
) p;
---------------------------------------------------------
-- 8.8 Агрегаты по SKU: ROIC (год/квартал/будущий) + рентабельность по остатку (год/квартал/будущий)
---------------------------------------------------------
-- старт квартала (последние 3 месяца окна)
DECLARE @mp_q_start date = DATEADD(
month, -2,
DATEFROMPARTS(YEAR(@mp_lastFullMonth), MONTH(@mp_lastFullMonth), 1)
);
;WITH AggYear AS (
SELECT
p.[1c_id],
tn_year = SUM(p.[ТН]),
rd_year = SUM(p.[рубли-дни]),
avg_cap_year = AVG(NULLIF(p.[Остаток учетка руб], 0.0))
FROM #mp_plan p
GROUP BY p.[1c_id]
),
AggQuarter AS (
SELECT
p.[1c_id],
tn_q = SUM(p.[ТН]),
rd_q = SUM(p.[рубли-дни]),
avg_cap_q = AVG(NULLIF(p.[Остаток учетка руб], 0.0))
FROM #mp_plan p
WHERE p.MonthStart >= @mp_q_start
GROUP BY p.[1c_id]
),
RoicPast AS (
SELECT
ay.[1c_id],
RoicValue =
CASE
WHEN ay.rd_year > 0
THEN ay.tn_year * 365.0 / ay.rd_year * 100.0
ELSE NULL
END,
ay.tn_year,
ay.avg_cap_year
FROM AggYear ay
),
RoicQuarterPast AS (
SELECT
aq.[1c_id],
RoicQ =
CASE
WHEN aq.rd_q > 0
THEN aq.tn_q * 365.0 / aq.rd_q * 100.0
ELSE NULL
END,
aq.tn_q,
aq.avg_cap_q
FROM AggQuarter aq
),
LastRow AS (
SELECT
p.[1c_id],
p.[Оплаченный остаток],
p.[Остаток шт],
p.[Остаток учетка руб],
ROW_NUMBER() OVER (
PARTITION BY p.[1c_id]
ORDER BY p.MonthStart DESC
) AS rn
FROM #mp_plan p
),
FutureBase AS (
SELECT
a.[1c_id],
a.[Продажи шт / день] AS sales_per_day,
a.[Продано шт] AS sold_year,
a.[ТН / год, руб.] AS tn_year_hist,
lr.[Оплаченный остаток] AS paid_stock_now,
lr.[Остаток шт] AS q_stock,
lr.[Остаток учетка руб] AS stock_rub_now
FROM [mag_pbi].[analytics].[аналитика за 365 дн.] a
LEFT JOIN LastRow lr
ON lr.[1c_id] = a.[1c_id]
AND lr.rn = 1
),
FutureInputs AS (
SELECT
f.[1c_id],
f.sales_per_day,
f.sold_year,
tn_year = COALESCE(f.tn_year_hist, rp.tn_year),
f.paid_stock_now,
f.q_stock,
f.stock_rub_now,
tn_per_unit =
CASE
WHEN f.sold_year > 0 AND COALESCE(f.tn_year_hist, rp.tn_year) IS NOT NULL
THEN COALESCE(f.tn_year_hist, rp.tn_year) / f.sold_year
ELSE NULL
END,
max_sell_1y =
CASE
WHEN f.sales_per_day IS NULL THEN NULL
ELSE f.sales_per_day * 365.0
END
FROM FutureBase f
LEFT JOIN RoicPast rp
ON rp.[1c_id] = f.[1c_id]
),
FutureCalc AS (
SELECT
fi.[1c_id],
RoicFuture =
CASE
WHEN fi.paid_stock_now IS NULL OR fi.paid_stock_now <= 0
OR fi.sales_per_day IS NULL OR fi.sales_per_day <= 0
OR fi.tn_per_unit IS NULL
OR fi.q_stock IS NULL OR fi.q_stock <= 0
OR fi.max_sell_1y IS NULL OR fi.max_sell_1y <= 0
THEN NULL
ELSE
(
(
fi.tn_per_unit *
(CASE
WHEN fi.q_stock <= fi.max_sell_1y THEN fi.q_stock
ELSE fi.max_sell_1y
END)
) * 365.0
/
(
CASE
WHEN fi.q_stock / fi.sales_per_day >= 365.0
THEN fi.paid_stock_now * 365.0
ELSE fi.paid_stock_now * (fi.q_stock / fi.sales_per_day) / 2.0
END
) * 100.0
)
END,
tn_future =
CASE
WHEN fi.tn_per_unit IS NULL OR fi.max_sell_1y IS NULL OR fi.q_stock IS NULL
THEN NULL
ELSE
fi.tn_per_unit *
(CASE
WHEN fi.q_stock <= fi.max_sell_1y THEN fi.q_stock
ELSE fi.max_sell_1y
END)
END,
q_future =
CASE
WHEN fi.max_sell_1y IS NULL OR fi.q_stock IS NULL THEN NULL
WHEN fi.q_stock <= fi.max_sell_1y THEN fi.q_stock
ELSE fi.max_sell_1y
END
FROM FutureInputs fi
),
CapRentFuture AS (
SELECT
fi.[1c_id],
RentCapFuturePct =
CASE
WHEN fc.tn_future IS NULL
OR fi.stock_rub_now IS NULL OR fi.stock_rub_now <= 0
OR fi.q_stock IS NULL OR fi.q_stock <= 0
OR fc.q_future IS NULL OR fc.q_future <= 0
THEN NULL
ELSE
CASE
WHEN (fi.stock_rub_now * (1.0 - (fc.q_future / fi.q_stock) / 2.0)) <= 0
THEN NULL
ELSE
fc.tn_future
/ (fi.stock_rub_now * (1.0 - (fc.q_future / fi.q_stock) / 2.0))
* 100.0
END
END
FROM FutureInputs fi
LEFT JOIN FutureCalc fc
ON fc.[1c_id] = fi.[1c_id]
)
UPDATE a
SET
a.[Рентабельность / год] = rp.RoicValue,
a.[Рентабельность / квартал] = rq.RoicQ,
a.[Оплаченный остаток] = lr.[Оплаченный остаток],
a.[Рентабельность / будущий год] = fc.RoicFuture,
a.[Рентабельность по остатку / год] =
CASE
WHEN rp.avg_cap_year IS NOT NULL AND rp.avg_cap_year > 0
AND rp.tn_year IS NOT NULL
THEN (rp.tn_year / rp.avg_cap_year) * 100.0
ELSE NULL
END,
a.[Рентабельность по остатку / квартал] =
CASE
WHEN rq.avg_cap_q IS NOT NULL AND rq.avg_cap_q > 0
AND rq.tn_q IS NOT NULL
THEN (rq.tn_q / rq.avg_cap_q) * 100.0
ELSE NULL
END,
a.[Рентабельность по остатку / будущий год] = cf.RentCapFuturePct
FROM [mag_pbi].[analytics].[аналитика за 365 дн.] a
LEFT JOIN RoicPast rp ON rp.[1c_id] = a.[1c_id]
LEFT JOIN RoicQuarterPast rq ON rq.[1c_id] = a.[1c_id]
LEFT JOIN LastRow lr ON lr.[1c_id] = a.[1c_id] AND lr.rn = 1
LEFT JOIN FutureCalc fc ON fc.[1c_id] = a.[1c_id]
LEFT JOIN CapRentFuture cf ON cf.[1c_id] = a.[1c_id];
-------------------------------------------------------------------------------------
-- 9) Индекс (как был)
-------------------------------------------------------------------------------------
CREATE NONCLUSTERED INDEX [analyticsаналитика за 365 дн.]
ON [analytics].[аналитика за 365 дн.] ([1c_id])
INCLUDE (
[Продажи шт / день],
[Остаток дней продаж],
[ТН / год, руб.],
[ТН / квартал, руб.],
[Рентабельность / год],
[Рентабельность / квартал],
[Дней в продаже / год],
[Дней в продаже / квартал]
);
END
GO
/****** Object: StoredProcedure [analytics].[sp_fill_deficit_money_request] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [analytics].[sp_fill_deficit_money_request]
@scenario_id INT
AS
BEGIN
SET NOCOUNT ON;
------------------------------------------------------------------
-- 1. Чистим старые записи по сценарию (если нужно)
------------------------------------------------------------------
--DECLARE @scenario_id INT = 4
DELETE FROM [analytics].[deficit_money_request]
WHERE scenario_id = @scenario_id;
------------------------------------------------------------------
-- 2. Готовим временную таблицу с данными (через CTE + SELECT INTO)
------------------------------------------------------------------
IF OBJECT_ID('tempdb..#deficit_data') IS NOT NULL
DROP TABLE #deficit_data;
;WITH base AS (
SELECT
g.g
, n.Производитель
, d.place_month
, SUM(d.order_qty * n.[Цена учетная, руб]) AS Deficit
, SUM(a.[%ТН год, руб.] * d.order_qty * n.[Цена учетная, руб])
/ NULLIF(SUM(d.order_qty * n.[Цена учетная, руб]), 0) AS [%ТН средн]
FROM [analytics].[deficit_proposal] d
INNER JOIN pbi.nomenclature n ON n.[1c_id] = d.[1c_id]
INNER JOIN [analytics].[аналитика за 365 дн.] a ON a.[1c_id] = d.[1c_id]
INNER JOIN pbi.[groups] g ON g.[1c_id] = n.[1c_group]
WHERE
d.scenario_id = @scenario_id
AND n.cenovaya_gruppa = N'Валютная'
GROUP BY
g.g
, n.Производитель
, d.place_month
HAVING
SUM(d.order_qty * n.[Цена учетная, руб]) > 10
),
data AS (
SELECT
b.g
, b.Производитель
, b.place_month
, b.Deficit
, b.[%ТН средн]
, b.[%ТН средн] * ISNULL(roi.ROI_norm, 1.36) AS [%ROI заказа]
, ISNULL(roi.[ROI_norm], 1.36) AS [ROI normalized]
, b.[%ТН средн] * ISNULL(roi.ROI_norm, 1.36) * b.Deficit AS [ROI руб]
, ISNULL(roi.n_percent, 0.3) AS n_percent
, ISNULL(roi.n_days, 1) AS n_days
, ISNULL(roi.m_percent, 0.7) AS m_percent
, ISNULL(roi.m_days, 60) AS m_days
FROM base b
LEFT JOIN [analytics].[manufacturers] roi
ON roi.[manufacturer] = b.Производитель
)
SELECT
g
, Производитель
, place_month
, Deficit
, n_percent
, n_days
, m_percent
, m_days
INTO #deficit_data
FROM data;
-- SELECT * FROM #deficit_data
-- SELECT sum(deficit) FROM #deficit_data
------------------------------------------------------------------
-- 3. Переменные и курсор по временной таблице
------------------------------------------------------------------
DECLARE
@g NVARCHAR(255)
, @manufacturer NVARCHAR(255)
, @place_month DATE
, @deficit DECIMAL(18,2)
, @n_percent DECIMAL(9,6)
, @n_days INT
, @m_percent DECIMAL(9,6)
, @m_days INT
, @pay_date DATE
, @pay_amount DECIMAL(18,2);
DECLARE cur_deficit CURSOR LOCAL FAST_FORWARD FOR
SELECT
g
, Производитель
, place_month
, Deficit
, n_percent
, n_days
, m_percent
, m_days
FROM #deficit_data;
OPEN cur_deficit;
FETCH NEXT FROM cur_deficit INTO
@g
, @manufacturer
, @place_month
, @deficit
, @n_percent
, @n_days
, @m_percent
, @m_days;
WHILE @@FETCH_STATUS = 0
BEGIN
-----------------------------------------------------------------
-- Вариант N
-----------------------------------------------------------------
IF @n_percent IS NOT NULL AND @n_percent <> 0
BEGIN
-- дата платежа = place_month + n_days
SET @pay_date = DATEADD(DAY, @n_days, @place_month);
-- сумма платежа = deficit * n_percent
SET @pay_amount = @deficit * @n_percent;
INSERT INTO [analytics].[deficit_money_request] (
scenario_id
, g
, manufacturer
, place_month -- здесь уже ХРАНИМ дату платежа
, deficit -- здесь храним сумму платежа
, pay_days
, [percent]
, created_at
)
VALUES (
@scenario_id
, @g
, @manufacturer
, @pay_date
, @pay_amount
, @n_days
, @n_percent
, SYSDATETIME()
);
END;
-----------------------------------------------------------------
-- Вариант M
-----------------------------------------------------------------
IF @m_percent IS NOT NULL AND @m_percent <> 0
BEGIN
SET @pay_date = DATEADD(DAY, @m_days, @place_month);
SET @pay_amount = @deficit * @m_percent;
INSERT INTO [analytics].[deficit_money_request] (
scenario_id
, g
, manufacturer
, place_month
, deficit
, pay_days
, [percent]
, created_at
)
VALUES (
@scenario_id
, @g
, @manufacturer
, @pay_date
, @pay_amount
, @m_days
, @m_percent
, SYSDATETIME()
);
END;
FETCH NEXT FROM cur_deficit INTO
@g
, @manufacturer
, @place_month
, @deficit
, @n_percent
, @n_days
, @m_percent
, @m_days;
END;
CLOSE cur_deficit;
DEALLOCATE cur_deficit;
END;
GO
/****** Object: StoredProcedure [analytics].[sp_load_koef_groups] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [analytics].[sp_load_koef_groups] as BEGIN
Print('Запускайте код процедуры руками')
RETURN 0
DROP TABLE #koef
CREATE TABLE #koef (
[group_1c_id] nvarchar(256) NOT NULL,
[seasonal_koef] [decimal](18, 6) NOT NULL,
[month] int NOT NULL
);
BULK INSERT #koef
FROM '\\192.168.35.3\admin3\Обмен\powerbi\k1.csv'
WITH (
FIRSTROW = 2, -- пропустить заголовок
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n',
CODEPAGE = '1251' -- если кириллица
);
-- Проверить наличие данных во вр таблице
select top 100 * from #koef
--DELETE FROM [analytics].[seasonality_groups]
INSERT INTO [analytics].[seasonality_groups]
SELECT
g.[1c_id],
k.month,
k.seasonal_koef
FROM #koef k
INNER JOIN pbi.groups g
ON g.[1c_id]=k.group_1c_id
------------------------------
SET NOCOUNT ON;
------------------------------------------------------------
-- 1. Таблица месяцев 1..12
------------------------------------------------------------
IF OBJECT_ID('tempdb..#Months') IS NOT NULL DROP TABLE #Months;
CREATE TABLE #Months (
[month] tinyint NOT NULL PRIMARY KEY
);
INSERT INTO #Months ([month])
VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12);
------------------------------------------------------------
-- 2. База продаж 20242025 по gg1 × месяц
------------------------------------------------------------
IF OBJECT_ID('tempdb..#SalesByGroupMonth') IS NOT NULL DROP TABLE #SalesByGroupMonth;
SELECT
g.[g],
g.[g1],
[month] = MONTH(s.[Период]),
qty = /* SUM(s.Сумма) */ SUM(s.[Количество])
INTO #SalesByGroupMonth
FROM [mag_pbi].[pbiProd].[СводныйСебестоимость Для PBI] AS s
INNER JOIN [pbi].[nomenclature] n
ON n.[1c_id] = s.[1c_id]
INNER JOIN [pbi].[groups] g
ON g.[1c_id] = n.[1c_group]
WHERE
s.[Статья] = N'Реализация'
AND s.[Период] >= '2023-12-01'
AND s.[Период] < '2025-12-01'
AND g.[g] NOT LIKE N'*%'
GROUP BY
g.[g],
g.[g1],
MONTH(s.[Период]);
------------------------------------------------------------
-- 3. Список всех gg1, которые продавались
------------------------------------------------------------
IF OBJECT_ID('tempdb..#GroupList') IS NOT NULL DROP TABLE #GroupList;
SELECT DISTINCT
sbgm.[g],
sbgm.[g1]
INTO #GroupList
FROM #SalesByGroupMonth sbgm;
------------------------------------------------------------
-- 4. gg1 × все 12 месяцев (qty = 0, если продаж не было)
------------------------------------------------------------
IF OBJECT_ID('tempdb..#AllGroupMonths') IS NOT NULL DROP TABLE #AllGroupMonths;
SELECT
gl.[g],
gl.[g1],
m.[month],
qty = ISNULL(sbgm.qty, 0)
INTO #AllGroupMonths
FROM #GroupList gl
CROSS JOIN #Months m
LEFT JOIN #SalesByGroupMonth sbgm
ON sbgm.[g] = gl.[g]
AND sbgm.[g1] = gl.[g1]
AND sbgm.[month] = m.[month];
------------------------------------------------------------
-- 5. Общий объём продаж по gg1 за все 12 месяцев
------------------------------------------------------------
IF OBJECT_ID('tempdb..#GroupTotals') IS NOT NULL DROP TABLE #GroupTotals;
SELECT
agm.[g],
agm.[g1],
total_qty = SUM(agm.qty)
INTO #GroupTotals
FROM #AllGroupMonths agm
GROUP BY
agm.[g],
agm.[g1];
------------------------------------------------------------
-- 6. Финальный результат: g, g1, koef, month
-- Сумма koef по 12 месяцам для каждого gg1 = 1
------------------------------------------------------------
SELECT
agm.[g],
agm.[g1],
agm.[month],
koef = CASE
WHEN gt.total_qty = 0 THEN 0
ELSE CAST(agm.qty AS decimal(18,6)) / NULLIF(gt.total_qty, 0)
END
--INTO analytics .seasonality_groups_summ_1
FROM #AllGroupMonths agm
INNER JOIN #GroupTotals gt
ON gt.[g] = agm.[g]
AND gt.[g1] = agm.[g1]
ORDER BY
agm.[g],
agm.[g1],
agm.[month];
END
GO
/****** Object: StoredProcedure [analytics].[sp_rebuild_stock_plan_by_arrival] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [analytics].[sp_rebuild_stock_plan_by_arrival]
@scenario_id INT,
@from_month DATE, -- например: DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1)
@to_month DATE -- последний месяц горизонта + 1 день (интервал [from, to) по месяцам)
AS
BEGIN
SET NOCOUNT ON;
-- Безопасная рамка
IF @from_month IS NULL SET @from_month = DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1);
IF @to_month IS NULL SET @to_month = DATEADD(MONTH, 12, @from_month); -- 12 мес по умолчанию
-- Чистим целевой диапазон
DELETE FROM [analytics].[stock_plan_by_arrival]
WHERE [scenario_id] = @scenario_id
AND [arrival_month] >= @from_month
AND [arrival_month] < @to_month;
;WITH months AS ( -- календарь месяцев [from, to)
SELECT CAST(@from_month AS DATE) AS m
UNION ALL
SELECT DATEADD(MONTH, 1, m) FROM months WHERE DATEADD(MONTH, 1, m) < @to_month
),
-- 1) Стартовый остаток на начало горизонта (берём последний известный quantity)
opening AS (
SELECT w._IDRREF AS [1c_id],
n.code AS [code],
CAST(@from_month AS DATE) AS [arrival_month],
CAST(
MAX(CASE WHEN w.dt = x.max_dt THEN w.quantity END)
AS DECIMAL(18,3)) AS opening_qty
FROM [pbi].[w_ostatok_da_net] w
JOIN (
SELECT _IDRREF, MAX(dt) AS max_dt
FROM [pbi].[w_ostatok_da_net]
WHERE dt < @from_month
GROUP BY _IDRREF
) x ON x._IDRREF = w._IDRREF AND x.max_dt = w.dt
JOIN [pbi].[nomenclature] n ON n.[1c_id] = w._IDRREF
GROUP BY w._IDRREF, n.code
),
-- 2) Подтвержденные приходы (ожидаемые заказы) по дате прихода → к первому дню месяца
inbound_confirmed AS (
SELECT
o.[1c_id],
n.code,
o.month AS arrival_month,
CAST(SUM(o.units) AS DECIMAL(18,3)) AS inbound_confirmed
FROM [mag_pbi].[analytics].[get_orders_by_group] o
JOIN [pbi].[nomenclature] n ON n.[1c_id] = o.[1c_id]
WHERE o.[status] IN (N'В пути', N'В производстве', N'Выгружен на складе', N'Согласован')
AND o.month >= @from_month
AND o.month < @to_month
GROUP BY o.[1c_id], n.code,
o.month
),
-- 3) Будущие заказы (дефицит → рекомендованные поставки) по месяцу прихода
inbound_deficit AS (
SELECT
d.[1c_id],
d.[code],
DATEFROMPARTS(YEAR(d.[arrival_month]), MONTH(d.[arrival_month]), 1) AS arrival_month,
CAST(SUM(d.[order_qty]) AS DECIMAL(18,3)) AS inbound_deficit
FROM [analytics].[deficit_proposal] d
WHERE d.[scenario_id] = @scenario_id
AND d.[arrival_month] >= @from_month
AND d.[arrival_month] < @to_month
GROUP BY d.[1c_id], d.[code],
DATEFROMPARTS(YEAR(d.[arrival_month]), MONTH(d.[arrival_month]), 1)
),
-- 4) Прогноз спроса по месяцам
forecast AS (
SELECT
f.[1c_id],
f.[code],
DATEFROMPARTS(YEAR(f.[month]), MONTH(f.[month]), 1) AS arrival_month,
CAST(SUM(f.[value]) AS DECIMAL(18,3)) AS forecast_demand
FROM [analytics].[forecast] f
WHERE f.[scenario_id] = @scenario_id
AND f.[month] >= @from_month
AND f.[month] < @to_month
GROUP BY f.[1c_id], f.[code],
DATEFROMPARTS(YEAR(f.[month]), MONTH(f.[month]), 1)
),
-- 5) Объединим каркас всех SKU × месяцы горизонта
sku_calendar AS (
SELECT DISTINCT n.[1c_id], n.[code], m.m AS arrival_month
FROM [pbi].[nomenclature] n
CROSS JOIN months m
),
base_union AS (
SELECT c.[1c_id], c.[code], c.[arrival_month],
COALESCE(op.opening_qty, 0) AS opening_qty,
COALESCE(ic.inbound_confirmed, 0) AS inbound_confirmed,
COALESCE(idf.inbound_deficit, 0) AS inbound_deficit,
COALESCE(fc.forecast_demand, 0) AS forecast_demand
FROM sku_calendar c
LEFT JOIN opening op ON op.[1c_id]=c.[1c_id] AND op.[code]=c.[code] AND op.[arrival_month]=@from_month
LEFT JOIN inbound_confirmed ic ON ic.[1c_id]=c.[1c_id] AND ic.[code]=c.[code] AND ic.[arrival_month]=c.[arrival_month]
LEFT JOIN inbound_deficit idf ON idf.[1c_id]=c.[1c_id] AND idf.[code]=c.[code] AND idf.[arrival_month]=c.[arrival_month]
LEFT JOIN forecast fc ON fc.[1c_id]=c.[1c_id] AND fc.[code]=c.[code] AND fc.[arrival_month]=c.[arrival_month]
WHERE c.[arrival_month] >= @from_month
AND c.[arrival_month] < @to_month
),
-- 6) Расчёт rolling opening/closing по месяцам
projected AS (
SELECT
@scenario_id AS scenario_id,
b.[1c_id],
b.[code],
b.[arrival_month],
-- opening: для первого месяца берем opening_qty из "opening", далее — прошлый closing
CAST(
CASE
WHEN b.[arrival_month] = @from_month
THEN b.[opening_qty]
ELSE 0
END
AS DECIMAL(18,3)) AS opening_qty,
b.[inbound_confirmed],
b.[inbound_deficit],
b.[forecast_demand]
FROM base_union b
)
-- Вставка построчно с расчетом closing через окно
INSERT INTO [analytics].[stock_plan_by_arrival]
([scenario_id],[arrival_month],[1c_id],[code],
[opening_qty],[inbound_confirmed],[inbound_deficit],[forecast_demand],[closing_qty],[updated_at])
SELECT
p.scenario_id,
p.arrival_month,
p.[1c_id],
p.[code],
-- opening по месяцу = LAG(closing) OVER (по SKU упорядочено по месяцу), для первого — opening_qty
CAST(
COALESCE(
LAG( closing_calc ) OVER (PARTITION BY p.[1c_id], p.[code] ORDER BY p.arrival_month),
p.opening_qty
)
AS DECIMAL(18,3)) AS opening_qty,
p.inbound_confirmed,
p.inbound_deficit,
p.forecast_demand,
-- closing = opening + inbound_confirmed + inbound_deficit - forecast
CAST(
(
COALESCE( LAG( closing_calc ) OVER (PARTITION BY p.[1c_id], p.[code] ORDER BY p.arrival_month), p.opening_qty)
+ p.inbound_confirmed
+ p.inbound_deficit
- p.forecast_demand
) AS DECIMAL(18,3)
) AS closing_qty,
SYSUTCDATETIME()
FROM (
-- промежуточное вычисление closing для использования в LAG
SELECT
scenario_id, [1c_id], [code], arrival_month, opening_qty, inbound_confirmed, inbound_deficit, forecast_demand,
CAST(opening_qty + inbound_confirmed + inbound_deficit - forecast_demand AS DECIMAL(18,3)) AS closing_calc
FROM projected
) p
OPTION (MAXRECURSION 0);
END
GO
/****** Object: StoredProcedure [analytics].[sp_recalc_roic] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [analytics].[sp_recalc_roic]
@manufacturer_id INT = NULL
AS
SET NOCOUNT ON;
;WITH stage_agg AS (
SELECT
manufacturer_id,
SUM([percent] / 100.0 * [days]) AS effective_deferral_days,
SUM([percent] / 100.0) AS total_percent
FROM [analytics].[manufacturer_payment_stage]
WHERE @manufacturer_id IS NULL OR manufacturer_id = @manufacturer_id
GROUP BY manufacturer_id
),
calc AS (
SELECT
man.id,
man.days_of_sales,
man.logistics_days,
COALESCE(s.effective_deferral_days, 0) AS effective_deferral_days,
COALESCE(s.total_percent, 0) AS total_percent,
(ISNULL(man.logistics_days, 120) + ISNULL(man.days_of_sales, 180) / 2.0) AS avg_return_day
FROM [analytics].[manufacturers] man
LEFT JOIN stage_agg s ON s.manufacturer_id = man.id
WHERE @manufacturer_id IS NULL OR man.id = @manufacturer_id
),
roic_calc AS (
SELECT
id,
CASE
WHEN total_percent <= 0 THEN NULL
WHEN (avg_return_day - effective_deferral_days) <= 0 THEN NULL
ELSE ROUND(12.0 / ((avg_return_day - effective_deferral_days) / 30.0) * 100.0, 2)
END AS new_roic
FROM calc
)
UPDATE man
SET man.roic_norm = r.new_roic
FROM [analytics].[manufacturers] man
JOIN roic_calc r ON r.id = man.id;
SELECT @@ROWCOUNT AS updated_count;
GO
/****** Object: StoredProcedure [analytics].[sp_report_ROI] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [analytics].[sp_report_ROI] AS
BEGIN
WITH base AS(
SELECT
g.g,
n.Производитель,
d.place_month,
--SELECT
SUM(d.order_qty * n.[Цена учетная, руб]) AS Deficit,
-- средний %ТН, защита от деления на 0
SUM(a.[%ТН год, руб.] * d.order_qty * n.[Цена учетная, руб])
/ NULLIF(SUM(d.order_qty * n.[Цена учетная, руб]), 0) AS [%ТН средн]
FROM [analytics].[deficit_proposal] d
INNER JOIN pbi.nomenclature n ON n.[1c_id] = d.[1c_id]
INNER JOIN [analytics].[аналитика за 365 дн.] a ON a.[1c_id] = d.[1c_id]
INNER JOIN pbi.groups g ON g.[1c_id] = n.[1c_group]
WHERE
--d.place_month IN ('2025-10-01','2025-11-01')
--d.place_month <= '2026-09-01'
d.scenario_id = 4
AND n.cenovaya_gruppa = 'Валютная'
--AND a.[%ТН год, руб.] > 0.7
GROUP BY
g.g, n.Производитель, d.place_month
HAVING
SUM(d.order_qty * n.[Цена учетная, руб]) > 2000
)
SELECT
b.*
, b.[%ТН средн] * isnull( roi.ROI_norm, 1.36) AS [%ROI заказа]
, isnull( roi.[ROI_norm], 1.36) AS [ROI normalized]
, b.[%ТН средн] * isnull( roi.ROI_norm, 1.36) * b.Deficit as [ROI руб]
, isnull(roi.n_percent, 0.3) as n_percent
, isnull(roi.n_days, 1) n_days
, isnull(roi.m_percent, 0.7) m_percent
, isnull(roi. m_days, 60 ) m_days
FROM base b
LEFT JOIN [analytics].[manufacturers] roi ON roi.[manufacturer] = b.Производитель
ORDER BY
[%ROI заказа] DESC, b.g, Deficit DESC;
/****** Script for SelectTopNRows command from SSMS ******/
SELECT
--[id]
--,[scenario_id]
--[g]
--,[manufacturer]
--,[place_month]
--,
FORMAT([place_month], 'yy-MM') as 'Дата платежа'
,sum([deficit]) as 'Сумма платежа'
--,[pay_days]
--,[percent]
--,[created_at]
FROM [mag_pbi].[analytics].[deficit_money_request]
GROUP BY FORMAT([place_month], 'yy-MM')
ORDER BY FORMAT([place_month], 'yy-MM') ASC
SELECT
sum([deficit]) as 'Платежи в 2026'
FROM [mag_pbi].[analytics].[deficit_money_request]
WHERE
FORMAT([place_month], 'yy-MM') < '27-01'
------
SELECT
t.month as month,
sum(t.Выручка) as revenue,
sum(t.[Сумм. учет]) as uchet
FROM
(
SELECT
--,[1c_id]
a.[%ТН год, руб.]
,a.[code]
,[month]
, value as 'Штуки'
, [value] * n.[Цена учетная, руб] as 'Сумм. учет'
, [value] * n.[Цена учетная, руб] * ( 1 + a.[%ТН год, руб.] ) as 'Выручка'
--, a. *
FROM [mag_pbi].[analytics].[forecast] f
INNER JOIN analytics.[аналитика за 365 дн.] a
ON a.[1c_id] = f.[1c_id]
INNER JOIN pbi.nomenclature n
ON a.[1c_id] = n.[1c_id]
WHERE scenario_id = 4
AND a.[%ТН год, руб.] > 0
) as t
GROUP BY t.month
ORDER BY t.month asc
DECLARE @pathPattern nvarchar(400) =N'Кружево%' -- например: N'Бусины | Под жемчуг | На бобинах%'
-------------------------------------------------------------
-- 1. SKU внутри нужного path
-------------------------------------------------------------
;WITH sku_in_group AS (
SELECT
a.[1c_id]
, a.[Code] AS code
, g.[path]
, a.[Оплаченный остаток] AS PaidCapital -- руб
, a.[Рентабельность по остатку / год] AS RoicPast -- твой показатель за прошлый год
FROM [mag_pbi].[analytics].[аналитика за 365 дн.] a
INNER JOIN [mag_pbi].[pbi].[nomenclature] n
ON n.[1c_id] = a.[1c_id]
INNER JOIN [mag_pbi].[pbi].[groups] g
ON g.[1c_id] = n.[1c_group]
WHERE g.[path] LIKE @pathPattern
)
-------------------------------------------------------------
-- 2. Итог по группе (взвешенная рентабельность)
-------------------------------------------------------------
SELECT
@pathPattern AS [Фильтр path]
--, MIN(path) AS [Пример path]
, SUM(PaidCapital) AS [Оплаченный остаток всего, руб]
, CASE
WHEN SUM(PaidCapital) > 0
THEN SUM(ISNULL(PaidCapital,0) * ISNULL(RoicPast,0))
/ SUM(PaidCapital)
ELSE NULL
END AS [Рентабельность остатка / год назад, %]
FROM sku_in_group;
-------------------------------------------------------------
-- 3. Детализация по SKU для этой же группы
-------------------------------------------------------------
/*SELECT
path
, code
, PaidCapital AS [Оплаченный остаток, руб]
, RoicPast AS [Рентабельность остатка / год назад, %]
FROM sku_in_group
ORDER BY path, code;*/
SET NOCOUNT ON;
DECLARE
@sumPaid decimal(38,6)
, @sumWeightedPast decimal(38,6)
, @sumWeightedFuture decimal(38,6)
, @roicPastTotal decimal(38,6)
, @roicFutureTotal decimal(38,6);
/* 1. Считаем суммы по всем SKU */
SELECT
@sumPaid = SUM(CAST(ISNULL([Оплаченный остаток], 0.0) AS decimal(38,6)))
, @sumWeightedPast =
SUM(
CAST(ISNULL([Оплаченный остаток], 0.0) AS decimal(38,6))
* CAST(ISNULL([Рентабельность по остатку / год], 0.0) AS decimal(38,6))
)
, @sumWeightedFuture =
SUM(
CAST(ISNULL([Оплаченный остаток], 0.0) AS decimal(38,6))
* CAST(ISNULL([Рентабельность / будущий год], 0.0) AS decimal(38,6))
)
FROM [analytics].[аналитика за 365 дн.];
/* 2. Итоговые рентабельности (в процентах) */
SET @roicPastTotal = CASE
WHEN @sumPaid > 0
THEN @sumWeightedPast / @sumPaid
ELSE NULL
END;
SET @roicFutureTotal = CASE
WHEN @sumPaid > 0
THEN @sumWeightedFuture / @sumPaid
ELSE NULL
END;
/* 3. Возвращаем результат */
SELECT
@sumPaid AS [Оплаченный остаток всего, руб]
, @roicPastTotal AS [Рентабельность остатка / год назад всего, %]
, @roicFutureTotal AS [Рентабельность остатка / будущий год всего, %];
END
GO
/****** Object: StoredProcedure [analytics].[sp_report_ROI_подробно] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procedure [analytics].[sp_report_ROI_подробно] as BEGIN
---------------------------------------------------------
-- 0. Параметры дат: 12 полных месяцев НАЗАД
---------------------------------------------------------
DECLARE @today date = CAST(GETDATE() AS date);
DECLARE @lastFullMonth date;
DECLARE @firstMonthStart date;
DECLARE @curMonthStart date;
-- последний полный месяц (месяц до текущего дня)
SET @lastFullMonth = EOMONTH(DATEADD(month, -1, @today));
-- первый из 12 полных месяцев
SET @firstMonthStart = DATEADD(
month, -11,
DATEFROMPARTS(YEAR(@lastFullMonth), MONTH(@lastFullMonth), 1)
);
SET @curMonthStart = @firstMonthStart;
---------------------------------------------------------
-- 1. Список месяцев (#months)
---------------------------------------------------------
IF OBJECT_ID('tempdb..#months') IS NOT NULL DROP TABLE #months;
CREATE TABLE #months (
MonthStart date NOT NULL PRIMARY KEY
);
WHILE @curMonthStart
<= DATEFROMPARTS(YEAR(@lastFullMonth), MONTH(@lastFullMonth), 1)
BEGIN
INSERT INTO #months (MonthStart)
VALUES (@curMonthStart);
SET @curMonthStart = DATEADD(month, 1, @curMonthStart);
END;
---------------------------------------------------------
-- 2. SKU (#s) здесь укажи нужный код товара
---------------------------------------------------------
IF OBJECT_ID('tempdb..#s') IS NOT NULL DROP TABLE #s;
CREATE TABLE #s (
[1c_id] binary(16) NOT NULL,
code nchar(11) NOT NULL
);
INSERT INTO #s ([1c_id], code)
SELECT n.[1c_id], n.code
FROM pbi.nomenclature n
WHERE n.code = N'УТ-00176242'; -- <=== поменяй при необходимости
---------------------------------------------------------
-- 3. Внешние остатки (#ext_stock) срезы на конец месяца
---------------------------------------------------------
IF OBJECT_ID('tempdb..#ext_stock') IS NOT NULL DROP TABLE #ext_stock;
CREATE TABLE #ext_stock (
Dt date NOT NULL,
code nchar(11) NOT NULL,
qty numeric(18,3) NOT NULL,
CONSTRAINT PK_ext_stock PRIMARY KEY (Dt, code)
);
INSERT INTO #ext_stock (Dt, code, qty)
SELECT
CAST(o.[Дата обновления] AS date) AS Dt,
o.code,
SUM(o.[Количество]) AS qty
FROM analytics.[Внешние остатки] o
JOIN #s s
ON s.code = o.code
GROUP BY CAST(o.[Дата обновления] AS date), o.code;
---------------------------------------------------------
-- 4. Приходы (#incoming) Закупка / Приход по месяцам
-- БЕРЁМ ТОЛЬКО ПРИХОДЫ ВНУТРИ НАШИХ 12 МЕСЯЦЕВ
---------------------------------------------------------
IF OBJECT_ID('tempdb..#incoming') IS NOT NULL DROP TABLE #incoming;
CREATE TABLE #incoming (
MonthStart date NOT NULL, -- месяц прихода (1-е число)
code nchar(11) NOT NULL,
qty numeric(18,3) NOT NULL,
CONSTRAINT PK_incoming PRIMARY KEY (MonthStart, code)
);
INSERT INTO #incoming (MonthStart, code, qty)
SELECT
DATEFROMPARTS(YEAR(s.[Период]), MONTH(s.[Период]), 1) AS MonthStart,
n.code,
SUM(s.[Количество]) AS qty
FROM pbiProd.[СводныйСебестоимость Для PBI] s
JOIN pbi.nomenclature n
ON n.[1c_id] = s.[1c_id]
JOIN #s sfilter
ON sfilter.code = n.code
WHERE s.[Статья] = N'Закупка'
AND s.[Вид операции] = N'Приход'
AND s.[Период] >= @firstMonthStart -- отключаем старые приходы
GROUP BY
DATEFROMPARTS(YEAR(s.[Период]), MONTH(s.[Период]), 1),
n.code;
---------------------------------------------------------
-- 5. Части платежей по каждому приходу (#pay_parts)
-- (1-й и 2-й платёж по производителю, проценты как ДОЛИ)
---------------------------------------------------------
IF OBJECT_ID('tempdb..#pay_parts') IS NOT NULL DROP TABLE #pay_parts;
CREATE TABLE #pay_parts (
MonthStart date NOT NULL, -- месяц прихода (ключ к #incoming)
code nchar(11) NOT NULL,
pay_date date NOT NULL, -- дата платежа
amount numeric(18,2) NOT NULL
);
-- первый платёж (n)
INSERT INTO #pay_parts (MonthStart, code, pay_date, amount)
SELECT
inc.MonthStart,
inc.code,
DATEADD(day, man.n_days - 90, EOMONTH(inc.MonthStart)) AS pay_date,
inc.qty * n.[Цена учетная, руб] * man.n_percent AS amount
FROM #incoming inc
JOIN pbi.nomenclature n
ON n.code = inc.code
JOIN analytics.manufacturers man
ON man.[manufacturer] = n.Производитель
WHERE man.n_percent IS NOT NULL
AND man.n_percent <> 0;
-- второй платёж (m)
INSERT INTO #pay_parts (MonthStart, code, pay_date, amount)
SELECT
inc.MonthStart,
inc.code,
DATEADD(day, man.m_days - 90, EOMONTH(inc.MonthStart)) AS pay_date,
inc.qty * n.[Цена учетная, руб] * man.m_percent AS amount
FROM #incoming inc
JOIN pbi.nomenclature n
ON n.code = inc.code
JOIN analytics.manufacturers man
ON man.[manufacturer] = n.Производитель
WHERE man.m_percent IS NOT NULL
AND man.m_percent <> 0;
---------------------------------------------------------
-- 6. Платежи по месяцам (#payments) для колонки [платеж]
---------------------------------------------------------
IF OBJECT_ID('tempdb..#payments') IS NOT NULL DROP TABLE #payments;
CREATE TABLE #payments (
MonthStart date NOT NULL, -- месяц платежа (1-е число)
code nchar(11) NOT NULL,
amount numeric(18,2) NOT NULL,
CONSTRAINT PK_payments PRIMARY KEY (MonthStart, code)
);
INSERT INTO #payments (MonthStart, code, amount)
SELECT
DATEFROMPARTS(YEAR(p.pay_date), MONTH(p.pay_date), 1) AS MonthStart,
p.code,
SUM(p.amount) AS amount
FROM #pay_parts p
GROUP BY
DATEFROMPARTS(YEAR(p.pay_date), MONTH(p.pay_date), 1),
p.code;
---------------------------------------------------------
-- 7. Обязательства по месяцам (#obligations)
-- Считаем только по приходам (#incoming)
---------------------------------------------------------
IF OBJECT_ID('tempdb..#obligations') IS NOT NULL DROP TABLE #obligations;
CREATE TABLE #obligations (
MonthStart date NOT NULL, -- месяц, на который считаем долг
code nchar(11) NOT NULL,
obligation numeric(18,2) NOT NULL,
CONSTRAINT PK_obligations PRIMARY KEY (MonthStart, code)
);
;WITH ObligRows AS (
SELECT
m.MonthStart,
inc.code,
CASE
-- если месяц ещё до прихода товара долга нет
WHEN EOMONTH(m.MonthStart) < EOMONTH(inc.MonthStart) THEN 0
ELSE
CASE
WHEN full_sum - paid_to_month > 0
THEN full_sum - paid_to_month
ELSE 0
END
END AS ObligationPerIncoming
FROM #months m
JOIN #incoming inc
ON 1 = 1 -- каждая пара (месяц, приход)
JOIN pbi.nomenclature n2
ON n2.code = inc.code
JOIN analytics.manufacturers man2
ON man2.[manufacturer] = n2.Производитель
CROSS APPLY (
SELECT
inc.qty * n2.[Цена учетная, руб] AS full_sum,
(
-- оплачено к концу месяца m.MonthStart (по обоим платежам)
(CASE
WHEN man2.n_percent IS NOT NULL
AND EOMONTH(m.MonthStart)
>= DATEADD(day, man2.n_days - 90,
EOMONTH(inc.MonthStart))
THEN inc.qty * n2.[Цена учетная, руб] * man2.n_percent
ELSE 0
END)
+
(CASE
WHEN man2.m_percent IS NOT NULL
AND EOMONTH(m.MonthStart)
>= DATEADD(day, man2.m_days - 90,
EOMONTH(inc.MonthStart))
THEN inc.qty * n2.[Цена учетная, руб] * man2.m_percent
ELSE 0
END)
) AS paid_to_month
) calc
)
INSERT INTO #obligations (MonthStart, code, obligation)
SELECT
MonthStart,
code,
SUM(ObligationPerIncoming) AS obligation
FROM ObligRows
GROUP BY
MonthStart,
code;
---------------------------------------------------------
-- 8. ТН по месяцам (#tn_monthly) из Продажи_Учёт_Маржа_по_дням
---------------------------------------------------------
IF OBJECT_ID('tempdb..#tn_monthly') IS NOT NULL DROP TABLE #tn_monthly;
CREATE TABLE #tn_monthly (
MonthStart date NOT NULL,
code nchar(11) NOT NULL,
tn_amount numeric(18,2) NOT NULL,
CONSTRAINT PK_tn_monthly PRIMARY KEY (MonthStart, code)
);
INSERT INTO #tn_monthly (MonthStart, code, tn_amount)
SELECT
DATEFROMPARTS(YEAR(p.[d]), MONTH(p.[d]), 1) AS MonthStart,
p.[Code],
SUM(p.[Торговая надбавка]) AS tn_amount
FROM [mag_pbi].[analytics].[Продажи_Учёт_Маржа_по_дням] p
JOIN #s s
ON s.code = p.[Code]
WHERE p.[d] >= @firstMonthStart
AND p.[d] <= @lastFullMonth
GROUP BY
DATEFROMPARTS(YEAR(p.[d]), MONTH(p.[d]), 1),
p.[Code];
---------------------------------------------------------
-- 9. Финальный SELECT ПО МЕСЯЦАМ (прошлый год)
---------------------------------------------------------
IF OBJECT_ID('tempdb..#month_plan') IS NOT NULL DROP TABLE #month_plan;
SELECT
s.[1c_id],
s.code,
n.Производитель,
n.[Цена учетная, руб],
n.[Цена учетная, руб]*(ISNULL(intStock.quantity, 0) + ISNULL(ext.qty, 0)) AS [Остаток учетка руб],
man.n_percent,
man.n_days,
man.m_percent,
man.m_days,
RIGHT('0' + CAST(MONTH(m.MonthStart) AS varchar(2)), 2)
+ '-' + CAST(YEAR(m.MonthStart) AS varchar(4)) AS [месяц], -- MM-YYYY (текст)
m.MonthStart AS [MonthStart], -- реальная дата месяца
ISNULL(intStock.quantity, 0) + ISNULL(ext.qty, 0) AS [остаток], -- шт
ISNULL(inc.qty, 0) AS [приход], -- шт
ISNULL(pay.amount, 0) AS [платеж], -- руб
ISNULL(ob.obligation, 0) AS [Обязательства],-- руб
CAST(
CASE
WHEN p.paid_raw < 0 THEN 0
ELSE p.paid_raw
END
AS numeric(18,2)
) AS [Оплаченный остаток], -- руб
ISNULL(tn.tn_amount, 0) AS [ТН], -- торговая надбавка за месяц, руб
CAST(
CASE
WHEN p.paid_raw < 0 THEN 0
ELSE p.paid_raw
END * DAY(EOMONTH(m.MonthStart))
AS numeric(18,2)
) AS [рубли-дни] -- оплаченный остаток × дней в месяце
INTO #month_plan
FROM #months m
CROSS JOIN #s s
OUTER APPLY (
SELECT TOP (1) w1.quantity
FROM pbi.[w_ostatok_da_net] w1
WHERE w1._IDRREF = s.[1c_id]
AND w1.dt <= EOMONTH(m.MonthStart)
ORDER BY w1.dt DESC
) AS intStock
LEFT JOIN #ext_stock ext
ON ext.code = s.code
AND ext.Dt = EOMONTH(m.MonthStart)
LEFT JOIN #incoming inc
ON inc.code = s.code
AND inc.MonthStart = m.MonthStart
LEFT JOIN pbi.nomenclature n
ON n.code = s.code
LEFT JOIN analytics.manufacturers man
ON man.[manufacturer] = n.Производитель
LEFT JOIN #payments pay
ON pay.code = s.code
AND pay.MonthStart = m.MonthStart
LEFT JOIN #obligations ob
ON ob.code = s.code
AND ob.MonthStart = m.MonthStart
LEFT JOIN #tn_monthly tn
ON tn.code = s.code
AND tn.MonthStart = m.MonthStart
CROSS APPLY ( -- сырые оплаченные рубли (до обрезки в 0)
SELECT
(ISNULL(intStock.quantity, 0) + ISNULL(ext.qty, 0))
* ISNULL(n.[Цена учетная, руб], 0)
- ISNULL(ob.obligation, 0) AS paid_raw
) p
ORDER BY m.MonthStart;
-- помесячная картина прошлого
SELECT * FROM #month_plan;
---------------------------------------------------------
-- 10. Рентабельность за прошлый год (ROIC как было)
---------------------------------------------------------
DECLARE @roic_past numeric(38,6);
DECLARE @tn_year numeric(38,6);
DECLARE @ruble_days_year numeric(38,6);
SELECT
@tn_year = SUM(t.[ТН]),
@ruble_days_year = SUM(t.[рубли-дни])
FROM #month_plan t;
SET @roic_past = CASE
WHEN @ruble_days_year > 0
THEN @tn_year * 365.0 / @ruble_days_year * 100.0
ELSE NULL
END;
---------------------------------------------------------
-- 10a. Рентабельность по остатку В РУБЛЯХ (год и квартал назад)
-- ТН / средний остаток учетка руб
---------------------------------------------------------
DECLARE @rent_cap_year numeric(38,6);
DECLARE @rent_cap_quarter numeric(38,6);
-- год: средний Остаток учетка руб по всем 12 месяцам
DECLARE @avg_cap_year numeric(38,6);
SELECT
@avg_cap_year = AVG(NULLIF(t.[Остаток учетка руб], 0.0))
FROM #month_plan t;
IF @avg_cap_year IS NOT NULL AND @avg_cap_year > 0 AND @tn_year IS NOT NULL
SET @rent_cap_year = @tn_year / @avg_cap_year;
ELSE
SET @rent_cap_year = NULL;
-- квартал: последние 3 месяца окна
DECLARE @q_start date = DATEADD(
month, -2,
DATEFROMPARTS(YEAR(@lastFullMonth), MONTH(@lastFullMonth), 1)
);
DECLARE @tn_q numeric(38,6);
DECLARE @avg_cap_q numeric(38,6);
SELECT
@tn_q = SUM(t.[ТН]),
@avg_cap_q = AVG(NULLIF(t.[Остаток учетка руб], 0.0))
FROM #month_plan t
WHERE t.MonthStart >= @q_start;
IF @avg_cap_q IS NOT NULL AND @avg_cap_q > 0 AND @tn_q IS NOT NULL
SET @rent_cap_quarter = @tn_q / @avg_cap_q;
ELSE
SET @rent_cap_quarter = NULL;
---------------------------------------------------------
-- 11. Рентабельность остатка на будущий год (ROIC вперёд)
---------------------------------------------------------
-- 11.1. Текущий SKU и его продажи / день
DECLARE @sku_1c_id binary(16);
SELECT TOP(1) @sku_1c_id = [1c_id] FROM #s;
DECLARE @sales_per_day numeric(38,6); -- Продажи шт / день
DECLARE @sold_year numeric(38,6); -- Продано шт за последние 12 мес
-- берём скорость продаж из аналитики за 365 дней (если есть)
SELECT
@sales_per_day = a.[Продажи шт / день]
FROM [mag_pbi].[analytics].[аналитика за 365 дн.] a
WHERE a.[1c_id] = @sku_1c_id;
-- продано шт за наши 12 месяцев (по себестоимости)
SELECT
@sold_year = SUM(s.[Количество])
FROM pbiProd.[СводныйСебестоимость Для PBI] s
WHERE s.[1c_id] = @sku_1c_id
AND s.[Статья] = N'Реализация'
AND s.[Период] >= @firstMonthStart
AND s.[Период] <= @lastFullMonth;
IF (@sales_per_day IS NULL OR @sales_per_day = 0) AND @sold_year IS NOT NULL
BEGIN
-- fallback, если ещё не прогоняли sp_create_analytics_365
SET @sales_per_day = @sold_year / 365.0;
END;
-- 11.2. Маржа на штуку по истории
DECLARE @tn_per_unit numeric(38,6);
SET @tn_per_unit = CASE
WHEN @sold_year IS NOT NULL AND @sold_year > 0
THEN @tn_year / @sold_year
ELSE NULL
END;
-- 11.3. Текущий оплаченный остаток, остаток шт и остаток учетка руб (последний месяц окна)
DECLARE @q_stock numeric(18,6); -- текущий остаток шт
DECLARE @paid_stock_today numeric(18,6); -- оплаченный остаток в руб
DECLARE @stock_rub_today numeric(18,6); -- остаток учетка руб на конец окна
SELECT TOP(1)
@q_stock = [остаток],
@paid_stock_today = [Оплаченный остаток],
@stock_rub_today = [Остаток учетка руб]
FROM #month_plan
ORDER BY MonthStart DESC; -- последний из 12 месяцев = @lastFullMonth
-- 11.4. Сколько успеем продать за будущий год и какая будет ТН
DECLARE @q_future numeric(18,6); -- сколько штук реально успеем продать за год
DECLARE @tn_future numeric(18,6); -- ожидаемая ТН за будущий год
IF @sales_per_day IS NOT NULL AND @sales_per_day > 0
BEGIN
DECLARE @max_sell_1y numeric(18,6);
SET @max_sell_1y = @sales_per_day * 365.0;
SET @q_future = CASE
WHEN @q_stock IS NULL THEN 0
WHEN @q_stock <= @max_sell_1y THEN @q_stock
ELSE @max_sell_1y
END;
END
ELSE
BEGIN
SET @q_future = 0;
END;
IF @tn_per_unit IS NOT NULL
SET @tn_future = @tn_per_unit * @q_future;
ELSE
SET @tn_future = NULL;
-- 11.5. Будущие рубли-дни и ROIC вперёд
DECLARE @days_to_sell numeric(18,6);
DECLARE @ruble_days_future numeric(18,6);
DECLARE @roic_future numeric(38,6);
IF @sales_per_day IS NOT NULL AND @sales_per_day > 0 AND @q_stock IS NOT NULL
SET @days_to_sell = @q_stock / @sales_per_day;
ELSE
SET @days_to_sell = NULL;
IF @days_to_sell IS NULL OR @paid_stock_today IS NULL OR @paid_stock_today <= 0 OR @tn_future IS NULL
BEGIN
SET @roic_future = NULL;
END
ELSE
BEGIN
IF @days_to_sell >= 365.0
-- остаток будет лежать весь год
SET @ruble_days_future = @paid_stock_today * 365.0;
ELSE
-- остаток линейно уходит до нуля за days_to_sell
SET @ruble_days_future = @paid_stock_today * @days_to_sell / 2.0;
IF @ruble_days_future > 0
SET @roic_future = @tn_future * 365.0 / @ruble_days_future * 100.0;
ELSE
SET @roic_future = NULL;
END;
---------------------------------------------------------
-- 11.6. Рентабельность по остатку В РУБЛЯХ на будущий год
-- (ТН_future / средний остаток учетка руб в горизонте)
---------------------------------------------------------
DECLARE @rent_cap_future numeric(38,6);
IF @stock_rub_today IS NULL OR @stock_rub_today <= 0
OR @q_stock IS NULL OR @q_stock <= 0
OR @q_future IS NULL OR @q_future <= 0
OR @tn_future IS NULL
BEGIN
SET @rent_cap_future = NULL;
END
ELSE
BEGIN
DECLARE @avg_cap_future numeric(38,6);
-- считаем, что капитал уходит линейно пропорционально количеству:
-- капитал "на продажу" = stock_rub_today * (q_future / q_stock)
-- средний капитал = stock_rub_today - 0.5 * капитал_на_продажу
SET @avg_cap_future =
@stock_rub_today * (1.0 - (@q_future / @q_stock) / 2.0);
IF @avg_cap_future > 0
SET @rent_cap_future = @tn_future / @avg_cap_future;
ELSE
SET @rent_cap_future = NULL;
END;
---------------------------------------------------------
-- 11.7. Таблица будущего по месяцам (#future_plan) — как было
---------------------------------------------------------
IF OBJECT_ID('tempdb..#future_plan') IS NOT NULL DROP TABLE #future_plan;
CREATE TABLE #future_plan (
PeriodStart date,
PeriodEnd date,
DaysInPeriod int,
QtyStart numeric(18,6),
Sold numeric(18,6),
QtyEnd numeric(18,6),
PaidCapitalAvg numeric(18,6),
RubleDays numeric(18,6),
TN_period numeric(18,6),
ROIC_period numeric(38,6)
);
DECLARE
@f_start date,
@f_end date,
@days int,
@rem_qty numeric(18,6),
@qty_start numeric(18,6),
@qty_end numeric(18,6),
@sold numeric(18,6),
@capital_start numeric(18,6),
@capital_end numeric(18,6),
@capital_avg numeric(18,6),
@tn_period numeric(18,6),
@ruble_days_m numeric(18,6),
@roic_m numeric(38,6),
@cum_days int;
SET @rem_qty = ISNULL(@q_stock, 0);
SET @f_start = @today;
SET @cum_days = 0;
WHILE @cum_days < 365 AND @rem_qty > 0 AND @sales_per_day IS NOT NULL AND @sales_per_day > 0
BEGIN
-- конец периода = конец месяца, в котором f_start
SET @f_end = EOMONTH(@f_start);
SET @days = DATEDIFF(day, @f_start, @f_end) + 1;
-- не выходим за 365 дней горизонта
IF @cum_days + @days > 365
BEGIN
SET @days = 365 - @cum_days;
SET @f_end = DATEADD(day, @days - 1, @f_start);
END;
SET @qty_start = @rem_qty;
DECLARE @can_sell numeric(18,6);
SET @can_sell = @sales_per_day * @days;
SET @sold = CASE
WHEN @rem_qty <= @can_sell THEN @rem_qty
ELSE @can_sell
END;
SET @qty_end = @qty_start - @sold;
IF @q_stock IS NOT NULL AND @q_stock > 0 AND @paid_stock_today IS NOT NULL
BEGIN
SET @capital_start = @paid_stock_today * (@qty_start / @q_stock);
SET @capital_end = @paid_stock_today * (@qty_end / @q_stock);
END
ELSE
BEGIN
SET @capital_start = 0;
SET @capital_end = 0;
END;
SET @capital_avg = (@capital_start + @capital_end) / 2.0;
IF @tn_per_unit IS NOT NULL
SET @tn_period = @tn_per_unit * @sold;
ELSE
SET @tn_period = NULL;
SET @ruble_days_m = @capital_avg * @days;
IF @ruble_days_m > 0 AND @tn_period IS NOT NULL
SET @roic_m = @tn_period * 365.0 / @ruble_days_m * 100.0;
ELSE
SET @roic_m = NULL;
INSERT INTO #future_plan (
PeriodStart, PeriodEnd, DaysInPeriod,
QtyStart, Sold, QtyEnd,
PaidCapitalAvg, RubleDays, TN_period, ROIC_period
)
VALUES (
@f_start, @f_end, @days,
@qty_start, @sold, @qty_end,
@capital_avg, @ruble_days_m, @tn_period, @roic_m
);
SET @rem_qty = @qty_end;
SET @cum_days = @cum_days + @days;
SET @f_start = DATEADD(day, 1, @f_end);
IF @cum_days >= 365 BREAK;
END;
---------------------------------------------------------
-- 12. Итог: прошлое и будущее + рентабельность по остатку (руб)
---------------------------------------------------------
SELECT
@roic_past AS [ROIC за год назад],
@roic_future AS [ROIC на будущий год],
@rent_cap_year AS [Рентабельность по остатку (руб) / год назад],
@rent_cap_quarter AS [Рентабельность по остатку (руб) / квартал назад],
@rent_cap_future AS [Рентабельность по остатку (руб) / будущий год];
-- Таблица будущего по месяцам / периодам (как было)
SELECT * FROM #future_plan ORDER BY PeriodStart;
END
GO
/****** Object: StoredProcedure [analytics].[sp_run_deficit_all_skus] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [analytics].[sp_run_deficit_all_skus]
@scenario_id INT
as BEGIN
DELETE FROM [analytics].[deficit_proposal] where scenario_id = @scenario_id
EXEC [analytics].[sp_build_deficit_proposal]
@scenario_id = @scenario_id,
@group_path = N'', -- пусто = все группы
@lead_time_m = 4,
@cover_months = 6,
@from_month = '2025-10-01',
@to_month_excl = '2028-01-01',
@debug = 0; -- чтобы не заспамить Messages
END
GO
/****** Object: StoredProcedure [analytics].[sp_загрузка_прогнозаакупки] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Script for SelectTopNRows command from SSMS ******/
CREATE PROCEDURE [analytics].[sp_загрузка_прогнозаакупки] AS BEGIN
SET NOCOUNT ON;
IF OBJECT_ID('tempdb..#plan2026') IS NOT NULL
DROP TABLE #plan2026;
CREATE TABLE #plan2026 (
code nvarchar(50) NOT NULL,
opt decimal(18,2) NULL,
mp decimal(18,2) NULL,
updated_by nvarchar(100) NULL
);
-- уникальный индекс по коду, дубли игнорируем
CREATE UNIQUE INDEX UX_plan2026_code
ON #plan2026(code)
WITH (IGNORE_DUP_KEY = ON);
BULK INSERT #plan2026
FROM '\\192.168.35.3\admin3\Обмен\powerbi\plan2026.csv'
WITH (
FIRSTROW = 2, -- пропускаем заголовок
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n',
CODEPAGE = '1251', -- или 1251, если файл не в UTF-8
TABLOCK
);
-- Проверка
SELECT COUNT(*) AS total_rows,
COUNT(DISTINCT code) AS distinct_codes
FROM #plan2026;
-- Проверка
SELECT TOP (20) *
FROM #plan2026
SELECT
month
, avg([koef])
FROM [mag_pbi].[analytics].[seasonality_groups_summ_1]
GROUP by month
order by month
------------------------------------------------------------
-- 1. Средняя сезонность по месяцам → #Seasonality
------------------------------------------------------------
IF OBJECT_ID('tempdb..#Seasonality') IS NOT NULL
DROP TABLE #Seasonality;
SELECT
[month]
, koef = AVG([koef])
INTO #Seasonality
FROM [mag_pbi].[analytics].[seasonality_groups_summ_1]
GROUP BY [month];
------------------------------------------------------------
-- 2. Почистить сценарий 8 (если нужно пересчитать)
------------------------------------------------------------
DELETE FROM [mag_pbi].[analytics].[forecast]
WHERE scenario_id = 8;
------------------------------------------------------------
-- 3. Записать прогноз в forecast для scenario_id = 8
-- value = opt_месяц + mp_месяц
------------------------------------------------------------
INSERT INTO [mag_pbi].[analytics].[forecast] (
scenario_id
, [1c_id]
, [code]
, [month]
, [value]
, [updated_at]
, [updated_by]
, [opt]
, [mp]
)
SELECT
8 AS scenario_id
, n.[1c_id]
, p.[code]
, DATEFROMPARTS(2026, s.[month], 1) AS [month]
, CAST( (p.opt * s.koef) + (p.mp * s.koef) AS decimal(18,3)) AS [value]
, GETDATE() AS updated_at
, p.[updated_by] AS updated_by
, CAST(p.opt * s.koef AS decimal(18,3)) AS [opt]
, CAST(p.mp * s.koef AS decimal(18,3)) AS [mp]
FROM #plan2026 AS p
INNER JOIN [mag_pbi].[pbi].[nomenclature] AS n
ON n.[code] = p.[code]
CROSS JOIN #Seasonality AS s;
-- всего строк и разных кодов
--EXEC [analytics].[sp_build_deficit_proposal] @scenario_id = 8
/*
/****** Script for SelectTopNRows command from SSMS ******/
INSERT INTO [mag_pbi].[analytics].[forecast] (
scenario_id
, [1c_id]
, [code]
, [month]
, [value]
, [updated_at]
, [updated_by]
, [opt]
, [mp]
)
SELECT
8 AS scenario_id
,[1c_id]
,[code]
,[month]
,[value]
,[updated_at]
,[updated_by]
,[opt]
,[mp]
FROM [mag_pbi].[analytics].[forecast]
WHERE scenario_id = 5 AND code not in (SELECT code FROM [mag_pbi].[analytics].[forecast] WHERE scenario_id = 8 )
*/
--EXEC [analytics].[sp_fill_deficit_money_request] @scenario_id = 8
END
GO
/****** Object: StoredProcedure [analytics].[usp_CreateForecastBasesKs] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [analytics].[usp_CreateForecastBasesKs]
AS
BEGIN
SET NOCOUNT ON;
-- Удаляем вьюху, если существует
IF OBJECT_ID('analytics.ForecastBasesKs', 'V') IS NOT NULL
DROP VIEW analytics.ForecastBasesKs;
-- Создаём заново
EXEC('
CREATE VIEW [analytics].[ForecastBasesKs] AS
WITH MaxDate AS (
SELECT MAX(Период) AS max_date
FROM [pbi].[Себестоимость]
WHERE Статья = ''реализация''
),
LastFullMonth AS (
SELECT
YEAR(DATEADD(MONTH, -1, max_date)) AS last_year,
MONTH(DATEADD(MONTH, -1, max_date)) AS last_month
FROM MaxDate
),
-- 1. Продажи по SKU × месяц
Sales AS (
SELECT
artic_id,
YEAR(Период) AS Год,
MONTH(Период) AS Месяц,
SUM(Количество) AS total_sales
FROM [pbi].[Себестоимость]
WHERE Статья = ''реализация''
GROUP BY artic_id, YEAR(Период), MONTH(Период)
),
-- 2. Дни в продаже
Stock AS (
SELECT
artic_id,
YEAR(dt) AS Год,
MONTH(dt) AS Месяц,
SUM(CASE WHEN ostatok = 1 THEN 1 ELSE 0 END) AS days_available
FROM [pbi].[w_ostatok_da_net]
GROUP BY artic_id, YEAR(dt), MONTH(dt)
),
-- 3. База
Base AS (
SELECT
s.artic_id,
n.code,
n.description,
s.Год,
s.Месяц,
s.total_sales,
st.days_available,
sg.seasonal_koef,
(s.total_sales / NULLIF(sg.seasonal_koef,0)) AS Normalized_sales,
CASE WHEN st.days_available > 19 THEN 1 ELSE 0 END AS valid_month,
CASE WHEN st.days_available > 19
THEN (s.total_sales / NULLIF(sg.seasonal_koef,0))
ELSE NULL END AS normalized_valid_sales
FROM Sales s
LEFT JOIN Stock st
ON s.artic_id = st.artic_id
AND s.Год = st.Год
AND s.Месяц = st.Месяц
JOIN [pbi].[nomenclature] n
ON s.artic_id = n.artic_id
JOIN [analytics].[seasonality_groups] sg
ON n.[1c_group] = sg.group_1c_id
AND s.Месяц = sg.month
),
Windowed AS (
SELECT
b.*,
ROW_NUMBER() OVER (PARTITION BY b.artic_id ORDER BY (b.Год*100 + b.Месяц) DESC) AS rn_desc
FROM Base b
),
Aggregates AS (
SELECT
w.artic_id,
AVG(CASE WHEN rn_desc <= 12 THEN normalized_valid_sales END) AS Base_12M,
CASE
WHEN MIN(CASE WHEN rn_desc <= 3 THEN valid_month END) = 1
THEN AVG(CASE WHEN rn_desc <= 3 THEN normalized_valid_sales END)
ELSE NULL
END AS Base_3M
FROM Windowed w
CROSS JOIN LastFullMonth lm
WHERE (w.Год*100 + w.Месяц) <= (lm.last_year*100 + lm.last_month)
GROUP BY w.artic_id
),
TrendData AS (
SELECT
w.artic_id,
ROW_NUMBER() OVER (PARTITION BY w.artic_id ORDER BY (w.Год*100 + w.Месяц)) - 1 AS t,
LOG(w.normalized_valid_sales) AS ln_sales
FROM Windowed w
CROSS JOIN LastFullMonth lm
WHERE (w.Год*100 + w.Месяц) > (lm.last_year*100 + lm.last_month - 200)
AND (w.Год*100 + w.Месяц) <= (lm.last_year*100 + lm.last_month)
AND w.normalized_valid_sales > 0
),
TrendAgg AS (
SELECT
artic_id,
COUNT(*) AS n_obs,
EXP( (AVG(t*ln_sales) - AVG(t)*AVG(ln_sales)) / NULLIF(AVG(t*t) - AVG(t)*AVG(t),0) ) AS g_raw
FROM TrendData
GROUP BY artic_id
HAVING COUNT(*) >= 6
),
TrendFinal AS (
SELECT
artic_id,
POWER(
CASE
WHEN POWER(g_raw, 12) < 0.7 THEN 0.7
WHEN POWER(g_raw, 12) > 1.5 THEN 1.5
ELSE POWER(g_raw, 12)
END,
1.0/12
) AS Ktrend
FROM TrendAgg
),
YoYpairs AS (
SELECT
w.artic_id,
(w.Год*100 + w.Месяц) AS ym,
w.normalized_valid_sales AS v2,
LAG(w.normalized_valid_sales, 12) OVER (
PARTITION BY w.artic_id ORDER BY (w.Год*100 + w.Месяц)
) AS v1
FROM Windowed w
CROSS JOIN LastFullMonth lm
WHERE (w.Год*100 + w.Месяц) <= (lm.last_year*100 + lm.last_month)
),
YoYratios AS (
SELECT artic_id, (v2 / v1) AS ratio
FROM YoYpairs
WHERE v1 > 0 AND v2 > 0
),
YoYFinal AS (
SELECT DISTINCT
artic_id,
CASE
WHEN PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ratio)
OVER (PARTITION BY artic_id) < 0.7 THEN 0.7
WHEN PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ratio)
OVER (PARTITION BY artic_id) > 1.5 THEN 1.5
ELSE PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ratio)
OVER (PARTITION BY artic_id)
END AS Kgrowth_YoY,
COUNT(ratio) OVER (PARTITION BY artic_id) AS cnt_pairs
FROM YoYratios
),
YoYFiltered AS (
SELECT artic_id, Kgrowth_YoY
FROM YoYFinal
WHERE cnt_pairs >= 3
)
SELECT
n.artic_id,
n.code,
n.description,
a.Base_12M,
a.Base_3M,
CASE
WHEN a.Base_3M IS NOT NULL THEN a.Base_3M
ELSE a.Base_12M
END AS Base_Selected,
tf.Ktrend,
yf.Kgrowth_YoY
FROM pbi.nomenclature n
LEFT JOIN Aggregates a ON n.artic_id = a.artic_id
LEFT JOIN TrendFinal tf ON n.artic_id = tf.artic_id
LEFT JOIN YoYFiltered yf ON n.artic_id = yf.artic_id;
');
END;
GO
/****** Object: StoredProcedure [analytics].[usp_InsertForecasts] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [analytics].[usp_InsertForecasts]
AS
BEGIN
SET NOCOUNT ON;
-- Удаляем старые прогнозы
DELETE FROM analytics.forecast
WHERE scenario_id IN (5, 6);
-- Чистим временные таблицы
IF OBJECT_ID('tempdb..#Params') IS NOT NULL DROP TABLE #Params;
IF OBJECT_ID('tempdb..#Calendar') IS NOT NULL DROP TABLE #Calendar;
-- #Params
SELECT DATEFROMPARTS(
YEAR(DATEADD(MONTH, -1, MAX(Период))),
MONTH(DATEADD(MONTH, -1, MAX(Период))),
1
) AS LastMonth
INTO #Params
FROM pbi.Себестоимость
WHERE Статья = 'реализация';
-- #Calendar
SELECT DATEFROMPARTS(YEAR(d), MONTH(d), 1) AS MonthStart
INTO #Calendar
FROM (
SELECT TOP (1000)
DATEADD(MONTH, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
(SELECT LastMonth FROM #Params)) AS d
FROM master..spt_values
) x
WHERE d <= '2026-12-01';
-- Вставка Trend (5)
INSERT INTO analytics.forecast (scenario_id, [1c_id], code, [month], value, updated_at, updated_by)
SELECT
5,
n.[1c_id],
f.code,
c.MonthStart,
CAST(
ROUND(
f.Base_Selected * sg.seasonal_koef *
POWER(f.Ktrend, DATEDIFF(MONTH, p.LastMonth, c.MonthStart)),
0
) AS numeric(18,0)
),
GETDATE(),
SUSER_SNAME()
FROM analytics.ForecastBasesKs f
JOIN pbi.nomenclature n ON f.artic_id = n.artic_id
CROSS JOIN #Params p
JOIN #Calendar c ON c.MonthStart > p.LastMonth
JOIN analytics.seasonality_groups sg
ON n.[1c_group] = sg.group_1c_id
AND sg.[month] = MONTH(c.MonthStart)
WHERE f.Base_Selected IS NOT NULL
AND f.Ktrend IS NOT NULL;
-- Вставка YoY (6)
INSERT INTO analytics.forecast (scenario_id, [1c_id], code, [month], value, updated_at, updated_by)
SELECT
6,
n.[1c_id],
f.code,
c.MonthStart,
CAST(
ROUND(
f.Base_Selected * sg.seasonal_koef * f.Kgrowth_YoY,
0
) AS numeric(18,0)
),
GETDATE(),
SUSER_SNAME()
FROM analytics.ForecastBasesKs f
JOIN pbi.nomenclature n ON f.artic_id = n.artic_id
CROSS JOIN #Params p
JOIN #Calendar c ON c.MonthStart > p.LastMonth
JOIN analytics.seasonality_groups sg
ON n.[1c_group] = sg.group_1c_id
AND sg.[month] = MONTH(c.MonthStart)
WHERE f.Base_Selected IS NOT NULL
AND f.Kgrowth_YoY IS NOT NULL;
END;
GO
/****** Object: StoredProcedure [analytics].[Подготовка таблицы продаж к прогнозу] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [analytics].[Подготовка таблицы продаж к прогнозу] as
BEGIN
/* ========= ПАРАМЕТРЫ ========= */
DECLARE @FromDate date = '2023-01-01';
DECLARE @ToDate date = CAST(GETDATE() AS date);
/* ========= ВСПОМОГАТЕЛЬНЫЕ: НЕДЕЛЯ С ПОНЕДЕЛЬНИКА ========= */
IF OBJECT_ID('tempdb..#dates') IS NOT NULL DROP TABLE #dates;
WITH d AS (
SELECT @FromDate AS d
UNION ALL SELECT DATEADD(day,1,d) FROM d WHERE d < @ToDate
)
SELECT d AS [date],
DATEADD(day, - (DATEPART(weekday,d) + @@DATEFIRST + 5) % 7, d) AS week_start
INTO #dates
FROM d
OPTION (MAXRECURSION 0);
CREATE INDEX IX_dates_week ON #dates(week_start);
/* ========= 1) ПРОДАЖИ (только положительные) ========= */
IF OBJECT_ID('tempdb..#sales_raw') IS NOT NULL DROP TABLE #sales_raw;
SELECT
CAST(s.[Период] AS date) AS [date],
s.[1c_id] AS sku_id,
CAST(s.[КоличествоУпаковок] AS decimal(18,4)) AS qty
INTO #sales_raw
FROM [pbiProd].[СводныйСебестоимость Для PBI] s
WHERE
s.[Статья] = N'Реализация'
AND s.[Вид операции] = N'Расход'
AND s.[КоличествоУпаковок] > 0
AND s.[Период] >= @FromDate
AND s.[Период] <= @ToDate;
CREATE INDEX IX_sales_raw ON #sales_raw(sku_id, [date]);
/* ========= 2) ФИЛЬТРУЕМ ПРОДАЖИ ПО НАЛИЧИЮ (ostatok=1 из pbi.w_ostatok_da_net) ========= */
IF OBJECT_ID('tempdb..#sales_clean_daily') IS NOT NULL DROP TABLE #sales_clean_daily;
SELECT
sr.sku_id,
sr.[date],
sr.qty
INTO #sales_clean_daily
FROM #sales_raw sr
JOIN [pbi].[w_ostatok_da_net] a
ON a.[_IDRREF] = sr.sku_id
AND a.dt = sr.[date]
AND a.ostatok = 1;
CREATE INDEX IX_sales_clean_daily ON #sales_clean_daily(sku_id, [date]);
/* ========= 3) АГРЕГАЦИЯ В НЕДЕЛИ ========= */
/* 3.1 Продажи по неделям */
IF OBJECT_ID('tempdb..#sales_weekly') IS NOT NULL DROP TABLE #sales_weekly;
SELECT
scd.sku_id,
d.week_start,
SUM(scd.qty) AS qty_week
INTO #sales_weekly
FROM #sales_clean_daily scd
JOIN #dates d
ON d.[date] = scd.[date]
GROUP BY scd.sku_id, d.week_start;
CREATE INDEX IX_sales_weekly ON #sales_weekly(sku_id, week_start);
/* 3.2 Доля доступности по неделям (из pbi.w_ostatok_da_net) */
IF OBJECT_ID('tempdb..#avail_weekly') IS NOT NULL DROP TABLE #avail_weekly;
SELECT
a.[_IDRREF] AS sku_id,
d.week_start,
SUM(a.ostatok) AS days_available,
COUNT(*) AS days_total,
CAST(SUM(a.ostatok) * 1.0 / NULLIF(COUNT(*),0) AS decimal(6,4)) AS availability_rate
INTO #avail_weekly
FROM [pbi].[w_ostatok_da_net] a
JOIN #dates d
ON d.[date] = a.dt
WHERE a.dt BETWEEN @FromDate AND @ToDate
GROUP BY a.[_IDRREF], d.week_start;
CREATE INDEX IX_avail_weekly ON #avail_weekly(sku_id, week_start);
/* ========= 4) СКЛЕЙКА: оставляем недели без продаж, если товар был доступен ========= */
IF OBJECT_ID('tempdb..#weekly_base') IS NOT NULL DROP TABLE #weekly_base;
SELECT
COALESCE(sw.sku_id, aw.sku_id) AS sku_id,
COALESCE(sw.week_start, aw.week_start) AS week_start,
COALESCE(sw.qty_week, 0) AS qty_week,
COALESCE(aw.availability_rate, 0) AS availability_rate
INTO #weekly_base
FROM #sales_weekly sw
FULL JOIN #avail_weekly aw
ON aw.sku_id = sw.sku_id
AND aw.week_start = sw.week_start;
CREATE INDEX IX_weekly_base ON #weekly_base(sku_id, week_start);
/* ========= 5) МЕТАДАННЫЕ SKU (cat L1, minAvailableQty) ========= */
IF OBJECT_ID('tempdb..#sku_meta') IS NOT NULL DROP TABLE #sku_meta;
SELECT
n.[1c_id] AS sku_id,
n.minAvailableQty,
CAST(CASE
WHEN CHARINDEX(N' | ', g.path) > 0
THEN LEFT(g.path, CHARINDEX(N' | ', g.path) - 1)
ELSE g.path
END AS nvarchar(200)) AS category_l1
INTO #sku_meta
FROM [mag_pbi].[pbi].[nomenclature] n
LEFT JOIN [mag_pbi].[pbi].[groups] g
ON g.group_id = n.group_id;
CREATE INDEX IX_sku_meta ON #sku_meta(sku_id);
/* ========= 6) ВИТРИНА С ЛАГАМИ И ФИЧАМИ (analytics) ========= */
IF OBJECT_ID('analytics.sales_weekly_features', 'U') IS NOT NULL
DROP TABLE analytics.sales_weekly_features;
CREATE TABLE analytics.sales_weekly_features (
sku_id varbinary(16) NOT NULL,
week_start date NOT NULL,
qty_week decimal(18,4) NOT NULL,
availability_rate decimal(6,4) NOT NULL,
-- календарные
year_num int NOT NULL,
month_num tinyint NOT NULL,
iso_week tinyint NOT NULL,
quarter_num tinyint NOT NULL,
dow_monday1 tinyint NOT NULL,
-- справочники
category_l1 nvarchar(200) NULL,
minAvailableQty decimal(18,4) NULL,
-- лаги
lag_w1 decimal(18,4) NULL,
lag_w2 decimal(18,4) NULL,
lag_w4 decimal(18,4) NULL,
lag_w12 decimal(18,4) NULL,
lag_w26 decimal(18,4) NULL,
lag_w52 decimal(18,4) NULL,
-- скользящие средние
ma4 decimal(18,4) NULL,
ma12 decimal(18,4) NULL,
created_at datetime2 NOT NULL DEFAULT sysutcdatetime(),
CONSTRAINT PK_sales_weekly_features PRIMARY KEY (sku_id, week_start)
);
WITH base AS (
SELECT wb.sku_id,
wb.week_start,
wb.qty_week,
wb.availability_rate,
YEAR(wb.week_start) AS year_num,
MONTH(wb.week_start) AS month_num,
DATEPART(ISO_WEEK, wb.week_start) AS iso_week,
DATEPART(QUARTER, wb.week_start) AS quarter_num,
1 AS dow_monday1
FROM #weekly_base wb
),
enriched AS (
SELECT b.*,
m.category_l1,
m.minAvailableQty
FROM base b
LEFT JOIN #sku_meta m
ON m.sku_id = b.sku_id
),
lags AS (
SELECT
e.*,
LAG(e.qty_week, 1) OVER (PARTITION BY e.sku_id ORDER BY e.week_start) AS lag_w1,
LAG(e.qty_week, 2) OVER (PARTITION BY e.sku_id ORDER BY e.week_start) AS lag_w2,
LAG(e.qty_week, 4) OVER (PARTITION BY e.sku_id ORDER BY e.week_start) AS lag_w4,
LAG(e.qty_week, 12) OVER (PARTITION BY e.sku_id ORDER BY e.week_start) AS lag_w12,
LAG(e.qty_week, 26) OVER (PARTITION BY e.sku_id ORDER BY e.week_start) AS lag_w26,
LAG(e.qty_week, 52) OVER (PARTITION BY e.sku_id ORDER BY e.week_start) AS lag_w52,
CAST(AVG(e.qty_week) OVER (
PARTITION BY e.sku_id
ORDER BY e.week_start
ROWS BETWEEN 4 PRECEDING AND 1 PRECEDING
) AS decimal(18,4)) AS ma4,
CAST(AVG(e.qty_week) OVER (
PARTITION BY e.sku_id
ORDER BY e.week_start
ROWS BETWEEN 12 PRECEDING AND 1 PRECEDING
) AS decimal(18,4)) AS ma12
FROM enriched e
)
INSERT INTO analytics.sales_weekly_features (
sku_id, week_start, qty_week, availability_rate,
year_num, month_num, iso_week, quarter_num, dow_monday1,
category_l1, minAvailableQty,
lag_w1, lag_w2, lag_w4, lag_w12, lag_w26, lag_w52,
ma4, ma12
)
SELECT
sku_id, week_start, qty_week, availability_rate,
year_num, month_num, iso_week, quarter_num, dow_monday1,
category_l1, minAvailableQty,
lag_w1, lag_w2, lag_w4, lag_w12, lag_w26, lag_w52,
ma4, ma12
FROM lags;
CREATE INDEX IX_sales_weekly_features_sku ON analytics.sales_weekly_features(sku_id, week_start);
CREATE INDEX IX_sales_weekly_features_cat ON analytics.sales_weekly_features(category_l1, week_start);
END
GO
/****** Object: StoredProcedure [dbo].[Расчет себестоимости 1 этап] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[Расчет себестоимости 1 этап]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
exec sebest.[Заполнить себестоимость закупкой]
exec sebest.[Заполнить себестоимость начальным остатком]
DELETE FROM [pbi].[СебестоимостьПродажи]
WHERE 1=1
END
GO
/****** Object: StoredProcedure [pbi].[migrate_groups] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: миграция регистров ВыручкаИСебестоимость продаж из двух баз
-- =============================================
CREATE PROCEDURE [pbi].[migrate_groups]
AS
BEGIN
DROP TABLE [pbi].groups
SELECT
*
INTO [pbi].groups
FROM [mag_pbi].[pbi].[groups_view]
CREATE NONCLUSTERED INDEX [NonClusteredIndex-20190906-120551] ON [pbi].[groups]
(
[group_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
--GO
ALTER TABLE [mag_pbi].[pbi].groups ADD [план] float NULL;
ALTER TABLE [mag_pbi].[pbi].groups ADD [first group] NVARCHAR(36) NULL;
UPDATE [mag_pbi].[pbi].groups set [first group] =
(SELECT group_id FROM [mag_pbi].[pbi].groups gg WHERE gg.g = g.g and gg._ParentIDRRef = '00000000-0000-0000-0000-000000000000' )
FROM [mag_pbi].[pbi].groups g
CREATE NONCLUSTERED INDEX IX_groups__g
ON [pbi].[groups] ([g])
INCLUDE ([group_id]);
--CREATE NONCLUSTERED INDEX [1c_group_index]
--ON [pbi].[nomenclature] ([1c_group])
END
GO
/****** Object: StoredProcedure [pbi].[migrate_max_year_quantity] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [pbi].[migrate_max_year_quantity] as
BEGIN
-- ДЕЛАЕМ ДВА ПОЛЯ
-- max_year_quantity
-- max_quarter_quantity
IF NOT EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'nomenclature' AND TABLE_SCHEMA='pbi'
AND COLUMN_NAME = 'max_year_quantity'
)
BEGIN
ALTER TABLE mag_pbi.pbi.nomenclature
ADD max_year_quantity NUMERIC(38,3) NULL;
END
UPDATE n
SET n.max_year_quantity = (
SELECT MAX(quantity) FROM pbi.[w_ostatok_da_net] o WHERE o._IDRREF = n.[1c_id] AND o.dt >= DATEADD(year, -1, CAST(GETDATE() AS date))
)
FROM mag_pbi.pbi.nomenclature n
--Нужно обязательно добавить регистр закупки, т.к. прием на склад идет не всегда всей партией товара
;WITH YearlyQuantity AS (
SELECT
analitikaUchetaNomenklaturi.[_Fld20498RRef] AS [1c_id],
SUM(
CASE
WHEN r._RecorderTRef IN (0x000001E3, 0x00000189, 0x000001D5, 0x000001B0)
THEN CASE [_Fld16345RRef]
WHEN 0x970191967A54A8814BA45C6234640F68 THEN -[_Fld16361]
ELSE [_Fld16361]
END
WHEN r._RecorderTRef = 0x0000020D THEN 0
WHEN r._RecorderTRef = 0x000001A1 THEN 0
ELSE 0
END
) AS total_quantity
FROM mag_2019.dbo._AccumRg16344 r -- Регистр накопления Закупки
LEFT JOIN [MAG_2019].[dbo].[_Reference160] AS analitikaUchetaNomenklaturi
ON analitikaUchetaNomenklaturi.[_IDRRef] = [_Fld16349RRef]
WHERE DATEADD(year, -2000, _Period) >= DATEADD(YEAR, -1, GETDATE())
GROUP BY analitikaUchetaNomenklaturi.[_Fld20498RRef]
)
UPDATE n
SET n.[max_year_quantity] =
CASE
WHEN y.total_quantity > n.[max_year_quantity] THEN y.total_quantity
ELSE n.[max_year_quantity]
END
FROM [mag_pbi].[pbi].[nomenclature] n
JOIN YearlyQuantity y ON n.[1c_id] = y.[1c_id];
------------------------------------------------------------------
-- max_quarter_quantity
IF NOT EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'nomenclature' AND TABLE_SCHEMA='pbi'
AND COLUMN_NAME = 'max_quarter_quantity'
)
BEGIN
ALTER TABLE mag_pbi.pbi.nomenclature
ADD max_quarter_quantity NUMERIC(38,3) NULL;
END
UPDATE n
SET n.max_quarter_quantity = (
SELECT MAX(quantity) FROM pbi.[w_ostatok_da_net] o WHERE o._IDRREF = n.[1c_id] AND o.dt >= DATEADD(month, -3, CAST(GETDATE() AS date))
)
FROM mag_pbi.pbi.nomenclature n
--Нужно обязательно добавить регистр закупки, т.к. прием на склад идет не всегда всей партией товара
;WITH QuarterlyQuantity AS (
SELECT
analitikaUchetaNomenklaturi.[_Fld20498RRef] AS [1c_id],
SUM(
CASE
WHEN r._RecorderTRef IN (0x000001E3, 0x00000189, 0x000001D5, 0x000001B0)
THEN CASE [_Fld16345RRef]
WHEN 0x970191967A54A8814BA45C6234640F68 THEN -[_Fld16361]
ELSE [_Fld16361]
END
WHEN r._RecorderTRef = 0x0000020D THEN 0
WHEN r._RecorderTRef = 0x000001A1 THEN 0
ELSE 0
END
) AS total_quantity
FROM mag_2019.dbo._AccumRg16344 r -- Регистр накопления Закупки
LEFT JOIN [MAG_2019].[dbo].[_Reference160] AS analitikaUchetaNomenklaturi
ON analitikaUchetaNomenklaturi.[_IDRRef] = [_Fld16349RRef]
WHERE DATEADD(year, -2000, _Period) >= DATEADD(MONTH, -3, GETDATE())
--AND analitikaUchetaNomenklaturi.[_Fld20498RRef] = 0x9989B49691D57EFD11EF3F6ADA21AED9
GROUP BY analitikaUchetaNomenklaturi.[_Fld20498RRef]
)
UPDATE n
SET n.max_quarter_quantity =
CASE
WHEN y.total_quantity > n.max_quarter_quantity THEN y.total_quantity
ELSE n.max_quarter_quantity
END
FROM [mag_pbi].[pbi].[nomenclature] n
JOIN QuarterlyQuantity y ON n.[1c_id] = y.[1c_id];
END
GO
/****** Object: StoredProcedure [pbi].[migrate_nomenclature] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: миграция регистров ВыручкаИСебестоимость продаж из двух баз
-- =============================================
CREATE PROCEDURE [pbi].[migrate_nomenclature]
AS
BEGIN
DROP TABLE IF EXISTS #dop
SELECT * INTO #dop
FROM(
SELECT * FROM mag_pbi.pbi.[значения доп реквизитов номенклатуры]
)as t
CREATE NONCLUSTERED INDEX [NonClusteredIndex-1] ON #dop
(_Reference188_IDRRef, _Fld21137RRef)
DROP table IF EXISTS pbi.nomenclature
SELECT *
INTO pbi.nomenclature
FROM(
SELECT
LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),5,12) ))as artic_id
, n._IDRRef as '1c_id'
, n._Code as code
, CASE
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Рублевая'
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Валютная'
ELSE 'Неопределено'
END as cenovaya_gruppa
, n._Description as description /*Наименование*/
, n._Fld21043 as artic /*Артикул*/
, n._Fld21053RRef as vid_nomen
, cast( (SELECT _Description FROM [MAG_2019].[dbo].[_Reference260] pr WHERE pr._IDRRef = n._Fld21079RRef) as nvarchar(max)) as 'Производитель'
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), n._ParentIDRRef, 2),5,12) ))as group_id
, n._ParentIDRRef as '1c_group'
--, isnull(us._Description, 'Менеджер') as [manager]
, qr._Fld27045 as 'card'
, concat('https://media.magok.ru/', f._Fld21201) as 'photo'
, 2019 as base
, n._Fld21046 as [Знаменатель веса]
, n._Fld21049 as [Числитель веса]
, n._Fld21089 as [Знаменатель объема]
, n._Fld21092 as [Числитель объема]
, n._Fld33769 as [Количество упак в коробе]
, n._Fld33771 as [Количество упак в кванте]
, n._Fld33413 as [id magok]
, (SELECT value FROM #dop where _Fld21137RRef = 0x810D0CC47A052DFD11E8C0B216664650 and _Reference188_IDRRef =n._IDRRef) as [Товарныйменеджера]
, (SELECT value FROM #dop where _Fld21137RRef = 0xAEA2B496910DCFD611E9DAEF699391C4 and _Reference188_IDRRef =n._IDRRef) as [МенеджерПоЗакупкам2]
, (SELECT value FROM #dop where _Fld21137RRef = 0xAEA2B496910DCFD611E9DAF2AF0FBF08 and _Reference188_IDRRef =n._IDRRef) as [РуководительНаправления]
, (SELECT value FROM #dop where _Fld21137RRef = 0x9980B49691D57EFD11EDA7A875968BE2 and _Reference188_IDRRef =n._IDRRef) as [Менеджер OZON]
, (SELECT value FROM #dop where _Fld21137RRef = 0xAEC4B496910DCFD611EC4E8357703C3A and _Reference188_IDRRef =n._IDRRef) as [Менеджер WB]
, (SELECT value FROM #dop where _Fld21137RRef = 0xAEACB496910DCFD611EA4980351CDD01 and _Reference188_IDRRef =n._IDRRef) as [АБС статус]
, (SELECT value FROM #dop where _Fld21137RRef = 0x998DB49691D57EFD11F011642C1217A0 and _Reference188_IDRRef =n._IDRRef) as [АБС план]
, (SELECT value FROM #dop where _Fld21137RRef = 0x998DB49691D57EFD11F0C4629BFA88FF and _Reference188_IDRRef =n._IDRRef) as [ABC Парето]
--, (SELECT value FROM #dop where _Fld21137RRef = 0x9987B49691D57EFD11EEFD8C032DF868 and _Reference188_IDRRef =n._IDRRef) as [АБС МП]
--, (SELECT value FROM #dop where _Fld21137RRef = 0x998DB49691D57EFD11F08C910065CAE0 and _Reference188_IDRRef =n._IDRRef) as [ABC статус 12м 08.25]
--, (SELECT value FROM #dop where _Fld21137RRef = 0x998DB49691D57EFD11F08C9141DE8102 and _Reference188_IDRRef =n._IDRRef) as [ABC статус 3м 08.25]
, (SELECT value FROM #dop where _Fld21137RRef = 0x998DB49691D57EFD11F078456358DE9B and _Reference188_IDRRef =n._IDRRef) as [XYZ статус 12м]
, (SELECT value FROM #dop where _Fld21137RRef = 0x998DB49691D57EFD11F0D41588B52E51 and _Reference188_IDRRef =n._IDRRef) as [Комментарий для матрицы]
--, (SELECT value FROM #dop where _Fld21137RRef = 0x998DB49691D57EFD11F078466D61B354 and _Reference188_IDRRef =n._IDRRef) as [XYZ статус 3м]
, (SELECT value FROM #dop where _Fld21137RRef = 0x80C7305A3A00E12B11E5A300C980DC00 and _Reference188_IDRRef =n._IDRRef) as [Коллекция]
, (SELECT value FROM #dop where _Fld21137RRef = 0x998DB49691D57EFD11F037A75A7E983E and _Reference188_IDRRef =n._IDRRef) as [Ценовой сегмент Магок]
, (SELECT value FROM #dop where _Fld21137RRef = 0x998DB49691D57EFD11F037A7EA5402D7 and _Reference188_IDRRef =n._IDRRef) as [Ценовой сегмент МП]
, (SELECT value FROM #dop where _Fld21137RRef = 0x998DB49691D57EFD11F037A7C791FA85 and _Reference188_IDRRef =n._IDRRef) as [Кол-во упак в заказе Магок]
, (SELECT value FROM #dop r2 where r2._Fld21137RRef = 0x80F1305A3A00E12B11E63C4A303F49FB and _Reference188_IDRRef=n._IDRRef) as [Бренд]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x80C7305A3A00E12B11E5A30013708A94 and _Reference188_IDRRef=n._IDRRef) as [Тип товара]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x80D00CC47A052DFD11E691F14188BF4D and _Reference188_IDRRef=n._IDRRef) as [Метка]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x80E00CC47A052DFD11E7029264A93CF6 and _Reference188_IDRRef=n._IDRRef) as [Ширина, мм]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x80C7305A3A00E12B11E5A3008141292E and _Reference188_IDRRef=n._IDRRef) as [Цвет]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x80E90CC47A052DFD11E72379276D8356 and _Reference188_IDRRef=n._IDRRef) as [Номер цвета]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0xAE9EB496910DCFD611E95F5710EB0448 and _Reference188_IDRRef=n._IDRRef) as [Тип шнура]
--, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0xAE9EB496910DCFD611E95F5783A48B03 and _Reference188_IDRRef=n._IDRRef) as [Наполнитель]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0xAE9EB496910DCFD611E95F572768CAA7 and _Reference188_IDRRef=n._IDRRef) as [Тип плетения]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x80C7305A3A00E12B11E5A2717FE9DE3A and _Reference188_IDRRef=n._IDRRef) as [Размер]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x80C7305A3A00E12B11E5A3001EDD22AF and _Reference188_IDRRef=n._IDRRef) as [Особенность]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x80C7305A3A00E12B11E5A300C980DC01 and _Reference188_IDRRef=n._IDRRef) as [Форма]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x80C7305A3A00E12B11E5A300E8BE58AC and _Reference188_IDRRef=n._IDRRef) as [Ширина]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x997DB49691D57EFD11EC7F7E661783C3 and _Reference188_IDRRef=n._IDRRef) as [Формат упаковки]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x80C7305A3A00E12B11E5BAD05261251C and _Reference188_IDRRef=n._IDRRef) as [Макс. запас]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x80C7305A3A00E12B11E5BAD0706896DA and _Reference188_IDRRef=n._IDRRef) as [Мин. запас]
, (SELECT value FROM #dop r1 where r1._Fld21137RRef = 0x998CB49691D57EFD11EF9202AB464430 and _Reference188_IDRRef=n._IDRRef) as [QTY PACKS]
, (SELECT value FROM #dop r2 where r2._Fld21137RRef = 0xAEA1B496910DCFD411E9B50C873C5A12 and _Reference188_IDRRef=n._IDRRef) as [Да/Нет Собственное пр-во]
, (SELECT value FROM #dop r2 where r2._Fld21137RRef = 0x997DB49691D57EFD11EC9644B479DD39 and _Reference188_IDRRef=n._IDRRef) as [ID OZON]
, (SELECT value FROM #dop r2 where r2._Fld21137RRef = 0x997DB49691D57EFD11EC8D98061ED9EB and _Reference188_IDRRef=n._IDRRef) as [ID WB]
, (SELECT value FROM #dop r2 where r2._Fld21137RRef = 0xAEC2B496910DCFD611EBE86B75A98522 and _Reference188_IDRRef=n._IDRRef) as [WB]
, (SELECT value FROM #dop r2 where r2._Fld21137RRef = 0xAEC3B496910DCFD611EC1BAAEA86F8FE and _Reference188_IDRRef=n._IDRRef) as [Ozon]
--, (SELECT value FROM #dop r2 where r2._Fld21137RRef = 0xAEC2B496910DCFD611EBE86B6E01B921 and _Reference188_IDRRef=n._IDRRef) as [FBS]
, (SELECT value FROM #dop r2 where r2._Fld21137RRef = 0xAEC2B496910DCFD611EBE60A4FB56689 and _Reference188_IDRRef=n._IDRRef) as [СТМ]
, (SELECT value FROM #dop r2 where r2._Fld21137RRef = 0xAEC2B496910DCFD611EBDE53817D5CA3 and _Reference188_IDRRef=n._IDRRef) as [Выгружать на я.маркет]
, (SELECT value FROM #dop r2 where r2._Fld21137RRef = 0xAEC2B496910DCFD611EBF5E566B4B9C7 and _Reference188_IDRRef=n._IDRRef) as [Выгружать в Google Merchant]
, (SELECT value FROM #dop r2 where r2._Fld21137RRef = 0x998BB49691D57EFD11EF646A898FFD9C and _Reference188_IDRRef=n._IDRRef) as [Товар МП]
, (SELECT value FROM #dop r2 where r2._Fld21137RRef = 0x997DB49691D57EFD11EC96300ACEF865 and _Reference188_IDRRef=n._IDRRef) as [Неликвид]
/* найти реквизит
select * from (
SELECT _IDRref, _Fld17721 as _Description FROM [MAG_2019].[dbo].[_Chrc1109]
--UNION ALL
--SELECT _reference69_IDRRef, _Fld18673 as _Description FROM [MAG_2019].[dbo].[_Reference69_VT18669]
) as t
where t._Description like '%ширина%'
*/
, (SELECT value FROM #dop r where r._Fld21137RRef = 0x80DB0CC47A052DFD11E6E88DD05808D1 and r._Reference188_IDRRef=n._IDRRef) as [Статус]
, (SELECT value FROM #dop r where r._Fld21137RRef = 0xAEBFB496910DCFD611EB9209C2655457 and r._Reference188_IDRRef=n._IDRRef) as [Сквозной цвет]
, (SELECT TOP 1 upakovka FROM pbi.[БазоваяУпаковка] up WHERE n._IDRRef = up._OwnerID_RRRef) as 'Базовая упаковка'
, rating.ozon as 'Качество контента Ozon'
, rating.wb as 'Качество контента WB'
, rating.wb_by_ozon as 'Качество контента WB by Ozon'
, rating.magok as 'Качество контента Magok'
, (select r._Description from [MAG_2019].[dbo].[_Reference69] /*виды ном*/ r WHERE r._IDRRef = n._Fld21053RRef) as [Вид номенклатуры]
from
[mag_2019].[dbo]._Reference188X1 n /*номенклатура*/
LEFT JOIN [mag_pbi].[pbi].[content_rating] rating /* Качество контента */ ON rating.code = n._Code
LEFT JOIN [mag_2019].[dbo].[_InfoRg27043X1] /* Регистр сведений QR коды */ qr ON qr._Fld27044RRef = n._IDRRef
LEFT JOIN [mag_2019].[dbo]._Reference191X1 f /*номенклатураПрисоедФайлы*/
ON f._IDRRef = n._Fld21086RRef
WHERE n._Folder = 1
) as nom_2019
ALTER TABLE mag_pbi.pbi.nomenclature
ADD max_year_quantity NUMERIC(38,3) NULL;
ALTER TABLE mag_pbi.pbi.nomenclature
ADD max_quarter_quantity NUMERIC(38,3) NULL;
ALTER TABLE [mag_pbi].[pbi].[nomenclature] ADD [Цена учетная, руб] DECIMAL(18,7) NULL;
ALTER TABLE [mag_pbi].[pbi].[nomenclature] ADD [Цена учетная, usd] DECIMAL(18,7) NULL;
-- Шаг 1: CTE для отбора строк из 'Себестоимость'
WITH Закупки AS (
SELECT
CAST(s.[Период] AS DATE) AS [Период],
s.[artic_id],
s.[Количество] AS [Кол-во закупка],
s.[Закупка] AS [Закуп.Закупка, руб],
s.[Закупка, usd2] AS [Закуп.Закупка, usd2],
s.[Доставка] AS [Закуп.Доставка, руб],
s.[Таможня] AS [Закуп.Таможня, руб],
s.[НДС] AS [Закуп.НДС, руб],
s.[Производство] AS [Закуп.Производство, руб],
s.[Доп расходы] AS [Закуп.Доп расходы, руб],
s.[Курс usd2]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[Вид операции] = 'Приход'
AND s.[Статья] IN (
'Закупка',
'Ввод начальных остатков',
'Производство товара',
'Доставка контейнера ВЭД',
'НДС',
'Доп расходы'
)
),
-- Шаг 2: Получить максимальную дату по каждому товару
МаксДата AS (
SELECT
z.artic_id,
MAX(z.[Период]) AS LastKnowDate
FROM Закупки z
GROUP BY z.artic_id
),
-- Шаг 3: Вычисление последней закупочной цены
ПоследняяЦена AS (
SELECT TOP (1) WITH TIES
z.artic_id,
z.[Период],
SUM(ISNULL(z.[Закуп.Закупка, руб],0) + ISNULL(z.[Закуп.Таможня, руб],0) + ISNULL(z.[Закуп.Доставка, руб],0) +
ISNULL(z.[Закуп.НДС, руб],0) + ISNULL(z.[Закуп.Производство, руб],0) - ISNULL(z.[Закуп.Доп расходы, руб],0)
) AS [Сумма закупки, руб],
SUM(ISNULL(z.[Закуп.Закупка, usd2],0) + (
ISNULL(z.[Закуп.Таможня, руб],0) + ISNULL(z.[Закуп.Доставка, руб],0) +
ISNULL(z.[Закуп.НДС, руб],0) + ISNULL(z.[Закуп.Производство, руб],0) -
ISNULL(z.[Закуп.Доп расходы, руб],0)) / z.[Курс usd2]
) AS [Сумма закупки, usd],
SUM(z.[Кол-во закупка]) AS [Кол-во закупка]
FROM Закупки z
INNER JOIN МаксДата m ON z.artic_id = m.artic_id AND z.[Период] <= m.LastKnowDate
GROUP BY z.artic_id, z.[Период]
ORDER BY ROW_NUMBER() OVER (PARTITION BY z.artic_id ORDER BY z.[Период] DESC)
)
-- Шаг 4: Обновление таблицы Номенклатура
UPDATE n
SET
n.[Цена учетная, руб] =
CASE
WHEN p.[Кол-во закупка] = 0 THEN 0
ELSE p.[Сумма закупки, руб] * 1.0 / p.[Кол-во закупка]
END,
n.[Цена учетная, usd] =
CASE
WHEN p.[Кол-во закупка] = 0 THEN 0
ELSE p.[Сумма закупки, usd] * 1.0 / p.[Кол-во закупка]
END
FROM [mag_pbi].[pbi].[nomenclature] n
INNER JOIN ПоследняяЦена p ON n.[artic_id] = p.artic_id
------------ Ср. кв. отклонение ----------------------
ALTER TABLE [mag_pbi].[pbi].[nomenclature]
ADD СредниеМесячныеПродажи FLOAT,
СКО_МесячныхПродаж FLOAT,
--minAvailableQty10 decimal(18,4) NULL, /* минимальный остаток = 10% от СредниеМесячныеПродажи*/
minAvailableQty decimal(18,4) NULL;
WITH MonthlySales AS (
SELECT
[1c_id],
DATEFROMPARTS(YEAR([Период]), MONTH([Период]), 1) AS Месяц,
--FORMAT(Период, 'yyyy-MM') AS Месяц, /*этот код дает ошибку,делает дубли строк и дат внутри месяца, заменила*/
SUM(КоличествоУпаковок) AS СуммаПродаж
FROM [pbiProd].[СводныйСебестоимость Для PBI]
WHERE
[Статья] = 'Реализация'
AND [Вид операции] = 'Расход'
AND [Период] >= DATEFROMPARTS(YEAR(DATEADD(MONTH, -12, GETDATE())), MONTH(DATEADD(MONTH, -12, GETDATE())), 1)
AND [Период] < DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1) /*добавила, нам нужно 12 полных месяцев*/
GROUP BY [1c_id], DATEFROMPARTS(YEAR([Период]), MONTH([Период]), 1) --FORMAT(Период, 'yyyy-MM')
),
Stats AS (
SELECT
[1c_id],
AVG(ISNULL(СуммаПродаж, 0)) AS СредниеМесячныеПродажи,
STDEVP(ISNULL(СуммаПродаж, 0)) AS СКО_МесячныхПродаж
FROM MonthlySales
GROUP BY [1c_id]
)
UPDATE n
SET
n.СредниеМесячныеПродажи = s.СредниеМесячныеПродажи,
n.СКО_МесячныхПродаж = s.СКО_МесячныхПродаж,
n.minAvailableQty =
CASE
WHEN s.СредниеМесячныеПродажи IS NULL
OR s.СредниеМесячныеПродажи = 0
THEN 0.1
WHEN s.СредниеМесячныеПродажи >= 100
THEN 10
ELSE s.СредниеМесячныеПродажи * 0.1
END
FROM [mag_pbi].[pbi].[nomenclature] n
LEFT JOIN Stats s ON n.[1c_id] = s.[1c_id];
------------------------------------------------------
/* старый расчет минимального остатка
----- Минимальный доступный остаток, используется для определения есть товар на складе или нет ------------
DECLARE @from_date date = '2024-01-01';
DECLARE @N_min int = 20; -- минимальное число строк продаж, чтобы доверять перцентилю SKU
/* === 0) Добавим колонку minAvailableQty, если её нет === */
IF COL_LENGTH('[mag_pbi].[pbi].[nomenclature]', 'minAvailableQty') IS NULL
BEGIN
ALTER TABLE [mag_pbi].[pbi].[nomenclature]
ADD minAvailableQty decimal(18,4) NULL;
END
/* === 1) Продажи: берём только фактический расход > 0 === */
IF OBJECT_ID('tempdb..#sales') IS NOT NULL DROP TABLE #sales;
SELECT
CAST(s.[Период] AS date) AS order_date,
CAST(s.[КоличествоУпаковок] AS decimal(18,4)) AS qty,
s.[1c_id] AS sku_id
INTO #sales
FROM [pbiProd].[СводныйСебестоимость Для PBI] s
WHERE
s.[Статья] = N'Реализация'
AND s.[Вид операции] = N'Расход'
AND s.[КоличествоУпаковок] > 0
AND s.[Период] >= @from_date;
/* === 2) Перцентиль P20 по SKU === */
IF OBJECT_ID('tempdb..#sku_q') IS NOT NULL DROP TABLE #sku_q;
WITH q AS (
SELECT
sku_id,
PERCENTILE_CONT(0.20) WITHIN GROUP (ORDER BY qty)
OVER (PARTITION BY sku_id) AS q20_sku,
COUNT(*) OVER (PARTITION BY sku_id) AS n_lines
FROM #sales
)
SELECT DISTINCT
sku_id,
q20_sku,
n_lines,
-- базовая нормализация: минимум 1 и округление вверх до целого
CAST(CASE
WHEN q20_sku IS NULL OR q20_sku < 1 THEN 1
ELSE CEILING(q20_sku)
END AS decimal(18,4)) AS min_avail_sku
INTO #sku_q
FROM q;
/* === 3) Категория 1-го уровня: берём 1-й сегмент из groups.path (без вьюх) === */
IF OBJECT_ID('tempdb..#sku_catL1') IS NOT NULL DROP TABLE #sku_catL1;
SELECT
n.[1c_id] AS sku_id,
-- первый сегмент до ' | ' или весь path, если разделителя нет
CAST(CASE
WHEN CHARINDEX(N' | ', g.path) > 0
THEN LEFT(g.path, CHARINDEX(N' | ', g.path) - 1)
ELSE g.path
END AS nvarchar(200)) AS category_l1
INTO #sku_catL1
FROM [mag_pbi].[pbi].[nomenclature] n
JOIN [mag_pbi].[pbi].[groups] g
ON g.group_id = n.group_id;
/* === 4) Перцентиль P20 по категории 1-го уровня (фолбэк) === */
IF OBJECT_ID('tempdb..#cat_q') IS NOT NULL DROP TABLE #cat_q;
WITH sales_cat AS (
SELECT
c.category_l1,
s.qty
FROM #sales s
JOIN #sku_catL1 c
ON c.sku_id = s.sku_id
),
qcat AS (
SELECT
category_l1,
PERCENTILE_CONT(0.20) WITHIN GROUP (ORDER BY qty)
OVER (PARTITION BY category_l1) AS q20_cat,
COUNT(*) OVER (PARTITION BY category_l1) AS n_lines_cat
FROM sales_cat
)
SELECT DISTINCT
category_l1,
q20_cat,
n_lines_cat,
CAST(CASE
WHEN q20_cat IS NULL OR q20_cat < 1 THEN 1
ELSE CEILING(q20_cat)
END AS decimal(18,4)) AS min_avail_cat
INTO #cat_q
FROM qcat;
/* === 5) Выбор порога: если по SKU достаточно строк — берём SKU, иначе — по категории === */
IF OBJECT_ID('tempdb..#final_min') IS NOT NULL DROP TABLE #final_min;
SELECT
n.[1c_id] AS sku_id,
COALESCE(
CASE WHEN q.n_lines >= @N_min AND q.min_avail_sku IS NOT NULL
THEN q.min_avail_sku END,
cq.min_avail_cat, -- фолбэк по категории
CAST(1 AS decimal(18,4)) -- на крайний случай
) AS min_avail_final
INTO #final_min
FROM [mag_pbi].[pbi].[nomenclature] n
LEFT JOIN #sku_q q
ON q.sku_id = n.[1c_id]
LEFT JOIN #sku_catL1 c
ON c.sku_id = n.[1c_id]
LEFT JOIN #cat_q cq
ON cq.category_l1 = c.category_l1;
/* === 6) Обновляем поле в номенклатуре === */
UPDATE n
SET n.minAvailableQty = f.min_avail_final
FROM [mag_pbi].[pbi].[nomenclature] n
JOIN #final_min f
ON f.sku_id = n.[1c_id]; */
-------------------------------------------
CREATE NONCLUSTERED INDEX [NonClusteredIndex-20190908-132726] ON [pbi].nomenclature
(
[group_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
--GO
CREATE NONCLUSTERED INDEX [NonClusteredIndex-20190908-132728] ON [pbi].nomenclature
(
[code] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
--GO
CREATE CLUSTERED INDEX [ClusteredIndex-20210315-180007] ON [pbi].[nomenclature]
(
[1c_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
DROP TABLE IF EXISTS #dop
END
GO
/****** Object: StoredProcedure [pbi].[migrate_ostatki] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [pbi].[migrate_ostatki] as
BEGIN
--DROP TABLE IF EXISTS mag_pbi.pbi.ostatki
DELETE FROM mag_pbi.pbi.ostatki WHERE [date] >= '2025-01-01'
INSERT INTO mag_pbi.pbi.ostatki
([artic_id],[1c_id],[Code],[sklad],[Категория склада],[upakovok],[quantity],[upakovka],[date],[upakovok_ship],[quantity_ship])
SELECT
LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), n._IDRRef, 2),5,12) )) as 'artic_id'
, n._IDRRef as '1c_id'
, n._Code as Code
, s._Description as sklad
, s.[Категория] as [Категория склада]
, [_Fld17491]/(case (SELECT TOP 1 upakovka FROM mag_pbi.pbi.[БазоваяУпаковка] up WHERE n._IDRRef = up._OwnerID_RRRef) when 0 then 1 else (SELECT TOP 1 upakovka FROM mag_pbi.pbi.[БазоваяУпаковка] up WHERE n._IDRRef = up._OwnerID_RRRef) end)*(case _RecordKind when 0 then 1 when 1 then -1 end)
as upakovok
, [_Fld17491]*(case _RecordKind when 0 then 1 when 1 then -1 end) as quantity
, (SELECT TOP 1 upakovka FROM mag_pbi.pbi.[БазоваяУпаковка] up WHERE n._IDRRef = up._OwnerID_RRRef) as upakovka
/*, (SELECT top 1 [_Fld27138] / 1000 FROM [mag_2019].[dbo].[_InfoRg27129X1] ir WHERE ir._Fld27130RRef = n._IDRRef AND [_Fld27138] > 0 order by ir._period desc)
as [Учетная цена, старое]*/
, DATEADD(year, -2000, t._Period) as [date]
, [_Fld17492]/(case (SELECT TOP 1 upakovka FROM mag_pbi.pbi.[БазоваяУпаковка] up WHERE n._IDRRef = up._OwnerID_RRRef) when 0 then 1 else (SELECT TOP 1 upakovka FROM mag_pbi.pbi.[БазоваяУпаковка] up WHERE n._IDRRef = up._OwnerID_RRRef) end)*(case _RecordKind when 0 then 1 when 1 then -1 end)
as [upakovok_ship]
, [_Fld17492]*(case _RecordKind when 0 then 1 when 1 then -1 end) as [quantity_ship]
FROM [mag_2019].[dbo].[_AccumRg17484] t /*регистр товары на складах*/
INNER JOIN [mag_2019].[dbo]._Reference188X1 n /*номенклатура*/ ON n._IDRRef = t._Fld17485RRef
INNER JOIN [mag_pbi].[pbi].[sklad_2019] s /*склад*/ ON s._IDRRef = t._Fld17488RRef
WHERE t._Period >='4025-01-01' --AND n._IDRRef=0x80F60CC47A052DFD11E7D04C512712B6
--DROP TABLE IF EXISTS mag_pbi.pbi.ostatki_short
DELETE FROM mag_pbi.pbi.ostatki_short WHERE [date] >= '2025-01-01'
-- добавляем остатки за период c 1 января 2025 года до последнего числа месяца, который был 3 месяца назад, свернутые по месяцам
INSERT INTO mag_pbi.pbi.ostatki_short
([artic_id],[1c_id],[Code],[sklad],[Категория склада],[upakovok],[quantity],
[upakovka],[date],[upakovok_ship],[quantity_ship])
SELECT
[artic_id]
,[1c_id]
,[Code]
,[sklad]
,[Категория склада]
,sum([upakovok]) as [upakovok]
,sum([quantity]) as [quantity]
,avg([upakovka]) as [upakovka]
--,CASE WHEN sum(quantity) <> 0 THEN sum([quantity]*[Учетная цена по себест])/sum(quantity) ELSE 0 END as [Учетная цена по себест]
--,CASE WHEN sum(quantity) <> 0 THEN sum([quantity]*[Учетная цена по себест, usd2+2])/sum(quantity) ELSE 0 END as [Учетная цена по себест, usd2+2]
--,avg(UchetnajaCena) as UchetnajaCena
, DATEADD(mm, DATEDIFF(mm,0,[date]), 0) as [date]
,sum([upakovok_ship]) as [upakovok_ship]
,sum([quantity_ship]) as [quantity_ship]
FROM mag_pbi.pbi.ostatki
WHERE date BETWEEN '2025-01-01'
AND DATEADD(SECOND, -1, CAST(DATEADD(DAY, 1, EOMONTH(DATEADD(MONTH, -3, GETDATE()))) AS DATETIME))
-- where [Категория склада]<>'Виртуальный'
GROUP BY [artic_id], [1c_id], [Code], [sklad], [Категория склада], DATEADD(mm, DATEDIFF(mm,0,[date]), 0)
-- добавляем остатки за 2 последних полных месяца и текущий месяц, развернутые по дням
INSERT INTO mag_pbi.pbi.ostatki_short
([artic_id],[1c_id],[Code],[sklad],[Категория склада],[upakovok],[quantity],
[upakovka],[date],[upakovok_ship],[quantity_ship])
SELECT
[artic_id]
,[1c_id]
,[Code]
,[sklad]
,[Категория склада]
,[upakovok]
,[quantity]
,[upakovka]
--,[Учетная цена по себест]
--,[Учетная цена по себест, usd2+2]
,[date]
,[upakovok_ship]
,[quantity_ship]
FROM mag_pbi.pbi.ostatki
WHERE date BETWEEN
CASE
WHEN DATEADD(MONTH, -3, CAST(GETDATE() AS DATE)) < '2025-01-01'
THEN '2025-01-01'
ELSE DATEADD(DAY, -DAY(DATEADD(MONTH, -2, GETDATE())) + 1, CAST(DATEADD(MONTH, -2, GETDATE()) AS DATE ))
END
AND GETDATE()
-- добавляем остатки нового дня на маркетах в накопительную таблицу [pbi].[ostatki_mp]
INSERT INTO [mag_pbi].[pbi].[ostatki_mp]
([Дата],[Узел],[artic_id],[id_внешний],[Остаток МП, упак],[Доступно МП, упак], [Остаток МП, шт])
SELECT
CAST(src.[Дата обновления] AS DATE) AS [Дата],
src.[Узел],
src.[artic_id],
src.[id_внешний],
SUM(src.[Количество]),
SUM(src.[Доступное кол-во]),
SUM(src.[Остаток МП, шт])
FROM [mag_pbi].[pbi].[Внешние остатки] AS src
WHERE
src.[Тип] = 'Остатки'
AND CAST(src.[Дата обновления] AS DATE) >
ISNULL(
(SELECT MAX([Дата]) FROM [mag_pbi].[pbi].[ostatki_mp]),
'2000-01-01'
)
GROUP BY CAST(src.[Дата обновления] AS DATE), src.[Узел], src.[artic_id], src.[id_внешний];
/*
ALTER TABLE mag_pbi.pbi.ostatki add [Учетная цена по себест] numeric(38,15) NULL default 0
ALTER TABLE mag_pbi.pbi.ostatki add [Учетная цена по себест, usd2+2] numeric(38,15) NULL default 0
ALTER TABLE mag_pbi.pbi.ostatki add [Учетная цена, старое] numeric(38,15) NULL default 0
*/
-- добавляем учетную цену из таблицы [pbiProd].[СебестоимостьСводныйОт2022]
/*UPDATE mag_pbi.pbi.ostatki SET
[Учетная цена по себест] =
(
SELECT TOP 1 s.[Учетная цена]
FROM [pbiProd].[СебестоимостьСводныйОт2022] s
--WHERE s. [Вид операции]='Продажа' AND s.artic_id=o.[artic_id] AND s.[Период]<=o.date AND s.[Учетная цена] <> 0
-- Такое сравнение даты использовано для скорости. Что делает? Приводит обе даты к началу месяца и берет в себестоимости более ранние или такие же даты, как в остатках
WHERE [Статья]='Реализация' AND s.[1c_id]=o.[1c_id] AND s.[Период]<=o.date -- AND s.[Учетная цена] > 0 AND (YEAR(s.[Период]) * 100 + MONTH(s.[Период])) <= (YEAR(o.date) * 100 + MONTH(o.date))
ORDER BY s.[Период] DESC)
, [Учетная цена по себест, usd2+2] =
( SELECT TOP 1 s.[Учетная цена USD2+2]
FROM [pbiProd].[СебестоимостьСводныйОт2022] s
--WHERE s. [Вид операции]='Продажа' AND s.artic_id=o.[artic_id] AND s.[Период]<=o.date AND s.[Учетная цена USD2+2] <> 0
WHERE [Статья]='Реализация' AND s.[1c_id]=o.[1c_id] AND s.[Период]<=o.date -- AND s.[Учетная цена USD2+2] > 0 AND (YEAR(s.[Период]) * 100 + MONTH(s.[Период])) <= (YEAR(o.date) * 100 + MONTH(o.date))
ORDER BY s.[Период] DESC
)
FROM mag_pbi.pbi.ostatki o
WHERE o.date >= '2025-01-01'*/
-- обновляем учетку по закупкам, тк в продажах не было
/*UPDATE p SET
[Учетная цена по себест] =
( SELECT top 1 s.[Учетная цена]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[1c_id]=p.[1c_id] AND s.[Статья]='Закупка' AND s.[Вид операции]='Приход' AND s.[Учетная цена] > 0 AND (YEAR(s.[Период]) * 100 + MONTH(s.[Период])) <= (YEAR(p.date) * 100 + MONTH(p.date)) -- AND s.[Период]<=p.date
ORDER by s.Период DESC
),
[Учетная цена по себест, usd2+2] =
( SELECT top 1 s.[Учетная цена USD2+2]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[1c_id]=p.[1c_id] AND s.[Статья]='Закупка' AND s.[Вид операции]='Приход' AND s.[Учетная цена USD2+2] > 0 AND (YEAR(s.[Период]) * 100 + MONTH(s.[Период])) <= (YEAR(p.date) * 100 + MONTH(p.date)) -- AND s.[Период]<=p.date
ORDER by s.Период DESC)
FROM mag_pbi.pbi.ostatki p
WHERE p.[Учетная цена по себест] is null AND p.date >= '2025-01-01'*/
-- обновляем учетку по вводу начальных остатков
/*UPDATE p SET
[Учетная цена по себест] =
( SELECT top 1 s.[Учетная цена]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[1c_id]=p.[1c_id] AND s.[Статья]='Ввод начальных остатков' AND s.[Вид операции]='Приход' AND s.[Учетная цена] > 0 AND (YEAR(s.[Период]) * 100 + MONTH(s.[Период])) <= (YEAR(p.date) * 100 + MONTH(p.date)) -- AND s.[Период]<=p.date
ORDER by s.Период DESC
),
[Учетная цена по себест, usd2+2] =
( SELECT top 1 s.[Учетная цена USD2+2]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[1c_id]=p.[1c_id] AND s.[Статья]='Ввод начальных остатков' AND s.[Вид операции]='Приход' AND s.[Учетная цена USD2+2] > 0 AND (YEAR(s.[Период]) * 100 + MONTH(s.[Период])) <= (YEAR(p.date) * 100 + MONTH(p.date)) -- AND s.[Период]<=p.date
ORDER by s.Период DESC)
FROM mag_pbi.pbi.ostatki p
WHERE p.[Учетная цена по себест] is null AND p.date >= '2025-01-01'
UPDATE mag_pbi.pbi.ostatki SET [Учетная цена по себест] = 0 WHERE [Учетная цена по себест] is null
UPDATE mag_pbi.pbi.ostatki SET [Учетная цена по себест, usd2+2] = 0 WHERE [Учетная цена по себест, usd2+2] is null*/
-- добавляем остатки за 2025 год, свернутые по месяцам
/*SELECT
[artic_id]
,[1c_id]
,[Code]
,[sklad]
,[Категория склада]
,sum([upakovok]) as [upakovok]
,sum([quantity]) as [quantity]
,avg([upakovka]) as [upakovka]
,CASE WHEN sum(quantity) <> 0 THEN sum([quantity]*[Учетная цена по себест])/sum(quantity) ELSE 0 END as [Учетная цена по себест]
,CASE WHEN sum(quantity) <> 0 THEN sum([quantity]*[Учетная цена по себест, usd2+2])/sum(quantity) ELSE 0 END as [Учетная цена по себест, usd2+2]
--,avg(UchetnajaCena) as UchetnajaCena
, DATEADD(mm, DATEDIFF(mm,0,[date]), 0) as [date]
FROM mag_pbi.pbi.ostatki
WHERE date>='2025-01-01'
-- where [Категория склада]<>'Виртуальный'
GROUP BY [artic_id], [1c_id], [Code], [sklad], [Категория склада], DATEADD(mm, DATEDIFF(mm,0,[date]), 0)*/
--ALTER TABLE mag_pbi.pbi.ostatki_short add [Учетная цена по себест] numeric(38,15) NULL default 0
--ALTER TABLE mag_pbi.pbi.ostatki_short add [Учетная цена по себест, usd2+2] numeric(38,15) NULL default 0
--ALTER TABLE mag_pbi.pbi.ostatki_short add [Учетная цена, старое] numeric(38,15) NULL default 0
/*
CREATE NONCLUSTERED INDEX [NonClusteredIndex-2-1] ON [pbi].ostatki_short
(
[artic_id] ASC,
[date] ASC
)
*/
-------------------------------------------------------------- OLD
/*
UPDATE mag_pbi.pbi.ostatki_short SET
[Учетная цена по себест] =
(
SELECT TOP 1 s.[Учетная цена]
FROM [pbiProd].[СебестоимостьСводныйОт2022] s
--WHERE s. [Вид операции]='Продажа' AND s.artic_id=o.[artic_id] AND s.[Период]<=o.date AND s.[Учетная цена] <> 0
-- Такое сравнение даты использовано для скорости. Что делает? Приводит обе даты к началу месяца и берет в себестоимости более ранние или такие же даты, как в остатках
WHERE [Статья]='Реализация' AND s.[1c_id]=o.[1c_id] AND s.[Период]<=o.date -- AND s.[Учетная цена] > 0 AND (YEAR(s.[Период]) * 100 + MONTH(s.[Период])) <= (YEAR(o.date) * 100 + MONTH(o.date))
ORDER BY s.[Период] DESC)
, [Учетная цена по себест, usd2+2] =
( SELECT TOP 1 s.[Учетная цена USD2+2]
FROM [pbiProd].[СебестоимостьСводныйОт2022] s
--WHERE s. [Вид операции]='Продажа' AND s.artic_id=o.[artic_id] AND s.[Период]<=o.date AND s.[Учетная цена USD2+2] <> 0
WHERE [Статья]='Реализация' AND s.[1c_id]=o.[1c_id] AND s.[Период]<=o.date -- AND s.[Учетная цена USD2+2] > 0 AND (YEAR(s.[Период]) * 100 + MONTH(s.[Период])) <= (YEAR(o.date) * 100 + MONTH(o.date))
ORDER BY s.[Период] DESC
)
FROM mag_pbi.pbi.ostatki_short o
-- обновляем учетку по закупкам, тк в продажах не было
UPDATE p SET
[Учетная цена по себест] =
( SELECT top 1 s.[Учетная цена]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[1c_id]=p.[1c_id] AND s.[Статья]='Закупка' AND s.[Вид операции]='Приход' AND s.[Учетная цена] > 0 AND (YEAR(s.[Период]) * 100 + MONTH(s.[Период])) <= (YEAR(p.date) * 100 + MONTH(p.date)) -- AND s.[Период]<=p.date
ORDER by s.Период DESC
),
[Учетная цена по себест, usd2+2] =
( SELECT top 1 s.[Учетная цена USD2+2]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[1c_id]=p.[1c_id] AND s.[Статья]='Закупка' AND s.[Вид операции]='Приход' AND s.[Учетная цена USD2+2] > 0 AND (YEAR(s.[Период]) * 100 + MONTH(s.[Период])) <= (YEAR(p.date) * 100 + MONTH(p.date)) -- AND s.[Период]<=p.date
ORDER by s.Период DESC)
FROM mag_pbi.pbi.ostatki_short p
WHERE p.[Учетная цена по себест] is null
-- обновляем учетку по вводу начальных остатков
UPDATE p SET
[Учетная цена по себест] =
( SELECT top 1 s.[Учетная цена]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[1c_id]=p.[1c_id] AND s.[Статья]='Ввод начальных остатков' AND s.[Вид операции]='Приход' AND s.[Учетная цена] > 0 AND (YEAR(s.[Период]) * 100 + MONTH(s.[Период])) <= (YEAR(p.date) * 100 + MONTH(p.date)) -- AND s.[Период]<=p.date
ORDER by s.Период DESC
),
[Учетная цена по себест, usd2+2] =
( SELECT top 1 s.[Учетная цена USD2+2]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[1c_id]=p.[1c_id] AND s.[Статья]='Ввод начальных остатков' AND s.[Вид операции]='Приход' AND s.[Учетная цена USD2+2] > 0 AND (YEAR(s.[Период]) * 100 + MONTH(s.[Период])) <= (YEAR(p.date) * 100 + MONTH(p.date)) -- AND s.[Период]<=p.date
ORDER by s.Период DESC)
FROM mag_pbi.pbi.ostatki_short p
WHERE p.[Учетная цена по себест] is null
UPDATE mag_pbi.pbi.ostatki_short SET [Учетная цена по себест] = 0 WHERE [Учетная цена по себест] is null
UPDATE mag_pbi.pbi.ostatki_short SET [Учетная цена по себест, usd2+2] = 0 WHERE [Учетная цена по себест, usd2+2] is null
*/
-- Тут старый код со старым регистром сведений
/*
UPDATE mag_pbi.pbi.ostatki_short SET
[Учетная цена по себест] = isnull(
(SELECT top 1 its.[_Fld27138] / 1000 FROM [mag_2019].[dbo].[_InfoRg27129X1] its -- РегистрСведений.ITS_ОсновнойОтчет
WHERE its._Fld27130RRef = [1C_id] AND its.[_Fld27138] > 0
ORDER BY its._period desc)
,0
)
FROM mag_pbi.pbi.ostatki_short o
WHERE [Учетная цена по себест] = 0 OR [Учетная цена по себест] is null
UPDATE mag_pbi.pbi.ostatki_short SET
[Учетная цена по себест, usd2+2] = isnull(
(SELECT top 1 its.[_Fld27138] / 1000 / (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, _Period) <= o.date
ORDER BY _Period desc)
FROM [mag_2019].[dbo].[_InfoRg27129X1] its -- РегистрСведений.ITS_ОсновнойОтчет
WHERE its._Fld27130RRef = [1C_id] AND its.[_Fld27138] > 0
ORDER BY its._period desc)
,0
)
FROM mag_pbi.pbi.ostatki_short o
WHERE [Учетная цена по себест, usd2+2] = 0 OR [Учетная цена по себест, usd2+2] is null
*/
/*
UPDATE mag_pbi.pbi.ostatki_short SET
[Учетная цена по себест] = isnull(
(SELECT TOP 1 s.[Учетная цена, новое] FROM [pbi].[Себестоимость] s
WHERE s. [Вид операции]='продажа' AND s.artic_id=o.[artic_id] AND s.[Период]<=o.date --AND s.[Учетная цена, новое] <> 0
ORDER BY s.[Период] desc)
, 0 )
FROM mag_pbi.pbi.ostatki_short o */
/*
UPDATE mag_pbi.pbi.ostatki_short SET
[Учетная цена по себест] =
isnull(
(
SELECT top 1 its.[_Fld27138] / 1000 FROM [mag_2019].[dbo].[_InfoRg27129X1] its -- РегистрСведений.ITS_ОсновнойОтчет
WHERE its._Fld27130RRef = [1C_id] AND its.[_Fld27138] > 0
--and datediff(month, DATEADD(year, -2000, its._Period), date) >= 0
ORDER BY its._period desc)
,0
)
FROM mag_pbi.pbi.ostatki_short o
WHERE [Учетная цена по себест] = 0 OR [Учетная цена по себест] is null */
/*
UPDATE mag_pbi.pbi.ostatki SET
[Учетная цена, старое] =
isnull(
(
SELECT top 1 its.[_Fld27138] / 1000 FROM [mag_2019].[dbo].[_InfoRg27129X1] its -- РегистрСведений.ITS_ОсновнойОтчет
WHERE its._Fld27130RRef = [1C_id] AND its.[_Fld27138] > 0
and datediff(month, DATEADD(year, -2000, its._Period), date) >= 0
ORDER BY its._period desc)
,0
)
FROM mag_pbi.pbi.ostatki o
*/
/*
UPDATE mag_pbi.pbi.ostatki_short SET
[Учетная цена по себест] = isnull(
(SELECT TOP 1 s.[Учетная цена, старое]
FROM [pbi].[Себестоимость] s
WHERE s. [Вид операции]='продажа' AND s.artic_id=o.[artic_id] AND s.[Период]<=o.date AND s.[Учетная цена, старое] > 0
ORDER BY s.[Период] desc)
,0)
FROM mag_pbi.pbi.ostatki_short o
WHERE [Учетная цена по себест] = 0 OR [Учетная цена по себест] is null
*/
END
GO
/****** Object: StoredProcedure [pbi].[migrate_ostatok_da_net] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [pbi].[migrate_ostatok_da_net]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Date1 DATE, @Date2 DATE
SET @Date1 = '2024-01-01'
SET @Date2 = CAST( GETDATE() AS Date )
drop table pbi.[w_ostatok_da_net]
SELECT * INTO pbi.[w_ostatok_da_net] FROM
(
SELECT DATEADD(DAY,number+1,@Date1) [dt]
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(DAY,number+1,@Date1) < @Date2
)as t1
cross join
(
select
[1c_id] as [_IDRREF]
, [artic_id]
, n.minAvailableQty
--, n.minAvailableQty10
from pbi.nomenclature n
--where [статус] in (/*'Выведен из ассортимента',*/ 'Основной', 'Базовый', 'Маркетплейс', 'Обособленное обеспечение', 'New')
)as t2
ALTER TABLE pbi.[w_ostatok_da_net] ADD [ostatok] numeric (15,6) NULL;
--ALTER TABLE pbi.[w_ostatok_da_net] ADD [ostatok10] numeric (15,6) NULL;
ALTER TABLE pbi.[w_ostatok_da_net] ADD [quantity] numeric (15,6) NULL;
ALTER TABLE pbi.[w_ostatok_da_net] ADD [upakovok] numeric (15,6) NULL;
ALTER TABLE pbi.[w_ostatok_da_net] ADD sellable_stock decimal(18,6) NULL
UPDATE pbi.[w_ostatok_da_net] set [quantity] = (
select sum(o.[quantity])-- >= n.minAvailableQty then sum(o.[quantity]) else 0 end
FROM [mag_pbi].[pbi].[ostatki_short] o
WHERE o.[1c_id]=n.[_IDRREF] AND ([Категория склада] IN ('Хранение', 'Розничная точка', 'Фасовка')) AND o.date <= n.[dt]
)
FROM pbi.[w_ostatok_da_net] n
UPDATE pbi.[w_ostatok_da_net] set [upakovok] = (
select sum(o.[upakovok])-- >= n.minAvailableQty then sum(o.[quantity]) else 0 end
FROM [mag_pbi].[pbi].[ostatki_short] o
WHERE o.[1c_id]=n.[_IDRREF] AND ([Категория склада] IN ('Хранение', 'Розничная точка', 'Фасовка')) AND o.date <= n.[dt]
)
FROM pbi.[w_ostatok_da_net] n
UPDATE pbi.[w_ostatok_da_net] set [ostatok] = case when [upakovok] >= minAvailableQty then 1 else 0 end
--UPDATE pbi.[w_ostatok_da_net] set [ostatok10] = case when [upakovok] >= minAvailableQty10 then 1 else 0 end
--Добавляем остатки МП, если они еще не заполнены. Проверяем последние 3 дня
ALTER TABLE pbi.[w_ostatok_da_net] ADD [quantity_mp] numeric (15,6) NULL;
ALTER TABLE pbi.[w_ostatok_da_net] ADD [upakovok_mp] numeric (15,6) NULL;
ALTER TABLE pbi.[w_ostatok_da_net] ADD [dostupno_upakovok_mp] numeric (15,6) NULL;
ALTER TABLE pbi.[w_ostatok_da_net] ADD [ostatok_mp] numeric (15,6) NULL;
ALTER TABLE pbi.[w_ostatok_da_net] ADD [ostatok_all] numeric (15,6) NULL;
DECLARE
@DaysBack INT = 3,
@StartTime DATETIME = SYSDATETIME(),
@RowCount INT;
WITH agg AS (
SELECT
CAST(src.[Дата] AS DATE) AS [Дата],
src.[artic_id],
SUM(src.[Остаток МП, шт]) AS sum_quantity_mp,
SUM(src.[Остаток МП, упак]) AS sum_upakovok_mp,
SUM(src.[Доступно МП, упак]) AS sum_dostupno_upakovok_mp
FROM [mag_pbi].[pbi].[ostatki_mp] AS src
WHERE CAST(src.[Дата] AS DATE) >= DATEADD(DAY, -@DaysBack, CAST(GETDATE() AS DATE))
GROUP BY CAST(src.[Дата] AS DATE),src.[artic_id]
)
UPDATE tgt
SET
tgt.[quantity_mp] = ISNULL(tgt.[quantity_mp], agg.sum_quantity_mp),
tgt.[upakovok_mp] = ISNULL(tgt.[upakovok_mp], agg.sum_upakovok_mp),
tgt.[dostupno_upakovok_mp] = ISNULL(tgt.[dostupno_upakovok_mp], agg.sum_dostupno_upakovok_mp)
FROM [mag_pbi].[pbi].[w_ostatok_da_net] AS tgt
INNER JOIN agg
ON tgt.[artic_id] = agg.[artic_id]
AND CAST(tgt.[dt] AS DATE) = agg.[Дата]
WHERE
CAST(tgt.[dt] AS DATE) >= DATEADD(DAY, -@DaysBack, CAST(GETDATE() AS DATE))
AND (
tgt.[quantity_mp] IS NULL
OR tgt.[upakovok_mp] IS NULL
OR tgt.[dostupno_upakovok_mp] IS NULL
);
-- логирование результата
BEGIN TRY
INSERT INTO [analytics].[load_log_w_ostatok_da_net]
([load_time], [days_back], [rows_updated], [duration_sec])
VALUES
(
@StartTime,
@DaysBack,
@RowCount,
DATEDIFF(SECOND, @StartTime, SYSDATETIME())
);
END TRY
BEGIN CATCH
PRINT '⚠ Ошибка при записи в таблицу лога.';
END CATCH;
UPDATE pbi.[w_ostatok_da_net] set [ostatok_mp] = case when [upakovok_mp] >= minAvailableQty then 1 else 0 end
UPDATE pbi.[w_ostatok_da_net] set [ostatok_all] = case when [upakovok] >= minAvailableQty OR [upakovok_mp] >= minAvailableQty then 1 else 0 end
--Удаляем нулевые значения
DELETE FROM [mag_pbi].[pbi].[w_ostatok_da_net] WHERE [ostatok_all] < 1
CREATE NONCLUSTERED INDEX IX_w_ostatok__id_dt_desc__incl_qty
ON [pbi].[w_ostatok_da_net] ([_IDRREF], [dt] DESC)
INCLUDE ([quantity]);
CREATE NONCLUSTERED INDEX IX_w_ostatok__dt_id__incl_qty
ON [pbi].[w_ostatok_da_net] ([dt], [_IDRREF])
INCLUDE ([quantity]);
SET NOCOUNT OFF;
END
GO
/****** Object: StoredProcedure [pbi].[migrate_pricelist] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [pbi].[migrate_pricelist]
AS
BEGIN
DROP TABLE [pbi].[pricelist]
SELECT *
INTO [pbi].[pricelist]
FROM(
SELECT
[_Fld15493] as Цена
, (SELECT _Description FROM MAG_2019.[dbo].[_Reference78] r WHERE r._IDRRef = i.[_Fld15492RRef]) as [Вид цены]
, i._Fld15490RRef as [1c_id]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), i._Fld15490RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), i._Fld15490RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), i._Fld15490RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), i._Fld15490RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), i._Fld15490RRef, 2),5,12) ))as artic_id
, DATEADD(year, -2000, i._Period) as [Дата]
, _Period
FROM [MAG_2019].[dbo].[_InfoRg15489] i /*РегистрСведений.ЦеныНоменклатуры*/
) as pricelist
CREATE NONCLUSTERED INDEX [NonClusteredIndex-20220325-100926] ON [pbi].[pricelist]
(
[1c_id] ASC,
[Вид цены] ASC,
[_Period] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
END
GO
/****** Object: StoredProcedure [pbi].[migrate_stock_balance] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [pbi].[migrate_stock_balance]
AS
BEGIN
SET NOCOUNT ON;
DROP TABLE IF EXISTS mag_pbi.analytics.stock_balance;
IF NOT EXISTS (
SELECT 1
FROM sys.indexes i
INNER JOIN sys.objects o ON i.object_id = o.object_id
WHERE i.name = N'N2'
AND o.name = N'nomenclature'
AND SCHEMA_NAME(o.schema_id) = N'pbi'
)
BEGIN
CREATE NONCLUSTERED INDEX [N2]
ON [pbi].[nomenclature] ([artic_id])
INCLUDE ([Знаменатель объема],[Числитель объема],[Цена учетная, руб]);
END
;WITH Calendar AS (
SELECT CAST(GETDATE() AS DATE) AS DateValue
UNION ALL
SELECT DATEADD(DAY, 1, DateValue)
FROM Calendar
WHERE DateValue < CAST(GETDATE() AS DATE)
),
-- 2. Фильтруем таблицу остатков
Ostatki AS (
SELECT
DATEADD(year, -2000, t._Period) as [date],
LOWER(CONCAT(
SUBSTRING ( CONVERT(nvarchar(36), n._IDRRef, 2), 25,8),'-',
SUBSTRING ( CONVERT(nvarchar(36), n._IDRRef, 2),21,4),'-',
SUBSTRING ( CONVERT(nvarchar(36), n._IDRRef, 2),17,4),'-',
SUBSTRING ( CONVERT(nvarchar(36), n._IDRRef, 2), 1,4),'-',
SUBSTRING ( CONVERT(nvarchar(36), n._IDRRef, 2), 5,12)
)) as artic_id,
n._IDRRef as [1c_id],
n._Code as code,
(SELECT TOP 1 upakovka
FROM mag_pbi.pbi.[БазоваяУпаковка] up
WHERE t._Fld17485RRef = up._OwnerID_RRRef) as upakovka,
[_Fld17491] / NULLIF(
(SELECT TOP 1 upakovka
FROM mag_pbi.pbi.[БазоваяУпаковка] up
WHERE t._Fld17485RRef = up._OwnerID_RRRef), 0
) * (CASE _RecordKind WHEN 0 THEN 1 WHEN 1 THEN -1 END) as upakovok,
[_Fld17491] * (CASE _RecordKind WHEN 0 THEN 1 WHEN 1 THEN -1 END) as quantity
FROM [MAG_2019].[dbo].[_AccumRg17484] t /*Регистр ТоварыНаСкладах*/
INNER JOIN [mag_pbi].[pbi].[sklad_2019] s ON s._IDRRef = t._Fld17488RRef
FULL OUTER JOIN [mag_2019].[dbo]._Reference188X1 n ON t._Fld17485RRef = n._IDRRef
WHERE s.[Категория] <> 'Виртуальный'
),
-- 3. Накопительный итог по каждому артикулу и дате
CumulativeStock AS (
SELECT
c.DateValue AS [Дата],
o.artic_id,
o.[1c_id],
o.code,
SUM(ISNULL(o.quantity, 0)) AS [Остаток склад шт],
SUM(ISNULL(o.upakovok, 0)) AS [Остаток склад упак],
/* рассчитывается далее */
CAST(NULL AS NUMERIC(26,7)) AS [Остаток склад руб],
CAST(NULL AS NUMERIC(26,7)) AS [Остаток склад м3],
/* новые колонки по МП */
CAST(NULL AS NUMERIC(26,7)) AS [Остаток МП, шт],
CAST(NULL AS NUMERIC(26,7)) AS [Остаток МП, руб],
CAST(NULL AS NUMERIC(26,7)) AS [Остаток склад + МП, шт],
CAST(NULL AS NUMERIC(26,7)) AS [Остаток склад + МП, руб],
/* уже существующие комбинированные показатели */
CAST(NULL AS NUMERIC(26,7)) AS [Остаток склад + в пути + произв., упак],
CAST(NULL AS NUMERIC(26,7)) AS [Остаток склад + в пути + произв., руб],
CAST(NULL AS NUMERIC(26,7)) AS [Остаток склад + МП + в пути + произв., упак],
CAST(NULL AS NUMERIC(26,7)) AS [Остаток склад + МП + в пути + произв., руб]
FROM Calendar c
JOIN Ostatki o ON o.[date] <= c.DateValue
GROUP BY c.DateValue, o.artic_id, o.[1c_id], o.code
)
-- 4. Результат в таблицу
SELECT * INTO mag_pbi.analytics.stock_balance
FROM CumulativeStock
ORDER BY [Дата];
-- Остаток на складе: руб и м3
UPDATE sb
SET
[Остаток склад м3] = sb.[Остаток склад шт] * ISNULL(n.[Числитель объема], 0)
/ NULLIF(ISNULL(n.[Знаменатель объема], 1), 0),
[Остаток склад руб] = sb.[Остаток склад шт] * ISNULL(n.[Цена учетная, руб], 0)
FROM mag_pbi.analytics.stock_balance sb
LEFT JOIN mag_pbi.pbi.nomenclature n ON sb.artic_id = n.artic_id;
-- Добавляем остаток "в пути" и "в производстве"
;WITH Aggregated AS (
SELECT
sb.artic_id,
sb.[Дата],
sb.[Остаток склад руб],
sb.[Остаток склад упак],
SUM(ISNULL(z.[Сумма в руб.], 0)) AS [В пути и произв., руб],
SUM(ISNULL(z.[Кол. упаковок], 0)) AS [В пути и произв., упак]
FROM mag_pbi.analytics.stock_balance sb
LEFT JOIN mag_pbi.analytics.Заказы z
ON z.artic_id = sb.artic_id
AND z.[Дата заказа поставщику] <= sb.[Дата]
AND z.[Статус] IN ('В пути', 'В производстве')
GROUP BY sb.artic_id, sb.Дата, sb.[Остаток склад руб], sb.[Остаток склад упак]
)
UPDATE sb
SET
[Остаток склад + в пути + произв., упак] = a.[Остаток склад упак] + ISNULL(a.[В пути и произв., упак], 0),
[Остаток склад + в пути + произв., руб] = a.[Остаток склад руб] + ISNULL(a.[В пути и произв., руб], 0)
FROM mag_pbi.analytics.stock_balance sb
LEFT JOIN Aggregated a
ON sb.artic_id = a.artic_id
AND sb.Дата = a.Дата;
-- Добавляем остаток МП за последнюю дату обновления из регистра сведений
;WITH AggregMarketplace AS (
SELECT
DATEADD(YEAR, -2000, ost._Fld33596) AS [Дата обновления],
LOWER(CONCAT(
SUBSTRING ( CONVERT(nvarchar(36), ost.[_Fld28683RRef], 2), 25,8),'-',
SUBSTRING ( CONVERT(nvarchar(36), ost.[_Fld28683RRef], 2), 21,4),'-',
SUBSTRING ( CONVERT(nvarchar(36), ost.[_Fld28683RRef], 2), 17,4),'-',
SUBSTRING ( CONVERT(nvarchar(36), ost.[_Fld28683RRef], 2), 1,4),'-',
SUBSTRING ( CONVERT(nvarchar(36), ost.[_Fld28683RRef], 2), 5,12)
)) AS artic_id,
SUM(ISNULL(ost._Fld33602, 0)) AS [Остаток МП упак]
FROM [MAG_2019].[dbo].[_InfoRg28682X1] AS ost /* РегистрСведений.ОстаткиТоваровВоВнешнихСистемах */
WHERE ost._Fld33596 = (
SELECT TOP (1) _Fld33596
FROM [MAG_2019].[dbo].[_InfoRg28682X1]
ORDER BY _Fld33596 DESC
)
GROUP BY ost._Fld28683RRef, ost._Fld33596
)
-- Обновляем МП и комбинированные колонки
UPDATE sb
SET
/* МП → шт и руб */
[Остаток МП, шт] = ISNULL(mp.[Остаток МП упак], 0) * NULLIF(ISNULL(n.[Базовая упаковка], 1), 0),
[Остаток МП, руб] = (
ISNULL(mp.[Остаток МП упак], 0) * NULLIF(ISNULL(n.[Базовая упаковка], 1), 0)
) * ISNULL(n.[Цена учетная, руб], 0),
/* Склад + МП */
[Остаток склад + МП, шт] = sb.[Остаток склад шт] + (
ISNULL(mp.[Остаток МП упак], 0) * NULLIF(ISNULL(n.[Базовая упаковка], 1), 0)
),
[Остаток склад + МП, руб] = sb.[Остаток склад руб] + (
ISNULL(mp.[Остаток МП упак], 0) * NULLIF(ISNULL(n.[Базовая упаковка], 1), 0) * ISNULL(n.[Цена учетная, руб], 0)
),
/* Склад + МП + в пути + произв. (как было) */
[Остаток склад + МП + в пути + произв., упак] = sb.[Остаток склад + в пути + произв., упак] + ISNULL(mp.[Остаток МП упак], 0),
[Остаток склад + МП + в пути + произв., руб] = sb.[Остаток склад + в пути + произв., руб] + (
ISNULL(mp.[Остаток МП упак], 0) * ISNULL(n.[Цена учетная, руб], 0) * NULLIF(ISNULL(n.[Базовая упаковка], 1), 0)
)
FROM mag_pbi.analytics.stock_balance sb
LEFT JOIN mag_pbi.pbi.nomenclature n
ON sb.artic_id = n.artic_id
LEFT JOIN AggregMarketplace mp
ON sb.artic_id = mp.artic_id
AND sb.Дата = mp.[Дата обновления];
--OPTION (MAXRECURSION 0); -- при необходимости для Calendar
END
GO
/****** Object: StoredProcedure [pbi].[migrate_uchet_summa] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [pbi].[migrate_uchet_summa]
AS
BEGIN
DROP TABLE [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi]
SELECT s.*
INTO [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
INNER JOIN [mag_2019].[dbo]._Reference188X1 n /*номенклатура*/ ON n._IDRRef = s.[1c_id]
INNER JOIN [mag_pbi].[pbi].[groups] g ON n._ParentIDRRef = g.[1c_id]
WHERE g.g <> '*Внутренняя'
/*ALTER TABLE [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi] DROP COLUMN [Учетная сумма, руб]*/
/*ALTER TABLE [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi] DROP COLUMN [Учетная сумма, usd]*/
ALTER TABLE [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi] ADD [Учетная сумма, руб] DECIMAL(21, 9) NULL
ALTER TABLE [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi] ADD [Учетная сумма, usd] DECIMAL(21, 9) NULL
ALTER TABLE [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi] ADD [Источник заказа] NVARCHAR(50) NULL
UPDATE s
SET s.[Учетная сумма, руб] = v.[Учетная сумма, руб]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi] s
LEFT JOIN [mag_pbi].[pbi].[УчетнаяСуммаДляPBI] v
ON s.[Период] = v.[Период]
AND s.[artic_id] = v.[artic_id]
AND s.[1c_document_id] = v.[1c_document_id]
AND s.[Количество] = v.[Количество]
AND [Статья] = 'Реализация'
UPDATE s
SET s.[Учетная сумма, usd] = v.[Учетная сумма, usd]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi] s
LEFT JOIN [mag_pbi].[pbi].[УчетнаяСуммаДляPBI] v
ON s.[Период] = v.[Период]
AND s.[artic_id] = v.[artic_id]
AND s.[1c_document_id] = v.[1c_document_id]
AND s.[Количество] = v.[Количество]
AND [Статья] = 'Реализация'
UPDATE s
SET s.[Источник заказа] = ord.[source]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022_copy_for_pbi] s
LEFT JOIN [mag_pbi].[dbo].[order_source] ord
ON s.[Номер заказа] = ord.order_id
END
GO
/****** Object: StoredProcedure [pbi].[sp_nomenclature_full_page] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [pbi].[sp_nomenclature_full_page]
@OffsetRows int = 0,
@FetchRows int = 1000
AS
BEGIN
SET NOCOUNT ON;
;WITH page AS (
SELECT
nom.code,
nom.[1c_group],
-- === nom: оставил все поля как в твоей вьюхе ===
nom.artic_id,
nom.[1c_id],
nom.cenovaya_gruppa,
nom.description,
nom.artic,
nom.vid_nomen,
nom.Производитель,
nom.group_id,
nom.card,
nom.photo,
nom.base,
nom.[Знаменатель веса],
nom.[Числитель веса],
nom.[Знаменатель объема],
nom.[Числитель объема],
nom.[Количество упак в коробе],
nom.[Количество упак в кванте],
nom.[id magok],
nom.Товарныйменеджера,
nom.МенеджерПоЗакупкам2,
nom.РуководительНаправления,
nom.[Менеджер OZON],
nom.[Менеджер WB],
nom.[АБС статус],
nom.[АБС план],
nom.[ABC Парето],
nom.[XYZ статус 12м],
nom.[Комментарий для матрицы],
nom.Коллекция,
nom.[Ценовой сегмент Магок],
nom.[Ценовой сегмент МП],
nom.[Кол-во упак в заказе Магок],
nom.Бренд,
nom.[Тип товара],
nom.Метка,
nom.[Ширина, мм],
nom.Цвет,
nom.[Номер цвета],
nom.[Тип шнура],
nom.[Тип плетения],
nom.Размер,
nom.Особенность,
nom.Форма,
nom.Ширина,
nom.[Формат упаковки],
nom.[Макс. запас],
nom.[Мин. запас],
nom.[QTY PACKS],
nom.[Да/Нет Собственное пр-во],
nom.[ID OZON],
nom.[ID WB],
nom.WB,
nom.Ozon,
nom.СТМ,
nom.[Выгружать на я.маркет],
nom.[Выгружать в Google Merchant],
nom.[Товар МП],
nom.Неликвид,
nom.Статус,
nom.[Сквозной цвет],
nom.[Базовая упаковка],
nom.[Качество контента Ozon],
nom.[Качество контента WB],
nom.[Качество контента WB by Ozon],
nom.[Качество контента Magok],
nom.[Вид номенклатуры],
nom.max_year_quantity,
nom.max_quarter_quantity,
nom.[Цена учетная, руб],
nom.[Цена учетная, usd],
nom.СредниеМесячныеПродажи,
nom.СКО_МесячныхПродаж,
nom.minAvailableQty
FROM pbi.nomenclature AS nom
ORDER BY nom.code
OFFSET @OffsetRows ROWS
FETCH NEXT @FetchRows ROWS ONLY
),
-- ограничиваем ref188 только кодами из page
ref188 AS (
SELECT
n._Code,
n._IDRRef,
n._Fld28142
FROM MAG_2019.dbo._Reference188X1 AS n
INNER JOIN (SELECT DISTINCT code FROM page) p
ON p.code = n._Code
WHERE n._Fld21101RRef IN (
0x80C5305A3A00E12B11E5845202CA01FB,
0x80C5305A3A00E12B11E584520AEC30EC
)
),
up_min AS (
SELECT
a._OwnerID_RRRef,
a._Fld24768 AS upakovka,
a._Fld24761 AS [Вес],
a._Fld24763 AS [Высота],
a._Fld24765 AS [Глубина],
a._Fld24775 AS [Ширина],
a._Fld24771 AS [Объем]
FROM MAG_2019.dbo._Reference347X1 AS a
LEFT JOIN MAG_2019.dbo._Reference347X1 AS b
ON b._OwnerID_RRRef = a._OwnerID_RRRef
AND a._Fld24768 > b._Fld24768
AND a._Marked = 0x00
AND b._Marked = 0x00
INNER JOIN ref188 AS r
ON r._IDRRef = a._OwnerID_RRRef
AND r._Fld28142 = 0
WHERE b._Fld24768 IS NULL
AND a._Marked = 0x00
),
up_max AS (
SELECT
a._OwnerID_RRRef,
a._Fld24768 AS upakovka,
a._Fld24761 AS [Вес],
a._Fld24763 AS [Высота],
a._Fld24765 AS [Глубина],
a._Fld24775 AS [Ширина],
a._Fld24771 AS [Объем]
FROM MAG_2019.dbo._Reference347X1 AS a
LEFT JOIN MAG_2019.dbo._Reference347X1 AS b
ON b._OwnerID_RRRef = a._OwnerID_RRRef
AND a._Fld24768 < b._Fld24768
AND a._Marked = 0x00
AND b._Marked = 0x00
INNER JOIN ref188 AS r
ON r._IDRRef = a._OwnerID_RRRef
AND r._Fld28142 <> 0
WHERE b._Fld24768 IS NULL
AND a._Marked = 0x00
),
up AS (
SELECT * FROM up_min
UNION ALL
SELECT * FROM up_max
),
ref1c AS (
SELECT
r._Code AS code,
r._IDRRef,
up._OwnerID_RRRef,
LOWER(
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 25, 8) + N'-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 21, 4) + N'-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 17, 4) + N'-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 1, 4) + N'-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 5, 12)
) AS artic_id,
up.upakovka,
up.[Вес],
up.[Высота],
up.[Глубина],
up.[Ширина],
up.[Объем]
FROM ref188 AS r
LEFT JOIN up
ON up._OwnerID_RRRef = r._IDRRef
),
bc AS (
SELECT
x._Fld15521RRef AS _IDRRef,
STRING_AGG(x.barcode, N'; ') AS barcodes
FROM (
SELECT DISTINCT
i._Fld15521RRef,
CONVERT(nvarchar(64), i._Fld15520) AS barcode
FROM MAG_2019.dbo._InfoRg15519 AS i
INNER JOIN ref188 AS r
ON r._IDRRef = i._Fld15521RRef
) AS x
GROUP BY x._Fld15521RRef
)
SELECT
p.*,
g._Description AS group__Description,
g.g, g.g1, g.g2, g.g3,
g.group_id AS group__group_id,
g._ParentIDRRef AS group__ParentIDRRef,
g.lvl AS group__lvl,
g.path AS group__path,
g.code AS group__code,
g.[1c_id] AS group__1c_id,
g.план AS group__план,
g.[first group] AS group__first_group,
ref1c._IDRRef AS ref_1c__IDRRef,
ref1c._OwnerID_RRRef AS ref_1c__OwnerID_RRRef,
ref1c.artic_id AS ref_1c__artic_id,
ref1c.upakovka AS ref_1c__upakovka,
ref1c.[Вес] AS ref_1c__Вес,
ref1c.[Высота] AS ref_1c__Высота,
ref1c.[Глубина] AS ref_1c__Глубина,
ref1c.[Ширина] AS ref_1c__Ширина,
ref1c.[Объем] AS ref_1c__Объем,
bc.barcodes AS ref_1c__barcodes
FROM page AS p
LEFT JOIN pbi.groups AS g
ON g.[1c_id] = p.[1c_group]
LEFT JOIN ref1c
ON ref1c.code = p.code
LEFT JOIN bc
ON bc._IDRRef = ref1c._IDRRef
ORDER BY p.code
OPTION (RECOMPILE); -- чтобы план подстраивался под offset/fetch
END
GO
/****** Object: StoredProcedure [pbi].[sp_nomenclature_full_page_v] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [pbi].[sp_nomenclature_full_page_v]
@OffsetRows int = 0,
@FetchRows int = 1000
AS
BEGIN
SET NOCOUNT ON;
;WITH page AS (
SELECT
nom.artic_id,
nom.[1c_id],
nom.code,
nom.cenovaya_gruppa,
nom.description,
nom.artic,
nom.vid_nomen,
nom.Производитель,
nom.group_id,
nom.[1c_group],
nom.card,
nom.photo,
nom.base,
nom.[Знаменатель веса],
nom.[Числитель веса],
nom.[Знаменатель объема],
nom.[Числитель объема],
nom.[Количество упак в коробе],
nom.[Количество упак в кванте],
nom.[id magok],
nom.Товарныйменеджера,
nom.МенеджерПоЗакупкам2,
nom.РуководительНаправления,
nom.[Менеджер OZON],
nom.[Менеджер WB],
nom.[АБС статус],
nom.[АБС план],
nom.[ABC Парето],
nom.[XYZ статус 12м],
nom.[Комментарий для матрицы],
nom.Коллекция,
nom.[Ценовой сегмент Магок],
nom.[Ценовой сегмент МП],
nom.[Кол-во упак в заказе Магок],
nom.Бренд,
nom.[Тип товара],
nom.Метка,
nom.[Ширина, мм],
nom.Цвет,
nom.[Номер цвета],
nom.[Тип шнура],
nom.[Тип плетения],
nom.Размер,
nom.Особенность,
nom.Форма,
nom.Ширина,
nom.[Формат упаковки],
nom.[Макс. запас],
nom.[Мин. запас],
nom.[QTY PACKS],
nom.[Да/Нет Собственное пр-во],
nom.[ID OZON],
nom.[ID WB],
nom.WB,
nom.Ozon,
nom.СТМ,
nom.[Выгружать на я.маркет],
nom.[Выгружать в Google Merchant],
nom.[Товар МП],
nom.Неликвид,
nom.Статус,
nom.[Сквозной цвет],
nom.[Базовая упаковка],
nom.[Качество контента Ozon],
nom.[Качество контента WB],
nom.[Качество контента WB by Ozon],
nom.[Качество контента Magok],
nom.[Вид номенклатуры],
nom.max_year_quantity,
nom.max_quarter_quantity,
nom.[Цена учетная, руб],
nom.[Цена учетная, usd],
nom.СредниеМесячныеПродажи,
nom.СКО_МесячныхПродаж,
nom.minAvailableQty
FROM pbi.nomenclature AS nom
ORDER BY nom.code
OFFSET @OffsetRows ROWS
FETCH NEXT @FetchRows ROWS ONLY
),
ref188 AS (
SELECT
n._Code,
n._IDRRef,
n._Fld28142
FROM MAG_2019.dbo._Reference188X1 AS n
INNER JOIN (SELECT DISTINCT code FROM page) p
ON p.code = n._Code
WHERE n._Fld21101RRef IN (
0x80C5305A3A00E12B11E5845202CA01FB,
0x80C5305A3A00E12B11E584520AEC30EC
)
),
up_min AS (
SELECT
a._OwnerID_RRRef,
a._Fld24768 AS upakovka,
a._Fld24761 AS [Вес],
a._Fld24763 AS [Высота],
a._Fld24765 AS [Глубина],
a._Fld24775 AS [Ширина],
a._Fld24771 AS [Объем]
FROM MAG_2019.dbo._Reference347X1 AS a
LEFT JOIN MAG_2019.dbo._Reference347X1 AS b
ON b._OwnerID_RRRef = a._OwnerID_RRRef
AND a._Fld24768 > b._Fld24768
AND a._Marked = 0x00 AND b._Marked = 0x00
INNER JOIN ref188 AS r
ON r._IDRRef = a._OwnerID_RRRef
AND r._Fld28142 = 0
WHERE b._Fld24768 IS NULL
AND a._Marked = 0x00
),
up_max AS (
SELECT
a._OwnerID_RRRef,
a._Fld24768 AS upakovka,
a._Fld24761 AS [Вес],
a._Fld24763 AS [Высота],
a._Fld24765 AS [Глубина],
a._Fld24775 AS [Ширина],
a._Fld24771 AS [Объем]
FROM MAG_2019.dbo._Reference347X1 AS a
LEFT JOIN MAG_2019.dbo._Reference347X1 AS b
ON b._OwnerID_RRRef = a._OwnerID_RRRef
AND a._Fld24768 < b._Fld24768
AND a._Marked = 0x00 AND b._Marked = 0x00
INNER JOIN ref188 AS r
ON r._IDRRef = a._OwnerID_RRRef
AND r._Fld28142 <> 0
WHERE b._Fld24768 IS NULL
AND a._Marked = 0x00
),
up AS (
SELECT * FROM up_min
UNION ALL
SELECT * FROM up_max
),
ref1c AS (
SELECT
r._Code AS code,
r._IDRRef,
r._IDRRef AS _OwnerID_RRRef, -- чтобы сохранить имя ref_1c__OwnerID_RRRef как раньше (если нужно)
LOWER(
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 25, 8) + N'-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 21, 4) + N'-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 17, 4) + N'-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 1, 4) + N'-' +
SUBSTRING(CONVERT(nvarchar(36), r._IDRRef, 2), 5, 12)
) AS artic_id,
up.upakovka,
up.[Вес],
up.[Высота],
up.[Глубина],
up.[Ширина],
up.[Объем]
FROM ref188 AS r
LEFT JOIN up
ON up._OwnerID_RRRef = r._IDRRef
),
bc AS (
SELECT
x._Fld15521RRef AS _IDRRef,
STRING_AGG(x.barcode, N'; ') AS barcodes
FROM (
SELECT DISTINCT
i._Fld15521RRef,
CONVERT(nvarchar(64), i._Fld15520) AS barcode
FROM MAG_2019.dbo._InfoRg15519 AS i
INNER JOIN ref188 r
ON r._IDRRef = i._Fld15521RRef
) AS x
GROUP BY x._Fld15521RRef
)
SELECT
-- === все поля как ты ожидаешь от v.[...] ===
p.[artic_id],
p.[1c_id],
p.[code],
p.[cenovaya_gruppa],
p.[description],
p.[artic],
p.[vid_nomen],
p.[Производитель],
p.[group_id],
p.[1c_group],
p.[card],
p.[photo],
p.[base],
p.[Знаменатель веса],
p.[Числитель веса],
p.[Знаменатель объема],
p.[Числитель объема],
p.[Количество упак в коробе],
p.[Количество упак в кванте],
p.[id magok],
p.[Товарныйменеджера],
p.[МенеджерПоЗакупкам2],
p.[РуководительНаправления],
p.[Менеджер OZON],
p.[Менеджер WB],
p.[АБС статус],
p.[АБС план],
p.[ABC Парето],
p.[XYZ статус 12м],
p.[Комментарий для матрицы],
p.[Коллекция],
p.[Ценовой сегмент Магок],
p.[Ценовой сегмент МП],
p.[Кол-во упак в заказе Магок],
p.[Бренд],
p.[Тип товара],
p.[Метка],
p.[Ширина, мм],
p.[Цвет],
p.[Номер цвета],
p.[Тип шнура],
p.[Тип плетения],
p.[Размер],
p.[Особенность],
p.[Форма],
p.[Ширина],
p.[Формат упаковки],
p.[Макс. запас],
p.[Мин. запас],
p.[QTY PACKS],
p.[Да/Нет Собственное пр-во],
p.[ID OZON],
p.[ID WB],
p.[WB],
p.[Ozon],
p.[СТМ],
p.[Выгружать на я.маркет],
p.[Выгружать в Google Merchant],
p.[Товар МП],
p.[Неликвид],
p.[Статус],
p.[Сквозной цвет],
p.[Базовая упаковка],
p.[Качество контента Ozon],
p.[Качество контента WB],
p.[Качество контента WB by Ozon],
p.[Качество контента Magok],
p.[Вид номенклатуры],
p.[max_year_quantity],
p.[max_quarter_quantity],
p.[Цена учетная, руб],
p.[Цена учетная, usd],
p.[СредниеМесячныеПродажи],
p.[СКО_МесячныхПродаж],
p.[minAvailableQty],
-- === упаковки/габариты/штрихкоды как ты хочешь в конце ===
ref1c.upakovka AS [upakovka],
ref1c.[Вес] AS [вес],
ref1c.[Высота] AS [Высота],
ref1c.[Глубина] AS [Глубина],
ref1c.[Ширина] AS [Ширина],
ref1c.[Объем] AS [Объем],
bc.barcodes AS [barcodes]
FROM page AS p
LEFT JOIN pbi.groups AS g
ON g.[1c_id] = p.[1c_group]
LEFT JOIN ref1c
ON ref1c.code = p.code
LEFT JOIN bc
ON bc._IDRRef = ref1c._IDRRef
ORDER BY p.code
OPTION (RECOMPILE);
END
GO
/****** Object: StoredProcedure [pbi].[Заполнить себестоимостьОт2022(закупки+продажи)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbi].[Заполнить себестоимостьОт2022(закупки+продажи)]
@dt datetime2 = '4022-01-01'
AS
BEGIN
/*r._RecorderTRef:
0x000001A1 Заявление о ввозе товаров из ЕАЭС
0x000001E3 ПТУ
0x00000189 Возврат товаров поставщику
0x000001D5 Передача товаров
0x000001B0 Корректировка приобретения
0x0000020D Таможенная декларация на импорт
закупка: (0x000001E3, 0x00000189,0x000001D5, 0x000001B0)
ЕАЭС: 0x000001A1
Таможня: 0x0000020D
*/
/*
0x80CD002590EC174111E581505088A8D5 USD
0x80D40CC47A052DFD11E6B6DD1820D178 Eur
0x80E90CC47A052DFD11E7145927CEFC24 Cny
0xAE9DB496910DCFD611E94F10743DE3FF USD2
0xAE9EB496910DCFD611E95C66B5DE3AFA USD2+2
*/
DELETE FROM mag_pbi.pbiProd.[СебестоимостьОт2022] WHERE 1=1
DBCC CHECKIDENT ('[pbiProd].[СебестоимостьОт2022]', RESEED, 0);
DECLARE @dtStart dateTime2;
DECLARE @dtEnd datetime2;
SET @dtStart = '2022-01-01'
SET @dtEnd= '2025-01-01'
-- выберем валюту рубль сразу ...
DECLARE @CurrencyRubRRef UNIQUEIDENTIFIER;
SELECT TOP (1) @CurrencyRubRRef = [_IDRRef]
FROM [MAG_2019].[dbo].[_Reference50]
WHERE _Code = '643';
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьОт2022]
--INSERT INTO mag_pbi.[pbi].[Себестоимость2023]
--INSERT INTO mag_pbi.[pbi].[Себестоимость2024]
([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id], [artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] ,[Сборка], [ЗатратыМП], [НДС], [ЗатратыСкладХранение], [ЗатратыСкладЗарплата], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доставка USD2+2], [НДС USD2+2], [Таможня USD2+2], [Сборка USD2+2]
)
SELECT --TOP (5000)
-- это финальная выборка, её не корректировать(можно только комменить поля которые не нужны к выводу), менять всё во вложенных запросах ...
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, [PartnerId]
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Сборка]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка USD2+2]
, [НДС USD2+2]
, [Таможня USD2+2]
, [Сборка USD2+2]
FROM (
SELECT
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, PartnerId
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
--, CASE WHEN [Валюта документа] = 'руб.' THEN
-- [Закупка] / [Курс usd2]
-- ELSE
-- [Закупка, usd2]
-- END as [Закупка, usd2]
, [Закупка] / [Курс usd2] as [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Сборка]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка] / [Курс usd2] as [Доставка USD2+2]
, [НДС] / [Курс usd2] as [НДС USD2+2]
, [Таможня] / [Курс usd2] as [Таможня USD2+2]
, [Сборка] / [Курс usd2] as [Сборка USD2+2]
FROM (
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\ ЗАКУПКИ \\\\\\\\\\\\\\\\
select --top (1)
DATEADD(year, -2000, _Period) as [Период]
, case
WHEN r._RecorderTRef=0x000001A1 or r._RecorderTRef=0x0000020D THEN 'НДС'
--WHEN r._RecorderTRef=0x000001A1 THEN 'ЕАЭС'
--WHEN r._RecorderTRef=0x0000020D THEN 'Таможня'
ELSE 'Закупка'
END
as [Статья]
, 'Приход' as [Вид операции]
, h.value as [Хоз операция]
, case r._RecorderTRef
WHEN 0x000001A1 then 'Заявление о ввозе товаров из ЕАЭС'
WHEN 0x00000189 then 'Возврат товаров поставщику'
WHEN 0x000001E3 then 'ПТУ'
WHEN 0x000001D5 then 'Передача товаров'
WHEN 0x000001B0 then 'Корректировка '
WHEN 0x0000020D then 'Таможенная декларация на импорт'
ELSE 'Неизвестный тип'
END as [тип документа]
, '-' as [Номер документа]
, '-' as [Номер заказа]
, val._Description as [Валюта документа]
,CASE
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Руб'
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Вал'
WHEN r._RecorderTRef = 0x0000020D THEN 'Руб'
ELSE 'Неопределено'
END as [Ценовая группа]
, r._RecorderRRef as [1c_document_id]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = r._Fld16346RRef ) as [Организация]
, (SELECT TOP(1) _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = r.[_Fld16353RRef]) as [Партнер]
--, r.[_Fld16353RRef] as PartnerId
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2),5,12) ))as PartnerId
, (SELECT TOP(1) _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = r._Fld16354_RRRef) as [Контрагент]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = [_Fld16348RRef]) as [Менеджер]
, analitikaUchetaNomenklaturi.[_Fld20498RRef] as [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2),5,12))) as [artic_id]
,CASE WHEN r._RecorderTRef IN (0x000001E3, 0x00000189,0x000001D5, 0x000001B0) -- только для вида операция закупка
THEN
case [_Fld16345RRef]
when 0x970191967A54A8814BA45C6234640F68 /* возврат, берем с минусом */ THEN -[_Fld16361]
ELSE [_Fld16361] END
--WHEN r._RecorderTRef = 0x0000020D THEN customDeclaration._Fld8943
WHEN r._RecorderTRef = 0x0000020D THEN 0
--WHEN r._RecorderTRef=0x000001A1 THEN docEAS.[_Fld4052]
WHEN r._RecorderTRef=0x000001A1 THEN 0
ELSE 0 END
as [Количество]
, [_Fld16362] / 1000 as [Сумма]
, [_Fld16363] / 1000 as [СуммаБезНДС]
,0 as [СуммаРучнойСкидки]
,0 as [СуммаАвтоСкидки]
, CASE WHEN r._RecorderTRef IN (0x000001E3, 0x00000189,0x000001D5, 0x000001B0) -- только для вида операция закупка
THEN
case [_Fld16345RRef]
when 0x970191967A54A8814BA45C6234640F68 /* возврат, берем с минусом */ THEN -[_Fld16362] / 1000
ELSE [_Fld16362] / 1000 END
ELSE 0 END
AS [Закупка]
, CASE WHEN r._RecorderTRef IN (0x000001E3, 0x00000189,0x000001D5, 0x000001B0) -- только для вида операция закупка поле "сумма в валюте документа"
THEN
case [_Fld16345RRef]
when 0x970191967A54A8814BA45C6234640F68 /* возврат, берем с минусом */ THEN -[_Fld16373] / 1000
ELSE [_Fld16373] / 1000 END
ELSE 0 END as [Закупка, usd2]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
--WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, r._Period)
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
--WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, r._Period)
ORDER BY _Period desc ) as [Курс usd2]
/*, CASE WHEN r._RecorderTRef=0x0000020D THEN [_Fld16369] / 1000
ELSE 0 END
as [Таможня]
, CASE WHEN r._RecorderTRef=0x000001A1 THEN [_Fld16369] / 1000
ELSE 0 END
as [ЕАЭС] */
, CASE WHEN r._RecorderTRef=0x0000020D THEN [_Fld16369] / 1000 END as [Таможня]
, 0 as [ЕАЭС]
, 0 as [Маркетинг] -- маркетинг
, 0 as [Доставка] -- доставка
, 0 as [Сборка]-- Сборка
, 0 as [ЗатратыМП] -- Затраты МП
,CASE WHEN LEFT(n._Code, 2) = '00' -- только для вида операция закупка
THEN '9' + CONVERT(nvarchar(15), TRIM('-' FROM TRIM ( '00' FROM n._Code)))
ELSE '8' + TRIM ( 'УТ-' FROM n._Code)
END
as [CodeUT]
, CASE WHEN r._RecorderTRef=0x000001A1 THEN ([_Fld16362] - [_Fld16363]) / 1000
WHEN r._RecorderTRef=0x0000020D THEN ([_Fld16362] - [_Fld16363]) / 1000
ELSE 0 END
as [НДС]
, 0 as [ЗатратыСкладХранение] -- Затраты cклад хранение
, 0 as [ЗатратыСкладЗарплата]-- Затраты cклад зарплаты
, 0 as [Приемка]
, 0 as [АтсМаркировка]
, 0 as [ВремяВыполненияМинут]
, 0 as [СборкаЗаказа]
--,RIGHT(n._Code, LEN(n._Code) - DATALENGTH(CONVERT(VARCHAR(100),'УТ-'))) as [CodeUT]
from
mag_2019.dbo._AccumRg16344 r-- Регистр накопления Закупки
LEFT JOIN [MAG_2019].[dbo].[_Reference160] as analitikaUchetaNomenklaturi
on analitikaUchetaNomenklaturi.[_IDRRef] = [_Fld16349RRef]
left join MAG_2019.dbo._Reference188X1 as N
on analitikaUchetaNomenklaturi.[_Fld20498RRef] = N._IDRRef
LEFT JOIN [mag_reports].[dbo].[enums] h
ON h._IDRref = r._Fld16345RRef
LEFT JOIN MAG_2019.dbo._reference50 val
ON val._IDRRef = r._Fld16372RRef
LEFT JOIN [MAG_2019].[dbo].[_Document525_VT8936] as customDeclaration
ON customDeclaration.[_Document525_IDRRef] = [r]._RecorderRRef
and analitikaUchetaNomenklaturi.[_Fld20498RRef] = customDeclaration._Fld8939RRef
LEFT JOIN [MAG_2019].[dbo].[_Document417_VT4034] as docEAS
ON docEAS.[_Document417_IDRRef] = [r]._RecorderRRef
and [_Fld16349RRef] = docEAS.[_Fld4037RRef]
) tabZakupki
UNION ALL
SELECT -- top (1000)
DATEADD(year, -2000, date) -- период
,SR -- Статья расходов
, ВидОперации -- Вид операции
, '' -- хоз операция
, typeReg -- Тип документа
, НомерДокумента -- Номер документа
, [Номер заказа] -- Номер заказа клиента для РТУ
, val._Description -- Валюта документа
, CASE
WHEN refNomenclatura._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Руб'
WHEN refNomenclatura._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Вал'
ELSE 'Неопределено'
END -- Ценовая группа
, Регистратор -- Ссылка на документ
, refOrganizaciya.[_Description] -- Организация
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = Партнер) -- Партнер
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), [Партнер], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), [Партнер], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), [Партнер], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), [Партнер], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), [Партнер], 2),5,12) ))as PartnerId
, (SELECT _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = Контрагент) -- Контрагент
, (SELECT _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = Менеджер) -- Менеджер
, onec_id -- 1с id
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), onec_id, 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), onec_id, 2),21,4),'-',SUBSTRING(convert(nvarchar(36), onec_id, 2),17,4),'-',SUBSTRING(convert(nvarchar(36), onec_id, 2),1,4),'-',SUBSTRING(convert(nvarchar(36), onec_id, 2),5,12))) -- arctic id
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, date)
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, date)
ORDER BY _Period desc ) as [Курс usd2]
, kolvo -- количество
, [Сумма] / 1000
, [СуммаБезНДС] / 1000
, [СуммаРучнойСкидки] / 1000
, [СуммаАвтоСкидки] / 1000
, [Закупка] -- закупка
, [Закупка, usd2] -- закупка usd2
, 0 -- Таможня
, 0 --ЕАЭС
-- , marketing / 1000 -- маркетинг
, delivery / 1000 -- доставка
, [Сборка] / 1000 as [Сборка]-- Сборка
, [ЗатратыМП] / 1000 -- Затраты МП
--,CASE WHEN LEFT(refNomenclatura._Code, 2) = '00' -- только для вида операция закупка
-- THEN '9' + CONVERT(nvarchar(15), TRIM('-' FROM TRIM ( '00' FROM refNomenclatura._Code)))
-- ELSE '8' + TRIM ( 'УТ-' FROM refNomenclatura._Code)
-- END
--as [CodeUT]
, 0 -- НДС
, [ЗатратыСкладХранение] -- Затраты cклад хранение
, [ЗатратыСкладЗарплата]-- Затраты cклад зарплаты
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, delivery / 1000 / (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, date)
ORDER BY _Period desc ) as [Доставка USD2+2]
, 0 as [НДС USD2+2]
, 0 as [Таможня USD2+2]
, [Сборка] / 1000 / (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, date)
ORDER BY _Period desc ) as [Сборка USD2+2]
-- ,RIGHT(refNomenclatura._Code, LEN(refNomenclatura._Code) - DATALENGTH(CONVERT(VARCHAR(100),'УТ-'))) as [CodeUT]
FROM (
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\ ДОСТАВКА \\\\\\\\\\\\\\\\
SELECT --TOP (1)
refPTU.[_Date_Time] as date -- дата
, 'Доставка контейнера ВЭД' as SR
, 'Приход' as ВидОперации
, [_Fld33630RRef] as Регистратор -- регистратор
, '-' as НомерДокумента -- Номер документа
, '-' [Номер заказа]
, 'ПТУ' as typeReg -- типРегистратора
, refPTU.[_Fld7121RRef] as Организация -- Организация
, refPTU.[_Fld7060RRef] as Партнер -- партнер
, refPTU.[_Fld7064RRef] as Контрагент -- контрагент
, refPTU.[_Fld7067RRef] as Менеджер -- Менеджер
, [_Fld33631RRef] as onec_id -- Номенклатура
--,refPtuNomen.[_Fld7134] as kolvo -- Количество
, 0 as kolvo -- Количество
--, [_Fld33633] as [Сумма]
, 0 as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
, 0 as [Закупка]
, 0 as [Закупка, usd2]
, refPTU.[_Fld7059RRef] as ВалютаДокумента -- Валюта документа
, [_Fld33632RRef] -- ППУ
, 0 as marketing -- маркетинг
, [_Fld33633] as delivery -- доставка
, 0 as [Сборка]-- Сборка
, 0 as [ЗатратыМП]-- Затраты мп
, 0 as [ЗатратыСкладХранение]-- Затраты cклад хранение
, 0 as [ЗатратыСкладЗарплата]-- Затраты cклад зарплаты
, 0 as [Приемка] -- Приемка
, 0 as [АтсМаркировка]
, 0 as [ВремяВыполненияМинут]
, 0 as [СборкаЗаказа]
FROM [MAG_2019].[dbo].[_InfoRg33629]
LEFT JOIN [MAG_2019].[dbo].[_Document483X1] as refPTU
ON refPTU.[_IDRRef] = [_Fld33630RRef]
LEFT JOIN [MAG_2019].[dbo].[_Document483_VT7128X1] as refPtuNomen
ON refPtuNomen.[_Document483_IDRRef] = refPTU.[_IDRRef]
AND refPtuNomen.[_Fld7130RRef] = [_Fld33631RRef]
where [_Fld33634_RRRef] = 0x997EB49691D57EFD11ECE1AC556F9FF0
UNION ALL
-- \\\\\\\\\\\\ МАРКЕТИНГ \\\\\\\\\\\\\\\
SELECT --TOP (1)
refPTU.[_Date_Time]
, 'Маркетинг'
, 'Приход'
, [_Fld33630RRef] -- регистратор
, '-' -- Номер документа
, '-' -- Номер заказа
, 'ПТУ'
, refPTU.[_Fld7121RRef] -- Организация
, refPTU.[_Fld7060RRef] as Партнер -- партнер
, refPTU.[_Fld7064RRef] as Контрагент -- контрагент
, refPTU.[_Fld7067RRef] as Менеджер -- Менеджер
, [_Fld33631RRef] -- Номенклатура
, 0 -- Количество
, 0 as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
, 0 as [Закупка]
, 0 as [Закупка, usd2]
, refPTU.[_Fld7059RRef] -- Валюта документа
, [_Fld33632RRef] -- ППУ
, [_Fld33633] -- маркетинг
, 0 -- доставка
, 0 -- Сборка
, 0 -- Затраты мп
, 0 -- Затраты cклад хранение
, 0 -- Затраты cклад зарплата
, 0 -- Приемка
, 0 -- [АтсМаркировка]
, 0 -- [ВремяВыполненияМинут]
, 0 -- [СборкаЗаказа]
FROM [MAG_2019].[dbo].[_InfoRg33629]
LEFT JOIN [MAG_2019].[dbo].[_Document483X1] as refPTU
ON refPTU.[_IDRRef] = [_Fld33630RRef]
where [_Fld33634_RRRef] = 0x9981B49691D57EFD11EDCE203CED30C4
UNION ALL
-- ///////////////// ПРОДАЖИ ////////////////
SELECT --TOP (1)
[_Period]
,'Реализация'
,'Расход'
,[_RecorderRRef] -- регистратор
,docRTU.[_Number] -- Номер документа
, orders.[_Number] -- Номер заказа
,case [_RecorderTRef]
WHEN 0x000001F4 then 'РТУ'
ELSE 'Неизвестный тип'
END
, AnalitikaUchetaPartner.[_Fld20514RRef] -- Организация
, AnalitikaUchetaPartner.[_Fld20513RRef] -- партнер
, AnalitikaUchetaPartner.[_Fld20515_RRRef] -- контрагент
, [_Fld15559RRef] as Менеджер -- Менеджер
, analitikaUchetaNomenklaturi.[_Fld20498RRef] -- Номенклатура
, [_Fld15567] -- количество
, [_Fld15568] as [Сумма]
, 0 as [СуммаБезНДС]
, [_Fld15595] as [СуммаРучнойСкидки]
, [_Fld15596] as [СуммаАвтоСкидки]
, 0 as [Закупка]
, 0 as [Закупка, usd2]
, CASE
WHEN [_Fld15601RRef] IS NULL THEN 'руб.' -- Валюта документа
ELSE [_Fld15601RRef]
END AS [Валюта документа]
, '' -- ППУ
, 0 -- маректинг
, 0 -- Доставка
, 0 -- Сборка
, 0 -- Затраты мп
, 0 -- Затраты cклад хранение
, 0 -- Затраты cклад зарплаты
, 0 -- Приемка
, 0 -- [АтсМаркировка]
, 0 -- [ВремяВыполненияМинут]
, 0 -- [СборкаЗаказа]
FROM [MAG_2019].[dbo].[_AccumRg15547]
LEFT JOIN [MAG_2019].[dbo].[_Reference160] as analitikaUchetaNomenklaturi
on analitikaUchetaNomenklaturi.[_IDRRef] = [_Fld15548RRef]
LEFT JOIN [MAG_2019].[dbo].[_Reference162] as AnalitikaUchetaPartner
on AnalitikaUchetaPartner.[_IDRRef] = [_Fld15550RRef]
LEFT JOIN [MAG_2019].[dbo].[_Document500X1] as docRTU
on docRTU.[_IDRRef] = [_RecorderRRef]
LEFT JOIN (SELECT
[_Document500_IDRRef] as _IDRRef
,MIN([_Fld7990_RRRef]) as orderRTU
FROM [MAG_2019].[dbo].[_Document500_VT7967X1]
GROUP BY
[_Document500_IDRRef]) as ordersRTU
ON ordersRTU._IDRRef = [_RecorderRRef]
LEFT JOIN [MAG_2019].[dbo].[_Document404X1] as orders
ON orders.[_IDRRef] = ordersRTU.orderRTU
UNION ALL
-- \\\\\\\\\\\\\\\\ СБОРКА РАСХОД БЕЗ ЗАТРАТ НА СБОРКУ\\\\\\\\\\\\\\\\
SELECT --TOP (1000)
znS.[_Date_Time] as per
, 'Сборка'
, 'Расход'
, TabGoods.[_Document407_IDRRef] -- регистратор
, '-' -- Номер документа
, '-' -- Номер заказа
,'Заказ на сборку'
, ZnS.[_Fld3348RRef] -- Организация
, Kontr.[_Fld20612RRef] -- партнер
, ZnS.[_Fld27876RRef] -- контрагент
, ZnS.[_Fld28230RRef] -- Менеджер
, [_Fld3381RRef] as nom -- Номенклатура
, [_Fld3385] as kolvo -- Количество
--, tabset.[_Fld28063]
, 0 as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
, (SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
WHERE [Вид цены] = 'Учетная цена (руб)'
AND [Дата] <= znS.[_Date_Time]
and [_Fld3381RRef] = [1c_id]
ORDER BY Дата desc ) / 1000 * [_Fld3385] * -1 as [Закупка]
, (SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
WHERE [Вид цены] = 'Учетная цена (руб)'
AND [Дата] <= znS.[_Date_Time]
and [_Fld3381RRef] = [1c_id]
ORDER BY Дата desc ) / 1000 * [_Fld3385] * -1 / (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, znS.[_Date_Time])
ORDER BY _Period desc ) as [Закупка, usd2]
, currency._IDRRef -- Валюта документа
, '' -- ППУ
, 0 -- маректинг
, 0 -- Доставка
, 0 -- сборка
, 0 -- Затраты мп
, 0 -- Затраты cклад хранение
, 0 -- Затраты cклад зарплата
, 0 -- Приемка
, 0 -- [АтсМаркировка]
, 0 -- [ВремяВыполненияМинут]
, 0 -- [СборкаЗаказа]
FROM [MAG_2019].[dbo].[_Document407_VT3379] as TabGoods
INNER JOIN [MAG_2019].[dbo].[_Document407] as ZnS -- Заказ на сборку
on ZnS._IDRRef = [_Document407_IDRRef]
and _Posted = 0x01 -- проведен
-- and [_Number] = 'АНУТ-010680' -- номер дока для проверки
and [_Fld3352RRef] = 0x97266ED3BEFAB868480833CDF0FCF236 -- статус Закрыт
LEFT JOIN [MAG_2019].[dbo].[_Reference168] as Kontr
ON Kontr.[_IDRRef] = ZnS.[_Fld27876RRef]
LEFT JOIN (SELECT TOP (1) [_IDRRef]
FROM [MAG_2019].[dbo].[_Reference50]
where _code = '643') as currency
on 1 = 1
UNION ALL
-- \\\\\\\\\\\\\\\\ СБОРКА ПРИХОД + ЗАТРАТЫ НА СБОРКУ \\\\\\\\\\\\\\\\
SELECT --TOP (333)
znS.[_Date_Time]
, 'Сборка'
, 'Приход'
, TabGoods.[_Document407_IDRRef] -- регистратор
, '-' -- Номер документа
, '-' -- Номер заказа
,'Заказ на сборку'
, ZnS.[_Fld3348RRef] -- Организация
, Kontr.[_Fld20612RRef] -- партнер
, ZnS.[_Fld27876RRef] -- контрагент
, ZnS.[_Fld28230RRef] -- Менеджер
, tabSet.[_Fld28059RRef] -- Номенклатура
--, [_Fld3385] -- Количество
, tabset.[_Fld28063]
, 0 as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
--, CASE WHEN tabSetPrices.[SumSebes] IS NULL THEN 0
-- ELSE tabSetPrices.[SumSebes] / 1000 * tabset.[_Fld28063]
-- end as [Закупка]
, (SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
WHERE [Вид цены] = 'Учетная цена (руб)'
AND [дата] <= znS.[_Date_Time]
and [_Fld3381RRef] = [1c_id]
ORDER BY Дата desc ) / 1000 * [_Fld3385] as [SumSebes]
, (SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
WHERE [Вид цены] = 'Учетная цена (руб)'
AND [дата] <= znS.[_Date_Time]
and [_Fld3381RRef] = [1c_id]
ORDER BY Дата desc ) / 1000 * [_Fld3385] / (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, znS.[_Date_Time])
ORDER BY _Period desc ) as [Закупка, usd2]
, currency._IDRRef -- Валюта документа
, '' -- ППУ
, 0 -- маректинг
, 0 -- Доставка
, TabZatratiSborka.sborka as sborka -- сборка
, 0 -- Затраты мп
, 0 -- Затраты cклад хранение
, 0 -- Затраты cклад зарплата
, 0 -- Приемка
, 0 -- [АтсМаркировка]
, 0 -- [ВремяВыполненияМинут]
, 0 -- [СборкаЗаказа]
FROM [MAG_2019].[dbo].[_Document407_VT3379] as TabGoods
INNER JOIN [MAG_2019].[dbo].[_Document407] as ZnS -- Заказ на сборку
on ZnS._IDRRef = [_Document407_IDRRef]
and _Posted = 0x01 -- проведен
--and [_Number] = 'АНУТ-010680' -- номер дока для проверки
and [_Fld3352RRef] = 0x97266ED3BEFAB868480833CDF0FCF236 -- статус Закрыт
LEFT JOIN [MAG_2019].[dbo]._Document407_VT28057 as tabSet -- тч комплекты, тут связь было-стало
on tabSet.[_Fld28070] = [_Fld28055]
and tabSet._Document407_IDRRef = TabGoods._Document407_IDRRef
LEFT JOIN [MAG_2019].[dbo].[_Reference168] as Kontr
ON Kontr.[_IDRRef] = ZnS.[_Fld27876RRef]
LEFT JOIN (SELECT TOP (1) [_IDRRef]
FROM [MAG_2019].[dbo].[_Reference50]
where _code = '643') as currency
on 1 = 1
LEFT JOIN (SELECT --TOP (1000)
[_RecorderRRef] -- регистратор
, [_Fld33653RRef] -- Номенклатура
, SUM([_Fld33658]) / 1000 as sborka -- сборка
FROM [MAG_2019].[dbo].[_AccumRg33652] -- рн работы
where [_RecorderTRef] = 0x00000197
group by
[_RecorderRRef]
, [_Fld33653RRef] -- Номенклатура
) as TabZatratiSborka
ON TabZatratiSborka.[_RecorderRRef] = TabGoods.[_Document407_IDRRef]
and TabZatratiSborka.[_Fld33653RRef] = tabSet.[_Fld28059RRef]
where [_Fld3392] = 0x00 -- отменено ложь
UNION ALL
-- \\\\\\\\\\\\\\\\\\\\ ЗАТРАТЫ МП \\\\\\\\\\\\\\\
SELECT -- TOP (1000)
[_Period]
,'Затраты МП'
,'Приход'
, [_RecorderRRef] -- Регистратор отчет комиссионера
, '-' -- Номер документа
, '-' -- Номер заказа
, 'Отчет комиссионера'
, otchetKommissionera.[_Fld5484RRef] -- Организация
, otchetKommissionera.[_Fld5485RRef] -- партнер
, otchetKommissionera.[_Fld5486RRef] -- контрагент
, otchetKommissionera.[_Fld5492RRef] -- Менеджер
, [_Fld33391RRef] -- номенклатура
--,otchetKommissioneraTabTovari.[_Fld5531] -- Количество
, 0 -- Количество
, 0 as [Сумма]
--,[_Fld33394] as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
, 0 as [Закупка]
, 0 as [Закупка, usd2]
, currency._IDRRef -- Валюта документа
, '' -- ППУ
, 0 -- маректинг
, 0 -- Доставка
, 0 -- сборка
, [_Fld33394] -- Затраты МП
, 0 -- Затраты cклад хранение
, 0 -- Затраты cклад зарплата
, 0 -- Приемка
, 0 -- [АтсМаркировка]
, 0 -- [ВремяВыполненияМинут]
, 0 -- [СборкаЗаказа]
FROM [MAG_2019].[dbo].[_AccumRg33390]
LEFT JOIN [MAG_2019].[dbo].[_Document458_VT5524] as otchetKommissioneraTabTovari
on otchetKommissioneraTabTovari.[_Fld5526RRef] = [_Fld33391RRef]
AND otchetKommissioneraTabTovari.[_Document458_IDRRef] = [_RecorderRRef]
LEFT JOIN [MAG_2019].[dbo].[_Document458] as otchetKommissionera
ON otchetKommissionera.[_IDRRef] = otchetKommissioneraTabTovari.[_Document458_IDRRef]
LEFT JOIN (SELECT TOP (1) [_IDRRef]
FROM [MAG_2019].[dbo].[_Reference50]
where _code = '643') as currency
on 1 = 1
) as tabMain
LEFT JOIN [MAG_2019].[dbo].[_Reference188X1] as refNomenclatura
ON refNomenclatura.[_IDRRef] = tabMain.onec_id
LEFT JOIN [MAG_2019].[dbo].[_Document483X1] as refPTU
ON refPTU.[_IDRRef] = tabMain.Регистратор
LEFT JOIN [MAG_2019].[dbo].[_Document484] as refPPU
ON refPPU.[_IDRRef] = tabMain.Регистратор
LEFT JOIN [MAG_2019].[dbo].[_Reference198X1] as refOrganizaciya
on refOrganizaciya._IDRRef = tabMain.Организация
LEFT JOIN MAG_2019.dbo._reference50 val
ON val._IDRRef = tabMain.ВалютаДокумента
UNION ALL
-- \\\\\\\\\\\\\\\\\\\\ ПРИЕМКА, АТС МАРКИРОВКА \\\\\\\\\\\\\\\
SELECT -- TOP (5000)
DATEADD(year, -2000, [Период]) as [Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, val.[_Description] as [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = [Организация] ) as [Организация]
, (SELECT TOP(1)_description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = [Партнер]) as [Партнер]
, [PartnerId]
, (SELECT TOP(1) _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = Контрагент) as [Контрагент]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = Менеджер) as [Менеджер]
, [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), [1c_id], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), [1c_id], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), [1c_id], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), [1c_id], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), [1c_id], 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, [Период])
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, [Период])
ORDER BY _Period desc ) as [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Сборка]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, 0 as [Доставка USD2+2]
, 0 as [НДС USD2+2]
, 0 as [Таможня USD2+2]
, 0 as [Сборка USD2+2]
FROM (
-- \\\\\\\\\\\\\\\\\\\\ ПРИЕМКА \\\\\\\\\\\\\\\
SELECT --top 1000
docOtbor._Date_Time as [Период]
, 'Приемка товара' as [Статья]
, 'Приход' as [Вид операции]
, 'Закупка' as [Хоз операция]
, 'Отбор (размещение) товара' as [тип документа]
, docOtbor._Number as [Номер документа]
, zakasPostavshiku._Number as [Номер заказа]
, @CurrencyRubRRef as [Валюта документа] -- Валюта документа
, 'Руб' as [Ценовая группа]
, docOtbor._IDRRef as [1c_document_id]
, zakasPostavshiku._Fld3411RRef as [Организация] -- Организация
, zakasPostavshiku._Fld3409RRef as [Партнер] -- партнер
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), zakasPostavshiku._Fld3409RRef , 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), zakasPostavshiku._Fld3409RRef , 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), zakasPostavshiku._Fld3409RRef , 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), zakasPostavshiku._Fld3409RRef , 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), zakasPostavshiku._Fld3409RRef , 2),5,12) )) as [PartnerId]
, zakasPostavshiku._Fld3410RRef as [Контрагент] -- контрагент
, zakasPostavshiku._Fld3415RRef as [Менеджер] -- Менеджер
, otborTabRazmeshenie._Fld5347RRef as [1c_id] -- Номенклатура
, '' as [artic_id]
, '' as [Курс usd]
, '' as [Курс usd2]
, CAST(otborTabRazmeshenie._Fld5346 / ISNULL(upackovka.chislitel, 1) as decimal(10,3)) as [Количество] -- Количество
, 0 as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
, 0 as [Закупка]
, 0 as [Закупка, usd2]
, 0 as [Таможня]
, 0 as [ЕАЭС]
, 0 as [Доставка] -- доставка
, 0 as [Сборка] -- Сборка
, 0 as [ЗатратыМП] -- Затраты мп
, 0 as [НДС]
, 0 as [ЗатратыСкладХранение] -- Затраты склад хранение
, 0 as [ЗатратыСкладЗарплата] -- Затраты склад зарплата
, ((CASE
WHEN DAY(docOtbor._Fld5324) <> DAY(docOtbor._Fld5325) THEN
((20 - DATEPART(HOUR, docOtbor._Fld5324)) * 60 - DATEPART(MINUTE, docOtbor._Fld5324) - DATEPART(SECOND, docOtbor._Fld5324) / 60.0) +
((DATEDIFF(DAY, docOtbor._Fld5324, docOtbor._Fld5325) - 1) * 12 * 60) +
((DATEPART(HOUR, docOtbor._Fld5325) - 8) * 60 + DATEPART(MINUTE, docOtbor._Fld5325) + DATEPART(SECOND, docOtbor._Fld5325) / 60.0)
ELSE
DATEDIFF(SECOND, docOtbor._Fld5324, docOtbor._Fld5325) / 60.0
END * 3 / SUM(otborTabRazmeshenie._Fld5346 / ISNULL(upackovka.chislitel, 1)) over (partition by docOtbor._IDRRef)
* otborTabRazmeshenie._Fld5346 / ISNULL(upackovka.chislitel, 1)) +
((COUNT(*) over (partition by docOtbor._IDRRef) / 3000 + otborTabRazmeshenie._Fld5346 / ISNULL(upackovka.chislitel, 1) / 50000 +
(upackovka.ves * otborTabRazmeshenie._Fld5346 / ISNULL(upackovka.chislitel, 1) / 15000)) / 3 * 20000)) / 1000 AS [Приемка]
, 0 as [АтсМаркировка]
, 0 as [ВремяВыполненияМинут]
, 0 as [СборкаЗаказа]
FROM
[MAG_2019].[dbo].[_Document453_VT5341X1] AS otborTabRazmeshenie
INNER JOIN [MAG_2019].[dbo].[_Document453X1] AS docOtbor
ON docOtbor._IDRRef = otborTabRazmeshenie._Document453_IDRRef
and docOtbor._Fld5316_RTRef = 0x000001E6 -- Фильтрация по псо
and docOtbor._Fld5325 >= @dtStart
and docOtbor._Fld5324 >= @dtStart
and docOtbor._Posted = 0x01
INNER JOIN [MAG_2019].[dbo].[_Document486] as docPSO
on docPSO._Fld7346_RTRef = 0x00000198 -- фильтрация по заказу поставщика
and docOtbor._Fld5316_RRRef = docPSO._IDRRef
LEFT JOIN [MAG_2019].[dbo].[_Document408X1] as zakasPostavshiku
on docPSO._Fld7346_RRRef = zakasPostavshiku._IDRRef
LEFT JOIN (
SELECT
upackovka._OwnerID_RRRef AS vladelec, -- Владелец
CASE WHEN upackovka._Fld24768 = 0 THEN
1
ELSE
ISNULL(upackovka._Fld24768, 1)
END AS chislitel, -- Числитель
upackovka._Fld24769 AS znamenatel, -- Знаменатель
CAST(CASE
WHEN 1 = 1 -- ВесИспользовать
AND upackovka._Fld24769 <> 0 -- Знаменатель
THEN upackovka._Fld24768 / upackovka._Fld24769
ELSE 0
END AS DECIMAL(15, 3)) AS ves
FROM
[MAG_2019].[dbo].[_Reference347X1] AS upackovka
WHERE
upackovka._Marked = 0 -- ПометкаУдаления
) AS upackovka
ON upackovka.vladelec = otborTabRazmeshenie._Fld5347RRef -- Сопоставление Номенклатуры и Владелец
WHERE
1=1
and ISNULL(otborTabRazmeshenie._Fld5346, 0) > 0
UNION ALL
-- \\\\\\\\\\\\\\\\\\\\ АТС МАРКИРОВКА \\\\\\\\\\\\\\\
SELECT -- TOP (1000)
tabAts.[Период] as [Период]
, 'Атс маркировка' as [Статья]
, 'Приход' as [Вид операции]
, 'Закупка' as [Хоз операция]
, 'Атс Маркировка товара' as [тип документа]
, AtsMark._Number as [Номер документа]
, '' as [Номер заказа]
, @CurrencyRubRRef as [Валюта документа] -- Валюта документа
, 'Руб' as [Ценовая группа]
, tabAts.atsRef as [1c_document_id]
, '' as [Организация] -- Организация
, '' as [Партнер] -- партнер
, '' as [PartnerId]
, '' as [Контрагент] -- контрагент
, '' as [Менеджер] -- Менеджер
, tabAts.nom AS Номенклатура -- Номенклатура
, '' as [artic_id]
, '' as [Курс usd]
, '' as [Курс usd2]
, CAST(tabAts._Fld33656 as decimal(10,3)) as [Количество] -- Количество
, 0 as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
, 0 as [Закупка]
, 0 as [Закупка, usd2]
, 0 as [Таможня]
, 0 as [ЕАЭС]
, 0 as [Доставка] -- доставка
, 0 as [Сборка] -- Сборка
, 0 as [ЗатратыМП] -- Затраты мп
, 0 as [НДС]
, 0 as [ЗатратыСкладХранение] -- Затраты склад хранение
, 0 as [ЗатратыСкладЗарплата] -- Затраты склад зарплата
, 0 AS Приемка
, tabAts.АтсМаркировка / 1000 AS [АтсМаркировка]
, CASE
WHEN DAY(AtsMark._Fld27693) <> DAY(AtsMark._Fld27694) THEN
(((20 - DATEPART(HOUR, AtsMark._Fld27693)) * 60 - DATEPART(MINUTE, AtsMark._Fld27693) - DATEPART(SECOND, AtsMark._Fld27693) / 60.0) +
((DATEDIFF(DAY, AtsMark._Fld27693, AtsMark._Fld27694) - 1) * 12 * 60) +
((DATEPART(HOUR, AtsMark._Fld27694) - 8) * 60 + DATEPART(MINUTE, AtsMark._Fld27694) + DATEPART(SECOND, AtsMark._Fld27694) / 60.0)) / SUM(tabAts._Fld33656) OVER (PARTITION BY tabAts.atsRef) * tabAts._Fld33656
ELSE
(DATEDIFF(MINUTE, AtsMark._Fld27693, AtsMark._Fld27694)) / SUM(tabAts._Fld33656) OVER (PARTITION BY tabAts.atsRef) * tabAts._Fld33656
END AS [ВремяВыполненияМинут]
, 0 AS [СборкаЗаказа]
FROM (
SELECT
rnRaboti.[_Period] AS [Период],
rnRaboti.[_RecorderRRef] AS atsRef,
rnRaboti.[_Fld33653RRef] AS nom, -- Номенклатура
SUM(rnRaboti.[_Fld33658]) / 1000 AS [АтсМаркировка],
SUM(rnRaboti._Fld33656) AS [_Fld33656]
FROM [MAG_2019].[dbo].[_AccumRg33652] AS rnRaboti
WHERE 1 = 1
AND rnRaboti.[_RecorderTRef] = 0x00006C28
GROUP BY
rnRaboti.[_Period],
rnRaboti.[_RecorderRRef],
rnRaboti.[_Fld33653RRef]
) AS tabAts
INNER JOIN [MAG_2019].[dbo].[_Document27688] AS AtsMark
ON AtsMark.[_IDRRef] = tabAts.atsRef
AND AtsMark._Posted = 0x01
AND AtsMark._Fld27694 >= @dtStart
WHERE 1 = 1
--UNION ALL
-- -- \\\\\\\\\\\\\\\\\\\\ СБОРКА ЗАКАЗА КЛИЕНТА \\\\\\\\\\\\\\\
-- SELECT -- TOP (1000)
--docOtbor._Date_Time as [Период]
--, 'Закупка' as [Статья]
--, 'Сборка заказа' as [Вид операции]
--, 'Закупка' as [Хоз операция]
--, 'Отбор (отбор) товара' as [тип документа]
--, docOtbor._Number as [Номер документа]
--, docZakazKlienta._Number as [Номер заказа]
--, @CurrencyRubRRef as [Валюта документа] -- Валюта документа
--, 'Руб' as [Ценовая группа]
--, docOtbor._IDRRef as [1c_document_id]
--, docZakazKlienta._Fld3129RRef as [Организация] -- Организация
--, docZakazKlienta._Fld3127RRef as [Партнер] -- партнер
--, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), docZakazKlienta._Fld3127RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), docZakazKlienta._Fld3127RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), docZakazKlienta._Fld3127RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), docZakazKlienta._Fld3127RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), docZakazKlienta._Fld3127RRef, 2),5,12) )) as [PartnerId]
--, docZakazKlienta._Fld3128RRef as [Контрагент] -- контрагент
--, docZakazKlienta._Fld3138RRef as [Менеджер] -- Менеджер
-- , [_Fld5332RRef] as [1c_id] -- Номенклатура
--, '' as [artic_id]
--, '' as [Курс usd]
--, '' as [Курс usd2]
--, CAST([_Fld5330] as decimal(10, 3)) as [Количество] -- Количество
--, 0 as [Сумма]
--, 0 as [СуммаБезНДС]
--, 0 as [СуммаРучнойСкидки]
--, 0 as [СуммаАвтоСкидки]
--, 0 as [Закупка]
--, 0 as [Закупка, usd2]
--, 0 as [Таможня]
--, 0 as [ЕАЭС]
-- , 0 as [Доставка] -- доставка
--, 0 as [Сборка] -- Сборка
--, 0 as [ЗатратыМП] -- Затраты мп
--, 0 as [НДС]
--, 0 as [ЗатратыСкладХранение] -- Затраты склад хранение
--, 0 as [ЗатратыСкладЗарплата] -- Затраты склад зарплата
--, 0 as [Приемка]
--, 0 as [АтсМаркировка]
-- , CASE
-- WHEN DAY(docOtbor.[_Fld5324]) <> DAY(docOtbor.[_Fld5325]) THEN
-- (((20 - DATEPART(HOUR, docOtbor.[_Fld5324])) * 60 - DATEPART(MINUTE, docOtbor.[_Fld5324]) - DATEPART(SECOND, docOtbor.[_Fld5324]) / 60.0) +
-- ((DATEDIFF(DAY, docOtbor.[_Fld5324], docOtbor.[_Fld5325]) - 1) * 12 * 60) +
-- ((DATEPART(HOUR, docOtbor.[_Fld5325]) - 8) * 60 + DATEPART(MINUTE, docOtbor.[_Fld5325]) + DATEPART(SECOND, docOtbor.[_Fld5325]) / 60.0)) / SUM([_Fld5330]) over (partition by [_Document453_IDRRef]) * [_Fld5330]
-- ELSE
-- (DATEDIFF(SECOND, docOtbor.[_Fld5324], docOtbor.[_Fld5325]) / 60.0) / SUM([_Fld5330]) over (partition by [_Document453_IDRRef]) * [_Fld5330]
-- END as [ВремяВыполненияМинут]
--,((SUM(1) over (partition by [_Document453_IDRRef]) / 5000 + [_Fld5330] / 20000)/2*30000) / 1000 as СборкаЗаказа
-- FROM [MAG_2019].[dbo].[_Document453_VT5326X1] as OtborTabOtbor
-- INNER JOIN [MAG_2019].[dbo].[_Document453X1] as docOtbor
-- ON docOtbor.[_IDRRef] = [_Document453_IDRRef]
-- and docOtbor._Posted = 0x01
-- and docOtbor._Fld5325 >= @dtStart
-- and docOtbor._Fld5324 >= @dtStart
-- and docOtbor.[_Fld5316_RTRef] = 0x000001F0 -- RSO
-- INNER JOIN [MAG_2019].[dbo].[_Document496X1] as docRSO
-- on docOtbor._Fld5316_RRRef = docRSO._IDRRef
-- and docRSO.[_Fld27744_RTRef] = 0x00000194 -- zakaz klienta
-- LEFT JOIN [MAG_2019].[dbo].[_Document404X1] as docZakazKlienta
-- on docRSO.[_Fld27744_RRRef] = docZakazKlienta._IDRRef
-- WHERE 1=1
) as tabItogovoya
LEFT JOIN MAG_2019.dbo._reference50 as val
ON val._IDRRef = tabItogovoya.[Валюта документа]
WHERE DATEADD(year, -2000, [Период]) BETWEEN @dtStart and @dtEnd
) tabItog
WHERE 1=1
and [Период] BETWEEN @dtStart and @dtEnd
--AND [Период] < @dtEnd
--and [artic_id] = 'cdb37c08-84c6-11e5-80c5-305a3a00e12b'
END
GO
/****** Object: StoredProcedure [pbi].[Заполнить себестоимостьОт2022(СкладХранение)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbi].[Заполнить себестоимостьОт2022(СкладХранение)]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- выберем вылуту рубль сразу ...
DECLARE @CurrencyRubRRef UNIQUEIDENTIFIER;
SELECT TOP (1) @CurrencyRubRRef = [_IDRRef]
FROM [MAG_2019].[dbo].[_Reference50]
WHERE _Code = '643';
-- \\\\\\\\\\\\\\\\\\\\ ЗАТРАТЫ СКЛАД ХРАНЕНИЕ \\\\\\\\\\\\\\\
SELECT --TOP (1)
[Период]
, 'Склад хранение'
,'Закупка'
, null -- регистратор
, '-' -- Номер документа
, '-' -- Номер заказа
, 'Склад хранение'
, '' -- Организация
, null as Партнер -- партнер
, null as Контрагент -- контрагент
, null as Менеджер -- Менеджер
, [1c_id] -- Номенклатура
, 0 -- Количество
, 0 as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
, 0 as [Закупка]
, 0 as [Закупка, usd2]
, @CurrencyRubRRef -- Валюта документа
, '' -- ППУ
, 0 -- маркетинг
, 0 -- доставка
, 0 -- Сборка
, 0 -- Затраты мп
, 20000000 / 30 * ([volume] / [totalVolume]) / 1000 as [ЗатратыСкладХранение] -- Затраты склад хранение
, 200000 * ([volume] / [totalVolume]) / 1000 as [ЗатратыСкладЗарплата] -- Затраты склад зарплата
, 0 -- Приемка
, 0 -- [АтсМаркировка]
, 0 -- [ВремяВыполненияМинут]
, 0 -- [СборкаЗаказа]
--,[_Fld33634_RRRef] -- статья расходов
FROM [mag_pbi].[pbi].[nomenclatureVolumeStorehouse]
where YEAR([Период]) >= 2024
END
GO
/****** Object: StoredProcedure [pbi].[Обновить себестоимость] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbi].[Обновить себестоимость]
@full_update bit = 0
AS
BEGIN
-- DECLARE @full_update bit = 1
DECLARE @dt datetime2 = '2015-01-01'
DECLARE @full_update_local_var bit = 0
--полностью обновляем таблицу в воскресенье
IF ( SELECT DATEPART(WEEKDAY, GETDATE()) )= 7 OR @full_update = 1 OR format(getdate(), 'yyyy-MM-dd') = '2023-07-29'--( SELECT DAY(CURRENT_TIMESTAMP) )= 1 OR @full_update = 1
SET @full_update_local_var = 1
SELECT @full_update_local_var
IF @full_update_local_var = 1
BEGIN
DROP TABLE IF EXISTS pbi.[Себестоимость] --таблицу удаляем, чтобы удалить индексы. так быстрее вставлять большие массивы данных
EXEC [sebest].[Создать таблицу]
END
ELSE BEGIN
SET @dt = (select DATEADD(MONTH, -1, GETDATE()))
END
--В этой процедуре создается таблица, в ней же очищается таблица себестоимость начиная с даты @dt
exec sebest.[Заполнить себестоимость закупкой] @dt-- Добавляем закупку
exec sebest.[Заполнить себестоимость начальным остатком] @dt-- Добавляем начальные остатки
/* поменял процедуру только на копирование регистра Выручка и Себестоимость продаж */
exec sebest.[Заполнить себестоимость продажей] @dt -- Добавляем продажи
exec [sebest].[Заполнить себестоимость комплектующими] @dt
exec sebest.[Заполнить себестоимость комплектами] @dt -- Добавляем все движения по фасовке
IF @full_update_local_var = 1--( SELECT DAY(CURRENT_TIMESTAMP) )= 1 OR @full_update = 1
exec sebest.[Создать индексы]
--Записываем две колонки с курсом usd2+2 и usd
UPDATE mag_pbi.pbi.[Себестоимость] SET
[Курс usd2] = (
SELECT TOP 1 _Fld13220/_Fld13221 FROM [mag_2019].[dbo].[_InfoRg13218] k--РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, k._Period) <= [Период]
ORDER BY k._Period desc)
,
[Курс usd] = (
SELECT TOP 1 _Fld13220/_Fld13221 FROM [mag_2019].[dbo].[_InfoRg13218] k--РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND DATEADD(year, -2000, k._Period) <= [Период]
ORDER BY k._Period desc)
WHERE [Период]>=@dt
--записываем закупочную цену в usd2 из рублей, кроме тех, у кого валюта документа usd2
UPDATE mag_pbi.pbi.[Себестоимость] SET [Закупка, usd2] = [Закупка]/[Курс usd2]
WHERE [Валюта документа]<>'USD2' AND [Статья] = 'Закупка' AND [Вид операции]<>'Продажа'
AND [Период]>=@dt
/* это главная процедура расчета себестоимости. Выполняется очень долго, каждое вс пересчитывает полностью весь регистр, каждый день считает только посл. 1 месяц*/
exec [sebest].[Расчет себестомисти] @dt, 0 -- запуск не для коплектов, только комплектующие
--exec [sebest].[Проставить стоимость комплектов] @dt
--exec [sebest].[Расчет себестомисти] @dt, 1 -- второй проход для комплектующих
UPDATE mag_pbi.pbi.[Себестоимость] SET [Учетная цена, новое] = CASE WHEN [Количество] <> 0 THEN [закупка] / [Количество] ELSE 0 END
WHERE 1=1--[Статья] = 'Закупка' AND [Вид операции]='Продажа'
AND [Период]>=@dt
--exec sebest.[Заполнить себестоимость курсовой разницей] -- Добавляем курсовую разницу
/*
0x80CD002590EC174111E581505088A8D5 USD
0x80D40CC47A052DFD11E6B6DD1820D178 Eur
0x80E90CC47A052DFD11E7145927CEFC24 Cny
0xAE9DB496910DCFD611E94F10743DE3FF USD2
0xAE9EB496910DCFD611E95C66B5DE3AFA USD2+2
*/
END
/*
-- Продажу считаем по внутреннему курсу
/*UPDATE mag_pbi.pbi.[Себестоимость] SET [Курс usd2] = (
SELECT TOP 1 _Fld13220 FROM [mag_2019].[dbo].[_InfoRg13218] k--РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND DATEADD(year, -2000, k._Period) <= [Период]
ORDER BY k._Period desc)
WHERE [Статья] = 'Закупка' AND [Вид операции]='Продажа'
AND [Период]>=@dt
*/
--DECLARE @dt datetime2 = '2015-01-01'
--подставляем старое значение учетной цены
UPDATE mag_pbi.pbi.[Себестоимость] SET [Учетная цена, старое] = (
isnull(
(SELECT top 1 its.[_Fld27138] / 1000 FROM [mag_2019].[dbo].[_InfoRg27129X1] its -- РегистрСведений.ITS_ОсновнойОтчет
WHERE its._Fld27130RRef = [1C_id] AND its.[_Fld27138] > 0
and datediff(month, DATEADD(year, -2000, its._Period), [Период]) >= 0
ORDER BY its._period desc) ,
(SELECT TOP (1) [Цена]/1000
FROM [mag_reports].[sales].[pricelist] p
where p.[1c_id] = [1c_id] and [Вид цены] = 'Учетная цена (руб)'
ORDER BY _Period desc)
)
)
WHERE [Статья] = 'Закупка' AND [Вид операции]='Продажа'
AND [Период]>=@dt
*/
GO
/****** Object: StoredProcedure [pbi].[РасчетСебестоимостиОт2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbi].[РасчетСебестоимостиОт2022]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
exec [sebest].[Заполнить себестоимостьОт2022(закупки+продажи)]
END
GO
/****** Object: StoredProcedure [pbi].[создание среза учетных цен] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [pbi].[создание среза учетных цен] as
BEGIN
--DROP TABlE analytics.[срез учетных цен]
INSERT INTO analytics.[срез учетных цен]
SELECT
[1c_id]
,[artic_id]
, null as [Учетная цена]
, null as [Учетная цена USD2+2]
, format(GETDATE(), 'yyyy-MM-dd') as [Период]
, null as [Количество]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] seb
group by [1c_id]
,[artic_id]
UPDATE srez SET
[Учетная цена] = (
SELECT
sum(Закупка)+sum(НДС)+sum(Доставка)+sum(Таможня)
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] ss
where Статья in ('Ввод начальных остатков', 'Закупка', 'Реализация', 'НДС', 'Доставка контейнера ВЭД', 'Производство товара')
AND ss.[1c_id]=srez.[1c_id]
)
FROM analytics.[срез учетных цен] srez
WHERE /* [Учетная цена] is null AND*/ [Период] = format(GETDATE(), 'yyyy-MM-dd')
UPDATE srez SET
[Количество] = (
SELECT
sum([Количество])
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] ss
where Статья in ('Ввод начальных остатков', 'Закупка', 'Реализация', 'НДС', 'Доставка контейнера ВЭД', 'Производство товара')
AND ss.[1c_id]=srez.[1c_id]
)
FROM analytics.[срез учетных цен] srez
WHERE /*[Количество] is null AND */[Период] = format(GETDATE(), 'yyyy-MM-dd')
UPDATE srez SET
[Учетная цена USD2+2] = (
SELECT
sum([Закупка, usd2])+sum(НДС/[Курс usd2])+sum(Доставка/[Курс usd2])+sum(Таможня/[Курс usd2])
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] ss
where Статья in ('Ввод начальных остатков', 'Закупка', 'Реализация', 'НДС', 'Доставка контейнера ВЭД', 'Производство товара')
AND ss.[1c_id]=srez.[1c_id]
)
FROM analytics.[срез учетных цен] srez
WHERE /*[Учетная цена USD2+2] is null AND*/ [Период] = format(GETDATE(), 'yyyy-MM-dd')
UPDATE analytics.[срез учетных цен] SET [Учетная цена] = [Учетная цена] / [Количество] WHERE [Период] = format(GETDATE(), 'yyyy-MM-dd') AND [Количество]>0
UPDATE analytics.[срез учетных цен] SET [Учетная цена USD2+2] = [Учетная цена USD2+2] / [Количество] WHERE [Период] = format(GETDATE(), 'yyyy-MM-dd') AND [Количество]>0
UPDATE analytics.[срез учетных цен] SET [Учетная цена USD2+2] = null WHERE [Период] = format(GETDATE(), 'yyyy-MM-dd') --AND [Количество]>0
-- обновляем учетку по закупкам, тк в продажах не было
/*
UPDATE p SET
[Учетная цена] =
( SELECT top 1 s.[Учетная цена]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[1c_id]=p.[1c_id] AND s.[Статья]='Закупка' AND s.[Вид операции]='Приход' AND s.[Учетная цена] > 0
ORDER by s.Период DESC
),
[Учетная цена USD2+2] =
( SELECT top 1 s.[Учетная цена USD2+2]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[1c_id]=p.[1c_id] AND s.[Статья]='Закупка' AND s.[Вид операции]='Приход' AND s.[Учетная цена USD2+2] > 0
ORDER by s.Период DESC)
FROM analytics.[срез учетных цен] p
WHERE [Учетная цена] is null
-- обновляем учетку по вводу начальных остатков
UPDATE p SET
[Учетная цена] =
( SELECT top 1 s.[Учетная цена]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[1c_id]=p.[1c_id] AND s.[Статья]='Ввод начальных остатков' AND s.[Вид операции]='Приход' AND s.[Учетная цена] > 0
ORDER by s.Период DESC
),
[Учетная цена USD2+2] =
( SELECT top 1 s.[Учетная цена USD2+2]
FROM [mag_pbi].[pbiProd].[СебестоимостьСводныйОт2022] s
WHERE s.[1c_id]=p.[1c_id] AND s.[Статья]='Ввод начальных остатков' AND s.[Вид операции]='Приход' AND s.[Учетная цена USD2+2] > 0
ORDER by s.Период DESC)
FROM analytics.[срез учетных цен] p
WHERE [Учетная цена] is null
*/
END
GO
/****** Object: StoredProcedure [pbiProd].[ЗаполнитьСебестоимостьСводныйОт2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[ЗаполнитьСебестоимостьСводныйОт2022]
-- Add the parameters for the stored procedure here
AS
BEGIN
DELETE FROM mag_pbi.[pbiProd].[СебестоимостьСводныйОт2022] WHERE 1=1
DBCC CHECKIDENT ('[pbiProd].[СебестоимостьСводныйОт2022]', RESEED, 0);
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьСводныйОт2022] (
[Период]
,[Статья]
,[Вид операции]
,[Хоз операция]
,[Организация]
,[Партнер]
,[PartnerId]
,[Контрагент]
,[Менеджер]
,[Тип документа]
,[Номер документа]
,[Валюта документа]
,[Ценовая группа]
,[1c_document_id]
,[1c_id]
,[artic_id]
,[Количество]
,[Сумма]
,[СуммаБезНДС]
,[СуммаРучнойСкидки]
,[СуммаАвтоСкидки]
,[Закупка]
,[Закупка, usd2]
,[Курс usd2]
,[Курс usd]
,[Таможня]
,[Учетная цена]
,[Учетная цена USD2+2]
,[Учетная стоимость]
,[Учетная стоимость USD2+2]
,[Заказ закрыт]
,[Номер заказа]
,[Доставка]
,[НДС]
,[Производство]
,[Code]
,[ЗатратыСкладХранение]
,[Приемка]
,[АтсМаркировка]
,[ВремяВыполненияМинут]
,[СборкаЗаказа]
,[КоличествоУпаковок]
,[Сумма скидки]
,[Сумма скидки USD2+2]
,[Доп расходы]
,[Доп расходы USD2+2]
)
SELECT -- TOP (100)
[Период]
,[Статья]
,[Вид операции]
,[Хоз операция]
,[Организация]
,[Партнер]
,[PartnerId]
,[Контрагент]
,[Менеджер]
,[Тип документа]
,[Номер документа]
,[Валюта документа]
,[Ценовая группа]
,[1c_document_id]
,ss.[1c_id]
,ss.[artic_id]
,[Количество]
,[Сумма]
,[СуммаБезНДС]
,[СуммаРучнойСкидки]
,[СуммаАвтоСкидки]
,[Закупка]
,[Закупка, usd2]
,[Курс usd2]
,[Курс usd]
,[Таможня]
,[Учетная цена]
,[Учетная цена USD2+2]
,[Учетная стоимость]
,[Учетная стоимость USD2+2]
,[Заказ закрыт]
,[Номер заказа]
,[Доставка]
,[НДС]
,[Производство]
,nom.[code]
,[ЗатратыСкладХранение]
,[Приемка]
,[АтсМаркировка]
,[ВремяВыполненияМинут]
,[СборкаЗаказа]
,[Количество] / CASE WHEN ISNULL(nom.[Базовая упаковка], 1) = 0 THEN
1
else
ISNULL(nom.[Базовая упаковка], 1)
END as [КоличествоУпаковок]
, [СуммаРучнойСкидки] + [СуммаАвтоСкидки] as [Сумма скидки]
, ([СуммаРучнойСкидки] + [СуммаАвтоСкидки]) / [Курс usd2] as [Сумма скидки USD2+2]
,[Доп расходы]
,[Доп расходы USD2+2]
FROM [mag_pbi].[pbiProd].[СводныйСебестоимость] as ss
LEFT JOIN [mag_pbi].[pbi].[nomenclature] as nom
on nom.artic_id = ss.artic_id
END
GO
/****** Object: StoredProcedure [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(АтсМаркировка)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(АтсМаркировка)]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @dtStart dateTime2;
DECLARE @dtEnd datetime2;
DECLARE @dtSqlStart dateTime2;
DECLARE @dtSqlEnd datetime2;
SET @dtStart = '2022-01-01'
SET @dtEnd= '2030-01-01'
SET @dtSqlStart = '4022-01-01'
SET @dtSqlEnd= '4030-01-01'
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьОт2022]
([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id], [artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] , [Производство], [ЗатратыМП], [НДС], [ЗатратыСкладХранение], [ЗатратыСкладЗарплата], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доставка USD2+2], [НДС USD2+2], [Таможня USD2+2], [Производство USD2+2]
)
SELECT -- top (1000)
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, [PartnerId]
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Производство]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка USD2+2]
, [НДС USD2+2]
, [Таможня USD2+2]
, [Производство USD2+2]
FROM (
-- \\\\\\\\\\\\\\\\\\\\ АТС МАРКИРОВКА \\\\\\\\\\\\\\\
SELECT -- TOP (1000)
DATEADD(year, -2000, tabAts.[Период]) as [Период]
, 'Атс маркировка' as [Статья]
, 'Приход' as [Вид операции]
, Null as [Хоз операция]
, 'Атс Маркировка товара' as [тип документа]
, AtsMark._Number as [Номер документа]
, '' as [Номер заказа]
, 'Руб' as [Валюта документа] -- Валюта документа
, 'Руб' as [Ценовая группа]
, tabAts.atsRef as [1c_document_id]
, Null as [Организация] -- Организация
, Null as [Партнер] -- партнер
, Null as [PartnerId]
, Null as [Контрагент] -- контрагент
, Null as [Менеджер] -- Менеджер
, tabAts.nom AS [1c_id] -- Номенклатура
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), tabAts.nom, 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), tabAts.nom, 2),21,4),'-',SUBSTRING(convert(nvarchar(36), tabAts.nom, 2),17,4),'-',SUBSTRING(convert(nvarchar(36), tabAts.nom, 2),1,4),'-',SUBSTRING(convert(nvarchar(36), tabAts.nom, 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= tabAts.[Период]
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= tabAts.[Период]
ORDER BY _Period desc ) as [Курс usd2]
, CAST(tabAts._Fld33656 as decimal(10,3)) as [Количество] -- Количество
, Null as [Сумма]
, Null as [СуммаБезНДС]
, Null as [СуммаРучнойСкидки]
, Null as [СуммаАвтоСкидки]
, Null as [Закупка]
, Null as [Закупка, usd2]
, Null as [Таможня]
, Null as [ЕАЭС]
, Null as [Доставка] -- доставка
, Null as [Производство] -- Сборка
, Null as [ЗатратыМП] -- Затраты мп
, Null as [НДС]
, Null as [ЗатратыСкладХранение] -- Затраты склад хранение
, Null as [ЗатратыСкладЗарплата] -- Затраты склад зарплата
, Null as Приемка
, tabAts.АтсМаркировка / 1000 AS [АтсМаркировка]
, CASE
WHEN DAY(AtsMark._Fld27693) <> DAY(AtsMark._Fld27694) THEN
(((20 - DATEPART(HOUR, AtsMark._Fld27693)) * 60 - DATEPART(MINUTE, AtsMark._Fld27693) - DATEPART(SECOND, AtsMark._Fld27693) / 60.0) +
((DATEDIFF(DAY, AtsMark._Fld27693, AtsMark._Fld27694) - 1) * 12 * 60) +
((DATEPART(HOUR, AtsMark._Fld27694) - 8) * 60 + DATEPART(MINUTE, AtsMark._Fld27694) + DATEPART(SECOND, AtsMark._Fld27694) / 60.0)) / SUM(tabAts._Fld33656) OVER (PARTITION BY tabAts.atsRef) * tabAts._Fld33656
ELSE
(DATEDIFF(MINUTE, AtsMark._Fld27693, AtsMark._Fld27694)) / SUM(tabAts._Fld33656) OVER (PARTITION BY tabAts.atsRef) * tabAts._Fld33656
END as [ВремяВыполненияМинут]
, Null as [СборкаЗаказа]
, Null as [Доставка USD2+2]
, Null as [НДС USD2+2]
, Null as [Таможня USD2+2]
, Null as [Производство USD2+2]
FROM (
SELECT
rnRaboti.[_Period] AS [Период],
rnRaboti.[_RecorderRRef] AS atsRef,
rnRaboti.[_Fld33653RRef] AS nom, -- Номенклатура
SUM(rnRaboti.[_Fld33658]) / 1000 AS [АтсМаркировка],
SUM(rnRaboti._Fld33656) AS [_Fld33656]
FROM [MAG_2019].[dbo].[_AccumRg33652] AS rnRaboti
WHERE 1 = 1
AND rnRaboti.[_RecorderTRef] = 0x00006C28
GROUP BY
rnRaboti.[_Period],
rnRaboti.[_RecorderRRef],
rnRaboti.[_Fld33653RRef]
) AS tabAts
INNER JOIN [MAG_2019].[dbo].[_Document27688] AS AtsMark
ON AtsMark.[_IDRRef] = tabAts.atsRef
AND AtsMark._Posted = 0x01
AND AtsMark._Fld27694 >= @dtStart
WHERE 1 = 1
and tabAts.[Период] >= @dtSqlStart
) as tabPriemka
END
GO
/****** Object: StoredProcedure [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(ДопРасходы)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(ДопРасходы)]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @dtStart dateTime2;
DECLARE @dtEnd datetime2;
DECLARE @dtSqlStart dateTime2;
DECLARE @dtSqlEnd datetime2;
SET @dtStart = '2022-01-01'
SET @dtEnd= '2030-01-01'
SET @dtSqlStart = '4022-01-01'
SET @dtSqlEnd= '4030-01-01'
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьОт2022]
([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id], [artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] , [Производство], [ЗатратыМП], [НДС], [ЗатратыСкладХранение], [ЗатратыСкладЗарплата], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доставка USD2+2], [НДС USD2+2], [Таможня USD2+2], [Производство USD2+2]
, [Доп расходы], [Доп расходы USD2+2]
)
SELECT -- top (1000)
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, [PartnerId]
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Производство]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка USD2+2]
, [НДС USD2+2]
, [Таможня USD2+2]
, [Производство USD2+2]
, [Доп расходы] as [Доп расходы]
, [Доп расходы] / [Курс usd2] as [Доп расходы USD2+2]
FROM (
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\ ДОП РАСХОДЫ \\\\\\\\\\\\\\\\
SELECT --TOP (1)
DATEADD(year, -2000, refPTU.[_Date_Time]) as [Период]
, 'Доп расходы' as [Статья]
, 'Приход' as [Вид операции]
, Null as [Хоз операция]
, 'ПТУ' as [тип документа]
, Null as [Номер документа]
, Null as [Номер заказа]
, val._Description as [Валюта документа]
, CASE
WHEN refNomenclatura._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Руб'
WHEN refNomenclatura._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Вал'
ELSE 'Неопределено'
END as [Ценовая группа]
, _Fld33630RRef as [1c_document_id]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = refPTU.[_Fld7121RRef] ) as [Организация]
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = refPTU.[_Fld7060RRef]) as [Партнер]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), refPTU.[_Fld7060RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), refPTU.[_Fld7060RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), refPTU.[_Fld7060RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), refPTU.[_Fld7060RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), refPTU.[_Fld7060RRef], 2),5,12) ))as PartnerId
, (SELECT TOP(1) _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = refPTU.[_Fld7064RRef]) as [Контрагент]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = refPTU.[_Fld7067RRef]) as [Менеджер]
, [_Fld33631RRef] as [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), [_Fld33631RRef], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), [_Fld33631RRef], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld33631RRef], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld33631RRef], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld33631RRef], 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= refPTU.[_Date_Time]
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= refPTU.[_Date_Time]
ORDER BY _Period desc ) as [Курс usd2]
, Null as [Количество]
, Null as [Сумма]
, Null as [СуммаБезНДС]
, Null as [СуммаРучнойСкидки]
, Null as [СуммаАвтоСкидки]
, Null as [Закупка]
, Null as [Закупка, usd2]
, Null as [Таможня]
, Null as [ЕАЭС]
, Null as [Доставка]
, Null as [Производство]
, Null as [ЗатратыМП]
, Null as [НДС]
, Null as [ЗатратыСкладХранение]
, Null as [ЗатратыСкладЗарплата]
, Null as [Приемка]
, Null as [АтсМаркировка]
, Null as [ВремяВыполненияМинут]
, Null as [СборкаЗаказа]
, Null as [Доставка USD2+2]
, Null as [НДС USD2+2]
, Null as [Таможня USD2+2]
, Null as [Производство USD2+2]
, [_Fld33633] / 1000 as [Доп расходы]
, 0 as [Доп расходы USD2+2]
FROM [MAG_2019].[dbo].[_InfoRg33629]
LEFT JOIN [MAG_2019].[dbo].[_Document483X1] as refPTU
ON refPTU.[_IDRRef] = [_Fld33630RRef]
-- LEFT JOIN [MAG_2019].[dbo].[_Document483_VT7128X1] as refPtuNomen
--ON refPtuNomen.[_Document483_IDRRef] = refPTU.[_IDRRef]
-- AND refPtuNomen.[_Fld7130RRef] = [_Fld33631RRef]
LEFT JOIN MAG_2019.dbo._reference50 val
ON val._IDRRef = refPTU.[_Fld7059RRef]
LEFT JOIN [MAG_2019].[dbo].[_Reference188X1] as refNomenclatura
ON refNomenclatura.[_IDRRef] = [_Fld33631RRef]
where [_Fld33634_RRRef] = 0x998DB49691D57EFD11F0366B9FA43F0B
and refPTU.[_Date_Time] >= @dtSqlStart
) as tabDopRashod
END
GO
/****** Object: StoredProcedure [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Доставка)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Доставка)]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @dtStart dateTime2;
DECLARE @dtEnd datetime2;
DECLARE @dtSqlStart dateTime2;
DECLARE @dtSqlEnd datetime2;
SET @dtStart = '2022-01-01'
SET @dtEnd= '2030-01-01'
SET @dtSqlStart = '4022-01-01'
SET @dtSqlEnd= '4030-01-01'
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьОт2022]
([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id], [artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] , [Производство], [ЗатратыМП], [НДС], [ЗатратыСкладХранение], [ЗатратыСкладЗарплата], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доставка USD2+2], [НДС USD2+2], [Таможня USD2+2], [Производство USD2+2]
)
SELECT -- top (1000)
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, [PartnerId]
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Производство]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка] / [Курс usd2] as [Доставка USD2+2]
, [НДС USD2+2]
, [Таможня USD2+2]
, [Производство USD2+2]
FROM (
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\ ДОСТАВКА \\\\\\\\\\\\\\\\
SELECT --TOP (1)
DATEADD(year, -2000, refPTU.[_Date_Time]) as [Период]
, 'Доставка контейнера ВЭД' as [Статья]
, 'Приход' as [Вид операции]
, Null as [Хоз операция]
, 'ПТУ' as [тип документа]
, Null as [Номер документа]
, Null as [Номер заказа]
, val._Description as [Валюта документа]
, CASE
WHEN refNomenclatura._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Руб'
WHEN refNomenclatura._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Вал'
ELSE 'Неопределено'
END as [Ценовая группа]
, _Fld33630RRef as [1c_document_id]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = refPTU.[_Fld7121RRef] ) as [Организация]
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = refPTU.[_Fld7060RRef]) as [Партнер]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), refPTU.[_Fld7060RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), refPTU.[_Fld7060RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), refPTU.[_Fld7060RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), refPTU.[_Fld7060RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), refPTU.[_Fld7060RRef], 2),5,12) ))as PartnerId
, (SELECT TOP(1) _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = refPTU.[_Fld7064RRef]) as [Контрагент]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = refPTU.[_Fld7067RRef]) as [Менеджер]
, [_Fld33631RRef] as [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), [_Fld33631RRef], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), [_Fld33631RRef], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld33631RRef], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld33631RRef], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld33631RRef], 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= refPTU.[_Date_Time]
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= refPTU.[_Date_Time]
ORDER BY _Period desc ) as [Курс usd2]
, Null as [Количество]
, Null as [Сумма]
, Null as [СуммаБезНДС]
, Null as [СуммаРучнойСкидки]
, Null as [СуммаАвтоСкидки]
, Null as [Закупка]
, Null as [Закупка, usd2]
, Null as [Таможня]
, Null as [ЕАЭС]
, [_Fld33633] / 1000 as [Доставка]
, Null as [Производство]
, Null as [ЗатратыМП]
, Null as [НДС]
, Null as [ЗатратыСкладХранение]
, Null as [ЗатратыСкладЗарплата]
, Null as [Приемка]
, Null as [АтсМаркировка]
, Null as [ВремяВыполненияМинут]
, Null as [СборкаЗаказа]
, Null as [Доставка USD2+2]
, Null as [НДС USD2+2]
, Null as [Таможня USD2+2]
, Null as [Производство USD2+2]
FROM [MAG_2019].[dbo].[_InfoRg33629]
LEFT JOIN [MAG_2019].[dbo].[_Document483X1] as refPTU
ON refPTU.[_IDRRef] = [_Fld33630RRef]
-- LEFT JOIN [MAG_2019].[dbo].[_Document483_VT7128X1] as refPtuNomen
--ON refPtuNomen.[_Document483_IDRRef] = refPTU.[_IDRRef]
-- AND refPtuNomen.[_Fld7130RRef] = [_Fld33631RRef]
LEFT JOIN MAG_2019.dbo._reference50 val
ON val._IDRRef = refPTU.[_Fld7059RRef]
LEFT JOIN [MAG_2019].[dbo].[_Reference188X1] as refNomenclatura
ON refNomenclatura.[_IDRRef] = [_Fld33631RRef]
where [_Fld33634_RRRef] = 0x997EB49691D57EFD11ECE1AC556F9FF0
and refPTU.[_Date_Time] >= @dtSqlStart
) as tabDostavka
END
GO
/****** Object: StoredProcedure [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Закупка)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Закупка)]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @dtStart dateTime2;
DECLARE @dtEnd datetime2;
DECLARE @dtSqlStart dateTime2;
DECLARE @dtSqlEnd datetime2;
SET @dtStart = '2022-01-01'
SET @dtEnd= '2030-01-01'
SET @dtSqlStart = '4022-01-01'
SET @dtSqlEnd= '4030-01-01'
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьОт2022]
([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id], [artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] ,[Производство] , [ЗатратыМП], [НДС], [ЗатратыСкладХранение], [ЗатратыСкладЗарплата], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доставка USD2+2], [НДС USD2+2], [Таможня USD2+2], [Производство USD2+2]
)
SELECT --top 1000
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, [PartnerId]
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка] / [Курс usd2] as [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Производство]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка] / [Курс usd2] as [Доставка USD2+2]
, [НДС] / [Курс usd2] as [НДС USD2+2]
, [Таможня] / [Курс usd2] as [Таможня USD2+2]
, [Производство] / [Курс usd2] as [Производство USD2+2]
FROM (
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\ ЗАКУПКИ \\\\\\\\\\\\\\\\
select --top (1)
DATEADD(year, -2000, _Period) as [Период]
, case
WHEN r._RecorderTRef=0x000001A1 or r._RecorderTRef=0x0000020D THEN 'НДС'
--WHEN r._RecorderTRef=0x000001A1 THEN 'ЕАЭС'
--WHEN r._RecorderTRef=0x0000020D THEN 'Таможня'
ELSE 'Закупка'
END
as [Статья]
, 'Приход' as [Вид операции]
, Null as [Хоз операция]
, case r._RecorderTRef
WHEN 0x000001A1 then 'Заявление о ввозе товаров из ЕАЭС'
WHEN 0x00000189 then 'Возврат товаров поставщику'
WHEN 0x000001E3 then 'ПТУ'
WHEN 0x000001D5 then 'Передача товаров'
WHEN 0x000001B0 then 'Корректировка '
WHEN 0x0000020D then 'Таможенная декларация на импорт'
ELSE 'Неизвестный тип'
END as [тип документа]
, Null as [Номер документа]
, Null as [Номер заказа]
, val._Description as [Валюта документа]
, CASE
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Руб'
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Вал'
WHEN r._RecorderTRef = 0x0000020D THEN 'Руб'
ELSE 'Неопределено'
END as [Ценовая группа]
, r._RecorderRRef as [1c_document_id]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = r._Fld16346RRef ) as [Организация]
, (SELECT TOP(1) _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = r.[_Fld16353RRef]) as [Партнер]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2),5,12) ))as PartnerId
, (SELECT TOP(1) _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = r._Fld16354_RRRef) as [Контрагент]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = [_Fld16348RRef]) as [Менеджер]
, analitikaUchetaNomenklaturi.[_Fld20498RRef] as [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
--WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= r._Period
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
--WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= r._Period
ORDER BY _Period desc ) as [Курс usd2]
, CASE WHEN r._RecorderTRef IN (0x000001E3, 0x00000189,0x000001D5, 0x000001B0) -- только для вида операция закупка
THEN
case [_Fld16345RRef]
when 0x970191967A54A8814BA45C6234640F68 /* возврат, берем с минусом */ THEN -[_Fld16361]
ELSE [_Fld16361] END
--WHEN r._RecorderTRef = 0x0000020D THEN customDeclaration._Fld8943
WHEN r._RecorderTRef = 0x0000020D THEN 0
--WHEN r._RecorderTRef=0x000001A1 THEN docEAS.[_Fld4052]
WHEN r._RecorderTRef=0x000001A1 THEN 0
ELSE 0 END
as [Количество]
, [_Fld16362] / 1000 as [Сумма]
, [_Fld16363] / 1000 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
, CASE WHEN r._RecorderTRef IN (0x000001E3, 0x00000189,0x000001D5, 0x000001B0) -- только для вида операция закупка
THEN
case [_Fld16345RRef]
when 0x970191967A54A8814BA45C6234640F68 /* возврат, берем с минусом */ THEN -[_Fld16362] / 1000
ELSE [_Fld16362] / 1000 END
ELSE 0 END
AS [Закупка]
, CASE WHEN r._RecorderTRef IN (0x000001E3, 0x00000189,0x000001D5, 0x000001B0) -- только для вида операция закупка поле "сумма в валюте документа"
THEN
case [_Fld16345RRef]
when 0x970191967A54A8814BA45C6234640F68 /* возврат, берем с минусом */ THEN -[_Fld16373] / 1000
ELSE [_Fld16373] / 1000 END
ELSE 0 END as [Закупка, usd2]
, CASE WHEN r._RecorderTRef=0x0000020D THEN [_Fld16369] / 1000 END as [Таможня]
, Null as [ЕАЭС]
, Null as [Доставка] -- доставка
, Null as [Производство] -- [Производство]
, Null as [ЗатратыМП] -- Затраты МП
, CASE WHEN r._RecorderTRef=0x000001A1 or r._RecorderTRef=0x0000020D THEN ([_Fld16362] - [_Fld16363]) / 1000
ELSE Null END as [НДС]
, Null as [ЗатратыСкладХранение] -- Затраты cклад хранение
, Null as [ЗатратыСкладЗарплата]-- Затраты cклад зарплаты
, Null as [Приемка]
, Null as [АтсМаркировка]
, Null as [ВремяВыполненияМинут]
, Null as [СборкаЗаказа]
from
mag_2019.dbo._AccumRg16344 r-- Регистр накопления Закупки
LEFT JOIN [MAG_2019].[dbo].[_Reference160] as analitikaUchetaNomenklaturi
on analitikaUchetaNomenklaturi.[_IDRRef] = [_Fld16349RRef]
LEFT JOIN MAG_2019.dbo._Reference188X1 as N
on analitikaUchetaNomenklaturi.[_Fld20498RRef] = N._IDRRef
LEFT JOIN MAG_2019.dbo._reference50 val
ON val._IDRRef = r._Fld16372RRef
LEFT JOIN [MAG_2019].[dbo].[_Document525_VT8936] as customDeclaration
ON customDeclaration.[_Document525_IDRRef] = [r]._RecorderRRef
and analitikaUchetaNomenklaturi.[_Fld20498RRef] = customDeclaration._Fld8939RRef
LEFT JOIN [MAG_2019].[dbo].[_Document417_VT4034] as docEAS
ON docEAS.[_Document417_IDRRef] = [r]._RecorderRRef
and [_Fld16349RRef] = docEAS.[_Fld4037RRef]
where _Period >= @dtSqlStart
) tabZakupki
END
GO
/****** Object: StoredProcedure [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(ЗатратыМП)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(ЗатратыМП)]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @dtStart dateTime2;
DECLARE @dtEnd datetime2;
DECLARE @dtSqlStart dateTime2;
DECLARE @dtSqlEnd datetime2;
SET @dtStart = '2022-01-01'
SET @dtEnd= '2030-01-01'
SET @dtSqlStart = '4022-01-01'
SET @dtSqlEnd= '4030-01-01'
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьОт2022]
([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id], [artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] ,[Производство] , [ЗатратыМП], [НДС], [ЗатратыСкладХранение], [ЗатратыСкладЗарплата], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доставка USD2+2], [НДС USD2+2], [Таможня USD2+2], [Производство USD2+2]
)
SELECT -- top (1000)
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, [PartnerId]
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Производство]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка USD2+2]
, [НДС USD2+2]
, [Таможня USD2+2]
, [Производство USD2+2]
FROM (
-- \\\\\\\\\\\\\\\\\\\\ ЗАТРАТЫ МП \\\\\\\\\\\\\\\
SELECT -- TOP (1000)
DATEADD(year, -2000, [_Period]) as [Период]
, 'Затраты МП' as [Статья]
, 'Приход' as [Вид операции]
, Null as [Хоз операция]
, 'Отчет комиссионера' as [тип документа]
, Null as [Номер документа]
, Null as [Номер заказа]
, 'Руб' as [Валюта документа]
, 'Руб' as [Ценовая группа]
, [_RecorderRRef] as [1c_document_id]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = otchetKommissionera.[_Fld5484RRef]) as [Организация]
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = otchetKommissionera.[_Fld5485RRef] ) as [Партнер]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), otchetKommissionera.[_Fld5485RRef] , 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), otchetKommissionera.[_Fld5485RRef] , 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), otchetKommissionera.[_Fld5485RRef] , 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), otchetKommissionera.[_Fld5485RRef] , 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), otchetKommissionera.[_Fld5485RRef] , 2),5,12) ))as PartnerId
, (SELECT TOP(1) _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = otchetKommissionera.[_Fld5486RRef]) as [Контрагент]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = otchetKommissionera.[_Fld5492RRef]) as [Менеджер]
, [_Fld33391RRef] as [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), [_Fld33391RRef], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), [_Fld33391RRef], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld33391RRef], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld33391RRef], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld33391RRef], 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= r.[_Period]
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= r.[_Period]
ORDER BY _Period desc ) as [Курс usd2]
, Null as [Количество]
, Null as [Сумма]
, Null as [СуммаБезНДС]
, Null as [СуммаРучнойСкидки]
, Null as [СуммаАвтоСкидки]
, Null as [Закупка]
, Null as [Закупка, usd2]
, Null as [Таможня]
, Null as [ЕАЭС]
, Null as [Доставка]
, Null as [Производство]
, [_Fld33394] / 1000 as [ЗатратыМП]
, Null as [НДС]
, Null as [ЗатратыСкладХранение]
, Null as [ЗатратыСкладЗарплата]
, Null as [Приемка]
, Null as [АтсМаркировка]
, Null as [ВремяВыполненияМинут]
, Null as [СборкаЗаказа]
, Null as [Доставка USD2+2]
, Null as [НДС USD2+2]
, Null as [Таможня USD2+2]
, Null as [Производство USD2+2]
FROM [MAG_2019].[dbo].[_AccumRg33390] as r
LEFT JOIN [MAG_2019].[dbo].[_Document458_VT5524] as otchetKommissioneraTabTovari
on otchetKommissioneraTabTovari.[_Fld5526RRef] = [_Fld33391RRef]
AND otchetKommissioneraTabTovari.[_Document458_IDRRef] = [_RecorderRRef]
LEFT JOIN [MAG_2019].[dbo].[_Document458] as otchetKommissionera
ON otchetKommissionera.[_IDRRef] = otchetKommissioneraTabTovari.[_Document458_IDRRef]
where [_Period] >= @dtSqlStart
) as tabZatratiMP
END
GO
/****** Object: StoredProcedure [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Перерасчет)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Перерасчет)]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @dtStart dateTime2;
DECLARE @dtEnd datetime2;
DECLARE @dtSqlStart dateTime2;
DECLARE @dtSqlEnd datetime2;
SET @dtStart = '2022-01-01'
SET @dtEnd= '2030-01-01'
SET @dtSqlStart = '4022-01-01'
SET @dtSqlEnd= '4030-01-01'
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьОт2022]
([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id], [artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] , [Производство], [ЗатратыМП], [НДС], [ЗатратыСкладХранение], [ЗатратыСкладЗарплата], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доставка USD2+2], [НДС USD2+2], [Таможня USD2+2], [Производство USD2+2]
)
SELECT --top (1000)
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, [PartnerId]
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Производство]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка USD2+2]
, [НДС USD2+2]
, [Таможня USD2+2]
, [Производство USD2+2]
FROM (
-- \\\\\\\\\\\\\\\\\\\\ СПИСАНИЕ ТОВАРОВ \\\\\\\\\\\\\\\
SELECT --top (555)
DATEADD(year, -2000, refSpisNedTov._Date_Time) as [Период]
, 'Списание товара' as [Статья]
, 'Расход' as [Вид операции]
, Null as [Хоз операция]
, 'Списание недостач' as [тип документа]
, refSpisNedTov._Number as [Номер документа]
, '' as [Номер заказа]
, 'Руб' as [Валюта документа] -- Валюта документа
, 'Руб' as [Ценовая группа]
, refSpisNedTov._IDRRef as [1c_document_id]
, Null as [Организация] -- Организация
, Null as [Партнер] -- партнер
, Null as [PartnerId]
, Null as [Контрагент] -- контрагент
, Null as [Менеджер] -- Менеджер
, tabSpisNedTov.[_Fld8532RRef] AS [1c_id] -- Номенклатура
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), tabSpisNedTov.[_Fld8532RRef], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), tabSpisNedTov.[_Fld8532RRef], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), tabSpisNedTov.[_Fld8532RRef], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), tabSpisNedTov.[_Fld8532RRef], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), tabSpisNedTov.[_Fld8532RRef], 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= refSpisNedTov._Date_Time
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= refSpisNedTov._Date_Time
ORDER BY _Period desc ) as [Курс usd2]
, CAST(tabSpisNedTov.[_Fld8535] as decimal(15,3)) as [Количество] -- Количество
, Null as [Сумма]
, Null as [СуммаБезНДС]
, Null as [СуммаРучнойСкидки]
, Null as [СуммаАвтоСкидки]
, Null as [Закупка]
, Null as [Закупка, usd2]
, Null as [Таможня]
, Null as [ЕАЭС]
, Null as [Доставка] -- доставка
, Null as [Производство] -- Сборка
, Null as [ЗатратыМП] -- Затраты мп
, Null as [НДС]
, Null as [ЗатратыСкладХранение] -- Затраты склад хранение
, Null as [ЗатратыСкладЗарплата] -- Затраты склад зарплата
, Null as Приемка
, Null as [АтсМаркировка]
, Null as [ВремяВыполненияМинут]
, Null as [СборкаЗаказа]
, Null as [Доставка USD2+2]
, Null as [НДС USD2+2]
, Null as [Таможня USD2+2]
, Null as [Производство USD2+2]
FROM [MAG_2019].[dbo].[_Document512_VT8530] as tabSpisNedTov
INNER JOIN [MAG_2019].[dbo].[_Document512] as refSpisNedTov
on refSpisNedTov._IDRRef = tabSpisNedTov._Document512_IDRRef
and refSpisNedTov._Posted = 1
-- \\\\\\\\\\\\\\\\\\\\ ОПРИХОДОВАНИЕ ИЗЛИШКОВ ТОВАРОВ \\\\\\\\\\\\\\\
UNION ALL
SELECT --top (1000)
DATEADD(year, -2000, refOprixTov._Date_Time) as [Период]
, 'Оприходование излишков товара' as [Статья]
, 'Приход' as [Вид операции]
, Null as [Хоз операция]
, 'Оприходование излишков' as [тип документа]
, refOprixTov._Number as [Номер документа]
, '' as [Номер заказа]
, 'Руб' as [Валюта документа] -- Валюта документа
, 'Руб' as [Ценовая группа]
, refOprixTov._IDRRef as [1c_document_id]
, Null as [Организация] -- Организация
, Null as [Партнер] -- партнер
, Null as [PartnerId]
, Null as [Контрагент] -- контрагент
, Null as [Менеджер] -- Менеджер
, tabOprixTov.[_Fld5171RRef] AS [1c_id] -- Номенклатура
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), tabOprixTov.[_Fld5171RRef], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), tabOprixTov.[_Fld5171RRef], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), tabOprixTov.[_Fld5171RRef], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), tabOprixTov.[_Fld5171RRef], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), tabOprixTov.[_Fld5171RRef], 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= refOprixTov._Date_Time
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= refOprixTov._Date_Time
ORDER BY _Period desc ) as [Курс usd2]
, CAST(tabOprixTov.[_Fld5174] as decimal(15,3)) as [Количество] -- Количество
, Null as [Сумма]
, Null as [СуммаБезНДС]
, Null as [СуммаРучнойСкидки]
, Null as [СуммаАвтоСкидки]
, Null as [Закупка]
, Null as [Закупка, usd2]
, Null as [Таможня]
, Null as [ЕАЭС]
, Null as [Доставка] -- доставка
, Null as [Производство] -- Сборка
, Null as [ЗатратыМП] -- Затраты мп
, Null as [НДС]
, Null as [ЗатратыСкладХранение] -- Затраты склад хранение
, Null as [ЗатратыСкладЗарплата] -- Затраты склад зарплата
, Null as Приемка
, Null as [АтсМаркировка]
, Null as [ВремяВыполненияМинут]
, Null as [СборкаЗаказа]
, Null as [Доставка USD2+2]
, Null as [НДС USD2+2]
, Null as [Таможня USD2+2]
, Null as [Производство USD2+2]
FROM [MAG_2019].[dbo].[_Document446_VT5169] as tabOprixTov
INNER JOIN [MAG_2019].[dbo].[_Document446] as refOprixTov
on refOprixTov._IDRRef = tabOprixTov.[_Document446_IDRRef]
and refOprixTov._Posted = 1
) as tabPereschet
END
GO
/****** Object: StoredProcedure [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(ПерерасчетСкладскойКонтур)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(ПерерасчетСкладскойКонтур)]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @dtStart dateTime2;
DECLARE @dtEnd datetime2;
DECLARE @dtSqlStart dateTime2;
DECLARE @dtSqlEnd datetime2;
SET @dtStart = '2022-01-01'
SET @dtEnd= '2030-01-01'
SET @dtSqlStart = '4022-01-01'
SET @dtSqlEnd= '4030-01-01'
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьОт2022]
([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id], [artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] , [Производство], [ЗатратыМП], [НДС], [ЗатратыСкладХранение], [ЗатратыСкладЗарплата], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доставка USD2+2], [НДС USD2+2], [Таможня USD2+2], [Производство USD2+2]
)
SELECT --top (1000)
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, [PartnerId]
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Производство]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка USD2+2]
, [НДС USD2+2]
, [Таможня USD2+2]
, [Производство USD2+2]
FROM (
-- \\\\\\\\\\\\\\\\\\\\ СПИСАНИЕ ТОВАРОВ \\\\\\\\\\\\\\\
SELECT --top (555)
DATEADD(year, -2000, RNtovariNaSkladah.[_Period]) as [Период]
, 'Пересчет товара' as [Статья]
, CASE WHEN [_RecordKind] = 1 THEN
'Расход'
ELSE
'Приход'
END as [Вид операции]
, Null as [Хоз операция]
, 'Списание недостач' as [тип документа]
, dokPereschet._Number as [Номер документа]
, '' as [Номер заказа]
, 'Руб' as [Валюта документа] -- Валюта документа
, 'Руб' as [Ценовая группа]
, [_RecorderRRef] as [1c_document_id]
, Null as [Организация] -- Организация
, Null as [Партнер] -- партнер
, Null as [PartnerId]
, Null as [Контрагент] -- контрагент
, Null as [Менеджер] -- Менеджер
, [_Fld17485RRef] AS [1c_id] -- Номенклатура
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), [_Fld17485RRef], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), [_Fld17485RRef], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld17485RRef], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld17485RRef], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld17485RRef], 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= RNtovariNaSkladah.[_Period]
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= RNtovariNaSkladah.[_Period]
ORDER BY _Period desc ) as [Курс usd2]
, CASE WHEN [_RecordKind] = 1 THEN
[_Fld17491] * -1
ELSE
[_Fld17491]
END as [Количество] -- Количество
, Null as [Сумма]
, Null as [СуммаБезНДС]
, Null as [СуммаРучнойСкидки]
, Null as [СуммаАвтоСкидки]
, Null as [Закупка]
, Null as [Закупка, usd2]
, Null as [Таможня]
, Null as [ЕАЭС]
, Null as [Доставка] -- доставка
, Null as [Производство] -- Сборка
, Null as [ЗатратыМП] -- Затраты мп
, Null as [НДС]
, Null as [ЗатратыСкладХранение] -- Затраты склад хранение
, Null as [ЗатратыСкладЗарплата] -- Затраты склад зарплата
, Null as Приемка
, Null as [АтсМаркировка]
, Null as [ВремяВыполненияМинут]
, Null as [СборкаЗаказа]
, Null as [Доставка USD2+2]
, Null as [НДС USD2+2]
, Null as [Таможня USD2+2]
, Null as [Производство USD2+2]
FROM [MAG_2019].[dbo].[_AccumRg17484] as RNtovariNaSkladah
LEFT JOIN [MAG_2019].[dbo].[_Document473X1] as dokPereschet
on dokPereschet._IDRRef = [_RecorderRRef]
where [_RecorderTRef] = 0x000001D9 -- Документ пересчет
and [_Period] > @dtSqlStart
) as tabPereschet
END
GO
/****** Object: StoredProcedure [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Приемка)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Приемка)]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @dtStart dateTime2;
DECLARE @dtEnd datetime2;
DECLARE @dtSqlStart dateTime2;
DECLARE @dtSqlEnd datetime2;
SET @dtStart = '2022-01-01'
SET @dtEnd= '2030-01-01'
SET @dtSqlStart = '4022-01-01'
SET @dtSqlEnd= '4030-01-01'
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьОт2022]
([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id], [artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] ,[Производство], [ЗатратыМП], [НДС], [ЗатратыСкладХранение], [ЗатратыСкладЗарплата], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доставка USD2+2], [НДС USD2+2], [Таможня USD2+2], [Производство USD2+2]
)
SELECT -- top (1000)
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, [PartnerId]
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Производство]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка USD2+2]
, [НДС USD2+2]
, [Таможня USD2+2]
, [Производство USD2+2]
FROM (
-- \\\\\\\\\\\\\\\\\\\\ ПРИЕМКА \\\\\\\\\\\\\\\
SELECT --top 1000
DATEADD(year, -2000, docOtbor._Date_Time) as [Период]
, 'Приемка товара' as [Статья]
, 'Приход' as [Вид операции]
, Null as [Хоз операция]
, 'Отбор (размещение) товара' as [тип документа]
, docOtbor._Number as [Номер документа]
, zakasPostavshiku._Number as [Номер заказа]
, 'Руб' as [Валюта документа] -- Валюта документа
, 'Руб' as [Ценовая группа]
, docOtbor._IDRRef as [1c_document_id]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = zakasPostavshiku._Fld3411RRef ) as [Организация]
, (SELECT TOP(1) _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = zakasPostavshiku._Fld3409RRef) as [Партнер]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), zakasPostavshiku._Fld3409RRef , 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), zakasPostavshiku._Fld3409RRef , 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), zakasPostavshiku._Fld3409RRef , 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), zakasPostavshiku._Fld3409RRef , 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), zakasPostavshiku._Fld3409RRef , 2),5,12) )) as [PartnerId]
, (SELECT TOP(1) _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = zakasPostavshiku._Fld3410RRef) as [Контрагент]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = zakasPostavshiku._Fld3415RRef) as [Менеджер]
, otborTabRazmeshenie._Fld5347RRef as [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), otborTabRazmeshenie._Fld5347RRef, 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), otborTabRazmeshenie._Fld5347RRef, 2),21,4),'-',SUBSTRING(convert(nvarchar(36), otborTabRazmeshenie._Fld5347RRef, 2),17,4),'-',SUBSTRING(convert(nvarchar(36), otborTabRazmeshenie._Fld5347RRef, 2),1,4),'-',SUBSTRING(convert(nvarchar(36), otborTabRazmeshenie._Fld5347RRef, 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= docOtbor._Date_Time
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= docOtbor._Date_Time
ORDER BY _Period desc ) as [Курс usd2]
, Null as [Количество] -- Количество
, Null as [Сумма]
, Null as [СуммаБезНДС]
, Null as [СуммаРучнойСкидки]
, Null as [СуммаАвтоСкидки]
, Null as [Закупка]
, Null as [Закупка, usd2]
, Null as [Таможня]
, Null as [ЕАЭС]
, Null as [Доставка] -- доставка
, Null as [Производство] -- Производство \\\ Сборка
, Null as [ЗатратыМП] -- Затраты мп
, Null as [НДС]
, Null as [ЗатратыСкладХранение] -- Затраты склад хранение
, Null as [ЗатратыСкладЗарплата] -- Затраты склад зарплата
, ((CASE
WHEN DAY(docOtbor._Fld5324) <> DAY(docOtbor._Fld5325) THEN
((20 - DATEPART(HOUR, docOtbor._Fld5324)) * 60 - DATEPART(MINUTE, docOtbor._Fld5324) - DATEPART(SECOND, docOtbor._Fld5324) / 60.0) +
((DATEDIFF(DAY, docOtbor._Fld5324, docOtbor._Fld5325) - 1) * 12 * 60) +
((DATEPART(HOUR, docOtbor._Fld5325) - 8) * 60 + DATEPART(MINUTE, docOtbor._Fld5325) + DATEPART(SECOND, docOtbor._Fld5325) / 60.0)
ELSE
DATEDIFF(SECOND, docOtbor._Fld5324, docOtbor._Fld5325) / 60.0
END * 3 / SUM(otborTabRazmeshenie._Fld5346 / ISNULL(upackovka.chislitel, 1)) over (partition by docOtbor._IDRRef)
* otborTabRazmeshenie._Fld5346 / ISNULL(upackovka.chislitel, 1)) +
((COUNT(*) over (partition by docOtbor._IDRRef) / 3000 + otborTabRazmeshenie._Fld5346 / ISNULL(upackovka.chislitel, 1) / 50000 +
(upackovka.ves * otborTabRazmeshenie._Fld5346 / ISNULL(upackovka.chislitel, 1) / 15000)) / 3 * 20000)) / 1000 AS [Приемка]
, Null as [АтсМаркировка]
, Null as [ВремяВыполненияМинут]
, Null as [СборкаЗаказа]
, Null as [Доставка USD2+2]
, Null as [НДС USD2+2]
, Null as [Таможня USD2+2]
, Null as [Производство USD2+2]
FROM
[MAG_2019].[dbo].[_Document453_VT5341X1] AS otborTabRazmeshenie
INNER JOIN [MAG_2019].[dbo].[_Document453X1] AS docOtbor
ON docOtbor._IDRRef = otborTabRazmeshenie._Document453_IDRRef
and docOtbor._Fld5316_RTRef = 0x000001E6 -- Фильтрация по псо
and docOtbor._Fld5325 >= @dtStart
and docOtbor._Fld5324 >= @dtStart
and docOtbor._Posted = 0x01
INNER JOIN [MAG_2019].[dbo].[_Document486] as docPSO
on docPSO._Fld7346_RTRef = 0x00000198 -- фильтрация по заказу поставщика
and docOtbor._Fld5316_RRRef = docPSO._IDRRef
LEFT JOIN [MAG_2019].[dbo].[_Document408X1] as zakasPostavshiku
on docPSO._Fld7346_RRRef = zakasPostavshiku._IDRRef
LEFT JOIN (
SELECT
upackovka._OwnerID_RRRef AS vladelec, -- Владелец
CASE WHEN upackovka._Fld24768 = 0 THEN
1
ELSE
ISNULL(upackovka._Fld24768, 1)
END AS chislitel, -- Числитель
upackovka._Fld24769 AS znamenatel, -- Знаменатель
CAST(CASE
WHEN 1 = 1 -- ВесИспользовать
AND upackovka._Fld24769 <> 0 -- Знаменатель
THEN upackovka._Fld24768 / upackovka._Fld24769
ELSE 0
END AS DECIMAL(15, 3)) AS ves
FROM
[MAG_2019].[dbo].[_Reference347X1] AS upackovka
WHERE
upackovka._Marked = 0 -- ПометкаУдаления
) AS upackovka
ON upackovka.vladelec = otborTabRazmeshenie._Fld5347RRef -- Сопоставление Номенклатуры и Владелец
WHERE
1=1
and ISNULL(otborTabRazmeshenie._Fld5346, 0) > 0
and docOtbor._Date_Time >= @dtSqlStart
) as tabPriemka
END
GO
/****** Object: StoredProcedure [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Продажи)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Продажи)]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @dtStart dateTime2;
DECLARE @dtEnd datetime2;
DECLARE @dtSqlStart dateTime2;
DECLARE @dtSqlEnd datetime2;
SET @dtStart = '2022-01-01'
SET @dtEnd= '2030-01-01'
SET @dtSqlStart = '4022-01-01'
SET @dtSqlEnd= '4030-01-01'
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьОт2022]
([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id], [artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] ,[Производство], [ЗатратыМП], [НДС], [ЗатратыСкладХранение], [ЗатратыСкладЗарплата], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доставка USD2+2], [НДС USD2+2], [Таможня USD2+2], [Производство USD2+2], [Заказ закрыт]
)
SELECT --top (1000)
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, [PartnerId]
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Производство]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка] / [Курс usd2] as [Доставка USD2+2]
, [НДС USD2+2]
, [Таможня USD2+2]
, [Производство USD2+2]
, [Заказ закрыт]
FROM (
-- ///////////////// ПРОДАЖИ ////////////////
SELECT --TOP (1)
DATEADD(year, -2000, [_Period]) as [Период]
, 'Реализация' as [Статья]
, 'Расход' as [Вид операции]
, Null as [Хоз операция]
, case [_RecorderTRef]
WHEN 0x000001F4 then 'РТУ'
ELSE 'Неизвестный тип'
END [тип документа]
, docRTU.[_Number] as [Номер документа]
, orders.[_Number] as [Номер заказа]
, val._Description as [Валюта документа]
, CASE
WHEN refNomenclatura._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Руб'
WHEN refNomenclatura._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Вал'
ELSE 'Неопределено'
END as [Ценовая группа]
, [_RecorderRRef] as [1c_document_id]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = AnalitikaUchetaPartner.[_Fld20514RRef] ) as [Организация]
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = AnalitikaUchetaPartner.[_Fld20513RRef]) as [Партнер]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), AnalitikaUchetaPartner.[_Fld20513RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), AnalitikaUchetaPartner.[_Fld20513RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), AnalitikaUchetaPartner.[_Fld20513RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), AnalitikaUchetaPartner.[_Fld20513RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), AnalitikaUchetaPartner.[_Fld20513RRef], 2),5,12) ))as PartnerId
, (SELECT TOP(1) _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = AnalitikaUchetaPartner.[_Fld20515_RRRef]) as [Контрагент]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = orders._Fld3138RRef) as [Менеджер]
, analitikaUchetaNomenklaturi.[_Fld20498RRef] as [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef] , 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef] , 2),21,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef] , 2),17,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef] , 2),1,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef] , 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= r.[_Period]
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= r.[_Period]
ORDER BY _Period desc ) as [Курс usd2]
, [_Fld15567] as [Количество]
, [_Fld15568] / 1000 as [Сумма]
, Null as [СуммаБезНДС]
, [_Fld15595] / 1000 as [СуммаРучнойСкидки]
, [_Fld15596] / 1000 as [СуммаАвтоСкидки]
, Null as [Закупка]
, Null as [Закупка, usd2]
, Null as [Таможня]
, Null as [ЕАЭС]
, Null as [Доставка]
, Null as [Производство]
, Null as [ЗатратыМП]
, Null as [НДС]
, Null as [ЗатратыСкладХранение]
, Null as [ЗатратыСкладЗарплата]
, Null as [Приемка]
, Null as [АтсМаркировка]
, Null as [ВремяВыполненияМинут]
, Null as [СборкаЗаказа]
, Null as [Доставка USD2+2]
, Null as [НДС USD2+2]
, Null as [Таможня USD2+2]
, Null as [Производство USD2+2]
, DATEADD(year, -2000, SostZakazaClienta.DateClose) as [Заказ закрыт]
FROM [MAG_2019].[dbo].[_AccumRg15547] as r
LEFT JOIN [MAG_2019].[dbo].[_Reference160] as analitikaUchetaNomenklaturi
on analitikaUchetaNomenklaturi.[_IDRRef] = [_Fld15548RRef]
LEFT JOIN [MAG_2019].[dbo].[_Reference162] as AnalitikaUchetaPartner
on AnalitikaUchetaPartner.[_IDRRef] = [_Fld15550RRef]
LEFT JOIN [MAG_2019].[dbo].[_Document500X1] as docRTU
on docRTU.[_IDRRef] = [_RecorderRRef]
LEFT JOIN (SELECT
[_Document500_IDRRef] as _IDRRef
,MIN([_Fld7990_RRRef]) as orderRTU
FROM [MAG_2019].[dbo].[_Document500_VT7967X1]
GROUP BY
[_Document500_IDRRef]) as ordersRTU
ON ordersRTU._IDRRef = [_RecorderRRef]
LEFT JOIN [MAG_2019].[dbo].[_Document404X1] as orders
ON orders.[_IDRRef] = ordersRTU.orderRTU
LEFT JOIN (SELECT --TOP (1000)
MIN([_Period]) as DateClose
,[_Fld28369_RRRef] as zakazrref
FROM [MAG_2019].[dbo].[_InfoRg28368]
where [_Fld28370_RRRef] = 0x9AE0BC17F922537141FF55A099D7C9C4
GROUP BY
[_Fld28369_RRRef]) as SostZakazaClienta
ON SostZakazaClienta.zakazrref = orders.[_IDRRef]
LEFT JOIN [MAG_2019].[dbo].[_Reference188X1] as refNomenclatura
ON refNomenclatura.[_IDRRef] = analitikaUchetaNomenklaturi.[_Fld20498RRef]
LEFT JOIN MAG_2019.dbo._reference50 val
ON val._IDRRef = [_Fld15601RRef]
where r.[_Period] >= @dtSqlStart
) as tabProdaji
END
GO
/****** Object: StoredProcedure [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Производство)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Производство)]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @dtStart dateTime2;
DECLARE @dtEnd datetime2;
DECLARE @dtSqlStart dateTime2;
DECLARE @dtSqlEnd datetime2;
SET @dtStart = '2022-01-01'
SET @dtEnd= '2030-01-01'
SET @dtSqlStart = '4022-01-01'
SET @dtSqlEnd= '4030-01-01'
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьОт2022]
([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id], [artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] ,[Производство], [ЗатратыМП], [НДС], [ЗатратыСкладХранение], [ЗатратыСкладЗарплата], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доставка USD2+2], [НДС USD2+2], [Таможня USD2+2], [Производство USD2+2]
)
SELECT -- top (1000)
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, [PartnerId]
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка] / [Курс usd2] as [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Производство]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка USD2+2]
, [НДС USD2+2]
, [Таможня USD2+2]
, [Производство] / [Курс usd2] as [Производство USD2+2]
FROM (
-- \\\\\\\\\\\\\\\\ СБОРКА РАСХОД БЕЗ ЗАТРАТ НА СБОРКУ\\\\\\\\\\\\\\\\
SELECT --TOP (1000)
DATEADD(year, -2000, znS.[_Date_Time]) as [Период]
, 'Производство товара' as [Статья]
, 'Расход' as [Вид операции]
, Null as [Хоз операция]
, 'Заказ на сборку' as [тип документа]
, Null as [Номер документа]
, Null as [Номер заказа]
, 'Руб' as [Валюта документа]
, 'Руб' as [Ценовая группа]
, TabGoods.[_Document407_IDRRef] as [1c_document_id]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = ZnS.[_Fld3348RRef] ) as [Организация]
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = Kontr.[_Fld20612RRef]) as [Партнер]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), Kontr.[_Fld20612RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), Kontr.[_Fld20612RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), Kontr.[_Fld20612RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), Kontr.[_Fld20612RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), Kontr.[_Fld20612RRef], 2),5,12) ))as PartnerId
, (SELECT TOP(1) _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = ZnS.[_Fld27876RRef]) as [Контрагент]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = ZnS.[_Fld28230RRef]) as [Менеджер]
, [_Fld3381RRef] as [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), [_Fld3381RRef], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), [_Fld3381RRef], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld3381RRef], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld3381RRef], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld3381RRef], 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= znS.[_Date_Time]
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= znS.[_Date_Time]
ORDER BY _Period desc ) as [Курс usd2]
, [_Fld3385] as [Количество]
, Null as [Сумма]
, Null as [СуммаБезНДС]
, Null as [СуммаРучнойСкидки]
, Null as [СуммаАвтоСкидки]
--, (SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
-- WHERE [Вид цены] = 'Учетная цена (руб)'
-- AND [Дата] <= znS.[_Date_Time]
-- and [_Fld3381RRef] = [1c_id]
-- ORDER BY Дата desc ) / 1000 * [_Fld3385] * -1
, Null as [Закупка]
, Null as [Закупка, usd2]
, Null as [Таможня]
, Null as [ЕАЭС]
, Null as [Доставка]
, Null as [Производство]
, Null as [ЗатратыМП]
, Null as [НДС]
, Null as [ЗатратыСкладХранение]
, Null as [ЗатратыСкладЗарплата]
, Null as [Приемка]
, Null as [АтсМаркировка]
, Null as [ВремяВыполненияМинут]
, Null as [СборкаЗаказа]
, Null as [Доставка USD2+2]
, Null as [НДС USD2+2]
, Null as [Таможня USD2+2]
, Null as [Производство USD2+2]
FROM [MAG_2019].[dbo].[_Document407_VT3379X1] as TabGoods
INNER JOIN [MAG_2019].[dbo].[_Document407X1] as ZnS -- Заказ на сборку
on ZnS._IDRRef = [_Document407_IDRRef]
and _Posted = 0x01 -- проведен
-- and [_Number] = 'АНУТ-010680' -- номер дока для проверки
and [_Fld3352RRef] = 0x97266ED3BEFAB868480833CDF0FCF236 -- статус Закрыт
LEFT JOIN [MAG_2019].[dbo].[_Reference168] as Kontr
ON Kontr.[_IDRRef] = ZnS.[_Fld27876RRef]
where znS.[_Date_Time] >= @dtSqlStart
and TabGoods.[_Fld3392] = 0x00 -- отменено ложь
UNION ALL
-- \\\\\\\\\\\\\\\\ СБОРКА ПРИХОД + ЗАТРАТЫ НА СБОРКУ \\\\\\\\\\\\\\\\
SELECT -- top 1000
DATEADD(year, -2000, znS.[_Date_Time]) as [Период]
, 'Производство товара' as [Статья]
, 'Приход' as [Вид операции]
, Null as [Хоз операция]
, 'Заказ на сборку' as [тип документа]
, Null as [Номер документа]
, ZnS._Number as [Номер заказа]
, 'Руб' as [Валюта документа]
, 'Руб' as [Ценовая группа]
, [табКомплекты].[_Document407_IDRRef] as [1c_document_id]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = ZnS.[_Fld3348RRef] ) as [Организация]
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = Kontr.[_Fld20612RRef]) as [Партнер]
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), Kontr.[_Fld20612RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), Kontr.[_Fld20612RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), Kontr.[_Fld20612RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), Kontr.[_Fld20612RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), Kontr.[_Fld20612RRef], 2),5,12) ))as PartnerId
, (SELECT TOP(1) _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = ZnS.[_Fld27876RRef]) as [Контрагент]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = ZnS.[_Fld28230RRef]) as [Менеджер]
, [табКомплекты].[_Fld28059RRef] as [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), [табКомплекты].[_Fld28059RRef], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), [табКомплекты].[_Fld28059RRef], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), [табКомплекты].[_Fld28059RRef], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), [табКомплекты].[_Fld28059RRef], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), [табКомплекты].[_Fld28059RRef], 2),5,12))) as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= znS.[_Date_Time]
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND _Period <= znS.[_Date_Time]
ORDER BY _Period desc ) as [Курс usd2]
, [табКомплекты].[_Fld28063] as [Количество]
, Null as [Сумма]
, Null as [СуммаБезНДС]
, Null as [СуммаРучнойСкидки]
, Null as [СуммаАвтоСкидки]
, [табКомплектующие].Закупка as Закупка -- Новый не костыль
, Null as [Закупка, usd2]
, Null as [Таможня]
, Null as [ЕАЭС]
, Null as [Доставка]
, TabZatratiSborka.sborka / 1000 as [Производство]
, Null as [ЗатратыМП]
, Null as [НДС]
, Null as [ЗатратыСкладХранение]
, Null as [ЗатратыСкладЗарплата]
, Null as [Приемка]
, Null as [АтсМаркировка]
, Null as [ВремяВыполненияМинут]
, Null as [СборкаЗаказа]
, Null as [Доставка USD2+2]
, Null as [НДС USD2+2]
, Null as [Таможня USD2+2]
, Null as [Производство USD2+2]
FROM [MAG_2019].[dbo]._Document407_VT28057X1 as [табКомплекты] -- список товаров к поступлению ...
INNER JOIN [MAG_2019].[dbo].[_Document407X1] as ZnS -- Заказ на сборку
on ZnS._IDRRef = [табКомплекты].[_Document407_IDRRef]
and _Posted = 0x01 -- проведен
and [_Fld3352RRef] = 0x97266ED3BEFAB868480833CDF0FCF236 -- статус Закрыт
LEFT JOIN (SELECT --top 500
SUM(tabItog.[Закупка]) as [Закупка]
, tabItog.[КодСтрокиКомплекта]
, [ZnSRref] as [ZnSRref]
FROM (
SELECT
(SELECT TOP 1 [Учетная цена] FROM [mag_pbi].[pbiProd].[СебестоимостьПроизводствоОт2022]
WHERE [Период] <= znS.[_Date_Time]
and [1c_id] = [табКомплектующие]._Fld3381RRef
ORDER BY [Период] desc ) * [_Fld3385] as [Закупка]
,[табКомплектующие].[_Fld28055] as [КодСтрокиКомплекта]
, ZnS._IDRRef as [ZnSRref]
FROM [MAG_2019].[dbo].[_Document407_VT3379X1] as [табКомплектующие] -- в конфе это тч Товары, здесь лежит список товаров на ВХОД и Вариант комплектации ...
--ON [табКомплектующие]._Document407_IDRRef = [табКомплекты].[_Document407_IDRRef]
--and [табКомплектующие]
INNER JOIN [MAG_2019].[dbo].[_Document407X1] as ZnS -- Заказ на сборку
on ZnS._IDRRef = [табКомплектующие].[_Document407_IDRRef]
and _Posted = 0x01 -- проведен
and [_Fld3352RRef] = 0x97266ED3BEFAB868480833CDF0FCF236 -- статус Закрыт
) as tabItog
GROUP BY
tabItog.[КодСтрокиКомплекта]
, [ZnSRref]
) as [табКомплектующие] -- в конфе это тч Товары, здесь лежит список товаров на ВХОД и Вариант комплектации ...
ON [табКомплектующие].КодСтрокиКомплекта = [табКомплекты].[_Fld28070]
and [табКомплектующие].ZnSRref = [табКомплекты].[_Document407_IDRRef]
LEFT JOIN [MAG_2019].[dbo].[_Reference168] as Kontr
ON Kontr.[_IDRRef] = ZnS.[_Fld27876RRef]
LEFT JOIN (SELECT --TOP (1000)
[_RecorderRRef] -- регистратор
, [_Fld33653RRef] -- Номенклатура
, SUM([_Fld33658]) / 1000 as sborka -- сборка
FROM [MAG_2019].[dbo].[_AccumRg33652] -- рн работы
where [_RecorderTRef] = 0x00000197
group by
[_RecorderRRef]
, [_Fld33653RRef] -- Номенклатура
) as TabZatratiSborka
ON TabZatratiSborka.[_RecorderRRef] = [табКомплекты].[_Document407_IDRRef]
and TabZatratiSborka.[_Fld33653RRef] = [табКомплекты].[_Fld28059RRef]
where 1=1
and [табКомплекты].[_Fld28152] = 0x00 -- отменено ложь
and znS.[_Date_Time] >= @dtSqlStart
--and tabSet.[_Fld28059RRef] = 0x9987B49691D57EFD11EEE1296BB584D6
--and ZnS._Number = 'АНУТ-007990'
--and znS.[_Date_Time] >= @dtSqlStart
) as tabProizvodstvo
END
GO
/****** Object: StoredProcedure [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Сборка)] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Пакетное: Заполнить себестоимостьОт2022(Сборка)]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @dtStart dateTime2;
DECLARE @dtEnd datetime2;
DECLARE @dtSqlStart dateTime2;
DECLARE @dtSqlEnd datetime2;
SET @dtStart = '2022-01-01'
SET @dtEnd= '2030-01-01'
SET @dtSqlStart = '4022-01-01'
SET @dtSqlEnd= '4030-01-01'
INSERT INTO mag_pbi.[pbiProd].[СебестоимостьОт2022]
([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id], [artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] ,[Производство], [ЗатратыМП], [НДС], [ЗатратыСкладХранение], [ЗатратыСкладЗарплата], [Приемка],
[АтсМаркировка], [ВремяВыполненияМинут], [СборкаЗаказа], [Доставка USD2+2], [НДС USD2+2], [Таможня USD2+2], [Производство USD2+2]
)
SELECT -- top (1000)
[Период]
, [Статья]
, [Вид операции]
, [Хоз операция]
, [тип документа]
, [Номер документа]
, [Номер заказа]
, [Валюта документа]
, [Ценовая группа]
, [1c_document_id]
, [Организация]
, [Партнер]
, [PartnerId]
, [Контрагент]
, [Менеджер]
, [1c_id]
, [artic_id]
, [Курс usd]
, [Курс usd2]
, [Количество]
, [Сумма]
, [СуммаБезНДС]
, [СуммаРучнойСкидки]
, [СуммаАвтоСкидки]
, [Закупка]
, [Закупка, usd2]
, [Таможня]
, [ЕАЭС]
, [Доставка]
, [Производство]
, [ЗатратыМП]
, [НДС]
, [ЗатратыСкладХранение]
, [ЗатратыСкладЗарплата]
, [Приемка]
, [АтсМаркировка]
, [ВремяВыполненияМинут]
, [СборкаЗаказа]
, [Доставка USD2+2] as [Доставка USD2+2]
, [НДС USD2+2]
, [Таможня USD2+2]
, [Производство] / [Курс usd2] as [Производство USD2+2]
FROM (
-- \\\\\\\\\\\\\\\\\\\\ СБОРКА ЗАКАЗА КЛИЕНТА \\\\\\\\\\\\\\\
SELECT --TOP (100000)
DATEADD(year, -2000, docOtbor._Date_Time) as [Период]
, 'Сборка заказа' as [Статья]
, 'Приход' as [Вид операции]
, Null as [Хоз операция]
, 'Отбор (отбор) товара' as [тип документа]
, docOtbor._Number as [Номер документа]
, docZakazKlienta._Number as [Номер заказа]
, 'Руб' as [Валюта документа] -- Валюта документа
, 'Руб' as [Ценовая группа]
, docOtbor._IDRRef as [1c_document_id]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = docZakazKlienta._Fld3129RRef ) as [Организация]
, (SELECT TOP(1)_description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = docZakazKlienta._Fld3127RRef) as [Партнер]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), docZakazKlienta._Fld3127RRef, 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), docZakazKlienta._Fld3127RRef, 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), docZakazKlienta._Fld3127RRef, 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), docZakazKlienta._Fld3127RRef, 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), docZakazKlienta._Fld3127RRef, 2),5,12) )) as [PartnerId]
, (SELECT TOP(1) _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = docZakazKlienta._Fld3128RRef) as [Контрагент]
, (SELECT TOP(1) _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = docZakazKlienta._Fld3138RRef) as [Менеджер]
, [_Fld5332RRef] as [1c_id] -- Номенклатура
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), [_Fld5332RRef], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), [_Fld5332RRef], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld5332RRef], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld5332RRef], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), [_Fld5332RRef], 2),5,12))) as [artic_id]
--, '' as [artic_id]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
--WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= docOtbor._Date_Time
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
--WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND _Period <= docOtbor._Date_Time
ORDER BY _Period desc ) as [Курс usd2]
, CAST([_Fld5330] as decimal(10,3)) as [Количество] -- Количество
, Null as [Сумма]
, Null as [СуммаБезНДС]
, Null as [СуммаРучнойСкидки]
, Null as [СуммаАвтоСкидки]
, Null as [Закупка]
, Null as [Закупка, usd2]
, Null as [Таможня]
, Null as [ЕАЭС]
, Null as [Доставка] -- доставка
, Null as [Производство] -- Сборка
, Null as [ЗатратыМП] -- Затраты мп
, Null as [НДС]
, Null as [ЗатратыСкладХранение] -- Затраты склад хранение
, Null as [ЗатратыСкладЗарплата] -- Затраты склад зарплата
, Null as [Приемка]
, Null as [АтсМаркировка]
, CASE
WHEN DAY(docOtbor.[_Fld5324]) <> DAY(docOtbor.[_Fld5325]) THEN
(((20 - DATEPART(HOUR, docOtbor.[_Fld5324])) * 60 - DATEPART(MINUTE, docOtbor.[_Fld5324]) - DATEPART(SECOND, docOtbor.[_Fld5324]) / 60.0) +
((DATEDIFF(DAY, docOtbor.[_Fld5324], docOtbor.[_Fld5325]) - 1) * 12 * 60) +
((DATEPART(HOUR, docOtbor.[_Fld5325]) - 8) * 60 + DATEPART(MINUTE, docOtbor.[_Fld5325]) + DATEPART(SECOND, docOtbor.[_Fld5325]) / 60.0)) / SUM([_Fld5330]) over (partition by [_Document453_IDRRef]) * [_Fld5330]
ELSE
(DATEDIFF(SECOND, docOtbor.[_Fld5324], docOtbor.[_Fld5325]) / 60.0) / SUM([_Fld5330]) over (partition by [_Document453_IDRRef]) * [_Fld5330]
END as [ВремяВыполненияМинут]
, ((SUM(1) over (partition by [_Document453_IDRRef]) / 5000 + [_Fld5330] / 20000)/2*30000) / 1000 as СборкаЗаказа
, Null as [Доставка USD2+2]
, Null as [НДС USD2+2]
, Null as [Таможня USD2+2]
, Null as [Производство USD2+2]
FROM [MAG_2019].[dbo].[_Document453_VT5326X1] as OtborTabOtbor
INNER JOIN [MAG_2019].[dbo].[_Document453X1] as docOtbor
ON docOtbor.[_IDRRef] = [_Document453_IDRRef]
and docOtbor._Posted = 0x01
and docOtbor._Fld5325 >= @dtStart
and docOtbor._Fld5324 >= @dtStart
and docOtbor.[_Fld5316_RTRef] = 0x000001F0 -- RSO
INNER JOIN [MAG_2019].[dbo].[_Document496X1] as docRSO
on docOtbor._Fld5316_RRRef = docRSO._IDRRef
and docRSO.[_Fld27744_RTRef] = 0x00000194 -- zakaz klienta
LEFT JOIN [MAG_2019].[dbo].[_Document404X1] as docZakazKlienta
on docRSO.[_Fld27744_RRRef] = docZakazKlienta._IDRRef
WHERE 1=1
and docOtbor._Date_Time >= @dtSqlStart
) as tabSborka
END
GO
/****** Object: StoredProcedure [pbiProd].[Пакетное: Подготовка таблицы СебестоимостьОт2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Пакетное: Подготовка таблицы СебестоимостьОт2022]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DELETE FROM mag_pbi.pbiProd.[СебестоимостьОт2022] WHERE 1=1
DBCC CHECKIDENT ('[pbiProd].[СебестоимостьОт2022]', RESEED, 0);
END
GO
/****** Object: StoredProcedure [pbiProd].[Подготовка Производство: Дозаполнить уровни по ЗНС Приход] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Подготовка Производство: Дозаполнить уровни по ЗНС Приход]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO mag_pbi.[pbiProd].[НоменклатураВПроизводствеПоУровням]
([1c_id], [УровеньПроизводства])
SELECT
tabNomLVL.[1c_id] as [1c_id]
, ISNULL(tabZNS.[УровеньПроизводства], 1) as [УровеньПроизводства]
FROM (
SELECT
_OwnerIDRRef as [1c_id]
FROM
[MAG_2019].[dbo].[_Reference54]
LEFT JOIN [mag_pbi].[pbiProd].[НоменклатураВПроизводствеПоУровням] as NomLvl
on NomLvl.[1c_id] = _OwnerIDRRef
WHERE
NomLvl.[УровеньПроизводства] IS NULL) as tabNomLVL
LEFT JOIN (
SELECT
TabGoods.[_Fld3381RRef] as [1c_id]
, 2 as [УровеньПроизводства]
FROM [MAG_2019].[dbo].[_Document407_VT3379] as TabGoods
--INNER JOIN [MAG_2019].[dbo].[_Document407] as ZnS -- Заказ на сборку
-- on ZnS._IDRRef = [_Document407_IDRRef]
-- and _Posted = 0x01 -- проведен
-- and [_Fld3352RRef] = 0x97266ED3BEFAB868480833CDF0FCF236 -- статус Закрыт
where [_Fld3392] = 0x00 -- отменено ложь
GROUP BY
TabGoods.[_Fld3381RRef]
) as tabZNS
ON 1=1
and tabZNS.[1c_id] = tabNomLVL.[1c_id]
END
GO
/****** Object: StoredProcedure [pbiProd].[Подготовка Производство: Дозаполнить уровни по ЗНС Расход] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Подготовка Производство: Дозаполнить уровни по ЗНС Расход]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO mag_pbi.[pbiProd].[НоменклатураВПроизводствеПоУровням]
([1c_id], [УровеньПроизводства])
SELECT DISTINCT
[_Fld3381RRef] as [1c_id]
, 0 as [УровеньПроизводства]
FROM [MAG_2019].[dbo].[_Document407_VT3379] as TabGoods
WHERE [_Fld3381RRef] NOT IN ( SELECT NomLVL.[1c_id] FROM [mag_pbi].[pbiProd].[НоменклатураВПроизводствеПоУровням] as NomLVL)
END
GO
/****** Object: StoredProcedure [pbiProd].[Подготовка Производство: единая процедура для подготовки] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Подготовка Производство: единая процедура для подготовки]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DELETE FROM [pbiProd].[СебестоимостьПроизводствоОт2022]
WHERE 1=1
DELETE FROM [pbiProd].[НоменклатураВПроизводствеПоУровням]
WHERE 1=1
exec [pbiProd].[Подготовка Производство: Заполнить уровень 0]
exec [pbiProd].[Подготовка Производство: Заполнить уровень 1]
exec [pbiProd].[Подготовка Производство: Заполнить уровень 2]
exec [pbiProd].[Подготовка Производство: Заполнить уровень 3]
exec [pbiProd].[Подготовка Производство: Дозаполнить уровни по ЗНС Расход]
exec [pbiProd].[Подготовка Производство: Дозаполнить уровни по ЗНС Приход];
WITH CTE AS (
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY УровеньПроизводства
ORDER BY ID -- или другая логика сортировки внутри группы
) AS RowNumNew
FROM
[pbiProd].[НоменклатураВПроизводствеПоУровням]
)
UPDATE CTE
SET RowNum = RowNumNew
END
GO
/****** Object: StoredProcedure [pbiProd].[Подготовка Производство: Заполнить уровень 0] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Подготовка Производство: Заполнить уровень 0]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO mag_pbi.[pbiProd].[НоменклатураВПроизводствеПоУровням]
([1c_id], [УровеньПроизводства])
SELECT DISTINCT--TOP (1000)
[_Fld18241RRef] as [1c_id]
, 0 as [УровеньПроизводства]
FROM [MAG_2019].[dbo].[_Reference54_VT18239]
where [_Fld18241RRef] NOT IN (SELECT
[_OwnerIDRRef]
FROM [MAG_2019].[dbo].[_Reference54])
END
GO
/****** Object: StoredProcedure [pbiProd].[Подготовка Производство: Заполнить уровень 1] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Подготовка Производство: Заполнить уровень 1]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO mag_pbi.[pbiProd].[НоменклатураВПроизводствеПоУровням]
([1c_id], [УровеньПроизводства])
SELECT
tabItog.nomVlad as [1c_id]
, 1 as [УровеньПроизводства]
FROM (
SELECT DISTINCT
refKomplekt._OwnerIDRRef as nomVlad
, MAX(ISNULL(NomLvl.[УровеньПроизводства], 99)) as [УровеньПроизводства]
FROM [MAG_2019].[dbo].[_Reference54_VT18239]
LEFT JOIN [mag_pbi].[pbiProd].[НоменклатураВПроизводствеПоУровням] as NomLvl
on NomLvl.[1c_id] = _Fld18241RRef and NomLvl.УровеньПроизводства = 0
LEFT JOIN [MAG_2019].[dbo].[_Reference54] as refKomplekt
on refKomplekt._IDRRef = [_Reference54_IDRRef]
GROUP BY
refKomplekt._OwnerIDRRef
HAVING
MAX(ISNULL(NomLvl.[УровеньПроизводства], 99)) = 0) as tabItog
END
GO
/****** Object: StoredProcedure [pbiProd].[Подготовка Производство: Заполнить уровень 2] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Подготовка Производство: Заполнить уровень 2]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO mag_pbi.[pbiProd].[НоменклатураВПроизводствеПоУровням]
([1c_id], [УровеньПроизводства])
SELECT
tabItog.nomVlad
, 2 as [УровеньПроизводства]
FROM (
SELECT
refKomplekt._OwnerIDRRef as nomVlad
, MAX(ISNULL(NomLvl.[УровеньПроизводства], 99)) as [УровеньПроизводства]
FROM [MAG_2019].[dbo].[_Reference54_VT18239]
LEFT JOIN [mag_pbi].[pbiProd].[НоменклатураВПроизводствеПоУровням] as NomLvl
on NomLvl.[1c_id] = _Fld18241RRef
LEFT JOIN [MAG_2019].[dbo].[_Reference54] as refKomplekt
on refKomplekt._IDRRef = [_Reference54_IDRRef]
GROUP BY
refKomplekt._OwnerIDRRef
HAVING
MAX(ISNULL(NomLvl.[УровеньПроизводства], 99)) = 1
) as tabItog
END
GO
/****** Object: StoredProcedure [pbiProd].[Подготовка Производство: Заполнить уровень 3] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Подготовка Производство: Заполнить уровень 3]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO mag_pbi.[pbiProd].[НоменклатураВПроизводствеПоУровням]
([1c_id], [УровеньПроизводства])
SELECT
tabItog.nomVlad
, 3 as [УровеньПроизводства]
FROM (
SELECT
refKomplekt._OwnerIDRRef as nomVlad
, MAX(ISNULL(NomLvl.[УровеньПроизводства], 99)) as [УровеньПроизводства]
FROM [MAG_2019].[dbo].[_Reference54_VT18239]
LEFT JOIN [mag_pbi].[pbiProd].[НоменклатураВПроизводствеПоУровням] as NomLvl
on NomLvl.[1c_id] = _Fld18241RRef
LEFT JOIN [MAG_2019].[dbo].[_Reference54] as refKomplekt
on refKomplekt._IDRRef = [_Reference54_IDRRef]
GROUP BY
refKomplekt._OwnerIDRRef
HAVING
MAX(ISNULL(NomLvl.[УровеньПроизводства], 99)) = 2
) as tabItog
END
GO
/****** Object: StoredProcedure [pbiProd].[Подготовка: Заполнить группы номенклатуры для расчета] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Подготовка: Заполнить группы номенклатуры для расчета]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
BEGIN
DELETE FROM mag_pbi.pbiProd.GroupsOfNomenclature
INSERT INTO mag_pbi.pbiProd.GroupsOfNomenclature (artic_id)
SELECT --TOP (1000)
[artic_id]
FROM [mag_pbi].[pbi].[nomenclature]
DECLARE @articid nchar(36)
DECLARE @2k int
DECLARE @4k int
DECLARE @6k int
DECLARE @8k int
DECLARE @10k int
DECLARE @15k int
DECLARE @20k int
DECLARE @Counter2k int
DECLARE @Counter4k int
DECLARE @Counter6k int
DECLARE @Counter8k int
DECLARE @Counter10k int
DECLARE @Counter15k int
DECLARE @Counter20k int
DECLARE @counter int
SET @2k = 1
SET @4k = 1
SET @6k = 1
SET @8k = 1
SET @10k = 1
SET @15k = 1
SET @20k = 1
SET @counter = 1
SET @Counter2k = 1
SET @Counter4k = 1
SET @Counter6k = 1
SET @Counter8k = 1
SET @Counter10k = 1
SET @Counter15k = 1
SET @Counter20k = 1
DECLARE itterate CURSOR FOR
SELECT
[artic_id]
FROM mag_pbi.[pbiProd].[GroupsOfNomenclature] as s
order by
[artic_id]
OPEN itterate
FETCH NEXT FROM itterate INTO @articid
WHILE @@FETCH_STATUS = 0
BEGIN
if @Counter2k <= 2000 begin
SET @Counter2k = @Counter2k + 1
end
else begin
SET @Counter2k = 0
SET @2k = @2k + 1
end
if @Counter4k <= 4000 begin
SET @Counter4k = @Counter4k + 1
end
else begin
SET @Counter4k = 0
SET @4k = @4k + 1
end
if @Counter6k <= 6000 begin
SET @Counter6k = @Counter6k + 1
end
else begin
SET @Counter6k = 0
SET @6k = @6k + 1
end
if @Counter8k <= 8000 begin
SET @Counter8k = @Counter8k + 1
end
else begin
SET @Counter8k = 0
SET @8k = @8k + 1
end
if @Counter10k <= 10000 begin
SET @Counter10k = @Counter10k + 1
end
else begin
SET @Counter10k = 0
SET @10k = @10k + 1
end
if @Counter15k <= 15000 begin
SET @Counter15k = @Counter15k + 1
end
else begin
SET @Counter15k = 0
SET @15k = @15k + 1
end
if @Counter20k <= 20000 begin
SET @Counter20k = @Counter20k + 1
end
else begin
SET @Counter20k = 0
SET @20k = @20k + 1
end
UPDATE mag_pbi.[pbiProd].[GroupsOfNomenclature]
SET [2k] = @2k
,[4k] = @4k
,[6k] = @6k
,[8k] = @8k
,[10k] = @10k
,[15k] = @15k
,[20k] = @20k
WHERE [artic_id]= @articid
FETCH NEXT FROM itterate INTO @articid
END
CLOSE itterate
DEALLOCATE itterate
END
END
GO
/****** Object: StoredProcedure [pbiProd].[Производство: Заполнить 1сid для СебестоимостьПроизводствоОт2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [pbiProd].[Производство: Заполнить 1сid для СебестоимостьПроизводствоОт2022]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
UPDATE [pbiProd].[СебестоимостьПроизводствоОт2022]
SET [pbiProd].[СебестоимостьПроизводствоОт2022].[1c_id] = nom.[1c_id]
FROM [pbiProd].[СебестоимостьПроизводствоОт2022] ss
LEFT JOIN [mag_pbi].[pbi].[nomenclature] as nom ON ss.artic_id = nom.artic_id
WHERE ss.[1c_id] IS NULL;
END
GO
/****** Object: StoredProcedure [sebest].[ComputeStorehouseVolume] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [sebest].[ComputeStorehouseVolume]
-- Add the parameters for the stored procedure here
AS
BEGIN
DELETE FROM [pbi].[nomenclatureVolumeStorehouse] WHERE 1=1
;
WITH calendar AS (
SELECT
[_Fld13119] AS date -- date
FROM [MAG_2019].[dbo].[_InfoRg13116]
WHERE [_Fld13117RRef] = 0x80CD002590EC174111E58150B83C760D -- calendar
AND [_Fld13118] > 2018 -- year
),
GoodsInStorehousesTurnover AS (
SELECT
GoodsInStorehousesTurnover.period AS period,
GoodsInStorehousesTurnover.nomenclature AS nomenclature,
GoodsInStorehousesTurnover.storehouse as storehouse,
SUM(GoodsInStorehousesTurnover.Turnover) OVER (PARTITION BY storehouse, nomenclature ORDER BY period) AS balance
FROM (
SELECT
period,
nomenclature,
storehouse,
SUM(Turnover) as Turnover
FROM (SELECT --Top (1000)
[_Period] AS period,
[_Fld17485RRef] AS nomenclature,
[_Fld17488RRef] AS storehouse,
CASE
WHEN [_RecordKind] = 0 THEN [_Fld17491]
ELSE -[_Fld17491]
END AS Turnover
FROM [MAG_2019].[dbo].[_AccumRg17484]
WHERE
1=1
--and [_Fld17485RRef] = 0x80C5305A3A00E12B11E585239E47A898 -- nom
AND [_Fld17488RRef] = 0x80D70CC47A052DFD11E6C841742D2F2C -- storehouse дед-2
) as tabTurnover
GROUP BY
period,
nomenclature,
storehouse) AS GoodsInStorehousesTurnover
)
INSERT INTO [pbi].[nomenclatureVolumeStorehouse] ([Период], [balance], [1c_id], [storehouse], [volume], [totalVolume])
SELECT --top (10000)
calendar_date as [Период],
GoodsInStorehousesTurnover.balance as balance,
GoodsInStorehousesTurnover.nomenclature as [1c_id],
GoodsInStorehousesTurnover.storehouse as storehouse,
GoodsInStorehousesTurnover.balance * tabVolume.volume as volume,
SUM(GoodsInStorehousesTurnover.balance * tabVolume.volume) OVER (PARTITION BY GoodsInStorehousesTurnover.storehouse, calendar_date) as totalVolume
FROM (
SELECT
calendar.date AS calendar_date,
MAX(GoodsInStorehousesTurnover.period) AS turnover_period,
GoodsInStorehousesTurnover.nomenclature AS nomenclature,
GoodsInStorehousesTurnover.storehouse as storehouse
FROM calendar
LEFT JOIN GoodsInStorehousesTurnover
ON calendar.date >= GoodsInStorehousesTurnover.period
GROUP BY
calendar.date,
GoodsInStorehousesTurnover.nomenclature,
GoodsInStorehousesTurnover.storehouse
) AS tabBalancePeriodMax
LEFT JOIN GoodsInStorehousesTurnover
ON GoodsInStorehousesTurnover.nomenclature = tabBalancePeriodMax.nomenclature
AND GoodsInStorehousesTurnover.period = tabBalancePeriodMax.turnover_period
LEFT JOIN (SELECT --top (1000)
_OwnerID_RRRef as [1c_id]
,case when _Fld24768 = 0 then
0
else
_Fld24771 / _Fld24768
end as volume
FROM [MAG_2019].dbo._Reference347X1 u
INNER JOIN [mag_2019].dbo._Reference188X1 nn ON nn._IDRRef = u._OwnerID_RRRef
INNER JOIN [mag_pbi].[pbi].[nomenclature] nom on nom.[1c_id] = u._OwnerID_RRRef and nom.[Статус] <> 'Не для продажи'
where
u.[_Marked] = 0x00) as tabVolume
on tabVolume.[1c_id] = tabBalancePeriodMax.nomenclature
where
YEAR(calendar_date) >= 4024
and GoodsInStorehousesTurnover.balance <> 0
and DATEADD(YEAR, -2000, calendar_date) <= GETDATE()
ORDER BY
calendar_date;
END
GO
/****** Object: StoredProcedure [sebest].[Заполнить итоги до 2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [sebest].[Заполнить итоги до 2022]
-- Add the parameters for the stored procedure here
AS
BEGIN
DELETE FROM [pbi].[СебестоимостьИтогиДо2022]
WHERE 1=1
INSERT INTO mag_pbi.pbi.[СебестоимостьИтогиДо2022] (
[artic_id], [Количество], [Закупка], [Таможня], [ЕАЭС], [Доставка], [НДС], [Сборка], [Учетная цена])
SELECT --TOP (5000)
-- это финальная выборка, её не корректировать(можно только комменить поля которые не нужны к выводу), менять всё во вложенных запросах ...
[artic_id]
,[Количество]
,[Закупка]
,[Таможня]
,[ЕАЭС]
,[Доставка]
,[НДС]
,[Сборка]
,case when [Количество] = 0 then
0
else
([Закупка] + [Таможня] + [ЕАЭС] + [Доставка] + [НДС] + [Сборка]) / [Количество]
end as [Учетная цена]
FROM (SELECT
[artic_id]
,SUM([Количество]) as [Количество]
,SUM([Закупка]) as [Закупка]
,SUM([Таможня]) as [Таможня]
,SUM([ЕАЭС]) as [ЕАЭС]
,SUM([Доставка]) as [Доставка]
,SUM([НДС]) as [НДС]
,SUM([Сборка]) as [Сборка]
FROM
(SELECT
[artic_id]
,CASE WHEN [Вид операции] = 'Продажа' THEN
-SUM([Количество])
else
SUM([Количество])
end as [Количество]
,SUM([Закупка]) as [Закупка]
,SUM([Таможня]) as [Таможня]
,SUM([ЕАЭС]) as [ЕАЭС]
,SUM([Доставка]) as [Доставка]
,SUM([НДС]) as [НДС]
,SUM([Сборка]) as [Сборка]
FROM [mag_pbi].[pbi].[СебестоимостьДо2022]
-- where [artic_id] = '25c0d4a5-00dc-11e8-80f7-0cc47a052dfd'
group by
[Вид операции]
,[artic_id] ) as tabMain
GROUP BY
[artic_id]) tabItog
--WHERE YEAR([Период]) < 2022
--and [artic_id] = 'cdb37c08-84c6-11e5-80c5-305a3a00e12b'
END
GO
/****** Object: StoredProcedure [sebest].[Заполнить себестоимость до 2022] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [sebest].[Заполнить себестоимость до 2022]
-- Add the parameters for the stored procedure here
AS
BEGIN
DELETE FROM [pbi].[СебестоимостьДо2022]
WHERE 1=1
INSERT INTO mag_pbi.pbi.[СебестоимостьДо2022] ([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id],
[artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня], [Доставка] ,[Сборка], [НДС] ,[Учетная стоимость] ,[Учетная стоимость USD2+2] ,[Учетная цена]
,[Учетная цена USD2+2]
--, [CodeUT]
/*[Сумма], [Сумма Без НДС], [Валютная сумма], [Валютная сумма Без НДС] */)
SELECT --TOP (5000)
-- это финальная выборка, её не корректировать(можно только комменить поля которые не нужны к выводу), менять всё во вложенных запросах ...
[Период]
,[Статья]
,[Вид операции]
,[Хоз операция]
,[тип документа]
,[Номер документа]
,[Номер заказа]
,[Валюта документа]
,[Ценовая группа]
,[1c_document_id]
,[Организация]
,[Партнер]
,[PartnerId]
,[Контрагент]
,[Менеджер]
,[1c_id]
,[artic_id]
,[Курс usd]
,[Курс usd2]
,[Количество]
,[Сумма]
,[СуммаБезНДС]
,[СуммаРучнойСкидки]
,[СуммаАвтоСкидки]
,[Закупка]
,[Закупка, usd2]
,[Таможня]
--,[ЕАЭС]
--,[Маркетинг]
,[Доставка]
,[Сборка]
--, [ЗатратыМП]
--,[CodeUT]
, [НДС]
,[Учетная стоимость]
,[Учетная стоимость USD2+2]
,[Учетная цена]
,[Учетная цена USD2+2]
FROM (
SELECT -- TOP (1000)
[id]
,[Период]
,[Статья]
,[Вид операции]
,[Хоз операция]
,[Организация]
,[Партнер]
,[PartnerId]
,[Контрагент]
,[Менеджер]
,[Тип документа]
,[Номер документа]
,[Валюта документа]
,[Ценовая группа]
,[1c_document_id]
,[1c_id]
,[artic_id]
,[Количество]
,[Сумма]
,[СуммаБезНДС]
,[СуммаРучнойСкидки]
,[СуммаАвтоСкидки]
,[Закупка]
,[Закупка, usd2]
,[Курс usd2]
,[Курс usd]
,[Таможня]
,[Учетная цена]
,[Учетная цена USD2+2]
,[Учетная стоимость]
,[Учетная стоимость USD2+2]
,[Заказ закрыт]
,[Номер заказа]
,[Доставка]
,[НДС]
,[Сборка]
,[PriceListPrice]
FROM [mag_pbi].[pbi].[Себестоимость+СебестоимостьПродаж]
) tabItog
WHERE YEAR([Период]) < 2022
--and [artic_id] = 'cdb37c08-84c6-11e5-80c5-305a3a00e12b'
END
GO
/****** Object: StoredProcedure [sebest].[Заполнить себестоимость закупкой] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [sebest].[Заполнить себестоимость закупкой]
@dt datetime2 = '2015-01-01'
AS
BEGIN
/*r._RecorderTRef:
0x000001A1 Заявление о ввозе товаров из ЕАЭС
0x000001E3 ПТУ
0x00000189 Возврат товаров поставщику
0x000001D5 Передача товаров
0x000001B0 Корректировка приобретения
0x0000020D Таможенная декларация на импорт
закупка: (0x000001E3, 0x00000189,0x000001D5, 0x000001B0)
ЕАЭС: 0x000001A1
Таможня: 0x0000020D
*/
/*
0x80CD002590EC174111E581505088A8D5 USD
0x80D40CC47A052DFD11E6B6DD1820D178 Eur
0x80E90CC47A052DFD11E7145927CEFC24 Cny
0xAE9DB496910DCFD611E94F10743DE3FF USD2
0xAE9EB496910DCFD611E95C66B5DE3AFA USD2+2
*/
DELETE FROM mag_pbi.pbi.[Себестоимость] WHERE [Период]>@dt
DBCC CHECKIDENT ('[pbi].[Себестоимость]', RESEED, 0);
INSERT INTO mag_pbi.pbi.[Себестоимость] ([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id],
[artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня],[ЕАЭС], [Доставка] ,[Сборка], [ЗатратыМП], [НДС]
--, [CodeUT]
/*[Сумма], [Сумма Без НДС], [Валютная сумма], [Валютная сумма Без НДС] */)
SELECT --TOP (5000)
-- это финальная выборка, её не корректировать(можно только комменить поля которые не нужны к выводу), менять всё во вложенных запросах ...
[Период]
,[Статья]
,[Вид операции]
,[Хоз операция]
,[тип документа]
,[Номер документа]
,[Номер заказа]
,[Валюта документа]
,[Ценовая группа]
,[1c_document_id]
,[Организация]
,[Партнер]
,[PartnerId]
,[Контрагент]
,[Менеджер]
,[1c_id]
,[artic_id]
,[Курс usd]
,[Курс usd2]
,[Количество]
,[Сумма]
,[СуммаБезНДС]
,[СуммаРучнойСкидки]
,[СуммаАвтоСкидки]
, CASE WHEN YEAR([Период]) <= 2021 and ([Партнер] = 'КИТАЙ' or [Партнер] = 'Luca-S') and [Валюта документа] <> 'руб.' Then
[Закупка] * 1.42
ELSE
[Закупка]
END as [Закупка]
, CASE WHEN YEAR([Период]) <= 2021 and ([Партнер] = 'КИТАЙ' or [Партнер] = 'Luca-S') and [Валюта документа] <> 'руб.' Then
[Закупка, usd2] * 1.42
ELSE
[Закупка, usd2]
END as [Закупка, usd2]
,[Таможня]
,[ЕАЭС]
--,[Маркетинг]
,[Доставка]
,[Сборка]
, [ЗатратыМП]
--,[CodeUT]
, [НДС]
FROM (
select --top (1)
DATEADD(year, -2000, _Period) as [Период]
, case
WHEN r._RecorderTRef=0x000001A1 or r._RecorderTRef=0x0000020D THEN 'НДС'
--WHEN r._RecorderTRef=0x000001A1 THEN 'ЕАЭС'
--WHEN r._RecorderTRef=0x0000020D THEN 'Таможня'
ELSE 'Закупка'
END
as [Статья]
, 'Закупка' as [Вид операции]
, h.value as [Хоз операция]
, case r._RecorderTRef
WHEN 0x000001A1 then 'Заявление о ввозе товаров из ЕАЭС'
WHEN 0x00000189 then 'Возврат товаров поставщику'
WHEN 0x000001E3 then 'ПТУ'
WHEN 0x000001D5 then 'Передача товаров'
WHEN 0x000001B0 then 'Корректировка '
WHEN 0x0000020D then 'Таможенная декларация на импорт'
ELSE 'Неизвестный тип'
END as [тип документа]
, '-' as [Номер документа]
, '-' as [Номер заказа]
, val._Description as [Валюта документа]
,CASE
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Руб'
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Вал'
WHEN r._RecorderTRef = 0x0000020D THEN 'Руб'
ELSE 'Неопределено'
END as [Ценовая группа]
, r._RecorderRRef as [1c_document_id]
, (SELECT _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = r._Fld16346RRef ) as [Организация]
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = r.[_Fld16353RRef]) as [Партнер]
--, r.[_Fld16353RRef] as PartnerId
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), r.[_Fld16353RRef], 2),5,12) ))as PartnerId
, (SELECT _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = r._Fld16354_RRRef) as [Контрагент]
, (SELECT _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = [_Fld16348RRef]) as [Менеджер]
, analitikaUchetaNomenklaturi.[_Fld20498RRef] as [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2),21,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2),17,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2),1,4),'-',SUBSTRING(convert(nvarchar(36), analitikaUchetaNomenklaturi.[_Fld20498RRef], 2),5,12))) as [artic_id]
,CASE WHEN r._RecorderTRef IN (0x000001E3, 0x00000189,0x000001D5, 0x000001B0) -- только для вида операция закупка
THEN
case [_Fld16345RRef]
when 0x970191967A54A8814BA45C6234640F68 /* возврат, берем с минусом */ THEN -[_Fld16361]
ELSE [_Fld16361] END
--WHEN r._RecorderTRef = 0x0000020D THEN customDeclaration._Fld8943
WHEN r._RecorderTRef = 0x0000020D THEN 0
--WHEN r._RecorderTRef=0x000001A1 THEN docEAS.[_Fld4052]
WHEN r._RecorderTRef=0x000001A1 THEN 0
ELSE 0 END
as [Количество]
, [_Fld16362] / 1000 as [Сумма]
, [_Fld16363] / 1000 as [СуммаБезНДС]
,0 as [СуммаРучнойСкидки]
,0 as [СуммаАвтоСкидки]
, CASE WHEN r._RecorderTRef IN (0x000001E3, 0x00000189,0x000001D5, 0x000001B0) -- только для вида операция закупка
THEN
case [_Fld16345RRef]
when 0x970191967A54A8814BA45C6234640F68 /* возврат, берем с минусом */ THEN -[_Fld16362] / 1000
ELSE [_Fld16362] / 1000 END
ELSE 0 END
AS [Закупка]
, CASE WHEN r._RecorderTRef IN (0x000001E3, 0x00000189,0x000001D5, 0x000001B0) -- только для вида операция закупка поле "сумма в валюте документа"
THEN
case [_Fld16345RRef]
when 0x970191967A54A8814BA45C6234640F68 /* возврат, берем с минусом */ THEN -[_Fld16373] / 1000
ELSE [_Fld16373] / 1000 END
ELSE 0 END as [Закупка, usd2]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
--WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, r._Period)
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
--WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, r._Period)
ORDER BY _Period desc ) as [Курс usd2]
/*, CASE WHEN r._RecorderTRef=0x0000020D THEN [_Fld16369] / 1000
ELSE 0 END
as [Таможня]
, CASE WHEN r._RecorderTRef=0x000001A1 THEN [_Fld16369] / 1000
ELSE 0 END
as [ЕАЭС] */
, CASE WHEN r._RecorderTRef=0x0000020D THEN [_Fld16369] / 1000 END as [Таможня]
, 0 as [ЕАЭС]
, 0 as [Маркетинг] -- маркетинг
, 0 as [Доставка] -- доставка
, 0 as [Сборка]-- Сборка
, 0 as [ЗатратыМП] -- Затраты МП
,CASE WHEN LEFT(n._Code, 2) = '00' -- только для вида операция закупка
THEN '9' + CONVERT(nvarchar(15), TRIM('-' FROM TRIM ( '00' FROM n._Code)))
ELSE '8' + TRIM ( 'УТ-' FROM n._Code)
END
as [CodeUT]
, CASE WHEN r._RecorderTRef=0x000001A1 THEN ([_Fld16362] - [_Fld16363]) / 1000
WHEN r._RecorderTRef=0x0000020D THEN ([_Fld16362] - [_Fld16363]) / 1000
ELSE 0 END
as [НДС]
--,RIGHT(n._Code, LEN(n._Code) - DATALENGTH(CONVERT(VARCHAR(100),'УТ-'))) as [CodeUT]
from
mag_2019.dbo._AccumRg16344 r-- Регистр накопления Закупки
LEFT JOIN [MAG_2019].[dbo].[_Reference160] as analitikaUchetaNomenklaturi
on analitikaUchetaNomenklaturi.[_IDRRef] = [_Fld16349RRef]
left join MAG_2019.dbo._Reference188X1 as N
on analitikaUchetaNomenklaturi.[_Fld20498RRef] = N._IDRRef
LEFT JOIN [mag_reports].[dbo].[enums] h
ON h._IDRref = r._Fld16345RRef
LEFT JOIN MAG_2019.dbo._reference50 val
ON val._IDRRef = r._Fld16372RRef
LEFT JOIN [MAG_2019].[dbo].[_Document525_VT8936] as customDeclaration
ON customDeclaration.[_Document525_IDRRef] = [r]._RecorderRRef
and analitikaUchetaNomenklaturi.[_Fld20498RRef] = customDeclaration._Fld8939RRef
LEFT JOIN [MAG_2019].[dbo].[_Document417_VT4034] as docEAS
ON docEAS.[_Document417_IDRRef] = [r]._RecorderRRef
and [_Fld16349RRef] = docEAS.[_Fld4037RRef]
-- WHERE DATEADD(year, -2000, _Period) > @dt
UNION ALL
SELECT -- top (1000)
DATEADD(year, -2000, date) -- период
,SR -- Статья расходов
, ВидОперации -- Вид операции
, '' -- хоз операция
, typeReg -- Тип документа
, НомерДокумента -- Номер документа
, [Номер заказа] -- Номер заказа клиента для РТУ
, val._Description -- Валюта документа
, CASE
WHEN refNomenclatura._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Руб'
WHEN refNomenclatura._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Вал'
ELSE 'Неопределено'
END -- Ценовая группа
, Регистратор -- Ссылка на документ
, refOrganizaciya.[_Description] -- Организация
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = Партнер) -- Партнер
-- , [Партнер] as PartnerId
, LOWER(CONCAT(SUBSTRING ( convert(nvarchar(36), [Партнер], 2), 25,8),'-',SUBSTRING ( convert(nvarchar(36), [Партнер], 2),21,4),'-',SUBSTRING ( convert(nvarchar(36), [Партнер], 2),17,4),'-',SUBSTRING ( convert(nvarchar(36), [Партнер], 2),1,4),'-',SUBSTRING ( convert(nvarchar(36), [Партнер], 2),5,12) ))as PartnerId
, (SELECT _Description FROM [mag_2019].[dbo]._Reference168 kt /*контрагенты*/ WHERE kt._IDRRef = Контрагент) -- Контрагент
, (SELECT _description FROM [MAG_2019].[dbo].[_Reference228X1] WHERE _IDRRef = Менеджер) -- Менеджер
, onec_id -- 1с id
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), onec_id, 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), onec_id, 2),21,4),'-',SUBSTRING(convert(nvarchar(36), onec_id, 2),17,4),'-',SUBSTRING(convert(nvarchar(36), onec_id, 2),1,4),'-',SUBSTRING(convert(nvarchar(36), onec_id, 2),5,12))) -- arctic id
, kolvo -- количество
, [Сумма] / 1000
, [СуммаБезНДС] / 1000
, [СуммаРучнойСкидки] / 1000
, [СуммаАвтоСкидки] / 1000
, [Закупка] -- закупка
, [Закупка, usd2] -- закупка usd2
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, date)
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, date)
ORDER BY _Period desc ) as [Курс usd2]
, 0 -- Таможня
, 0 --ЕАЭС
, marketing / 1000 -- маркетинг
, delivery / 1000 -- доставка
, [Сборка] / 1000 as [Сборка]-- Сборка
, [ЗатратыМП] / 1000 -- Затраты МП
,CASE WHEN LEFT(refNomenclatura._Code, 2) = '00' -- только для вида операция закупка
THEN '9' + CONVERT(nvarchar(15), TRIM('-' FROM TRIM ( '00' FROM refNomenclatura._Code)))
ELSE '8' + TRIM ( 'УТ-' FROM refNomenclatura._Code)
END
as [CodeUT]
, 0 -- НДС
-- ,RIGHT(refNomenclatura._Code, LEN(refNomenclatura._Code) - DATALENGTH(CONVERT(VARCHAR(100),'УТ-'))) as [CodeUT]
FROM (
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\ ДОСТАВКА \\\\\\\\\\\\\\\\
SELECT --TOP (1)
refPTU.[_Date_Time] as date -- дата
, 'Доставка контейнера ВЭД' as SR
,'Закупка' as ВидОперации
,[_Fld33630RRef] as Регистратор -- регистратор
, '-' as НомерДокумента -- Номер документа
, '-' [Номер заказа]
,'ПТУ' as typeReg -- типРегистратора
,refPTU.[_Fld7121RRef] as Организация -- Организация
,refPTU.[_Fld7060RRef] as Партнер -- партнер
,refPTU.[_Fld7064RRef] as Контрагент -- контрагент
,refPTU.[_Fld7067RRef] as Менеджер -- Менеджер
,[_Fld33631RRef] as onec_id -- Номенклатура
--,refPtuNomen.[_Fld7134] as kolvo -- Количество
, 0 as kolvo -- Количество
--, [_Fld33633] as [Сумма]
, 0 as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
, 0 as [Закупка]
, 0 as [Закупка, usd2]
,refPTU.[_Fld7059RRef] as ВалютаДокумента -- Валюта документа
,[_Fld33632RRef] -- ППУ
,0 as marketing -- маркетинг
,[_Fld33633] as delivery -- доставка
,0 as [Сборка]-- Сборка
, 0 as [ЗатратыМП]-- Затраты мп
-- ,[_Fld33634_RRRef] -- статья расходов
FROM [MAG_2019].[dbo].[_InfoRg33629]
LEFT JOIN [MAG_2019].[dbo].[_Document483X1] as refPTU
ON refPTU.[_IDRRef] = [_Fld33630RRef]
LEFT JOIN [MAG_2019].[dbo].[_Document483_VT7128X1] as refPtuNomen
ON refPtuNomen.[_Document483_IDRRef] = refPTU.[_IDRRef]
AND refPtuNomen.[_Fld7130RRef] = [_Fld33631RRef]
where [_Fld33634_RRRef] = 0x997EB49691D57EFD11ECE1AC556F9FF0
UNION ALL
-- \\\\\\\\\\\\ МАРКЕТИНГ \\\\\\\\\\\\\\\
SELECT --TOP (1)
refPTU.[_Date_Time]
, 'Маркетинг'
,'Закупка'
,[_Fld33630RRef] -- регистратор
, '-' -- Номер документа
, '-' -- Номер заказа
,'ПТУ'
,refPTU.[_Fld7121RRef] -- Организация
,refPTU.[_Fld7060RRef] as Партнер -- партнер
,refPTU.[_Fld7064RRef] as Контрагент -- контрагент
,refPTU.[_Fld7067RRef] as Менеджер -- Менеджер
,[_Fld33631RRef] -- Номенклатура
, 0 -- Количество
, 0 as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
, 0 as [Закупка]
, 0 as [Закупка, usd2]
, refPTU.[_Fld7059RRef] -- Валюта документа
,[_Fld33632RRef] -- ППУ
,[_Fld33633] -- маркетинг
, 0 -- доставка
,0 -- Сборка
, 0 -- Затраты мп
--,[_Fld33634_RRRef] -- статья расходов
FROM [MAG_2019].[dbo].[_InfoRg33629]
LEFT JOIN [MAG_2019].[dbo].[_Document483X1] as refPTU
ON refPTU.[_IDRRef] = [_Fld33630RRef]
where [_Fld33634_RRRef] = 0x9981B49691D57EFD11EDCE203CED30C4
UNION ALL
-- ///////////////// ПРОДАЖИ ////////////////
SELECT --TOP (1)
[_Period]
,'Реализация'
,'Продажа'
,[_RecorderRRef] -- регистратор
,docRTU.[_Number] -- Номер документа
, orders.[_Number] -- Номер заказа
,case [_RecorderTRef]
WHEN 0x000001F4 then 'РТУ'
ELSE 'Неизвестный тип'
END
, AnalitikaUchetaPartner.[_Fld20514RRef] -- Организация
, AnalitikaUchetaPartner.[_Fld20513RRef] -- партнер
, AnalitikaUchetaPartner.[_Fld20515_RRRef] -- контрагент
, [_Fld15559RRef] as Менеджер -- Менеджер
, analitikaUchetaNomenklaturi.[_Fld20498RRef] -- Номенклатура
, [_Fld15567] -- количество
, [_Fld15568] as [Сумма]
, 0 as [СуммаБезНДС]
, [_Fld15595] as [СуммаРучнойСкидки]
, [_Fld15596] as [СуммаАвтоСкидки]
, 0 as [Закупка]
, 0 as [Закупка, usd2]
,CASE
WHEN [_Fld15601RRef] IS NULL THEN 'руб.' -- Валюта документа
ELSE [_Fld15601RRef]
END AS [Валюта документа]
, '' -- ППУ
,0 -- маректинг
,0 -- Доставка
,0 -- Сборка
, 0 -- Затраты мп
FROM [MAG_2019].[dbo].[_AccumRg15547]
LEFT JOIN [MAG_2019].[dbo].[_Reference160] as analitikaUchetaNomenklaturi
on analitikaUchetaNomenklaturi.[_IDRRef] = [_Fld15548RRef]
LEFT JOIN [MAG_2019].[dbo].[_Reference162] as AnalitikaUchetaPartner
on AnalitikaUchetaPartner.[_IDRRef] = [_Fld15550RRef]
LEFT JOIN [MAG_2019].[dbo].[_Document500X1] as docRTU
on docRTU.[_IDRRef] = [_RecorderRRef]
LEFT JOIN (SELECT
[_Document500_IDRRef] as _IDRRef
,MIN([_Fld7990_RRRef]) as orderRTU
FROM [MAG_2019].[dbo].[_Document500_VT7967X1]
GROUP BY
[_Document500_IDRRef]) as ordersRTU
ON ordersRTU._IDRRef = [_RecorderRRef]
LEFT JOIN [MAG_2019].[dbo].[_Document404X1] as orders
ON orders.[_IDRRef] = ordersRTU.orderRTU
UNION ALL
-- \\\\\\\\\\\\\\\\ СБОРКА РАСХОД БЕЗ ЗАТРАТ НА СБОРКУ\\\\\\\\\\\\\\\\
SELECT TOP (1000)
znS.[_Date_Time] as per
, 'Сборка'
, 'Продажа'
, TabGoods.[_Document407_IDRRef] -- регистратор
, '-' -- Номер документа
, '-' -- Номер заказа
,'Заказ на сборку'
, ZnS.[_Fld3348RRef] -- Организация
, Kontr.[_Fld20612RRef] -- партнер
, ZnS.[_Fld27876RRef] -- контрагент
, ZnS.[_Fld28230RRef] -- Менеджер
, [_Fld3381RRef] as nom -- Номенклатура
, [_Fld3385] as kolvo -- Количество
--, tabset.[_Fld28063]
, 0 as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
, (SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
WHERE [Вид цены] = 'Учетная цена (руб)'
AND [Дата] <= znS.[_Date_Time]
and [_Fld3381RRef] = [1c_id]
ORDER BY Дата desc ) / 1000 * [_Fld3385] * -1 as [Закупка]
, 0 as [Закупка, usd2]
, currency._IDRRef -- Валюта документа
, '' -- ППУ
, 0 -- маректинг
, 0 -- Доставка
, 0 -- сборка
, 0 -- Затраты мп
FROM [MAG_2019].[dbo].[_Document407_VT3379] as TabGoods
INNER JOIN [MAG_2019].[dbo].[_Document407] as ZnS -- Заказ на сборку
on ZnS._IDRRef = [_Document407_IDRRef]
and _Posted = 0x01 -- проведен
--and [_Number] = 'АНУТ-010680' -- номер дока для проверки
and [_Fld3352RRef] = 0x97266ED3BEFAB868480833CDF0FCF236 -- статус Закрыт
LEFT JOIN [MAG_2019].[dbo].[_Reference168] as Kontr
ON Kontr.[_IDRRef] = ZnS.[_Fld27876RRef]
LEFT JOIN (SELECT TOP (1) [_IDRRef]
FROM [MAG_2019].[dbo].[_Reference50]
where _code = '643') as currency
on 1 = 1
UNION ALL
-- \\\\\\\\\\\\\\\\ СБОРКА ПРИХОД + ЗАТРАТЫ НА СБОРКУ \\\\\\\\\\\\\\\\
SELECT TOP (333)
znS.[_Date_Time]
, 'Сборка'
, 'Закупка'
, TabGoods.[_Document407_IDRRef] -- регистратор
, '-' -- Номер документа
, '-' -- Номер заказа
,'Заказ на сборку'
, ZnS.[_Fld3348RRef] -- Организация
, Kontr.[_Fld20612RRef] -- партнер
, ZnS.[_Fld27876RRef] -- контрагент
, ZnS.[_Fld28230RRef] -- Менеджер
, tabSet.[_Fld28059RRef] -- Номенклатура
--, [_Fld3385] -- Количество
, tabset.[_Fld28063]
, 0 as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
--, CASE WHEN tabSetPrices.[SumSebes] IS NULL THEN 0
-- ELSE tabSetPrices.[SumSebes] / 1000 * tabset.[_Fld28063]
-- end as [Закупка]
,(SELECT TOP 1 [Цена] FROM [mag_pbi].[pbi].[pricelist]
WHERE [Вид цены] = 'Учетная цена (руб)'
AND [дата] <= znS.[_Date_Time]
and [_Fld3381RRef] = [1c_id]
ORDER BY Дата desc ) / 1000 * [_Fld3385] as [SumSebes]
, 0 as [Закупка, usd2]
, currency._IDRRef -- Валюта документа
, '' -- ППУ
, 0 -- маректинг
, 0 -- Доставка
, TabZatratiSborka.sborka as sborka -- сборка
, 0 -- Затраты мп
FROM [MAG_2019].[dbo].[_Document407_VT3379] as TabGoods
INNER JOIN [MAG_2019].[dbo].[_Document407] as ZnS -- Заказ на сборку
on ZnS._IDRRef = [_Document407_IDRRef]
and _Posted = 0x01 -- проведен
-- and [_Number] = 'АНУТ-010680' -- номер дока для проверки
and [_Fld3352RRef] = 0x97266ED3BEFAB868480833CDF0FCF236 -- статус Закрыт
LEFT JOIN [MAG_2019].[dbo]._Document407_VT28057 as tabSet -- тч комплекты, тут связь было-стало
on tabSet.[_Fld28070] = [_Fld28055]
and tabSet._Document407_IDRRef = TabGoods._Document407_IDRRef
LEFT JOIN [MAG_2019].[dbo].[_Reference168] as Kontr
ON Kontr.[_IDRRef] = ZnS.[_Fld27876RRef]
LEFT JOIN (SELECT TOP (1) [_IDRRef]
FROM [MAG_2019].[dbo].[_Reference50]
where _code = '643') as currency
on 1 = 1
LEFT JOIN (SELECT --TOP (1000)
[_RecorderRRef] -- регистратор
, [_Fld33653RRef] -- Номенклатура
, SUM([_Fld33658]) / 1000 as sborka -- сборка
FROM [MAG_2019].[dbo].[_AccumRg33652] -- рн работы
where [_RecorderTRef] = 0x00000197
group by
[_RecorderRRef]
, [_Fld33653RRef] -- Номенклатура
) as TabZatratiSborka
ON TabZatratiSborka.[_RecorderRRef] = TabGoods.[_Document407_IDRRef]
and TabZatratiSborka.[_Fld33653RRef] = tabSet.[_Fld28059RRef]
where [_Fld3392] = 0x00 -- отменено ложь
UNION ALL
-- \\\\\\\\\\\\\\\\\\\\ ЗАТРАТЫ МП \\\\\\\\\\\\\\\
SELECT -- TOP (1000)
[_Period]
,'Затраты МП'
,'Закупка'
,[_RecorderRRef] -- Регистратор отчет комиссионера
, '-' -- Номер документа
, '-' -- Номер заказа
, 'Отчет комиссионера'
, otchetKommissionera.[_Fld5484RRef] -- Организация
, otchetKommissionera.[_Fld5485RRef] -- партнер
, otchetKommissionera.[_Fld5486RRef] -- контрагент
, otchetKommissionera.[_Fld5492RRef] -- Менеджер
,[_Fld33391RRef] -- номенклатура
--,otchetKommissioneraTabTovari.[_Fld5531] -- Количество
,0 -- Количество
,0 as [Сумма]
--,[_Fld33394] as [Сумма]
, 0 as [СуммаБезНДС]
, 0 as [СуммаРучнойСкидки]
, 0 as [СуммаАвтоСкидки]
, 0 as [Закупка]
, 0 as [Закупка, usd2]
, currency._IDRRef -- Валюта документа
, '' -- ППУ
, 0 -- маректинг
, 0 -- Доставка
, 0 -- сборка
, [_Fld33394] -- Затраты МП
FROM [MAG_2019].[dbo].[_AccumRg33390]
LEFT JOIN [MAG_2019].[dbo].[_Document458_VT5524] as otchetKommissioneraTabTovari
on otchetKommissioneraTabTovari.[_Fld5526RRef] = [_Fld33391RRef]
AND otchetKommissioneraTabTovari.[_Document458_IDRRef] = [_RecorderRRef]
LEFT JOIN [MAG_2019].[dbo].[_Document458] as otchetKommissionera
ON otchetKommissionera.[_IDRRef] = otchetKommissioneraTabTovari.[_Document458_IDRRef]
LEFT JOIN (SELECT TOP (1) [_IDRRef]
FROM [MAG_2019].[dbo].[_Reference50]
where _code = '643') as currency
on 1 = 1
) as tabMain
LEFT JOIN [MAG_2019].[dbo].[_Reference188X1] as refNomenclatura
ON refNomenclatura.[_IDRRef] = tabMain.onec_id
LEFT JOIN [MAG_2019].[dbo].[_Document483X1] as refPTU
ON refPTU.[_IDRRef] = tabMain.Регистратор
LEFT JOIN [MAG_2019].[dbo].[_Document484] as refPPU
ON refPPU.[_IDRRef] = tabMain.Регистратор
LEFT JOIN [MAG_2019].[dbo].[_Reference198X1] as refOrganizaciya
on refOrganizaciya._IDRRef = tabMain.Организация
LEFT JOIN MAG_2019.dbo._reference50 val
ON val._IDRRef = tabMain.ВалютаДокумента
) tabItog
WHERE [Период] > @dt
--and [artic_id] = 'cdb37c08-84c6-11e5-80c5-305a3a00e12b'
END
GO
/****** Object: StoredProcedure [sebest].[Заполнить себестоимость комплектами] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [sebest].[Заполнить себестоимость комплектами]
-- Add the parameters for the stored procedure here
@dt datetime2 = '2015-01-01'
AS
BEGIN
insert into pbi.[Себестоимость]([Период], [Статья], [Вид операции],[Номер документа],[Тип документа], [1c_id], [artic_id], [Количество], [Ценовая группа])
select
k.[Период]
, 'Закупка' as [Статья]
, 'Фасовка_Комплекты' as [Вид операции]
, [Номер документа]
, 'Заказ на сборку' as [Тип документа]
, [1c_id]
, [artic_id]
, [Количество]
, [Ценовая группа]
FROM pbi.[сборки_комплекты] k
WHERE
[Период] > @dt
END
GO
/****** Object: StoredProcedure [sebest].[Заполнить себестоимость комплектующими] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [sebest].[Заполнить себестоимость комплектующими]
-- Add the parameters for the stored procedure here
@dt datetime2 = '2015-01-01'
AS
BEGIN
insert into pbi.[Себестоимость]([Период], [Статья], [Вид операции],[Номер документа],[Тип документа], [1c_id], [artic_id], [Количество], [Ценовая группа])
select
k.[Период]
, 'Закупка' as [Статья]
, 'Фасовка_Комплектующие' as [Вид операции]
, [Номер документа]
, 'Заказ на сборку' as [Тип документа]
, [1c_id]
, [artic_id]
, [Количество]
, [Ценовая группа]
FROM pbi.[сборки_комплектующие] k
WHERE
[Период] > @dt
END
GO
/****** Object: StoredProcedure [sebest].[Заполнить себестоимость курсовой разницей] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [sebest].[Заполнить себестоимость курсовой разницей]
-- Add the parameters for the stored procedure here
AS
BEGIN
insert into pbi.[Себестоимость] ([Период], [Статья], [Вид операции], [1c_id], [artic_id], [Количество], [Сумма], [Сумма Без НДС], [Валютная сумма], [Валютная сумма Без НДС])
SELECT --TOP (1000)
[Период]
, 'Курсовая разница' as [Статья]
,[Вид операции]
,[1c_id]
,[artic_id]
, 0 as [Количество]
, isnull([Валютная сумма] *
(SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND DATEADD(year, -2000, _Period) <= [Период]
ORDER BY _Period desc) - [Сумма], 0)
as [Сумма]
, 0 as [Сумма Без НДС]
, 0 as [Валютная сумма]
, 0 as [Валютная сумма Без НДС]
FROM
mag_pbi.pbi.[Себестоимость]
where
[Вид операции] = 'Продажа'
and [Статья] = 'Закупка'
and [Валютная сумма] <> 0
and isnull([Валютная сумма] *
(SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND DATEADD(year, -2000, _Period) <= [Период]
ORDER BY _Period desc) - [Сумма], 0) <> 0
END
GO
/****** Object: StoredProcedure [sebest].[Заполнить себестоимость начальным остатком] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [sebest].[Заполнить себестоимость начальным остатком]
-- Add the parameters for the stored procedure here
@dt datetime2 = '2015-01-01'
AS
BEGIN
/*
0x80CD002590EC174111E581505088A8D5 USD
0x80D40CC47A052DFD11E6B6DD1820D178 Eur
0x80E90CC47A052DFD11E7145927CEFC24 Cny
0xAE9DB496910DCFD611E94F10743DE3FF USD2
0xAE9EB496910DCFD611E95C66B5DE3AFA USD2+2
*/
insert into pbi.[Себестоимость]([Период], [Статья], [Вид операции],[Хоз операция],[Организация],[Тип документа],[Номер документа],[Валюта документа],[Ценовая группа],[1c_document_id], [1c_id], [artic_id], [Количество], [Закупка], [Закупка, usd2], [Курс usd], [Курс usd2]/*, [Курс usd2], [Сумма Без НДС], [Валютная сумма], [Валютная сумма Без НДС] */)
SELECT
tabItog.[Период],
tabItog.[Статья],
tabItog.[Вид операции],
tabItog.[Хоз операция],
tabItog.[Организация],
tabItog.[Тип документа],
tabItog.[Номер документа],
tabItog.[Валюта документа],
tabItog.[Ценовая группа],
tabItog.[1c_document_id],
tabItog.[1c_id],
tabItog.[artic_id],
tabItog.[Количество],
tabItog.[Закупка],
tabItog.[Закупка] / tabItog.[Курс usd2] as [Закупка, usd2],
tabItog.[Курс usd],
tabItog.[Курс usd2]
FROM (select
DATEADD(year, -2000, _Date_Time) as [Период]
, 'Ввод начальных остатков' as [Статья]
, 'Закупка' as [Вид операции]
, 'Ввод остатков' as [Хоз операция]
, (SELECT _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = d._Fld1778RRef ) as [Организация]
, 'Ввод остатков' as [Тип документа]
, D._Number as [Номер документа]
, 'руб.' as [Валюта документа]
, 'Руб' as [Ценовая группа]
, D._IDRRef as [1c_document_id]
, _Fld1811RRef as [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), _Fld1811RRef, 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), _Fld1811RRef, 2),21,4),'-',SUBSTRING(convert(nvarchar(36), _Fld1811RRef, 2),17,4),'-',SUBSTRING(convert(nvarchar(36), _Fld1811RRef, 2),1,4),'-',SUBSTRING(convert(nvarchar(36), _Fld1811RRef, 2),5,12))) as [artic_id]
, _Fld1816 as [Количество]
, _Fld1816 * isnull((SELECT TOP (1) [Цена] / 1000
FROM [mag_reports].[sales].[pricelist] pl
where [1c_id] = _Fld1811RRef
and [Вид цены] = 'Учетная цена (руб)'
--and pl._Period <= _Date_Time
ORDER BY _Period), 0) as [Закупка]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0x80CD002590EC174111E581505088A8D5 --USD
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, _Date_Time)
ORDER BY _Period desc ) as [Курс usd]
, (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, _Period) <= DATEADD(year, -2000, _Date_Time)
ORDER BY _Period desc ) as [Курс usd2]
from
mag_2019.dbo._Document385 as D-- Документ Ввод остатков
inner join mag_2019.dbo._Document385_VT1809 as Tov-- Документ Ввод остатков.Товары
on D._IDRRef = Tov._Document385_IDRRef
inner join MAG_2019.dbo._Reference188X1 as N
on Tov._Fld1811RRef = N._IDRRef
where
D._Posted = 0x01
and d._Fld1777RRef = 0x8EADCC7BFE3B43C24D37E47DE504409F -- Тип операции = Собственные товары
AND DATEADD(year, -2000, d._Date_Time) > '2012') as tabItog
END
GO
/****** Object: StoredProcedure [sebest].[Заполнить себестоимость продажей] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [sebest].[Заполнить себестоимость продажей]
-- Add the parameters for the stored procedure here
@dt datetime2 = '2015-01-01'
AS
BEGIN
/* Вставить все продажи в таблицу себестоимости */
/* UPDATE для каждой строки в отдельной процедуре */
insert into pbi.[Себестоимость]([Период], [Статья], [Вид операции],[Организация],[Партнер],[Менеджер],[Номер документа],[Тип документа], [1c_id], [artic_id]
, [Количество],[Сумма],[СуммаБезНДС],[СуммаРучнойСкидки],[СуммаАвтоСкидки],[Номер заказа],[Заказ закрыт], [Ценовая группа]
)
select --top 100
DATEADD(year, -2000, r._Period) as [Период]
, 'Закупка' as [Статья]
, 'Продажа' as [Вид операции]
, (SELECT _description FROM [MAG_2019].[dbo].[_Reference198X1] org WHERE org._IDRRef = anp._Fld20514RRef ) as [Организация]
, (SELECT _description FROM [mag_2019].[dbo]._Reference215X1 prt /*партнеры*/ WHERE prt._IDRRef = anp._Fld20513RRef) as [Партнер]
, (SELECT _description FROM [mag_2019].[dbo].[_Reference228X1] WHERE _IDRRef = z._Fld3138RRef) as [Менеджер]
, CASE _RecorderTRef
WHEN 0x000001F4 THEN (SELECT _Number FROM MAG_2019.dbo._Document500X1 d WHERE d._IDRRef = r._RecorderRRef)
WHEN 0x00000188 THEN (SELECT _Number FROM MAG_2019.dbo._Document392 d WHERE d._IDRRef = r._RecorderRRef)
WHEN 0x000001B1 THEN (SELECT _Number FROM MAG_2019.dbo._Document433 d WHERE d._IDRRef = r._RecorderRRef)
WHEN 0x000001CA THEN (SELECT _Number FROM MAG_2019.dbo._Document458 d WHERE d._IDRRef = r._RecorderRRef)
WHEN 0x000001E4 THEN (SELECT _Number FROM MAG_2019.dbo._Document484 d WHERE d._IDRRef = r._RecorderRRef)
WHEN 0x000001D5 THEN (SELECT _Number FROM MAG_2019.dbo._Document469 d WHERE d._IDRRef = r._RecorderRRef)
WHEN 0x00000178 THEN (SELECT _Number FROM MAG_2019.dbo._Document376 d WHERE d._IDRRef = r._RecorderRRef)
END as [Номер документа]
, CASE _RecorderTRef
WHEN 0x000001F4 THEN 'Реализация'
WHEN 0x00000188 THEN 'Возврат'
WHEN 0x000001B1 THEN 'Корректировка реализации'
WHEN 0x000001CA THEN 'Отчет комиссионера'
WHEN 0x000001E4 THEN 'Приобретение Услуг и прочих активов'
WHEN 0x000001D5 THEN 'Передача Товаров между организаций'
WHEN 0x00000178 THEN 'Акт выполненных работ'
END as [Тип документа]
, n._IDRRef as [1c_id]
, LOWER(CONCAT(SUBSTRING(convert(nvarchar(36), n._IDRRef, 2), 25,8),'-',SUBSTRING(convert(nvarchar(36), n._IDRRef, 2),21,4),'-',SUBSTRING(convert(nvarchar(36), n._IDRRef, 2),17,4),'-',SUBSTRING(convert(nvarchar(36), n._IDRRef, 2),1,4),'-',SUBSTRING(convert(nvarchar(36), n._IDRRef, 2),5,12))) as [artic_id]
, -1 * r._Fld15567 as [Количество]
, r._Fld15568 / 1000 as 'sum'
, r._Fld15569 / 1000 as 'СуммаБезНДС'
, r._Fld15595 / 1000 as 'СуммаРучнойСкидки'
, r._Fld15596 / 1000 as 'СуммаАвтоСкидки'
, z._Number as [Номер заказа]
, (SELECT top 1 convert(datetime, DATEADD(year, -2000, l._Period), 104) from [pbi].[ЛогЗаказов] l where l.status = 'Закрыт' and l.zakazNum = z._IDRRef) as [Заказ закрыт]
, CASE
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Руб'
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Вал'
ELSE 'Неопределено'
END as [Ценовая группа]
from
mag_2019.dbo._AccumRg15547 r-- Регистр накопления Выручка и себестоимость продаж
/*LEFT JOIN [MAG_2019].[dbo]._InfoRg12119 an-- Регистр сведений Аналитика учета номенклатуры
on r._Fld15548RRef = an._Fld12126RRef
*/
INNER JOIN [mag_2019].[dbo]._Reference160 an /*ключ аналитики номенклатуры*/ ON r._Fld15548RRef = an._IDRRef
INNER JOIN [mag_2019].[dbo]._Reference188X1 n /*номенклатура*/ ON n._IDRRef = an._Fld20498RRef
LEFT JOIN [MAG_2019].[dbo].[_Document404X1] z /* заказ клиента */ ON z._IDRRef = r._Fld15549_RRRef
--LEFT JOIN [mag_2019].[dbo]._Document500X1 rlz /*документ реализации*/ ON r._RecorderRRef = rlz._IDRRef
INNER JOIN [mag_2019].[dbo]._Reference162 anp /*Ключ аналитики партнера*/ ON r._Fld15550RRef = anp._IDRRef
where 1=1
AND DATEADD(year, -2000, r._Period)> @dt
END
GO
/****** Object: StoredProcedure [sebest].[Заполнить СебестоимостьСебестоимостьПродажиРезультат] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [sebest].[Заполнить СебестоимостьСебестоимостьПродажиРезультат]
AS
BEGIN
/*r._RecorderTRef:
0x000001A1 Заявление о ввозе товаров из ЕАЭС
0x000001E3 ПТУ
0x00000189 Возврат товаров поставщику
0x000001D5 Передача товаров
0x000001B0 Корректировка приобретения
0x0000020D Таможенная декларация на импорт
закупка: (0x000001E3, 0x00000189,0x000001D5, 0x000001B0)
ЕАЭС: 0x000001A1
Таможня: 0x0000020D
*/
/*
0x80CD002590EC174111E581505088A8D5 USD
0x80D40CC47A052DFD11E6B6DD1820D178 Eur
0x80E90CC47A052DFD11E7145927CEFC24 Cny
0xAE9DB496910DCFD611E94F10743DE3FF USD2
0xAE9EB496910DCFD611E95C66B5DE3AFA USD2+2
*/
DELETE FROM mag_pbi.pbi.[СебестоимостьСебестоимостьПродажиРезультат] WHERE 1=1
INSERT INTO mag_pbi.pbi.[СебестоимостьСебестоимостьПродажиРезультат] ([Период], [Статья], [Вид операции],
[Хоз операция],[Тип документа],[Номер документа], [Номер заказа], [Валюта документа],[Ценовая группа], [1c_document_id],
[Организация],[Партнер], [PartnerId], [Контрагент],[Менеджер],
[1c_id],
[artic_id], [Курс usd] ,[Курс usd2], [Количество], [Сумма], [СуммаБезНДС], [СуммаРучнойСкидки], [СуммаАвтоСкидки],
[Закупка],[Закупка, usd2], [Таможня], [Доставка] ,[Сборка], [НДС], [code], [Учетная цена] ,[Учетная цена USD2+2]
,[Учетная стоимость] ,[Учетная стоимость USD2+2]
--, [CodeUT]
/*[Сумма], [Сумма Без НДС], [Валютная сумма], [Валютная сумма Без НДС] */)
SELECT --TOP (5000)
-- это финальная выборка, её не корректировать(можно только комменить поля которые не нужны к выводу), менять всё во вложенных запросах ...
[Период]
,[Статья]
,[Вид операции]
,[Хоз операция]
,[тип документа]
,[Номер документа]
,[Номер заказа]
,[Валюта документа]
,[Ценовая группа]
,[1c_document_id]
,[Организация]
,[Партнер]
,[PartnerId]
,[Контрагент]
,[Менеджер]
,[1c_id]
,[artic_id]
,[Курс usd]
,[Курс usd2]
,[Количество]
,[Сумма]
,[СуммаБезНДС]
,[СуммаРучнойСкидки]
,[СуммаАвтоСкидки]
,[Закупка]
,[Закупка, usd2]
,[Таможня]
,[Доставка]
,[Сборка]
,[НДС]
,[code]
,[Учетная цена]
,[Учетная цена USD2+2]
,[Учетная стоимость]
,[Учетная стоимость USD2+2]
FROM (
SELECT -- TOP (1000)
[Период]
,[Статья]
,[Вид операции]
,[Хоз операция]
,[Тип документа]
,[Номер документа]
,[Номер заказа]
,[Валюта документа]
,[Ценовая группа]
,[1c_document_id]
,[Организация]
,[Партнер]
,[PartnerId]
,[Контрагент]
,[Менеджер]
,tabMain.[1c_id]
,tabMain.[artic_id]
,[Курс usd]
,[Курс usd2]
,[Количество]
,[Сумма]
,[СуммаБезНДС]
,[СуммаРучнойСкидки]
,[СуммаАвтоСкидки]
,[Закупка]
,[Закупка, usd2]
,[Таможня]
,[Доставка]
,[Сборка]
,[НДС]
, tabNom.[code]
,[Учетная цена]
,[Учетная цена USD2+2]
,[Учетная стоимость]
,[Учетная стоимость USD2+2]
FROM [mag_pbi].[pbi].[Себестоимость+СебестоимостьПродажОт2022] as tabMain
LEFT JOIN [mag_pbi].[pbi].[nomenclature] as tabNom
on tabNom.[artic_id] = tabMain.[artic_id]
) tabItog
WHERE 1=1
--and [artic_id] = 'cdb37c08-84c6-11e5-80c5-305a3a00e12b'
END
GO
/****** Object: StoredProcedure [sebest].[Проставить стоимость комплектов] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [sebest].[Проставить стоимость комплектов]
@dt datetime2(0) = '2015'
AS
BEGIN
UPDATE [pbi].[Себестоимость] SET
[Закупка] = (
SELECT -1*SUM(Закупка)
FROM [pbi].[Себестоимость] ss
INNER JOIN [pbi].[Сборки] sb
ON sb.[Дата документа] = ss.Период AND sb.[Номер документа] = ss.[Номер документа]
WHERE
sb.[ИД номенклатура комплекта] = k.[1c_id]
--0x80C5305A3A00E12B11E584C1000D5AA5
),
[Закупка, usd2] = (
SELECT -1*SUM([Закупка, usd2])
FROM [pbi].[Себестоимость] ss
INNER JOIN [pbi].[Сборки] sb
ON sb.[Дата документа] = ss.Период AND sb.[Номер документа] = ss.[Номер документа]
WHERE
sb.[ИД номенклатура комплекта] = k.[1c_id]
--0x80C5305A3A00E12B11E584C1000D5AA5
),
[Таможня] = (
SELECT -1*SUM([Таможня])
FROM [pbi].[Себестоимость] ss
INNER JOIN [pbi].[Сборки] sb
ON sb.[Дата документа] = ss.Период AND sb.[Номер документа] = ss.[Номер документа]
WHERE
sb.[ИД номенклатура комплекта] = k.[1c_id]
--0x80C5305A3A00E12B11E584C1000D5AA5
),
[ЕАЭС] = (
SELECT -1*SUM([ЕАЭС])
FROM [pbi].[Себестоимость] ss
INNER JOIN [pbi].[Сборки] sb
ON sb.[Дата документа] = ss.Период AND sb.[Номер документа] = ss.[Номер документа]
WHERE
sb.[ИД номенклатура комплекта] = k.[1c_id]
--0x80C5305A3A00E12B11E584C1000D5AA5
)
FROM [pbi].[Себестоимость] k
WHERE k. [Статья]='Закупка' AND k.[Вид операции] = 'Фасовка_Комплекты'
AND [Период] > @dt
END
GO
/****** Object: StoredProcedure [sebest].[Расчет себестомисти] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [sebest].[Расчет себестомисти]
@date datetime2(0) = '2018',
@complekty bit = 0
as
BEGIN
DECLARE @uid binary(16)
DECLARE @q numeric(15,3)
DECLARE @dt datetime2(0)
DECLARE @id INT
DECLARE @vid varchar(255)
DECLARE @cenovaya_gruppa varchar(12)
DECLARE @zakupka numeric(38,15)
DECLARE @zakupka_usd2 numeric(38,15)
DECLARE @kurs_usd2 numeric(15, 3)
DECLARE @kurs_usd numeric(15, 3)
DECLARE @kolich numeric(15,3)
DECLARE @eaes numeric(38,15)
DECLARE @tamoznia numeric(38,15)
DECLARE db_cursor CURSOR FOR
SELECT
id
, s.[1c_id]
, [количество]
, [Период]
, [Вид операции]
, CASE
WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E584520AEC30EC THEN 'Валютная'
--WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN 'Рублевая'
ELSE 'Рублевая'
END as cenovaya_gruppa
, s.[Курс usd2]
, s.[Курс usd]
FROM mag_pbi.pbi.[Себестоимость] s
INNER JOIN MAG_2019.dbo._Reference188X1 n--mag_reports.sales.w_nomenclature n
ON n._IDRRef=s.[1c_id]
WHERE 1=1
and [Статья]='Закупка'
AND ([Вид операции] IN ('Продажа'/*, 'Фасовка_Комплектующие', 'Фасовка_Комплекты'*/))
AND [Период] > @date
/*AND ( @complekty=0 AND n._IDRRef not in (SELECT [1c_id] FROM [pbi].[Сборки_комплекты])
OR
@complekty=1 AND n._IDRRef in (SELECT [1c_id] FROM [pbi].[Сборки_комплекты])
)
*/
--and n.[1c_id]=0x80F1305A3A00E12B11E63D0035692388
--and n.[1c_id]=0xAEC4B496910DCFD611EC421521579D74
--AND n.code = 'УТ-00039503'
ORDER BY [Период] ASC
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @id, @uid, @q, @dt, @vid, @cenovaya_gruppa, @kurs_usd2, @kurs_usd
WHILE @@FETCH_STATUS = 0
BEGIN
--IF @vid = 'Продажа' OR @vid = 'Фасовка_Комплектующие' BEGIN
/* расчет статьи себестоимости Закупка, вид операции Продажа */
SET @kolich = ISNULL((SELECT sum([Количество]) FROM mag_pbi.pbi.[Себестоимость] WHERE [1c_id] = @uid AND [Статья] = 'Закупка' AND ([Вид операции] IN ('Закупка', 'Продажа'/*, 'Фасовка_Комплектующие', 'Фасовка_Комплекты'*/) ) AND [Период] < @dt ),0)
IF @cenovaya_gruppa = 'Рублевая' BEGIN
SET @zakupka = ISNULL((SELECT sum([Закупка]) FROM mag_pbi.pbi.[Себестоимость] WHERE [1c_id] = @uid AND [Статья] = 'Закупка' AND ([Вид операции] IN ('Закупка', 'Продажа'/*, 'Фасовка_Комплектующие', 'Фасовка_Комплекты'*/) ) AND [Период] < @dt ),0)
SET @zakupka = ( -- сумма всего / кол всего * кол
CASE WHEN @kolich <= 0 THEN 0
ELSE
CASE WHEN -@zakupka > @zakupka/@kolich * @q THEN -@zakupka
ELSE @zakupka/@kolich * @q END
END
)
SET @zakupka_usd2 = @zakupka / @kurs_usd2
END
ELSE BEGIN
SET @zakupka_usd2 = ISNULL((SELECT sum([Закупка, usd2]) FROM mag_pbi.pbi.[Себестоимость] WHERE [1c_id] = @uid AND [Статья] = 'Закупка' AND ([Вид операции] IN ('Закупка', 'Продажа'/*, 'Фасовка_Комплектующие', 'Фасовка_Комплекты'*/)) AND [Период] < @dt ),0)
--select @zakupka_usd2
SET @zakupka_usd2 = ( -- сумма всего / кол всего * кол
CASE WHEN @kolich <= 0 THEN 0
ELSE
CASE WHEN -@zakupka_usd2 > @zakupka_usd2/@kolich * @q THEN -@zakupka_usd2
ELSE @zakupka_usd2/@kolich * @q END
END
)
--select @zakupka_usd2
SET @zakupka = @zakupka_usd2 * @kurs_usd2
--select @kurs_usd2
END
SET @eaes = ISNULL((SELECT sum([ЕАЭС]) FROM mag_pbi.pbi.[Себестоимость] WHERE [1c_id] = @uid AND [Статья] = 'Закупка' AND [Вид операции]='ЕАЭС' AND [Период] < @dt ),0)
SET @tamoznia = ISNULL((SELECT sum([Таможня]) FROM mag_pbi.pbi.[Себестоимость] WHERE [1c_id] = @uid AND [Статья] = 'Закупка' AND [Вид операции]='Таможня' AND [Период] < @dt ),0)
UPDATE mag_pbi.pbi.[Себестоимость]
SET [Закупка] = @zakupka
, [Закупка, usd2] = @zakupka_usd2
, [ЕАЭС] = ( -- сумма всего / кол всего * кол
CASE WHEN @kolich <= 0 THEN 0
ELSE
CASE WHEN -@eaes > @eaes/@kolich * @q THEN -@eaes
ELSE @eaes/@kolich * @q END
END
)
, [Таможня] = ( -- сумма всего / кол всего * кол
CASE WHEN @kolich <= 0 THEN 0
ELSE
CASE WHEN -@tamoznia > @tamoznia/@kolich * @q THEN -@tamoznia
ELSE @tamoznia/@kolich * @q END
END
)
WHERE id=@id
--END --@vid = 'Продажа'
FETCH NEXT FROM db_cursor INTO @id, @uid, @q, @dt, @vid, @cenovaya_gruppa, @kurs_usd2, @kurs_usd
END
CLOSE db_cursor
DEALLOCATE db_cursor
END
/*
ELSE if @vid = 'Фасовка_Комплекты'
UPDATE [mag_reports].[sebest].[Себестоимость]
SET [Сумма] = ( -- сумма всех комплектующих
SELECT sum(-[Сумма])
FROM [mag_reports].[sebest].[Себестоимость] WHERE [Комплект] = @uid AND [Статья] = 'Закупка' AND [Период] = dateadd(second, -1, @dt) AND [Сумма]<>0 and [Вид операции] = 'Фасовка_Комплектующие')
, [Валютная сумма] = ( -- сумма всех комплектующих
SELECT sum(-[Валютная сумма])
FROM [mag_reports].[sebest].[Себестоимость] WHERE [Комплект] = @uid AND [Статья] = 'Закупка' AND [Период] = dateadd(second, -1, @dt) AND [Валютная сумма]<>0 and [Вид операции] = 'Фасовка_Комплектующие')
WHERE id=@id
*/
--расчет по учетной цене
/*UPDATE [sebest].[Себестоимость]
SET [Учетная цена]=
/*
--первый вариант учетной цены - по учетной цене руб
(SELECT TOP (1) [Цена] / 1000
FROM [mag_reports].[sales].[pricelist] pl
where pl.[1c_id] = @uid and [Вид цены] = 'Учетная цена (руб)'
AND DATEADD(year, -2000, pl._Period) <= @dt
ORDER BY pl._Period desc)
*/
--второй вариант учетной цены - для вал товара пересчитываем уч цену через курс
(CASE
WHEN (SELECT _Fld21101RRef FROM MAG_2019.dbo._Reference188X1 WHERE _IDRRef = @uid) = 0x80C5305A3A00E12B11E584520AEC30EC THEN --'Валютная'
-- Если валютная ценовая группа, то берем учетную цену (вал)
(SELECT TOP (1) [Цена] / 1000
FROM [mag_reports].[sales].[pricelist] pl
where pl.[1c_id] = @uid and [Вид цены] = 'Учетная цена (вал)'
AND DATEADD(year, -2000, pl._Period) <= @dt
ORDER BY pl._Period desc) * (SELECT TOP 1 _Fld13220 FROM [MAG_2019].[dbo].[_InfoRg13218] rg --РегистрСведений.КурсыВалют
WHERE _Fld13219RRef = 0xAE9EB496910DCFD611E95C66B5DE3AFA --USD2+2
AND DATEADD(year, -2000, rg._Period)<= @dt
ORDER BY rg._Period desc)
ELSE --WHEN n._Fld21101RRef=0x80C5305A3A00E12B11E5845202CA01FB THEN --'Рублевая'
(SELECT TOP (1) [Цена] / 1000
FROM [mag_reports].[sales].[pricelist] pl
where pl.[1c_id] = @uid and [Вид цены] = 'Учетная цена (руб)'
AND DATEADD(year, -2000, pl._Period) <= @dt
ORDER BY pl._Period desc)
END
)
WHERE id=@id*/
/* ЗДЕСЬ ВСТАВЛЯЕМ РАСЧЕТ ДРУГИХ СТАТЕЙ СЕБЕСТОИМОСТИ ПРИ ПРОДАЖЕ */
/*if @vid = 'Фасовка_Комплекты'
insert into [sebest].[Себестоимость] ([Период], [Статья], [Вид операции], [1c_id], [artic_id], [Количество], [Сумма], [Сумма Без НДС], [Валютная сумма], [Валютная сумма Без НДС])
select
@dt as [Период]
, [Статья]
, @vid as [Вид операции]
, @uid as [1c_id]
, @ar as [artic_id]
, 0 as [Количество]
, sum([Сумма]) as [Сумма]
, 0 as [Сумма Без НДС]
, sum([Валютная сумма]) as [Валютная сумма]
, 0 as [Валютная сумма Без НДС]
FROM [mag_reports].[sebest].[Себестоимость]
WHERE [Комплект] = @uid AND not [Статья] = 'Закупка' AND [Период] = dateadd(second, -1, @dt) and [Вид операции] = 'Фасовка_Комплектующие'
group by
[Статья]
else
insert into [sebest].[Себестоимость] ([Период], [Статья], [Вид операции], [1c_id], [artic_id], [Комплект], [Количество], [Сумма], [Сумма Без НДС], [Валютная сумма], [Валютная сумма Без НДС])
select
@dt as [Период]
, [Статья]
, @vid as [Вид операции]
, @uid as [1c_id]
, @ar as [artic_id]
, @kom as [Комплект]
, 0 as [Количество]
, @q * (sum([Сумма]) / (select sum([Количество])
FROM [mag_reports].[sebest].[Себестоимость]
WHERE [1c_id] = @uid AND [Статья] = 'Закупка' AND [Период] < @dt)) as [Сумма]
, 0 as [Сумма Без НДС]
, @q * (sum([Валютная сумма]) / (select sum([Количество])
FROM [mag_reports].[sebest].[Себестоимость]
WHERE [1c_id] = @uid AND [Статья] = 'Закупка' AND [Период] < @dt)) as [Валютная сумма]
, 0 as [Валютная сумма Без НДС]
FROM [mag_reports].[sebest].[Себестоимость]
WHERE [1c_id] = @uid AND not [Статья] = 'Закупка' AND [Период] < @dt
group by
[Статья]
*/
GO
/****** Object: StoredProcedure [sebest].[Создать индексы] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
*/
CREATE PROCEDURE [sebest].[Создать индексы] as
BEGIN
CREATE NONCLUSTERED INDEX [NonClusteredIndex-20220320-182545] ON [pbi].[Себестоимость]
(
[1c_id] ASC,
[Период] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [NonClusteredIndex-1] ON [pbi].[Себестоимость]
([Статья],[Вид операции],[Период])
INCLUDE ([1c_id],[Количество])
CREATE NONCLUSTERED INDEX [NonClusteredIndex-2] ON [pbi].[Себестоимость]
(
[1c_id] ASC,
[Статья] ASC,
[Период] ASC
)
CREATE NONCLUSTERED INDEX [NonClusteredIndex-2-1] ON [pbi].[Себестоимость]
(
[Партнер] ASC,
[Период] ASC
)
CREATE NONCLUSTERED INDEX [NonClusteredIndex-3] ON [pbi].[Себестоимость]
(
[1c_id] ASC,
[Статья] ASC,
[Вид операции] ASC,
[Период] ASC
)
INCLUDE([Закупка],[ЕАЭС],[Таможня],[Количество])WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
CREATE NONCLUSTERED INDEX [NonClusteredIndex-4]
ON [pbi].[Себестоимость] ([Период],[Статья],[Вид операции],[1c_id],[Количество])
CREATE NONCLUSTERED INDEX [NonClusteredIndex-5]
ON [pbi].[Себестоимость] ([Статья],[1c_id],[Период])
CREATE NONCLUSTERED INDEX [NonClusteredIndex-6]
ON [pbi].[Себестоимость] ([Статья],[Вид операции],[1c_id],[Период])
END
GO
/****** Object: StoredProcedure [sebest].[Создать таблицу] Script Date: 18.02.2026 14:56:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Object: Table [sebest].[Себестоимость] Script Date: 10.04.2022 8:42:54 ******/
CREATE procedure [sebest].[Создать таблицу] as
BEGIN
CREATE TABLE [pbi].[Себестоимость](
id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[Период] [datetime2](0) NULL,
[Статья] [varchar](255) NOT NULL,
[Вид операции] [varchar](255) NOT NULL default '',
[Хоз операция] [varchar](255) NOT NULL default '',
[Организация] [varchar](255) NULL default '',
[Партнер] [varchar](255) NULL default '',
[Контрагент] [varchar](255) NULL default '',
[Менеджер] [varchar](255) NULL default '',
[Тип документа] [varchar](255) NULL default '',
[Номер документа] [varchar](255) NULL default '',
[Валюта документа] [varchar](255) NULL default '',
[Ценовая группа] [varchar](255) NULL default '',
[1c_document_id] [binary](16) NULL,
[1c_id] [binary](16) NULL,
[artic_id] [nvarchar](36) NULL,
[Количество] [numeric](15, 3) NULL default 0,
[Сумма] numeric(38,15) NULL default 0,
[СуммаБезНДС] numeric(38,15) NULL default 0,
[СуммаРучнойСкидки] numeric(38,15) NULL default 0,
[СуммаАвтоСкидки] numeric(38,15) NULL default 0,
[Закупка] numeric(38,15) NULL default 0,
[Закупка, usd2] numeric(38,15) NULL default 0,
[Курс usd2] [numeric](15, 3) NULL default 0,
[Курс usd] [numeric](15, 3) NULL default 0,
[Таможня] numeric(38,15) NULL default 0,
[ЕАЭС] numeric(38,15) NULL default 0,
[Учетная цена] numeric(38,15) NULL default 0,
[Учетная цена USD2+2] numeric(38,15) NULL default 0,
[Заказ закрыт] datetime NULL,
[Номер заказа] nchar(11) NULL,
[Маркетинг] numeric(38,15) NULL default 0,
[Доставка] numeric(38,15) NULL default 0,
[НДС] numeric(38,15) NULL default 0,
[Сборка] numeric(38,15) NULL default 0,
[ЗатратыМП] numeric(38,15) NULL default 0,
[PartnerId] [nvarchar](36) NULL,
[Учетная стоимость] numeric(38,15) NULL default 0,
[Учетная стоимость USD2+2] numeric(38,15) NULL default 0
) ON [PRIMARY]
END
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = -96
Left = 0
End
Begin Tables =
Begin Table = "a"
Begin Extent =
Top = 6
Left = 38
Bottom = 136
Right = 292
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "n"
Begin Extent =
Top = 138
Left = 38
Bottom = 268
Right = 297
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "g"
Begin Extent =
Top = 270
Left = 38
Bottom = 400
Right = 212
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 900
Table = 1170
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 1350
End
End
End
' , @level0type=N'SCHEMA',@level0name=N'analytics', @level1type=N'VIEW',@level1name=N'get_analytics_by_group'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1 , @level0type=N'SCHEMA',@level0name=N'analytics', @level1type=N'VIEW',@level1name=N'get_analytics_by_group'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
Begin Table = "ostatki"
Begin Extent =
Top = 6
Left = 38
Bottom = 136
Right = 228
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "tabznach"
Begin Extent =
Top = 0
Left = 527
Bottom = 130
Right = 717
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "DopRekv"
Begin Extent =
Top = 3
Left = 256
Bottom = 99
Right = 476
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "photo"
Begin Extent =
Top = 155
Left = 422
Bottom = 251
Right = 612
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "price"
Begin Extent =
Top = 102
Left = 920
Bottom = 198
Right = 1110
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "IdMP"
Begin Extent =
Top = 221
Left = 198
Bottom = 317
Right = 390
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
End
Begin CriteriaPane =
Begin ColumnWidths = 12
Column = 1440
Alias = 900
' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'VIEW',@level1name=N'tovar_bez_kontenta'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane2', @value=N'
Table = 1170
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 1350
End
End
End
' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'VIEW',@level1name=N'tovar_bez_kontenta'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=2 , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'VIEW',@level1name=N'tovar_bez_kontenta'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 900
Table = 1170
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 1350
End
End
End
' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'VIEW',@level1name=N'СтоимостьОпераций_Отбор'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1 , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'VIEW',@level1name=N'СтоимостьОпераций_Отбор'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
Begin Table = "_AccumRg33652 (MAG_2019.dbo)"
Begin Extent =
Top = 6
Left = 38
Bottom = 136
Right = 212
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 900
Table = 1170
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 1350
End
End
End
' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'VIEW',@level1name=N'СтоимостьОпераций_Фасовка'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1 , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'VIEW',@level1name=N'СтоимостьОпераций_Фасовка'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
Begin Table = "ost"
Begin Extent =
Top = 6
Left = 266
Bottom = 136
Right = 456
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "nom"
Begin Extent =
Top = 120
Left = 38
Bottom = 250
Right = 230
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "free"
Begin Extent =
Top = 252
Left = 38
Bottom = 382
Right = 256
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "uzel"
Begin Extent =
Top = 138
Left = 268
Bottom = 268
Right = 458
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "tm"
Begin Extent =
Top = 6
Left = 38
Bottom = 119
Right = 228
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "rekv"
Begin Extent =
Top = 6
Left = 494
Bottom = 85
Right = 714
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
End
Begin CriteriaPane =
Begin ColumnWidths = 12
Column = 1440
Alias = 900
Table = 1' , @level0type=N'SCHEMA',@level0name=N'ostatki', @level1type=N'VIEW',@level1name=N'OstatkiMarketSklad'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane2', @value=N'170
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 1350
End
End
End
' , @level0type=N'SCHEMA',@level0name=N'ostatki', @level1type=N'VIEW',@level1name=N'OstatkiMarketSklad'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=2 , @level0type=N'SCHEMA',@level0name=N'ostatki', @level1type=N'VIEW',@level1name=N'OstatkiMarketSklad'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
Begin Table = "sebes"
Begin Extent =
Top = 7
Left = 48
Bottom = 170
Right = 291
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "sebesSales"
Begin Extent =
Top = 7
Left = 339
Bottom = 170
Right = 533
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 900
Table = 1176
Output = 720
Append = 1400
NewValue = 1170
SortType = 1356
SortOrder = 1416
GroupBy = 1350
Filter = 1356
Or = 1350
Or = 1350
Or = 1350
End
End
End
' , @level0type=N'SCHEMA',@level0name=N'pbi', @level1type=N'VIEW',@level1name=N'Себестоимость+СебестоимостьПродаж'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1 , @level0type=N'SCHEMA',@level0name=N'pbi', @level1type=N'VIEW',@level1name=N'Себестоимость+СебестоимостьПродаж'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
Begin Table = "sebes"
Begin Extent =
Top = 7
Left = 48
Bottom = 170
Right = 291
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "sebesSales"
Begin Extent =
Top = 7
Left = 339
Bottom = 170
Right = 533
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 900
Table = 1176
Output = 720
Append = 1400
NewValue = 1170
SortType = 1356
SortOrder = 1416
GroupBy = 1350
Filter = 1356
Or = 1350
Or = 1350
Or = 1350
End
End
End
' , @level0type=N'SCHEMA',@level0name=N'pbi', @level1type=N'VIEW',@level1name=N'Себестоимость+СебестоимостьПродажОт2022'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1 , @level0type=N'SCHEMA',@level0name=N'pbi', @level1type=N'VIEW',@level1name=N'Себестоимость+СебестоимостьПродажОт2022'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
Begin Table = "sebes"
Begin Extent =
Top = 7
Left = 48
Bottom = 170
Right = 291
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "sebesSales"
Begin Extent =
Top = 7
Left = 339
Bottom = 170
Right = 533
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 900
Table = 1176
Output = 720
Append = 1400
NewValue = 1170
SortType = 1356
SortOrder = 1416
GroupBy = 1350
Filter = 1356
Or = 1350
Or = 1350
Or = 1350
End
End
End
' , @level0type=N'SCHEMA',@level0name=N'pbi', @level1type=N'VIEW',@level1name=N'Себестоимость+СебестоимостьПродажТестовая'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1 , @level0type=N'SCHEMA',@level0name=N'pbi', @level1type=N'VIEW',@level1name=N'Себестоимость+СебестоимостьПродажТестовая'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
Begin Table = "mainTab"
Begin Extent =
Top = 6
Left = 38
Bottom = 136
Right = 277
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 900
Table = 1170
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 1350
End
End
End
' , @level0type=N'SCHEMA',@level0name=N'pbiProd', @level1type=N'VIEW',@level1name=N'ИтогСебестоимостьПродажОт2022'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1 , @level0type=N'SCHEMA',@level0name=N'pbiProd', @level1type=N'VIEW',@level1name=N'ИтогСебестоимостьПродажОт2022'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3) )"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2) )"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2) )"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1) )"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 900
Table = 1170
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 1350
End
End
End
' , @level0type=N'SCHEMA',@level0name=N'pbiProd', @level1type=N'VIEW',@level1name=N'СводныйСебестоимость'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1 , @level0type=N'SCHEMA',@level0name=N'pbiProd', @level1type=N'VIEW',@level1name=N'СводныйСебестоимость'
GO