秋葵软件OA-ERP高级设计


    秋葵软件OAERP高级设计
    CC++语言开发指南
    目录

    §1 新版CC++语言变更说明…………………………………………………………………………
    §2 OAERP户程序交互……………………………………………………………………………
    例审核事件………………………………………………………………………………………
    例二:保存事件……………………………………………………………………………………
    例三:保存事件……………………………………………………………………………………
    例四:拉列表控制记录事件Event_DropDown…………………………………………………
    清单数转移设置选项:库存参考动数量………………………………………………
    例五:记录选择事件Event_Selection……………………………………………………
    例六:建立选择记录事件Event_DropDownSetItems…………………………………………
    例七:表单颜色事件Event_GridColor……………………………………………………………
    例八:数查询处理事件Event_Retrive…………………………………………………………
    例九:综合例禁售产品业务规划…………………………………………………………
    §3 OAERP虚拟机数集工作模式……………………………………………………………………
    数集工作模式………………………………………………………………………………………
    SQL语句返回数集完整例…………………………………………………………………
    取树形节点数集………………………………………………………………………………
    §4 C C++语言代码解决特殊业务例…………………………………………………………………
    例:外贸费计算……………………………………………………………………………
    例二:局部清单行计算…………………………………………………………………………
    例二:采购付款金额控制………………………………………………………………………
    结果……………………………………………………………………………………………………
    字段值控制…………………………………………………………………………………………
    练……………………………………………………………………………………………………
    复杂报价计算…………………………………………………………………………………
    §5 代码逻辑障分析……………………………………………………………………………………
    §6 表单动转换事件……………………………………………………………………………………
    例:………………………………………………………………………………………………
    §7 查询结果转换清单事件……………………………………………………………………………

    附录1 OAERP虚拟机CC++数工作模式
    附录2 OAERP支持数类型
    附录3 OAERP事件类型览表
    附录4 CC++根底
    附录5 更例
    §8 函数指针动态链接库……………………………………………………………………
    §9 产生提成表程序…………………………………………………………………………




    2
    3
    4
    4
    7
    9
    10
    11
    13
    15
    16
    17
    18
    18
    20
    22
    23
    23
    27
    31
    32
    33
    34
    35
    36
    38
    39
    40

    42
    43
    50
    54

    57
    58
    引言
    满足量未知特殊需求系统置虚拟机C++虚拟机理应该满足功扩充文件仅仅技术做概览性介绍
    OAERP允许户全面开发定义需求功
    (1) 定义表单增加字段.
    (2) 系统原带表单增加新字段
    (3) 完全定义报表
    (4) 全面控制业务处理程

    谓全面控制业务处理程新增单审核单处理完毕单户录入数程中控制
    字段增加C/C++代码处理录入数程中控制〞
      文讲述C/C++程序编写功强业务处理功

    初学者理解容序
    (1) CC++根工作方式
    (2) 数集概念
    (3) 事件概念
    (4) 附录
     
    §1新版CC++语言变更说明〔〕
    〔学请勿跳里观念转变C语言进入C++〕
    面函数
    (1)BeginRepeat
    EndRepeat
    函数目窗口录入状态(模式II)切换清单计算清单行数
    新版中数集概念需切换例子原C语言程序(老版)
    int rGetRow()
    int jBeginRepeat(Items)
    float Sum0
    while(j>0 && j{ double x1Calculate2(Amount*CoPrice)
    double x2newGetTax(x10)
    SumSum+x2
    jNextRow()
    }
    EndRepeat()
    newSet2(NULLSum)
    〔旧版注释〕
    GetRow() 获前行
    BeginRepeat(Items) 准备Items清单进行统计返回首行行次
    NextRow() 跳跃行
    EndRepeat() 结束清单统计
    新版清单数集 ds1代码变换面
    double Sum00
    gDataSet ds1(this3Items)
    int r1ds1GetRow()
    while(r1>0)
    { double x1ds1Calculate2(Amount*CoPrice)
    double x2ds1newGetTax(x10)
    SumSum+x2
    r1 ds1NextRow()
    }
    newSet2(NULLSum)
    新版中需切换操作代表清单数集合ds1例子说明C语言程序度C++程序
    请查系统带例程序

    (2)newGetX3
    函数目返回字段字符串值
    新版中newGetX4直接获目
    例原代码
    char buff[128]
    newGetX3(xExtraFields_C01128buff)
    if(buff[0]'R' && buff[0]'M' && buff[0]'B')
    {
    ntr)
    newSet2(PriceX2)
    }
    新版代码
    string s1newGetX4(xExtraFields_C01)
    if(s1RMB)
    {
    double X2newGet2(ProductLTimetblPurchcontr)
    newSet2(PriceX2)
    }
    处理复杂问题时C++代码较C语言更容易接思维直观性

    §2 CC++事件
    OAERP目前开放允许户控制方
    (1) 新增单
    (2) 审核单
    (3) 处理完毕单
    (4) 户录入数程
    (5) 拉框事件
    户处理数象OAERP系统分三类
    (1) 记录
    (2) 窗口编辑框
    (3) 清单
    记录指存数库中条记录条记录 窗口编辑框户交互输入位置清单指窗口中清单
    系统处"记录"处理状态系统状态1"窗口编辑框"状态2清单状态3.CurrentMode()获前状态值.

       例审核事件
       "裁床明细"窗口中段代码:
    ******************
    * 5563 Amount *
    ******************
    int MCurrentMode()
    if(M2)
    { Sum2AndSet(NULLItemsAmount)
    }
    段代码加载单"Amoun"字段仅仅模式II中工作合计Itesm清单Amount字段

      例二保存事件
    户定义全新窗口调整结算价结算价户定义贯穿全部清单字段uPrice – 标识特价格
    窗口中户设计录入信息方式库存中选择剩余库存录入新结算价uPrice然希单审核时修改库存中结算价uPrice
      代码应该加载审核函数设置方式:

    代码清单
    1  int i0i1ic1j1
    2  double price1
    3  string s1
    4  gDataSet ds1(this1Items)
    5  for(i0++i)
    6  { i1ds1MoveTo(i)
    7   if(i1<0)
    8   { return 0
    9   }
    10   price1ds1newGet2(uPrice)
    11   ic1(int)ds1newGet2(JInstockItemsCode)
    12   if(ic10)
    13   { gStringArray SA1(this)
    14   s1显示信息:Lines Contain No leagal Information line
    15   s1+(i+1)
    16  (s1)
    17   SA1Append(钮1)
    18   SA1Append(钮2)
    19   SA1Append()
    20   j1SA1ShowMessage()
    21   if(j11)
    22   { return 1
    23   }
    34   }
    25   else
    26   { s1Update tblInstockItems set uPrice
    27   s1+price1
    28   s1+ Where Code
    29   s1+ic1
    30   SQL(s1)
    31   }
    32  }
    33 return 0
      说明
    希获清单行然行JInstockItemsCode字段值取出数库存清单序号然获uPrice字段值值更新数库中
    审核单时系统传操作象单身获清单行?操作清单行呢?Line 4完成工作整清单封装gDataSet数结构中构造数集合传3参数第参数前工作象〔记录窗口清单〕第二参数1希模式I集合第三参数清单字段名称Items〞
    Line 1011ds1前缀表示操作清单
    Line 532循环处理Line 6定位第i条记录果末尾者根没清单函数会返回12等负数
    Line 2629构造SQL语句假设Code20005uPrice10语句
    Update tblInstockItems set uPrice10 Where Code2005
    Line 30SQL函数执行语句
    Line 12检查获取库存清单序号合法性果获取非法结果Line 1220构造提示窗口

    窗口Line 20执行结果显示窗口系统需字符串数组象gStringArrayLine 13中构造象字符串数组元素字符串
    窗口需3字符串〔1〕编辑框中提示信息〔2〕钮Continue〞〔3〕钮Cancel〞外附加空白字符串便系统知道谁钮牛户第钮时函数返回0第二返回1次类推果超时返回1
    段代码般正常情况反复操作清单处理完毕返回0审核成功
    注意返回1表示审核失败
      例二问题
    里赖字段JInstockItemsCode库存明细序号果没字段者原字段值法取道办呢?
    面代码说明批号代然增加更检查防止错误
    int i0i1ic1j1
    double price1
    string s1
    gDataSet ds1(this1Items)
    for(i0++i)
    { i1ds1MoveTo(i)
    if(i1<0)
    { return 0
    }
    price1ds1newGet2(uPrice)
    ic1(int)ds1newGet2(LotsCode)
    if(ic10)
    { gStringArray SA1(this)
    s1Lines Contain No leagal Information line
    s1+(i+1)
    SA1Append(s1)
    SA1Append(Continue)
    SA1Append(Cancel)
    SA1Append()
    j1SA1ShowMessage()
    if(j11)
    { return 1
    }
    }
    else
    { s1Update tblInstockItems set uPrice
    s1+price1
    s1+ Where LotsCode
    s1+ic1
    SQL(s1)
    }
    }
    return 0


      例三保存事件
    户希采购订单中动根生产单开工日期填写提前7天供商交货日期
    解决问题编写保存事件代码代码
    1 string s1
    2 int x1newGet2(PracticeTable)
    3 if(x1276)
    4 { return 0
    5 }
    6 s1newGetX4(Relateid_XCodeStart1)
    7 int x2UDCharToInt(s1c_str())
    8 int x3GetDateX(16)
    9 if(x27*24*60*6010 { gStringArray SA1(this)
    11 string s2时间错误提前时间天前
    12 s2+s1
    13 SA1Append(s2)
    14 SA1Append(放弃)
    15 SA1Append(然继续)
    16 SA1Append()
    17 int j1SA1ShowMessage()
    18 if(j10)
    19 { return 1
    20 }
    21 }
    22 newSet2(Deliverdatex27*24*60*60)
    23 return 0
    里解释L2中取前单业务类型窗口序号生产单话直接返回L6漫游查找生产单开工日期结果应该2007阅读格式L7UDCharToInt转换Unix长整数形式L8取天时间L9L21提前七天天值时予提示L17接受户返回钮

    果户第钮返回0〔次类推〕时返回1告诉系统处理失败果继续者正确话L22执行设置字段Deliverdate交货日期希值
    代码编写户代码窗口保存数库然采购订单增加保存数事事件:

    客户程序重新启动代码生效
    例三进步问题
    户生产单中动产生采购订单时果结果张采购订单张出现提示果求面张生产单产生单显示述话框时样做呢?
    解决方法设置静态变量生产单号果次生产单号次相提示容继续处理目前问题:次段程序运行时全新虚拟空间运行谓次结果影踪时候函数
    void UserSet(char *Varablechar *Value) 全局变量设置字符串值
    string UserGet(char *Varable) 获取全局变量值
    程序
    1 string s1
    2 int x1newGet2(PracticeTable)
    3 if(x1276)
    4 { return 91
    5 }
    6 s1newGetX4(Relateid_XCodeStart1)
    7 int x2UDCharToInt(s1c_str())
    8 int x3GetDateX(16)
    9 if(x27*24*60*6010 {
    string sb1newGetX4(Relateid_XCode)
    string sb2UserGet(MyName011)
    if(sb1sb2)
    {
    UserSet(MyName011sb1c_str())
    10 gStringArray SA1(this)
    11 string s2时间错误提前时间天前
    12 s2+s1
    13 SA1Append(s2)
    14 SA1Append(放弃)
    15 SA1Append(然继续)
    16 SA1Append()
    17 int j1SA1ShowMessage()
    18 if(j10)
    19 { return 1
    20 }
    }
    21 }
    22 newSet2(Deliverdatex27*24*60*60)
    23 return 0
    然更复杂例保存次户钮值果相生产单次动返回相值者作出相反响
      
    例四拉列表控制记录事件
    采购退货单窗口户希拉采购收货单时列出采购收货单时数量控制仅存库存数量防止数量符合库存法出库
    操作采购调价单〞窗口样控制系统部函数SelectSaleLoadCargo_PriceAdjust〞调函数
    〔1〕首先编写事件代码
    int MCurrentMode()
    if(M2)
    {
    CallFunction(SelectSaleLoadCargo_PriceAdjust)
    }
    〔2〕〞相关单字段〞增加DropDown事件

    客户端重启拉字段编辑框会弹出单选择系统会根前库存调整允许退货数量
    事件需类似处理字段享
    例四进步问题
    果希带回清单数量动0果面没填写保存办呢?
    解决方法CallFunction(SelectSaleLoadCargo_PriceAdjust)面增加代码清单Amount字段掉否保存系统已表单样处理定义表单字段取正确特征码具特点
    方案二清单字段设置面选项〔情况需代码〕


    例五记录选择事件
    行业业务公司营业执期允许发生业务
    时定义营业执期字段面字段VisitTime〞说明需求
    〔1〕首先编写事件代码
    代码片段:
    string s1 getParameters(3)
    if(s1149 && s1161)
    { return 1
    }
    return 0

    1〕返回值然遵守标准规1表示失败返回1允许选择返回0表示系统默认方式检查
    2〕里循环户选择条记录逐检查
    3〕x1(int)newGet2(VisitTime)中newGet2返回float类型int类型接收结果强制类型转换
    4) string s1 getParameters(3)获第3参数窗口序号接说果销售订单窗口采购订单窗口允许选择

    5)果希更控制类似代码
    代码片段二:
    int i0i1x1x2
    double price1
    string s1 getParameters(3)
    if(s1149 && s1161)
    { return 1
    }
    for(i0++i)
    { i1MoveTo(i)
    if(i1<0)
    { return 0
    }
    s1newGetX4(VisitTime)
    x1(int)newGet2(VisitTime)
    x2GetDateX(16)
    if(x1 { gStringArray SA1(this)
    string s2记录时间期
    s2+s1
    SA1Append(s2)
    SA1Append(选择)
    SA1Append(然选择)
    SA1Append()
    int j1SA1ShowMessage()
    if(j10)
    { return 1
    }
    }
    }
    return 0


    〔2〕然〞业务公司〞翻开业务处理设置窗口增加Selection事件

    〔3〕客户端重启果选择某期业务公司系统会提示

    注意1:果仅仅针效期禁等系统默认处理例设置字段效期检查者记录设置禁述原理更广泛目
    注意2:果户事件返回1表示禁止选择1表示允许选择0表示系统默认方式检查
    注意3:参数说明string s1getParameters(3)返回第三参数事件参数
    getParameters(0) Event_Selection 〔事件名称〕
    getParameters(1) Ban Check 者Valid Check (辅助参数指做什检测)
    getParameters(2) 记录窗口序号
    getParameters(3) 正操作窗口序号

    例六:建立选择记录事件Event_DropDownSetItems
    时候拉框拉开时希完全意愿建立需选择记录例采购订单中业务类型拉开显示工程:

    类型系统默认发生采购业务类型果需中业务类型业务选项〞页签设置某类型掉完全指定例设置成入库单出库单〞里显示工程方里显示〔注意:非联系企业出库者入库采购〕
    外情况类设置法起作时考虑Event_DropDownSetItems
    面代码说明仅仅入库单出库单〞采购订单中显示例
    int ret10
    int s1(int)newGet2(Code)
    string s2getParameters(3)
    if(s2149)
    { if(s1158 || s1165)
    { ret11
    }
    else
    { ret11
    }
    }
    return ret1
    注意1:果户事件返回1表示禁止选择1表示允许选择0表示系统默认方式建立工程
    注意3:参数说明string s1getParameters(3)返回第三参数事件参数
    getParameters(0) Event_DropDownSetItems 〔事件名称〕
    getParameters(1) DropDownSetItems (辅助参数指做什检测)
    getParameters(2) 记录窗口序号
    getParameters(3) 正操作窗口序号

    例七:表单底色字体颜色事件
    户期显示时候根情况显示颜色时表单颜色事件够解决类问题
    里例家医药物流公司希弹出式库存分布窗口根库存效期显示颜色便时处理
    〔1〕编写事件代码
    1 double Dx1newGet2(LotsCodeDeadline)
    2 int Today1GetDateX(10)
    3 if(Dx14 { SetResult(255255025500)
    5 }
    6 else if(Dx17 { SetResult(2551286425500)
    8 }
    9 else if(Dx110 { SetResult(25516812525500)
    11 }
    12 else if(Dx113 { SetResult(19219219225500)
    14 }
    代码入库明细根底L1取该批号效期L2取天日期结果197011开始秒数L3判断效期10天L12判断8月L4设置底色字体颜色颜色RGB三色组成英文逗号分开前面三表单底色面三字体颜色RGB值画图软件查询
    〔2〕编写事件赋tblInstockItems_For_Schedule名称弹出表单窗口左角单元格选择功编辑显示数库名称〞获名称提示窗口底部复制选择窗口功选项窗口翻开指定窗口〞窗口选择综合处理高级设置业务处理设置〞做修改修改保存

    里事件名称前面户C语言程序〞中编写代码
    〔3〕显示效果


    例八:查询事件
    户期查询结果根情况做处理时表单查询事件 Event_Retrive够解决类问题
    里例公司希户100登录时查询202106前数时表单数
    〔1〕编写事件代码
    1 int t1t2t3t7
    2 float t4t5t6
    3 char *c1*c2
    4 string uc1GetUserInf(Code)
    5 if(uc1100)
    6 {
    7 t3(int)newGet2(Date1)
    8 if(t3<1212249600)
    9 {
    10 t1(int)newGet2(Name)
    11 uc1Select * From HDuty_DailyReportX2 Where Name
    12 uc1+t1
    13 uc1+ And Date1
    14 uc1+t3
    15 gDataSet ds1(this4uc1c_str())
    16 c1gCstr1()
    17 t1gSize1()
    18 c2ds1gCstr1()
    19 t2ds1gSize1()
    20 if(c1NULL && c2NULL && t1>0 && t2t1)
    21 { memmove(c1c2t1)
    22 }
    23 printf(t1dt2dc1dc2dt1t2(int)c1(int)c2)
    24 printf(sqlsuc1)
    25 }
    26 else
    27 {
    28 t1(int)newGet2(Shift30)
    29 t2(int)newGet2(Shift31)
    30 if(t2t1>15*60*60)
    31 {
    32 newSet2(Shift31t1+15*60*60+5*60)
    33 newSet2(WorkHour_Over15)
    34 t4newGet2(WorkHour_Weekend)
    35 t5newGet2(WorkHour_Over)
    36 t6newGet2(WorkHour)
    37 newSet2(TotalWorkHourt5+t4+t6)
    38 }
    39 }
    40 }
    41 return 0
    〔2〕编写事件赋HDuty_DailyReportXvent_Retrive事件
    注意:查询事件单条记录运行果查询100条记录系统条记录单独运行代码程序需处理复杂问题
    查询事件例
    〔1〕户查询库存综合报表时希局部空白数显示表单tblSaleSynthetic编写〞 查询事件〞需显示数返回1系统会滤掉局部数
    注意getParameters〔123…〕函数测试底函数调领件
    〔2〕户采购订单窗口显示应收货日期超特定长度单单估计收货采购订单编写〞 查询事件〞需显示数返回1系统会滤掉局部数
    数仅仅显示

    例九:综合例
    医药行业某业务公司禁售某产品
    〔1〕时户定义张表单〔窗口〕例UproductProhibit保存禁售信息
    〔2〕编写(例销售订单)事件事件放保存事件者审核事件代码
    int i0i1j1cidpid
    string s1s2
    double tt
    cid(int)newGet2(ClientID)
    gDataSet ds1(this1Items)
    for(i0++i)
    { i1ds1MoveTo(i)
    if(i1<0)
    { return 0
    }
    pid(int)ds1newGet2(Product)
    s2*Select Count(*) from UProductProhibit
    s2+ Where ClientID
    s2+cid
    s2+ And Product
    s2+pid
    ttSQL(s2)

    if(tt>00001)
    { gStringArray SA1(this)
    s1警告该产品前业务公司禁售
    s1+(i+1)
    SA1Append(s1)
    SA1Append(确认)
    SA1Append()
    j1SA1ShowMessage()
    return 1
    }
    }
    return 0
    段代码逐检查物品否禁售列表中果话系统禁止继续

    事件参数说明
    string getParameters(int i) 返回第i参数
    第1参数〔i0〕调事件类型名称
    保存事件:Event_BeforeCollectData审核事件Event_Audit
    第2参数(i1)辅助类型例新增保存时Insert修改保存时Update审核Audit
    明确测试结果


    §3 OAERP虚拟机数集工作模式
    gDataSet类方法Run〔〕空白户代码新版中填充方法中新版中完整C++程序样:
    (常头文件局部)
    class gDataSet
    {
    ……
    int Run()
    }
    int gDataSet Run()
    {
    户写代码局部
    }
    int fun(int ichar *buff)
    {
    gDataSet _dss
    return _dssRun()
    }

    说户程序运行时总某记录根底gDataSet提供方法处理问题
    CurrentMode()获取工作模式函数返回1表示前操作记录称模式I返回2前操作窗体编辑框字段模式II返回3前操作清单模式III模式IVSQL语句返回数集(注意:返回数然工作模式I)

    工作成员函数部时需前缀例
    int m1 CurrentMode()
    int m2ds1CurrentMode()
    前者表示取记录集工作模式者获取ds1数集工作模式

    启动代码工作模式II操作清单呢
    例希统计清单中数量单价总赋值字段Totalcharge 完成务面代码
    double Sum00
    gDataSet ds1(this3Items)
    int r1ds1GetRow()
    while(r1>0)
    { double x1ds1Calculate2(Amount*CoPrice)
    double x2ds1newGetTax(x10)
    SumSum+x2
    r1 ds1NextRow()
    }
    newSet2(TotalchargeSum)
    里仅仅说明原理完成功系统提供更强函数Sum2AndSet〔TotalchargeItemsAmount*CoPrice〕

    窗体编辑框清单记录应关系字段控制操作完全样gDataSet类型数集然模式IINextRow()没作
    1 获取清单记录集合
    模式I获取清单记录集合面代码
    gDataSet ds1(this1Items)
    然ds1gDataSet类类函数
    2 获取窗口操作象
    仅仅模式III样处理代码
    gDataSet ds1(this2NULL)
    代码例
    if(CurrentMode()2)
    { gDataSet ds1(this2NULL)
    double d1ds1newGet2(Discount)
    if(d1<0|| d1>1)d11
    double s1d1*newGet2(Price)*newGet2(Amount)
    newSet2(Summoneys1)
    }
    警告 里模式检查非常重局部代码清单中运行效模式正确局部客户(例希尔科)代码缺少检查出现错误

    仅仅模式IIIII样处理代码
    gDataSet ds1(this3 Items)
    〔模式II中方式操作外清单〕
    4SQL语句返回数集
    模式效样处理代码
    string SQL1Select * From tblInstockItems Where Amount< OutAmount And MainCode In (Select Code From tblInstock Where Record>524288)
    (语句列举入库单中存剩余库存明细MainCode In…保证单已入库前未入库单)
    gDataSet ds1(this4SQL1c_str())
    (注意:返回数然工作模式I传递4参数)
    代码例 面完整SQL语句返回数集作例
    1 string SQL1Select * From tblInstockItems Where Amount>OutAmount And MainCode In (Select Code From tblInstock Where Record>524288)
    2 gDataSet ds1(this4SQL1c_str())
    3 gStringArray SA1(this)
    4 string s2库存分布
    5 s2addReturn()
    6 s2+总行数
    7 int count1ds1GetCount()
    8 s2+count1
    9 printf(count1dcount1)
    10 s2addReturn()
    11 int ii1
    12 for(i0i13 { i1ds1MoveTo(i)
    14 if(i1>0)
    15 {
    16 string s1bds1newGetX4(Product)
    17 string s2bds1newGetX4(StoreHouse)
    18 double a1ds1newGet2(Amount)
    19 double a2a1ds1newGet2(OutAmount)
    20 s2+物品名称
    21 s2+s1b
    22 s2+仓库
    23 s2+s2b
    24 s2+入库数量
    25 s2+a1
    26 s2+剩余数量
    27 s2+a2
    28 s2addReturn()
    29 }
    30 }
    31 SA1Append(s2)
    32 SA1Append(确定)
    33 SA1Append()
    34 SA1ShowMessage()
    35 return 0
    运行时提示窗口:


    5 获取树形节点数集
    模式23效
    gDataSet ds1(this5NULL)
    例:配色表中希取BOM清单中定义字段值显示配色表窗口中供参考代码:
    int p0p1s1
    string lo1s2
    gDataSet ds1(this5NULL)
    CreateFields(X001长2)
    CreateFields(X002宽2)
    CreateFields(X003场2)
    if(CurrentMode()3)return 0
    p0(int)ds1newGet2(Product)
    p1(int)newGet2(Product)
    s1(int)newGet2(Specif)
    lo1newGetX4(LocationX)
    s2Select * From prdBOMItems Where Product
    s2+p1
    s2+ And Specif
    s2+s1
    s2+ And LocationX\'
    s2+lo1
    s2+\'
    s2+ And MainCode In ( Select Code From prdBOM Where Product
    s2+p0
    s2+)
    gDataSet ds2(this4s2c_str())
    newSet2(X001ds2newGet2(uLength))
    newSet2(X002ds2newGet2(uWidth))
    newSet2(X003ds2newGet2(uThickness))

    6 空白数集
    模式效
    gDataSet ds1(this6char *cn1)
    例: cn1表单名称表单序号


    §4 C语言代码解决特殊业务例

    根意义
    OAERP做通系统非常专需求方面走太远CC++语言扩展程序原解决需求
    果CC++语言解决语言未必解决

    例:外贸费计算
    1) 外贸户销售报价销售订单中存费启费方案费清单

    2) 费中局部固定例手续费标签费等
    3) 外局部费固定例单物品金额保值费〞根物品清单费总系数关税〞等费总系数
    C语言代码设置
    1〕先定义费工程

    注意里两特殊工程序号分2000320004特处理
    2〕销售报价单中定义C语言程序:

    里需第三行第四行工程定义C语言程序数量固定1需单价字段定义C语言程序询价单物品金额保值费〞统计物品清单费总代码:
    代码片段
    Sum2AndSet(PriceItemsSummoney)
    里Sum2AndSet作:计算清单Items表达式Summoney总然赋值Price字段
    第四行费汇总项关税〞意义计算行总金额系数例05定义C语言程序
    代码片段二
    float D1Sum2(Items3Summoney)
    float D2newGet2(Summoney)
    newSet2(Price(D1D2)*05)
    里解释第1行意思计算清单Items3表达式Summoney总第2行意思获行Summoney值仅仅计算行Summoney值结果相减(D1D2)第3行意思计算结果赋值字段Price
    现问题第三行代码片段第四行代码片段二行计算处理呢?
    newGet2(Type1)获取字段Type1序号记第三行询价单物品金额保值费〞序号20003第四行费汇总项关税〞序号20004C语言程序形式
    代码
    if(newGet2(Type1)20003)
    { Sum2AndSet(PriceItemsSummoney)
    }
    if(newGet2(Type1)20004)
    {
    float D1Sum2(Items3Summoney)
    float D2newGet2(Summoney)
    newSet2(Price(D1D2)*05)
    }
    3〕点优化面代码中newGet2(Type1)调2次影响效率采面优化形式加速计算
    优化代码片段
    int type1newGet2(Type1)
    if(type120003)
    { Sum2AndSet(PriceItemsSummoney)
    }
    else if(type120004)
    { float D1Sum2(Items3Summoney)
    float D2newGet2(Summoney)
    newSet2(Price(D1D2)*05)
    }




    实际代码片段:
    int type1newGet2(Type1)
    float D2Sum2(ItemsSummoney)
    float D3newGet2(MainCodeExchange)
    if(type120003) 国际空运
    { float D1newGet2(MainCodeRelateid_XCodexExtraFields03)
    newSet2(PriceD1*15)
    }
    else if(type120004) 保险
    { newSet2(PriceD2*00029*11)
    }
    else if(type120014) 代理费
    { newSet2(PriceD2*D3*001100)
    }
    else if(type120001) 关税
    { float D4newGet2(MainCodeRelateid_XCodexExtraFields02)
    newSet2(PriceD2*D3*D4100)
    }
    else if(type120012) 汇费
    { if(D2*0015<100)
    newSet2(Price100)
    else
    newSet2(PriceD2*0015)
    }
    注释:
    D4取值通销售报价记录单字段〞Relateid_XCode〞漫游采购询价单里取字段〞xExtraFields02值

    例二:局部清单行计算
    述户系统中设置完整出现述问题:
    问题:客户系统销售费方案C语言代码中费方案里明细运C代码算法示
    else if(type120017)
    { float D6Sum2(Items3Summoney)
    newSet2(PriceD6*017)
    }
    中〞费VAT〞值第1行第13行017值做销售报价单时填写完相关数选择相应费报价方案瞬间算出值准确计算会导致错误


    问题:Windows操作系统设计事件驱动系统事件发生时系统反响OAERP根原设计Sum2(Items3Summoney)代码第二次计算时会第次计算结果考虑进第二次计算结果第次然假设次计算结果段代码原理错误
    获正确结果必须重新写代码仅仅统计113行值时考虑函数:
    GetRow() 获前行
    gDataSet ds1(this3Items) 构造操作Items清单数象
    NextRow() 跳跃行
    代Sum2(Items3Summoney)代码
    int rGetRow()
    int j1
    float Sum0
    gDataSet ds1(this3Items)
    while(j>0 && j{
    double x1ds1Calculate2(Summoney)
    SumSum+x1
    j ds1NextRow()
    }
    newSet2(NULLSum)
    里解释段代码第14行生效通系统没14具体数字int rGetRow()返回行次便更行更少行时效while(j>0 && j 终局部完整代码
    else if(type120017)仅〞费VAT〞行次生效
    { int rGetRow()
    int j1
    float D60
    gDataSet ds1(this3Items)
    while(j>0 && j {
    double x1ds1Calculate2(Summoney)
    D6D6+x1
    jds1NextRow()
    }
    )
    }
    面出局部终完整代码供参考:
    int type1newGet2(Type1)
    float D2Sum2(ItemsSummoney)
    float D3newGet2(MainCodeExchange)
    if(type120003)
    { float D1newGet2(MainCodexExtraFields01)
    if(D1<35)
    newSet2(PriceD1*15)
    else
    newSet2(PriceD1*175)
    }
    else if(type120004)
    { newSet2(Price(D2D3)*00029*11)
    }
    else if(type120014)
    { newSet2(PriceD2*001)
    }
    else if(type120012)
    { if(D2*0015<100)
    newSet2(Price100)
    else
    newSet2(PriceD2*0015D3)
    }
    else if(type120017)
    { int rGetRow()
    int j1
    gDataSet ds1(this3Items)
    float D60
    while(j>0 && j {
    double x1ds1Calculate2(Summoney)
    D6D6+x1
    jds1NextRow()
    }
    newSet2(PriceD6*017)
    }
    else if(type120016)
    { float D4newGet2(MainCodeContactMethod)
    newSet2(Price(D2D3)*(1+D4)*017)
    }
    else if(type120001)
    { float D4newGet2(MainCodeContactMethod)
    newSet2(PriceD2*D4D3)
    }
    else if(type120018)
    { float D1newGet2(MainCodexExtraFields01)
    if(D1*045<15)
    newSet2(Price15)
    else
    newSet2(PriceD1*045)
    }
    else if(type120020)
    { float D1newGet2(MainCodexExtraFields01)
    if(D1*16<45)
    newSet2(Price45)
    else
    newSet2(PriceD1*16)
    }
    else if(type120021)
    { if(D2*00032<18)
    newSet2(Price18)
    else
    newSet2(PriceD2*00032)
    }

    else if(type120022)
    { float D1newGet2(MainCodexExtraFields01)
    if(D1*045<40)
    newSet2(Price40)
    else
    newSet2(PriceD1*045)
    }
    例二:采购付款金额控制
    1) 制药企业采购付款时求金额超方100万时次付款70%特殊需求编写采购付款单〞审核检查C语言代码控制

    根需求张单应该通审核分析应该编写C语言程序
    系统提供Sum2(char *FieldNamechar *Express1)函数获清单中应付款〞次付款〞值
    double D1Sum2(ItemsTobepayed)
    double D2Sum2(ItemsNowpayed)
    if(D1>1000000 && D2>D1*07)
    { return 1
    }
    return 0
    里D1获应付款〞值清单字段Items注意表单清单里求注明清单字段D1获次付款〞值 果D1超100万次付款〞超D170%时返回1表示审核失败情况返回0表示通
    2) 编写函数录入户C语言程序〞然

    3) 然采购付款〞业务设置窗口面方式设置审核检查函数

    注意里Event_Audit〞审核检查函数类型标记种控制函数弄错

    结果
    设置重新启动系统
    现选择张单审核出现提示表示审核失败



    修改金额审核通

    字段值控制
    奥诺制药订单中处理中需操作员录入申请数量审核员审核时根申请数量剩余款填写审核数量

    实施员定义字段xExtraFields01设置申请数量时求
    〔1〕果申请数量没填写审核数量意填写
    〔2〕果申请数量填写审核数量超申请数量
    时代码
    float X1newGet2(xExtraFields01)
    if(X1<001)return 0

    float X2newGet2(Amount)
    int iGetFieldOrder(xExtraFields011)
    int jGetFieldOrder(Amount1)
    int kGetFieldOrder(NULL1)
    if(ik || (jk && (X2>X1 || X2<001)))
    { newSet2(AmountX1)
    }
    里k获前输入焦点列i申请数量列j审核数量列X1申请数量没填写时处理直接返回情况:
    〔1〕ik指申请数量列前列
    〔2〕jk指审核数量列前列
    〔3〕X2>X1指审核数量超出申请数量
    〔4〕X2指审核数量没填写
    〔5〕|| && 分者〞逻辑判断


    练题:假设客户求销售发票中允许开发票金额开出金额税017必须客户承设置流程?设置C语言控制?
    流程设置:时应收账款发货单发货单金额改变改变变成应收账款设置销售发票〞应收账款时证模板中设置详细请见业务财务体化〞局部
    C语言设置:利系统中预留定义字段设置窗体:

    单清单中发票金额〞
    然字段C语言代码设置:
    〔1〕单发票金额
    Sum2AndSet(NULLItemsxExtraFields01)
    统计清单ItemsxExtraFields01字段值赋字段
    〔2〕清单发票金额
    float X1newGet2(xExtraFields01)
    float X2newGet2(Amount)*newGet2(Price)
    if(X1<0001)
    {newSet2(NULLX2)
    }
    没设置发票金额时动填写
    〔3〕清单总金额
    float X1newGet2(xExtraFields01)
    float X2newGet2(Amount)*newGet2(Price)
    float X3X2+(X1X2)*017
    if(X1newSet2(SummoneyX3)
    发票金额超数量*单价时计算出金额税加数量*单价总应收账款
    里仅仅课堂教学中学生问题解答实际没样做〔1〕开发票仅违法造成严重税务问题〔2〕开金额非法合法化做法调整计算单价

    复杂报价计算

    float x1newGet2(ItemsProduct[1Order]DT~prdBOM~ProductTotalchargeX[ItemsSpecif[1Order]Specif])
    float x2newGet2(Totalcharge3)
    float x3newGet2(xExtraFieldsI01Rate1)
    newSet2(NULL(x1+x2)*x3)
    注意里X1取值中漫游取值代码
    ItemsProduct[1Order]DT~prdBOM~ProductTotalchargeX[ItemsSpecif[1Order]Specif]
    ItemsProduct[1Order]表示查询清单第行ItemsSpecif[1Order]表示清单第行规格里嵌套DT~prdBOM~Product表示跳跃BOM单中prdBOM中Product字段值相次取道行[]约束条件限制结果

    §5 代码逻辑障分析
    CC++博精深业界知名恐惧简单说CC++唯遵守规逻辑面例子
    某企业销售报价单费明细销售订单费明细〞

    代码:
    715tblSalequotItems3询价单费明细
    ********************
    * 7151 Summoney *
    ********************
    Calculate2AndSetValue(SummoneyuExchange*Price*Amount)

    *********************
    * 7152 uExchange *
    *********************
    int jGetRow()
    while(j>0)
    {
    int s1(int)newGet2(FnCode)
    if(s112||s16)
    {
    newXSet(MainCodeExchange1)
    }
    else if(s11)
    { newSet2(uExchange1)
    }
    jNextRow()
    }
    里代码问题?
    出现障:
    〔1〕保存数行外汇率(uExchange)总金额(Summoney)空白重新点击显示
    〔2〕总金额(Summoney)出现错误现象取计算值似新汇率应

    问题程序员昼夜眠方切简单结正确
    里先说明里思路错误处
    〔1〕总金额(Summoney)外汇率(uExchange)uExchangeSummoney计算序导致误差
    〔2〕外汇率(uExchange)代码需计算记录〔行〕段代码整清单循环次调代码处理行数时整清单重新处理遍效率十分低
    鉴GetRow()返回前行次行号计算n*(n1)身说明程序思路匹配混淆
    〔3〕里取表单值某状态〔模式I模式II〕失败里没判断系统运行模式

    知道问题外汇率(uExchange)定义代码ok
    if(CurrentMode()3)
    { int s1(int)newGet2(FnCode)
    if(s112||s16)
    {
    newXSet(MainCodeExchange1)
    }
    else if(s11)
    { newSet2(uExchange1)
    }
    Calculate2AndSetValue(SummoneyuExchange*Price*Amount)
    }
    时总金额(Summoney)需什代码然代码时uExchange位置调整Summoney前面否会出错Summoney默认代码没覆盖时会生效字段默认代码
    715tblSalequotItems3询价单费明细
    ********************
    * 7151 Summoney *
    ********************
    int MCurrentMode()
    if(M3)
    { CallFunction(SetFor_tblSaleFeeSchemeItems)
    }
    〔字段空白代码分号〞代防止运行降低系统效率〕
    外明白代码时会系统调计算仅仅某固定位置特殊处理方式判断否适合代码
    程序员保持清醒头脑系统正确运行关键

    §6 表单动转换事件
    1 表单动转换事件需求需求:销售订单审核时动产生销售发货单销售发货单审核时动产生出库单等
    系统已置根事件
    面需求需开放更置机制否满足特殊需求:
    〔1〕医药行业户希销售订单审核时动产生销售发货单销售发货单动审核销售发货单产生收款单
    〔2〕收款单审核时动审核销售发货单然动产生出库单
    处理类需求需启表单动转换事件〞


    注意里销售订单定义审核〞〔Audit〕事件 销售发货单定义新增〞〔AfterNewSave〕事件
    控制单产生控制单:


    2现户提出需求:
    〔1〕果订单选择现金销售直接产生收款单
    等等
    显然没定义程序
    系统开放流程事件〞(Event_FlowSave)专门判断否需产生单定义:

    代码身:
    int j1(int)newGet2(Relateid_XCodeScheduledType)
    printf(flowdj1)
    if(j1189)
    { return 1
    }
    return 0

    说明:返回负值表示继续


    §7 查询结果转换清单事件
    现需求:
    A库存养护:前库存进行种条件滤筛选出组效记录清单作步业务操作药品养护确认表药品养护档案库存药品质量养护检查记录单审核完成更新批号库中次养护日期
    B药品质量复检通知单药品质量复检记录单药品质量处理通知单
    C药品停售复售通知单筛选出库存清单进行停售者复售处理
    D效期效期药品催销表满足定日期时间段库存进行统计生成相应效期药品清单列表作步处理失效期6月库存商品进行清单列表记录单销售部门进行催销
    E根库存限前库存情况筛选滤列出组清单作采购方案引采购订单中
    针类需求系统提供查询报表转换清单〞机制
    〔1〕设置印报表点
    1〕类型选择:*报表清单转换
    2〕字段转换规:清单中显示标签定义编号Product〞形式查询结果中编号〞列转换清单中Product〞字段等
    3〕然定义显示窗口

    〔3〕述例采购订单〞中显示结果:


    〔3〕查询结果



    〔4〕报表产生结果里原转换清单

    附录1 OAERP虚拟机CC++数工作模式
    CurrentMode()获取工作模式函数返回1表示前操作记录称模式I返回2前操作窗体编辑框字段模式II返回3前操作清单模式III模式IVSQL语句返回数集(注意:返回数然工作模式I)

    int m1 CurrentMode()
    int m2ds1CurrentMode()
    前者表示取记录集工作模式者获取ds1数集工作模式

    数集定义格式
    工作模式
    说明
    1
    gDataSet ds1(this1Items)
    1
    获取清单记录集合
    模式I效
    2
    gDataSet ds1(this2NULL)
    2
    获取窗口操作象
    仅模式III
    3
    gDataSet ds1(this3 Items)
    3
    取名称Itesm清单
    仅仅模式IIIII效
    4
    gDataSet ds1(this4SQL1c_str())
    1
    SQL语句返回数集
    5
    gDataSet ds1(this5NULL)
    1
    获取树形节点数集
    6
    gDataSet ds1(this6char *cn1)
    1
    空白数集
    cn1表单名称表单序号
    模式效





    附录2 OAERP支持数类型
    类型
    意义
    int
    整数
    double
    数(浮点数)
    string
    字符串(c++标准)
    gStringArray
    字符串数组(元素字符串)
    gDataSet
    数集(数库存表单窗口者清单条条记录)


    CC++标准库函数
    函数

    int printf(char *format)
    int scanf(char *format)

    int abs(int x)
    double atof(char *s)
    int atoi(char *s)
    double sqrt(double x)
    double fabsl(double x)
    void abort()
    double acos(double x)
    double asin(double x)
    double atan(double x)
    double atan2(double x)
    double cos(double x)
    double exp(double x)
    double log(double x)
    double log10(double x)
    double floor(double x)
    double frexp(double x int *exponent)
    double ldexp(double x int exp)
    double modf(double x double *ipart)
    double pow(double x double y)
    double sin(double x)
    double sinh(double x)
    double strtod(char *s char **endptr)
    double tan(double x)
    double tanh(double x)
    double cosh(double x)
    double ceil(double x)
    double fabs(double x)

    void *memmove(void *dest void *src int n)
    int strcmp(const char *s1const char *s2)
    int strncmp(const char *s1const char *s2int len1)
    char *strcat(char *destchar *src)
    char *strchr(char *s int c)
    char *strcpy(char *destchar *src)
    int sprintf(char *buffer char *format)
    FILE *fopen(char *filename char *mode)
    FILE *freopen(char *filename char *mode FILE *stream)
    FILE *tmpfile(void)
    char *asctime(tm *tblock)
    char *ctime(time_t *time)
    char *fgets(char *s int n FILE *stream)
    double difftime(time_t time2 time_t time1)
    int atexit(void (* func)(void))
    int fclose(FILE *stream)
    int feof(FILE *stream)
    int ferror(FILE *stream)
    int fflush(FILE *stream)
    int fgetc(FILE *stream)
    int fprintf(FILE *stream char *format)
    int fputc(int c FILE *stream)
    int fputs(char *s FILE *stream)
    int fscanf(FILE *stream char *format)
    int fseek(FILE *stream long offset int whence)
    int getc(FILE *stream)
    int getchar(void)
    int putc(int c FILE *stream)
    int setvbuf(FILE *stream char *buf int type size_t size)
    int ungetc(int c FILE *stream)
    long ftell(FILE *stream)
    size_t fread(void *ptr size_t size size_t n FILE *stream)
    size_t fwrite(void *ptr size_t size size_t n FILE *stream)
    void clearerr(FILE *stream)
    void rewind(FILE *stream)
    void setbuf(FILE *stream char *buf)

    long labs(long x)
    long atol(char *s)
    long strtol(char *s char **endptr int radix)
    unsigned long strtoul(char *s char **endptr int radix)

    size_t strftime(char *s size_t maxsize char *fmttm *t)
    tm *gmtime(time_t *timer)
    tm *localtime(time_t *timer)
    time_t mktime(tm *t)

    int isalnum(int c)
    int isalpha(int c)
    int iscntrl(int c)
    int isdigit(int c)
    int isgraph(int c)
    int islower(int c)
    int isprint(int c)
    int ispunct(int c)
    int isspace(int c)
    int isupper(int c)
    int isxdigit(int c)
    int mblen(char *s size_t n)

    int mbtowc(wchar_t *pwc char *s size_t n)
    int memcmp(void *s1 void *s2 size_t n)
    int putchar(int c)
    int puts(char *s)
    int raise(int sig)
    int rand(void)
    int remove(char *filename)
    int rename(char *oldname char *newname)
    int sscanf(char *buffer char *format)
    int strcoll(char *s1 char *s2)
    int system(char *command)
    int tolower(int ch)
    int toupper(int ch)
    int wctomb(char *s wchar_t wc)
    size_t mbstowcs(wchar_t *pwcs char *s size_t n)
    size_t strcspn(char *s1 char *s2)
    size_t strlen(char *s)
    size_t strspn(char *s1 char *s2)
    size_t strxfrm(char *target char *source size_t n)
    size_t wcstombs(char *s wchar_t *pwcs size_t n)
    time_t time(time_t *timer)
    void *bsearch(void *key void *base size_t nelem size_t width int (*fcmp)(void * void *))
    void *calloc(size_t nitems size_t size)
    void *malloc(size_t size)
    void *memchr(void s int c size_t n)
    void *memcpy(void *dest void *src size_t n)
    void *memset(void *s int c size_t n)
    void *realloc(void *block size_t size)
    void exit(int status)
    void free(void *block)
    void perror(char *s)
    void qsort(void *base size_t nelem size_t width int (*fcmp)(void * void *))
    void srand(unsigned seed)
    char *getenv(char *name)
    char *gets(char *s)
    char *setlocale(int category char *locale)
    char *strerror(int errnum)
    char *strncat(char *dest char *src size_t maxlen)
    char *strncpy(char *dest char *src size_t maxlen)
    char *strpbrk(char *s1 char *s2)
    char *strrchr(char *s int c)
    char *strstr(char *s1 char *s2)
    char *strtok(char *s1 char *s2)
    char *tmpnam(char *s)

    HINSTANCE LoadLibrary(char*) 加载动态链接库
    void FreeLibrary(HINSTANCE) 释放动态链接库
    int GetProcAddress(HINSTANCEchar*) 返回动态链接库中函数





    全局函数总效
    函数格式
    说明
    void
    UserSet(char *Varablechar *Value)
    全局变量设置字符串值
    void UserSetAsDigit
    (char *Varabledouble Value)
    全局变量设置数字值
    int GetDateX(intint OpCode)
    时间转换函数OpCode意义见开发选项中说明
    string GetUserInf(char *Varable)
    获取前户职员档案中信息
    string UserGet(char *Varable)
    获取全局变量值

    字符串
    class string
    函数格式
    说明
    string(char *x)
    string(const string &x)
    string(double x)
    int length()
    string& operator(double x)
    string& operator(string& s)
    string& operator(char *s)
    string operator+(const string& x)
    string operator+(const char *s)
    string operator+(const double s)
    string sub(int startint len)
    string operator()(int startint len)
    int cmp(string& x)
    bool operator(string& x)
    bool operator(string& x)
    bool operator(char *x)
    bool operator>(string& x)
    bool operator<(string& x)
    bool operator>(string& x)
    bool operator<(string& x)
    void operator+(string& x)
    void operator+(char* x)
    void operator+(double x)
    void del(int startint len)
    void insert(int startstring& x)
    int find(string& x)
    index of first found occurance or 1 if not
    int replace(string& whatstring& withbool globalfalse)
    returns number of replaces
    int toInt()
    double toDouble()
    int operator(int)()
    char& operator[](int idx)
    void reconstruct()
    char *c_str()
    char *c_bstr()
    void addReturn()


    string ToString(double x1int pr1)






























    转换带整数
    转换带数数字


    返回字符串c语言指针
    返回宽字节指针
    末尾增加换行符号



    字符串数组
    class gStringArray
    函数格式
    说明
    void *InnerData1

    void Append(const string s1)
    末尾增加字符串
    void Append(double x1)
    末尾增加字符串户传递数字
    int GetCount()
    获取字符串数
    string Index1(int i)
    取第i字符串
    int ShowMessage()
    显示话框第字符串信息接钮标签钮面空白字符串户第钮返回0次类推超时返回1

    操作数函数数集
    class gDataSet
    函数格式
    说明
    void *InnerData1

    double AddLastResult(double Value1)
    返回结果累加值
    double AssignValue(double Value1)
    返回结果赋值
    int CurrentMode()
    返回前运行模式
    string getParameters(int i)
    返回第i参数
    第0参数调事件类型名称例保存:Event_BeforeCollectData审核Event_Audit第二参数辅助类型例新增保存时Insert修改保存时Update审核Audit
    int GetCount()
    返回数集记录数
    int GetRow()
    返回前记录索引号
    int GetLastError()
    返回错误代码
    int GetFieldOrder
    (char *FieldNameint Type1)
    获取字段序号type11表示获取清单中列位置
    int CreateFields(char *ExpressionX)
    表达式创立显示字段请见文档更详细局部
    double newGetL2(int i)
    返回第i字段值
    double newGet2(char *FieldName)
    返回字段值
    string newGetX4(char *FieldsX)
    返回字段值字符串形式
    double GetExchange
    (double TotalChangeint OpCode)
    转换金额TotalChange币值OpCode见开发选项
    double newGetTax
    (double TotalChangeint OpCode)
    计算金额TotalChange税额OpCode见开发选项
    void newXSet(char *ExpressionXint i)
    计算表达式值然赋值第i字段
    void newSet2
    (char *FieldNamedouble Value1X)
    字段赋值
    void newSetL2(int L1double Value1X)
    第i字段赋值
    int newSetX4
    (char *FieldNameconst string s1)
    字符串赋值字段
    double Sum2
    (char *FieldNamechar *Express1)
    清单集统计表达式值
    double Sum2AndSet
    (char *FieldName0char *FieldNamechar *Express1)
    清单集统计表达式值值赋字段FieldName0
    int gSize1()
    模式1取前记录尺寸
    char *gCstr1()
    模式1取前记录指针字符指针形式返回
    int GetCol()
    取清单前列
    int MoveTo(int i)
    移动第i条记录超出记录集范围返回负数
    int NextRow()
    移动条记录超出记录集范围返回负数
    double CallFunction(char *FunctionName)
    调部函数
    double Calculate2(char *Express1)
    表达式值
    double Calculate2AndSetValue
    (char *FieldNamechar *Express1)
    表达式值赋值字段FieldName
    double TermLeftSum
    (char *ItemNameint time1char *timeStringint OpCodeX)
    计算余额OpCodeX见开发选项
    double CurrentAmount2(char *ItemName)
    调TermLeftSum256计算数量
    double CPML()
    计算预收款余额
    double DT(char *TableNamechar *Express1)
    数库表单统计表达式值
    int Update_1(const gStringArray ds1)
    数库更新更新记录值字符串数组中字段值连续位置末尾空白字符串
    double SQL(const string s1)
    执行sql语句
    返回结果双精度double类型实数果需返回查询般*开头例"*Select Count(*) From ……"果返回数集面模式IV获结果
    int Run()
    户写代码放置该函数
    int bpInsert(int OpCode1)
    记录输入数库
    string SQLC
    (char *cn1char *fn1int OpCode1)
    获取查询条件cn1表单名fn1查询字段列表空时默认字段 OpCode1参数参见HqueryParameters参数
    int InputDate
    (int opcode1int *t1int *t2)
    户输入时间段
    opcode1参数请参数表中测试t1t2时间字段址代码例:
    int t1t2
    int ret1InputDate(0&t1&t2)
    if(ret10)
    { return 0
    }




    int gPrintRow()
    返回前印行
    void gSetTextPrint(iB1s2)
    第i行 列名B1〞单元格设置字符串s2
    void gAdd(gDataSet &ds1int At1)
    前数集增加数记录ds1放置位置i注意ds1必须前数集表单数
    i1时放末尾
    void gDelete(int At1)
    删数集中放置起点At1记录


    附录3 OAERP事件类型览表


    图中符号
    事件名称
    发生点
    A
    NameEvent_BeforeCollectData
    说明 收集窗口编辑框数前发生
    getParameters(1)InsertUpdate
    注意返回1指示操作失败
    客户端
    B
    NameEvent_BeforeSave
    说明 保存数前发生
    getParameters(1)InsertUpdate
    注意返回1指示操作失败
    客户端
    C
    NameEvent_Audit
    说明 审核前发生
    getParameters(1)Audit
    注意返回1指示操作失败
    客户端
    D
    NameEvent_Delete
    说明 删前发生
    getParameters(1) Delete
    注意返回1指示操作失败
    客户端
    X
    NameAfterNewSave
    说明 新增单发生
    getParameters(1)InsertUpdate
    注意返回1指示操作失败
    效劳器
    Y
    NameAudit
    说明 审核单发生
    getParameters(1) Audit
    注意返回1指示操作失败
    效劳器
    Z
    NameFinish
    说明 单处理完毕发生
    getParameters(1)
    注意返回1指示操作失败
    效劳器
    L
    NameEvent_FlowSave
    说明 动产生前发生
    getParameters(1) Flow
    效劳器

    NameEvent_Retrive
    数读取事件
    注意返回1指示系统记录返回记录集合中掉
    客户端
    NameEvent_Delete
    删事件
    注意返回1指示操作失败
    客户端
    NameEvent_Click
    点击窗口中记录发生事件
    注意返回1指示操作失败
    客户端
    NameEvent_WastRate
    损耗率事件 计算物料获取损耗率时发生
    getParameters(1) 取料量
    BOM清单设置效
    Name C++代码(处理数集)
    印数集处理事件
    注意返回1指示系统记录返回记录集合中掉
    印中发生
    Name C++代码(处理显示行)
    印数集显示信息处理事件
    注意返回1指示系统记录返回记录集合中掉
    〔印事件说明例见印设置局部〕
    印中发生

    〔1〕事件参数说明
    string getParameters(int i) 返回第i参数
    第1参数〔i0〕调事件类型名称
    保存事件:Event_BeforeCollectData审核事件Event_Audit
    第2参数(i1)辅助类型例新增保存时Insert修改保存时Update审核Audit
    明确测试结果

    〔2〕事件中返回负数继续标志例L事件返回1Z事件继续
    删Event_Delete事件途删前单前相关单标记例户设置某单统计标记单删前恢复原始单标记字段初始状态便次产生单时然会遗漏

    损耗率Event_WastRate事件意义计算料时订单数量越损耗越具体数企业验定
    1 string s1getParameters(1)
    2 double ma1s1toDouble()
    3 if(ma1>1000)
    4 { SetResult(001)
    5 }
    6 else if(ma1>500)
    7 { SetResult(01)
    8 }
    代码注释:
    L1 取参数1保存料量
    L2 字符串转换数字
    L47 根量设置结果

    灵活运事件呢?
    说OAERP新增客户时动建立应收应付账款科目功强实利新增事件者数流程事件解决问题时利删事件做清理工作
    印事件

    印局部详细说明例请见手册印局部

    附录4 CC++根底
    行业C语言C++认语言C++包容C合法C程序动合法C++程序
    OAERP根变量
    类型
    意义
    Int
    整数
    double
    数(浮点数)
    string
    字符串(c++标准)
    gStringArray
    字符串数组(元素字符串)
    gDataSet
    数集(数库存表单窗口者清单条条记录)
    注1系统长整数long32位台long等价int
    注2系统重数g开头(gene基)
    1 完整CC++程序
    int main()
    {
    int i1
    int j2
    int xi+j
    printf(xdx)
    return 0
    }
    里 条代码花括号中完成功
    (1) 定义整数i赋值1
    (2) 定义整数j赋值2
    (3) 定义整数xij赋值
    (4) cc++标准函数显示出x值运行结果
    x3
    功main标记 CC++语言中完整功代码片断做〞函数〞里main函数 函数CC++语言中占重位做函数独立CC++程序必须函数程序执行函数开始函数末尾结束终止
    例计算机程序样执行程序代码
    2 函数完整规定
    标准委员会AnsiPOSX规定 函数面局部组成
    int fun(int ichar *buff)
    {
    ……
    }
    里Fun称函数名第int表示函数应该返回整型数值园括号中东西表示函数接收参数 里定义两参数整形变量i字符型变量buff
    假设规定函数该返回整数值实际代码没返回值函数非法 规定函数接受两参数传参数数者类型非法
    然灵活面 例函数希接受整数传数标准委员会AnsiPOSX规定 应该实际执行代码中转换规定类型 果转换代码合法代码
    例面种函数代码正确
    (1) int xfun(2〞good morning〞)
    (2) double xfun(233NULL)

    3 C++根底
    行业C语言C++认语言C++包容C合法C程序动合法C++程序
    OAERP支持CC++ 例数集〔gDataSet〕概念重概念C++实现里说明什数集
    OAERP支持数集gDataSet户处理条记录者条记录者窗体代表字段编辑框集合者网格清单中行
    系统定义需理解非常重时候交错操作数集
    数集定义:
    class gDataSet
    { void * InnerData
    int CurrentMode()
    int GetRow()
    double newGetL2(int LX)
    void newXSet(char *ExpressionXint LX1)
    void newSet2(char *FieldNamedouble Value1X)
    string newGetX4(char *FieldsX)
    int newSetX4(char *FieldNamechar *s1)
    ………………
    int Run()
    }
    里蓝色局部数类型数红色局部数类型提供种处理里举类似例子说明:
    class 音乐系学生
    { int 学生编号
    int 提琴
    int 钢琴
    int 鼓
    int 指定某(int 编号)
    int 学生()
    void 演出提琴(char* 点int 时间)
    void 演出钢琴(char* 点int 时间)
    ………………
    int 演出场音乐会(char* 投资char* 点int 时间)
    }

    class 美术系学生
    { int 学生编号
    int 画板
    int 指定某(int 编号)
    int 学生()
    void 画幅作品(char* 点int 时间)
    ………………
    int 组织场作品展览会(char* 投资char* 点int 时间)
    }

    class 雄鹰
    { int 雄鹰
    int 飞翔(int 编号)
    int 学飞翔技巧(char* 点)
    int 捕获猎物(char* 点int 时间)
    ………………
    int 表演飞翔(char* 点int 时间)
    }
    例C++中数抽象成标准类型类型C++中标准数结构类〔class〕
    类数功做成员函数仅仅该类效例:
    音乐系学生 x1
    美术系学生 x2
    雄鹰 x3
    (体育馆)
    x2组织场作品展览会(尔盖茨纽约)
    (非洲草原)
    里定义3变量x1x2x3分音乐系学生〞美术系学生〞雄鹰〞然分完成件事情方法:
    变量函数(参数)
    面代码
    x3 画幅作品(非洲草原)
    雄鹰数类型中没画幅作品功〔函数〕
    数类型预先规定方法

    OAERP系统带3常数结构
    string 标准字符串类
    gStringArray 串类数组
    gDataSet 记录集合〔条记录提供MoveToNextRow等方法〕
    果深入解OAERP编程需熟练3类常方法
    StringC++标准字符串类gStringArray字符串数组gDataSetOAERP提供处理记录操作窗体编辑框操作清单类

    4 调试C++程序
    推荐Borland C++编译器中调试型程序
    OAERP调试程序十分方便操作方法
    〔1〕翻开户C语言程序〞选中记录者直接编写程序
    〔2〕翻开需加载段程序窗口
    〔3〕左树选择条记录右键选择调试功〞
    〔4〕者清单表头右键选择调试功〞
    〔5〕选择代码加载象运行

    结果请窗口底部提示框

    5CC++程序组织
    系统允许户字段增加段CC++程序段CC++代码系统执行时会嵌入main函数 说面终执行局部
    int main()
    {
    户写代码局部
    return 0
    }
    (说户书写完整局部必须头尾系统会动加)
    系统开放列函数供户处理业务

    §8 函数指针动态链接库
    1 加载动态链接库三关键函数
    HINSTANCE LoadLibrary(char*)
    void FreeLibrary(HINSTANCE)
    int GetProcAddress(HINSTANCEchar*)
    2 例:
    测试dll函数
    简单说明SimpleDlldll放入c根目录面测试面代码
    typedef void (DllFun)(char*)
    string s1C\\SimpleDlldll
    HINSTANCE hI1LoadLibrary(s1c_str())
    if(hI1NULL)
    { printf(载入SimpleDlldll失败)
    return 1
    }
    DllFun *f1(DllFun *)GetProcAddress(hI1_Say)
    if(f1NULL)
    { printf(查找函数Say失败)
    FreeLibrary(hI1)
    return 2
    }
    f1(anybady here)
    FreeLibrary(hI1)
    return 0

    3 传递64位整数__int64
    眼OAERP支持64位整数__int64DLL库双传递参数呢?
    技巧两int32+3264 者double(8B64位)
    例DLL中函数原型:__int64 xxx(__int 64)面函数换
    double yyy(int x1int x2)
    int xa[2]
    double ret64yyy(xa1xa2)
    int *xb(int*) ret64
    里方法笨拙点正常工作暂时效解决问题然尾数机器面调yyy(xa2xa1)
    4 函数指针
    函数指针处理面Dll例样加载动态链接库直接取函数址面例
    函数指针例
    typedef double (scFun1)(double t1)
    scFun1 *f1
    f1cos
    double x1f1(1)
    double x2cos(1)
    printf(x1fx2fx1x2)

    §9 产生提成表程序
    企业较复杂提成方案根业绩提成工程理根业务员提成提成面企业动产生提成表〔供工资计算动〕代码放桌面〔C++钮〕
    段代码函数户输入时间段户输入查询条件SQL语句返回数集空白数集录入数库等代码
    暂扣提成补发
    int ijk
    string SQL1SQL2SQL3TempS
    string DSQ0DSQ1DSQ2DSQ3DSQ8
    string ts2
    接收录入查询象面板
    string SinputSQLC(HEmployeeSalaryCode1)

    判断否选择正确日期果日期正确提示重新选择否动退出动退出
    int t1t2j1
    int ret1InputDate(0&t1&t2)
    if (ret10) {return 1}
    while (t1<0 || t2<0)
    {
    gStringArray SA1(this)
    string s1警告没选择正确起始日期重新选择日期确定退出放弃
    SA1Append(s1)
    SA1Append(确定)
    SA1Append()
    SA1Append(放弃)
    j1SA1ShowMessage()
    if(j11) return 1
    ret1InputDate(0&t1&t2)
    if (ret10) {return 1}
    }

    构造通查询SQLDSQ局部
    string DSQ From tblSaleProportionScalingItems Where
    DSQ+ CommissionType<>20005
    string DSQ MainCode In (Select Code From tblSaleProportionScaling Where
    DSQ+ OpTime>
    DSQ+t1
    DSQ+ And OpTime<
    DSQ+t2
    DSQ+)
    构造通查询SQL局部

    构造应提销售提成员列表数集DS1
    DSQ1Select * From HEmployee Where
    DSQ1+Sinput
    DSQ1+ And Code In (Select uLitigant From tblSaleProportionScalingItems Where
    DSQ1+DSQ
    DSQ1+ And Code Not in
    DSQ1+ (Select SaleItemsCode From tblSaleProportionScalingItems Where CommissionType20005)
    DSQ1+ And CommissionType<>20005
    DSQ1+)

    gDataSet ds1(this4DSQ1c_str())
    printf(DSQ1sDSQ1)
    构造应提销售提成员列表数集DS1

    判断数集DS1数果数集空值弹出提示框退出程序
    int count1ds1GetCount()
    printf(count1dcount1)
    if(count1<00001 )
    {
    gStringArray SA1(this)
    string s1提示前期间没数没提成明细数者提成已全部完成
    SA1Append(s1)
    SA1Append(放弃)
    SA1Append()
    SA1Append()
    j1SA1ShowMessage()
    if(j10)
    { return 0
    }
    }
    判断数集DS1数果数集空值弹出提示框

    应提成销售员进行统计
    int i0j0
    for(i0i{
    ds1MoveTo(i)
    构造应提成提成明细数集DS2
    DSQ2Select * From tblSaleProportionScalingItems Where
    DSQ2+ uLitigant
    DSQ2+ds1newGet2(Code)
    DSQ2+ And
    DSQ2+DSQ
    DSQ2+ And Code Not In (Select SaleItemsCode from tblSaleProportionScalingItems Where CommissionType20005
    DSQ2+)
    DSQ2+ And CommissionType<>20005
    printf(DSQ2sDSQ2)
    gDataSet ds2(this4DSQ2c_str())
    int count2ds2GetCount()
    printf(应提成明细数集数dcount2)
    构造应提成销售明细数集DS2

    判断数集DS2数果数集空值弹出提示框退出程序
    if(count2<00001 )
    {
    gStringArray SA1(this)
    string s1提示姓名:
    s1+ds1newGetX4(Name)
    s1+职员前期间没数没提成明细数者提成已全部完成
    SA1Append(s1)
    SA1Append(确定)
    SA1Append(放弃)
    SA1Append()
    SA1Append()
    j1SA1ShowMessage()
    if(j11)
    { return 0
    }
    }

    构造前提成率数集DS2
    float x0 y0z0z10
    for(k0k { ds2MoveTo(k)
    x+ds2newGet2(uTobeSummoneyX)ds2newGet2(SummoneyX)
    }

    根累计销售率匹配相应销售提成率结束
    gDataSet ds3(this6tblSaleProportionScaling)
    ds3newSet2(Nameds1newGet2(Code))
    ds3newSet2(CommissionType20005)
    ds3newSet2(Departmentds1newGet2(Department2))
    ds3newSet2(OpTimet1)
    ds3newSet2(Finish1t2)
    ds3newSet2(PieceAmountx)
    ds3bpInsert(2)
    for(j0j { ds2MoveTo(j)
    gDataSet ds4(this6tblSaleProportionScalingItems)
    ds4newSet2(MainCodeds3newGet2(Code))
    ds4newSet2(ClientIDds2newGet2(ClientID))
    ds4newSet2(Productds2newGet2(Product))
    ds4newSet2(Summoneyds2newGet2(uTobeSummoneyX)ds2newGet2(SummoneyX))
    ds4newSet2(Amountds2newGet2(Amount))
    ds4newSet2(Priceds2newGet2(Price))
    ds4newSet2(RateX1(ds2newGet2(SummoneyX)ds2newGet2(uTobeSummoneyX)))
    ds4newSet2(uTobeSummoneyXds2newGet2(uTobeSummoneyX)ds2newGet2(SummoneyX))
    ds4newSet2(SummoneyXds2newGet2(uTobeSummoneyX)ds2newGet2(SummoneyX))
    ds4newSet2(MainCodeXds2newGet2(MainCodeX))
    ds4newSet2(SaleItemsCodeds2newGet2(Code))
    ds4newSet2(CommissionType20005)
    ds4newSet2(uLitigantds1newGet2(Code))
    ds4bpInsert(2)
    }
    string s1Update tblSaleProportionScaling Set uTobeWage
    s1+z1
    s1+Wage
    s1+z
    s1+RateX
    s1+zx
    s1+ Where Code
    s1+ds3newGet2(Code)
    SQL(s1)
    }


    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 24 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    《安装软件》教学设计

    一、教材分析本课选自苏教版《小学信息技术(上册)》第23课第二节。安装使用共享软件是学生利用网络资源的一项重要内容,同时也对经后日常管理和维护电脑软件起到了铺垫作用。因此本课的重点、也是本册教材...

    2年前   
    478    0

    高级软件测试工程师的基本职责

    高级软件测试工程师的基本职责职责:1、负责产品或项目测试需求分析,测试用例设计和测试脚本编写;2、负责大数据测试环境搭建、管理,测试方案的设计,数据测试工具及脚本开发;3、负责相关测试执行,包...

    2年前   
    499    0

    高级软件测试工程师的具体职责

    高级软件测试工程师的具体职责职责:1、根据产品需求和设计文档,制定测试计划和测试方案,独立完成项目系统的测试,并提升测试效率和产品质量;2、网站(Web端/移动端)核心业务功能测试和接口测试,...

    2年前   
    628    0

    高级软件测试工程师的工作职责说明

    高级软件测试工程师的工作职责说明职责:1、编写性能测试计划、规划详细的测试方案、编写测试用例;2、根据测试计划搭建和维护测试环境;3、执行性能测试工作,负责功能产品的性能稳定性测试。进行性能基...

    2年前   
    438    0

    高级软件测试工程师的职责

    高级软件测试工程师的职责职责:1、承担公司软件产品(Web\Android\iOS等)的功能测试、用户体验测试工作,负责自动化测试、性能测试和持续集成实践相关工作2、根据产品规格和测试需求,编...

    2年前   
    489    0

    高级软件工程师职位说明书

    高级软件工程师职位说明书  岗位描述:  1、高级专业技术人员职位,独立负责工作小组,给下级成员提供引导或支持并监督他们的日常活动;  2、参与软件产品项目规划工作,制定具体项目实施方案;  ...

    10年前   
    598    0

    实施OA-ERP项目计划书

     xxx省xxx集团 实施OA-ERP项目计划书 目 录 第一章 概述 1 1.1 ERP概念 1 1.2 E...

    9年前   
    4243    0

    软件课程设计心得

    软件课程设计心得第一篇:软件课程设计心得软件工程课程设计课程设想心得体味,这也激起了我尔后勤奋进修的乐趣,我想这将对我以后的进修发作主动的影响。其次,此次课程设想让我充实熟悉到团队协作的主要性...

    10年前   
    703    0

    软件课程设计心得

    软件课程设计心得  软件工程课程设计课程设想心得体味,这也激起了我尔后勤奋进修的乐趣,我想这将对我以后的进修发作主动的影响。其次,此次课程设想让我充实熟悉到团队协作的主要性,只要合作协作才干保...

    11年前   
    993    0

    国标软件设计文档——软件构架文档

    <项目名称>软件构架文档版本 <1.0>[注:以下提供的模板用于 Rational Unified Process。其中包括用方括号括起来并以蓝色斜体(样式=InfoBlue)显示的文本,它们...

    10年前   
    797    0

    软件设计过程实验报告

     软件开发过程 实验一 软件需求分析 一、目的和意义 对本书第二和三章的内容做进一步的掌握,写出软件需求规格说明书。为下面的实习奠定基础。 二、实习内容 1、确定软件题目(学生可...

    11年前   
    20045    0

    软件工程分析与设计

    软件工程分析与设计 选择 1.1 问题解决和决策 在现阶段,介绍杜威在1910年首先阐述的一种解决问题的结构方法是很有益处的。约翰杜威确定的阶段是:问题是什么?可供选择的办法由那些?...

    5年前   
    970    0

    电气设计软件立项报告

    最初的电气设计对下游的元件采购、装配和生产都将产生巨大的影响。我所技术部门一直使用非专业的绘图软件Microsoft Visio和AutoCAD做电气设计,工程师们不得不把大量的工作时间耗费在如...

    6年前   
    1429    0

    软件设计基本原则

    软件基本设计原则l 友好、简洁的界面设计l 结构、导向清晰,符合国际标准l 强大的综合查询l 信息数据共享l 方便及时的信息交流板块l 准确、可逆的科技工作流模块支持l 良好的开放性和可扩展性...

    1年前   
    387    0

    高级软件测试工程师工作的岗位职责

    高级软件测试工程师工作的岗位职责职责:1.负责CS iOS、Android、Web端自动化2. 根据产品功能描述、交互图、流程图撰写自动化测试用例;3. 协助开发人员重现问题、寻找重现规律和总...

    2年前   
    465    0

    中高级软件测试工程师的职责内容

    中高级软件测试工程师的职责内容职责:1. 负责根据产品的需求与设计编写测试计划,设计测试数据和测试用例;2. 负责测试环境的搭建,执行测试;3. 负责产品的集成测试与系统测试,并对产品功能、性...

    2年前   
    309    0

    《高级语言程序设计》实验报告

    1.掌握在Visual C++6.0环境下C程序的建立、编辑、编译和执行过程。2.掌握C程序的最基本框架结构,完成简单程序的编制与运行。3.了解基本输入输出函数scanf()、printf ()...

    2年前   
    441    0

    《高级语言程序设计》实验报告

    设计一种用单链表存储多项式的结构(每个结点存储一项的系数和指数,类型都为int)并编写一个产生多项式链表的函数和一个实现两个多项式相加和相乘的函数。

    5年前   
    3511    0

    软件项目管理之学生管理系统课程设计

     课程设计课程名称:软件项目管理 设计题目:学生管理系统项目工作计划 学 院:信息工程与自动化学院 ...

    1年前   
    401    0

    软件工程学生选课系统课程设计

    网上选课系统课程设计手册团队: 学校: 队长: 时间:2014目 录1. 项目概述 ………………………………………………………………………31.1开发背景 …………………………………………...

    3年前   
    623    0

    文档贡献者

    静***雅

    贡献于2021-08-19

    下载需要 24 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档