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

📄 dllform.pas

📁 BOM表
💻 PAS
字号:
unit DllForm;

interface
uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls, Variants,
  Forms, DB, ADODB, Dialogs, Global,datamodule,UnitBomRequery;

type
  TnxDllForm = class(TObject)
  private
    //功能模块主form
    FForm: TForm;
    //系统参数类
    FEnv: TEnv;
    //数据库连接的datamoudle
    FDM: TDM;
    //数据库连接的dataset
    FObjectDS: TDataSet;
  public
    //  函数:建立并返回模块主Form
    function GetForm: TForm; virtual; stdcall;
    //  设置  ObjectDataSet: 主数据集 (由Pub_Objects主表构成)
    procedure SetObjectDS(MainDS: TDataSet); virtual; stdcall;
    //  设置主应用程序使用的DM
    procedure SetDM(ADM: TDM); virtual; stdcall;
    //  设置主应用程序使用的Env
    procedure SetEnv(AEnv: TEnv); virtual; stdcall;
    //  将Form加载到容器上
    procedure BringForm(ParentCtrl: TWinControl); virtual; stdcall;
    //  函数:触发数据移动事件
    procedure TigEvent(ObjectID: Integer); virtual; stdcall;
    //  函数:删除当前数据前。返回为是否允许并成功删除
    function BeforeDeleteData(ObjectID: Integer): Boolean; virtual; stdcall;
    //  函数:删除当前数据后。
    procedure AfterDeleteData; virtual; stdcall;
    //  函数:编辑当前数据。返回为是否允许编辑
    function SetEditState(State: Boolean; ObjectID: Integer): Boolean; virtual; stdcall;
    //  函数:增加数据前。返回为是否允许增加
    function BeforeAppendData(ObjectID: Integer): Boolean; virtual; stdcall;
    //  函数:增加数据后。
    procedure AfterAppendData(ObjectID: Integer); virtual; stdcall;
    //  函数:打印。如果返回False,说明该模块没有打印功能
    function PrintData(ObjectID: Integer): Boolean; virtual; stdcall;
    //  设置回调函数
    procedure SetCallbackFO(ADoActionHyper: TDoActionHyper); virtual; stdcall;


    constructor Create;
    destructor Destroy;
  end;

implementation
    { TnxDllForm }


    function TnxDllForm.GetForm: TForm;
    begin
    Result := FForm;
    end;

    procedure TnxDllForm.SetObjectDS(MainDS: TDataSet);
    begin
    
    FObjectDS := MainDS;
    end;

    procedure TnxDllForm.SetDM(ADM: TDM);
    begin
      //  设置主应用程序使用的DM
      FDM := ADM;
      DM  := ADM;
    end;
    procedure TnxDllForm.SetEnv(AEnv: TEnv);
    begin
      //  设置主应用程序使用的Env
      Env := AEnv;
    end;

    procedure TnxDllForm.BringForm(ParentCtrl: TWinControl);
    begin
       //  将Form加载到容器上
      FForm.ParentWindow := ParentCtrl.Handle;
      FForm.BorderStyle := bsNone;
      FForm.Top := 0;
      FForm.Left := 0;
      FForm.Height := ParentCtrl.Height;
      FForm.Width := ParentCtrl.Width;
      FForm.Show;


    end;

    procedure TnxDllForm.TigEvent(ObjectID: Integer);
    var
       I:Integer;
       ProXinZhi : String;
       ProQuyu : String;
       TempDQXS : Double;
    begin
      //  函数:触发数据移动事件
      if not Assigned(FForm) then Exit;
      with TFormBomRequery(FForm) do
      begin

      cxDBMaskEditGJCB.Properties.ReadOnly := True;
      cxDBMaskEditQTCB.Properties.ReadOnly := True;
      cxDBMaskEditXSCB.Properties.ReadOnly := True;
      cxDBMaskEditDQCB.Properties.ReadOnly := True;
      cxDBMaskEditMBBJ.Properties.ReadOnly := True;
      cxDBMaskEditZZS.Properties.ReadOnly := True;
      cxMaskEditXiaoJi.Properties.ReadOnly := True;
      cxDBMaskEditFJS.Properties.ReadOnly := True;

      cxDBMaskEditQTXS.Properties.ReadOnly := True;
      cxDBMaskEditXSXS.Properties.ReadOnly := True;
      cxDBMaskEditDQXS.Properties.ReadOnly := True;
      cxDBMaskEditZZSXS.Properties.ReadOnly := True;
      cxDBMaskEditFJSXS.Properties.ReadOnly := True;

      Button1.Enabled := False;

        ObjID := ObjectID;

        with ADOQueryBOM do
        begin
          if Active then Close;
          Connection := env.ADOConnection;
          SQl.Text := ' SELECT  MaterailClass, MaterailName, MaterailType, SUM(MaterailCount) as MaterailCount, ' +
                      ' SUM(MaterailCostSum)  as MaterailCostSum, ' +
                      ' MaterailCost ,Gui_Class   FROM View_BomRequery  ' +
                      ' where  (ObjectID IN   (SELECT ObjectID FROM Pub_Objects WHERE ObjectParentID =  '+IntToStr(ObjectID) + '))'+
                      ' GROUP BY  MaterailClass, MaterailName, MaterailType, MaterailProgID,MaterailCost,Gui_Class  ';
           Open;
          // First;
           {TempText := 0;
           while not Eof do
           begin
             TempText := TempText + FieldByName('MaterailCostSum').AsFloat;
             Next;
           end; }
        //  ADOQueryBOM.First;
        end;

        with TADOQuery.Create(nil) do
        begin
          Connection := env.ADOConnection;
          SQl.Text := ' SELECT  SUM(MaterailCostSum)  as MaterailCostSum   FROM View_BomRequery ' +
                      '  where  (ObjectID IN   (SELECT ObjectID FROM Pub_Objects WHERE ObjectParentID =  '+IntToStr(ObjectID) + '))';
           Open;
           First;
           TempText := StrToFloat(FormatFloat('0.00',FieldByName('MaterailCostSum').AsFloat));
           Free;
        end;


        with ADOQueryPrice do
        begin
          if Active then Close;
          Connection := env.ADOConnection;
          SQl.Text := 'select * from App_Price where ObjectID = ' + IntToStr(ObjID);
          Open;
          if not FieldByName('NotFirstShow').AsBoolean then
             FieldByName('MuBiaoGJ').Value := 0.00;
          Edit;
        end;

        with TADOQuery.Create(nil) do
        begin
          Connection := env.ADOConnection;
          SQL.Text := 'select * from app_projects  where proID = ' +
                      '(select  ObjectParentID from Pub_Objects where ObjectID = ' +
                      IntToStr(ObjID) + ' ) ';
          Open;
          First;
          if not Eof then
          begin
            ProXinZhi := FieldByName('ProXingzhi').AsString;
            ProQuyu := FieldByName('ProArea').AsString;
          end
          else
          begin
            ProXinZhi := '';
            ProQuyu := '';
          end;
          Free;
        end;

        With TADOQuery.Create(nil) do
        begin
          Connection := env.ADOConnection;
          SQL.Text := 'select * from app_baseCode ' +
                      ' where COwner in (''其他成本'',''销售员'',''地区费用'')' +
                      ' order by CID';
          Open;
          First;
          while not Eof do
          begin
            if not  ADOQueryPrice.FieldByName('NotFirstShow').AsBoolean then
            begin
              if not (ADOQueryPrice.State in [dsEdit,dsInsert]) then ADOQueryPrice.Edit;
              if FieldByName('COwner').AsString = '其他成本' then
                ADOQueryPrice.FieldByName('MuBiaoQTXS').Value := FieldByName('CDescript').Value ;
              if FieldByName('COwner').AsString = '销售员' then
                ADOQueryPrice.FieldByName('MuBiaoXSYXS').Value := FieldByName('CDescript').Value ;
              if FieldByName('COwner').AsString = '地区费用' then
              begin
                if ProXinZhi = '电力局用户站' then
                begin

                   TempDQXS := FieldByName('CDescript').Value;
                  with TADOQuery.Create(nil) do
                  begin

                    Connection := env.ADOConnection;
                    SQL.Text := 'select * from app_BaseCode where CName = ''地区费用'' and ' +
                                'COwner = ''' + ProQuyu + '''' ;
                    Open;
                    First;
                    if not Eof then
                      ADOQueryPrice.FieldByName('MuBiaoDQXS').Value := FieldByName('CDescript').Value
                    else
                      ADOQueryPrice.FieldByName('MuBiaoDQXS').Value :=  TempDQXS;
                    Free;
                  end;
                end
                else
                  ADOQueryPrice.FieldByName('MuBiaoDQXS').Value  := 0.00;
              end;
            end;
            Next;

          end;
          //if not  (ADOQueryPrice.State in [dsEdit,dsInsert]) then ADOQueryPrice.Edit;

          ADOQueryPrice.FieldByName('NotFirstShow').Value  := 1;
          ADOQueryPrice.Post;
          Free;
        end;

        with TADOQuery.Create(nil) do
        begin
          Connection := Env.ADOConnection;
          SQL.Text := 'SELECT Count(*)  as CountRcd FROM App_MaterailPrice ' +
                      ' WHERE (ISNULL(MaterailCost, 0) = 0) AND (ObjectID IN '+
                      ' (SELECT ObjectID FROM pub_Objects '+
                      ' WHERE ObjectParentID = '+ IntToStr(ObjectID)  +
                      ' AND Isnull(ObjectdeleteFlag, 0) = 0))';
          Open;
          IF FieldByName('CountRcd').AsInteger > 0 then
            ButtonRefresh.Enabled := True
          Else
            ButtonRefresh.Enabled := False;
          Free;
        end;


      end;

    end;

    function TnxDllForm.BeforeDeleteData(ObjectID: Integer): Boolean;
    begin
     //  函数:删除当前数据前。返回为是否允许并成功删除
    end;

    procedure TnxDllForm.AfterDeleteData;
    begin
     //  函数:删除当前数据后。
    end;

    function TnxDllForm.SetEditState(State: Boolean; ObjectID: Integer): Boolean;
    begin
     //  函数:编辑当前数据。返回为是否允许编辑


      Result := False;
    end;

    function TnxDllForm.BeforeAppendData(ObjectID: Integer): Boolean;
    begin
    //  函数:增加数据前。返回为是否允许增加
      showmessage('无法新增');
      Result := False;
    end;

    
    procedure TnxDllForm.AfterAppendData(ObjectID: Integer);
    begin
    //  函数:增加数据后。
    end;
    function TnxDllForm.PrintData(ObjectID: Integer): Boolean;
    begin
    //  函数:打印。如果返回False,说明该模块没有打印功能
    end;

    procedure TnxDllForm.SetCallbackFO(ADoActionHyper: TDoActionHyper);
    begin
    //  设置回调函数
    if not Assigned(FForm) then Exit;
      // TTestForm(FForm).ADoActionHyper := ADoActionHyper;
    end;

constructor TnxDllForm.Create;
    begin
       FEnv := nil;
       FDM  := nil;

  FormBomRequery := TFormBomRequery.Create(Application);
  FForm := FormBomRequery;
    end;
destructor TnxDllForm.Destroy;
begin

  if Assigned(FForm) then FForm.Free;

end;
end.

⌨️ 快捷键说明

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