- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
CREATE PROCEDURE Out_Message_ECntl 
	--<@param1, sysname, @p1> <datatype_for_param1, , int> = <default_value_for_param1, , 0>, 
	--<@param2, sysname, @p2> <datatype_for_param2, , int> = <default_value_for_param2, , 0>
AS BEGIN
     --!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        /* Для Добавления записей в таблицу PPLS2BILLS_SRCO_MESAGE
           сначала создадим временную таблицу с номерами документа
           и ко-вом рейсов по этой дате */
     --!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-- Создаем временную таблицу с результатом группировки неотправленных рейсов
SELECT Flag_Data , COUNT(Flag_Data) AS Kol_Reis
INTO Vrem_Tabl_Mesage_Vrem 
FROM PPLS2BILLS_SRCO
WHERE Flag_Out_EC = 0 --Не отправленные
GROUP BY  Flag_Data
-- Таблица - Стек данные в ней сохраняются до полной обр Рейсов по месяцу
INSERT INTO Steck_Table_Mesage SELECT
      Flag_Data = a.Flag_Data,
      Kol_Reis  = a.Kol_Reis
FROM Vrem_Tabl_Mesage_Vrem a
-- Удаляю Vrem_Tabl_Mesage_Vrem
DROP Table Vrem_Tabl_Mesage_Vrem
-- Добавляю записи в таблицу PPLS2BILLS_SRCO_MESAGE
INSERT INTO  PPLS2BILLS_SRCO_MESAGE SELECT  
   DOCUMENT             = Flag_Data, 
   Nom_Document         = dbo.Mesage_Namber(Flag_Data),
   Kol_Reis_In_Docum    = Kol_Reis,
   Cancel_Kol_Reis_Doc  = ( SELECT COUNT(*)
                            FROM PPLS2BILLS_SRCO_DEL a INNER JOIN PPLS2BILLS_SRCO b
                            ON a.PPLS_ID = b.PPLS_ID
                            WHERE a.Flag_Out_EC = 0 and b.Flag_Out_EC = 0 ),
   Greate_Date_Docum    = GetDate(),
   Flag_Out_EC          = 0
FROM Steck_Table_Mesage WHERE Flag_Data IS NOT NULL
-- Корректирую записи  №_Сообщения в PPLS2BILLS_SRCO
UPDATE a SET Flag_Mesage =
                (SELECT MAX(Nom_Document) FROM PPLS2BILLS_SRCO_MESAGE a
                        INNER JOIN PPLS2BILLS_SRCO b
                        ON a.DOCUMENT = b.Flag_Data )                        
FROM PPLS2BILLS_SRCO a INNER JOIN PPLS2BILLS_SRCO_MESAGE b
ON a.Flag_Data = b.DOCUMENT
WHERE a.Flag_Out_EC = 0
-- ==================================================================================
-- Курсор выбирает строки из PPLS2BILLS_SRCO_MESAGE, заполняет Vrem_Tabl_NumReis
-- ==================================================================================
-- Создадим временную таблицу 
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Vrem_Tabl_NumReis]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Vrem_Tabl_NumReis]
CREATE TABLE [dbo].[Vrem_Tabl_NumReis] (
	[ID_PPLS] [int] NULL ,
	[Doc] [char] (8) COLLATE Ukrainian_CI_AI_KS_WS NULL ,
	[Num] [int] NULL ,
	[Reis] [int] IDENTITY (1, 1) NOT NULL 
) ON [PRIMARY]
-- Обьявляю курсор
DECLARE	Cursor_Num_Reis CURSOR 
FOR SELECT DOCUMENT, Nom_Document 
           FROM PPLS2BILLS_SRCO_MESAGE
 -- Обьявляю переменные для приема полей таблицы
DECLARE @count int, @DOCUMENT char(8),
        @Nom_Document int
SELECT @count = 1
-- Открываю курсор
OPEN Cursor_Num_Reis  
FETCH NEXT FROM Cursor_Num_Reis INTO @DOCUMENT, @Nom_Document -- считываю первую запись
WHILE (@@fetch_status <> -1) -- цикл по записям курсора
BEGIN	
-- вставляю в Vrem_Tabl_NumReis (счетчик по выбранным записям)рейсы из PPLS2BILLS_SRCO_MESAGE
insert into Vrem_Tabl_NumReis  
select * 
from dbo.Fun_Num_Reis_in_Mesage(@DOCUMENT,@Nom_Document)
--корректируем номер рейса в сообщении 
UPDATE a     
SET Flag_NumReis_Mes = b.Reis
FROM PPLS2BILLS_SRCO a INNER JOIN Vrem_Tabl_NumReis b
ON a.PPLS_ID = b.ID_PPLS
WHERE a.Flag_Out_EC = 0
-- Подготавливаю таблицу для нового документа
truncate table dbo.Vrem_Tabl_NumReis -- при truncate счетчик сбрасывается в 0
	FETCH NEXT FROM Cursor_Num_Reis INTO @DOCUMENT, @Nom_Document -- переход на следующую запись
	SELECT @count = @count + 1 -- количество записей
END
CLOSE Cursor_Num_Reis -- закрываю курсор
DEALLOCATE Cursor_Num_Reis -- освобождаю курсор
--DROP TABLE Vrem_Tabl_NumReis -- удаляю временно созданную таблицу
END -- Procedure
GO
-- ВНИМАНИЕ! - ДОДЕЛАТЬ ПРИ ОТПРАВКЕ ПО ПОЧТЕ УСТ ФЛАГОВ В ТАБЛИЦАХ "ОТПРАВЛЕНО"
-- И ЗАПОЛНЕНИЕ ТАБЛИЦЫ dbo.PPLS2BILLS_CRCO_Mail_Out
--truncate table PPLS2BILLS_SRCO_MESAGE
--delete dbo.PPLS2BILLS_SRCO
--delete dbo.PPLS2BILLS_SRCO_DEL
--exec dbo.Insert_PPLS2BILLS_SRCO
--EXEC Insert_PPLS2BILLS_SRCO '17 july, 2002'
-- exec Out_Message_ECntl