K3老单开发-销售订单计算比例(实际价格反推)

最近碰到了销售订单中,字段间信息计算的问题,

问题描述:

销售订单中,产品的目录单价、数量为人工进行填写,但是业务流程中,价格填写模式为:销售合同回来-目录价格-下浮比-实际价格

销售订单的实际价格为锁定模式,不能人为进行编辑,故导致了合同录入人员在录入过程中需要人工计算下浮比且小数点后位数控制困难;

解决方案:

  1.在数据库中将【实际单价】字段解锁;

update ictemplateentry set  FEnable=48 where FHeadCaption=‘实际含税单价‘ and FCtlOrder=27 and    FCtlIndex=18
--ictemplateentry 表示老单中所有表中分录体中的字段信息,FEnable控制字段的输入模式及类型(0-表示锁定,48表示可以输入)

  2.开发插件,根据老单插件说明进行开发,主要涉及到字段间关联的信息及列总和的更新;代码如下

‘定义插件对象接口. 必须具有的声明, 以此来获得事件
Private WithEvents m_BillTransfer   As k3BillTransfer.Bill

Public Sub Show(ByVal oBillTransfer As Object)

    ‘接口实现
    ‘注意: 此方法必须存在, 请勿修改
    Set m_BillTransfer = oBillTransfer

End Sub

Private Sub Class_Terminate()

    ‘释放接口对象
    ‘注意: 此方法必须存在, 请勿修改
    Set m_BillTransfer = Nothing

End Sub

Private Sub m_BillTransfer_GridChange(ByVal Col As Long, ByVal Row As Long, ByVal Value As Variant, ByVal bNewBill As Boolean, Cancel As Boolean)

    ‘TODO: 请在此处添加代码响应事件 GridChange
Dim Colu As Integer  ‘‘27
‘‘Colu = 27   ‘‘实际含税单价
Dim FColu As Integer   ‘‘21
‘‘FColu = 21   ‘‘ 含税单价
Dim TaxCol As Integer   ‘‘24
‘‘TaxCol = 24   ‘‘折扣率

Dim FmoCol As Integer ‘‘金额列数
Dim FunDcol As Integer  ‘‘单位折扣额列数
Dim FAcol As Integer  ‘‘折扣额列
Dim Famt As Integer  ‘‘项销金额列
Dim Fall As Integer ‘‘价税合计列
Dim FqCol As Integer  ‘‘数量列
Dim FceCol As Integer  ‘‘税率列

Dim Fauxqty As Integer  ‘‘数量
Dim FCess As Integer ‘‘税率

Dim FAuxTaxPrice As Double    ‘‘含税单价
Dim FTaxRate As Double      ‘‘折扣率
Dim FAuxPriceDiscount  As Double   ‘‘实际含税单价
Dim Famount As Double   ‘‘金额
Dim FUniDiscount As Double  ‘‘单位折扣额
Dim FTaxAmount As Double  ‘‘折扣额
Dim FTaxAmt As Double  ‘‘销项金额
Dim FAllAmount As Double  ‘‘价税合计
Dim FFAllAmount As Double  ‘‘总合计
Dim FFTaxAmount  As Double ‘‘折扣合计
Dim FFTaxAmt As Double        ‘‘项销合计
Dim i As Integer
Dim j As Integer

Dim Alter(2) As Variant
Dim TEntryCtl As Variant
Dim FBool As Boolean
 TEntryCtl = m_BillTransfer.EntryCtl

        For i = 1 To UBound(TEntryCtl)
            If UCase(TEntryCtl(i).FieldName) = UCase("FAuxPriceDiscount") Then
            Colu = i
            ElseIf UCase(TEntryCtl(i).FieldName) = UCase("FAuxTaxPrice") Then
            FColu = i
            ElseIf UCase(TEntryCtl(i).FieldName) = UCase("FTaxRate") Then
            TaxCol = i
              ElseIf UCase(TEntryCtl(i).FieldName) = UCase("Famount") Then
            FmoCol = i
              ElseIf UCase(TEntryCtl(i).FieldName) = UCase("FUniDiscount") Then
            FunDcol = i
              ElseIf UCase(TEntryCtl(i).FieldName) = UCase("FTaxAmount") Then
            FAcol = i
              ElseIf UCase(TEntryCtl(i).FieldName) = UCase("FTaxAmt") Then
            Famt = i
             ElseIf UCase(TEntryCtl(i).FieldName) = UCase("FAllAmount") Then
            Fall = i
            ElseIf UCase(TEntryCtl(i).FieldName) = UCase("Fauxqty") Then
            FqCol = i
            ElseIf UCase(TEntryCtl(i).FieldName) = UCase("FCess") Then
            FceCol = i
            End If
            Next

             If Col = Colu Then

             ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘赋值过程
             FAuxPriceDiscount = m_BillTransfer.GetGridText(Row, Colu)  ‘‘实际含税单价
             FAuxTaxPrice = m_BillTransfer.GetGridText(Row, FColu)    ‘‘含税单价
             Fauxqty = m_BillTransfer.GetGridText(Row, FqCol)    ‘‘数量
             FCess = m_BillTransfer.GetGridText(Row, FceCol)    ‘‘税率

             ‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘计算过程
             FTaxRate = (1 - FAuxPriceDiscount / FAuxTaxPrice) * 100  ‘‘折扣率
             Famount = FAuxPriceDiscount * Fauxqty / (1 + FCess / 100) ‘‘金额=实际含税单价*数量/1.13
             FUniDiscount = FAuxTaxPrice * FTaxRate / 100 ‘‘单位折扣额=含税单价*下浮
             FTaxAmount = FUniDiscount * Fauxqty   ‘‘折扣总额=折扣额*数量
             FTaxAmt = Famount * FCess / 100   ‘‘销项税额=金额*税率
             FAllAmount = FAuxPriceDiscount * Fauxqty   ‘‘价税合计=实际含税单价*数量

             FBool = m_BillTransfer.SetGridText(Row, TaxCol, FTaxRate)
             FBool = m_BillTransfer.SetGridText(Row, FmoCol, Famount)
             FBool = m_BillTransfer.SetGridText(Row, FunDcol, FUniDiscount)
             FBool = m_BillTransfer.SetGridText(Row, FAcol, FTaxAmount)
             FBool = m_BillTransfer.SetGridText(Row, Famt, FTaxAmt)
             FBool = m_BillTransfer.SetGridText(Row, Fall, FAllAmount)

             For j = 1 To 100

             Alter(0) = m_BillTransfer.GetGridText(j, FAcol)
             If Alter(0) = "" Then
             FFAllAmount = FFAllAmount
             Exit For
             ElseIf Alter(0) > 0 Then
             FFAllAmount = FFAllAmount + Alter(0)
             End If
             Next

             FBool = m_BillTransfer.SetSumGridText(1, FAcol, FFAllAmount)

               For j = 1 To 100

             Alter(1) = m_BillTransfer.GetGridText(j, Fall)
             If Alter(1) = "" Then
             FFTaxAmount = FFTaxAmount
             Exit For
             ElseIf Alter(1) > 0 Then
             FFTaxAmount = FFTaxAmount + Alter(1)
             End If
             Next

             FBool = m_BillTransfer.SetSumGridText(1, Fall, FFTaxAmount)

               For j = 1 To 100

             Alter(2) = m_BillTransfer.GetGridText(j, Famt)
             If Alter(2) = "" Then
             FFTaxAmt = FFTaxAmt
             Exit For
             ElseIf Alter(2) > 0 Then
             FFTaxAmt = FFTaxAmt + Alter(2)
             End If
             Next

             FBool = m_BillTransfer.SetSumGridText(1, Famt, FFTaxAmt)

             End If

End Sub

编程中值得注意的问题:

  1)老单取分录体中的字段运用的变量主要为数组形式,但在声明过程中声明为未知变量即可,在程序中运用For语句进行列索引值的查询,将列名与字段名称运用转换为大写判定是否相同,方法如下:

 For i = 1 To UBound(TEntryCtl)
            If UCase(TEntryCtl(i).FieldName) = UCase("FAuxPriceDiscount") Then
            Colu = i

            ElseIf UCase(TEntryCtl(i).FieldName) = UCase("FCess") Then
            FceCol = i
            End If
            Next

  2)运用For循环更新结合SetSumGridText函数进行求和数据的更新;

本插件较为简单,但在开发过程中有些地方确实未考虑清楚,考虑清楚后实现较为容易!!!

原文地址:https://www.cnblogs.com/caipanlong123/p/11362777.html

时间: 2024-08-29 08:21:12

K3老单开发-销售订单计算比例(实际价格反推)的相关文章

未清销售订单及预测的所有工序物料需求(按BOM展开不考虑已发料)

--按截止日考虑库存分配(所有物料及工序) DECLARE @dueDate DATETIME --截止交期 SELECT @dueDate = T0.T_DueDate FROM OFPR T0 WHERE T0.T_DueDate = [%0] SELECT @dueDate = '[%0]' --------------------------------------------------------------------------------------------- -- ===

电子面单开发流程

电子面单开发流程 开放平台开发(登录.注册.登记,接口API和文档界面展示) 外网文档资格申请界面(查询.发送邮件.审核动作.删除) 电子面单平台界面(增删改查) 电子面单单号类型维护表(增删改查,方便后期统计) 网点客户信息维护界面开发(增删改查.审核.查余额.修改密码.发送短信通知) 网点自己充值(网点余额增加,余额变化记录增加一条数据,事务提交) 网点给客户充值(网点余额减少,余额变化记录增加一条数据,充值记录增加一条数据,事务提交) 网点给客户充值生成单号明细是一个服务程序(发放记录需要

[SAP ABAP开发技术总结]SD销售订单定价过程

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 16.3.2.     定价过程... 141 16.3.2.1.           条件技术七要素... 141 16.3.2.2.           条件表V/03.V/04.V/05. 142 16.3.2.3.           存取顺序 V/07. 142 16.3.2.4.           条件类型 V/06. 142 16.3.2.5.      

如何提高码农产量,基于java的web快速开发平台之自定义表单开发随笔

老板 :下班前一定写完? 程序猿:可以,下班前能一定给! 第二天早上上班~~~ 老板:这都第二天了,怎么没写完? 程序猿:我还没有下班呢! 哎!程序猿的痛啊 公司上线的项目有不少销售记录表,又是报价单,又是仓储表,还有什么请假单之类的.一开始,还觉得不就一些表单吗,有什么难的.结果,实际进行起来,才发现,字段什么的是不难,难的是整体的架构啊!每张表的架构都不一样,又不能套用,每个控件的布局啊,表格的宽度和高度,都要自己慢慢去试.这样就非常麻烦了,在开发了几张表单之后,我真的是有些难以忍受了. P

流程管理中WEB表单开发服务需求分析及设计思路

在流程管理应用中,BPM产品所提供的表单设计工具,主要是面向开发人员的.而一些办公系统产品所提供的表单设计工具,受自身平台限制,无法在大型定制化应用中使用.在此通过对用户需求分析,提出WEB表单开发服务设计思路. 一.需求分析 现如今,在创新与改革社会环境推动下,办公管理系统的管理需求变化已经是常态了,如何让信息系统快速响应支撑管理需求的多变,已经成为使信息化建设和运维人员头痛的事情.特别是在一些大型企事业单位,快速支撑需求更突出.而原有信息系统很难适应这样的需求,必须走创新的路来解决这些需求,

销售订单、外向交货单、交货 bapi

转自[http://www.cnblogs.com/elegantok/archive/2009/10/18/1585398.html]***********SALES ORDER INPUT CREATION. REPORT soi. PARAMETERS: p_auart TYPE auart OBLIGATORY.PARAMETERS: p_vkorg TYPE vkorg OBLIGATORY.PARAMETERS: p_vtweg TYPE vtweg OBLIGATORY.PARAM

BAPI 修改销售订单的方法 ‘BAPI_SALESORDER_CHANGE’

(原创)BAPI 修改销售订单的方法 ‘BAPI_SALESORDER_CHANGE’ 2009-08-21 16:22:55 分类: Linux sap 标准程序中可以使用VA02来修改销售订单 change sales order,也可以在程序中调用BAPI来更改订单(如物料编号material,订购数量 order quantity等),用到的函数是 BAPI_SALESORDER_CHANGE.sap bapi Explorer中的文档.   Method SalesOrder.Chan

销售订单-修改量-高级定价关联sql

修改量消耗明细 --修改量消耗明细 SELECT t.name, t.comments, t.version_no, cux_rebate_pub.get_hou_name(p_organization_id => t.orig_org_id) org_name, ac.customer_name, --ql.amount "限额", -- qlb.limit_balance_id, qlb.consumed_amount "总消耗", qlb.availab

AR_销售订单收款基本操作(流程)

2014-06-04 BaoXinjian 一.步骤 1. 输入销售订单,输入(Enter)-->预定(Book)-->计划(Schedule)-->保留(Reserve) 2. 进行挑库操作, 挑库(Pick Release)-->挑库确认(Pick Confirm) 3. 制作发运单,制作发运单(Create Delivery)-->发运确认(Ship Confirm) 4. 程式停靠接口(Interface Trip Stop) 5. 关闭订单, 启动workflow处