Project

General

Profile

XL_XUAT.txt

Luc Tran Van, 11/17/2023 11:13 AM

 
1

    
2
ALTER PROCEDURE dbo.MW_OUT_App 
3
    @p_OUT_ID VARCHAR(15) =NULL,
4
    @p_CHECKER_ID VARCHAR(100) =NULL,
5
    @p_APPROVE_DT VARCHAR(20) =NULL,
6
    @p_XmlData XML=NULL
7
AS
8
DECLARE @OUT_ID VARCHAR(15) =NULL,
9
        @BRN_ID VARCHAR(15) =NULL,
10
        @MAST_BAL_ID VARCHAR(15) =NULL,
11
        @CUST_NAME NVARCHAR(200) =NULL,
12
        @QTY DECIMAL(18,2)=NULL,
13
        @PRICE NUMERIC(18, 0) =NULL,
14
        @TOTAL_AMT NUMERIC(18, 2) =NULL,
15
        @NOTES NVARCHAR(1000) =NULL,
16
        @TO_BRN_ID VARCHAR(15) =NULL,
17
        @TO_DEPT_ID VARCHAR(15) =NULL;
18
DECLARE @hdoc INT;
19
DECLARE @INDEX INT =0
20
DECLARE @p_ID_MAS_BAL VARCHAR(15);
21
EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XmlData;
22

    
23
DECLARE @C_TO_BRN_ID VARCHAR(15), @C_TO_DEP_ID VARCHAR(15)
24
DECLARE @STATUS VARCHAR(50), @AUTH_STATUS VARCHAR(10)
25

    
26

    
27
DECLARE XmlData CURSOR FOR
28
SELECT *
29
  FROM
30
    OPENXML(@hdoc, '/Root/XmlData', 2)
31
    WITH(
32
        OUT_ID VARCHAR(15),
33
        MAST_BAL_ID VARCHAR(15),
34
        CUST_NAME NVARCHAR(200),
35
        QTY DECIMAL(18,2),
36
        PRICE NUMERIC(18, 0),
37
        TOTAL_AMT NUMERIC(18, 2),
38
        NOTES NVARCHAR(1000),
39
        TO_BRN_ID VARCHAR(15),
40
        TO_DEPT_ID VARCHAR(15)
41
        );
42
OPEN XmlData;
43
BEGIN TRANSACTION;
44

    
45
DECLARE @p_ID VARCHAR(15);
46
FETCH NEXT FROM XmlData
47
 INTO @OUT_ID,
48
      @MAST_BAL_ID,
49
      @CUST_NAME,
50
      @QTY,
51
      @PRICE,
52
      @TOTAL_AMT,
53
      @NOTES,
54
      @TO_BRN_ID,
55
      @TO_DEPT_ID;
56
DECLARE @l_SUM_QTY_BALANCE DECIMAL(18,2)=0;
57
DECLARE @l_SUM_TOTAL_AMT NUMERIC(18, 2)=0;
58
DECLARE @l_TOTAL_AMT NUMERIC(18, 2)=0;
59

    
60

    
61

    
62
IF(@@FETCH_STATUS=-1)BEGIN
63
    ROLLBACK TRANSACTION;
64
    SELECT '-1' AS Result,
65
        @p_OUT_ID OUT_ID,
66
        N'Vui lòng duyệt lại sau khi dữ liệu được load hoàn tất' ErrorDesc;
67
    RETURN '-1';
68
END;
69

    
70
IF((SELECT STATUS FROM MW_OUT mo WHERE mo.OUT_ID = @p_OUT_ID) <> 'SendApp')
71
BEGIN
72
	ROLLBACK TRANSACTION
73
  SELECT '-1' as Result, '' OUT_ID, N'Phiếu xuất chưa đến bước duyệt bạn không được phép cập nhật thông tin.' ErrorDesc
74
	RETURN '-1'
75
END
76

    
77
-- 24-03-19: KIEM TRA NEU DANG TRA VE THI KHONG DUOC PHEP DUYET
78
IF((SELECT AUTH_STATUS FROM MW_OUT WHERE OUT_ID = @p_OUT_ID) ='R')
79
	BEGIN
80
		CLOSE XmlData
81
		DEALLOCATE XmlData
82
		ROLLBACK TRANSACTION
83
		SELECT '-1' as Result,@p_OUT_ID OUT_ID, N'Giao dịch đang bị trả về. Vui lòng cập nhật lại thông tin trước khi duyệt' ErrorDesc
84
		RETURN '-1'
85
	END
86

    
87
 DECLARE @CUR_PROCESS VARCHAR(20) DECLARE @p_BRANCH_LOGIN VARCHAR(15), @p_DEP_LOGIN VARCHAR(15)
88

    
89
  --Kiểm tra Kho nếu kho đặt biệt check đã yêu cầu hạch toán chưa nếu chưa yêu cầu chọn hạch toán mới được qua kế toán
90
  DECLARE @WARE_CODE VARCHAR(25),@ListWare_CODE VARCHAR(500);
91
  SELECT @WARE_CODE=cw.WARE_CODE FROM MW_OUT MO LEFT JOIN CM_WARE cw ON MO.WARE_ID = cw.WARE_ID WHERE MO.OUT_ID = @p_OUT_ID
92
  SELECT @ListWare_CODE = sp.ParaValue FROM SYS_PARAMETERS sp WHERE sp.ParaKey = 'MW_OUT_WARE_CUSTOMER'
93
  IF(EXISTS(SELECT 1 FROM STRING_SPLIT(@ListWare_CODE, ',') WHERE VALUE = @WARE_CODE))
94
  BEGIN
95

    
96
    --Nếu tồn tại 3 kho quà tặng Thì TDV duyệt phiếu chờ KSV phê duyệt(MW_OUT_KSV_KT_APP) thì mới trừ số liệu
97

    
98
    --- KIỂM TRA TỰ XUẤT HAY XUẤT KHÁC ĐƠN VỊ
99
    IF EXISTS(SELECT 1 
100
    FROM MW_OUT_DT A
101
    LEFT JOIN MW_OUT B ON A.OUT_ID= B.OUT_ID
102
    WHERE A.OUT_ID = @p_OUT_ID
103
        AND ((A.UNIT_RECEIVE = B.BRN_ID AND B.BRN_ID <> 'DV0001')
104
             OR (A.UNIT_RECEIVE = B.BRN_ID AND B.BRN_ID = 'DV0001' AND ISNULL(B.DEPT_ID,'') = ISNULL(A.DEP_RECEIVE,''))
105
            )
106
    )
107
    BEGIN
108
        PRINT N'TỰ XUẤT'
109
        IF((SELECT REQ_ACOUNT FROM MW_OUT WHERE OUT_ID = @p_OUT_ID) <> '1')
110
    	BEGIN
111
           BEGIN
112
--        		CLOSE XmlData
113
--        		DEALLOCATE XmlData
114
--        		ROLLBACK TRANSACTION
115
--        		SELECT '-1' as Result,@p_OUT_ID OUT_ID, N'Xuất kho đối với các kho quà tặng chưa cập nhật yêu cầu hạch toán. Vui lòng cập nhật lại thông tin trước khi duyệt' ErrorDesc
116
--        		RETURN '-1'
117

    
118
            ------- TRẢ VỀ BƯỚC NHÂN VIÊN TẠO CẬP NHẬN YÊU CẦU HẠCH TOÁN ĐỂ TIẾP TỤC LÊN PHÒNG KẾ TOÁN XỬ LÝ
119
                --UPDATE MW_OUT SET STATUS = 'REQ_ACOUNT', AUTH_STATUS = 'A', KT_AUTH_STATUS = NULL WHERE OUT_ID =@p_OUT_ID
120
                UPDATE MW_OUT SET STATUS = 'KSV_KT_APP', AUTH_STATUS = 'A', KT_AUTH_STATUS = NULL WHERE OUT_ID =@p_OUT_ID
121
                UPDATE A SET A.QTY_RECEIVE = A.QTY, QTY_DAMAGED = 0, QTY_LOSS = 0
122
                FROM MW_OUT_DT A
123
                WHERE A.OUT_ID = @p_OUT_ID
124
        	END
125
    	END
126
        ELSE 
127
            BEGIN
128

    
129
                UPDATE MW_OUT SET STATUS = 'KSV_KT_APP', AUTH_STATUS = 'A', KT_AUTH_STATUS = NULL WHERE OUT_ID =@p_OUT_ID
130
                UPDATE A SET A.QTY_RECEIVE = A.QTY, QTY_DAMAGED = 0, QTY_LOSS = 0
131
                FROM MW_OUT_DT A
132
                WHERE A.OUT_ID = @p_OUT_ID
133

    
134
--                UPDATE MW_OUT SET STATUS = 'OUT_KT', AUTH_STATUS = 'A', KT_AUTH_STATUS = 'E' WHERE OUT_ID =@p_OUT_ID
135
--
136
--                UPDATE A SET A.QTY_RECEIVE = A.QTY, QTY_DAMAGED = 0, QTY_LOSS = 0
137
--                FROM MW_OUT_DT A
138
--                WHERE A.OUT_ID = @p_OUT_ID
139
             END
140
    END
141
    ELSE
142
    BEGIN
143
--    	IF((SELECT REQ_ACOUNT FROM MW_OUT WHERE OUT_ID = @p_OUT_ID) <> '1')
144
--        BEGIN
145
--        		CLOSE XmlData
146
--        		DEALLOCATE XmlData
147
--        		ROLLBACK TRANSACTION
148
--        		SELECT '-1' as Result,@p_OUT_ID OUT_ID, N'Xuất kho đối với các kho quà tặng chưa cập nhật yêu cầu hạch toán. Vui lòng cập nhật lại thông tin trước khi duyệt' ErrorDesc
149
--        		RETURN '-1'
150
--        END
151
--    	ELSE 
152
        BEGIN
153
            BEGIN
154
            PRINT N'XUẤT KHÁC ĐƠN VỊ HOẶC PHÒNG BAN'
155
          	UPDATE [dbo].[MW_OUT]
156
            SET AUTH_STATUS='A',
157
            CHECKER_ID=@p_CHECKER_ID,
158
            STATUS ='KSV_KT_APP',
159
      	    APPROVE_DT =  CONVERT(DATETIME, @p_APPROVE_DT, 103)
160
            WHERE [OUT_ID]=@p_OUT_ID;
161
    
162
            DECLARE CUR_CONFIRM CURSOR FOR
163
            SELECT ISNULL(UNIT_RECEIVE,''), ISNULL(DEP_RECEIVE,'')
164
            FROM MW_OUT_DT 
165
            WHERE OUT_ID = @p_OUT_ID
166
            GROUP BY ISNULL(UNIT_RECEIVE,''), ISNULL(DEP_RECEIVE,'')
167
            OPEN CUR_CONFIRM
168
            FETCH NEXT FROM CUR_CONFIRM INTO @C_TO_BRN_ID,@C_TO_DEP_ID
169
            WHILE @@FETCH_STATUS = 0
170
            BEGIN
171
                DECLARE @p_OUT_CONF_ID_0 VARCHAR(15);
172
              	EXEC SYS_CodeMasters_Gen 'MW_OUT_CONF', @p_OUT_CONF_ID_0 OUT;
173
              	IF(NOT EXISTS(SELECT 1 FROM MW_OUT_CONF WHERE OUT_ID = @p_OUT_ID AND ISNULL(BRANCH_RECIVE,'') = ISNULL(@C_TO_BRN_ID,'') AND ISNULL(DEP_RECIVE,'') = ISNULL(@C_TO_DEP_ID,'')))
174
              	BEGIN
175
              		INSERT INTO MW_OUT_CONF (ID, OUT_ID, BRANCH_RECIVE, DEP_RECIVE, MAKER_ID, CREATE_DT, CHECKER_ID, APPROVE_DT, BRANCH_CREATE, RECORD_STATUS,STATUS)   
176
                  VALUES (@p_OUT_CONF_ID_0,@p_OUT_ID,@C_TO_BRN_ID,@C_TO_DEP_ID,NULL,NULL,NULL, NULL,NULL,'1','CONFIRM')
177
              	END
178
                FETCH NEXT FROM CUR_CONFIRM INTO @C_TO_BRN_ID,@C_TO_DEP_ID
179
            END
180
            CLOSE CUR_CONFIRM
181
            DEALLOCATE CUR_CONFIRM
182
            
183
            
184
                    SELECT @p_BRANCH_LOGIN = TU.TLSUBBRID, @p_DEP_LOGIN = TU.SECUR_CODE FROM TL_USER TU WHERE TU.TLNANME = (SELECT MO.MAKER_ID FROM MW_OUT MO WHERE MO.OUT_ID = @p_OUT_ID)
185
                  SET @CUR_PROCESS = (SELECT TOP 1 MRP.PROCESS_ID FROM MW_REQUEST_PROCESS MRP WHERE MRP.REQ_ID = @p_OUT_ID AND MRP.STATUS = 'C')
186
                  UPDATE MW_REQUEST_PROCESS SET STATUS = 'P' WHERE REQ_ID = @p_OUT_ID AND STATUS = 'C'
187
                  INSERT INTO MW_REQUEST_PROCESS(REQ_ID,[PROCESS_ID],PROCESS_NAME,[STATUS],ROLE_USER,BRANCH_ID,PARENT_PROCESS_ID,DEP_ID, PROCESS_TYPE,RECEPTION_DT,NOTES)
188
                  VALUES(@p_OUT_ID,'CONF',N'Nhân viên tạo phiếu xác nhận','C','NVTT',@p_BRANCH_LOGIN,@CUR_PROCESS,@p_DEP_LOGIN, 'Update',GETDATE(), N'Xác nhận giao')
189
          END
190
    	END
191
      IF @@Error<>0 GOTO ABORT;
192
    END
193

    
194
  END
195
  ELSE
196
  BEGIN
197
--- KIỂM TRA TỰ XUẤT HAY XUẤT KHÁC ĐƠN VỊ
198
    IF EXISTS(SELECT 1 
199
    FROM MW_OUT_DT A
200
    LEFT JOIN MW_OUT B ON A.OUT_ID= B.OUT_ID
201
    WHERE A.OUT_ID = @p_OUT_ID 
202
        AND ((A.UNIT_RECEIVE = B.BRN_ID AND B.BRN_ID <> 'DV0001')
203
             OR (A.UNIT_RECEIVE = B.BRN_ID AND B.BRN_ID = 'DV0001' AND ISNULL(B.DEPT_ID,'') = ISNULL(A.DEP_RECEIVE,''))
204
            )
205
    )
206
      BEGIN
207
        PRINT N'TỰ XUẤT'
208

    
209
      	UPDATE [dbo].[MW_OUT]
210
        SET AUTH_STATUS='A',
211
        CHECKER_ID=@p_CHECKER_ID,
212
        STATUS ='OUT_KT',
213
  	    APPROVE_DT =  CONVERT(DATETIME, @p_APPROVE_DT, 103)
214
        WHERE [OUT_ID]=@p_OUT_ID;
215

    
216
        UPDATE A SET A.QTY_RECEIVE = A.QTY, QTY_DAMAGED = 0, QTY_LOSS = 0
217
        FROM MW_OUT_DT A
218
        WHERE A.OUT_ID = @p_OUT_ID
219

    
220
      END
221
      ELSE -------------------
222
      BEGIN
223
        PRINT N'XUẤT KHÁC ĐƠN VỊ HOẶC PHÒNG BAN'
224
      	UPDATE [dbo].[MW_OUT]
225
        SET AUTH_STATUS='A',
226
        CHECKER_ID=@p_CHECKER_ID,
227
        STATUS ='CONFIRM',
228
  	    APPROVE_DT =  CONVERT(DATETIME, @p_APPROVE_DT, 103)
229
        WHERE [OUT_ID]=@p_OUT_ID;
230

    
231
---- Khai báo cur insert bước xác nhận cho người tạo upload file danh sách chứng thực xuất kho
232
        DECLARE CUR_CONFIRM CURSOR FOR
233
        SELECT ISNULL(UNIT_RECEIVE,''), ISNULL(DEP_RECEIVE,'')
234
        FROM MW_OUT_DT 
235
        WHERE OUT_ID = @p_OUT_ID
236
        GROUP BY ISNULL(UNIT_RECEIVE,''), ISNULL(DEP_RECEIVE,'')
237
        OPEN CUR_CONFIRM
238
        FETCH NEXT FROM CUR_CONFIRM INTO @C_TO_BRN_ID,@C_TO_DEP_ID
239
        WHILE @@FETCH_STATUS = 0
240
        BEGIN
241
            DECLARE @p_OUT_CONF_ID_1 VARCHAR(15);
242
          	EXEC SYS_CodeMasters_Gen 'MW_OUT_CONF', @p_OUT_CONF_ID_1 OUT;
243
          	IF(NOT EXISTS(SELECT 1 FROM MW_OUT_CONF WHERE OUT_ID = @p_OUT_ID AND ISNULL(BRANCH_RECIVE,'') = ISNULL(@C_TO_BRN_ID,'') AND ISNULL(DEP_RECIVE,'') = ISNULL(@C_TO_DEP_ID,'')))
244
          	BEGIN
245
          		INSERT INTO MW_OUT_CONF (ID, OUT_ID, BRANCH_RECIVE, DEP_RECIVE, MAKER_ID, CREATE_DT, CHECKER_ID, APPROVE_DT, BRANCH_CREATE, RECORD_STATUS,STATUS)   
246
              VALUES (@p_OUT_CONF_ID_1,@p_OUT_ID,@C_TO_BRN_ID,@C_TO_DEP_ID,NULL,NULL,NULL, NULL,NULL,'1','CONFIRM')
247
          	END
248
            
249
            FETCH NEXT FROM CUR_CONFIRM INTO @C_TO_BRN_ID,@C_TO_DEP_ID
250
        END
251
        CLOSE CUR_CONFIRM
252
        DEALLOCATE CUR_CONFIRM
253
        
254
                SELECT @p_BRANCH_LOGIN = TU.TLSUBBRID, @p_DEP_LOGIN = TU.SECUR_CODE FROM TL_USER TU WHERE TU.TLNANME = (SELECT MO.MAKER_ID FROM MW_OUT MO WHERE MO.OUT_ID = @p_OUT_ID)
255
              SET @CUR_PROCESS = (SELECT TOP 1 MRP.PROCESS_ID FROM MW_REQUEST_PROCESS MRP WHERE MRP.REQ_ID = @p_OUT_ID AND MRP.STATUS = 'C')
256
              UPDATE MW_REQUEST_PROCESS SET STATUS = 'P' WHERE REQ_ID = @p_OUT_ID AND STATUS = 'C'
257
              INSERT INTO MW_REQUEST_PROCESS(REQ_ID,[PROCESS_ID],PROCESS_NAME,[STATUS],ROLE_USER,BRANCH_ID,PARENT_PROCESS_ID,DEP_ID, PROCESS_TYPE,RECEPTION_DT,NOTES)
258
              VALUES(@p_OUT_ID,'CONF',N'Nhân viên tạo phiếu xác nhận','C','NVTT',@p_BRANCH_LOGIN,@CUR_PROCESS,@p_DEP_LOGIN, 'Update',GETDATE(), N'Xác nhận giao')
259

    
260
      END
261
      IF @@Error<>0 GOTO ABORT;
262
      WHILE @@FETCH_STATUS=0 
263
      BEGIN
264
    	  SET @INDEX = @INDEX+1
265
    	  -- 07 -03 -2019 KIEM TRA LAI SO LUONG (VI SE CO TRUONG HOP VUA DIEU CHUYEN, VUA XUAT SD, VƯA THU HOI, VUA THANH LY TREN 1 MAST_BAL_ID)
266
    	  IF(@QTY > (SELECT QTY_BALANCE FROM MW_MAST_BAL WHERE MAST_BAL_ID=@MAST_BAL_ID))
267
    	  BEGIN
268
    		    CLOSE XmlData
269
    		    DEALLOCATE XmlData
270
    		    ROLLBACK TRANSACTION
271
    		    SELECT '-1' as Result, @OUT_ID OUT_ID, N'Dòng '+ CONVERT(VARCHAR(15),@INDEX) +N': Số lượng xuất sử dụng vượt quá số lượng tồn' ErrorDesc
272
    		    RETURN '-1'
273
  	    END
274
        --Update MW_Mast_BAL khi TDV duyệt
275
        --UPDATE MW_MAST_BAL SET QTY_BALANCE = (QTY_BALANCE-@QTY), QTY_REAL = (QTY_REAL-@QTY), QTY_TEMP = (QTY_TEMP+@QTY) WHERE MAST_BAL_ID = @MAST_BAL_ID
276

    
277

    
278
--      	INSERT INTO dbo.MW_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
279
--      	VALUES(@p_OUT_ID,'APPR',@p_CHECKER_ID,GETDATE(), N'Hành chính duyệt phiếu.',N'Hành chính duyệt phiếu thành công.')
280

    
281
        IF @@Error<>0 GOTO ABORT;
282
        FETCH NEXT FROM XmlData
283
         INTO @OUT_ID,
284
             @MAST_BAL_ID,
285
             @CUST_NAME,
286
             @QTY,
287
             @PRICE,
288
             @TOTAL_AMT,
289
             @NOTES,
290
             @TO_BRN_ID,
291
             @TO_DEPT_ID;
292
        END;
293
        CLOSE XmlData;
294
        DEALLOCATE XmlData;
295
  END
296
  
297
	INSERT INTO dbo.MW_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
298
	VALUES(@p_OUT_ID,'APPNEW',@p_CHECKER_ID,GETDATE(), N'Trưởng đơn vị duyệt phiếu',N'Trưởng đơn vị duyệt phiếu thành công')
299
  
300

    
301

    
302
--NẾU CÁC KHO THƯỜNG THÌ TRỪ SỐ. - KHO QUÀ TẶNG THÌ TRỪ Ở BƯỚC KSV
303
  IF(NOT EXISTS(SELECT 1
304
            FROM STRING_SPLIT(@ListWare_CODE,',') A
305
            INNER JOIN CM_WARE B ON A.VALUE = B.WARE_CODE
306
            INNER JOIN MW_OUT C ON B.WARE_ID = C.WARE_ID
307
            WHERE C.OUT_ID = @p_OUT_ID
308
            ))
309
  BEGIN
310
      UPDATE B SET B.QTY_REAL = B.QTY_REAL - A.QTY, B.QTY_TEMP = B.QTY_TEMP + A.QTY
311
      FROM MW_OUT_DT A
312
      INNER JOIN MW_MAST_BAL B ON A.MAST_BAL_ID = B.MAST_BAL_ID
313
      WHERE A.OUT_ID = @p_OUT_ID
314
  END
315
COMMIT TRANSACTION;
316
SELECT '0' AS Result, @p_OUT_ID OUT_ID, '' ErrorDesc;
317
RETURN '0';
318
ABORT:
319
BEGIN
320
    CLOSE XmlData;
321
    DEALLOCATE XmlData;
322
    ROLLBACK TRANSACTION;
323
    SELECT '-1' AS Result, '' OUT_ID, '' ErrorDesc;
324
    RETURN '-1';
325
END;
326
GO
327

    
328

    
329
ALTER PROCEDURE dbo.MW_OUT_KSV_KT_App 
330
    @p_OUT_ID VARCHAR(15) =NULL,
331
    @p_CHECKER_ID VARCHAR(100) =NULL,
332
    @p_APPROVE_DT VARCHAR(20) =NULL,
333
    @p_XmlData XML=NULL
334
AS
335
DECLARE @OUT_ID VARCHAR(15) =NULL,@OUT_DT_ID VARCHAR(15) =NULL,
336
        @BRN_ID VARCHAR(15) =NULL,
337
        @DEPT_ID VARCHAR(20)=NULL,
338
        @MAST_BAL_ID VARCHAR(15) =NULL,
339
        @CUST_NAME NVARCHAR(200) =NULL,
340
        @QTY DECIMAL(18,2)=NULL,
341
        @PRICE NUMERIC(18, 0) =NULL,
342
        @TOTAL_AMT NUMERIC(18, 2) =NULL,
343
        @NOTES NVARCHAR(1000) =NULL,
344
        @TO_BRN_ID VARCHAR(15) =NULL,
345
        @TO_DEPT_ID VARCHAR(15) =NULL;
346
DECLARE @hdoc INT;
347
DECLARE @INDEX INT =0
348
DECLARE @p_ID_MAS_BAL VARCHAR(15);
349
EXEC sp_xml_preparedocument @hdoc OUTPUT, @p_XmlData;
350

    
351
DECLARE @C_TO_BRN_ID VARCHAR(15), @C_TO_DEP_ID VARCHAR(15)
352

    
353
DECLARE XmlData CURSOR FOR
354
SELECT *
355
  FROM
356
    OPENXML(@hdoc, '/Root/XmlData', 2)
357
    WITH(
358
        OUT_ID VARCHAR(15),
359
        OUT_DT_ID VARCHAR(15),
360
        MAST_BAL_ID VARCHAR(15),
361
        CUST_NAME NVARCHAR(200),
362
        QTY DECIMAL(18,2),
363
        PRICE NUMERIC(18, 0),
364
        TOTAL_AMT NUMERIC(18, 2),
365
        NOTES NVARCHAR(1000),
366
        TO_BRN_ID VARCHAR(15),
367
        TO_DEPT_ID VARCHAR(15)
368
        );
369
OPEN XmlData;
370
BEGIN TRANSACTION;
371

    
372
--Insert XmlData
373
--DELETE FROM MW_OUT_DT WHERE OUT_ID =@p_OUT_ID
374
DECLARE @p_ID VARCHAR(15);
375
FETCH NEXT FROM XmlData
376
 INTO @OUT_ID,@OUT_DT_ID,
377
      @MAST_BAL_ID,
378
      @CUST_NAME,
379
      @QTY,
380
      @PRICE,
381
      @TOTAL_AMT,
382
      @NOTES,
383
      @TO_BRN_ID,
384
      @TO_DEPT_ID;
385
DECLARE @l_SUM_QTY_BALANCE DECIMAL(18,2)=0;
386
DECLARE @l_SUM_TOTAL_AMT NUMERIC(18, 2)=0;
387
DECLARE @l_TOTAL_AMT NUMERIC(18, 2)=0;
388

    
389
  IF(@@FETCH_STATUS=-1)BEGIN
390
  		CLOSE XmlData
391
  		DEALLOCATE XmlData
392
      ROLLBACK TRANSACTION;
393
      SELECT '-1' AS Result,
394
          @p_OUT_ID OUT_ID,
395
          N'Vui lòng duyệt lại sau khi dữ liệu được load hoàn tất' ErrorDesc;
396
      RETURN '-1';
397
  END;
398

    
399
  IF((SELECT mo.STATUS FROM MW_OUT mo WHERE mo.OUT_ID = @p_OUT_ID)<> 'KSV_KT_APP')
400
  BEGIN
401
  	ROLLBACK TRANSACTION
402
    SELECT '-1' as Result, '' OUT_ID, N'Phiếu xuất chưa đến bước duyệt bạn không được phép cập nhật thông tin.' ErrorDesc
403
  	RETURN '-1'
404
  END
405

    
406
  IF NOT EXISTS(SELECT tugr.ROLE_ID FROM dbo.TL_USER_GET_ROLES(@p_CHECKER_ID) tugr WHERE tugr.ROLE_ID = 'KSV')
407
  BEGIN
408
  	ROLLBACK TRANSACTION
409
    SELECT '-1' as Result, '' OUT_ID, N'Người dùng không có quyền duyệt phiếu này.' ErrorDesc
410
  	RETURN '-1'
411
  END
412
-- 24-03-19: KIEM TRA NEU DANG TRA VE THI KHONG DUOC PHEP DUYET
413
  IF((SELECT AUTH_STATUS FROM MW_OUT WHERE OUT_ID = @p_OUT_ID) ='R')
414
  	BEGIN
415
  		CLOSE XmlData
416
  		DEALLOCATE XmlData
417
  		ROLLBACK TRANSACTION
418
  		SELECT '-1' as Result,@p_OUT_ID OUT_ID, N'Giao dịch đang bị trả về. Vui lòng cập nhật lại thông tin trước khi duyệt' ErrorDesc
419
  		RETURN '-1'
420
  	END
421

    
422
      DECLARE @CORE_NOTE NVARCHAR(1000) = NULL,
423
		@MATERIAL_ID VARCHAR(15) = NULL,
424
		@VAT NUMERIC(18, 0), @VAT_AMT NUMERIC(18, 0),@PRICE_VAT NUMERIC(18, 0),
425
		@FR_BRN_ID varchar(15) = NULL,
426
		@FR_DEPT_ID varchar(15) = NULL,
427
        @WARE_ID VARCHAR(15) = NULL
428
        DECLARE @EXP_ACCTNO VARCHAR(50), @MATERIAL_ACCTNO VARCHAR(50), @VAT_ACCTNO VARCHAR(50), @TCCT VARCHAR(50)
429
		DECLARE @l_DEP_CODE VARCHAR(15) = NULL;
430
        DECLARE @l_D_BRANCH_CODE VARCHAR(15) = NULL;
431
        DECLARE @l_C_BRANCH_CODE VARCHAR(15) = NULL
432
        DECLARE @l_MAT_CODE VARCHAR(15) = NULL;
433
        DECLARE @l_WARE_ID VARCHAR(15) = NULL;
434
        DECLARE @MATERIAL_ACCNO VARCHAR(15) = NULL;
435
        DECLARE @BR_CODE VARCHAR(25) = NULL;
436
        DECLARE @DP_CODE VARCHAR(25) = NULL;
437
        DECLARE @l_MAKER_ID VARCHAR(25) = NULL;
438
        DECLARE @p_MAKER_ID VARCHAR(25) = NULL;
439
        DECLARE @p_REQ_USER VARCHAR(25) = NULL;
440
--- GEN ID KSV ĐỂ QUẢN LÝ GD HẠCH TOÁN BƯỚC KSV ---
441
          DECLARE @p_OUT_KSV_ID VARCHAR(15);
442
        	EXEC SYS_CodeMasters_Gen 'OUT_KSV_ID', @p_OUT_KSV_ID OUT;
443

    
444
        ----- SO GIAO DICH
445
        DECLARE @l_TRN_NO VARCHAR(15), @l_MAKER_KT VARCHAR(100), @l_ETP_ID VARCHAR(20), @l_ET_ID VARCHAR(20), @BR_CR_TYPE VARCHAR(20), @PYC VARCHAR(20)
446
        SELECT @p_MAKER_ID = A.MAKER_ID, @WARE_ID = A.WARE_ID, @BR_CR_TYPE = CB.BRANCH_TYPE, @CORE_NOTE = A.NOTES, @PYC = A.MW_REQ_ID, @p_REQ_USER = A.REQ_USER
447
        FROM MW_OUT A LEFT JOIN CM_BRANCH CB ON A.BRN_ID = CB.BRANCH_ID
448
        WHERE A.OUT_ID = @p_OUT_ID
449

    
450
-------- NẾU CÓ PYC THÌ LẤY NGƯỜI TẠO PHIẾU LÀM NVHT, KHONG THÌ LẤY NGƯỜI YÊU CẦU ELSE MAKER
451
        IF @PYC IS NOT NULL AND @PYC <> ''
452
        BEGIN
453
        	SET @l_MAKER_ID = (SELECT MR.MAKER_ID FROM MW_REQ MR WHERE MR.REQ_ID = @PYC)
454
        END
455
        ELSE SET @l_MAKER_ID = ISNULL(@p_REQ_USER,@p_MAKER_ID)
456

    
457
        EXEC ENTRIES_POST_GEN_NO_MW @p_BRANCH_ID = @l_MAKER_ID
458
                        ,@p_TRN_DATE = @p_APPROVE_DT
459
                        ,@p_KeyGen = @l_TRN_NO OUT
460
        -----------------
461

    
462
  --Kiểm tra Kho nếu kho đặt biệt check đã yêu cầu hạch toán chưa nếu chưa yêu cầu chọn hạch toán mới được qua kế toán
463
  DECLARE @WARE_CODE VARCHAR(25),@ListWare_CODE VARCHAR(500);
464
  SELECT @WARE_CODE=cw.WARE_CODE FROM MW_OUT MO LEFT JOIN CM_WARE cw ON MO.WARE_ID = cw.WARE_ID WHERE MO.OUT_ID = @p_OUT_ID
465
  SELECT @ListWare_CODE = sp.ParaValue FROM SYS_PARAMETERS sp WHERE sp.ParaKey = 'MW_OUT_WARE_CUSTOMER'
466

    
467
  IF(EXISTS(SELECT 1
468
            FROM STRING_SPLIT(@ListWare_CODE,',') A
469
            INNER JOIN CM_WARE B ON A.VALUE = B.WARE_CODE
470
            INNER JOIN MW_OUT C ON B.WARE_ID = C.WARE_ID
471
            WHERE C.OUT_ID = @p_OUT_ID
472
            ))
473
  BEGIN
474
      UPDATE B SET B.QTY_BALANCE = B.QTY_BALANCE - A.QTY, B.QTY_REAL = B.QTY_REAL - A.QTY, B.QTY_TEMP = B.QTY_TEMP + A.QTY, B.TOTAL_AMT = B.TOTAL_AMT - A.TOTAL_AMT
475
      FROM MW_OUT_DT A
476
      INNER JOIN MW_MAST_BAL B ON A.MAST_BAL_ID = B.MAST_BAL_ID
477
      WHERE A.OUT_ID = @p_OUT_ID
478
  END
479

    
480
  IF(EXISTS(SELECT 1 FROM STRING_SPLIT(@ListWare_CODE, ',') WHERE VALUE = @WARE_CODE))
481
  BEGIN
482
      IF EXISTS(SELECT 1 
483
        FROM MW_OUT_DT A
484
        LEFT JOIN MW_OUT B ON A.OUT_ID= B.OUT_ID
485
        WHERE A.OUT_ID = @p_OUT_ID
486
            AND ((A.UNIT_RECEIVE = B.BRN_ID AND B.BRN_ID <> 'DV0001')
487
                 OR (A.UNIT_RECEIVE = B.BRN_ID AND B.BRN_ID = 'DV0001' AND ISNULL(B.DEPT_ID,'') = ISNULL(A.DEP_RECEIVE,''))
488
                )
489
        )
490
      BEGIN
491
        	UPDATE [dbo].[MW_OUT]
492
            SET AUTH_STATUS='A',
493
            CHECKER_ID=@p_CHECKER_ID,
494
            STATUS = CASE WHEN (SELECT REQ_ACOUNT FROM MW_OUT WHERE OUT_ID = @p_OUT_ID) <> '1' THEN 'REQ_ACOUNT' ELSE 'OUT_KT' END,
495
      	    APPROVE_DT =  CONVERT(DATETIME, @p_APPROVE_DT, 103)
496
            , OUT_KSV_ID = @p_OUT_KSV_ID
497
            WHERE [OUT_ID]=@p_OUT_ID;
498
      END
499
      ELSE
500
      BEGIN
501
      	UPDATE [dbo].[MW_OUT]
502
        SET AUTH_STATUS='A',
503
        CHECKER_ID=@p_CHECKER_ID,
504
        STATUS ='CONFIRM',
505
  	    APPROVE_DT =  CONVERT(DATETIME, @p_APPROVE_DT, 103)
506
        , OUT_KSV_ID = @p_OUT_KSV_ID
507
        WHERE [OUT_ID]=@p_OUT_ID;
508
      END
509
    	
510
      IF @@Error<>0 GOTO ABORT;
511
      WHILE @@FETCH_STATUS=0 
512
      BEGIN
513
  	    SET @INDEX = @INDEX+1
514
  	    -- 07 -03 -2019 KIEM TRA LAI SO LUONG (VI SE CO TRUONG HOP VUA DIEU CHUYEN, VUA XUAT SD, VƯA THU HOI, VUA THANH LY TREN 1 MAST_BAL_ID)
515
  	    IF(@QTY > (SELECT QTY_BALANCE FROM MW_MAST_BAL WHERE MAST_BAL_ID=@MAST_BAL_ID))
516
  	    BEGIN
517
      		CLOSE XmlData
518
      		DEALLOCATE XmlData
519
      		ROLLBACK TRANSACTION
520
      		SELECT '-1' as Result, @OUT_ID OUT_ID, N'Dòng '+ CONVERT(VARCHAR(15),@INDEX) +N': Số lượng xuất sử dụng vượt quá số lượng tồn' ErrorDesc
521
      		RETURN '-1'
522
  	    END
523
  
524
        -- UPDATE MW_MAST_BAL KHI TDV DUYỆT LÔ VẬT LIỆU SẼ TRỪ SỐ LƯỢNG HỆ THỐNG, TRỪ SỐ LƯỢNG THỰC TẾ, CỘNG SỐ LƯỢNG TREO
525
--        UPDATE MW_MAST_BAL SET QTY_BALANCE = QTY_BALANCE-@QTY, QTY_REAL = QTY_REAL-@QTY, QTY_TEMP = QTY_TEMP+@QTY WHERE MAST_BAL_ID = @MAST_BAL_ID
526
--        IF @@Error<>0 GOTO ABORT;
527

    
528
------------- HACH TOAN BUOC DUYET KSV XUAT KHO ------------
529
        SELECT @EXP_ACCTNO = B.EXP_ACCTNO, @VAT_ACCTNO = B.VAT_ACCTNO , @l_MAT_CODE = B.MATERIAL_CODE
530
		FROM MW_MAST_BAL A
531
        LEFT JOIN MW_MATERIAL B ON A.MATERIAL_ID = B.MATERIAL_ID
532
        WHERE A.MAST_BAL_ID = @MAST_BAL_ID
533

    
534

    
535
        DECLARE @FR_BRN_CODE VARCHAR(20) = (SELECT BRANCH_CODE FROM CM_BRANCH WHERE BRANCH_ID = (SELECT MO.BRN_ID FROM MW_OUT MO WHERE MO.OUT_ID = @p_OUT_ID))
536
        DECLARE @FR_DEP_CODE VARCHAR(20) = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID = (SELECT MO.DEPT_ID FROM MW_OUT MO WHERE MO.OUT_ID = @p_OUT_ID))
537
        DECLARE @TO_BRN_CODE VARCHAR(20) = (SELECT BRANCH_CODE FROM CM_BRANCH WHERE BRANCH_ID = @TO_BRN_ID)
538
        DECLARE @TO_DEP_CODE VARCHAR(20) = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID = @TO_DEPT_ID)
539
    
540
        ----------------HACH TOAN 05/09/2023 KHIEMCHG------------------
541
        -------------------CHECK THEO LOAI KHO-------------------------
542
        DECLARE @l_HS_BRANCH_CODE VARCHAR(20) = (SELECT CB.BRANCH_CODE FROM CM_BRANCH CB WHERE CB.BRANCH_TYPE = 'HS')
543
        DECLARE @BRANCH_TYPE VARCHAR(20) = (SELECT CB.BRANCH_TYPE FROM CM_BRANCH CB WHERE CB.BRANCH_ID = @TO_BRN_ID)
544
        SET @WARE_CODE = (SELECT CW.WARE_CODE FROM CM_WARE CW WHERE CW.WARE_ID = @WARE_ID)
545
        DECLARE @WARE_TRANSFER_NO VARCHAR(20) = (SELECT TOP 1 ACC_NO FROM ENTRIES_POST_ACCNO_MW WHERE WARE_CODE = @WARE_CODE AND ACC_TYPE LIKE 'TRANS_%')
546
        DECLARE @WARE_ACCNO VARCHAR(20) = (SELECT  TOP 1 CW.ACC_ACCOUNTING FROM CM_WARE CW WHERE CW.WARE_ID = @WARE_ID)
547
        DECLARE @ACCNO_KSV_OUT VARCHAR(20) = (SELECT  TOP 1 ACC_NO FROM ENTRIES_POST_ACCNO_MW WHERE ACC_TYPE = 'KSV_OUT')
548

    
549
  		--LAY MA BRANCH CODE
550
--        DECLARE @DB_ID VARCHAR(15) = (SELECT CW.DEP_ID FROM CM_WARE CW WHERE CW.WARE_ID = @WARE_ID)
551
--        SELECT @DP_CODE = CD.DEP_CODE, @BR_CODE = CB.BRANCH_CODE 
552
--        FROM CM_DEPARTMENT CD LEFT JOIN CM_BRANCH CB ON CD.BRANCH_ID = CB.BRANCH_ID 
553
--        WHERE CD.DEP_ID = @DB_ID
554

    
555
                BEGIN
556
                ---   TODO: NỢ
557
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID OUT
558
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST', @l_ET_ID OUT
559
                INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
560
                VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT_KSV', @p_OUT_KSV_ID,@FR_BRN_CODE, @ACCNO_KSV_OUT, 'VND', 'D', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_APPROVE_DT, 103), @l_MAKER_ID, @p_CHECKER_ID, @FR_DEP_CODE, @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
561
            	IF @@Error <> 0 GOTO ABORT;
562
                
563
            	---   TODO: CÓ
564
            	  EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID OUT
565
                INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
566
                VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT_KSV', @p_OUT_KSV_ID,@FR_BRN_CODE, @WARE_ACCNO, 'VND', 'C', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_APPROVE_DT, 103), @l_MAKER_ID, @p_CHECKER_ID, '', @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
567
            	IF @@Error <> 0 GOTO ABORT;
568
    
569
        END
570

    
571
        FETCH NEXT FROM XmlData
572
         INTO @OUT_ID,@OUT_DT_ID,
573
             @MAST_BAL_ID,
574
             @CUST_NAME,
575
             @QTY,
576
             @PRICE,
577
             @TOTAL_AMT,
578
             @NOTES,
579
             @TO_BRN_ID,
580
             @TO_DEPT_ID;
581
      END;
582
      CLOSE XmlData;
583
      DEALLOCATE XmlData;
584

    
585

    
586
      DECLARE CUR_CONFIRM CURSOR FOR
587
      SELECT ISNULL(UNIT_RECEIVE,''), ISNULL(DEP_RECEIVE,'')
588
      FROM MW_OUT_DT 
589
      WHERE OUT_ID = @p_OUT_ID
590
      GROUP BY ISNULL(UNIT_RECEIVE,''), ISNULL(DEP_RECEIVE,'')
591
      OPEN CUR_CONFIRM
592
      FETCH NEXT FROM CUR_CONFIRM INTO @C_TO_BRN_ID,@C_TO_DEP_ID
593
      WHILE @@FETCH_STATUS = 0
594
      BEGIN
595
          DECLARE @p_OUT_CONF_ID VARCHAR(15);
596
        	EXEC SYS_CodeMasters_Gen 'MW_OUT_CONF', @p_OUT_CONF_ID OUT;
597
        	IF(NOT EXISTS(SELECT 1 FROM MW_OUT_CONF WHERE OUT_ID = @p_OUT_ID AND ISNULL(BRANCH_RECIVE,'') = ISNULL(@C_TO_BRN_ID,'') AND ISNULL(DEP_RECIVE,'') = ISNULL(@C_TO_DEP_ID,'')))
598
        	BEGIN
599
        		INSERT INTO MW_OUT_CONF (ID, OUT_ID, BRANCH_RECIVE, DEP_RECIVE, MAKER_ID, CREATE_DT, CHECKER_ID, APPROVE_DT, BRANCH_CREATE, RECORD_STATUS,STATUS)   
600
            VALUES (@p_OUT_CONF_ID,@p_OUT_ID,@C_TO_BRN_ID,@C_TO_DEP_ID,NULL,NULL,NULL, NULL,NULL,'1','CONFIRM')
601
        	END
602
      
603
          FETCH NEXT FROM CUR_CONFIRM INTO @C_TO_BRN_ID,@C_TO_DEP_ID
604
      END
605
      CLOSE CUR_CONFIRM
606
      DEALLOCATE CUR_CONFIRM
607
      --Thêm lịch sử 
608
      INSERT INTO dbo.MW_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
609
	    VALUES(@p_OUT_ID,'APPR',@p_CHECKER_ID,GETDATE(), N'Hành chính duyệt phiếu',N'Hành chính duyệt phiếu')
610

    
611
  END
612
  ELSE
613
  BEGIN  	
614
      UPDATE [dbo].[MW_OUT]
615
          SET AUTH_STATUS='A',
616
          CHECKER_ID=@p_CHECKER_ID, STATUS ='CONFIRM',
617
          --APPROVE_DT=CONVERT(DATE, @p_APPROVE_DT, 103)
618
    	    -- LUCTV 13092019 CHINH SUA LAI NGAY DUYET DE LAY DUNG DINH DANG NGAY THANG NAM H PHUT GIAY
619
    	    APPROVE_DT =  CONVERT(DATETIME, @p_APPROVE_DT, 103)
620
          WHERE [OUT_ID]=@p_OUT_ID;
621

    
622
      IF @@Error<>0 GOTO ABORT;
623
      WHILE @@FETCH_STATUS=0 
624
      BEGIN
625
    	  SET @INDEX = @INDEX+1
626
    	  -- 07 -03 -2019 KIEM TRA LAI SO LUONG (VI SE CO TRUONG HOP VUA DIEU CHUYEN, VUA XUAT SD, VƯA THU HOI, VUA THANH LY TREN 1 MAST_BAL_ID)
627
    	  IF(@QTY > (SELECT QTY_BALANCE FROM MW_MAST_BAL WHERE MAST_BAL_ID=@MAST_BAL_ID))
628
    	  BEGIN
629
    		    CLOSE XmlData
630
    		    DEALLOCATE XmlData
631
    		    ROLLBACK TRANSACTION
632
    		    SELECT '-1' as Result, @OUT_ID OUT_ID, N'Dòng '+ CONVERT(VARCHAR(15),@INDEX) +N': Số lượng xuất sử dụng vượt quá số lượng tồn' ErrorDesc
633
    		    RETURN '-1'
634
  	    END
635
        --Update MW_Mast_BAL khi TDV duyệt
636
--        UPDATE MW_MAST_BAL SET QTY_BALANCE = (QTY_BALANCE-@QTY), QTY_REAL = (QTY_REAL-@QTY), QTY_TEMP = (QTY_TEMP+@QTY) WHERE MAST_BAL_ID = @MAST_BAL_ID
637

    
638

    
639
        DECLARE CUR_CONFIRM CURSOR FOR
640
        SELECT ISNULL(UNIT_RECEIVE,''), ISNULL(DEP_RECEIVE,'')
641
        FROM MW_OUT_DT 
642
        WHERE OUT_ID = @p_OUT_ID
643
        GROUP BY ISNULL(UNIT_RECEIVE,''), ISNULL(DEP_RECEIVE,'')
644
        OPEN CUR_CONFIRM
645
        FETCH NEXT FROM CUR_CONFIRM INTO @C_TO_BRN_ID,@C_TO_DEP_ID
646
        WHILE @@FETCH_STATUS = 0
647
        BEGIN
648
            DECLARE @p_OUT_CONF_ID_1 VARCHAR(15);
649
          	EXEC SYS_CodeMasters_Gen 'MW_OUT_CONF', @p_OUT_CONF_ID_1 OUT;
650
          	IF(NOT EXISTS(SELECT 1 FROM MW_OUT_CONF WHERE OUT_ID = @p_OUT_ID AND ISNULL(BRANCH_RECIVE,'') = ISNULL(@C_TO_BRN_ID,'') AND ISNULL(DEP_RECIVE,'') = ISNULL(@C_TO_DEP_ID,'')))
651
          	BEGIN
652
          		INSERT INTO MW_OUT_CONF (ID, OUT_ID, BRANCH_RECIVE, DEP_RECIVE, MAKER_ID, CREATE_DT, CHECKER_ID, APPROVE_DT, BRANCH_CREATE, RECORD_STATUS,STATUS)   
653
              VALUES (@p_OUT_CONF_ID_1,@p_OUT_ID,@C_TO_BRN_ID,@C_TO_DEP_ID,NULL,NULL,NULL, NULL,NULL,'1','CONFIRM')
654
          	END
655
        
656
            FETCH NEXT FROM CUR_CONFIRM INTO @C_TO_BRN_ID,@C_TO_DEP_ID
657
        END
658
        CLOSE CUR_CONFIRM
659
        DEALLOCATE CUR_CONFIRM
660

    
661

    
662

    
663
      	INSERT INTO dbo.MW_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
664
      	VALUES(@p_OUT_ID,'APPR',@p_CHECKER_ID,GETDATE(), N'Kiểm soát viên xuất kho.',N'Kiểm soát viên xuất kho duyệt phiếu thành công.')
665
       
666
        IF @@Error<>0 GOTO ABORT;
667
        FETCH NEXT FROM XmlData
668
         INTO @OUT_ID,
669
             @MAST_BAL_ID,
670
             @CUST_NAME,
671
             @QTY,
672
             @PRICE,
673
             @TOTAL_AMT,
674
             @NOTES,
675
             @TO_BRN_ID,
676
             @TO_DEPT_ID;
677
        END;
678
        CLOSE XmlData;
679
        DEALLOCATE XmlData;
680
  END
681

    
682
COMMIT TRANSACTION;
683
SELECT '0' AS Result, @p_OUT_ID OUT_ID, '' ErrorDesc;
684
RETURN '0';
685
ABORT:
686
BEGIN
687
    CLOSE XmlData;
688
    DEALLOCATE XmlData;
689
    ROLLBACK TRANSACTION;
690
    SELECT '-1' AS Result, '' OUT_ID, '' ErrorDesc;
691
    RETURN '-1';
692
END;
693
GO
694

    
695

    
696

    
697
ALTER PROCEDURE dbo.MW_OUT_KT_App
698
    @p_OUT_ID VARCHAR(15) = NULL,
699
    @p_KT_CHECKER_ID VARCHAR(100) = NULL,
700
    @p_KT_APPROVE_DT VARCHAR(20) = NULL,
701
    @p_XmlData XML = NULL
702
AS
703
DECLARE 
704
        @OUT_DT_ID VARCHAR(15) = NULL,@ERROR NVARCHAR(500),
705
        @TOTAL_AMT NUMERIC(18, 0) = NULL,
706
        @BRANCH_CREATE VARCHAR(15) = NULL,
707
        @CORE_NOTE NVARCHAR(1000) = NULL,
708
        @KT_MAKER_ID VARCHAR(100) = NULL,
709
        @BRANCH_ID VARCHAR(15) = NULL,
710
        @DEPT_ID VARCHAR(15) = NULL,
711
        @PRICE_ID VARCHAR(15) = NULL,
712
        @GROUP_ID VARCHAR(15) = NULL,
713
		    @MATERIAL_ID VARCHAR(15) = NULL,@TO_BRN_ID VARCHAR(15) = NULL,@TO_DEPT_ID VARCHAR(15) = NULL,
714
		    @IS_PROMO VARCHAR(1) = NULL, @VAT NUMERIC(18, 0), @VAT_AMT NUMERIC(18, 0),@PRICE_VAT NUMERIC(18, 0),
715
		    --01-03-2019 : LUCTV BO SUNG NHUNG BIEN LIEN QUAN TOI PHAN UPDATE-INSERT KHI DUYET
716
		    @BRN_ID VARCHAR(15) =NULL,
717
	    	@MAST_BAL_ID VARCHAR(15) =NULL,
718
		    @CUST_NAME NVARCHAR(200) =NULL,
719
		    @QTY DECIMAL(18,2)=NULL,
720
		    @PRICE NUMERIC(18, 0) =NULL,
721
		    @NOTES NVARCHAR(500) =NULL,
722
        @UNIT_RECEIVE VARCHAR(50)= NULL,
723
        @UNIT_CHARGE VARCHAR(50)= NULL,
724
        @UNIT_PAY VARCHAR(50)= NULL,
725
        @QTY_RECEIVE DECIMAL(18,2) = NULL,
726
        @QTY_DAMAGED DECIMAL(18,2) = NULL,
727
        @QTY_LOSS DECIMAL(18,2) = NULL,
728
        @RECEIVE_NOTES NVARCHAR(1000) = NULL,
729
        @DEP_RECEIVE VARCHAR(15) = NULL,
730
        @DEP_PAY VARCHAR(15) = NULL
731
      
732
DECLARE @l_DEP_CODE VARCHAR(15) = NULL;
733
DECLARE @l_D_BRANCH_CODE VARCHAR(15) = NULL;
734
DECLARE @l_C_BRANCH_CODE VARCHAR(15) = NULL
735
DECLARE @l_MAT_CODE VARCHAR(15) = NULL;
736
DECLARE @l_WARE_ID VARCHAR(15) = NULL;
737
DECLARE @MATERIAL_ACCNO VARCHAR(15) = NULL;
738
DECLARE @ListWare_CODE VARCHAR(500);
739
SELECT @ListWare_CODE = sp.ParaValue FROM SYS_PARAMETERS sp WHERE sp.ParaKey = 'MW_OUT_WARE_CUSTOMER'
740
DECLARE XmlData CURSOR FOR
741
SELECT A.OUT_DT_ID, A.TOTAL_AMT, A.TO_DEPT_ID, B.BRANCH_CREATE, B.CORE_NOTE,
742
B.KT_MAKER_ID, B.BRN_ID, B.DEPT_ID, D.PRICE_ID, E.GROUP_ID, E.MATERIAL_ID, A.IS_BCT /*E.IS_PROMO*/, A.VAT, A.PRICE_VAT,A.QTY,
743
A.TO_BRN_ID, A.MAST_BAL_ID,A.CUST_NAME,A.QTY,A.PRICE,A.NOTES, A.COST_ACC,A.UNIT_RECEIVE,A.UNIT_CHARGE, A.UNIT_PAY, A.QTY_RECEIVE, A.QTY_DAMAGED, A.QTY_LOSS, A.RECEIVE_NOTES
744
, A.DEP_RECEIVE, A.DEP_CHARGE
745
FROM MW_OUT_DT A
746
INNER JOIN MW_OUT B ON A.OUT_ID = B.OUT_ID
747
INNER JOIN MW_MAST_BAL C ON A.MAST_BAL_ID = C.MAST_BAL_ID
748
INNER JOIN MW_MAST_PRICE D ON D.PRICE_ID = C.PRICE_ID
749
INNER JOIN MW_IN E ON D.MATERIAL_ID = E.IN_ID
750
WHERE A.OUT_ID = @p_OUT_ID
751

    
752
DECLARE @ALLOCTED VARCHAR(1000), @QTY_ALLOCTION VARCHAR(1000),@MW_REQ_ID VARCHAR(1000)
753
DECLARE @p_ID_MAS_BAL VARCHAR(15);
754
DECLARE @l_SUM_QTY_BALANCE DECIMAL(18,2)=0,@BR_CODE VARCHAR(15),@DP_CODE VARCHAR(25)
755
DECLARE @l_REMAIN_AMT NUMERIC(18, 2)=0;
756
DECLARE @l_TOTAL_AMT NUMERIC(18, 2)=0;
757
DECLARE @INDEX INT =0
758
SELECT @MW_REQ_ID=mo.MW_REQ_ID FROM MW_OUT mo WHERE mo.OUT_ID = @p_OUT_ID
759

    
760
DECLARE @MW_OUT_QTY TABLE ( MAST_BAL_ID VARCHAR(50), QTY_OUT VARCHAR(50));
761

    
762
OPEN XmlData;
763

    
764
BEGIN TRANSACTION;
765

    
766
  IF((SELECT A.STATUS FROM MW_OUT A WHERE OUT_ID = @p_OUT_ID) <> 'SendAppKT')
767
  BEGIN
768
  	  ROLLBACK TRANSACTION
769
  		SELECT '-1' as Result,@p_OUT_ID OUT_ID, N'Chưa đến bước duyệt vui lòng gửi duyệt' ErrorDesc
770
  		RETURN '-1'
771
  END
772
-- 02-04-19: KIEM TRA NEU DANG TRA VE THI KHONG DUOC PHEP DUYET
773
IF((SELECT KT_AUTH_STATUS FROM MW_OUT WHERE OUT_ID = @p_OUT_ID) ='R')
774
	BEGIN
775
		CLOSE XmlData
776
		DEALLOCATE XmlData
777
		ROLLBACK TRANSACTION
778
		SELECT '-1' as Result,@p_OUT_ID OUT_ID, N'Giao dịch đang bị trả về. Vui lòng cập nhật lại thông tin trước khi duyệt' ErrorDesc
779
		RETURN '-1'
780
	END
781

    
782
UPDATE [dbo].[MW_OUT]
783
SET KT_AUTH_STATUS = 'A',
784
    KT_APPROVE_DT = CONVERT(DATETIME, @p_KT_APPROVE_DT, 103),
785
    KT_CHECKER_ID = @p_KT_CHECKER_ID,
786
    STATUS = 'DONE'
787
WHERE [OUT_ID] = @p_OUT_ID;
788
IF @@Error <> 0
789
    GOTO ABORT;
790

    
791
        ----- SO GIAO DICH
792
        DECLARE @l_TRN_NO VARCHAR(15), @l_MAKER_KT VARCHAR(100), @l_ETP_ID VARCHAR(20), @l_ET_ID VARCHAR(20), @BR_CR_TYPE VARCHAR(20)
793
        SELECT @KT_MAKER_ID = KT_MAKER_ID, @l_WARE_ID = WARE_ID, @BR_CR_TYPE = ISNULL(CB.BRANCH_TYPE, CB1.BRANCH_TYPE)
794
        FROM MW_OUT A 
795
        LEFT JOIN CM_BRANCH CB ON A.BRANCH_CREATE = CB.BRANCH_ID
796
        LEFT JOIN CM_BRANCH CB1 ON A.BRN_ID = CB1.BRANCH_ID
797
        WHERE OUT_ID =@p_OUT_ID
798
        EXEC ENTRIES_POST_GEN_NO_MW @p_BRANCH_ID = @KT_MAKER_ID
799
                        ,@p_TRN_DATE = @p_KT_APPROVE_DT
800
                        ,@p_KeyGen = @l_TRN_NO OUT
801
        -----------------
802

    
803
--Insert XmlData
804
--DELETE FROM MW_OUT_DT WHERE OUT_ID =@p_OUT_ID
805
DECLARE @EXP_ACCTNO VARCHAR(50), @MATERIAL_ACCTNO VARCHAR(50), @VAT_ACCTNO VARCHAR(50)
806
--Kiểm tra phiếu xuất nếu có phiếu yêu cầu thì cập nhật MW_REQ_DT
807

    
808
IF(EXISTS(SELECT 1
809
            FROM STRING_SPLIT(@ListWare_CODE,',') A
810
            INNER JOIN CM_WARE B ON A.VALUE = B.WARE_CODE
811
            INNER JOIN MW_OUT C ON B.WARE_ID = C.WARE_ID
812
            WHERE C.OUT_ID = @p_OUT_ID
813
            ))
814
BEGIN
815
    UPDATE B SET B.QTY_TEMP = B.QTY_TEMP - A.QTY
816
    FROM MW_OUT_DT A
817
    INNER JOIN MW_MAST_BAL B ON A.MAST_BAL_ID = B.MAST_BAL_ID
818
    WHERE A.OUT_ID = @p_OUT_ID
819
END
820
ELSE
821
BEGIN
822
    UPDATE B SET B.QTY_TEMP = B.QTY_TEMP - A.QTY, B.QTY_BALANCE = B.QTY_BALANCE - A.QTY
823
    FROM MW_OUT_DT A
824
    INNER JOIN MW_MAST_BAL B ON A.MAST_BAL_ID = B.MAST_BAL_ID
825
    WHERE A.OUT_ID = @p_OUT_ID
826
END
827

    
828
FETCH NEXT FROM XmlData INTO @OUT_DT_ID, @TOTAL_AMT,@TO_DEPT_ID, @BRANCH_CREATE , @CORE_NOTE ,@KT_MAKER_ID ,@BRANCH_ID ,@DEPT_ID ,@PRICE_ID ,@GROUP_ID ,@MATERIAL_ID ,@IS_PROMO, @VAT, @PRICE_VAT,@QTY,
829
						     @TO_BRN_ID, @MAST_BAL_ID,@CUST_NAME,@QTY,@PRICE,@NOTES,@EXP_ACCTNO,@UNIT_RECEIVE,@UNIT_CHARGE,@UNIT_PAY,@QTY_RECEIVE,@QTY_DAMAGED,@QTY_LOSS,@RECEIVE_NOTES, @DEP_RECEIVE, @DEP_PAY
830

    
831
  WHILE @@FETCH_STATUS = 0
832
  BEGIN
833
    SET @MATERIAL_ACCTNO = @EXP_ACCTNO
834
  	-------- 01/03/2018 LUCTV: EDIT CODE KE TOAN DUYET THI MOI PHAT SINH UPDATE DU LIEU
835
  	SELECT @l_SUM_QTY_BALANCE=SUM(QTY_BALANCE),
836
          @l_REMAIN_AMT=SUM(TOTAL_AMT)
837
       FROM MW_MAST_BAL
838
       WHERE MAST_BAL_ID=@MAST_BAL_ID;/*PRICE_ID=(SELECT PRICE_ID FROM MW_MAST_BAL WHERE MAST_BAL_ID=@MAST_BAL_ID)AND */ 
839

    
840
   	SET @INDEX = @INDEX+1
841
  	-- 07 -03 -2019 KIEM TRA LAI SO LUONG (VI SE CO TRUONG HOP VUA DIEU CHUYEN, VUA XUAT SD, VƯA THU HOI, VUA THANH LY TREN 1 MAST_BAL_ID)
842
  	IF(@QTY > @l_SUM_QTY_BALANCE) /*(SELECT QTY_BALANCE FROM MW_MAST_BAL WHERE MAST_BAL_ID=@MAST_BAL_ID))*/
843
  	BEGIN
844
  		CLOSE XmlData
845
  		DEALLOCATE XmlData
846
  		ROLLBACK TRANSACTION
847
  		SELECT '-1' as Result, @p_OUT_ID OUT_ID, N'Dòng '+ CONVERT(VARCHAR(15),@INDEX) +N': Số lượng xuất sử dụng vượt quá số lượng tồn' ErrorDesc
848
  		RETURN '-1'
849
  	END
850
    IF((SELECT IS_DONE FROM MW_REQ WHERE REQ_ID=@MW_REQ_ID) ='1')
851
    BEGIN
852
    	ROLLBACK TRANSACTION
853
      SELECT '-1' as Result, N'Phiếu yêu cầu mã' OUT_ID, N'Đã hoàn thành cấp phát bạn không thể duyệt phiếu.' ErrorDesc
854
    	RETURN '-1'
855
    END
856
    
857
    SELECT @QTY_ALLOCTION=mrd.QUANTITY_ALLOCATION, @ALLOCTED=mrd.ALLOCATED FROM MW_REQ_DT mrd WHERE mrd.REQ_ID = @MW_REQ_ID AND mrd.MATERIAL_ID = @MATERIAL_ID
858

    
859
--  	IF((@QTY-@l_SUM_QTY_BALANCE)=0)---LA LO CUOI CUNG
860
--  	BEGIN
861
--          --SET @l_TOTAL_AMT=@l_TOTAL_AMT-@l_SUM_TOTAL_AMT; --THIEUVQ 070120 --THUANTM THÊM CẬP NHẬT SỐ LƯỢNG HỆ THỐNG
862
--  		SET @TOTAL_AMT = @l_REMAIN_AMT; --THIEUVQ 070120
863
--          UPDATE MW_MAST_BAL
864
--          SET TOTAL_AMT= 0, --TOTAL_AMT-@TOTAL_AMT,--THIEUVQ 070120
865
--             QTY_BALANCE= 0 --QTY_BALANCE-@QTY--THIEUVQ 070120
866
--             ,QTY_REAL= 0 --QTY_BALANCE-@QTY--THIEUVQ 070120
867
--          WHERE MAST_BAL_ID=@MAST_BAL_ID;
868
--
869
--        UPDATE MW_MAST_BAL SET QTY_BALANCE = (QTY_BALANCE-@QTY), QTY_REAL = (QTY_REAL-@QTY), QTY_TEMP = (QTY_TEMP+@QTY) WHERE MAST_BAL_ID = @MAST_BAL_ID
870
--
871
--    END;
872
--    ELSE 
873
--  	BEGIN
874
--  		IF @TOTAL_AMT > @l_REMAIN_AMT SET @TOTAL_AMT = @l_REMAIN_AMT --THIEUVQ 070120
875
--          UPDATE MW_MAST_BAL
876
--          SET TOTAL_AMT=TOTAL_AMT-@TOTAL_AMT,
877
--              QTY_BALANCE=QTY_BALANCE-@QTY,
878
--              QTY_REAL=QTY_REAL-@QTY
879
--          WHERE MAST_BAL_ID=@MAST_BAL_ID;
880
--        
881
--          --Cập nhật Số lượng treo khi KT duyệt
882
--          --UPDATE MW_MAST_BAL SET QTY_TEMP= QTY_TEMP-@QTY WHERE MAST_BAL_ID=@MAST_BAL_ID
883
--
884
--      END;
885

    
886
      EXEC SYS_CodeMasters_Gen 'MW_MAST_BAL_STMT', @p_ID_MAS_BAL OUT;
887
      INSERT INTO MW_MAST_BAL_STMT(STMT_ID, REF_ID, MAST_BAL_ID, TRN_DATE, TRN_TIME, TRN_TYPE, CRDR, QTY, TRN_DESC, PRICE, TOTAL_AMT)
888
      VALUES(@p_ID_MAS_BAL, @p_OUT_ID, @MAST_BAL_ID, (SELECT KT_APPROVE_DT FROM MW_OUT WHERE OUT_ID=@p_OUT_ID), (SELECT TRN_TIME FROM MW_OUT WHERE OUT_ID=@p_OUT_ID),
889
      'O' , 'D', @QTY, @NOTES, @PRICE, @TOTAL_AMT);
890
  	----- END LUCTV 01-03-2019
891

    
892
  	---LAY TAI KHOAN HACH TOAN
893
  	SELECT /*@EXP_ACCTNO = EXP_ACCTNO,*/ @MATERIAL_ACCTNO = MATERIAL_ACCTNO, @VAT_ACCTNO = VAT_ACCTNO 
894
  	FROM MW_MATERIAL WHERE MATERIAL_ID = @MATERIAL_ID
895
  
896
  		--LAY MA BRANCH CODE
897
  		SET @BR_CODE = (SELECT BRANCH_CODE FROM CM_BRANCH WHERE BRANCH_ID = @UNIT_CHARGE)
898
  		SET @DP_CODE = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID = @DEP_PAY)
899
  		DECLARE @BR_CODE_X VARCHAR(20) = (SELECT BRANCH_CODE FROM CM_BRANCH WHERE BRANCH_ID = @BRANCH_ID)
900
  		DECLARE @DP_CODE_X VARCHAR(20) = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID = @DEPT_ID)
901

    
902
    ----------------HACH TOAN 05/09/2023 KHIEMCHG------------------
903
    -------------------CHECK THEO LOAI KHO-------------------------
904
    DECLARE @l_HS_BRANCH_CODE VARCHAR(20) = (SELECT CB.BRANCH_CODE FROM CM_BRANCH CB WHERE CB.BRANCH_TYPE = 'HS')
905
    DECLARE @BRANCH_TYPE VARCHAR(20) = (SELECT CB.BRANCH_TYPE FROM CM_BRANCH CB WHERE CB.BRANCH_ID = @TO_BRN_ID)
906
    DECLARE @WARE_CODE VARCHAR(20) = (SELECT CW.WARE_CODE FROM CM_WARE CW WHERE CW.WARE_ID = @l_WARE_ID)
907
    DECLARE @WARE_ACCNO VARCHAR(20) = (SELECT CW.ACC_ACCOUNTING FROM CM_WARE CW WHERE CW.WARE_ID = @l_WARE_ID)
908
	SELECT @l_MAT_CODE = A.MATERIAL_CODE, @MATERIAL_ACCNO = MG.EXP_ACCTNO
909
    FROM MW_MATERIAL A
910
    LEFT JOIN MW_GROUP MG ON A.GROUP_ID = MG.GROUP_ID
911
    WHERE MATERIAL_ID = @MATERIAL_ID
912
    DECLARE @ACC_VAT VARCHAR(20) =  (SELECT TOP 1 EPAM.ACC_NO FROM ENTRIES_POST_ACCNO_MW EPAM WHERE EPAM.ACC_TYPE = 'ACC_VAT_PROMO_NEC')
913
    DECLARE @ACC_TRANS VARCHAR(20) =  (SELECT TOP 1 EPAM.ACC_NO FROM ENTRIES_POST_ACCNO_MW EPAM WHERE EPAM.ACC_TYPE = 'ASSET_CCLD_N')
914
        DECLARE @ACCNO_KSV_OUT VARCHAR(20) = (SELECT  TOP 1 ACC_NO FROM ENTRIES_POST_ACCNO_MW WHERE ACC_TYPE = 'KSV_OUT')
915

    
916
    BEGIN
917
      		SET @BR_CODE = (SELECT BRANCH_CODE FROM CM_BRANCH WHERE BRANCH_ID = @UNIT_CHARGE)
918
      		SET @DP_CODE = (SELECT DEP_CODE FROM CM_DEPARTMENT WHERE DEP_ID = @DEP_PAY)
919
    END
920
        --IF @WARE_CODE = '10AP' OR @WARE_CODE = '11VL' SET @WARE_ACCNO = @MATERIAL_ACCNO
921
        --LAY MA BRANCH CODE
922
        DECLARE @DB_ID VARCHAR(15) = (SELECT CW.DEP_ID FROM CM_WARE CW WHERE CW.WARE_ID = @l_WARE_ID)
923
        --        SELECT @DP_CODE = CD.DEP_CODE, @BR_CODE = CB.BRANCH_CODE 
924
        --        FROM CM_DEPARTMENT CD LEFT JOIN CM_BRANCH CB ON CD.BRANCH_ID = CB.BRANCH_ID 
925
        --        WHERE CD.DEP_ID = @DB_ID
926
--- XUẤT SỬ DỤNG ĐỐI VỚI KHO QUÀ TẶNG KHÁCH HÀNG, KHO QUÀ TẶNG MARKETING, KHO QUÀ TẶNG NHÂN VIÊN
927
        IF @WARE_CODE = '06QT' OR @WARE_CODE = '07TT' OR @WARE_CODE = '08NV' 
928
        BEGIN
929
            IF @BRANCH_CREATE = @UNIT_CHARGE
930
            BEGIN
931
                ---   TODO: NỢ
932
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID OUT
933
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST', @l_ET_ID OUT
934
                INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
935
                VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE, @EXP_ACCTNO /*@MATERIAL_ACCNO*/, 'VND', 'D', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, @DP_CODE, @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
936
            	IF @@Error <> 0 GOTO ABORT;
937
    
938
                ---   TODO: CÓ
939
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
940
                INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
941
                VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE_X, @ACCNO_KSV_OUT , 'VND', 'C', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, @DP_CODE_X, @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
942
            	IF @@Error <> 0 GOTO ABORT;
943
    
944
                -------- ĐI CHI PHÍ THUẾ VAT ---
945
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST', @l_ET_ID OUT
946
                ---   TODO: NỢ
947
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
948
                INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
949
                VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE, @EXP_ACCTNO /*@MATERIAL_ACCNO*/, 'VND', 'D',@PRICE_VAT, 1,@PRICE_VAT, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, @DP_CODE, @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
950
            	IF @@Error <> 0 GOTO ABORT;
951
    
952
                --IF(@VAT > 0)
953
                BEGIN
954
                	---   TODO: CÓ
955
                	EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
956
                    INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
957
                    VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE, @ACC_VAT, 'VND', 'C',@PRICE_VAT, 1,@PRICE_VAT, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, '', @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
958
                	IF @@Error <> 0 GOTO ABORT;
959
                END
960
            END
961
            ELSE
962
            BEGIN
963
            	---   TODO: NỢ
964
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID OUT
965
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST', @l_ET_ID OUT
966
                INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
967
                VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE, @EXP_ACCTNO , 'VND', 'D', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, @DP_CODE, @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
968
            	IF @@Error <> 0 GOTO ABORT;
969
    
970
                ---   TODO: CÓ 5199
971
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
972
                INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
973
                VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE, @ACC_TRANS, 'VND', 'C', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, '', @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
974
                IF @@Error <> 0 GOTO ABORT;
975
            
976

    
977
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST', @l_ET_ID OUT
978
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
979
                INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
980
                VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE, @EXP_ACCTNO , 'VND', 'D', @PRICE_VAT, 1, @PRICE_VAT, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, @DP_CODE, @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
981
            	IF @@Error <> 0 GOTO ABORT;
982
                --IF(@VAT > 0)
983
                BEGIN
984
                	---   TODO: CÓ
985
                	EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
986
                    INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
987
                    VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE, @ACC_VAT, 'VND', 'C',@PRICE_VAT, 1,@PRICE_VAT, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, '', @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
988
                	IF @@Error <> 0 GOTO ABORT;
989
                END
990

    
991
                
992
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST', @l_ET_ID OUT
993
                ---   TODO: NỢ
994
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
995
                INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
996
                VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE_X, @ACC_TRANS, 'VND', 'D', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, '', @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
997
                IF @@Error <> 0 GOTO ABORT;
998
                ---   TODO: CÓ
999
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
1000
                INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
1001
                VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE_X, @ACCNO_KSV_OUT , 'VND', 'C', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, @DP_CODE_X, @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
1002
            	IF @@Error <> 0 GOTO ABORT;
1003
                
1004

    
1005
            END
1006
            DECLARE @MAT_NAME NVARCHAR(1000), @UNIT NVARCHAR(50)
1007
            SELECT @MAT_NAME = mm.MATERIAL_NAME, @UNIT = cu.UNIT_NAME FROM MW_MATERIAL mm
1008
            LEFT JOIN CM_UNIT cu ON mm.UNIT_ID = cu.UNIT_ID
1009
            WHERE mm.MATERIAL_CODE = @l_MAT_CODE
1010

    
1011
            INSERT INTO MTTB_INVOICE_ITEMS_DETAIL (item_id, trn_ref_no, branch_code, trn_ccy, txn_date, total_fee, total_vat, total_txn, stt, service_name, unit, quantity, unit_price, total, record_stat, order_no, tienthue, tongtiensauthue, thuesuat, app_code, ex_ref, etp_id)
1012
            VALUES (@l_ET_ID, '', @BR_CODE, 'VND', CONVERT(DATE, @p_KT_APPROVE_DT, 103), @QTY*@PRICE, @PRICE_VAT, @QTY*@PRICE + @PRICE_VAT, CONVERT(VARCHAR(8), @INDEX), @MAT_NAME, @UNIT, CONVERT(VARCHAR(255), @QTY), CONVERT(VARCHAR(255), @PRICE), CONVERT(VARCHAR(255), @QTY*@PRICE), 'O', @INDEX, CONVERT(VARCHAR(255), @PRICE_VAT), CONVERT(VARCHAR(255), @QTY*@PRICE + @PRICE_VAT), CONVERT(VARCHAR(255), @VAT), 'AMS_AMS', @p_OUT_ID, @l_ET_ID)
1013
        END
1014

    
1015
        ELSE 
1016
        BEGIN
1017
                    IF @BRANCH_CREATE = @UNIT_CHARGE
1018
                    BEGIN
1019
                        EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST', @l_ET_ID out
1020
                	    ---   TODO: NỢ
1021
                        EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
1022
                        INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
1023
                        VALUES (@l_ETP_ID, @l_ETP_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE, @EXP_ACCTNO /*@MATERIAL_ACCNO*/, 'VND', 'D', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, @DP_CODE, @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
1024
                    	IF @@Error <> 0 GOTO ABORT;
1025
                        
1026
                    	---   TODO: CÓ
1027
                    	EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
1028
                        INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
1029
                        VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE_X, @WARE_ACCNO, 'VND', 'C', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, '', @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
1030
                    	IF @@Error <> 0 GOTO ABORT;
1031
                    END
1032
                    ELSE IF @BRANCH_CREATE <> @UNIT_CHARGE
1033
                    BEGIN
1034
                    	EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST', @l_ET_ID out
1035
                	    ---   TODO: NỢ
1036
                        EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
1037
                        INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
1038
                        VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE, @EXP_ACCTNO /*@MATERIAL_ACCNO*/, 'VND', 'D', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, @DP_CODE, @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
1039
                    	IF @@Error <> 0 GOTO ABORT;
1040
                        
1041
                    	---   TODO: CÓ
1042
                    	EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
1043
                        INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
1044
                        VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE, @ACC_TRANS, 'VND', 'C', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, '', @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
1045
                    	IF @@Error <> 0 GOTO ABORT;
1046
            
1047
                        ---   TODO: NỢ
1048
                EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST', @l_ET_ID OUT
1049
                        EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
1050
                        INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
1051
                        VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE_X, @ACC_TRANS /*@MATERIAL_ACCNO*/, 'VND', 'D', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, '', @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
1052
                    	IF @@Error <> 0 GOTO ABORT;
1053
                        
1054
                    	---   TODO: CÓ
1055
                    	EXEC SYS_CodeMasters_Gen 'MW_ENTRIES_POST_SYNC', @l_ETP_ID out
1056
                        INSERT INTO MW_ENTRIES_POST_SYNC (ETP_ID, ET_ID, TRN_TYPE, TRN_ID, AC_BRANCH, AC_NO, AC_CCY, DRCR_IND, FCY_AMOUNT, EXCH_RATE, LCY_AMOUNT, RELATED_REFERENCE, TRN_DT, USER_ID, AUTH_ID, DEPT_CD, DESC_TRANS,TRN_NO, WARE_CODE)
1057
                        VALUES (@l_ETP_ID, @l_ET_ID, 'MW_OUT', @p_OUT_ID,@BR_CODE_X, @WARE_ACCNO, 'VND', 'C', @QTY*@PRICE, 1, @QTY*@PRICE, @l_MAT_CODE,CONVERT(DATETIME, @p_KT_APPROVE_DT, 103), @KT_MAKER_ID, @p_KT_CHECKER_ID, '', @CORE_NOTE,@l_TRN_NO,@WARE_CODE);
1058
                    	IF @@Error <> 0 GOTO ABORT;
1059
                    END
1060
        END
1061

    
1062
	----------------END HACH TOAN 05/09/2023 KHIEMCHG------------------
1063

    
1064
  
1065
      FETCH NEXT FROM XmlData INTO @OUT_DT_ID, @TOTAL_AMT,@TO_DEPT_ID, @BRANCH_CREATE , @CORE_NOTE ,@KT_MAKER_ID ,@BRANCH_ID ,@DEPT_ID ,@PRICE_ID ,@GROUP_ID ,@MATERIAL_ID ,@IS_PROMO , @VAT, @PRICE_VAT,@QTY,
1066
  								 @TO_BRN_ID, @MAST_BAL_ID,@CUST_NAME,@QTY,@PRICE,@NOTES,@EXP_ACCTNO,@UNIT_RECEIVE,@UNIT_CHARGE,@UNIT_PAY,@QTY_RECEIVE,@QTY_DAMAGED,@QTY_LOSS,@RECEIVE_NOTES, @DEP_RECEIVE, @DEP_PAY
1067
  END
1068
  CLOSE XmlData
1069
  DEALLOCATE XmlData
1070

    
1071

    
1072
--NẾU CÓ PYC THÌ CỘNG SL VÀO PYC
1073
  DECLARE @REQ_ID VARCHAR(15) = (SELECT MT.MW_REQ_ID FROM MW_OUT MT WHERE MT.OUT_ID = @p_OUT_ID)
1074
  IF(ISNULL(@REQ_ID,'') <> '')
1075
  BEGIN
1076
      
1077
      UPDATE D SET D.ALLOCATED = ISNULL(D.ALLOCATED,0) + RE.QTY
1078
      FROM (
1079
        SELECT A.MAST_BAL_ID, SUM(A.QTY) AS QTY, A.UNIT_RECEIVE, ISNULL(A.DEP_RECEIVE,'') AS DEP_RECEIVE
1080
        FROM MW_OUT_DT A    
1081
        WHERE A.OUT_ID = @p_OUT_ID
1082
        GROUP BY A.MAST_BAL_ID, A.UNIT_RECEIVE, ISNULL(A.DEP_RECEIVE,'')) RE 
1083
      INNER JOIN MW_MAST_BAL B ON RE.MAST_BAL_ID = B.MAST_BAL_ID      
1084
      INNER JOIN MW_REQ_DT D ON B.MATERIAL_ID = D.MATERIAL_ID AND D.BRANCH_USE = RE.UNIT_RECEIVE AND ISNULL(D.DEP_USE,'') = ISNULL(RE.DEP_RECEIVE,'')
1085
      WHERE D.REQ_ID = @REQ_ID
1086

    
1087
      IF(EXISTS(SELECT 1 FROM MW_REQ_DT WHERE ISNULL(QUANTITY_ALLOCATION,0) < ISNULL(ALLOCATED,0) AND REQ_ID = @REQ_ID))
1088
      BEGIN
1089
          ROLLBACK TRANSACTION
1090
    		  SELECT N'Số lượng cấp phát vượt yêu cầu của đơn vị.' AS Result,
1091
               '' OUT_ID,
1092
               '' ErrorDesc;
1093
          RETURN '-1';
1094
      END
1095
    
1096
      IF(NOT EXISTS(SELECT 1 FROM MW_REQ_DT MRD WHERE MRD.REQ_ID = @REQ_ID AND ISNULL(MRD.QUANTITY_ALLOCATION,0) <> ISNULL(MRD.ALLOCATED,0)))
1097
      BEGIN
1098
          UPDATE MW_REQ SET IS_DONE = '1' WHERE REQ_ID = @REQ_ID
1099
      END
1100
  END   
1101

    
1102
	INSERT INTO dbo.MW_PROCESS(REQ_ID,PROCESS_ID,CHECKER_ID,APPROVE_DT,PROCESS_DESC,NOTES)
1103
	VALUES(@p_OUT_ID,'KT_APP',@p_KT_CHECKER_ID,GETDATE(), N'Kiểm soát viên kế toán duyệt phiếu',N'Kiểm soát viên kế toán duyệt phiếu')
1104

    
1105
COMMIT TRANSACTION;
1106
SELECT '0' AS Result, @p_OUT_ID OUT_ID,'' ErrorDesc;
1107
RETURN '0';
1108
ABORT:
1109
BEGIN
1110
    CLOSE XmlData;
1111
    DEALLOCATE XmlData;
1112
    ROLLBACK TRANSACTION;
1113
    SELECT '-1' AS Result,'' OUT_ID, '' ErrorDesc;
1114
    RETURN '-1';
1115
END;