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

📄 stk_enter_checkinvbill.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Stk_Enter_CheckInvBill;

Interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Base_Entry_Body, Db, ActnList, AdODB, Grids, DBGridEh, ExtCtrls,
  ComCtrls, ToolWin, StdCtrls, Mask, ExtEdit, DBCtrls, ExtPrintReport, jpeg,
  linkedit;

Type
  TFrm_Stk_Enter_CheckInvBill = Class(TFrm_Base_Entry_Body)
    Label1: TLabel;
    CmBx_Warehouse: TComboBox;
    Label4: TLabel;
    Label7: TLabel;
    Edt_BillNo: TEdit;
    Label8: TLabel;
    MEdt_BillDate: TMaskEdit;
    Label3: TLabel;
    Label5: TLabel;
    CmBx_WhPosition: TComboBox;
    Edt_RemArk: TEdit;
    AdoQry_BodyInvBillLineNo: TIntegerField;
    AdoQry_BodyItemCode: TStringField;
    AdoQry_BodyBatchNo: TStringField;
    AdoQry_BodyItemName: TStringField;
    AdoQry_BodyUomName: TStringField;
    AdoQry_BodyAccountQty: TFloatField;
    AdoQry_BodyCheckQty: TFloatField;
    AdoQry_BodyProfitLossQty: TFloatField;
    AdoQry_BodyPLCause: TStringField;
    Label2: TLabel;
    MEdt_InAccountDate: TMaskEdit;
    Label6: TLabel;
    LEdt_CheckEmployeeCode: TLinkEdit;
    Edt_CheckEmployeeName: TEdit;
    ExtEdt_VendorCode: TLinkEdit;
    Lbl_VendorName: TEdit;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure CmBx_WarehouseChange(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure DateCheck(Sender: TObject);
    procedure Act_PreviewExecute(Sender: TObject);
    procedure Act_PrintExecute(Sender: TObject);
    procedure Act_InsertLineExecute(Sender: TObject);
    procedure Act_ModifyExecute(Sender: TObject);
    procedure DBGridEhColExit(Sender: TObject);
    procedure DBGridEhColEnter(Sender: TObject);
    procedure AdoQry_BodyBeforeEdit(DataSet: TDataSet);
    procedure DBGridEhKeyPress(Sender: TObject; var Key: ChAr);
    procedure DBGridEhExit(Sender: TObject);
    procedure ExtEdt_VendorCodeKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ExtEdt_VendorCodeButtonClick(Sender: TObject);
    procedure ExtEdt_VendorCodeExit(Sender: TObject);
    procedure LEdt_CheckEmployeeCodeKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure LEdt_CheckEmployeeCodeButtonClick(Sender: TObject);
    procedure LEdt_CheckEmployeeCodeExit(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure AdoQry_BodyCheckQtyChange(Sender: TField);
    procedure CmBx_WhPositionChange(Sender: TObject);
  private
    { Private declarations }
    IsSpecial:Boolean;
    OLDPoNo :String;
    Invmodify:Boolean;
    oldInvBillQTY:double;
    CurrentInvField:string;
    procedure SaveCheck;
  public
    { Public declarations }
    procedure SetStatus(CurrentStatus:String;var AnswerStatus,
      EnableControls:String); Override;
    procedure InitControls; Override;
    procedure SaveHeadData; Override;
    procedure SaveData; Override;
    procedure SetFormParam(FrmParam1,FrmParam2,FrmParam3,FrmParam4,FrmParam5,
      FrmParam6:String);Override;
  end;

var
  Frm_Stk_Enter_CheckInvBill: TFrm_Stk_Enter_CheckInvBill;

implementation

uses Sys_Global,Inv_Global, Stk_Enter_CheckInvBill_D,Stk_Enter_CheckInvBill_C;

{$R *.DFM}


procedure TFrm_Stk_Enter_CheckInvBill.InitControls;
var
  Bill_ID,OnCheckBillId,Tempstr:String;
  i:integer;
begin
  SetFocus_Control:=CmBx_Warehouse;
  inherited;
  if (ShowFlag=True)and(Status<>'Add') then
     Exit;

 // if CmBx_Warehouse.Items.Count=0 then
 // begin//设置可用仓库
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Select WHAccessCtrl.WHCode+'' ''+Warehouse.WHName As WHCodeName'
      +' From WHAccessCtrl'
      +' Join Warehouse On WHAccessCtrl.WHCode=Warehouse.WHCode'
      +' Where WHAccessCtrl.EmployeeCode='''+UserCode+''''
      //+' And Warehouse.PriceType<>1'
      +' Order By WHAccessCtrl.WHCode ';
     { SQl.Text := ' select WHAccessCtrl.WHCode+'' ''+Warehouse.WHName As WHCodeName'  '
                 +'    from WHAccessCtrl   '
                 +'   join Warehouse on WhAccessCtrl.WhCode=Warehouse.WhCode '
                 +'   where WhAccessCtrl.EmployeeCode='+QuotedSTr(userCode)
                 +'     and ( WhAccessCtrl.WhCode In (select WhCode  from CurrentInv )     '
                 +'          or WhAccessCtrl.WhCode in (select WhCode from Item where ItemCode in( select distinct ItemCode from opItemList '
                 +'                                        where  poNo ='''+AdoQry_Head.fieldbyname('Pono').asstring+ ''''
                 +'                                        and Polineno='+AdoQry_Head.fieldbyname('Polineno').asstring+'   ) ) )    '
                 + '   Order by WhAccessCtrl.WHCode   ';}

    AdoQry_Tmp.Open;
    AdoQry_Tmp.First;
    while not AdoQry_Tmp.Eof do
    begin
      CmBx_Warehouse.Items.Add(AdoQry_Tmp.fieldbyname('WHCodeName').AsString);
      AdoQry_Tmp.Next;
    end;
  if (Status='ReadOnly') or (Status='AllEdit') then
    InitCmBxText(CmBx_Warehouse,AdoQry_Head.fieldbyname('WHCode').AsString)
  else
    CmBx_Warehouse.ItemIndex:=0;
  CmBx_WarehouseChange(CmBx_Warehouse);
  //end;
  //取ID值
  if (Status<>'Add') then
  begin
    Bill_ID:=AdoQry_Head.fieldbyname('InvBillNo').AsString;
    Edt_BillNo.Text:=AdoQry_Head.fieldbyname('InvBillNo').AsString;
    with AdoQry_tmp do
    begin
       Close;
       sql.text:='select Inv_CheckInvBill.* , '+
                       ' Dept.DeptName,'+
                       ' Inv_CheckInvBill.whCode+'' ''+Warehouse.whName as whCodeName,'+
                       ' Inv_CheckInvBill.WhPositionCode+'' ''+WhPosition.WhPositionName '+
                               ' as WhPositionCodeName,'+
                       ' Employee.EmployeeName as chEmployeeName'+
                 ' from Inv_CheckInvBill '+
                 ' left join Dept  on Inv_CheckInvBill.DeptCode=Dept.DeptCode '+
                 ' left join Warehouse on Inv_CheckInvBill.whCode=Warehouse.whCode '+
                 ' left join WhPosition '+
                      ' on Inv_CheckInvBill.WhPositionCode=WhPosition.WhPositionCode '+
                 ' left join  Employee '+
                      ' on Inv_CheckInvBill.CheckEmployeeCode=Employee.EmployeeCode '+

                 ' where Inv_CheckInvBill.InvBillNo='''+AdoQry_Head.fieldbyname('InvBillNo').AsString+'''';
       open;
    CmBx_Warehouse.text:=fieldbyname('whCodeName').asstring;
    Edt_BillNo.text:=fieldbyname('InvBillNo').asstring;
    MEdt_BillDate.text:=fieldbyname('InvBillDate').asstring;
    CmBx_WhPosition.text:=fieldbyname('WhPositionCodeName').asstring;
    Edt_RemArk.text:=fieldbyname('RemArk').asstring;
    MEdt_InAccountDate.text:=fieldbyname('InAccountDate').asstring;
    LEdt_CheckEmployeeCode.text:=fieldbyname('CheckEmployeeCode').asstring;
    Edt_CheckEmployeeName.text:=fieldbyname('chEmployeeName').asstring;
    ExtEdt_VendorCode.text:=fieldbyname('DeptCode').asstring;
    Lbl_VendorName.text:=fieldbyname('DeptName').asstring;
    end;
  end
  else
  begin
    Bill_ID:='-1';
    Edt_BillNo.Text:='';
    MEdt_InAccountDate.text:=FormatDateTime('yyyy.mm.dd',date());
    MEdt_BillDate.text:=FormatDateTime('yyyy.mm.dd',date());
    DBGridEh.Columns[6].ReadOnly :=False;
    DBGridEh.Columns[8].ReadOnly :=False;
    Act_Save.Enabled:=True;
  end;

  AdoQry_Body.Close;
  AdoQry_Body.SQL.Text:='Select Inv_CheckInvBillLine.InvBillLineNo'
    +',Inv_CheckInvBillLine.ItemCode'
    +',Inv_CheckInvBillLine.BatchNo'
    +',Item.ItemName'
    +',Uom.UomName'
    +',Inv_CheckInvBillLine.AccountQty'
    +',Inv_CheckInvBillLine.CheckQty'
    +',Inv_CheckInvBillLine.ProfitLossQty'
    +',Inv_CheckInvBillLine.PLCause '
    +' From Inv_CheckInvBillLine'
    +' left Join Item On Inv_CheckInvBillLine.ItemCode=Item.ItemCode'
    +' left Join Uom On Item.UomCode=Uom.UomCode'
    +' Where Inv_CheckInvBillLine.InvBillno='''+Bill_ID+'''';
  AdoQry_Body.Open;
  AdoQry_Body.Sort:='InvBillLineNo';
  if (Status='AllEdit') then
  begin
    CmBx_Warehouse.enabled:=True;
    Edt_BillNo.enabled:=False;
    //MEdt_BillDate.enabled:=False;
    CmBx_Warehouse.enabled:=False;
    CmBx_WhPosition.enabled:=False;
    Edt_RemArk.enabled:=True;
    MEdt_InAccountDate.enabled:=False;
    LEdt_CheckEmployeeCode.enabled:=True;
    ExtEdt_VendorCode.enabled:=True;
  end;
end;

procedure TFrm_Stk_Enter_CheckInvBill.SaveData;
var
  InvBillWHChck,Bill_No,OldSort,FromCheckIn,OverPlan:String;
  Bill_Id,DispStr,Tempstr:string;
  Bill_LineNo,i:Integer;
  NeedChangePrice:Boolean;
  edTEmployeeName:string;
begin
  inherited;
  DBGridEhColExit(dbgrideh);
  SaveCheck;
  if AdoQry_Body.State in [dsedit,dsinsert] then
    AdoQry_Body.post;
  DispStr:='单据保存失败,请稍后再试';
  //先从PO中取出币种及税率
  DBGridEhColExit(DBGridEh);
  if AdoQry_Body.RecordCount=0 then
  begin
    DispStr:=' 新增的单据没有记录,不允许保存 ';
    DispInfo(DispStr,3) ;
    Abort;
  end;
  {with AdoQry_Body do
  begin
    First;
    while not eof do
    begin
      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:=' select MoLineStatus from  MoLine '
        +' Where mONo='''+Trim(Edt_PoNO.Text)+''''
        +' And MoLineNo='+AdoQry_Body.fieldbyname('POLineNo').AsString ;

      AdoQry_Tmp.open;
      if AdoQry_Tmp.fieldbyname('MoLineStatus').asinteger=7  then
      begin
        DispInfo('生产订单号:'+Edt_PoNO.Text+'中'+AdoQry_Body.fieldbyname('POLineNo').AsString+
                  '已关闭不能入库!',3);
        abort;
      end;
      next;
    end;
    AdoQry_tmp.Close;
  end;}
  AdoQry_Body.DisableControls ;
  DBConnect.beginTrans;
  try
    NeedChangePrice:=NeedChangeAveragePrice(AdoQry_Tmp,Copy(MEdt_BillDate.Text,1,7));
   if (Status='Add') then
   begin
     Bill_No:=GetNo(DBConnect,GetCode(CmBx_Warehouse.Text)+'R'
      +FormatDateTime('yymm',StrToDate(MEdt_BillDate.Text)),'InvBill');
    edt_Billno.Text:=Bill_No;
    AdoQry_Tmp.Close;
    AdoQry_tmp.sql.clear;
    AdoQry_Tmp.SQL.Text:='Insert Inv_CheckInvBill'
      +'(InvBillNo,DeptCode,InvBillDate,WHCode,WhPositionCode,'
      +' CheckEmployeeCode,InAccountDate'
      +',CreateEmployeeCode,CreateDate,RemArk)'
      +' Values('
      +' '''+Bill_No+''''
      +','''+ExtEdt_VendorCode.text+''''
      +','''+FormatDateTime('yyyy.mm.dd',StrToDate(MEdt_BillDate.Text))+''''
      +','''+GetCode(CmBx_Warehouse.Text)+''''
      +','''+GetCode(Cmbx_WhPosition.Text)+''''
      +','''+LEdt_CheckEmployeeCode.text+''''
      +','''+MEdt_InAccountDate.text+''''
      +','''+UserCode+''''
      +',getdate()'
      +','''+Edt_RemArk.Text+''''
      +')';
    AdoQry_Tmp.ExecSQL;
   end;
    if (Status='AllEdit') then
    begin
      Bill_No:=edt_Billno.Text;
      AdoQry_Tmp.Close;
      AdoQry_tmp.sql.clear;
      AdoQry_Tmp.SQL.Text:=' update  Inv_CheckInvBill '+
                              ' set  DeptCode='''+ExtEdt_VendorCode.text+''','+
                                  '  WHCode='''+GetCode(CmBx_Warehouse.Text)+''','+
                                  '  WhPositionCode='''+GetCode(Cmbx_WhPosition.Text)+''','+
                                  '  CheckEmployeeCode='''+LEdt_CheckEmployeeCode.text+''''+','+
                                  '  InvBillDate='''+FormatDateTime('yyyy.mm.dd',StrToDate(MEdt_BillDate.Text))+''''+','+
                                  '  EdItEmployeeCode='''+userCode+''''+','+
                                  '  EditDate=getdate(),'+
                                  '  RemArk='''+Edt_RemArk.Text+''''+
                           '  where  InvBillNo='''+Trim(edt_Billno.Text)+'''';
      AdoQry_Tmp.ExecSQL;
      //del Inv_CheckInvBillLine
      Executesql(AdoQry_tmp,' delete Inv_CheckInvBillline where InvBillNo='''+Trim(edt_Billno.Text)+'''',1)

    end;
    {AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:='Select @@identity as Bill_Id';
    AdoQry_Tmp.Open;
    Bill_Id:=AdoQry_Tmp.fieldbyname('Bill_Id').AsString;}
    //更新库存标记
    ChangeInvStatus(AdoQry_Tmp,GetCode(CmBx_Warehouse.Text),
      FormatDateTime('yy.mm',StrToDate(MEdt_BillDate.Text)));

    AdoQry_Body.First;
    Bill_LineNo:=1;
    dbgrideh.Enabled :=False;
    try
      while(not AdoQry_Body.Eof)do
      begin
        //检查库存
        AdoQry_Tmp.Close;
        AdoQry_Tmp.SQL.Text:='Insert Inv_CheckInvBillLine (InvBillNo,InvBillLineNo'
          +',ItemCode,BatchNo,AccountQty,CheckQty,ProfitLossQty,PLCause)'
          +' Values('
          +' '''+Bill_No+''''
          +','+IntToStr(Bill_LineNo)+''
          +','''+AdoQry_Body.fieldbyname('ItemCode').AsString+''''
          +','''+AdoQry_Body.fieldbyname('BatchNo').AsString+''''
          +','+AdoQry_Body.fieldbyname('AccountQty').AsString+''
          +','+AdoQry_Body.fieldbyname('CheckQty').AsString+''
          +','''+AdoQry_Body.fieldbyname('ProfitLossQty').AsString+''''
          +','''+AdoQry_Body.fieldbyname('PLCause').AsString+''''
          +')';
        AdoQry_Tmp.ExecSQL;
        AdoQry_Body.Next;
        Bill_LineNo:=Bill_LineNo+1;
      end;
    finally
      dbgrideh.Enabled :=True;
    end;
    DBConnect.CommitTrans;
    AdoQry_Body.EnableControls ;
    ExtEdt_VendorCode.Enabled :=False;
    CmBx_Warehouse.Enabled :=False;
    CmBx_WhPosition.Enabled:=False;
    LEdt_CheckEmployeeCode.Enabled:=False;
    MEdt_InAccountDate.Enabled:=False;
    MEdt_BillDate.Enabled:=False;
    Edt_RemArk.Enabled:=False;
    Act_Save.Enabled:=False;
    if (Status='Add') then
    begin
      AdoQry_Head.Edit ;
      AdoQry_Head.fieldbyname ('InvBillNo').asstring:=Edt_BillNo.text;
      AdoQry_Head.post;
    end;
    if (Status='AllEdit') then
    begin
      with AdoQry_tmp do
      begin
        Close;
        sql.text:='select EmployeeName from Employee where EmployeeCode='''+userCode+'''';
        open;
        edTEmployeeName:=fieldbyname('EmployeeName').asstring;
        Close;
      end;
      with AdoQry_Head do
      begin//把根据表头当前数据初始化,表头控件
        edit ;
        fieldbyname('EdItEmployeeCode').AsString:=userCode;
        fieldbyname('EditDate').AsString:=FormatDateTime('yyyy.mm.dd',now);
        fieldbyname('edTEmployeeName').AsString:=edTEmployeeName;
        post;
      end;
    end;
    DBGridEh.Columns[6].ReadOnly :=True;
    DBGridEh.Columns[8].ReadOnly :=True;
  except
    on e:Exception do
    begin
      DBConnect.RollBackTrans;
      Act_Save.Enabled:=True;
      RecOrderror(Self,AdoQry_tmp,E.message);
      AdoQry_Body.EnableControls ;
      DispInfo(DispStr,3);
      Abort;
    end;
  end;
end;

procedure TFrm_Stk_Enter_CheckInvBill.SaveHeadData;
begin//把表头控件写入缓存,没Post
  inherited;
  with AdoQry_Head do
  begin//把根据表头当前数据初始化,表头控件
    fieldbyname('WHCode').AsString:=GetCode(CmBx_Warehouse.Text);
    fieldbyname('WHName').AsString:=GetName(CmBx_Warehouse.Text);
    fieldbyname('InvBillNo').AsString:=Edt_BillNo.Text;
    fieldbyname('DeptCode').AsString:=ExtEdt_VendorCode.Text;
    fieldbyname('DeptName').AsString:=Lbl_VendorName.text;
    fieldbyname('WhPositionCode').AsString:=GetCode(CmBx_WhPosition.Text);
    fieldbyname('WhPositionName').AsString:=GetName(CmBx_WhPosition.Text);
    fieldbyname('InvBillNo').AsString:=Edt_BillNo.Text;
    fieldbyname('InvBillDate').AsString:=MEdt_BillDate.Text;
    fieldbyname('InAccountDate').AsString:=MEdt_InAccountDate.Text;
    fieldbyname('RemArk').AsString:=Edt_ReMArk.Text;
    fieldbyname('CheckEmployeeCode').asstring:=LEdt_CheckEmployeeCode.text;
    fieldbyname('chEmployeeName').asstring:=Edt_CheckEmployeeName.text;  
  end;
end;

procedure TFrm_Stk_Enter_CheckInvBill.SetStatus(CurrentStatus: String;
  var AnswerStatus, EnableControls: String);
begin//窗体状态设置
  inherited;
  if(CurrentStatus='Edit')then
  begin
    AnswerStatus:='Edit';
    EnableControls:='Edt_RemArk,CmBx_WhPosition,MEdt_BillDate,';
  end
  else if (CurrentStatus='Add') then
  begin
    //AnswerStatus:='Add';
   // EnableControls:='Edt_RemArk,';
  end;
end;

procedure TFrm_Stk_Enter_CheckInvBill.FormCreate(Sender: TObject);
begin
  inherited;
  Act_Save.Enabled:=True;
  Frm_Entry_Detail:=TFrm_Stk_Enter_CheckInvBill_D.Create(self);
end;

procedure TFrm_Stk_Enter_CheckInvBill.CmBx_WarehouseChange(Sender: TObject);
var
  tmp_WhCode,tmp_WhPositionCode:string;
begin

⌨️ 快捷键说明

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