ERP打印入库单(四十)

需求描述:
此购进单的基本信息,购进单位,入库单位,入库时间……
此购进单批号,产品名称,生产企业,等基本信息。
实现能够循环加载打印。
本单金额小计,整单金额合计计算。
技术需求:
界面设计,循环加载数据
实现函数:根据产品编号查询产品生产企业
实现函数:根据产品查询产品规格
实现函数:根据产品查询产品单位
实现金额数字转换大写

金额大小写转换的类:

namespace CommTool
{
    /// <summary>
    /// 字符串处理相关

    /// </summary>
    public class StringHandler
    {
        /// <summary>
        /// author:sunliyuan
        /// sunliyuan:2011年12月4日
        /// 转换人民币大小金额
        /// </summary>
        /// <param name="num">金额</param>
        /// <returns>返回大写形式</returns>
        public static string CmycurD(decimal num)
        {
            string str1 = "零壹贰叁肆伍陆柒捌玖";            //0-9所对应的汉字
            string str2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"; //数字位所对应的汉字
            string str3 = "";    //从原num值中取出的值
            string str4 = "";    //数字的字符串形式
            string str5 = "";  //人民币大写金额形式
            int i;    //循环变量
            int j;    //num的值乘以100的字符串长度
            string ch1 = "";    //数字的汉语读法
            string ch2 = "";    //数字位的汉字读法
            int nzero = 0;  //用来计算连续的零值是几个
            int temp;            //从原num值中取出的值  

            num = Math.Round(Math.Abs(num), 2);    //将num取绝对值并四舍五入取2位小数
            str4 = ((long)(num * 100)).ToString();        //将num乘100并转换成字符串形式
            j = str4.Length;      //找出最高位
            if (j > 15) { return "溢出"; }
            str2 = str2.Substring(15 - j);   //取出对应位数的str2的值。如:200.55,j为5所以str2=佰拾元角分  

            //循环取出每一位需要转换的值
            for (i = 0; i < j; i++)
            {
                str3 = str4.Substring(i, 1);          //取出需转换的某一位的值
                temp = Convert.ToInt32(str3);      //转换为数字
                if (i != (j - 3) && i != (j - 7) && i != (j - 11) && i != (j - 15))
                {
                    //当所取位数不为元、万、亿、万亿上的数字时
                    if (str3 == "0")
                    {
                        ch1 = "";
                        ch2 = "";
                        nzero = nzero + 1;
                    }
                    else
                    {
                        if (str3 != "0" && nzero != 0)
                        {
                            ch1 = "零" + str1.Substring(temp * 1, 1);
                            ch2 = str2.Substring(i, 1);
                            nzero = 0;
                        }
                        else
                        {
                            ch1 = str1.Substring(temp * 1, 1);
                            ch2 = str2.Substring(i, 1);
                            nzero = 0;
                        }
                    }
                }
                else
                {
                    //该位是万亿,亿,万,元位等关键位
                    if (str3 != "0" && nzero != 0)
                    {
                        ch1 = "零" + str1.Substring(temp * 1, 1);
                        ch2 = str2.Substring(i, 1);
                        nzero = 0;
                    }
                    else
                    {
                        if (str3 != "0" && nzero == 0)
                        {
                            ch1 = str1.Substring(temp * 1, 1);
                            ch2 = str2.Substring(i, 1);
                            nzero = 0;
                        }
                        else
                        {
                            if (str3 == "0" && nzero >= 3)
                            {
                                ch1 = "";
                                ch2 = "";
                                nzero = nzero + 1;
                            }
                            else
                            {
                                if (j >= 11)
                                {
                                    ch1 = "";
                                    nzero = nzero + 1;
                                }
                                else
                                {
                                    ch1 = "";
                                    ch2 = str2.Substring(i, 1);
                                    nzero = nzero + 1;
                                }
                            }
                        }
                    }
                }
                if (i == (j - 11) || i == (j - 3))
                {
                    //如果该位是亿位或元位,则必须写上
                    ch2 = str2.Substring(i, 1);
                }
                str5 = str5 + ch1 + ch2;

                if (i == j - 1 && str3 == "0")
                {
                    //最后一位(分)为0时,加上“整”
                    str5 = str5 + ‘整‘;
                }
            }
            if (num == 0)
            {
                str5 = "零元整";
            }
            return str5;
        }

        /// <summary>
        /// author:sunliyuan
        /// 2011年12月4日
        /// 转换人民币大小金额  (一个重载,将字符串先转换成数字在调用CmycurD)
        /// </summary>
        /// <param name="num">用户输入的金额,字符串形式未转成decimal</param>
        /// <returns></returns>
        public static string CmycurD(string numstr)
        {
            try
            {
                decimal num = Convert.ToDecimal(numstr);
                return CmycurD(num);
            }
            catch
            {
                return "非数字形式!";
            }
        }

    }

}

根据产品编号查询产品的生产企业

-- Description:	根据产品编号查询产品的生产企业
-- =============================================
CREATE FUNCTION [dbo].[FN_getMadeEnterpriseByProID]
(
	@ProID INT
)
RETURNS NVARCHAR(100)
AS
BEGIN
	DECLARE @MadeEnterprise NVARCHAR(100)
	SELECT @MadeEnterprise=MadeEnterprise FROM dbo.BiotbProduct
	WHERE [email protected]
	RETURN @MadeEnterprise
END

根据产品编号查询产品规格:

-- Description:	根据产品编号查询产品规格
-- =============================================
CREATE FUNCTION [dbo].[FN_getProSpecbyProID]
(
	@ProID INT
)
RETURNS NVARCHAR(100)
AS
BEGIN
	-- Declare the return variable here
	DECLARE @Spec NVARCHAR(100)

	-- Add the T-SQL statements to compute the return value here
	SELECT @Spec=spec FROM BiotbProduct WHERE [email protected]

	-- Return the result of the function
	RETURN @Spec
END

根据产品编号查询产品单位:

-- Description:	根据产品编号查询产品单位
-- =============================================
CREATE FUNCTION [dbo].[FN_getProUnitbyProID]
(
 @proID	INT
)
RETURNS NVARCHAR(50)
AS
BEGIN
	-- Declare the return variable here
	DECLARE @Unit NVARCHAR(50)

	-- Add the T-SQL statements to compute the return value here
	SELECT @Unit=Unit FROM dbo.BiotbProduct WHERE [email protected]

	-- Return the result of the function
	RETURN @Unit

END

构建查询打印的视图数据:

CREATE VIEW [dbo].[View_PurchaseInfoPrint]
AS
SELECT
SendComName=dbo.getCompanyNameByCompanyID(SendComID),
AppUserName=dbo.getUserNameByUserID(AppUserID),
AuditingUser=dbo.getUserNameByUserID(AcceptUserid),
stockUserName=dbo.getUserNameByUserID(Stockuserid),
StockName=dbo.FN_getStockNameByStockID(StockID),
StockDate=dbo.Fn_getSotckTimeByPurchaseID(PurchaseID),
* FROM dbo.BioPurchaseAppInfo

CREATE VIEW [dbo].[View_PurchaseBatchInfoPrint]ASSELECT    ProName,    Spec=dbo.FN_getProSpecbyProID(ProID),    MadeEnterprise=dbo.FN_getMadeEnterpriseByProID(ProID),    Unit=dbo.FN_getProUnitbyProID(ProID),    ProCount,    ProPrice,    ProBatchPriceTotal=(ProPrice*realityProCount),    InvoicePrice,    PurchaseProID,    PurchaseID,    ProID,    makeDate,    batchNum,        expirationDate,    ProBatchID,    stockDate,    boxNum,    BatchProCount,    realityProCount    FROM    View_PurchaseProBatchInfo

根据仓库编号查询仓库名称:

-- Description:	根据仓库编号查询仓库名称
-- =============================================
CREATE FUNCTION [dbo].[FN_getStockNameByStockID]
(
	-- Add the parameters for the function here
	@stockID INT
)
RETURNS NVARCHAR(100)
AS
BEGIN

	DECLARE @StockName NVARCHAR(100)
	SELECT @StockName=StockName FROM dbo.BioErpStockTable
	WHERE [email protected]
	RETURN @StockName

END
时间: 2024-10-01 00:05:30

ERP打印入库单(四十)的相关文章

工作记录——PDF打印入库单

下载AdobeAcrobatXPro软件 下载链接:http://pan.baidu.com/s/1pLF7CmB 1.设计表单格式 2.实现功能 3.打印效果

QT开发(四十九)——数据库用户接口层

QT开发(四十九)--数据库用户接口层 用户接口层主要包括Qt SQL模块中的QSqlQueryModel.QSqlTableModel.QSqlRelationalTableModel.用户接口层的类实现了将数据库中的数据链接到窗口部件上,是使用模型/视图框架实现的,是更高层次的抽象,即便不熟悉SQL也可以操作数据库.需要注意的是,在使用用户接口层的类之前必须先实例化QCoreApplication对象. QT中使用了自己的机制来避免使用SQL语句,提供了更简单的数据库操作及数据显示模型,分别

AngularJS进阶(四十)创建模块、服务

AngularJS进阶(四十)创建模块.服务 学习要点 使用模块构架应用 创建和使用服务 为什么要使用和创建服务与模块? 服务允许你打包可重用的功能,使之能在此应用中使用. 模块允许你打包可重用的功能,使之能跨应用使用. 一.应用程序模块化 先看看一个没有模块化的程序 <!DOCTYPE> <!-- use module --> <html ng-app="exampleApp"> <head> <title>Angluar

【科普】江户四十八手图文最详细解释

完整预览图: 四十八手解説 [日本語]:http://hp.vector.co.jp/authors/VA044354/japaneseindetail.html 较难招式须注意安全: 虽然招式号称48招,不过就连推出教战手册的旅馆业者也认为,一般人试个三.五招其实就差不多了: 而且其中有些动作还属于[超高难度]级 比方说25招[搥衣棒],女方抱住两腿膝盖后侧,下半身直直往头顶举,男方则以相反方向由上向下顶. 还有27招[推车],男方站着将女方双脚抬起来,女方用双手撑在床面,身体成四十五度悬在空

程序员的奋斗史(四十二)——大学断代史(六)——我与图书馆

文/温国兵 作为一个爱读书之人,图书馆简直是人间天堂.反之,不过地狱. 读书的好处在于,可以穿越古今中外,超越时间和空间的界限,到达你想到达的地方.你可以回到唐朝和诗仙酌酒言欢,可以回到战国和庄子高谈庄周梦蝶.鲲鹏之硕,可以回到18世纪的法国聆听哲人卢梭的教导,可以回到19世纪的德国瞻仰尼采的智慧,可以回到20世纪的中国感受王小波的特立独行,可以回到春秋时期领略老子的道,可以回到20世纪感受徐志摩的唯美诗歌--书中自有黄金屋,书中自有颜如玉,从书中可以获取到广阔的精神食粮,指引着我们前进,教导我

ERP基本功——物料的四个量

ERP基本功——物料的四个量 在分析制造业管理问题的时候,如果能借用一些ERP里才会用到的概念,就会非常的简单,并且条理清晰. 我觉得柳中冈先生一再强调的一个观点非常有用,大意是这样的:任何人依据现有的知识与经验,是不可能解决他目前所面临的问题的,只有获取了新的知识与体验之后,站在新的高度再去看待原来的问题,才能有新的领悟,并找到更佳的答案. 古人也强调,学而不思则罔,思而不学则殆.前面一句的意思就是说,学习了却不思考就会有太多的迷惑.知识只是潜在的力量,学习了如果不思考,不好好用,跟没学是一样

JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet

JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet 一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet-name>ActionServlet</servlet-name> 3 <servlet-class>me.gacl.web.controller.ActionServlet</s

《剑指Offer》题三十一~题四十

三十一.栈的压入.弹出序列 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的数字均不相等.例如,序列{1, 2, 3, 4 ,5}是某栈的压栈序列,序列{4, 5, 3, 2, 1}是该压栈序列对应的一个弹出序列,但{4, 3, 5, 1, 2}就不可能是该压栈序列的弹出序列. 分析:本题中的压栈序列并非是一次全部压入堆栈!如果没有思路,可以举一两个例子,一步步分析压栈.弹出的过程,从中找出规律. 三十二.从上到下打印二叉树 题目一:不分行从

第四十八章

第四十八章1 人生的“减法”,你会做吗? 为学者日益,为道者日损 把事情当做学问来研究的人,欲望越来越多,追求道的人,欲望越来越少. 做“减法”是我们需要的人生智慧. 各位亲爱的朋友,我们今天接着来聊<道德经>.今天来到了新的一章,四十八章,各位一定要好好学第四十八章,因为四十八章里的话特别的有用.特别的深刻. 我们先来学头两句,老子说,“为学者日益,为道者日损”,就这两句话,里边道理非常深,我给大家先解释一遍,“为学者日益”就是把事情当做学问来研究的,这些人做事越做越多,学的越学越多,也就是