oracle和db2存储过程语法的区别
1、oracle语法
--存储过程名称
CREATE OR REPLACE procedure PH_table
(
--定义传入的参数
cs1 VARCHAR2, --参数1
cs2 TIMESTAMP, --参数2
cs3 INT --参数3
)
AS
--如果要定义参数 这块写参数
v_cs1 INT;
v_cs2 VARCHAR2(20);
v_cs3 decimal(18,6);
----------------------------定义游标---------------------------------
CURSOR cur_1 IS select * From table
EchargeKind cur_1%rowtype;
BEGIN
--循环
FOR EchargeKind IN cur_1 LOOP
SELECT 字段 INTO v_cs1 FROM T_SYSTEM where 字段=cs1
if v_cs1 =0 then
v_cs2=’你好‘;
else
v_cs2=’你不好‘;
end if;
END PH_table;
CREATE OR REPLACE procedure PH_FinancingReport
(
OperID VARCHAR2, --操作员编号;如果操作员编号只有一个则统计单个操作员,有多个则统计多个操作员。
seitleoperatorId VARCHAR2, --结账操作员
StartTime TIMESTAMP, --上次结帐时间
EndTime TIMESTAMP, --本次结帐时间
gatheringId VARCHAR2, --报账单序号
ispreview INT,
ERR OUT NUMBER
)
AS
v_RegisterMark INT; --True(0):统计挂号金额,诊金,工本费;False(1)不统计挂号
v_RegisterInvoiceType VARCHAR2(20); --挂号、门诊发票是否使用同一号段
v_ReckonAccountsMan VARCHAR2(16); --结帐人
v_Operator VARCHAR2(20); --操作员姓名
v_OperatorCodeNo VARCHAR2(10); --操作员代码
v_MangleSum int; --报损数量
--v_OverTypeSum int; --重打数量
v_ClinicOverTypeSum int; --门诊发票重打数量
v_RegOverTypeSum int; --挂号发票重打数量
--v_PrintNumSum int; --统一结算发票补打数量
v_ClinicPrintNumSum int; --门诊发票补打数量
v_RegPrintNumSum int; --挂号发票补打数量
--v_ReturnedVouchers int; --退票张数
v_ClinicReturnedVouchers int; --门诊退票张数
v_RegReturnedVouchers int; --挂号退票张数
v_PrintInvoiceConfig VARCHAR2(20); --门诊退费是否打印负票
--v_RVMoney decimal(18,6); --退票应收金额
--v_RVSELFMoney decimal(18,6); --退票实收金额
v_ClinicRVMoney decimal(18,6); --门诊退票应收金额
v_ClinicRVSELFMoney decimal(18,6); --门诊退票实收金额
v_RegRVMoney decimal(18,6); --挂号退票应收金额
v_RegRVSELFMoney decimal(18,6); --挂号退票实收金额
--v_InvalidatedTicket int; --废票张数
v_ClinicInvalidatedTicket int; --门诊发票废票张数
v_RegInvalidatedTicket int; --挂号发票废票张数
--v_ITMoney decimal(18,6); --废票应收金额
--v_ITSELFMoney decimal(18,6); --废票实收金额
v_ClinicITMoney decimal(18,6); --门诊废票应收金额
v_ClinicITSELFMoney decimal(18,6); --门诊废票实收金额
v_RegITMoney decimal(18,6); --挂号废票应收金额
v_RegITSELFMoney decimal(18,6); --挂号废票实收金额
v_BeginInvoice VARCHAR2(30); --起始发票号
v_EndInvoice VARCHAR2(30); --截至发票号
v_ChargeBeginInvoice VARCHAR2(30); --收费起始号
v_ChargeEndInvoice VARCHAR2(30); --收费终止号
v_RegBeginInvoice VARCHAR2(30); --挂号起始号
v_RegEndInvoice VARCHAR2(30); --挂号终止号
v_ChargeInvoiceSum int; --收费发票数
v_RegInvoiceSum int; --挂号发票数
v_InvoiceSum int; --发票总数
v_InvoiceArea varchar2(8000); --发票号段
v_TempMinInvoiceID varchar2(30); --临时变量,发票号段最小发票号
v_TempMaxInvoiceID varchar2(30); --临时变量,发票号段最大发票号
v_RegisterFee decimal(18,6); --挂号金额
v_ExamineMoney decimal(18,6); --诊金
v_CaseCost decimal(18,6); --工本费
v_BespeakMoney decimal(18,6); --挂号预约费
v_CHECKFEE decimal(18,6); --挂号检查费
v_GHTC decimal(18,6); --挂号统筹金额
v_GHZH decimal(18,6); --挂号账户金额
v_RegisterFeeRefund decimal(18,6);
v_ExamineMoneyRefund decimal(18,6);
v_CaseCostRefund decimal(18,6);
v_BespeakMoneyRefund decimal(18,6);
v_CHECKFEERefund decimal(18,6);
v_GHTCRefund decimal(18,6); --挂号退统筹
v_GHZHRefund decimal(18,6); --挂号退账户
v_SumMoney decimal(18,6); --应收合计金额
v_ReturnMoney decimal(18,6); --应收退费金额
v_SumSelfMoney decimal(18,6); --实收合计金额
v_ReturnSelfMoney decimal(18,6); --实收退费金额
v_HangMoney decimal(18,6); --挂帐金额
v_ReportItemMoney varchar2(10000); --报表项目中的金额合计
v_RealIncomeSum decimal(18,6); --实收合计
v_ReceivablesSum decimal(18,6); --应收合计
v_HangAccountSum decimal(18,6); --挂帐合计
v_BankCardMoney decimal(18,6); --银医直联卡收费金额
v_BankCardTypeMoneystr varchar2(200); --银医直联卡金额
v_Recharge decimal(18,6); --门诊预交金收款金额
v_RechargeReturn decimal(18,6); --门诊预交金退款金额
v_RechargeInhos decimal(18,6); --住院转门诊预交金
v_RechargeReturnInhos decimal(18,6); --门诊转住院预交金
v_BalanceReturnMoney decimal(18,6); --已结算退费金额
v_Cash decimal(18,6); --实收现金
v_YL decimal(18,6); --银联卡
v_YJJ decimal(18,6); --预交金
v_ZP decimal(18,6); --支票
v_TCZF decimal(18,6); --统筹支付
v_ZHZF decimal(18,6); --账户支付
v_NoPrintYJJ decimal(18,6); --不打票预交金
v_strChargeKindMoney varchar2(9000); --费用类别金额
v_ChargeKindTCZF decimal(18,6); --费用类别统筹
v_ChargeKindZHZF decimal(18,6); --费用类别账户
v_ChargeKindXJ decimal(18,6); --费用类别现金
v_ChargeKindYLK decimal(18,6); --费用类别银联卡
v_ChargeKindYJJ decimal(18,6); --费用类别预交金
v_ChargeKindZP decimal(18,6); --费用类别支票
v_ReturnSumMoney decimal(18,6); --应收退费合计金额
v_ReturnSumSelfMoney decimal(18,6); --实收退费合计金额
v_POSReceivables decimal(18,6); --POS应收金额
v_POSRealIncome decimal(18,6); --POS实收金额
v_POSHangAccount decimal(18,6); --POS挂帐金额
v_OptionFeeReceivables decimal(18,6); --附加费应收金额
v_OptionFeeRealIncome decimal(18,6); --附加费实收金额
v_OptionFeeHangAccount decimal(18,6); --附加费挂帐金额
v_NoPrintMoney decimal(18,6); --不打票应收(实际不收取金额部分)
v_NoPrintSelfMoney decimal(18,6); --不打票实收(实际不收取金额部分)
v_MXBTC decimal(18,6); --慢性病统筹
v_TCGZ decimal(18,6); --统筹挂账金额
v_YHDZ decimal(18,6); --优惠打折金额
v_CardMoney decimal(18,6); --卡金额
v_BalanceModeMoney varchar2(20000); --结算方式金额
v_BMsumMoney decimal(18,6); --结算方式应收
v_BMselfMoney decimal(18,6); --结算方式实收
v_BMhangMoney decimal(18,6); --结算方式挂账
v_gatheringId VARCHAR2(30); --报账单序号
-----定义游标----------------------------------------------------------
CURSOR cur_1 IS --费用类别
select * From S_CHARGE_KIND
where (S_CHARGE_KIND.ISNOTMEDINSURANCE = '是' or S_CHARGE_KIND.ISNOTMEDINSURANCE = '不打票' OR ISNOTMEDINSURANCE = '院内医保')
and S_CHARGE_KIND.USECONFINE <> '住院' AND S_CHARGE_KIND.STOPFLAG = 0;
EchargeKind cur_1%rowtype;
CURSOR cur_2 IS --卡类型
select * from T_CARD_TYPES where ISBANKCARD = 1 order by TYPE_NO;
CardTypes cur_2%rowtype;
CURSOR cur_3 IS
SELECT StartNumber,EndNumber FROM T_OPERATOR_INVOICE WHERE OperatorID=OperID AND InvoiceType='挂号发票' ORDER BY StartNumber ASC;
InvoiceArea cur_3%rowtype;
CURSOR cur_4 IS
SELECT StartNumber,EndNumber FROM T_OPERATOR_INVOICE WHERE OperatorID=OperID AND InvoiceType='门诊发票' ORDER BY StartNumber ASC;
InvoiceAreas cur_4%rowtype;
CURSOR cur_5 IS--获取收费项目中的发票项目
--SELECT Distinct ReportItem FROM d_summary_info order by ReportItem;
SELECT Distinct INVOICEITEM ReportItem FROM T_CLINICINVOICEITEM order by INVOICEITEM;
ReportItem cur_5%rowtype;
CURSOR cur_6 IS
SELECT Distinct BALANCEMODE FROM D_BALANCE_MODE order by BALANCEMODE;
BalanceMode cur_6%rowtype;
BEGIN
v_gatheringId:=gatheringId ;
INSERT INTO SESSION_OPERATORMZJZ(GATHERINGID,STARTDATE,ENDDATE,OPERATORID,OPERATEDATE) VALUES(gatheringId,STARTTIME,EndTime,OperID,sysdate);
FOR EchargeKind IN cur_1 LOOP
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,EchargeKind.CHARGEKIND,OperID,0);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,EchargeKind.CHARGEKIND || '统筹支付',OperID,0);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,EchargeKind.CHARGEKIND || '账户支付',OperID,0);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,EchargeKind.CHARGEKIND || '现金',OperID,0);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,EchargeKind.CHARGEKIND || '银联卡',OperID,0);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,EchargeKind.CHARGEKIND || '预交金',OperID,0);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,EchargeKind.CHARGEKIND || '支票',OperID,0);
end loop;
FOR CardTypes IN cur_2 LOOP
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,CardTypes.TYPE_NAME,OperID,0);
end loop;
FOR ReportItem IN cur_5 LOOP
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,ReportItem.ReportItem||'应收',OperID,0);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,ReportItem.ReportItem||'应收退费',OperID,0);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,ReportItem.ReportItem||'实收',OperID,0);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,ReportItem.ReportItem||'实收退费',OperID,0);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,ReportItem.ReportItem||'挂账',OperID,0);
end loop;
FOR BalanceMode IN cur_6 LOOP
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,BalanceMode.BALANCEMODE||'应收',OperID,0);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,BalanceMode.BALANCEMODE||'实收',OperID,0);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,OPERATORID,INFACTMONEY)
VALUES (gatheringId,BalanceMode.BALANCEMODE||'挂账',OperID,0);
end loop;
--读取是否统计挂号费
SELECT defaultValue INTO v_RegisterMark FROM T_SYSTEM_CONFIG where setcontent='门诊交款报表是否统计挂号费用';
--读取发票是否使用同一号段配置
SELECT defaultValue INTO v_RegisterInvoiceType FROM T_SYSTEM_CONFIG where setcontent='挂号、门诊发票是否使用同一号段';
If v_RegisterInvoiceType = '0' Then
v_RegisterInvoiceType := '门诊发票';
else
v_RegisterInvoiceType := '挂号发票';
end if;
--获得报损数量
SELECT COALESCE(COUNT(t_InvoiceUseDetail.OldInvoice),0) INTO v_MangleSum FROM t_InvoiceUseDetail WHERE OperatorID=OperID AND InvoiceType='门诊发票' AND InvoiceState=1 AND OperateDate >= STARTTIME AND OperateDate < ENDTIME;
UPDATE SESSION_OPERATORMZJZ SET REJECTCOUNT=v_MangleSum WHERE OPERATORID=OperID;
--获取门诊发票重打数量
SELECT COALESCE(COUNT(t_InvoiceUseDetail.OldInvoice),0) INTO v_ClinicOverTypeSum FROM t_InvoiceUseDetail WHERE OperatorID=OperID AND InvoiceType='门诊发票' AND InvoiceState=0 AND OperateDate >= STARTTIME AND OperateDate < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'门诊发票重打数量',v_ClinicOverTypeSum,v_ClinicOverTypeSum,OperID);
--获取挂号发票重打数量
SELECT COALESCE(COUNT(CurrentInvoice),0) INTO v_RegOverTypeSum FROM t_InvoiceUseDetail WHERE OperatorID=OperID AND InvoiceType='挂号发票' AND InvoiceState=0 AND OperateDate >= STARTTIME AND OperateDate < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号发票重打数量',v_RegOverTypeSum,v_RegOverTypeSum,OperID);
--获取全部重打数量
UPDATE SESSION_OPERATORMZJZ SET REPRINTCOUNT=v_ClinicOverTypeSum+v_RegOverTypeSum WHERE OPERATORID=OperID;
--获取门诊发票补打数量
SELECT COALESCE(COUNT(OldInvoice),0) INTO v_ClinicPrintNumSum FROM t_InvoiceUseDetail WHERE OperatorID=OperID AND InvoiceType='门诊发票' AND InvoiceState=4 AND OperateDate >= STARTTIME AND OperateDate < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'门诊发票补打数量',v_ClinicPrintNumSum,v_ClinicPrintNumSum,OperID);
--获取挂号发票补打数量
SELECT COALESCE(COUNT(CurrentInvoice),0) INTO v_RegPrintNumSum FROM t_InvoiceUseDetail WHERE OperatorID=OperID AND InvoiceType='挂号发票' AND InvoiceState=4 AND OperateDate >= STARTTIME AND OperateDate < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号发票补打数量',v_RegPrintNumSum,v_RegPrintNumSum,OperID);
--获取全部统一结算发票补打数量
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'发票补打数量',v_ClinicPrintNumSum+v_RegPrintNumSum,v_ClinicPrintNumSum+v_RegPrintNumSum,OperID);
--获取门诊发票退票张数
SELECT COALESCE(COUNT(Distinct OldInvoice),0) INTO v_ClinicReturnedVouchers FROM t_InvoiceUseDetail WHERE OperatorID=OperID AND InvoiceType='门诊发票' AND InvoiceState=2 AND OperateDate >= STARTTIME AND OperateDate < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'门诊发票退票张数',v_ClinicReturnedVouchers,v_ClinicReturnedVouchers,OperID);
--获取挂号发票退票张数
SELECT COALESCE(COUNT(Distinct OldInvoice),0) INTO v_RegReturnedVouchers FROM t_InvoiceUseDetail B WHERE b.operatorid=OperID AND InvoiceType='挂号发票' AND InvoiceState=2 AND OperateDate >= STARTTIME AND OperateDate < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号发票退票张数',v_RegReturnedVouchers,v_RegReturnedVouchers,OperID);
--获取全部退票张数
UPDATE SESSION_OPERATORMZJZ SET RETURNCOUNT=v_ClinicReturnedVouchers+v_RegReturnedVouchers WHERE OPERATORID=OperID;
SELECT defaultValue INTO v_PrintInvoiceConfig FROM T_SYSTEM_CONFIG where setcontent='门诊退费是否打印负票';
--获取门诊退票应收金额,获取门诊退票实收金额
if v_PrintInvoiceConfig = '0' then
SELECT COALESCE(SUM(Money),0) * -1,COALESCE(SUM(SelfMoney),0) * -1 into v_ClinicRVMoney,v_ClinicRVSELFMoney FROM (SELECT d_Detail_Account.Money,d_Detail_Account.SelfMoney FROM t_InvoiceUseDetail,d_Detail_Account WHERE t_InvoiceUseDetail.OperatorID=OperID AND InvoiceState=2 AND InvoiceType='门诊发票' AND CancelMark=2 AND t_InvoiceUseDetail.OperateDate >= STARTTIME AND t_InvoiceUseDetail.OperateDate < ENDTIME AND t_InvoiceUseDetail.OldInvoice=d_Detail_Account.InvoiceID)T;
else
SELECT COALESCE(SUM(Money),0) * -1,COALESCE(SUM(SelfMoney),0) * -1 into v_ClinicRVMoney,v_ClinicRVSELFMoney FROM (SELECT d_Detail_Account.Money * -1 as Money,d_Detail_Account.SelfMoney * -1 as SelfMoney FROM t_InvoiceUseDetail,d_Detail_Account WHERE t_InvoiceUseDetail.OperatorID=OperID AND InvoiceState=2 AND InvoiceType='门诊发票' AND t_InvoiceUseDetail.OperateDate >= STARTTIME AND t_InvoiceUseDetail.OperateDate < ENDTIME AND t_InvoiceUseDetail.OldInvoice=d_Detail_Account.InvoiceID)T;
end if;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'门诊退票应退金额',v_ClinicRVMoney,v_ClinicRVMoney,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'门诊退票实退金额',v_ClinicRVSELFMoney,v_ClinicRVSELFMoney,OperID);
--获取挂号退票应收金额,获取挂号退票实收金额
if v_PrintInvoiceConfig = '0' then
SELECT COALESCE(SUM(Money),0) * -1,COALESCE(SUM(SelfMoney),0) * -1 into v_RegRVMoney,v_RegRVSELFMoney FROM (SELECT COALESCE(SUM(RegisterFee + ExamineMoney + CaseCost + CHECKFEE + BESPEAKMONEY),0) AS MONEY,COALESCE(SUM( RegisterFee + ExamineMoney + CaseCost + CHECKFEE + BESPEAKMONEY-DISCOUNTDEFRAY-ACCOUNTDEFRAY),0) AS SelfMoney FROM t_Register_Info A, t_InvoiceUseDetail B WHERE A.InvoiceID=B.OldInvoice AND CancelMark=2 AND b.operatorid=OperID AND InvoiceType=v_RegisterInvoiceType AND InvoiceState=2 AND B.OperateDate >= STARTTIME AND B.OperateDate < ENDTIME)T;
else
SELECT COALESCE(SUM(Money),0) * -1,COALESCE(SUM(SelfMoney),0) * -1 into v_RegRVMoney,v_RegRVSELFMoney FROM (SELECT COALESCE(SUM(RegisterFee + ExamineMoney + CaseCost + CHECKFEE + BESPEAKMONEY),0) AS MONEY,COALESCE(SUM( RegisterFee + ExamineMoney + CaseCost + CHECKFEE + BESPEAKMONEY-DISCOUNTDEFRAY-ACCOUNTDEFRAY),0) AS SelfMoney FROM t_Register_Info A, t_InvoiceUseDetail B WHERE A.InvoiceID=B.OldInvoice AND CancelMark=2 AND b.operatorid=OperID AND InvoiceType=v_RegisterInvoiceType AND InvoiceState=2 AND B.OperateDate >= STARTTIME AND B.OperateDate < ENDTIME)T;
end if;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号退票应退金额',v_RegRVMoney,v_RegRVMoney,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号退票实退金额',v_RegRVSELFMoney,v_RegRVSELFMoney,OperID);
--获取全部退票应收金额,获取全部退票实收金额
UPDATE SESSION_OPERATORMZJZ SET RETURNPAYMENT=v_ClinicRVMoney+v_RegRVMoney,RETURNMONEY=v_ClinicRVSELFMoney+v_RegRVSELFMoney WHERE OPERATORID=OperID;
--获取门诊发票废票张数
SELECT COALESCE(COUNT(Distinct OldInvoice),0) INTO v_ClinicInvalidatedTicket FROM t_InvoiceUseDetail WHERE OperatorID=OperID AND InvoiceType='门诊发票' AND InvoiceState=3 AND OperateDate >= STARTTIME AND OperateDate < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'门诊发票废票张数',v_ClinicInvalidatedTicket,v_ClinicInvalidatedTicket,OperID);
--获取挂号发票废票张数
SELECT COALESCE(COUNT(Distinct OldInvoice),0) INTO v_RegInvalidatedTicket FROM t_InvoiceUseDetail B WHERE b.operatorid=OperID AND InvoiceType='挂号发票' AND InvoiceState=3 AND OperateDate >= STARTTIME AND OperateDate < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号发票废票张数',v_RegInvalidatedTicket,v_RegInvalidatedTicket,OperID);
--获取全部废票张数
UPDATE SESSION_OPERATORMZJZ SET NULLITYCOUNT=v_ClinicInvalidatedTicket+v_RegInvalidatedTicket WHERE OPERATORID=OperID;
--获取门诊废票应收金额,获取门诊废票实收金额
if v_PrintInvoiceConfig = '0' then
SELECT COALESCE(SUM(Money),0) * -1, COALESCE(SUM(SelfMoney),0) * -1 into v_ClinicITMoney,v_ClinicITSELFMoney FROM (SELECT d_Detail_Account.Money,d_Detail_Account.SelfMoney FROM t_InvoiceUseDetail,d_Detail_Account WHERE t_InvoiceUseDetail.OperatorID=OperID AND InvoiceState=3 AND t_InvoiceUseDetail.OperateDate >= STARTTIME AND t_InvoiceUseDetail.OperateDate < ENDTIME AND t_InvoiceUseDetail.OldInvoice=d_Detail_Account.InvoiceID AND InvoiceType='门诊发票' AND CancelMark=2)T;
else
SELECT COALESCE(SUM(Money),0) * -1, COALESCE(SUM(SelfMoney),0) * -1 into v_ClinicITMoney,v_ClinicITSELFMoney FROM (SELECT d_Detail_Account.Money * -1 as Money,d_Detail_Account.SelfMoney * -1 as SelfMoney FROM t_InvoiceUseDetail,d_Detail_Account WHERE t_InvoiceUseDetail.OperatorID=OperID AND InvoiceState=3 AND t_InvoiceUseDetail.OperateDate >= STARTTIME AND t_InvoiceUseDetail.OperateDate < ENDTIME AND t_InvoiceUseDetail.OldInvoice=d_Detail_Account.InvoiceID AND InvoiceType='门诊发票')T;
end if;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'门诊废票应废金额',v_ClinicITMoney,v_ClinicITMoney,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'门诊废票实废金额',v_ClinicITSELFMoney,v_ClinicITSELFMoney,OperID);
--获取挂号废票应收金额,获取挂号废票实收金额
if v_PrintInvoiceConfig = '0' then
SELECT COALESCE(SUM(Money),0) * -1, COALESCE(SUM(SelfMoney),0) * -1 into v_RegITMoney,v_RegITSELFMoney FROM (SELECT COALESCE(SUM(RegisterFee + ExamineMoney + CaseCost + CHECKFEE + BESPEAKMONEY),0) AS MONEY,COALESCE(SUM(RegisterFee + ExamineMoney + CaseCost + CHECKFEE + BESPEAKMONEY-DISCOUNTDEFRAY-ACCOUNTDEFRAY),0) AS SelfMoney FROM t_Register_Info A, t_InvoiceUseDetail B WHERE A.InvoiceID=B.OldInvoice AND CancelMark=2 AND b.operatorid=OperID AND InvoiceType=v_RegisterInvoiceType AND InvoiceState=3 AND B.OperateDate >= STARTTIME AND B.OperateDate < ENDTIME)T;
else
SELECT COALESCE(SUM(Money),0) * -1, COALESCE(SUM(SelfMoney),0) * -1 into v_RegITMoney,v_RegITSELFMoney FROM (SELECT COALESCE(SUM(RegisterFee + ExamineMoney + CaseCost + CHECKFEE + BESPEAKMONEY),0) AS MONEY,COALESCE(SUM(RegisterFee + ExamineMoney + CaseCost + CHECKFEE + BESPEAKMONEY-DISCOUNTDEFRAY-ACCOUNTDEFRAY),0) AS SelfMoney FROM t_Register_Info A, t_InvoiceUseDetail B WHERE A.InvoiceID=B.OldInvoice AND CancelMark=2 AND b.operatorid=OperID AND InvoiceType=v_RegisterInvoiceType AND InvoiceState=3 AND B.OperateDate >= STARTTIME AND B.OperateDate < ENDTIME)T;
end if;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号废票应废金额',v_RegITMoney,v_RegITMoney,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号废票实废金额',v_RegITMoney,v_RegITMoney,OperID);
--获取全部废票应收金额,获取全部废票实收金额
UPDATE SESSION_OPERATORMZJZ SET NULLITYPAYMENT=v_ClinicITMoney+v_RegITMoney,NULLITYMONEY=v_ClinicITSELFMoney+v_RegITSELFMoney WHERE OPERATORID=OperID;
--获取起始发票号,获取截止发票号
if v_PrintInvoiceConfig = '0' then
SELECT COALESCE(Min(Distinct INVOICEID),' '),COALESCE(Max(Distinct INVOICEID),' ') into v_BeginInvoice,v_EndInvoice FROM (
SELECT a.InvoiceID FROM d_Detail_Account a inner join S_CHARGE_KIND b on a.SICKTYPEID=b.CHARGEKINDID WHERE b.ISNOTMEDINSURANCE<>'不打票' and a.INVOICEOPERATOR=OperID AND (a.INVOICEDATE >= STARTTIME AND a.INVOICEDATE < ENDTIME) and BALANCESTATE <> 0 and CANCELMARK <> 2
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState=1 AND OperatorID=OperID
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState =0 AND OperatorID=OperID
UNION ALL
SELECT InvoiceID AS INVOICEID FROM t_Register_Info WHERE INVOICEOPERATOR=OperID AND INVOICEDATE >= STARTTIME AND INVOICEDATE < ENDTIME and BALANCESTATE <> 0 and CANCELMARK <> 2
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND InvoiceState =0 AND OperatorID=OperID
)T where InvoiceID<>'0000000000' and InvoiceID not like 'y%';
SELECT COALESCE(Min(Distinct INVOICEID),' '),COALESCE(Max(Distinct INVOICEID),' ') into v_ChargeBeginInvoice,v_ChargeEndInvoice FROM (
SELECT a.InvoiceID FROM d_Detail_Account a inner join S_CHARGE_KIND b on a.SICKTYPEID=b.CHARGEKINDID WHERE b.ISNOTMEDINSURANCE<>'不打票' and a.INVOICEOPERATOR=OperID AND a.INVOICEDATE >= STARTTIME AND a.INVOICEDATE < ENDTIME and BALANCESTATE <> 0 and CANCELMARK <> 2
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState=1 AND OperatorID=OperID
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState =0 AND OperatorID=OperID
)T where InvoiceID<>'0000000000' and InvoiceID not like 'y%';
SELECT COALESCE(Min(Distinct INVOICEID),' '),COALESCE(Max(Distinct INVOICEID),' ') into v_RegBeginInvoice,v_RegEndInvoice FROM (
SELECT A.InvoiceID AS INVOICEID FROM t_Register_Info A WHERE A.INVOICEOPERATOR=OperID AND INVOICEDATE >= STARTTIME AND INVOICEDATE < ENDTIME and BALANCESTATE <> 0 and CANCELMARK <> 2
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND InvoiceState =0 AND OperatorID=OperID
)T where InvoiceID<>'0000000000' and InvoiceID not like 'y%';
else
SELECT COALESCE(Min(Distinct INVOICEID),' '),COALESCE(Max(Distinct INVOICEID),' ') into v_BeginInvoice,v_EndInvoice FROM (
SELECT a.InvoiceID FROM d_Detail_Account a inner join S_CHARGE_KIND b on a.SICKTYPEID=b.CHARGEKINDID WHERE b.ISNOTMEDINSURANCE<>'不打票' and a.INVOICEOPERATOR=OperID AND (a.INVOICEDATE >= STARTTIME AND a.INVOICEDATE < ENDTIME) and BALANCESTATE <> 0
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState=1 AND OperatorID=OperID
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState =0 AND OperatorID=OperID
UNION ALL
SELECT A.InvoiceID AS INVOICEID FROM t_Register_Info A WHERE A.INVOICEOPERATOR=OperID AND INVOICEDATE >= STARTTIME AND INVOICEDATE < ENDTIME and BALANCESTATE <> 0 and CANCELMARK <> 2
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND InvoiceState =0 AND OperatorID=OperID
)T where InvoiceID<>'0000000000' and InvoiceID not like 'y%';
SELECT COALESCE(Min(Distinct INVOICEID),' '),COALESCE(Max(Distinct INVOICEID),' ') into v_ChargeBeginInvoice,v_ChargeEndInvoice FROM (
SELECT a.InvoiceID FROM d_Detail_Account a inner join S_CHARGE_KIND b on a.SICKTYPEID=b.CHARGEKINDID WHERE b.ISNOTMEDINSURANCE<>'不打票' and a.INVOICEOPERATOR=OperID AND (a.INVOICEDATE >= STARTTIME AND a.INVOICEDATE < ENDTIME) and BALANCESTATE <> 0
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState=1 AND OperatorID=OperID
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState =0 AND OperatorID=OperID
)T where InvoiceID<>'0000000000' and InvoiceID not like 'y%';
SELECT COALESCE(Min(Distinct INVOICEID),' '),COALESCE(Max(Distinct INVOICEID),' ') into v_RegBeginInvoice,v_RegEndInvoice FROM (
SELECT A.InvoiceID AS INVOICEID FROM t_Register_Info A WHERE A.INVOICEOPERATOR=OperID AND INVOICEDATE >= STARTTIME AND INVOICEDATE < ENDTIME and BALANCESTATE <> 0 and CANCELMARK <> 2
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND InvoiceState =0 AND OperatorID=OperID
)T where InvoiceID<>'0000000000' and InvoiceID not like 'y%';
End If;
UPDATE SESSION_OPERATORMZJZ SET STARTINVOICE=v_BeginInvoice,ENDINVOICE=v_EndInvoice,CHARGEBEGININVOICE=v_ChargeBeginInvoice,CHARGEENDINVOICE=v_ChargeEndInvoice,REGBEGININVOICE=v_RegBeginInvoice,REGENDINVOICE=v_RegEndInvoice WHERE OPERATORID=OperID;
--获取发票总数
if v_PrintInvoiceConfig = '0' then
SELECT COALESCE(COUNT(distinct invoiceid),0) INTO v_InvoiceSum FROM (
SELECT a.InvoiceID FROM d_Detail_Account a inner join S_CHARGE_KIND b on a.SICKTYPEID=b.CHARGEKINDID WHERE b.ISNOTMEDINSURANCE<>'不打票' and a.INVOICEOPERATOR=OperID AND a.INVOICEDATE >= STARTTIME AND a.INVOICEDATE < ENDTIME and BALANCESTATE <> 0 AND CANCELMARK <> 2
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND (INVOICESTATE=1 or INVOICESTATE=3) AND OperatorID=OperID
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState =0 AND OperatorID=OperID
UNION ALL
SELECT InvoiceID AS INVOICEID FROM t_Register_Info WHERE INVOICEOPERATOR=OperID AND INVOICEDATE >= STARTTIME AND INVOICEDATE < ENDTIME and BALANCESTATE <> 0
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND InvoiceState =0 AND OperatorID=OperID
)T where InvoiceID<>'0000000000' and InvoiceID not like 'y%';
SELECT COALESCE(COUNT(distinct invoiceid),0) INTO v_ChargeInvoiceSum FROM (
SELECT a.InvoiceID FROM d_Detail_Account a inner join S_CHARGE_KIND b on a.SICKTYPEID=b.CHARGEKINDID WHERE b.ISNOTMEDINSURANCE<>'不打票' and a.INVOICEOPERATOR=OperID AND a.INVOICEDATE >= STARTTIME AND a.INVOICEDATE < ENDTIME and BALANCESTATE <> 0 AND CANCELMARK <> 2
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND (INVOICESTATE=1 or INVOICESTATE=3) AND OperatorID=OperID
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState =0 AND OperatorID=OperID
)T where InvoiceID<>'0000000000' and InvoiceID not like 'y%';
SELECT COALESCE(COUNT(distinct invoiceid),0) INTO v_RegInvoiceSum FROM (
SELECT A.InvoiceID AS INVOICEID FROM t_Register_Info A WHERE A.INVOICEOPERATOR=OperID AND (INVOICEDATE >= STARTTIME AND INVOICEDATE < ENDTIME) and BALANCESTATE <> 0
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND InvoiceState =0 AND OperatorID=OperID
)T where InvoiceID<>'0000000000' and InvoiceID not like 'y%';
else
SELECT COALESCE(COUNT(distinct invoiceid),0) INTO v_InvoiceSum FROM (
SELECT a.InvoiceID FROM d_Detail_Account a inner join S_CHARGE_KIND b on a.SICKTYPEID=b.CHARGEKINDID WHERE b.ISNOTMEDINSURANCE<>'不打票' and a.INVOICEOPERATOR=OperID AND (a.INVOICEDATE >= STARTTIME AND a.INVOICEDATE < ENDTIME) and BALANCESTATE <> 0
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND (INVOICESTATE=1 or INVOICESTATE=3) AND OperatorID=OperID
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState =0 AND OperatorID=OperID
UNION ALL
SELECT InvoiceID AS INVOICEID FROM t_Register_Info WHERE INVOICEOPERATOR=OperID AND (INVOICEDATE >= STARTTIME AND INVOICEDATE < ENDTIME) and BALANCESTATE <> 0
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND InvoiceState =0 AND OperatorID=OperID
)T where InvoiceID<>'0000000000' and InvoiceID not like 'y%';
SELECT COALESCE(COUNT(distinct invoiceid),0) INTO v_ChargeInvoiceSum FROM (
SELECT a.InvoiceID FROM d_Detail_Account a inner join S_CHARGE_KIND b on a.SICKTYPEID=b.CHARGEKINDID WHERE b.ISNOTMEDINSURANCE<>'不打票' and a.INVOICEOPERATOR=OperID AND (a.INVOICEDATE >= STARTTIME AND a.INVOICEDATE < ENDTIME) and BALANCESTATE <> 0
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND (INVOICESTATE=1 or INVOICESTATE=3) AND OperatorID=OperID
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState =0 AND OperatorID=OperID
)T where InvoiceID<>'0000000000' and InvoiceID not like 'y%';
SELECT COALESCE(COUNT(distinct invoiceid),0) INTO v_RegInvoiceSum FROM (
SELECT InvoiceID AS INVOICEID FROM t_Register_Info WHERE INVOICEOPERATOR=OperID AND INVOICEDATE >= STARTTIME AND INVOICEDATE < ENDTIME and BALANCESTATE <> 0
UNION ALL
SELECT CurrentInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND (InvoiceState =0 or InvoiceState =4) AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND InvoiceState =0 AND OperatorID=OperID
)T where InvoiceID<>'0000000000' and InvoiceID not like 'y%';
End IF;
UPDATE SESSION_OPERATORMZJZ SET INVOICECOUNT=v_InvoiceSum,CHARGEINVOICESUM=v_ChargeInvoiceSum,REGINVOICESUM=v_RegInvoiceSum WHERE OPERATORID=OperID;
--获得发票号段
SELECT defaultValue INTO v_RegisterInvoiceType FROM T_SYSTEM_CONFIG where setcontent='挂号、门诊发票是否使用同一号段';
If v_RegisterMark = 0 Then
FOR InvoiceArea IN cur_3 LOOP
if v_PrintInvoiceConfig = '0' then
--门诊退费不打印负票--
Select COALESCE(Max(distinct InvoiceID),''),COALESCE(Min(distinct InvoiceID),'') Into v_TempMaxInvoiceID,v_TempMinInvoiceID From (
SELECT a.InvoiceID,a.OperateDate FROM d_Detail_Account a inner join S_CHARGE_KIND b on a.SICKTYPEID=b.CHARGEKINDID WHERE b.ISNOTMEDINSURANCE<>'不打票' and a.INVOICEOPERATOR=OperID AND a.INVOICEDATE >= STARTTIME AND a.INVOICEDATE < ENDTIME and a.CANCELMARK <> 2
UNION ALL
SELECT InvoiceID AS INVOICEID,OperateDate FROM t_Register_Info WHERE INVOICEOPERATOR=OperID AND INVOICEDATE >= STARTTIME AND INVOICEDATE < ENDTIME
UNION ALL
SELECT OldInvoice AS INVOICEID,OperateDate FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND InvoiceState =0 AND OperatorID=OperID
UNION ALL
SELECT CURRENTINVOICE AS INVOICEID,OperateDate FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND InvoiceState =0 AND OperatorID=OperID
)t
Where InvoiceID Between InvoiceArea.StartNumber And InvoiceArea.EndNumber and InvoiceID<>'0000000000' and InvoiceID not like 'y%';
else
--门诊退费打印负票--
Select COALESCE(Max(distinct InvoiceID),''),COALESCE(Min(distinct InvoiceID),'') Into v_TempMaxInvoiceID,v_TempMinInvoiceID From (
SELECT a.InvoiceID,a.OperateDate FROM d_Detail_Account a inner join S_CHARGE_KIND b on a.SICKTYPEID=b.CHARGEKINDID WHERE b.ISNOTMEDINSURANCE<>'不打票' and a.INVOICEOPERATOR=OperID AND (a.INVOICEDATE >= STARTTIME AND a.INVOICEDATE < ENDTIME)
UNION ALL
SELECT InvoiceID AS INVOICEID,OperateDate FROM t_Register_Info WHERE INVOICEOPERATOR=OperID AND (INVOICEDATE >= STARTTIME AND INVOICEDATE < ENDTIME)
UNION ALL
SELECT OldInvoice AS INVOICEID,OperateDate FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND InvoiceState =0 AND OperatorID=OperID
UNION ALL
SELECT CURRENTINVOICE AS INVOICEID,OperateDate FROM t_InvoiceUseDetail
WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='挂号发票' AND InvoiceState =0 AND OperatorID=OperID
)t
Where InvoiceID Between InvoiceArea.StartNumber And InvoiceArea.EndNumber and InvoiceID<>'0000000000' and InvoiceID not like 'y%';
End if;
If v_TempMaxInvoiceID != '' Then
If v_TempMinInvoiceID != '' Then
v_InvoiceArea := v_InvoiceArea||v_TempMinInvoiceID||'-'||v_TempMaxInvoiceID||',';
End If;
End If;
end loop;
END IF;
FOR InvoiceAreas IN cur_4 LOOP
if v_PrintInvoiceConfig = '0' then
--门诊退费不打印负票--
Select COALESCE(Max(distinct InvoiceID),''),COALESCE(Min(distinct InvoiceID),'') Into v_TempMaxInvoiceID,v_TempMinInvoiceID From (
SELECT a.InvoiceID,a.OperateDate FROM d_Detail_Account a inner join S_CHARGE_KIND b on a.SICKTYPEID=b.CHARGEKINDID WHERE b.ISNOTMEDINSURANCE<>'不打票' and a.INVOICEOPERATOR=OperID AND a.INVOICEDATE >= STARTTIME AND a.INVOICEDATE < ENDTIME and a.CANCELMARK <> 2
UNION ALL
SELECT OldInvoice AS INVOICEID,OperateDate FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState=1 AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID,OperateDate FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState =0 AND OperatorID=OperID
UNION ALL
SELECT CURRENTINVOICE AS INVOICEID,OperateDate FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState =0 AND OperatorID=OperID
)t
Where InvoiceID Between InvoiceAreas.StartNumber And InvoiceAreas.EndNumber and InvoiceID<>'0000000000' and InvoiceID not like 'y%';
else
--门诊退费打印负票--
Select COALESCE(Max(distinct InvoiceID),''),COALESCE(Min(distinct InvoiceID),'') Into v_TempMaxInvoiceID,v_TempMinInvoiceID From (
SELECT a.InvoiceID,a.OperateDate FROM d_Detail_Account a inner join S_CHARGE_KIND b on a.SICKTYPEID=b.CHARGEKINDID WHERE b.ISNOTMEDINSURANCE<>'不打票' and a.INVOICEOPERATOR=OperID AND (a.INVOICEDATE >= STARTTIME AND a.INVOICEDATE < ENDTIME)
UNION ALL
SELECT OldInvoice AS INVOICEID,OperateDate FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState=1 AND OperatorID=OperID
UNION ALL
SELECT OldInvoice AS INVOICEID,OperateDate FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState =0 AND OperatorID=OperID
UNION ALL
SELECT CURRENTINVOICE AS INVOICEID,OperateDate FROM t_InvoiceUseDetail WHERE OperateDate >= STARTTIME AND OperateDate < ENDTIME AND InvoiceType='门诊发票' AND InvoiceState =0 AND OperatorID=OperID
)t
Where InvoiceID Between InvoiceAreas.StartNumber And InvoiceAreas.EndNumber and InvoiceID<>'0000000000' and InvoiceID not like 'y%';
End if;
If v_TempMaxInvoiceID != '' Then
If v_TempMinInvoiceID != '' Then
v_InvoiceArea := v_InvoiceArea||v_TempMinInvoiceID||'-'||v_TempMaxInvoiceID||',';
End If;
End If;
end loop;
UPDATE SESSION_OPERATORMZJZ SET INVOICESEGMENT=v_InvoiceArea WHERE OPERATORID=OperID;
--获取挂号金额,获取诊金,获取工本费,获取挂号预约费,挂号检查费
SELECT sum(RegisterFee),sum(ExamineMoney),sum(BESPEAKMONEY),sum(CHECKFEE),sum(billmoney),sum(GHTC),SUM(GHZH)
into v_RegisterFee,v_ExamineMoney,v_BespeakMoney,v_CHECKFEE,v_CaseCost,v_GHTC,V_GHZH from (
SELECT COALESCE(SUM(A.RegisterFee),0) as RegisterFee,COALESCE(SUM(A.ExamineMoney),0) as ExamineMoney,COALESCE(SUM(A.BESPEAKMONEY),0) as BESPEAKMONEY,COALESCE(SUM(A.CHECKFEE),0) as CHECKFEE, COALESCE(SUM(A.CaseCost),0) as billmoney,COALESCE(SUM(A.DISCOUNTDEFRAY),0) as GHTC,COALESCE(SUM(A.ACCOUNTDEFRAY),0) as GHZH FROM t_Register_Info A WHERE A.BALANCEOPERATOR=OperID AND BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME
union all
SELECT 0 as RegisterFee,0 as ExamineMoney,0 as BESPEAKMONEY,0 as CHECKFEE,COALESCE(SUM(A.BILLFEE),0) as billmoney,0 as GHTC,0 as GHZH FROM d_Detail_Account A WHERE A.BALANCEOPERATOR=OperID AND BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME
) t;
UPDATE SESSION_OPERATORMZJZ SET REGISTERMONEY=v_RegisterFee,DIAGNOSISMONEY=v_ExamineMoney,BESPEAKMONEY=v_BespeakMoney,STUFFMONEY=v_CaseCost WHERE OPERATORID=OperID;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号检查费',v_CHECKFEE,v_CHECKFEE,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号统筹金额',v_GHTC,v_GHTC,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号账户金额',V_GHZH,V_GHZH,OperID);
--获取挂号退金额,获取退诊金,获取退工本费,获取挂号退预约费,挂号退检查费
select sum(RegisterFee),sum(ExamineMoney),sum(BESPEAKMONEY),sum(CHECKFEE),sum(billmoney),sum(GHTC),SUM(GHZH)
into v_RegisterFeeRefund,v_ExamineMoneyRefund,v_BespeakMoneyRefund,v_CHECKFEERefund,v_CaseCostRefund,v_GHTCRefund,v_GHZHRefund from (
SELECT COALESCE(SUM(A.RegisterFee),0) as RegisterFee,COALESCE(SUM(A.ExamineMoney),0) as ExamineMoney,COALESCE(SUM(A.BESPEAKMONEY),0) as BESPEAKMONEY,COALESCE(SUM(A.CHECKFEE),0) as CHECKFEE, COALESCE(SUM(A.CaseCost),0) as billmoney,COALESCE(SUM(A.DISCOUNTDEFRAY),0) as GHTC,COALESCE(SUM(A.ACCOUNTDEFRAY),0) as GHZH FROM t_Register_Info A WHERE A.BALANCEOPERATOR=OperID AND BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME and CANCELMARK = 2
union all
SELECT 0 as RegisterFee,0 as ExamineMoney,0 as BESPEAKMONEY,0 as CHECKFEE,COALESCE(SUM(A.BILLFEE),0) as billmoney,0 AS GHTC,0 AS GHZH FROM d_Detail_Account A WHERE A.BALANCEOPERATOR=OperID AND BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME and CANCELMARK = 2
) t;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号金额退费',v_RegisterFeeRefund,v_RegisterFeeRefund,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'诊金退费',v_ExamineMoneyRefund,v_ExamineMoneyRefund,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号预约费退费',v_BespeakMoneyRefund,v_BespeakMoneyRefund,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号检查费退费',v_CHECKFEERefund,v_CHECKFEERefund,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'工本费退费',v_CaseCostRefund,v_CaseCostRefund,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号退统筹',v_GHTCRefund,v_GHTCRefund,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'挂号退账户',v_GHZHRefund,v_GHZHRefund,OperID);
FOR ReportItem IN cur_5 LOOP
--获得该摘要的应收合计金额,获得该摘要的实收合计金额
SELECT COALESCE(SUM(b.Money),0) AS Money,COALESCE(SUM(b.SelfMoney),0) AS SelfMoney into v_SumMoney,v_SumSelfMoney FROM D_SUMMARY_INFO a, d_Detail_Account b,T_CLINICINVOICEITEM c WHERE b.BALANCEOPERATOR=OperID AND a.CLINICINVOICEID=c.INVOICEID and c.INVOICEITEM = ReportItem.ReportItem AND a.ItemID=b.ItemID AND b.BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME;
--获得该摘要的应收退费金额,获得该摘要的实收退费金额
SELECT COALESCE(SUM(b.Money),0) AS Money,COALESCE(SUM(b.SelfMoney),0) AS SelfMoney into v_ReturnMoney,v_ReturnSelfMoney FROM D_SUMMARY_INFO a, d_Detail_Account b,T_CLINICINVOICEITEM c WHERE b.BALANCEOPERATOR=OperID AND a.CLINICINVOICEID=c.INVOICEID and c.INVOICEITEM = ReportItem.ReportItem AND a.ItemID=b.ItemID AND (b.CancelMark=2 ) AND b.BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME;
--获得该摘要的挂账金额
SELECT COALESCE(sum(ACCOUNTDEFRAY),0)+COALESCE(sum(DISCOUNTDEFRAY),0) INTO v_HangMoney FROM D_SUMMARY_INFO a, d_Detail_Account b,S_CHARGE_KIND,T_CLINICINVOICEITEM c WHERE b.BALANCEOPERATOR=OperID AND a.CLINICINVOICEID=c.INVOICEID and c.INVOICEITEM = ReportItem.ReportItem AND a.ItemID=b.ItemID AND b.BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME and b.SICKTYPEID =S_CHARGE_KIND. CHARGEKINDID and (S_CHARGE_KIND.ISNOTMEDINSURANCE = '是' or S_CHARGE_KIND.ISNOTMEDINSURANCE = '不打票') and BALANCESTATE <> 0;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_SumMoney,INFACTMONEY=v_SumMoney
WHERE GATHERINGID=gatheringId AND ITEM = ReportItem.ReportItem||'应收' AND OPERATORID=OperID;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_ReturnMoney,INFACTMONEY=v_ReturnMoney
WHERE GATHERINGID=gatheringId AND ITEM = ReportItem.ReportItem||'应收退费' AND OPERATORID=OperID;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_SumSelfMoney,INFACTMONEY=v_SumSelfMoney
WHERE GATHERINGID=gatheringId AND ITEM = ReportItem.ReportItem||'实收' AND OPERATORID=OperID;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_ReturnSelfMoney,INFACTMONEY=v_ReturnSelfMoney
WHERE GATHERINGID=gatheringId AND ITEM = ReportItem.ReportItem||'实收退费' AND OPERATORID=OperID;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_HangMoney,INFACTMONEY=v_HangMoney
WHERE GATHERINGID=gatheringId AND ITEM = ReportItem.ReportItem||'挂账' AND OPERATORID=OperID;
end loop;
--获取银医直联卡中每项收费的金额
FOR CardTypes IN cur_2 LOOP
SELECT COALESCE(SUM(money),0) Money INTO v_BankCardMoney FROM D_CLINICBALANCE WHERE operatorid=OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME and BALANCEMODE=CardTypes.TYPE_NAME;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_BankCardMoney,INFACTMONEY=v_BankCardMoney
WHERE GATHERINGID=gatheringId AND ITEM=CardTypes.TYPE_NAME AND OPERATORID=OperID;
end loop;
--获取银医直联卡中每项收费的金额
--预交金收款金额
SELECT COALESCE(sum(addmoney),0) INTO v_Recharge FROM T_CARD_SAVING where BUSINESSTYPE = '充值' and OPERATOR = OperID and ADDMONEYDATE >= STARTTIME AND ADDMONEYDATE < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'预交金收款金额',v_Recharge,v_Recharge,OperID);
--住院转门诊预交金(对门诊是充值)
SELECT COALESCE(sum(addmoney),0) INTO v_RechargeInhos FROM T_CARD_SAVING where BUSINESSTYPE = '充值' and MODETYPE = '退住院预交金' and OPERATOR = OperID and ADDMONEYDATE >= STARTTIME AND ADDMONEYDATE < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'住院转门诊预交金',v_RechargeInhos,v_RechargeInhos,OperID);
--预交金退款金额
SELECT COALESCE(sum(addmoney),0) INTO v_RechargeReturn FROM T_CARD_SAVING where BUSINESSTYPE = '退款' and OPERATOR = OperID and ADDMONEYDATE >= STARTTIME AND ADDMONEYDATE < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'预交金退款金额',v_RechargeReturn,v_RechargeReturn,OperID);
--门诊转住院预交金(对门诊是退款)
SELECT COALESCE(sum(addmoney),0) INTO v_RechargeReturnInhos FROM T_CARD_SAVING where BUSINESSTYPE = '退款' and MODETYPE = '转住院预交金' and OPERATOR = OperID and ADDMONEYDATE >= STARTTIME AND ADDMONEYDATE < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'门诊转住院预交金',v_RechargeReturnInhos,v_RechargeReturnInhos,OperID);
--已结算退费金额
SELECT COALESCE(sum(addmoney),0) INTO v_BalanceReturnMoney FROM T_CARD_SAVING where BUSINESSTYPE = '退费' and OPERATOR = OperID and ADDMONEYDATE >= STARTTIME AND ADDMONEYDATE < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'已结算退费金额',v_BalanceReturnMoney,v_BalanceReturnMoney,OperID);
--实收现金
SELECT COALESCE(sum(money),0) INTO v_Cash FROM D_CLINICBALANCE WHERE operatorid = OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME and BALANCEMODE='现金';
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'实收现金',v_Cash,v_Cash,OperID);
SELECT COALESCE(sum(money),0) INTO v_YL FROM D_CLINICBALANCE WHERE operatorid=OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME and BALANCEMODE='银联卡';
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'银联卡支付',v_YL,v_YL,OperID);
SELECT COALESCE(sum(money),0) INTO v_YJJ FROM D_CLINICBALANCE WHERE operatorid=OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME and BALANCEMODE='预交金';
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'预交金支付',v_YJJ,v_YJJ,OperID);
SELECT COALESCE(sum(money),0) INTO v_ZP FROM D_CLINICBALANCE WHERE operatorid=OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME and BALANCEMODE='支票';
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'支票支付',v_ZP,v_ZP,OperID);
SELECT COALESCE(sum(money),0) INTO v_TCZF FROM D_CLINICBALANCE WHERE operatorid=OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME and BALANCEMODE='统筹支付';
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'统筹支付',v_TCZF,v_TCZF,OperID);
SELECT COALESCE(sum(money),0) INTO v_ZHZF FROM D_CLINICBALANCE WHERE operatorid=OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME and BALANCEMODE='账户支付';
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'账户支付',v_ZHZF,v_ZHZF,OperID);
SELECT COALESCE(sum(money),0) INTO v_NoPrintYJJ FROM D_CLINICBALANCE,S_CHARGE_KIND WHERE D_CLINICBALANCE.SICKTYPEID=S_CHARGE_KIND.CHARGEKINDID and S_CHARGE_KIND.ISNOTMEDINSURANCE='不打票' and D_CLINICBALANCE.operatorid=OperID AND D_CLINICBALANCE.operatedate >= STARTTIME AND D_CLINICBALANCE.operatedate < ENDTIME and D_CLINICBALANCE.BALANCEMODE='预交金';
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'不打票预交金',v_NoPrintYJJ,v_NoPrintYJJ,OperID);
FOR EchargeKind IN cur_1 LOOP
SELECT COALESCE(sum(money),0) INTO v_ChargeKindTCZF FROM D_CLINICBALANCE WHERE operatorid=OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME AND BALANCEMODE='统筹支付' AND SICKTYPEID = EchargeKind.CHARGEKINDID;
SELECT COALESCE(sum(money),0) INTO v_ChargeKindZHZF FROM D_CLINICBALANCE WHERE operatorid=OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME and BALANCEMODE='账户支付' AND SICKTYPEID = EchargeKind.CHARGEKINDID;
SELECT COALESCE(sum(money),0) INTO v_ChargeKindXJ FROM D_CLINICBALANCE WHERE operatorid=OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME AND BALANCEMODE='现金' and SICKTYPEID = EchargeKind.CHARGEKINDID;
SELECT COALESCE(sum(money),0) INTO v_ChargeKindYLK FROM D_CLINICBALANCE WHERE operatorid=OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME AND BALANCEMODE='银联卡' and SICKTYPEID = EchargeKind.CHARGEKINDID;
SELECT COALESCE(sum(money),0) INTO v_ChargeKindYJJ FROM D_CLINICBALANCE WHERE operatorid=OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME AND BALANCEMODE='预交金' and SICKTYPEID = EchargeKind.CHARGEKINDID;
SELECT COALESCE(sum(money),0) INTO v_ChargeKindZP FROM D_CLINICBALANCE WHERE operatorid=OperID AND operatedate >= STARTTIME AND operatedate < ENDTIME AND BALANCEMODE='支票' and SICKTYPEID = EchargeKind.CHARGEKINDID;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_ChargeKindTCZF,INFACTMONEY=v_ChargeKindTCZF
WHERE GATHERINGID=gatheringId AND ITEM = EchargeKind.CHARGEKINDID||'统筹支付' AND OPERATORID=OperID;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_ChargeKindZHZF,INFACTMONEY=v_ChargeKindZHZF
WHERE GATHERINGID=gatheringId AND ITEM = EchargeKind.CHARGEKINDID||'账户支付' AND OPERATORID=OperID;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_ChargeKindXJ,INFACTMONEY=v_ChargeKindXJ
WHERE GATHERINGID=gatheringId AND ITEM = EchargeKind.CHARGEKINDID||'现金' AND OPERATORID=OperID;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_ChargeKindYLK,INFACTMONEY=v_ChargeKindYLK
WHERE GATHERINGID=gatheringId AND ITEM = EchargeKind.CHARGEKINDID||'银联卡' AND OPERATORID=OperID;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_ChargeKindYJJ,INFACTMONEY=v_ChargeKindYJJ
WHERE GATHERINGID=gatheringId AND ITEM = EchargeKind.CHARGEKINDID||'预交金' AND OPERATORID=OperID;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_ChargeKindZP,INFACTMONEY=v_ChargeKindZP
WHERE GATHERINGID=gatheringId AND ITEM = EchargeKind.CHARGEKINDID||'支票' AND OPERATORID=OperID;
end loop;
--应收退费合计 ,实收退费合计
SELECT COALESCE(SUM(Money),0),COALESCE(SUM(SELFMONEY),0) into v_ReturnSumMoney,v_ReturnSumSelfMoney FROM d_Detail_Account b WHERE OPERATORID=OperID AND (b.CancelMark=2 ) AND OPERATEDATE >= STARTTIME AND OPERATEDATE < ENDTIME;
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'应收退费合计',v_ReturnSumMoney,v_ReturnSumMoney,OperID);
INSERT INTO SESSION_OPERATORMZJZMX(GATHERINGID,ITEM,PAYMENTMONEY,INFACTMONEY,OPERATORID) VALUES (gatheringId,'实收退费合计',v_ReturnSumSelfMoney,v_ReturnSumSelfMoney,OperID);
--应收合计
v_ReceivablesSum:=v_ReceivablesSum+v_RegisterFee+v_ExamineMoney+v_CaseCost + v_BespeakMoney + v_CHECKFEE;
UPDATE SESSION_OPERATORMZJZ SET PAYMENTMONEY=COALESCE(v_ReceivablesSum,0) WHERE OPERATORID=OperID;
--实收合计
v_RealIncomeSum:=v_RealIncomeSum+v_RegisterFee+v_ExamineMoney+v_CaseCost + v_BespeakMoney + v_CHECKFEE-v_GHTC-v_GHZH;
UPDATE SESSION_OPERATORMZJZ SET INFACTMONEY=COALESCE(v_RealIncomeSum,0) WHERE OPERATORID=OperID;
--挂帐合计
v_HangAccountSum:=v_ReceivablesSum-v_RealIncomeSum;
UPDATE SESSION_OPERATORMZJZ SET HANGMONEY=COALESCE(v_HangAccountSum,0) WHERE OPERATORID=OperID;
--POS应收金额
v_POSReceivables:=0;
UPDATE SESSION_OPERATORMZJZ SET POSPAYMENT=COALESCE(v_POSReceivables,0) WHERE OPERATORID=OperID;
--POS实收金额
v_POSRealIncome:=0;
UPDATE SESSION_OPERATORMZJZ SET POSMONEY=COALESCE(v_POSRealIncome,0) WHERE OPERATORID=OperID;
--POS挂帐金额
v_POSHangAccount:=0;
UPDATE SESSION_OPERATORMZJZ SET POSHANG=COALESCE(v_POSHangAccount,0) WHERE OPERATORID=OperID;
--附加费应收金额
v_OptionFeeReceivables:=0;
UPDATE SESSION_OPERATORMZJZ SET SUBJOINPAYMENT=COALESCE(v_OptionFeeReceivables,0) WHERE OPERATORID=OperID;
--附加费实收金额
v_OptionFeeRealIncome:=0;
UPDATE SESSION_OPERATORMZJZ SET SUBJOINMONEY=COALESCE(v_OptionFeeRealIncome,0) WHERE OPERATORID=OperID;
--附加费挂帐金额
v_OptionFeeHangAccount:=0;
UPDATE SESSION_OPERATORMZJZ SET SUBJOINHANG=COALESCE(v_OptionFeeHangAccount,0) WHERE OPERATORID=OperID;
--不打票应收,不打票实收
SELECT COALESCE(SUM(b.Money),0), COALESCE(SUM(b.SelfMoney),0) INTO v_NoPrintMoney,v_NoPrintSelfMoney
FROM D_SUMMARY_INFO a, d_Detail_Account b, S_CHARGE_KIND c WHERE b.BALANCEOPERATOR=OperID AND c.ISNOTMEDINSURANCE='不打票' AND a.ItemID=b.ItemID AND b.SICKTYPEID=c.CHARGEKINDID AND BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME;
UPDATE SESSION_OPERATORMZJZ SET NOPRINTMONEY=COALESCE(v_NoPrintMoney,0),NOPRINTSELFMONEY=COALESCE(v_NoPrintSelfMoney,0) WHERE OPERATORID=OperID;
--统筹挂账金额
select COALESCE(sum(DiscountDefray),0) INTO v_TCGZ
FROM d_Detail_Account,S_CHARGE_KIND
WHERE d_Detail_Account.SICKTYPEID =S_CHARGE_KIND. CHARGEKINDID and (S_CHARGE_KIND.ISNOTMEDINSURANCE = '是' or S_CHARGE_KIND.ISNOTMEDINSURANCE = '不打票') and BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME AND BALANCEOPERATOR=OperID;
UPDATE SESSION_OPERATORMZJZ SET PLANMONEY=COALESCE(v_TCGZ,0) WHERE OPERATORID=OperID;
--卡支付额
select COALESCE(sum(ACCOUNTDEFRAY),0) INTO v_CardMoney
FROM d_Detail_Account,S_CHARGE_KIND
WHERE d_Detail_Account.SICKTYPEID =S_CHARGE_KIND. CHARGEKINDID and BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME AND BALANCEOPERATOR=OperID;
UPDATE SESSION_OPERATORMZJZ SET CARDPAY=COALESCE(v_CardMoney,0) WHERE OPERATORID=OperID;
--优惠打折金额
select COALESCE(sum(DiscountDefray),0) INTO v_YHDZ
FROM d_Detail_Account,S_CHARGE_KIND
WHERE d_Detail_Account.SICKTYPEID =S_CHARGE_KIND. CHARGEKINDID and CHARGEKIND not like '%医%' and BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME AND BALANCEOPERATOR=OperID;
UPDATE SESSION_OPERATORMZJZ SET REBATEMONEY=COALESCE(v_YHDZ,0) WHERE OPERATORID=OperID;
--慢性病统筹
select COALESCE(sum(DiscountDefray),0) INTO v_MXBTC
FROM d_Detail_Account,S_CHARGE_KIND
WHERE d_Detail_Account.SICKTYPEID =S_CHARGE_KIND. CHARGEKINDID and CHARGEKIND like '%慢%' and BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME AND BALANCEOPERATOR=OperID;
UPDATE SESSION_OPERATORMZJZ SET CHRONICPLAN=COALESCE(v_MXBTC,0) WHERE OPERATORID=OperID;
FOR BalanceMode IN cur_6 LOOP
SELECT COALESCE(SUM(b.Money),0),COALESCE(SUM(b.SelfMoney),0) into v_BMsumMoney,v_BMselfMoney FROM d_Detail_Account b WHERE b.BALANCEOPERATOR=OperID and BALANCEMODE = BalanceMode.BALANCEMODE and BALANCEDATE >= STARTTIME AND BALANCEDATE < ENDTIME;
v_BMhangMoney := v_BMsumMoney - v_BMselfMoney;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_BMsumMoney,INFACTMONEY=v_BMsumMoney
WHERE GATHERINGID=gatheringId AND ITEM = BalanceMode.BALANCEMODE||'应收' AND OPERATORID=OperID;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_BMselfMoney,INFACTMONEY=v_BMselfMoney
WHERE GATHERINGID=gatheringId AND ITEM = BalanceMode.BALANCEMODE||'实收' AND OPERATORID=OperID;
UPDATE SESSION_OPERATORMZJZMX SET PAYMENTMONEY=v_BMhangMoney,INFACTMONEY=v_BMhangMoney
WHERE GATHERINGID=gatheringId AND ITEM = BalanceMode.BALANCEMODE||'挂账' AND OPERATORID=OperID;
end loop;
---集成第二个存储过程,插入发票使用明细表---------------------------------------
If v_RegisterMark = 0 Then
--统计挂号退票 `
INSERT INTO SESSION_OPERATORMZJZUSEDMX(ID,GATHERINGID,OPERATORID,OPERATETYPE,CURRENTINVOICE,QUONDAMINVOICE,SUMMARY,MONEY,ACTUALMONEY)
SELECT to_char(sysdate,'yyyymmddhh24mi')||TRUNC(100+900*dbms_random.value),gatheringId,T.OperatorID,'退票',T.CurrentInvoice,T.OldInvoice,'挂号费',COALESCE(SUM(R.RegisterFee+R.ExamineMoney+R.CaseCost),0),
COALESCE(SUM(R.RegisterFee+R.ExamineMoney+R.CaseCost),0) FROM t_InvoiceUseDetail T, t_Register_Info R
Where T.OperateDate >= STARTTIME AND T.OperateDate < ENDTIME AND T.OldInvoice=R.InvoiceID AND T.InvoiceState=2
AND T.InvoiceType=v_RegisterInvoiceType AND R.CancelMark=1 AND T.OperatorID=OperID GROUP BY T.CurrentInvoice,T.OldInvoice,T.OperatorID ORDER BY T.OperatorID,T.OldInvoice;
--统计挂号废票
INSERT INTO SESSION_OPERATORMZJZUSEDMX(ID,GATHERINGID,OPERATORID,OPERATETYPE,CURRENTINVOICE,QUONDAMINVOICE,SUMMARY,MONEY,ACTUALMONEY)
SELECT to_char(sysdate,'yyyymmddhh24mi')||TRUNC(100+900*dbms_random.value),gatheringId,T.OperatorID,'废票',T.CurrentInvoice,T.OldInvoice,'挂号费',COALESCE(SUM(R.RegisterFee+R.ExamineMoney+R.CaseCost),0),
COALESCE(SUM(R.RegisterFee+R.ExamineMoney+R.CaseCost),0) FROM t_InvoiceUseDetail T, t_Register_Info R
WHERE T.OperateDate >= STARTTIME AND T.OperateDate < ENDTIME AND T.OldInvoice=R.InvoiceID AND T.InvoiceState=3
AND T.InvoiceType=v_RegisterInvoiceType AND R.CancelMark=1 AND T.OperatorID=OperID GROUP BY T.CurrentInvoice,T.OldInvoice,T.OperatorID ORDER BY T.OperatorID,T.OldInvoice;
--统计挂号重打费票
INSERT INTO SESSION_OPERATORMZJZUSEDMX(ID,GATHERINGID,OPERATORID,OPERATETYPE,CURRENTINVOICE,QUONDAMINVOICE,SUMMARY,MONEY,ACTUALMONEY)
SELECT to_char(sysdate,'yyyymmddhh24mi')||TRUNC(100+900*dbms_random.value),gatheringId,T.OperatorID,'废票','' CurrentInvoice,T.OldInvoice,'挂号费',COALESCE(SUM(R.RegisterFee+R.ExamineMoney+R.CaseCost),0),
COALESCE(SUM(R.RegisterFee+R.ExamineMoney+R.CaseCost),0) FROM t_InvoiceUseDetail T, t_Register_Info R
WHERE T.OperateDate >= STARTTIME AND T.OperateDate < ENDTIME AND T.CurrentInvoice=R.InvoiceID AND T.InvoiceState=0
AND T.InvoiceType=v_RegisterInvoiceType AND R.CancelMark=0 AND T.OperatorID=OperID GROUP BY T.CurrentInvoice,T.OldInvoice,T.OperatorID ORDER BY T.OperatorID,T.OldInvoice;
--统计挂号重打
INSERT INTO SESSION_OPERATORMZJZUSEDMX(ID,GATHERINGID,OPERATORID,OPERATETYPE,CURRENTINVOICE,QUONDAMINVOICE,SUMMARY,MONEY,ACTUALMONEY)
SELECT to_char(sysdate,'yyyymmddhh24mi')||TRUNC(100+900*dbms_random.value),gatheringId,T.OperatorID,'重打',T.CurrentInvoice,T.OldInvoice,'挂号费',COALESCE(SUM(R.RegisterFee+R.ExamineMoney+R.CaseCost),0),
COALESCE(SUM(R.RegisterFee+R.ExamineMoney+R.CaseCost),0) FROM t_InvoiceUseDetail T, t_Register_Info R
WHERE T.OperateDate >= STARTTIME AND T.OperateDate < ENDTIME AND T.OldInvoice=R.InvoiceID AND T.InvoiceState=0
AND T.InvoiceType=v_RegisterInvoiceType AND R.CancelMark<>2 AND T.OperatorID=OperID GROUP BY T.CurrentInvoice,T.OldInvoice,T.OperatorID ORDER BY T.OperatorID,T.OldInvoice;
end if;
--统计正常收费的废票
--INSERT INTO SESSION_OPERATORMZJZUSEDMX(ID,GATHERINGID,OPERATORID,OPERATETYPE,CURRENTINVOICE,QUONDAMINVOICE,SUMMARY,MONEY,ACTUALMONEY)
--SELECT to_char(sysdate,'yyyymmddhh24mi')||TRUNC(100+900*dbms_random.value),gatheringId,T.OperatorID,'废票' 类型,T.CurrentInvoice,T.OldInvoice,B.Summary,Sum(D.SelfMoney) SelfMoney,Sum(D.Money) Money
--FROM t_InvoiceUseDetail T, d_Detail_Account D,D_SUMMARY_INFO B
--WHERE T.OperateDate >= STARTTIME AND T.OperateDate < ENDTIME AND T.OldInvoice=D.InvoiceID AND D.ItemID=B.ItemID
--AND T.InvoiceState=3 AND D.CancelMark=1 AND T.InvoiceType='门诊发票' AND T.OperatorID=OperID GROUP BY T.CurrentInvoice,T.OldInvoice,B.Summary,T.OperatorID ORDER BY T.OperatorID,T.OldInvoice;
INSERT INTO SESSION_OPERATORMZJZUSEDMX(ID,GATHERINGID,OPERATORID,OPERATETYPE,CURRENTINVOICE,QUONDAMINVOICE,SUMMARY,MONEY,ACTUALMONEY)
SELECT to_char(sysdate,'yyyymmddhh24mi')||TRUNC(100+900*dbms_random.value),gatheringId,T.OperatorID,'废票' 类型,T.CurrentInvoice,T.OldInvoice,B.Summary,Sum(D.SelfMoney) SelfMoney,Sum(D.Money) Money
FROM t_InvoiceUseDetail T left join d_Detail_Account D on T.CurrentInvoice=D.InvoiceID AND D.CancelMark=0 AND T.InvoiceType='门诊发票',D_SUMMARY_INFO B
WHERE T.OperateDate >= STARTTIME AND T.OperateDate < ENDTIME AND D.ItemID=B.ItemID
AND T.InvoiceState=0 AND T.OperatorID=OperID GROUP BY T.CurrentInvoice,T.OldInvoice,B.Summary,T.OperatorID ORDER BY OperatorID,OldInvoice;
--统计退票
INSERT INTO SESSION_OPERATORMZJZUSEDMX(ID,GATHERINGID,OPERATORID,OPERATETYPE,CURRENTINVOICE,QUONDAMINVOICE,SUMMARY,MONEY,ACTUALMONEY)
SELECT to_char(sysdate,'yyyymmddhh24mi')||TRUNC(100+900*dbms_random.value),gatheringId,T.OperatorID,'退票',T.CurrentInvoice,T.OldInvoice,B.Summary,Sum(D.SelfMoney),Sum(D.Money) Money
FROM t_InvoiceUseDetail T, d_Detail_Account D,D_SUMMARY_INFO B
WHERE T.OperateDate >= STARTTIME AND T.OperateDate < ENDTIME AND D.ItemID=B.ItemID
AND T.OldInvoice=D.InvoiceID AND T.InvoiceState=2 AND T.InvoiceType='门诊发票' AND D.CancelMark=1 AND T.OperatorID=OperID
GROUP BY T.CurrentInvoice,T.OldInvoice,B.Summary,T.OperatorID ORDER BY T.OperatorID,T.OldInvoice;
--统计未使用发票作废
INSERT INTO SESSION_OPERATORMZJZUSEDMX(ID,GATHERINGID,OPERATORID,OPERATETYPE,CURRENTINVOICE,QUONDAMINVOICE)
SELECT to_char(sysdate,'yyyymmddhh24mi')||TRUNC(100+900*dbms_random.value),gatheringId,T.OperatorID,'作废',T.CurrentInvoice,T.OldInvoice FROM t_InvoiceUseDetail T
WHERE T.OperateDate >= STARTTIME AND T.OperateDate < ENDTIME AND T.InvoiceType='门诊发票' AND T.InvoiceState=1
AND T.OperatorID=OperID GROUP BY T.CurrentInvoice,T.OldInvoice,T.OperatorID ORDER BY T.OperatorID,T.OldInvoice;
--统计发票重打
INSERT INTO SESSION_OPERATORMZJZUSEDMX(ID,GATHERINGID,OPERATORID,OPERATETYPE,CURRENTINVOICE,QUONDAMINVOICE,SUMMARY,MONEY,ACTUALMONEY)
SELECT to_char(sysdate,'yyyymmddhh24mi')||TRUNC(100+900*dbms_random.value),gatheringId,T.OperatorID,'重打',T.CurrentInvoice,T.OldInvoice,B.Summary,Sum(D.SelfMoney),Sum(D.Money) Money
FROM t_InvoiceUseDetail T, d_Detail_Account D,D_SUMMARY_INFO B
WHERE T.OperateDate >= STARTTIME AND T.OperateDate < ENDTIME AND (D.CancelMark=0 OR D.CancelMark=1) AND D.ItemID=B.ItemID
AND T.OldInvoice=D.InvoiceID AND T.INVOICESTATE=0 AND T.InvoiceType='门诊发票' AND T.OperatorID=OperID
GROUP BY T.CurrentInvoice,T.OldInvoice,B.Summary,T.OperatorID ORDER BY T.OperatorID,T.CurrentInvoice,T.OldInvoice;
IF(ispreview=1) THEN
--报账单总表
INSERT INTO D_GATHERING_MASTER SELECT * FROM SESSION_OPERATORMZJZ WHERE GATHERINGID =v_gatheringId AND OPERATORID=OperID;
--报账单明细
INSERT INTO D_GATHERING_DETAIL SELECT * FROM SESSION_OPERATORMZJZMX WHERE GATHERINGID =v_gatheringId AND OPERATORID=OperID;
--报账单发票明细
INSERT INTO D_GATHERING_INVOICEUSEDETAIL SELECT * FROM SESSION_OPERATORMZJZUSEDMX WHERE GATHERINGID =v_gatheringId AND OPERATORID=OperID;
--结账区间
INSERT INTO SAIPADMIN.T_RECKONACCOUNTS_TIME(OPERATORID,STARTTIME,ENDTIME,RECKONACCOUNTSTYPE,ACCOUNTMARK,PHARMACYBALANCETIME,SETTLEOPERATORID,SETTLEID) VALUES (OperID,StartTime,EndTime,'门诊',0,SYSDATE,seitleoperatorId,v_gatheringId);
END IF ;
err := 0;
end PH_FinancingReport;
2、db2语法
--存储过程名称
CREATE PROCEDURE PH_table
(
--定义传入的参数
cs1 VARCHAR2(200), --参数1 **区别
cs2 TIMESTAMP, --参数2
cs3 INT --参数3
)
CREATE PROCEDURE ph_MC_ZDPD
DYNAMIC RESULT SETS 1
LANGUAGE SQL
P1: BEGIN
--定义最后一次盘点时间
DECLARE v_INVENTORYDATE TIMESTAMP;
--上次库存调整是否完成的行数
DECLARE v_HangShu INT;
--有数据但是未审核的行数
DECLARE v_SL INT;
--科室名称
DECLARE v_office varchar(50);
--科室类型
DECLARE v_officetype varchar(10);
--现在时间
DECLARE datenow TIMESTAMP;
SET datenow=current TIMESTAMP;
FOR rec AS SELECT DISTINCT A.DRUGSTOREID OFFICEID FROM T_COUNT_STORAGE A,T_OFFICE B WHERE A.DRUGSTOREID=B.OFFICEID AND LEECHDOMNO LIKE '04%' AND AMOUNT >0 UNION ALL SELECT DISTINCT PHARMACYID OFFICEID FROM T_MEDIC_STORAGE A,T_OFFICE B WHERE A.PHARMACYID=B.OFFICEID AND B.OFFICETYPE='库房'
DO
--科室名称
SET v_office=(SELECT OFFICEID FROM T_OFFICE C WHERE C.OFFICEID=rec.OFFICEID );
--科室类型
SET v_officetype=(SELECT OFFICETYPE FROM T_OFFICE C WHERE C.OFFICEID=rec.OFFICEID );
--获取最后一次盘点数据的盘点时间
SET v_INVENTORYDATE = (SELECT MAX(INVENTORYDATE) FROM MC_STORAGEINVENTORY WHERE INVENTORYDEPTID=rec.OFFICEID);
--判断上次库存调整是否完成
SET v_HangShu = (select count(*) from MC_STORAGEINVENTORY where MINUSVALUE<>0 and ADJUSTMARK=1 and INVENTORYDEPTID =rec.OFFICEID and INVENTORYDATE BETWEEN v_INVENTORYDATE AND v_INVENTORYDATE);
IF v_HangShu=0 THEN
-- 有数据但是未审核的行数
SET v_SL= (SELECT COUNT(*) FROM MC_STORAGEINVENTORY WHERE (ADJUSTMARK=0 or ADJUSTMARK=3) AND INVENTORYDEPTID=rec.OFFICEID AND INVENTORYDATE=v_INVENTORYDATE);
IF v_SL >0 THEN
--删除未审核的数据
DELETE FROM MC_STORAGEINVENTORY WHERE INVENTORYDEPTID=rec.OFFICEID AND INVENTORYDATE=v_INVENTORYDATE AND (ADJUSTMARK=0 or ADJUSTMARK=3);
END IF;
--插入盘点数据
IF v_officetype='库房' THEN
INSERT INTO MC_STORAGEINVENTORY (ID, INVENTORYDATE, INVENTORYDEPTID, LEECHDOMNO, BATCHSERIAL, BUYPRICE,WHOLESALEPRICE,RETAILPRICE, EXISTINGSTORAGE,FACTSTORAGE,PUTPLACE,
OPERATORID, AUDITINGPERSONID, MINUSVALUE, ADJUSTMARK, SUMMARK, REMARK, NOTSENDSTORAGE, NOTSENDBUYMONEY, NOTSENDRETAILMONEY)
SELECT ROW_NUMBER() over(order by A.LEECHDOMNO) ID,
datenow INVENTORYDATE,
rec.OFFICEID INVENTORYDEPTID,
A.LEECHDOMNO LEECHDOMNO,
'' BATCHSERIAL,
B.BUYPRICE BUYPRICE,
B.WHOLESALEPRICE WHOLESALEPRICE,
B.RETAILPRICE RETAILPRICE,
SUM(A.AMOUNT) AS EXISTINGSTORAGE,
SUM(A.AMOUNT) AS FACTSTORAGE,
A.PUTPLACE PUTPLACE,
'自动盘点' OPERATORID,
'0634' AUDITINGPERSONID,
'0' MINUSVALUE,
'1' ADJUSTMARK, --0:未审核 1:已审核 2:已调整 3 已录入
'0' SUMMARK,
'' REMARK,
NULL NOTSENDSTORAGE,
NULL NOTSENDBUYMONEY,
NULL NOTSENDRETAILMONEY
FROM T_MEDIC_STORAGE A, (SELECT CURRENCYNAME, LEECHDOMCHEMNAME, STROKENO, LEECHDOMCLASS, LEECHDOMUSE
, RECIPEHEADSHIP, DOSAGETYPE, TOXICITY, EXPLAIN, ARCHIVESTIME
, STOPTIME, LEECHDOMALIAS, CHARACTER, FUNCTIONSORT, DRUGTRUTHACTION
, FITDISEASE, TABU, ADVERT, RECIPROCITY, BADNESSFEEDBACK
, STORAGE, LEECHDOMDETAILNO AS LEECHDOMNO, SPECS, PACK, UNIT
, DOSAGEUNIT, CHANGERATIO, BARCODE, GMP, PRODUCTAREA
, RATIFYNO, REGISTERBRAND, OUTPATIENTUNIT, INHOSPITALUNIT, WORTH
, SOURCE, BUYPRICE, MEDICARETYPE, BID, RATIO
, WHOLESALEPRICE, USAGEDOSAGE, ENHANCERATIO, RETAILPRICE, BATCHCALCULATE
, TRADENAME AS LEECHDOMNAME, T_CODEX_DETAIL.SPELLNO, T_CODEX_DETAIL.ALIASNO, T_CODEX_DETAIL.CUSTOMNO, T_CODEX.SPELLNO AS CODENO
FROM T_CODEX, T_CODEX_DETAIL
WHERE T_CODEX.LEECHDOMNO = T_CODEX_DETAIL.LEECHDOMNO
) B, T_OFFICE C
WHERE A.LEECHDOMNO = B.LEECHDOMNO
AND A.PHARMACYID = C.OFFICEID
AND A.PHARMACYID = rec.OFFICEID
GROUP BY A.LEECHDOMNO, A.PHARMACYID, A.PUTPLACE, B.LEECHDOMNAME, B.CURRENCYNAME, B.SPECS, B.PACK, B.UNIT, B.PRODUCTAREA,
B.CHANGERATIO, B.BUYPRICE, B.WHOLESALEPRICE, B.RETAILPRICE, C.OFFICE;
ELSE
INSERT INTO MC_STORAGEINVENTORY (ID, INVENTORYDATE, INVENTORYDEPTID, LEECHDOMNO, BATCHSERIAL, BUYPRICE,WHOLESALEPRICE,RETAILPRICE, EXISTINGSTORAGE,FACTSTORAGE,PUTPLACE,
OPERATORID, AUDITINGPERSONID, MINUSVALUE, ADJUSTMARK, SUMMARK, REMARK, NOTSENDSTORAGE, NOTSENDBUYMONEY, NOTSENDRETAILMONEY)
SELECT
ROW_NUMBER() over(order by A.LEECHDOMNO) ID,
datenow INVENTORYDATE,
rec.OFFICEID INVENTORYDEPTID,
A.LEECHDOMNO LEECHDOMNO,
'' BATCHSERIAL,
B.BUYPRICE BUYPRICE,
B.WHOLESALEPRICE WHOLESALEPRICE,
B.RETAILPRICE RETAILPRICE,
A.AMOUNT AS EXISTINGSTORAGE,
A.AMOUNT AS FACTSTORAGE,
A.PUTPLACE PUTPLACE,
'自动盘点' OPERATORID,
'0634' AUDITINGPERSONID,
'0' MINUSVALUE,
'1' ADJUSTMARK, --0:未审核 1:已审核 2:已调整 3 已录入
'0' SUMMARK,
'' REMARK,
NULL NOTSENDSTORAGE,
NULL NOTSENDBUYMONEY,
NULL NOTSENDRETAILMONEY
FROM T_COUNT_STORAGE A, (SELECT CURRENCYNAME, LEECHDOMCHEMNAME, STROKENO, LEECHDOMCLASS, LEECHDOMUSE
, RECIPEHEADSHIP, DOSAGETYPE, TOXICITY, EXPLAIN, ARCHIVESTIME
, STOPTIME, LEECHDOMALIAS, CHARACTER, FUNCTIONSORT, DRUGTRUTHACTION
, FITDISEASE, TABU, ADVERT, RECIPROCITY, BADNESSFEEDBACK
, STORAGE, LEECHDOMDETAILNO AS LEECHDOMNO, SPECS, PACK, UNIT
, DOSAGEUNIT, CHANGERATIO, BARCODE, GMP, PRODUCTAREA
, RATIFYNO, REGISTERBRAND, OUTPATIENTUNIT, INHOSPITALUNIT, WORTH
, SOURCE, BUYPRICE, MEDICARETYPE, BID, RATIO
, WHOLESALEPRICE, USAGEDOSAGE, ENHANCERATIO, RETAILPRICE, BATCHCALCULATE
, TRADENAME AS LEECHDOMNAME, T_CODEX_DETAIL.SPELLNO, T_CODEX_DETAIL.ALIASNO, T_CODEX_DETAIL.CUSTOMNO, T_CODEX.SPELLNO AS CODENO
FROM T_CODEX, T_CODEX_DETAIL
WHERE T_CODEX.LEECHDOMNO = T_CODEX_DETAIL.LEECHDOMNO
AND T_CODEX.LEECHDOMNO LIKE '04%'
) B, T_OFFICE C
WHERE A.LEECHDOMNO = B.LEECHDOMNO
AND A.DRUGSTOREID = C.OFFICEID
AND A.DRUGSTOREID =rec.OFFICEID;
END IF;
END IF;
END FOR;
END;
posted on 2018-11-01 15:51 AbelAngelo 阅读(297) 评论(0) 收藏 举报
浙公网安备 33010602011771号