⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inv_monthsum1.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 5 页
字号:
            +' 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 + -