采购价格管控v2

基于价目表,管控物料不可输入

思路

(项目🔶-任务🟥-工作🔺)

  • 🔶价目表/调价表变动

    • 🟥需要流程管控

      • 表头:全为参考价格
      • 明细:添加是否参考价列
    • 🟥不需要流程管控

      • 价格全为参考价格

终点管控

发票价格==价目表价格==采购单价格

字段锁定

this.View.GetControl("F_ZVMG_Text_3iy").Enabled=False;

执行


价目表

检查是否全参考价code

import clr
import sys
clr.AddReference('System')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Newtonsoft.Json')
clr.AddReference('Kingdee.BOS.App')
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.JSON import * 
from Newtonsoft.Json import JsonConvert

from System import *
import System
import System.IO
from Kingdee.BOS.App.Data import *

pName = "保存和提交时检查价格是否相同"

def getDt():
    """  获取时间 """
    current_date = System.DateTime.Now
    date_string = current_date.ToString("MM-dd HH:mm:ss")
    return date_string
    
def myLog(msg):
    """ 写日志到文件 """
    current_date = System.DateTime.Now
    # 格式化输出(例如:2023-11-20)
    date_string = current_date.ToString("yyyy-MM-dd")
    logWriter = System.IO.StreamWriter("d:\jack\debug_output-{}.txt".format(date_string), True)
    # 重定向到文件
    original_out = System.Console.Out
    System.Console.SetOut(logWriter)
    # 4. 使用Console.WriteLine输出(会被重定向到文件)
    System.Console.WriteLine(msg)
    # 恢复并关闭
    System.Console.SetOut(original_out)
    logWriter.Close()

def showObj(obj,desc="obj"):
    """ 显示对象内容 到log文件  """
    
    myLog("{0} {1} dir( {2} ) {3} {1} \t".format(getDt(),  '-'*10,  desc ,type(obj).__name__))
    for i in dir(obj):
        try:
            cobj = getattr(obj,i,None)
        except Exception as e:
            myLog("Error: {}".format(e))
        myLog("  {0} , type == {1} value == {2} ".format(i ,  type(cobj).__name__, cobj      ))
      
#-----------------

 

def AfterDoOperation(e):
    """  事后处理  如加载"""
    tmp = "AfterDoOperation:str(e.Operation) {0} , type.__name__ = {1} value = {2} "
    tmp = tmp.format(str(e.Operation) ,  type(e.Operation).__name__ ,  e.Operation    )
    myLog(tmp)
    #showObj(e,"事后处理 AfterDoOperation ")
    #myLog("刷新 AfterDoOperation {}".format(type(e.Operation).__name__) )
    
    #showObj(e.Operation,"AfterDoOperation e.Operation 是个啥 ")
    # 判断是否为提交操作
    if  e.Operation.Operation in [ "Save" ]:
        myLog("刷新 AfterDoOperation ")
        this.View.InvokeFormOperation("Refresh") #刷新
    
def BeforeDoOperation(e):
    """ 事前处理可拦截 """
    #showObj(e,"事前处理可拦截 BeforeDoOperation")


    tmp = "事前处理可拦截 BeforeDoOperation :str(e.Operation) {0} , type.__name__ = {1} value = {2} "
    tmp = tmp.format(str(e.Operation) ,  type(e.Operation).__name__ ,  e.Operation    )
    myLog(tmp)
    
    
    #showObj(e.Operation,"BeforeDoOperation e.Operation 是个啥 ")
    # 判断是否为提交操作
    if  type(e.Operation).__name__ in [ "Submit","Save"]:
        if 检查是否全参考价(this.View.Model.DataObject) == True:
            myLog("勾选全是参考价 ")
            this.View.Model.DataObject.F_XJPT_CHECKBOX = 1
        else:
            myLog("取消全是参考价 ")
            this.View.Model.DataObject.F_XJPT_CHECKBOX = 0
        return 
        
def 检查是否全参考价(dObj):
    """  返回True/False """
    #showObj(dObj,"价目表表单数据")

    # 输出保存数据
    #msg = "价目表表单数据--》{}\n".format(JsonConvert.SerializeObject(  this.View.Model.DataObject  )) 
    #myLog(msg)
    
    entrys = dObj.PriceListEntry
    lens = len( entrys )
    msg = "明细条目数量 : {}\n".format( lens ) 
    myLog(msg)
    aa=list()
    for ent in entrys:
        # 打印条目
        #msg = "打印条目 :\n {}\n".format(JsonConvert.SerializeObject( ent )) 
        #myLog(msg)
        aa.append(ent.F_XJPT_is_reference)
    msg = "全是 参考价??? : {}\n".format( aa ) 
    myLog(msg)
    if all(aa):
        # 全是 参考价
        return  True
    else:
        return False

    

  • 反审核-UnAudit
  • 提交-Submit
  • 保存-Save
  • 审核-Audit

调价表

审核通过更新价目表code

import clr
import sys
clr.AddReference('System')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Newtonsoft.Json')
clr.AddReference('Kingdee.BOS.App')
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.JSON import * 
from Newtonsoft.Json import JsonConvert

from System import *
import System
import System.IO
from Kingdee.BOS.App.Data import *

pName = "保存和提交时检查价格是否相同"

def getDt():
    """  获取时间 """
    current_date = System.DateTime.Now
    date_string = current_date.ToString("MM-dd HH:mm:ss")
    return date_string
    
def myLog(msg):
    """ 写日志到文件 """
    current_date = System.DateTime.Now
    # 格式化输出(例如:2023-11-20)
    date_string = current_date.ToString("yyyy-MM-dd")
    logWriter = System.IO.StreamWriter("d:\jack\debug_output-{}.txt".format(date_string), True)
    # 重定向到文件
    original_out = System.Console.Out
    System.Console.SetOut(logWriter)
    # 4. 使用Console.WriteLine输出(会被重定向到文件)
    System.Console.WriteLine(msg)
    # 恢复并关闭
    System.Console.SetOut(original_out)
    logWriter.Close()

def showObj(obj,desc="obj"):
    """ 显示对象内容 到log文件  """
    
    myLog("{0} {1} dir( {2} ) {3} {1} \t".format(getDt(),  '-'*10,  desc ,type(obj).__name__))
    for i in dir(obj):
        try:
            cobj = getattr(obj,i,None)
        except Exception as e:
            myLog("Error: {}".format(e))
        myLog("  {0} , type == {1} value == {2} ".format(i ,  type(cobj).__name__, cobj      ))
      
#-----------------
def AfterDoOperation(e):
    """ 捕获所以操作事件 """
    #showObj(e)
    #tmp = "AfterDoOperation:str(e.Operation) {0} , type = {1} value = {2} "
    #tmp = tmp.format(str(e.Operation) ,  type(e.Operation).__name__ ,  e.Operation    )
    #myLog(tmp)
    # 判断是否为提交操作
    if  e.Operation.Operation in  ["Audit"]:
        审核操作(e )
          
          
def BeforeDoOperation(e):
    """ 捕获所以操作事件 """
    #showObj(e)
    tmp = "BeforeDoOperation:str(e.Operation) {0} , type = {1} value = {2} "
    tmp = tmp.format(str(e.Operation) ,  type(e.Operation).__name__ ,  e.Operation    )
    myLog(tmp)
 
    # 判断是否为提交操作
    if  type(e.Operation).__name__ in [ "Submit","Save"]:
        if 检查是否全参考价(this.View.Model.DataObject) == True:
            myLog("勾选全是参考价 ")
            this.View.Model.DataObject.F_XJPT_all_reference = 1
        else:
            myLog("取消全是参考价 ")
            this.View.Model.DataObject.F_XJPT_all_reference = 0
    #//更新界面显示
    this.View.Model.DataObject.Description =  getDt()
    this.View.UpdateView() 
    
def 审核操作(e):
    """  提交操作  
        带 暂估价格过去
        执行存储过程
        
        PUR_PATENTRY.PriceListId. Id   = 242654 #采购价目表
                               .MaterialId.Id   = 121823 #物料id
    """
    err=""
    #this.View.Model.DataObject
    #showObj(this.View.Model.DataObject)
    dObj = this.View.Model.DataObject
    调价表内码 = dObj.Id
    #//更新应付 含税价目
    fsql="/*dialect*/ exec z_oq_审核后同步价目表  {0}  ".format(调价表内码);
    
    inf = DBUtils.Execute(this.Context,fsql);
    myLog(fsql+" 影响 {} 行".format(inf) )
        
def 检查是否全参考价(dObj):
    """  返回True/False 
    调后含税单价  PUR_PATENTRY.UpPrice  调价表明细
    全参考价  F_XJPT_all_reference
    """
    #showObj(dObj,"价目表表单数据")
    
    # 输出保存数据
    #msg = "价目表表单数据--》{}\n".format(JsonConvert.SerializeObject(  this.View.Model.DataObject  )) 
    #myLog(msg)
    #//---
    entrys = dObj.PUR_PATENTRY
    lens = len( entrys )
    msg = "明细条目数量 : {}\n".format( lens ) 
    myLog(msg)
    aa=list()
    for index, ent in enumerate(entrys):
        # 打印条目
        #msg = "打印条目 :\n {}\n".format(JsonConvert.SerializeObject( ent )) 
        #myLog(msg)
        #tmp = " 物料 {0} ,调价后 = {1}  价目表 = {2}  价目表明细 {3} "
        #tmp = tmp.format( ent.MaterialId.Id ,  ent.AfterPrice , ent .PriceListId. Id ,999    )
        #myLog(tmp)
        aa.append(ent.F_XJPT_is_reference)
    msg = "全是 参考价??? : {}\n".format( aa ) 
    myLog(msg)
    if all(aa):
        # 全是 参考价
        return  True
    else:
        return False
     

全参考价判断code


更新价目表值 sql

要更新的价目表

select 价目明细.FMaterialId 物料内码 ,价目明细.FENTRYID  价目明细内码
,	价目明细.FPRICEFROM as 价格来源
, 	价目明细.FPrice as 单价
,  	价目明细.	FRECENTDATE as 最近调价日期
,* 
from T_PUR_PRICELIST 价目表
join T_PUR_PRICELISTENTRY  价目明细 on 价目表.fid = 价目明细 .FID
where 价目表.fid = 242654
and 价目明细.FMaterialId  = 121823

select 调价表.FBillNo 调价表单据编码
, 调价明细.  FMaterialId 物料内码
,调价明细. FPriceListId as 价目表内码 
, 调价明细.FAfterPrice as 调后单价
, 调价明细.F_XJPT_is_reference as 是否参考价
, 价目明细.F_XJPT_is_reference as 价目是否参考价
, 	价目明细.FPrice as 单价
from  T_PUR_PAT 调价表
join T_PUR_PATENTRY 调价明细 on 调价表.fid = 调价明细.fid
join T_PUR_PRICELIST 价目表 on 调价明细.FPriceListId  = 价目表.fid
join T_PUR_PRICELISTENTRY  价目明细 on 价目表.fid = 价目明细 .FID and  调价明细.  FMaterialId = 价目明细.FMaterialId  
where 调价表.fid = 100095
 

应付单

读取价目表价格 sql

参考 z_fxfph存储过程

查询条件

  • 物料

  • 供应商

  • 币别

  • 单据状态 (A-暂存、B-创建、C-审核中、D-已审核、E-重新审核)

  • 生效日期 (不需要了)

物料内码和供应商内部 作为条件去查询


SELECT * FROM ( 
SELECT 
ROW_NUMBER() OVER(ORDER BY  价目表.FCreateDate  desc ) AS 行号 ,
价目表.FNUMBER AS 价目表编码  
,价目表.FSupplierID as 供应商内码
,价目表.FID as 价目表内码
,价目表.FCurrencyID as 币别
,价目表.FDocumentStatus as 单据状态	 
,价目明细.FMaterialId as 物料内码
,价目明细.FTaxPrice as 含税单价	
,价目表.FCreateDate   
from T_PUR_PRICELIST 价目表   
	left join T_PUR_PRICELISTENTRY 价目明细 ON 价目明细.FID = 价目表.FID 
where 价目表.FDocumentStatus = 'C' 
   and 价目表.FSupplierID = 101827 
and 价目明细.FMaterialId = 121791  
and 价目表.FCurrencyID = 1
) TT
WHERE TT.行号 = 1


供应商内码=:101827 币别内码=: 1  物料内码=: 121791 

读取单据中 【供应商内码,币别】【物料内码】

更新价目表含税价 update


ALTER PROCEDURE [dbo].[z_oq_获取应付明细价目表]--  exec z_oq_获取应付明细价目表  148622 , 121823 ,101827 , 1 
@faid int --应付单id
,@fmid int --物料内码id
,@fsid int --供应商id
,@fcid int --币别id
AS
BEGIN

update  应付明细  set  应付明细.F_QINL_JMBDJ = 价目表明细.含税单价
         ,应付明细.F_XJPT_is_reference = 价目表明细.是否参考价
from T_AP_PAYABLE 应付单 
join T_AP_PAYABLEENTRY 应付明细 on 应付明细.fid=应付单.fid
inner join ( 
	SELECT * FROM ( 
	SELECT 
	ROW_NUMBER() OVER(ORDER BY  价目表.FCreateDate  desc ) AS 行号 ,
	价目表.FNUMBER AS 价目表编码  
	,价目表.FSupplierID as 供应商内码
	,价目表.FID as 价目表内码
	,价目表.FCurrencyID as 币别
	,价目表.FDocumentStatus as 单据状态	 
	,价目明细.FMaterialId as 物料内码
	,价目明细.FTaxPrice as 含税单价	
	,价目明细.F_XJPT_is_reference as 是否参考价
	,价目表.FCreateDate   
	
	from T_PUR_PRICELIST 价目表   
	    left join T_PUR_PRICELISTENTRY 价目明细 ON 价目明细.FID = 价目表.FID 
	where 价目表.FDocumentStatus = 'C' -- 已审核
	    and 价目表.FSupplierID = @fsid 
	    and 价目明细.FMaterialId = @fmid  
	    and 价目表.FCurrencyID = @fcid
	) TT
	WHERE TT.行号 = 1
) 价目表明细 on 应付明细.FMATERIALID = 价目表明细.物料内码
where 应付单.FSETACCOUNTTYPE=3  -- 财务应付
and 应付单.fid=@faid

end

执行

exec z_oq_jggk_yfjg 148620 , 121791 , 101827  , 1 
DBUtils.Execute返回的是受影响的行数 
DBUtils.ExecuteScalar返回的是首行首列

读取价目和采购含税价code

5.06.16.0169

3.99.01.0012
import clr
import sys
clr.AddReference('System')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Newtonsoft.Json')
clr.AddReference('Kingdee.BOS.App')
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.JSON import * 
from Newtonsoft.Json import JsonConvert

from System import *
import System
import System.IO
from Kingdee.BOS.App.Data import *


def getDt():
    """  获取时间 """
    current_date = System.DateTime.Now
    date_string = current_date.ToString("MM-dd HH:mm:ss")
    return date_string
    
def myLog(msg):
    """ 写日志到文件 """
    current_date = System.DateTime.Now
    # 格式化输出(例如:2023-11-20)
    date_string = current_date.ToString("yyyy-MM-dd")
    logWriter = System.IO.StreamWriter("d:\jack\debug_output-{}.txt".format(date_string), True)
    # 重定向到文件
    original_out = System.Console.Out
    System.Console.SetOut(logWriter)
    # 4. 使用Console.WriteLine输出(会被重定向到文件)
    System.Console.WriteLine(msg)
    # 恢复并关闭
    System.Console.SetOut(original_out)
    logWriter.Close()

def showObj(obj,desc="obj"):
    """ 显示对象内容 到log文件  """
    
    myLog("{0} {1} dir( {2} ) {3} {1} \t".format(getDt(),  '-'*10,  desc ,type(obj).__name__))
    for i in dir(obj):
        try:
            cobj = getattr(obj,i,None)
        except Exception as e:
            myLog("Error: {}".format(e))
        myLog("  {0} , type == {1} value == {2} ".format(i ,  type(cobj).__name__, cobj      ))
      
#-----------------
 
def  AfterLoadData (e):
    """ 再显示前修改数据 """
    dObj = this.View.Model.DataObject
    #showObj(e,"事前处理可拦截 AfterLoadData")
    #msg = "AfterLoadData结果--》{}\n".format(JsonConvert.SerializeObject(  dObj  )) 
    #myLog(msg)
    
    #tmp = "事前处理可拦截 AfterLoadData : BillNo = {} 备注 = {} "
    #tmp = tmp.format(  dObj.BillNo ,  dObj.REMARK )
    #myLog(tmp)
    #dObj.REMARK  = getDt() #测试修改备注
    
    for index, ent in enumerate(dObj.AP_PAYABLEENTRY):
        #tmp = "明细循环 enumerate : index = {} len = {} "
        #tmp = tmp.format(  index ,  len(dObj.AP_PAYABLEENTRY) )
        #myLog(tmp)
        #--字段引用
        ent.F_QINL_JGGK   = ent.MATERIALID.F_QINL_JGGK  # 字段引用
        
    
def BarItemClick(e):

    #showObj(e,"按钮 BarItemClick 获取价目表价格 {} ".format( 0 ) )
    
    key=e.BarItemKey;
    if(key =="XJPT_tbButton_2" ): 
        获取价目表含税价(this.View.Model.DataObject)
        return 
    
def 获取价目表含税价(dObj):
    msgAdd = ""

    #msg = "存储过程执行结果--》{}\n".format(JsonConvert.SerializeObject(  doc  )) 
    #myLog(msg)
    #myLog(doc)
    #showObj(doc,"执行存储过程 对象{} ".format( 0 ) )
    
    单据内码 =dObj.Id  
    if(单据内码 <= 0  ): 
        this.View.ShowMessage("未保存单据不能获取 {} ".format (  ''  ));
        return
    if(str(dObj.FSetAccountType) != '3' ): 
        #this.View.ShowErrMessage("立账类型:必须财务应付 {} ".format (  ''  ));
        this.View.ShowWarnningMessage("立账类型:必须财务应付 {} ".format (  ''  ));
        return
        
        
    #pass
    #msg = "获取价目表含税价--》{}\n".format(JsonConvert.SerializeObject(  dObj  )) 
    #myLog(msg)
    #myLog("应付表头 dObj  币别id =: {} 供应商id =: {}".format(dObj.CURRENCYID_Id, dObj.SUPPLIERID_Id) )
    #showObj(dObj.SupplierID,"供应商对象 = {} ".format( 0 ) )
    供应商内码 = dObj.SUPPLIERID_Id
    币别内码 = dObj.CURRENCYID_Id
    
    #//采购订单含税价
    fsql="/*dialect*/ exec z_oq_获取应付单采购价格 {}  ".format(单据内码) ;
    myLog(fsql)
    inf = DBUtils.Execute(this.Context,fsql);
    
    #//价目表含税价 等
    for index, ent in enumerate( dObj.AP_PAYABLEENTRY) :
        物料内码 = ent.MATERIALID_Id
        物料代码 = ent.MATERIALID.Number
        
        #msg = "应付明细--》{}\n".format(JsonConvert.SerializeObject(  dObj  )) 
        #myLog(msg)
        myLog("供应商内码=:{} 币别内码=: {}  物料内码=: {}  物料代码=: {}".format(
        供应商内码,币别内码,物料内码,物料代码) )            
        # 先查询后更新  查询物料是否管控,是否有价目表
        if ent.MATERIALID.F_QINL_JGGK  :
            #--查询是否有价目表 (不然会更新控制到 字段)
            fsql="/*dialect*/ exec z_oq_查询价目表  {} ,{}, {}".format(
                物料内码,供应商内码,币别内码);
            myLog(fsql)
            doc = DBUtils.ExecuteScalar(this.Context,fsql,None);
            myLog("{}: {} 价目表价格 {}".format(index, 物料代码,doc))
            if doc>0:
                #//更新应付 含税价目
                fsql="/*dialect*/ exec z_oq_获取应付明细价目表  {0}, {1} ,{2} ,{3} ".format(
                    单据内码,物料内码, 供应商内码,币别内码);
                myLog(fsql)
                DBUtils.Execute(this.Context,fsql);
            else:
                this.View.ShowErrMessage("管控物料{}没有取到价目表".format(物料代码) ) 
        else:
            tmp = " 物料 {} 无需管控  "
            tmp = tmp.format( ent.MATERIALID.Number )
            myLog(tmp)            
            msgAdd = tmp
                
    this.View.ShowMessage("获取价目表价格 完成 {0} ".format ( msgAdd  ));
    this.View.InvokeFormOperation("Refresh")
    
    #this.View.GetControl("F_XJPT_Price").Enabled=False;
    #this.View.GetControl("F_QINL_JMBDJ").Enabled=False;
#myLog("  this.View.Model.DataObject.Id =={0} {1}".format(this.View.Model.DataObject.Id  , __file__   ))

目标通过 对指定物料开启 价格管控来




保存检查code

import clr
import sys
clr.AddReference('System')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Newtonsoft.Json')
clr.AddReference('Kingdee.BOS.App')
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.JSON import * 
from Newtonsoft.Json import JsonConvert

from System import *
import System
import System.IO
from Kingdee.BOS.App.Data import *

pName = "保存和提交时检查价格是否相同"

def getDt():
    """  获取时间 """
    current_date = System.DateTime.Now
    date_string = current_date.ToString("MM-dd HH:mm:ss")
    return date_string
    
def myLog(msg):
    """ 写日志到文件 """
    current_date = System.DateTime.Now
    # 格式化输出(例如:2023-11-20)
    date_string = current_date.ToString("yyyy-MM-dd")
    logWriter = System.IO.StreamWriter("d:\jack\debug_output-{}.txt".format(date_string), True)
    # 重定向到文件
    original_out = System.Console.Out
    System.Console.SetOut(logWriter)
    # 4. 使用Console.WriteLine输出(会被重定向到文件)
    System.Console.WriteLine(msg)
    # 恢复并关闭
    System.Console.SetOut(original_out)
    logWriter.Close()

def showObj(obj,desc="obj"):
    """ 显示对象内容 到log文件  """
    
    myLog("{0} {1} dir( {2} ) {3} {1} \t".format(getDt(),  '-'*10,  desc ,type(obj).__name__))
    for i in dir(obj):
        try:
            cobj = getattr(obj,i,None)
        except Exception as e:
            myLog("Error: {}".format(e))
        myLog("  {0} , type == {1} value == {2} ".format(i ,  type(cobj).__name__, cobj      ))
      
#-----------------
def BeforeDoOperation(e):
    """ 捕获所以操作事件 """
    #showObj(e)
    tmp = "myLog:str(e.Operation) {0} , type = {1} value = {2} "
    tmp = tmp.format(str(e.Operation) ,  type(e.Operation).__name__ ,  e.Operation    )
    myLog(tmp)
    # 判断是否为提交操作
    if  type(e.Operation).__name__ == "Submit":
        提交操作(e )
        return 

    
def 提交操作(e):
    """  提交操作  
        检查是否符合 3价相同
        是否价格管控 是否参考价
    """
    err=""
    #this.View.Model.DataObject
    #showObj(this.View.Model.DataObject)
    dObj = this.View.Model.DataObject
    noteq = [] #//收集价格不符合的明细
    暂估价格列表 = []
    for index, ent in enumerate(dObj.AP_PAYABLEENTRY):
        # 打印条目
        #msg = "{}\n".format(JsonConvert.SerializeObject( ir )) 
        #myLog(msg)
        #//不受管控物料
        if not (ent.F_QINL_JGGK  ):
            continue
            
        tmp = "myLog:F_XJPT_Price= {0} , FTaxPrice = {1}  F_XJPT_Price1 = {2}  FPrice = {3} 是否管控 {4}   是否暂估价 {5}"
        tmp = tmp.format( ent["F_XJPT_Price"] ,  ent["TaxPrice"]
            , ent["F_XJPT_Price1"] ,   ent["FPrice"] 
            ,ent.F_QINL_JGGK, ent.F_XJPT_is_reference
        )
        myLog(tmp)
        """
        是否采购价格管控	F_QINL_JGGK
        是否参考价	F_XJPT_is_reference
            含税单价 TaxPrice
            采购订单含税单价 F_XJPT_Price
            价目表单价 F_QINL_JMBDJ
        
        """
        if not ( ent.TaxPrice==ent.F_XJPT_Price and ent.TaxPrice==ent.F_QINL_JMBDJ  ):
        # 含税单价==采购订单含税单价  and 含税单价==价目表单价
            noteq .append(index+1)
        if  ent.F_XJPT_is_reference :
        # 含税单价==采购订单含税单价  and 含税单价==价目表单价
            暂估价格列表 .append(index+1)
    #-----------
    if len(noteq) >0:
        err = err + "第{}条明细 发票与价目表/采购含税价不同,请上下查单据的价格!\n".format(
                 ",".join(  map(str,noteq)   ) 
            ) 
    if len(暂估价格列表) >0:
        err = err + "第{}条明细 价格为暂估请确定后调整价目表 \n".format(
                 ",".join(  map(str,暂估价格列表)   ) 
            ) 
    # 禁止提交
    if err:
        e.Cancel=True # 取消当前操作
        raise Exception(err)
     
    #key=e.BarItemKey;
    this.View.ShowMessage("完成操作 {0} ".format ( 123 ));

 
     

查采购订单价格sql

财务应付暂估应付 ,从暂估应付到上游入库单,从入库单采购单

select  应付单.fid as 应付单内码 ,应付单.FBILLNO as 应付单编码
, 应付明细.fentryid as 应付明细内码
, 应付明细关联.fsbillid as 暂估单据内码
, 暂估应付明细.fentryid as 暂估明细内码
, 入库单明细.fentryid as 入库单明细内码
, 入库单.fid as 入库单内码
, 入库单.FBILLNO as 入库单编码
, 采购订单明细财务信息.fentryid as 采购明细财务内码
, 采购订单.fid as 采购内码
, 采购订单.FBILLNO as 采购编码
from T_AP_PAYABLE 应付单 
join T_AP_PAYABLEENTRY 应付明细 on 应付明细.fid=应付单.fid
join T_AP_PAYABLE_LK 应付明细关联 on 应付明细关联.fentryid=应付明细.fentryid
join T_AP_PAYABLEENTRY 暂估应付明细 on 暂估应付明细.fentryid=应付明细关联.fsid
join T_AP_PAYABLE_LK 暂估应付明细关联 on 暂估应付明细关联.fentryid=暂估应付明细.fentryid 
join T_STK_INSTOCKENTRY 入库单明细 on 入库单明细.fentryid=暂估应付明细关联.fsid
join T_STK_INSTOCK 入库单 on 入库单.fid=暂估应付明细关联.fsbillid 
join T_STK_INSTOCKENTRY_LK 入库单明细关联 on 入库单明细关联.fentryid=入库单明细.fentryid 
join T_PUR_POORDERENTRY_F  采购订单明细财务信息 on 采购订单明细财务信息.fentryid=入库单明细关联.fsid
join T_PUR_POORDER 采购订单 on 采购订单.fid=入库单明细关联.fsbillid 
where 应付单.FSETACCOUNTTYPE=3  and 应付单.fid= 148377