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

📄 sal_enter_foreverclosesaleorder.pas

📁 一个MRPII系统源代码版本
💻 PAS
字号:
unit Sal_Enter_ForeverCloseSaleOrder;

Interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Base_Check, Menus, Db, ActnList, AdODB, Grids, DBGridEh, StdCtrls,
  ExtCtrls, ComCtrls, ToolWin, DBCtrls, ExtPrintReport, jpeg;

Type
  TFrm_Sal_Enter_ForeverCloseSaleOrder = Class(TFrm_Base_Check)
    DBText2: TDBText;
    Label2: TLabel;
    AdoQry_Headslocheck: TIntegerField;
    AdoQry_Headcreatedate: TDateTimeField;
    AdoQry_Headslono: TStringField;
    AdoQry_Headslolineno: TIntegerField;
    AdoQry_HeadItemCode: TStringField;
    AdoQry_HeadItemName: TStringField;
    AdoQry_HeadItemflag: TStringField;
    AdoQry_Headslolinestatus: TIntegerField;
    AdoQry_Headslolinedate: TDateTimeField;
    AdoQry_Headsloqty: TFloatField;
    AdoQry_HeadcustomerCode: TStringField;
    AdoQry_HeadcustomerName: TStringField;
    AdoQry_Headcustomerflag: TStringField;
    AdoQry_HeadSaleTypeName: TStringField;
    AdoQry_HeadSaleTypeflag: TStringField;
    AdoQry_HeadSaleDeptCode: TStringField;
    AdoQry_HeadDeptName: TStringField;
    AdoQry_HeadDeptflag: TStringField;
    AdoQry_HeadSaleEmployeeCode: TStringField;
    AdoQry_HeadEmployeeName: TStringField;
    AdoQry_HeadEmployeeflag: TStringField;
    AdoQry_HeadslolineremArk: TStringField;
    AdoQry_Headlastoperationtime: TDateTimeField;
    AdoQry_HeadSaleTypeCode: TStringField;
    AdoQry_HeadShipqty: TFloatField;
    Label1: TLabel;
    DBText1: TDBText;
    AdoQry_HeadcustomerPmno: TStringField;
    AdoQry_Headreferenceno: TStringField;
    procedure FormDestroy(Sender: TObject);
    procedure Act_CheckExecute(Sender: TObject);
    procedure Act_CancelCheckExecute(Sender: TObject);
    procedure DBGridEhDblClick(Sender: TObject);
    procedure DBGridEhTitleClick(Column: TColumnEh);
    procedure AdoQry_HeadBeforeInsert(DataSet: TDataSet);
    procedure FormCreate(Sender: TObject);
    procedure Act_ExcelExecute(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    Flag:Boolean;
    { Private declarations }
  public
    procedure InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);Override;
    { Public declarations }
  end;

var
          Frm_Sal_Enter_ForeverCloseSaleOrder: TFrm_Sal_Enter_ForeverCloseSaleOrder;
          i:integer;
implementation

uses Sys_Global;

{$R *.DFM}

procedure TFrm_Sal_Enter_ForeverCloseSaleOrder.InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);
var sqltext:string;
begin
  Application.ProcessMessages;
  Inherited;
  sqltext:='select t2.slocheck,      '
           +'      t1.Createdate,     '
           +'      t1.customerPmno,   '
           +'      t1.referenceno,    '
           +'      t2.slono,          '
           +'      t2.slolineno,     '
           +'      t2.ItemCode,      '
           +'      Item.ItemName,    '
           +'      t2.ItemCode+'' ''+Item.ItemName as Itemflag,  '
           +'      t2.slolinestatus, '
           +'      t2.slolinedate,   '
           +'      t2.sloqty,        '
           +'      t2.Shipqty,       '
          // +'      t2.noFinishsloqty, '
           +'      t1.customerCode,   '
           +'      customer.customerName,  '
           +'      t1.customerCode+'' ''+customer.customerName as customerflag, '
           +'      t1.SaleTypeCode,            '
           +'      SaleType.SaleTypeName,  '
           +'      t1.SaleTypeCode+'' ''+SaleType.SaleTypeName as SaleTypeflag,  '
           +'      t1.SaleDeptCode,        '
          +'       Dept.DeptName,          '
          +'       t1.SaleDeptCode+'' ''+Dept.DeptName as Deptflag,  '
          +'       t1.SaleEmployeeCode,    '
          +'       Employee.EmployeeName,  '
          +'       t1.SaleEmployeeCode+'' ''+Employee.EmployeeName as Employeeflag, '
          +'       t2.lastoperationtime,  '
          +'       t2.slolineremArk        '
        +'   into #tMpSaleOrderForeverClose  '
        +'  from  sa_SaleOrderline t2       '
        +'  join sa_SaleOrder t1 on t2.slono=t1.slono   '
        +'  left outer join Item on t2.ItemCode=Item.ItemCode  '
        +'  left outer join customer on t1.customerCode=customer.customerCode  '
        +'  left outer join SaleType on t1.SaleTypeCode=SaleType.SaleTypeCode    '
        +'  left outer join Dept on t1.SaleDeptCode=Dept.DeptCode            '
        +'  left outer join Employee on t1.SaleEmployeeCode=Employee.EmployeeCode  ';
 condition:='slolinestatus=7';
 conditionuserDefine:='(slolinestatus=7 or slolinestatus=8)';
 Orderbyfields:='createdate,slono';
 Executesql(AdoQry_Head,sqltext,1);
 selectfromsql:='select * from #tMpSaleOrderForeverClose';
 Executesql(AdoQry_Head,'select * from #tMpSaleOrderForeverClose where slolinestatus=7',0);
 Flag:=False;
end;

procedure TFrm_Sal_Enter_ForeverCloseSaleOrder.FormDestroy(Sender: TObject);
begin
  inherited;
  Frm_Sal_Enter_ForeverCloseSaleOrder:=Nil;
end;

procedure TFrm_Sal_Enter_ForeverCloseSaleOrder.Act_CheckExecute(Sender: TObject);
    function checksloline:boolean;
      var sqltext:string;
      begin
        Result:=False;
        If (AdoQry_Head.fieldbyname('sloCheck').AsInteger=1) And (AdoQry_Head.fieldbyname('slolineStatus').AsInteger=7) Then
        begin
          SqlText:=' Select * From sa_SaleOrderline '
                   +'  Where slono='+quotedStr(AdoQry_Head.fieldbyname('slono').Asstring)
                   +'   and  slolineno='+inttostr(AdoQry_Head.fieldbyname('slolineno').asinteger);
          AdoQry_Tmp.Close;
          AdoQry_Tmp.SQL.Text:=SqlText;
          AdoQry_Tmp.Open;
          If AdoQry_Tmp.Eof Then
          begin
            If DbConnect.InTransaction Then
              DbConnect.RollBackTrans;
              DispInfo('选定的第'+IntToStr(I)+'条销售订单行已被删除,请刷新!',3);
              Abort;
          end
          else
            if AdoQry_Tmp.fieldbyname('slolineStatus').AsInteger <>7 then
              begin
                If DbConnect.InTransaction Then
                  DbConnect.RollBackTrans;
                  DispInfo('选定的第'+IntToStr(I)+'条销售订单行状态已被其它用户修改,请刷新!',3);
                  Abort;
              end;
        Result:=True;
        end;

      end;

    procedure Closesloline;
     var sqlstring:string;
     begin
       sqlstring:='Update sa_SaleOrderline '
                  +' set slolineStatus=8, '
                  +'     lastoperationtime='+quotedstr(GetServerDateTime(dbconnect))
                  +' Where slono='+quotedStr(AdoQry_Head.fieldbyname('slono').Asstring)
                   +'   and  slolineno='+inttostr(AdoQry_Head.fieldbyname('slolineno').asinteger)
                  +' And slolineStatus=7 ';
          AdoQry_tmp.Close;
          AdoQry_tmp.SQL.Text:=Sqlstring;
          AdoQry_tmp.ExecSQL;

          Sqlstring:='Update #tMpSaleOrderForeverClose '
                  +' set slolineStatus=8, '
                  +'     lastoperationtime='+quotedstr(GetServerDateTime(dbconnect))
                  +' Where slono='+quotedStr(AdoQry_Head.fieldbyname('slono').Asstring)
                   +'   and  slolineno='+inttostr(AdoQry_Head.fieldbyname('slolineno').asinteger)
                  +' And slolineStatus=7 ';
          AdoQry_tmp.Close;
          AdoQry_tmp.SQL.Text:=Sqlstring;
          AdoQry_tmp.ExecSQL;
     end;
var
  BookMArk:String;
begin
  inherited;
  If AdoQry_Head.RecordCount=0 Then
    Abort;
  BookMArk:=AdoQry_Head.BookmArk;
  If DispInfo('确认结算选定的销售订单吗?',2)='y' Then
  begin
    I:=1;
    Try
      AdoQry_Head.First;
      While Not AdoQry_Head.Eof Do
      begin
       Dbconnect.beginTrans;
        if  checksloline then
         begin
          saveSaleOrderLineHistory(dbconnect,AdoQry_Head.fieldbyname('slono').asstring,AdoQry_Head.fieldbyname('slolineno').asinteger,userCode,7);
          Closesloline;
          AdoQry_Head.Edit;
          AdoQry_Head.fieldbyname('slolineStatus').AsInteger:=8;
          AdoQry_Head.fieldbyname('sloCheck').AsInteger:=0;
          AdoQry_Head.Post;
          I:=I+1;
          DbConnect.CommitTrans;
          AdoQry_Head.Next;
         end
        Else
        begin
          I:=I+1;
          DbConnect.CommitTrans;
          AdoQry_Head.Next;
        end;
     end;
    Except
      If DbConnect.InTransaction Then
        DbConnect.RollBackTrans;
      DispInfo('更改数据时发生错误,数据未更改,请重试!',1);
      AdoQry_Head.BookMArk:=BookmArk;
      Abort;
    end;
  end;
  AdoQry_Head.BookMArk:=BookmArk;
  Flag:=Not Flag;
end;

procedure TFrm_Sal_Enter_ForeverCloseSaleOrder.Act_CancelCheckExecute(Sender: TObject);
  {  function checksloline:boolean;
      var sqltext:string;
      begin
       Result:=False;
        If (AdoQry_Head.fieldbyname('sloCheck').AsInteger=1)
            And (AdoQry_Head.fieldbyname('slolineStatus').AsInteger=3)
             Then
        begin
          SqlText:=' Select * From sa_SaleOrderline '
                   +'  Where slono='+quotedStr(AdoQry_Head.fieldbyname('slono').Asstring)
                   +'   and  slolineno='+inttostr(AdoQry_Head.fieldbyname('slolineno').asinteger);
          AdoQry_Tmp.Close;
          AdoQry_Tmp.SQL.Text:=SqlText;
          AdoQry_Tmp.Open;
          If AdoQry_Tmp.Eof Then
          begin
            If DbConnect.InTransaction Then
              DbConnect.RollBackTrans;
              DispInfo('选定的第'+IntToStr(I)+'条销售订单行已被删除,请刷新!',3);
              abort;
          end
          else
            if AdoQry_Tmp.fieldbyname('slolineStatus').asfloat <> 3 then
              begin
                If DbConnect.InTransaction Then
                  DbConnect.RollBackTrans;
                  DispInfo('选定的第'+IntToStr(I)+'条销售订单行状态已被其它用户修改,请刷新!',3);
                  abort;
              end;
        Result:=True;
        end;
      end;

      procedure unClosesloline;
       var sqlstring:string;
       begin
          Sqlstring:='Update sa_SaleOrderline '
                  +' set slolineStatus=2'
                  +' Where slono='+quotedStr(AdoQry_Head.fieldbyname('slono').Asstring)
                   +'   and  slolineno='+inttostr(AdoQry_Head.fieldbyname('slolineno').asinteger)
                  +' And slolineStatus=3 ';
          AdoQry_tmp.Close;
          AdoQry_tmp.SQL.Text:=Sqlstring;
          AdoQry_tmp.ExecSQL;


          Sqlstring:='Update #tMpSaleOrderForeverClose '
                  +' set slolineStatus=2 '
                  +' Where slono='+quotedStr(AdoQry_Head.fieldbyname('slono').Asstring)
                   +'   and  slolineno='+inttostr(AdoQry_Head.fieldbyname('slolineno').asinteger)
                  +' And slolineStatus=3 ';
          AdoQry_tmp.Close;
          AdoQry_tmp.SQL.Text:=Sqlstring;
          AdoQry_tmp.ExecSQL;

       end;
var
  SqlText,BookMArk:String;
  I:Integer;    }
begin
  inherited;
{   If AdoQry_Head.RecordCount=0 Then
    Abort;
  BookMArk:=AdoQry_Head.BookmArk;
  If DispInfo('确认取消关闭选定销售合同行吗?',2)='y' Then
  begin
    I:=1;
    Try
      AdoQry_Head.First;
      While Not AdoQry_Head.Eof Do
       begin
              DbConnect.beginTrans;
       if checksloline then
        begin
          saveSaleOrderLineHistory(dbconnect,AdoQry_Head.fieldbyname('slono').asstring,AdoQry_Head.fieldbyname('slolineno').asinteger,userCode,6);
           unClosesloline;
           AdoQry_Head.Edit;
          AdoQry_Head.fieldbyname('slolineStatus').AsInteger:=2;
          AdoQry_Head.fieldbyname('sloCheck').AsInteger:=0;
          AdoQry_Head.Post;
          I:=I+1;
          AdoQry_Head.Next;
          dbconnect.CommitTrans;
        end
        Else
        begin
          I:=I+1;
          AdoQry_Head.Next;
          DbConnect.CommitTrans;
        end;
        end;
    Except
      If DbConnect.InTransaction Then
        DbConnect.RollBackTrans;
      DispInfo('更改数据时发生错误,数据未更改,请重试!',1);
      AdoQry_Head.BookMArk:=BookmArk;
      Abort;
    end;
  end;
  AdoQry_Head.BookMArk:=BookmArk;
  Flag:=Not Flag;   }
end;

procedure TFrm_Sal_Enter_ForeverCloseSaleOrder.DBGridEhDblClick(Sender: TObject);
begin
  inherited;
   If AdoQry_Head.RecordCount=0 Then
    Abort;
  If AdoQry_Head.fieldbyname('slolineStatus').AsInteger=7 then
    Act_CheckExecute(Act_Check)
  Else
    Act_CancelCheckExecute(Act_CancelCheck);
end;

procedure TFrm_Sal_Enter_ForeverCloseSaleOrder.DBGridEhTitleClick(Column: TColumnEh);
var
  BookMArk:String;
begin
  inherited;
  If Trim(Column.Title.Caption)<>'标记' Then
    Abort;
  If AdoQry_Head.RecordCount=0 Then
    Abort;
  BookMArk:=AdoQry_Head.BookmArk;
  If Not Flag Then
  begin
    AdoQry_Head.First;
    While Not AdoQry_Head.Eof Do
    begin
      AdoQry_Head.Edit;
      AdoQry_Head.fieldbyname('sloCheck').AsInteger:=1;
      AdoQry_Head.Post;
      AdoQry_Head.Next;
    end;
  end
  Else
  begin
    AdoQry_Head.First;
    While Not AdoQry_Head.Eof Do
    begin
      AdoQry_Head.Edit;
      AdoQry_Head.fieldbyname('sloCheck').AsInteger:=0;
      AdoQry_Head.Post;
      AdoQry_Head.Next;
    end;
  end;
  AdoQry_Head.BookmArk:=BookMArk;
  Flag:=Not Flag;
end;

procedure TFrm_Sal_Enter_ForeverCloseSaleOrder.AdoQry_HeadBeforeInsert(
  DataSet: TDataSet);
begin
  inherited;
  Abort;
end;

procedure TFrm_Sal_Enter_ForeverCloseSaleOrder.FormCreate(Sender: TObject);
begin
  inherited;
ToolButton6.Action:=act_excel;
end;

procedure TFrm_Sal_Enter_ForeverCloseSaleOrder.Act_ExcelExecute(Sender: TObject);
begin
 // inherited;
 dbgridehtoexcel(dbgrideh);
end;

procedure TFrm_Sal_Enter_ForeverCloseSaleOrder.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
try
Executesql(AdoQry_tmp,'drop table #tMpSaleOrderForeverClose',1);
except
end;
end;

end.

⌨️ 快捷键说明

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