CREATE OR REPLACE Package Xxmm_Move_Order_Print As

/*每页中允许的最大记录数*/
    Page_Max_Rowcount Constant Number := 7;

Cursor c_Lines_List(p_Id Number) Is
        Select b.Segment1 Item_Name,
                     b.Description,
                     b.Primary_Unit_Of_Measure Uom,
                     decode(l.back, 'N', '前段', 'Y', '后段', 'S', '共享', '') back,
                     l.Subinventory,
                     l.Required_Qty,
                     l.Issued_Qty,
                     l.Tool_Id,
                     l.Remark
            From Xxmm_Inv_Transaction_Lines l, Mtl_System_Items_b b
         Where l.Organization_Id = b.Organization_Id
             And l.Item_Id = b.Inventory_Item_Id
             And l.Inv_Header_Id = p_Id;

v_Organization_Id       Number;
    v_Inv_Header_Id         Number;
    v_Req_Num               Varchar2(32);
    v_Cancelled_Flag        Varchar2(1);
    v_Transaction_Type      Varchar2(32);
    v_Transaction_Type_Name Varchar2(128);
    v_Req_Date              Varchar2(32);
    v_Requestor_Name        Varchar2(128);
    v_Req_Section           Varchar2(512);
    v_Cost_Center           Varchar2(32);
    v_Vendor_Name           Varchar2(512);
    v_Move_Order_Type       Varchar2(1);
    v_Rownum                Number := 0;
    v_Rowcount              Number := 0;
    v_Req_Sum               Number := 0;

v_Err_Msg Varchar2(1024);
    v_Self_Exception Exception;

Procedure Print(Inv_Header_Id In Varchar2);

Procedure Html_Table_Head;

Procedure Html_Table_Lines_Head;

Procedure Html_Lines_Req_Sum;

Procedure Html_Lines_Foot(p_Page Varchar2);

Procedure Html_Style;

Procedure Html_Table_Open(p_Page Varchar2);

Procedure Html_Table_Close;

Procedure Html_Page_Break;

Procedure Insert_Break_Line(p_Page Varchar2);

Function Get_Record_Count(p_Id Number) Return Number;

End Xxmm_Move_Order_Print;

CREATE OR REPLACE Package Body Xxmm_Move_Order_Print As

Procedure Print(Inv_Header_Id In Varchar2) Is
    Begin
        Begin
            Select To_Number(Inv_Header_Id) Into v_Inv_Header_Id From Dual;
        Exception
            When Others Then
                If Sqlcode = '-1722' Then
                    v_Err_Msg := '传入的参数不是数字型字符串!';
                
                    Raise v_Self_Exception;
                Else
                    v_Err_Msg := '在传入的参数是否为数字型字符串时出现异常(' || Sqlerrm || ' )!';
               
                    Raise v_Self_Exception;
                End If;
        End;
   
        Begin
            Select h.Organization_Id,
                         h.Req_Num,
                         h.Transaction_Type,
                         To_Char(h.Creation_Date, 'YYYY/MM/DD') Req_Date,
                         h.Byd_Requestor_Name Requestor_Name,
                         h.Req_Section Requestor_Section,
                         h.Cost_Center,
                         x.Vendor_Name,
                         h.Cancelled_Flag
                Into v_Organization_Id,
                         v_Req_Num,
                         v_Transaction_Type,
                         v_Req_Date,
                         v_Requestor_Name,
                         v_Req_Section,
                         v_Cost_Center,
                         v_Vendor_Name,
                         v_Cancelled_Flag
                From Xxmm_Inv_Transaction_Headers h,
                         (Select Pvs.Org_Id,
                                         Pv.Vendor_Id,
                                         Pv.Vendor_Name,
                                         Pvs.Vendor_Site_Id
                                From Po_Vendor_Sites_All Pvs, Po_Vendors Pv
                             Where Pvs.Vendor_Id = Pv.Vendor_Id) x
             Where h.Org_Id = x.Org_Id(+)
                 And h.Vendor_Id = x.Vendor_Id(+)
                 And h.Vendor_Site_Id = x.Vendor_Site_Id(+)
                 And h.Inv_Header_Id = v_Inv_Header_Id;
        Exception
            When No_Data_Found Then
                v_Err_Msg := '没有找到对应的数据,请确认输入的参数的值是否正确!';
           
                Raise v_Self_Exception;
            When Others Then
                v_Err_Msg := '在查找对应的Header数据时出现异常(' || Sqlerrm || ' )!';
           
                Raise v_Self_Exception;
        End;
   
        /*Transaction_Action_Id =1,表示Issue from stores,即领料,=27,表示Receipt into stores,即缴库*/
        Begin
            Select Decode(Mtt.Transaction_Action_Id, 1, 'I', 27, 'R', Null) Move_Order_Type,
                         Mtt.Transaction_Type_Name
                Into v_Move_Order_Type, v_Transaction_Type_Name
                From Mtl_Transaction_Types Mtt
             Where Mtt.Attribute1 = v_Transaction_Type
                 And Trunc(Nvl(Mtt.Disable_Date, Sysdate + 1)) > Trunc(Sysdate);
        Exception
            When Too_Many_Rows Then
                v_Err_Msg := '该Transaction Type同时存在多笔生效记录。';
           
                Raise v_Self_Exception;
            When Others Then
                v_Err_Msg := '在查询User Define Transaction Type时出现异常(' || Sqlerrm || ')';
           
                Raise v_Self_Exception;
        End;
   
        If v_Cancelled_Flag = 'Y' Then
            v_Err_Msg := '该笔交易已经取消,则不能打印。';
       
            Raise v_Self_Exception;
        End If;
   
        /*取得记录数*/
        v_Rowcount := Get_Record_Count(v_Inv_Header_Id);
   
        Htp.Htmlopen;
        Htp.Headopen;
        Htp.p('');
        Htp.Title(v_Transaction_Type_Name || '单 -- ' || v_Req_Num);
        Html_Style;
        Htp.Headclose;
        Htp.Bodyopen;
   
        If v_Rowcount <= Page_Max_Rowcount Then
            Html_Table_Open('1');
            Html_Table_Head; /*输出Html Header*/
            Html_Table_Lines_Head; /*输出Lines Header*/
            /*循环输出Lines*/
            For Rec In c_Lines_List(v_Inv_Header_Id) Loop
                Htp.p('');
                Htp.p('' || Rec.Item_Name || '');
                Htp.p('' || Rec.Description || '');
                Htp.p('' || Rec.Uom || '');
                Htp.p('' || Rec.back || '');
                Htp.p('' || Rec.Subinventory || '');
                Htp.p('' || Rec.Required_Qty || '');
                Htp.p('' || Rec.Issued_Qty || '');
                Htp.p('' || Rec.Tool_Id || '');
                Htp.p('' || Rec.Remark || '');
                Htp.p('');
           
                v_Req_Sum := v_Req_Sum + Rec.Required_Qty;
            End Loop;
            --Html_Lines_Req_Sum;
            Html_Table_Close;
            Html_Table_Open('1');
            Insert_Break_Line('1');
            Html_Lines_Req_Sum;
            Html_Table_Close;
            Html_Table_Open('1');
            Html_Lines_Foot('1');
            Html_Table_Close;
       
            Html_Table_Open('2');
            Html_Table_Head; /*输出Html Header*/
            Html_Table_Lines_Head; /*输出Lines Header*/
            /*循环输出Lines*/
            For Rec In c_Lines_List(v_Inv_Header_Id) Loop
                Htp.p('');
                Htp.p('' || Rec.Item_Name || '');
                Htp.p('' || Rec.Description || '');
                Htp.p('' || Rec.Uom || '');
                Htp.p('' || Rec.back || '');
                Htp.p('' || Rec.Subinventory || '');
                Htp.p('' || Rec.Required_Qty || '');
                Htp.p('' || Rec.Issued_Qty || '');
                Htp.p('' || Rec.Tool_Id || '');
                Htp.p('' || Rec.Remark || '');
                Htp.p('');
            End Loop;
            --Html_Lines_Req_Sum;
            Html_Table_Close;
            Html_Table_Open('2');
            Insert_Break_Line('2');
            Html_Lines_Req_Sum;
            Html_Table_Close;
            Html_Table_Open('2');
            Html_Lines_Foot('2');
            Html_Table_Close;
        Else
            /*当Lines中的行数超过规定的最大行数,则一式两份*/
            Html_Table_Open('1');
            Html_Table_Head; /*输出Html Header*/
            For Rec In c_Lines_List(v_Inv_Header_Id) Loop
                If Mod(v_Rownum, Page_Max_Rowcount * 2) = 0 Then
                    Html_Table_Lines_Head; /*输出Lines Header*/
                End If;
           
                Htp.p('');
                Htp.p('' || Rec.Item_Name || '');
                Htp.p('' || Rec.Description || '');
                Htp.p('' || Rec.Uom || '');
                Htp.p('' || Rec.back || '');
                Htp.p('' || Rec.Subinventory || '');
                Htp.p('' || Rec.Required_Qty || '');
                Htp.p('' || Rec.Issued_Qty || '');
                Htp.p('' || Rec.Tool_Id || '');
                Htp.p('' || Rec.Remark || '');
                Htp.p('');
           
                v_Rownum  := v_Rownum + 1;
                v_Req_Sum := v_Req_Sum + Rec.Required_Qty;
            End Loop;
            v_Rownum := 0;
            Html_Lines_Req_Sum;
            Html_Lines_Foot('1');
            Html_Table_Close;
            Html_Table_Open('1');
            Html_Table_Close;
       
            Html_Page_Break;
       
            Html_Table_Open('2');
            Html_Table_Head; /*输出Html Header*/
            For Rec In c_Lines_List(v_Inv_Header_Id) Loop
                If Mod(v_Rownum, Page_Max_Rowcount * 2) = 0 Then
                    Html_Table_Lines_Head; /*输出Lines Header*/
                End If;
           
                Htp.p('');
                Htp.p('' || Rec.Item_Name || '');
                Htp.p('' || Rec.Description || '');
                Htp.p('' || Rec.Uom || '');
                Htp.p('' || Rec.back || '');
                Htp.p('' || Rec.Subinventory || '');
                Htp.p('' || Rec.Required_Qty || '');
                Htp.p('' || Rec.Issued_Qty || '');
                Htp.p('' || Rec.Tool_Id || '');
                Htp.p('' || Rec.Remark || '');
                Htp.p('');
           
                v_Rownum := v_Rownum + 1;
            End Loop;
            v_Rownum := 0;
            Html_Lines_Req_Sum;
            Html_Table_Close;
            Html_Table_Open('2');
            Html_Lines_Foot('2');
            Html_Table_Close;
        End If;
   
        Htp.Bodyclose;
        Htp.Htmlclose;
    Exception
        When v_Self_Exception Then
            Htp.p(v_Err_Msg);
        When Others Then
            Htp.p(Sqlerrm);
    End;

Procedure Html_Table_Head Is
    Begin
        Htp.p('');
        Htp.p('');
        Htp.p('' ||
                    v_Transaction_Type_Name || '单');
        Htp.p('');
   
        Htp.p('');
        Htp.p('申请日期:' || v_Req_Date || '');
        Htp.p('领料单号:' || v_Req_Num || '');
        Htp.p('');
        Htp.p('');
        Htp.p('申  请  人:' ||
                    v_Requestor_Name || '');
        Htp.p('生产厂商:' || v_Vendor_Name || '');
        Htp.p('');
        Htp.p('');
        Htp.p('领料科室:' || v_Req_Section || '');
        Htp.p('发料部门:' || '2200' || '');
        Htp.p('');
        Htp.p('');
        Htp.p('成本中心:' || v_Cost_Center || '');
        Htp.p('');
        Htp.p('');
    End;

Procedure Html_Table_Lines_Head Is
    Begin
        Htp.p('');
        Htp.p('料号');
        Htp.p('物料描述');
        Htp.p('单位');
        Htp.p('前后段');
        Htp.p('仓库');
        Htp.p('申请数量');
        Htp.p('发料数量');
        Htp.p('Tool ID');
        Htp.p('备注');
        Htp.p('');
    End;

Procedure Html_Lines_Req_Sum Is
    Begin
        Htp.p('');
        Htp.p('合计:');
        Htp.p('' || To_Char(v_Req_Sum) || '');
        Htp.p('');
    End;

Procedure Html_Lines_Foot(p_Page Varchar2) Is
    Begin
        Htp.p('');
        Htp.p('');
        Htp.p('申请人:___________');
        Htp.p('领料部门主管:___________');
        Htp.p('物控人员:___________');
        Htp.p('发料人:___________');
        Htp.p('');
        Htp.p('');
        Htp.p('');
   
        If p_Page = '1' Then
            Htp.p('第一联');
        Elsif p_Page = '2' Then
            Htp.p('第二联');
        End If;
        Htp.p('');
        Htp.p('');
        IF v_Move_Order_Type = 'I' Then
            Htp.p('FM-WIK11-M-0010NB-02B');
        Else
            Htp.p('FM-WIK11-M-0010NB-10A');
        End IF;
        Htp.p('');
    End;

Procedure Html_Style. Is
    Begin
        Htp.p('
#ejiaA1 {
    width: 750px;
    border="0";
    border-color:#E3E3E3;  /*#9FD6FF;*/
    background-color:#fff;
    border-width: 1px;
    border-style. solid;
    border-collapse: collapse;
    font-family:Arial, Helvetica, sans-serif;
}
#ejiaA1 th {
    PADDING-TOP: 5px;
    border="0";
    PADDING-BOTTOM: 5px;
    border-right: #E3E3E3 1px solid;
    border-bottom: #E3E3E3 1px solid;
    font-size:13px;
    height:20px;
    line-height:16px;
}
#ejiaA1 td {
    PADDING-TOP: 5px;
    border="0";
    PADDING-BOTTOM: 5px;
    border-right: #E3E3E3 1px solid;
    border-bottom: #E3E3E3 1px solid;
    font-size: 12px;
    color: #000000;
    height: 20px;
    line-height: 11px;
    text-align: left  /*表格中的字居中*/
}
');
   
        Htp.p('
#ejiaA2 {
    width: 750px;
    border-color:#E3E3E3;  /*#9FD6FF;*/
    background-color:#fff;
    border-width: 1px;
    border-style. solid;
    border-collapse: collapse;
    font-family:Arial, Helvetica, sans-serif;
}
#ejiaA2 th {
    PADDING-TOP: 5px;
    PADDING-BOTTOM: 5px;
    border-right: #E3E3E3 1px solid;
    border-bottom: #E3E3E3 1px solid;
    font-size:13px;
    height:20px;
    line-height:16px;
}
#ejiaA2 td {
    PADDING-TOP: 5px;
    PADDING-BOTTOM: 5px;
    border-right: #E3E3E3 1px solid;
    border-bottom: #E3E3E3 1px solid;
    font-size: 12px;
    color: #000000;
    height: 20px;
    line-height: 11px;
    text-align: left  /*表格中的字居中*/
}
');
   
    End;

Procedure Html_Table_Open(p_Page Varchar2) Is
    Begin
        Htp.p('');
    End;

Procedure Html_Page_Break Is
    Begin
        Htp.p('');
    End;

Procedure Insert_Break_Line(p_Page Varchar2) Is
    Begin
        Htp.p('');
    End;

Function Get_Record_Count(p_Id Number) Return Number Is
        v_Count Number := 0;
    Begin
        Select Count(1)
            Into v_Count
            From Xxmm_Inv_Transaction_Lines l
         Where l.Inv_Header_Id = p_Id;
   
        Return v_Count;
    End;
End;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11759632/viewspace-722299/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11759632/viewspace-722299/

最新文章

  1. python函数的使用场景_Python——异常(内置异常以及应用场景)
  2. fortran的bug:Fortran runtime error: Unit number in I/O statement too large
  3. ant-design-vue 快速入手及常用标签
  4. 垃圾回收算法与实现系列-JVM无锁实现
  5. python画简便的图-python的pyecharts绘制各种图表详细(附代码)
  6. The General Framework Of Signal ProcessingOTFS Modulation Scheme(信号处理的一般框架OTFS调制)(4)
  7. 计算机一级在线考试软件,全国计算机等级考试一级MS OFFICE练习软件
  8. 前端-深克隆与浅克隆
  9. 广告算法,反作弊,机器学习研发工程师
  10. Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux,支持32与64位,支持各种流行编程语言的语法高亮、代码补全等...
  11. Android简单的计步器应用实现
  12. 今日头条推荐算法原理全文详解之一
  13. linux中shell脚本批处理命令
  14. 挫败、迷茫、无聊时值得一看的“有点励志的故事和语录”
  15. Retrofit(一)
  16. 抑制细胞代谢紊乱的抑制剂
  17. java操作linux命令,调用ffmpeg转码视频
  18. [推荐]全球最牛杀毒软件----MCAFEE8.5i最新版下载!
  19. [NC18386]字符串
  20. 上海有哪些IT互联网大厂(2020年版)

热门文章

  1. node2vec文献出处_图表示学习入门2——Node2Vec
  2. iWebOffice2015入门(二)
  3. linux卸载apache服务器,centos 7 安装卸载apache(httpd)服务的详细步骤
  4. kettle下载安装和连接
  5. python贝叶斯网络预测模型_高效灵活的概率建模方法基于Python
  6. 为什么要玩FLTK(Fast Light Tool Kit)
  7. react好租客项目Day11-发布房源模块(js输入框防抖图片上传)项目打包项目优化(按需加载路由代码分割)
  8. 阿里云云大使经验分享:老司机9招带你玩转云大使推广
  9. 杨辉三角 Python(简单易懂)
  10. 代码制作数字流星雨_js代码实现流星雨