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

📄 inv_mninaudit.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    begin
      DispInfo('入库总数超过了约定交货数,请使用"超订单入库"',1);
      AdoQry_Body.Cancel;
      Abort;
    end;
  end
  else
  begin
    a1:=AdoQry_Body.fieldbyname('MOQty').asfloat;
    a2:=AdoQry_Body.fieldbyname('MoRealInQty').asfloat+
        AdoQry_Body.fieldbyname('InvBillQty').asfloat;
    if a1<a2 then
    begin
      DispInfo('拉式领料的生产订单行'+chr(13)+chr(10)
              +'          累计入库量'+chr(13)+chr(10)
              +'不允许超过约定交货量!',1);
      abort;
    end;
  end;
  a1:=AdoQry_Body.fieldbyname('InvBillQty').asfloat*AdoQry_Body.fieldbyname('InvBillSfcQty').asfloat;
  If a1<0 then
  begin
    DispInfo('实入数量与拟入数量必须方向相同!',1);
    AdoQry_Body.Cancel;
    Abort;
  end;
  a1:=AdoQry_Body.fieldbyname('InvBillQty').asfloat;
  a2:=AdoQry_Body.fieldbyname('MoRealInQty').asfloat+AdoQry_Body.fieldbyname('InvBillQty').asfloat;
  If (a1<0)and (a2<0) then
  begin
    DispInfo('冲消的数量不能大于累计入库数量!',1);
    AdoQry_Body.Cancel;
    Abort;
  end;
end;

procedure TFrm_Inv_MnInAudit.SetFormParam(FrmParam1, FrmParam2, FrmParam3,
  FrmParam4, FrmParam5, FrmParam6: String);
begin
  inherited;
  FInvBillId:=FrmParam1;
  FDeptCode:=FrmParam3;
  FShiftType:=FrmParam4;
end;


procedure TFrm_Inv_MnInAudit.Act_CheckExecute(Sender: TObject);
var
  M,I:integer;
  InvFieldCur,InvFieldItem : string;
  OldSort :String;
  NeedChangePrice:Boolean;
  FatherCode:string;
  RealInQty:double;
begin
  inherited;
  NeedChangePrice:=NeedChangeAveragePrice(AdoQry_Tmp,copy(Edt_Date.text,1,7));
  InvFieldCur:=GetInvField(AdoQry_Tmp2,FWhCode,FPosition,',CurrentInv');
  InvFieldItem:=GetInvField(AdoQry_Tmp2,FWhCode,FPosition,'Item');
  Edt_DateExit(Edt_Date);
  if AdoQry_Body.state<>dsBrowse then       //如果当前用户改变了Grid中的值,还没有Post,主动Post
  AdoQry_Body.post;
  //全面检查库存
  AdoQry_Body.First;
  for M:=0 to AdoQry_Body.recordCount-1 do
  begin
  if  ISStockItem( AdoQry_Body.fieldbyname('ItemCode').asstring) then     //是否库存件;
    if not InvQtyCheck(NeedChangePrice,
                     AdoQry_Body,AdoQry_Tmp,
                     getCode(Lbl_WhCodeName.Caption),
                     getCode(Lbl_Position.Caption),
                     AdoQry_Body.fieldbyname('ItemCode').asstring,
                     'InvBillQty',AdoQry_Body.fieldbyname('InvBillQty').AsFloat,True)then
    begin
      Abort;
    end;
    AdoQry_Body.next;
  end;
  AdoQry_Body.DisableControls  ;
  AdoQry_tmp.Connection.beginTrans;
  try
    DBGridEh.Enabled :=False;
    try
      //记录本仓库数据发生改变
      ChangeInvStatus(AdoQry_tmp,FWHCode,copy(edt_Date.text,1,7));
      AdoQry_tmp.Close;
      AdoQry_tmp.sql.clear;
      //更新InvOutBill
      AdoQry_tmp.sql.text:='Update InvInBill '+
                             ' Set InvBilldate='''+edt_Date.text+''','+
                                 ' InvBillMonth='''+copy(Trim(edt_Date.text),1,7)+''','+
                                 ' EmployeeCode='''+userCode+''','+
                                 ' Wh_EmployeeCode='''+userCode+''','+
                                 ' InvBillWhChCk=1'+','+
                                 ' InvBillremArk='''+Edt_MeMo.text+''''+
                           ' Where InvBillId='+FInvBillId;
      AdoQry_tmp.execsql;
      with AdoQry_Body do
      begin
        First;
        for M:=0 to AdoQry_Body.recordCount-1 do
        begin
          if fieldbyname('InvBillQty').asfloat<>0 then
          begin
            if ISStockItem(fieldbyname('ItemCode').AsString) then    //是库存件
            begin
              AdoQry_tmp.Close;
              AdoQry_tmp.sql.clear;
              AdoQry_tmp.sql.text:=
                'Update InvInBillline '+
                  ' Set InvBillqty='+
                        fieldbyname('InvBillQty').AsString+
                  '    ,BillLineReMArk='''+fieldbyname('BillLineReMArk').asstring+''' '+
                 'Where InvBillId='+FInvBillId+
                     '  and InvBillLineNo='+fieldbyname('InvBillLineNo').AsString;
              AdoQry_tmp.execsql;
              // 更改当前库存
              AdoQry_tmp.Close;
              AdoQry_tmp.sql.clear;
              AdoQry_Tmp.SQL.Text:=
                'Select Count(*) as RecCount from CurrentInv '+
                ' Where WhCode='''+FWHCode+''''+
                   '   and WhPositionCode='''+FPosition+''''+
                   '   and ItemCode='''+fieldbyname('ItemCode').AsString+'''';
              AdoQry_Tmp.Open;
              If AdoQry_Tmp.fieldbyname('RecCount').AsInteger<=0 then
              begin
                AdoQry_Tmp.Close;
                AdoQry_Tmp.SQL.clear;
                AdoQry_Tmp.Sql.Add
                 ('Insert Into CurrentInv'+
                       '(WHCode,ItemCode,OnHandInv,OnCheckInv,WhPositionCode,'+
                        'FreezeInv,WasterInv,OnShipInv)'+
                    'Values('''+FWHCode+''','''+fieldbyname('ItemCode').AsString+''','+
                    '0,0,'''+FPosition+''',0,0,0)');
                AdoQry_Tmp.ExecSQL;
              end;{
              AdoQry_Tmp.Close;
              AdoQry_Tmp.Sql.clear;
              AdoQry_tmp.sql.text:=
                'update CurrentInv  '+
                 ' Set '+
                   InvFieldcur+
                '='+Invfieldcur+
                '+('+fieldbyname('InvBillQty').asstring+')'+
                ' where whCode='''+FWHCode+''' and '+
                '       WhPositionCode='''+FPosition+''' and '+
                '       ItemCode='''+fieldbyname('ItemCode').asstring+'''';
              AdoQry_tmp.execsql;

             //更改Item表的库存数量
              AdoQry_tmp.Close;
              AdoQry_tmp.sql.clear;
              AdoQry_tmp.sql.text:=
                ' update Item set '+
                InvFieldItem+
                '='+
                InvFieldItem+
                '+('+fieldbyname('InvBillqty').asstring+')'+
                '  where ItemCode='''+fieldbyname('ItemCode').asstring+'''';
              AdoQry_tmp.execsql;}
              if UpdateInv(AdoQry_Tmp,
                        getCode(Lbl_WhCodeName.Caption),
                        getCode(Lbl_Position.Caption),
                        AdoQry_Body.fieldbyname('ItemCode').asstring,
                        '('+AdoQry_Body.fieldbyname('InvBillQty').asstring+')',
                        NeedChangePrice,True)<>'' then
                abort;
            end
            else    //是库存件
            begin
              if ISMudiFather(AdoQry_Body.fieldbyname('ItemCode').asstring) then  // 是多父项
              begin
                DispInfo('物料:'+AdoQry_Body.fieldbyname('ItemCode').asstring+'有多个父项不能入库!',3);
                abort;
              end;
              FatherCode:='';
              FatherCode:=FindFatherCode(AdoQry_Body.fieldbyname('ItemCode').asstring); //找父项物料代码;
              if FatherCode='' then
              begin
                DispInfo('物料:'+AdoQry_Body.fieldbyname('ItemCode').asstring+'父项为空不能入库!',3);
                abort;
              end;
              if not ISPirsSale(FatherCode) then             //是否特销件;
              begin
                DispInfo('物料:'+AdoQry_Body.fieldbyname('ItemCode').asstring+'的父项不是特销件不能入库!',3);
                abort;
              end;
              RealInQty:=0.00;
              RealInQty:=GetRealInQty(AdoQry_Body.fieldbyname('ItemCode').asstring,
                                    AdoQry_Body.fieldbyname('InvBillQty').AsString);  //得到真实的入库数量;
              AdoQry_tmp.Close;
              AdoQry_tmp.sql.clear;
              AdoQry_tmp.sql.text:=
                'Update InvInBillline '+
                  ' Set InvBillqty='+floattostr(RealInQty)+
                  '    ,ItemCode='''+FatherCode+''''+
                  '    ,BillLineReMArk='+'''库存数是从'+AdoQry_Body.fieldbyname('ItemCode').asstring
                                        +' 转换来的'''+' '+AdoQry_Body.fieldbyname('BillLineReMArk').asstring+
                  ' Where InvBillId='+FInvBillId+
                     '  and InvBillLineNo='+fieldbyname('InvBillLineNo').AsString;
                    // showmessage(AdoQry_tmp.sql.text);
              AdoQry_tmp.execsql;
              // 更改当前库存
              AdoQry_tmp.Close;
              AdoQry_tmp.sql.clear;
              AdoQry_Tmp.SQL.Text:=
                'Select Count(*) as RecCount from CurrentInv '+
                ' Where WhCode='''+FWHCode+''''+
                   '   and WhPositionCode='''+FPosition+''''+
                   '   and ItemCode='''+FatherCode+'''';
              AdoQry_Tmp.Open;
              If AdoQry_Tmp.fieldbyname('RecCount').AsInteger<=0 then
              begin
                AdoQry_Tmp.Close;
                AdoQry_Tmp.SQL.clear;
                AdoQry_Tmp.Sql.Add
                 ('Insert Into CurrentInv'+
                       '(WHCode,ItemCode,OnHandInv,OnCheckInv,WhPositionCode,'+
                        'FreezeInv,WasterInv,OnShipInv)'+
                    'Values('''+FWHCode+''','''+FatherCode+''','+
                    '0,0,'''+FPosition+''',0,0,0)');
                AdoQry_Tmp.ExecSQL;
              end;{
              AdoQry_Tmp.Close;
              AdoQry_Tmp.Sql.clear;
              AdoQry_tmp.sql.text:=
                'update CurrentInv  '+
                 ' Set '+
                   InvFieldcur+
                '='+Invfieldcur+
                '+('+fieldbyname('InvBillQty').asstring+')'+
                ' where whCode='''+FWHCode+''' and '+
                '       WhPositionCode='''+FPosition+''' and '+
                '       ItemCode='''+fieldbyname('ItemCode').asstring+'''';
              AdoQry_tmp.execsql;

             //更改Item表的库存数量
              AdoQry_tmp.Close;
              AdoQry_tmp.sql.clear;
              AdoQry_tmp.sql.text:=
                ' update Item set '+
                InvFieldItem+
                '='+
                InvFieldItem+
                '+('+fieldbyname('InvBillqty').asstring+')'+
                '  where ItemCode='''+fieldbyname('ItemCode').asstring+'''';
              AdoQry_tmp.execsql;}
              if UpdateInv(AdoQry_Tmp,
                        getCode(Lbl_WhCodeName.Caption),
                        getCode(Lbl_Position.Caption),
                        FatherCode,
                        '('+floattostr(RealInQty)+')',
                        NeedChangePrice,True)<>'' then
                abort;
            end;
           //更改MNItemList的记录
            AdoQry_tmp.Close;
            AdoQry_tmp.sql.clear;
            AdoQry_tmp.sql.text:=
              'update MoLine '+
              '  set MoRealInQty=MoRealInqty+'+fieldbyname('InvBillQty').asstring+
              '     ,MoNoFinishQty=MoNoFinishQty-('+fieldbyname('InvBillQty').Asstring+') '+
              ' where mono='''+FMoNo+''' and '+
              '       MoLineno='+fieldbyname('MoLineNo').asstring+' and '+
              '       ItemCode='''+fieldbyname('ItemCode').asstring+'''';
            AdoQry_tmp.execsql;
           //生产采购订单过程调用,参数说明:P1:AdoQuery控件名称,P2: 业务类型:POCheck:待检入库;POIN:采购入库;MoIn:生产入库
           //P3:订单号 MONO或PONO,P4:订单行号 MoLineNo或POLineNo
            MOPOOperation(AdoQry_tmp,'MoIn',fieldbyname('mono').asstring,fieldbyname('MoLineno').asinteger);

            { --------------------------------------------------------------
             单据保存时,会判断MoLine的MoRealInQty是否超过MOQty,
             如果是,则关闭该订单行,即MoLineStatus=7
             现在改成  从MrpParam表中读取参数,如果用户定义为自动
             关闭,则执行以上的操作,否则什么都不做
             select MrpParamValueN from MrpParam where MrpParamCode='autoCloseMo',
             如果=1表示自动关闭,=0表示手工关闭
             ---------------------------------------------------------------}
            AdoQry_tmp.Close;
            AdoQry_tmp.sql.clear;
            AdoQry_tmp.SQL.text:=
              ' select MrpParamValueN from MrpParam where MrpParamCode=''autoCloseMo''';
            AdoQry_tmp.open;
            if AdoQry_tmp.fieldbyname('MrpParamValueN').Asinteger=1 then
            begin
              AdoQry_tmp.Close;
              AdoQry_tmp.sql.clear;
              AdoQry_tmp.SQL.text:=
              'update MoLine set MoLineStatus=7 where MONo='''+FMoNo+''''+
                 'and MoLineNo='+fieldbyname('MoLineNo').asstring+
                 'and ItemCode='''+fieldbyname('ItemCode').asstring+''''+
                 'and MoNoFinishQty<=0';
              AdoQry_tmp.execsql;
            end;
          end;
          if AdoQry_Body.fieldbyname('BackFlush').asinteger=1 then
          begin
            If Not MoInBackFlush(AdoQry_Body.Connection,
                                 AdoQry_Body.fieldbyname('mono').asstring,
                                 UserCode,Edt_Date.Text,LbL_MoFinishShift.Caption,
                                 AdoQry_Body.fieldbyname('MoLineno').asInteger,
                                 AdoQry_Body.fieldbyname('InvBillQty').asfloat) then
            abort;
          end;
          if AdoQry_Body.fieldbyname('InvBillQty').asfloat<>0 then       //021218 by zks
          begin
            if  ISCancelMps then                                         //是否核销主计划;
              CancelMps(FInvBillId,AdoQry_Body.fieldbyname('InvBillLineNo').asstring,
                        AdoQry_Body.fieldbyname('ItemCode').asstring,
                        AdoQry_Body.fieldbyname('InvBillQty').asfloat);   //核销主计划;
          end;
          if not ISStockItem(AdoQry_Body.fieldbyname('ItemCode').AsString) then    //不是库存件
          begin
            AdoQry_Body.edit ;
            AdoQry_Body.fieldbyname('ItemCode').asstring:=FatherCode;
            AdoQry_Body.fieldbyname('InvBillQty').asstring:= floattostr(RealInQty);
            AdoQry_Body.fieldbyname('BillLineReMArk').asstring:='库存数是从'+AdoQry_Body.fieldbyname('ItemCode').asstring
                                      +'转换来的'+','+AdoQry_Body.fieldbyname('BillLineReMArk').asstring;
            AdoQry_Body.post;
          end;

          next;
        end;
      end;
      //删除记录中本单据中输入为零的记录
      AdoQry_tmp.Close;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -