📄 inv_monthsum1.pas
字号:
+' Select Distinct '''+AdoQry_Temp.fieldbyname('VendorCode').AsString+''',ItemCode'
+' From InvOutBillLine'
+' Where InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsString+''
+' And ItemCode Not In'
+'(Select ItemCode'
+' From OPAveragePrice'
+' Where VendorCode='''+AdoQry_Temp.fieldbyname('VendorCode').AsString+''')';
AdoQry_Tmp.ExecSQL;
//查询表体
AdoQuery.Close;
AdoQuery.SQL.Text:='Select ItemCode'
+',InvBillQty'
+',InvBillNoTaxAmount'
+' From InvOutBillLine'
+' Where InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsString+'';
AdoQuery.Open;
AdoQuery.First;
//一行一行循环
while not AdoQuery.Eof do
begin
if (AdoQuery.fieldbyname('InvBillQty').AsFloat>0)
or(AdoQry_Temp.fieldbyname('PriceType').AsString='1') then
begin//按正常出库处理
//更新对应行项目的数量和金额(供应商移动加权平均)
if AdoQry_Temp.fieldbyname('PriceType').AsString='0' then
begin
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='UpDate OpAveragePrice Set'
+' OPApQty=OPApQty+'+AdoQuery.fieldbyname('InvBillQty').AsString+''
+',OPApAmount=OPApAmount+'
+'(Case When ApQty=0 Then AveragePrice*'+AdoQuery.fieldbyname('InvBillQty').AsString
+' Else ApAmount*'+AdoQuery.fieldbyname('InvBillQty').AsString
+'/ApQty end)'
+' From OpAveragePrice'
+' Join AveragePrice On OpAveragePrice.ItemCode=AveragePrice.ItemCode'
+' And WHCode='''+AdoQry_Temp.fieldbyname('WHCode').AsString+''''
+' Where OpAveragePrice.ItemCode='''+AdoQuery.fieldbyname('ItemCode').AsString+''''
+' And VendorCode='''+AdoQry_Temp.fieldbyname('VendorCode').AsString+'''';
AdoQry_Tmp.ExecSql;
end
else
begin
{将0202单据类型(委外领料)且属于计划价核算的仓库的单据也纳入月结的
计算之列,不分正负数的出库情况,价格统一从计划价库StandardPrice表中
取得,取SPStArtMonth=处理月份且ItemCode=当前物料的SPPrice,算法不论
正负统一按“正数”的算法}
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='UpDate OpAveragePrice Set'
+' OPApQty=OPApQty+'+AdoQuery.fieldbyname('InvBillQty').AsString+''
+',OPApAmount=OPApAmount+SPPrice*'+AdoQuery.fieldbyname('InvBillQty').AsString
+' From OpAveragePrice'
+' Join StandardPrice On OpAveragePrice.ItemCode=StandardPrice.ItemCode'
+' And SPStArtMonth='''+UpdateMonth+''''
+' Where OpAveragePrice.ItemCode='''+AdoQuery.fieldbyname('ItemCode').AsString+''''
+' And VendorCode='''+AdoQry_Temp.fieldbyname('VendorCode').AsString+'''';
AdoQry_Tmp.ExecSql;
end;
//计算对应行项目的单价(供应商移动加权平均)
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='UpDate OpAveragePrice Set'
+' OpAveragePrice=Case When OpApQty=0 Then OpAveragePrice'
+' Else OPApAmount/OPApQty end'
+' Where ItemCode='''+AdoQuery.fieldbyname('ItemCode').AsString+''''
+' And VendorCode='''+AdoQry_Temp.fieldbyname('VendorCode').AsString+'''';
AdoQry_Tmp.ExecSql;
if AdoQry_Temp.fieldbyname('PriceType').AsString='0' then
begin
//更新单据的价格、金额
//从平均价表获得价格(计算得出),更新单据的价格、金额
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Update InvOutBillLine Set'
+' InvBillNoTaxPrice=(Case When ApQty=0 Then AveragePrice'
+' Else ApAmount/ApQty end)'
+',InvBillNoTaxAmount=InvBillQty*(Case When ApQty=0 Then AveragePrice'
+' Else ApAmount/ApQty end)'
+' From InvOutBillLine'
+' Join AveragePrice On InvOutBillLine.ItemCode=AveragePrice.ItemCode'
+' And AveragePrice.WHCode='''+AdoQry_Temp.fieldbyname('WHCode').AsString+''''
+' Where InvOutBillLine.InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsString+''
+' And InvOutBillLine.ItemCode='''+AdoQuery.fieldbyname('ItemCode').AsString+'''';
AdoQry_Tmp.ExecSQL;
//更新对应行项目的金额 ok
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Update AveragePrice Set'
+' ApAmount=ApAmount-(Case When ApQty=0 Then AveragePrice'
+' Else ApAmount/ApQty end)'
+'*('+AdoQuery.fieldbyname('InvBillQty').AsString+')'
+' Where WHCode='''+AdoQry_Temp.fieldbyname('WHCode').AsString+''''
+' And ItemCode='''+AdoQuery.fieldbyname('ItemCode').AsString+'''';
AdoQry_Tmp.ExecSQL;
//更新对应行项目的数量
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Update AveragePrice Set'
+' ApQty=ApQty-('+AdoQuery.fieldbyname('InvBillQty').AsString+') '
+' Where WHCode='''+AdoQry_Temp.fieldbyname('WHCode').AsString+''''
+' And ItemCode='''+AdoQuery.fieldbyname('ItemCode').AsString+'''';
AdoQry_Tmp.ExecSQL;
end;
end
else if AdoQuery.fieldbyname('InvBillQty').AsFloat<0 then
begin//按入库处理 ok
//更新对应行项目的金额和数量
//如果对方没有库存,则价格为0
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='UpDate AveragePrice Set'
+' ApQty=ApQty-('+AdoQuery.fieldbyname('InvBillQty').AsString+')'
+',ApAmount=ApAmount-'
+'(Case When OPApQty=0 Then 0'
+' Else OPApAmount*'+AdoQuery.fieldbyname('InvBillQty').AsString
+'/OPApQty end)'
+' From AveragePrice'
+' Join OpAveragePrice On AveragePrice.ItemCode=OpAveragePrice.ItemCode'
+' And VendorCode='''+AdoQry_Temp.fieldbyname('VendorCode').AsString+''''
+' Where WHCode='''+AdoQry_Temp.fieldbyname('WHCode').AsString+''''
+' And AveragePrice.ItemCode='''+AdoQuery.fieldbyname('ItemCode').AsString+'''';
AdoQry_Tmp.ExecSQL;
//计算对应行项目的单价
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Update AveragePrice Set'
+' AveragePrice=(Case When ApQty=0 Then AveragePrice'
+' Else ApAmount/ApQty end)'
+' Where WHCode='''+AdoQry_Temp.fieldbyname('WHCode').AsString+''''
+' And ItemCode='''+AdoQuery.fieldbyname('ItemCode').AsString+'''';
AdoQry_Tmp.ExecSQL;
//更新单据的价格、金额
//从平均价表获得价格(计算得出),更新单据的价格、金额
//如果对方数量=0,则价格=0
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Update InvOutBillLine Set'
+' InvBillNoTaxPrice=(Case When OpApQty=0 Then 0'
+' Else OpApAmount/OpApQty end)'
+',InvBillNoTaxAmount=InvBillQty*(Case When OpApQty=0 Then 0'
+' Else OpApAmount/OpApQty end)'
+' From InvOutBillLine'
+' Join OpAveragePrice On InvOutBillLine.ItemCode=OpAveragePrice.ItemCode'
+' And OpAveragePrice.VendorCode='''+AdoQry_Temp.fieldbyname('VendorCode').AsString+''''
+' Where InvOutBillLine.InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsString+''
+' And InvOutBillLine.ItemCode='''+AdoQuery.fieldbyname('ItemCode').AsString+'''';
AdoQry_Tmp.ExecSQL;
//更新对应行项目的金额(供应商移动加权平均)
//如果数量=0,则价格=0
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='UpDate OpAveragePrice Set'
+' OPApAmount=OPApAmount+(Case When OPApQty=0 Then 0 Else OPApAmount/OPApQty end)'
+'*'+AdoQuery.fieldbyname('InvBillQty').AsString+''
+' Where ItemCode='''+AdoQuery.fieldbyname('ItemCode').AsString+''''
+' And VendorCode='''+AdoQry_Temp.fieldbyname('VendorCode').AsString+'''';
AdoQry_Tmp.ExecSQL;
//更新对应行项目的数量(供应商移动加权平均)
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='UpDate OpAveragePrice Set'
+' OPApQty=OPApQty+'+AdoQuery.fieldbyname('InvBillQty').AsString+''
+' Where ItemCode='''+AdoQuery.fieldbyname('ItemCode').AsString+''''
+' And VendorCode='''+AdoQry_Temp.fieldbyname('VendorCode').AsString+'''';
AdoQry_Tmp.ExecSQL;
end;
AdoQuery.Next;
end;
end
else if (AdoQry_Temp.fieldbyname('BillTypeCode').AsString='0103')
or((AdoQry_Temp.fieldbyname('BillTypeCode').AsString='0199')
and(AdoQry_Temp.fieldbyname('OpBill').AsString='1')) then
begin//委外加工入库单
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Insert AveragePrice(WHCode,ItemCode)'
+' Select Distinct '''+AdoQry_Temp.fieldbyname('WHCode').AsString+''',ItemCode'
+' From InvInBillLine'
+' Where InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsString+''
+' And ItemCode Not In'
+'(Select ItemCode'
+' From AveragePrice'
+' Where WHCode='''+AdoQry_Temp.fieldbyname('WHCode').AsString+''')';
AdoQry_Tmp.ExecSQL;
//更新对应行项目的金额和数量(委外加工入库单)
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Update AveragePrice Set'
+' ApQty=ApQty+l.Qty'
+',ApAmount=ApAmount+l.Amount'
+' From'
+'(Select ItemCode,Sum(InvBillQty) As Qty,Sum(InvBillNoTaxAmount) As Amount'
+' From InvInBillLine'
+' Where InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsString+''
+' Group By ItemCode) l'
+' Where AveragePrice.WHCode='''+AdoQry_Temp.fieldbyname('WHCode').AsString+''''
+' And AveragePrice.ItemCode=l.ItemCode';
AdoQry_Tmp.ExecSQL;
//重算委外材料opBill的单价,金额
//如果对方库存数量=0,则价格=0
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Select Count(*) S From OPBill'
+' Where InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsString;
AdoQry_Tmp.Open;
if AdoQry_Tmp.fieldbyname('S').AsInteger>0 then
begin
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Update OpBill Set'
+' OpBillNoTaxPrice=(Case When OpApQty=0 Then 0'
+' Else OpApAmount/OpApQty end)'
+',OpBillNoTaxAmount=(Case When OpApQty=0 Then 0'
+' Else OpApAmount/OpApQty end)*OpBill.OpBillQty'
+' From OpBill'
+' Join OpAveragePrice On OpBill.ItemCode=OpAveragePrice.ItemCode'
+' And VendorCode='''+AdoQry_Temp.fieldbyname('VendorCode').AsString+''''
+' Where OpBill.InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsString+'';
AdoQry_Tmp.ExecSQL;
//更新委外加工入库材料费
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Update InvInBillLine Set'
+' InvBillNoTaxAmount=OPB.Amount '
+' From InvInBillLine'
+' Join (Select InvBillLineNo,Sum(OpBillNoTaxAmount) As Amount'
+' From OpBill'
+' Where InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsString+''
+' Group By InvBillLineNo) OPB On InvInBillLine.InvBillLineNo=OPB.InvBillLineNo'
+' Where InvInBillLine.InvBillId='+IntToStr(AdoQry_Temp.fieldbyname('InvBillId').AsInteger+1)+'';
AdoQry_Tmp.ExecSQL;
//材料费入加权平均价
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Update AveragePrice Set'
+' ApAmount=ApAmount+l.Amount'
+' From'
+'(Select ItemCode,Sum(InvBillNoTaxAmount) As Amount'
+' From InvInBillLine'
+' Where InvBillId='+IntToStr(AdoQry_Temp.fieldbyname('InvBillId').AsInteger+1)+''
+' Group By ItemCode) l'
+' Where AveragePrice.WHCode='''+AdoQry_Temp.fieldbyname('WHCode').AsString+''''
+' And AveragePrice.ItemCode=l.ItemCode';
AdoQry_Tmp.ExecSQL;
//更新对应行项目的金额和数量(供应商移动加权平均)
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Update OPAveragePrice Set'
+' OPApQty=OPApQty-OPB.Qty'
+',OPApAmount=OPApAmount-OPB.Amount'
+' From'
+'(Select ItemCode,Sum(OPBillQty) As Qty,Sum(OPBillNoTaxAmount) As Amount'
+' From OPBill'
+' Where InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsString+''
+' Group By ItemCode) OPB'
+' Where OPAveragePrice.VendorCode='''+AdoQry_Temp.fieldbyname('VendorCode').AsString+''''
+' And OPAveragePrice.ItemCode=OPB.ItemCode';
AdoQry_Tmp.ExecSQL;
end;
//计算对应项目的价格
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Update AveragePrice Set'
+' AveragePrice=Case When ApQty=0 Then AveragePrice Else ApAmount/ApQty end'
+' Where WHCode='''+AdoQry_Temp.fieldbyname('WHCode').AsString+''''
+' And ItemCode In'
+'(Select ItemCode'
+' From InvInBillLine'
+' Where InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsString+')';
AdoQry_Tmp.ExecSQL;
end
else if (AdoQry_Temp.fieldbyname('BillTypeCode').AsString='1202') then
begin
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Insert AveragePrice(WHCode,ItemCode)'
+' Select Distinct '''+AdoQry_Temp.fieldbyname('WHCode').AsString+''',ItemCode'
+' From InvInBillLine'
+' Where InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsString+''
+' And ItemCode Not In'
+'(Select ItemCode'
+' From AveragePrice'
+' Where WHCode='''+AdoQry_Temp.fieldbyname('WHCode').AsString+''')';
AdoQry_Tmp.ExecSQL;
//重算委外材料opBill的单价,金额
//如果对方库存数量=0,则价格=0
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:='Update OpBill Set'
+' OpBillNoTaxPrice=(Case When OpApQty=0 Then 0'
+' Else OpApAmount/OpApQty end)'
+',OpBillNoTaxAmount=(Case When OpApQty=0 Then 0'
+' Else OpApAmount/OpApQty end)*OpBill.OpBillQty'
+' From OpBill'
+' Join OpAveragePrice On OpBill.ItemCode=OpAveragePrice.ItemCode'
+' And VendorCode='''+AdoQry_Temp.fieldbyname('VendorCode').AsString+''''
+' Where OpBill.InvBillId='+AdoQry_Temp.fieldbyname('InvBillId').AsStri
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -