Перейти к содержимому

Задача сделать смс оповещение, сколько готово закупок к 8 утра.

Сначала сделаем 1 таблицу. Эта таблица будет темповая.

GO

/****** Object:  Table [dbo].[zakupki]    Script Date: 05/11/2016 16:18:14 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[zakupki](
	[SchedDate] [datetime] NOT NULL,
	[Type_in_schedule] [varchar](16) NOT NULL,
	[рассчитано] [int] NULL,
	[колво строк рассчитано] [int] NULL,
	[кол-во заявок] [int] NULL,
	[колво строк] [int] NULL,
	[заявки с автоутверждением] [int] NULL,
	[колво строк автоутвержд.] [int] NULL,
	[не расчитаные строки] AS [колво строк] - [колво строк рассчитано],
	[не расчитаные заявки] AS [кол-во заявок] - [рассчитано]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

Создадим вторую таблицу. Эта таблица будет архивная

GO

/****** Object:  Table [dbo].[zakupki_arhiv]    Script Date: 05/11/2016 16:18:14 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[zakupki](
	[SchedDate] [datetime] NOT NULL,
	[Type_in_schedule] [varchar](16) NOT NULL,
	[рассчитано] [int] NULL,
	[колво строк рассчитано] [int] NULL,
	[кол-во заявок] [int] NULL,
	[колво строк] [int] NULL,
	[заявки с автоутверждением] [int] NULL,
	[колво строк автоутвержд.] [int] NULL,
	[не расчитаные строки] AS [колво строк] - [колво строк рассчитано],
	[не расчитаные заявки] AS [кол-во заявок] - [рассчитано]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

Теперь сделаем задание которое будет наполнять таблицу zakupki в 8 утра.

DELETE FROM s0055.rkur_dbastat.dbo.zakupki; 
GO
DROP TABLE #t
;with cte
as
                (select v.RCONTRACTACCOUNT ,v.PURCHASEPATTERNID ,count(*) as 'count'
                from ax_molniya.RFD.VENDCONTRACTITEMVIEW v
                inner join ax_molniya.[RFD].[PURCHASEPATTERNview] p on v.RCONTRACTACCOUNT = p.RCONTRACTACCOUNT and v.PURCHASEPATTERNID = p.PURCHASEPATTERNID
                where AUTOORDER = 1
                GROUP by v.RCONTRACTACCOUNT ,v.PURCHASEPATTERNID)

select
    vds.SchedDate
                , Type_in_schedule = case pp.UseForShop
                               when 0 then 'ЦАУ'
                               when 1 then 'Магазин'
                               else 'ЦАУ, без шаблона' end
                , sum(vds.ISCALC) as 'рассчитано'
                , sum(case when vds.ISCALC = 1 then cte.count else 0 end) as 'колво строк рассчитано'
                , count(*) as 'кол-во заявок'
                , sum(cte.count) as [колво строк]
                , sum(vo.AUTOCREATEPURCHORDER) as [заявки с автоутверждением]
                , sum(case when vo.AUTOCREATEPURCHORDER = 1 then cte.count else 0 end) as [колво строк автоутвержд.]
INTO #t
from ax_molniya.[RFD].[VENDDELIVERYSCHEDULEview] vds
left join ax_molniya.[RFD].[PURCHASEPATTERNview] pp on pp.RContractAccount = vds.ContractNum and pp.PurchasePatternId = vds.PatternId
left join ax_molniya.dbo.VendRequestOrderTable vo on vo.REQUESTORDERID = vds.ORDERID
left join cte cte on cte.RCONTRACTACCOUNT = pp.RCONTRACTACCOUNT and cte.purchasepatternid = pp.PURCHASEPATTERNID
where pp.UseForShop = 1
group by vds.SchedDate
                  ,pp.UseForShop
                order by
                case pp.UseForShop
                               when 0 then 'ЦАУ'
                               when 1 then 'Магазин'
                               else 'ЦАУ, без шаблона' end,
                vds.SchedDate ,
                pp.UseForShop
INSERT INTO s0055.rkur_dbastat.dbo.zakupki
([SchedDate]
      ,[Type_in_schedule]
      ,[рассчитано]
      ,[колво строк рассчитано]
      ,[кол-во заявок]
      ,[колво строк]
      ,[заявки с автоутверждением]
      ,[колво строк автоутвержд.])
SELECT 
       [SchedDate]
      ,[Type_in_schedule]
      ,[рассчитано]
      ,[колво строк рассчитано]
      ,[кол-во заявок]
      ,[колво строк]
      ,[заявки с автоутверждением]
      ,[колво строк автоутвержд.] 
      FROM #t ;

Теперь сделаем задание которое будет сливать данные в архив. И будет обновлять данные если они изменились в 1 таблице.

MERGE zakupki_arhiv trg -- таблица приемник
USING zakupki src -- таблица источник
ON trg.SchedDate=src.SchedDate  -- условие слияния

/*  -- 1. Строка есть в trg но нет сопоставления со строкой из src
WHEN NOT MATCHED BY SOURCE THEN
  DELETE  */

-- 2. Есть сопоставление строки trg со строкой из источника src
WHEN MATCHED THEN
  UPDATE SET
    trg.[колво строк] = src.[колво строк],
    trg.[кол-во заявок] = src.[кол-во заявок],
    trg.[заявки с автоутверждением] = src.[заявки с автоутверждением],
     trg.[колво строк автоутвержд.] = src.[колво строк автоутвержд.]

-- 3. Строка не найдена в trg, но есть в src
WHEN NOT MATCHED BY TARGET THEN -- предложение BY TARGET можно отпускать, т.е. NOT MATCHED = NOT MATCHED BY TARGET
  INSERT(SchedDate,Type_in_schedule,[рассчитано],[колво строк рассчитано],[кол-во заявок],[колво строк],[заявки с автоутверждением],[колво строк автоутвержд.])
  VALUES(src.SchedDate,src.Type_in_schedule,src.[рассчитано],src.[колво строк рассчитано],src.[кол-во заявок],src.[колво строк],src.[заявки с автоутверждением],[колво строк автоутвержд.]);
  
  GO
  
  UPDATE dbo.zakupki_arhiv
  SET [рассчитано] =  (SELECT [рассчитано]
                                     FROM dbo.zakupki
  where CONVERT(VARCHAR(20),SchedDate,5)  = (select CONVERT (date, SYSDATETIME()))),

  [колво строк рассчитано] =  (SELECT [колво строк рассчитано]
                                     FROM dbo.zakupki
  where CONVERT(VARCHAR(20),SchedDate,5)  = (select CONVERT (date, SYSDATETIME())))
  
  where CONVERT(VARCHAR(20),SchedDate,5)  = (select CONVERT (date, SYSDATETIME()))

Добавим сенсор для мониторинга и отправки смс.

/****** Сценарий для команды SelectTopNRows среды SSMS  ******/
SELECT TOP 1 
--CONVERT(CHAR(20),SchedDate,110) AS SchedDate
/* [SchedDate]
      [Type_in_schedule]
      ,[рассчитано]
      ,[колво строк рассчитано]
      ,[кол-во заявок]
      ,[колво строк]
      ,[заявки с автоутверждением]
      ,[колво строк автоутвержд.]
      ,[не расчитаные строки] */
      [не расчитаные заявки]
  FROM [rkur_dbastat].[dbo].[zakupki]


WHERE 
CONVERT(VARCHAR(20),SchedDate,5)  = (select CONVERT (date, SYSDATETIME()))

Сам сенсор в prtg

Задача сделать смс оповещение, сколько готово закупок к 8 утра.

И создан календарь zakupki что бы датчик работал только с 8 до 9 утра.

Задача сделать смс оповещение, сколько готово закупок к 8 утра.

 

Similar Posts:

Метки:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *