编辑代码

unit ufrmCardInfoModify;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ufrmModifyDataBase, ImgList, StdCtrls, Buttons, DB, ADODB,
  CSADOQuery, dxExEdtr, dxEdLib, dxDBELib, dxEditor, dxCntner, 
  CSCustomdxDateEdit, CSdxDBDateEdit, OleCtrls, MSCommLib_TLB, ExtCtrls,
  ExtDlgs=
type
 TfrmCardInfoModify = class(TfrmModifyDataBase)
    Viewq: TCSADOQuery;
    Viewd: TDataSource;
    Label1: TLabel;
    Label2: TLabel;
    Label11: TLabel;
    eCMId: TdxDBEdit;
    eCMName: TdxDBEdit;
    eCMTel: TdxDBEdit;
    Label16: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    eCMMail: TdxDBEdit;
    Label8: TLabel;
    Label5: TLabel;
    eCMOnlyNo: TdxDBEdit;
    Label9: TLabel;
    eCMDate: TCSdxDBDateEdit;
    Label6: TLabel;
    eCMOld: TdxDBSpinEdit;
    eCMSex: TdxDBPickEdit;
    eCMAddRess: TdxDBEdit;
    eCMTime: TdxDBEdit;
    Label7: TLabel;
    Label10: TLabel;
    eCardId: TdxDBEdit;
    eCardKindId: TdxDBButtonEdit;
    Label12: TLabel;
    eEmpId: TdxDBButtonEdit;
    cardinfoq: TCSADOQuery;
    cardinfoqcard_id: TStringField;
    cardinfoqcm_id: TStringField;
    cardinfoqkind_id: TIntegerField;
    cardinfoqcard_money: TBCDField;
    cardinfoqcard_state: TIntegerField;
    cardinfoqemp_id: TStringField;
    cardinfoqlogin_id: TStringField;
    Viewqcm_id: TStringField;
    Viewqcm_name: TStringField;
    Viewqcm_old: TIntegerField;
    Viewqcm_sex: TStringField;
    Viewqcm_address: TStringField;
    Viewqcm_tel: TStringField;
    Viewqcm_mail: TStringField;
    Viewqcm_onlyno: TStringField;
    Viewqcm_date: TStringField;
    Viewqcm_time: TStringField;
    Viewqlast_time: TDateTimeField;
    Viewqlogin_id: TStringField;
    Label13: TLabel;
    eBirthday: TCSdxDBDateEdit;
    Viewqcm_birthday: TStringField;
    bbtnServiceFix: TBitBtn;
    bbtnPrcFix: TBitBtn;
    MSComm: TMSComm;
    Label14: TLabel;
    imgView: TImage;
    bbtnSelect: TBitBtn;
    cardinfod: TDataSource;
    Imgd: TDataSource;
    Imgq: TCSADOQuery;
    Imgqcardid: TStringField;
    Imgqcardimg: TStringField;
    Imgqstart_date: TStringField;
    Imgqend_date: TStringField;
    eStartDate: TCSdxDBDateEdit;
    Label15: TLabel;
    eEndDate: TCSdxDBDateEdit;
    Label17: TLabel;
    procedure bbtnConfirmClick(Sender: TObject);
    procedure bbtnCancelClick(Sender: TObject);
    procedure eCardKindIdButtonClick(Sender: TObject;
      AbsoluteIndex: Integer);
    procedure eEmpIdButtonClick(Sender: TObject; AbsoluteIndex: Integer);
    procedure bbtnServiceFixClick(Sender: TObject);
    procedure bbtnSelectClick(Sender: TObject);
  private
    Fs_CMId: String;
    Fb_SelectImg: Boolean;
    Fi_OleTick, Fi_NewTick: DWord; 
    function prif_CanSave: Boolean;
    function prif_OpenComPort(Ai_Buff: Integer): boolean;
    function prif_SendCommand(Av_Command: Variant; Ai_Buff, Ai_Time: DWord): String;
  protected
    procedure prop_IniData; override;
  public
    { Public declarations }
  end;
const
  COMMANDHEAD = Chr(27);
var
  frmCardInfoModify: TfrmCardInfoModify;
implementation
uses udmData, ufrmBase, ufrmEmpView, ufrmCardKindView, ufrmCardServiceFix;
{$R *.dfm}
{ TfrmCardInfoModify }
procedure TfrmCardInfoModify.prop_IniData;
var
  ls_CMId, ls_CardId: String;
begin
  inherited;
  case Ri_Flag of
    2:
    begin
      Caption := Format(Caption, ['[]']);
      with cardInfoq do
      begin
        if Active then Close;
        Connection := dmData.adocon;
        SQL.Text := Format('SELECT * FROM cardinfo WHERE card_id = ''%s, [Rs_Id]);
        Open;
        Edit;
        ls_CMId := FieldByName('cm_id').AsString;
      end;
      with Viewq do
      begin
        if Active then Close;
        Connection := dmData.adocon;
        SQL.Text := Format('SELECT * FROM customerinfo WHERE cm_id = ''%s,
          [ls_CMId]);
        Open;
        Edit;
      end;
      with Imgq do
      begin
        if Active then Close;
        Connection := dmData.adocon;
        SQL.Text := Format('SELECT * FROM cardimage WHERE cardid = ''%s, [Rs_Id]);
        Open;
        if (FileExists(FieldByName('cardimg').AsString)) and (not FieldByName('cardimg').IsNull) then
        begin
          imgView.Picture.LoadFromFile(FieldByName('cardimg').AsString);
        end;
        Edit;
        FieldByName('cardid').AsString := Rs_Id;
      end;
    end;
    3:
    begin
      Caption := Format(Caption, ['[]']);
      with cardInfoq do
      begin
        if Active then Close;
        Connection := dmData.adocon;
        SQL.Text := Format('SELECT * FROM cardinfo WHERE card_id = ''%s, [Rs_Id]);
        Open;
        ls_CMId := FieldByName('cm_id').AsString;
      end;
      with Viewq do
      begin
        if Active then Close;
        Connection := dmData.adocon;
        SQL.Text := Format('SELECT * FROM customerinfo WHERE cm_id = ''%s,
          [ls_CMId]);
        Open; 
      end; 
      with Imgq do
      begin
        if Active then Close;
        Connection := dmData.adocon;
        SQL.Text := Format('SELECT * FROM cardimage WHERE cardid = ''%s, [Rs_Id]);
        Open; 
      end;
    end;
    1:
    begin
      ls_CMId := dmData.pubf_GetCustomerId;
      ls_CardId := dmData.pubf_GetCardId;
      with Viewq do
      begin
        if Active then Close;
        Connection := dmData.adocon;
        SQL.Text := 'SELECT * FROM customerinfo WHERE 1 = 2';
        Open;
        Caption := Format(Caption, ['[]']);
        Append;
        FieldByName('cm_id').AsString := ls_CMId;
        FieldByName('cm_date').AsString := FormatDateTime('YYYY-MM-DD', Date);
        FieldByName('cm_time').AsString := FormatDateTime('HH:MM:SS', Time);
      end;
      with cardInfoq do
      begin
        if Active then Close;
        Connection := dmData.adocon;
        SQL.Text := 'SELECT * FROM cardinfo WHERE 1 = 2';
        Open;
        Append;
        FieldByName('card_id').AsString := ls_CardId;
        FieldByName('cm_id').AsString := ls_CMId;
      end;
      with Imgq do
      begin
        if Active then Close;
        Connection := dmData.adocon;
        SQL.Text := 'SELECT * FROM cardimage WHERE 1 = 2';
        Open;
        Append;
        FieldByName('cardid').AsString := ls_CardId;
        FieldByName('start_date').AsString := FormatDateTime('YYYY-MM-DD', Date);
        FieldByName('end_date').AsString := FormatDateTime('YYYY-MM-DD', Date);
      end;
    end;
  end;
end;
procedure TfrmCardInfoModify.bbtnConfirmClick(Sender: TObject);
var
  ls_Receive, ls_CardId: String;
begin
  inherited;
  if dmData.Ai_Card = 1 then
  begin
    ls_Receive := prif_SendCommand('e', 1024, 3);
    if (Copy(ls_Receive, 1, 1) = Chr(27)) and (Copy(ls_Receive, 2, 1) = 'y') then
    else begin
      Application.MessageBox(',!', PChar(Caption),
        MB_OK + MB_ICONQUESTION);
      Exit;
    end;
    ls_Receive := prif_SendCommand('t' + '00000' + '8' + Chr(2) + 's' +
       '0' + cardInfoq.FieldByName('card_id').AsString + '0' + Chr(29) + Chr(27) + '\', 1024, 100);
    if Copy(ls_Receive, 1, 1) <> Chr(27) then /
    begin
      Application.MessageBox('1。', PChar(Caption),
        MB_OK + MB_ICONWARNING);
      Exit;
    end;
    if Copy(ls_Receive, 2, 2) = 'rq' then 
    begin
      Application.MessageBox('2。', PChar(Caption),
        MB_OK + MB_ICONWARNING);
      Exit;
    end;
  end;
  case Ri_Flag of
    1:
    begin
      if not prif_CanSave then Exit;
      Viewq.FieldByName('login_id').AsString := dmData.As_OptName;
      cardinfoq.FieldByName('login_id').AsString := dmData.As_OptName;
      cardinfoq.FieldByName('card_state').AsInteger := 1;
      Imgq.FieldByName('start_date').AsString := FormatDateTime('YYYY-MM-DD',
        StrToDate(Imgq.FieldByName('start_date').AsString));
      Imgq.FieldByName('end_date').AsString := FormatDateTime('YYYY-MM-DD',
        StrToDate(Imgq.FieldByName('end_date').AsString));
      Viewq.Post;
      cardinfoq.Post;
      Imgq.Post;
      if DispInfo(',?', 3) = 'y' then
      begin
        Viewq.Append;
        cardinfoq.Append;
        Fs_CMId := dmData.pubf_GetCustomerId;
        ls_CardId := dmData.pubf_GetCardId;
        cardinfoq.FieldByName('card_id').AsString := ls_CardId;
        cardinfoq.FieldByName('cm_id').AsString := Fs_CMId;
        Viewq.FieldByName('cm_id').AsString := Fs_CMId;
        Imgq.Append;
        Imgq.FieldByName('cardid').AsString := ls_CardId;
        Imgq.FieldByName('start_date').AsString := FormatDateTime('YYYY-MM-DD', Date);
        Imgq.FieldByName('end_date').AsString := FormatDateTime('YYYY-MM-DD', Date);
      end else ModalResult := mrOk;
    end;
    2:
    begin
      if not prif_CanSave then Exit;
      Viewq.FieldByName('login_id').AsString := dmData.As_OptName; 
      cardinfoq.FieldByName('login_id').AsString := dmData.As_OptName; 
      Imgq.FieldByName('start_date').AsString := FormatDateTime('YYYY-MM-DD',
        StrToDate(Imgq.FieldByName('start_date').AsString));
      Imgq.FieldByName('end_date').AsString := FormatDateTime('YYYY-MM-DD',
        StrToDate(Imgq.FieldByName('end_date').AsString));
      Viewq.Post;
      cardinfoq.Post;  
      Imgq.Post;
      DispInfo('', 2);
      ModalResult := mrOk;
    end;
    3:
    begin
      if DispInfo('?', 3) = 'y' then
      begin
        Viewq.Delete;
        cardinfoq.Delete;  
        Imgq.Delete;
        ModalResult := mrOk;
      end;
    end;
  end;
end;
function TfrmCardInfoModify.prif_CanSave: Boolean;
begin 
  Result := True;
end;
procedure TfrmCardInfoModify.bbtnCancelClick(Sender: TObject);
begin
  Viewq.Cancel;
  inherited;
end;
procedure TfrmCardInfoModify.eCardKindIdButtonClick(Sender: TObject;
  AbsoluteIndex: Integer);
begin
  inherited;
  frmCardKindView := TfrmCardKindView.Create(nil);
  try
    frmCardKindView.pubp_Ini('', 2);
    if frmCardKindView.ShowModal = mrOk then
    begin
      cardinfoq.FieldByName('kind_id').AsInteger := frmCardKindView.Ai_KindId;
    end;
  finally
    FreeAndNil(frmCardKindView);
  end;
end;
procedure TfrmCardInfoModify.eEmpIdButtonClick(Sender: TObject;
  AbsoluteIndex: Integer);
begin
  inherited;
 { frmEmpView := TfrmEmpView.Create(nil);
  try
    frmEmpView.pubp_Ini('', 2);
    if frmEmpVIew.ShowModal = mrOk then
    begin
      cardinfoq.FieldByName('emp_id').AsString := frmEmpView.As_EmpId;
    end;
  finally
    FreeAndNil(frmEmpVIew);
  end;}
end;
procedure TfrmCardInfoModify.bbtnServiceFixClick(Sender: TObject);
begin
  inherited;
  frmCardServiceFix := TfrmCardServiceFix.Create(nil);
  try
    frmCardServiceFix.pubp_Ini(cardinfoq.FieldByName('card_id').AsString,
      Viewq.FieldByName('cm_name').AsString);
    frmCardServiceFix.ShowModal;
  finally
    FreeAndNil(frmCardServiceFix);
  end;
end;
function TfrmCardInfoModify.prif_OpenComPort(Ai_Buff: Integer): boolean;
begin
  Result := True;
  try
    if MsComm.PortOpen then MsComm.PortOpen := False;
    MsComm.Settings := '9600,n,8,1';
    MsComm.InputMode := comInputModeText;
    MsComm.InBufferSize := Ai_Buff;
    MsComm.CommPort := dmData.Ai_ComPort;
    MsComm.PortOpen := True;
  except
    on e: Exception do
    begin
      e.Create('!');
    end;
  end;
end;
function TfrmCardInfoModify.prif_SendCommand(Av_Command: Variant; Ai_Buff,
  Ai_Time: DWord): String;
begin
  prif_OpenComPort(Ai_Buff);
  Av_Command := COMMANDHEAD + Av_Command;
  if MsComm.InBufferCount <> 0 then MsComm.InBufferCount := 0;
  if MsComm.OutBufferCount <> 0 then MsComm.OutBufferCount := 0;
  MsComm.Output := Av_Command;
  Fi_OleTick := GetTickCount;
  repeat
    Fi_NewTick := GetTickCount;
  until  (Fi_NewTick - Fi_OleTick)  > (Ai_Time * 10);
  Result := MsComm.Input;
  MsComm.PortOpen := False;
end;
procedure TfrmCardInfoModify.bbtnSelectClick(Sender: TObject);
var
  lc_OpenPic: TOpenPictureDialog;
begin
  inherited; 
  Fb_SelectImg := False;
  lc_OpenPic := TOpenPictureDialog.Create(nil);
  try
    lc_OpenPic.InitialDir := ExtractFilePath(Application.ExeName) + 'Image\';
    lc_OpenPic.Filter := 'All (*.jpg;*.jpeg;*.bmp)|*.jpg;*.jpeg;*.bmp|JPEG Image File ' +
      '(*.jpg)|*.jpg|JPEG Image File (*.jpeg)|*.jpeg|Bitmaps (*.bmp)|*.bmp';
    if lc_OpenPic.Execute then
    begin
      Imgq.FieldByName('cardimg').AsString := lc_OpenPic.FileName; 
      imgView.Picture.LoadFromFile(lc_OpenPic.FileName);
      Fb_SelectImg := True;
    end;
    bbtnConfirm.Enabled := True;
  finally
    lc_OpenPic.Free;
  end;
end;
end.
unit ufrmBPLPlugin;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, mybean.core.beanFactory, uBasePluginForm, StdCtrls, ExtCtrls,
  TeeProcs, TeEngine, Chart, DBChart;
type
  TfrmBPLPlugin = class(TBasePluginForm)
    Memo1: TMemo;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  frmBPLPlugin: TfrmBPLPlugin;
implementation
{$R *.dfm}
initialization
  beanFactory.RegisterBean('bplFormDEMO', TfrmBPLPlugin);
finalization
  ;
end.
unit ufrmBeginWorkManageBase;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, dxExEdtr, DBCtrls, CSDBNavigator, CSdxDBNavigator, FR_DSet,
  FR_DBSet, FR_Class, CSScrCtrlChild, DB, ADODB, CSADOQuery, dxCntner,
  dxTL, dxDBCtrl, dxDBGrid, dxEdLib, dxDBELib, DBLookupEh, dxEditor,
  CSCustomdxDateEdit, CSdxDBDateEdit, StdCtrls, Mask, DBCtrlsEh, Buttons,
  ExtCtrls, dxGrClms, ComCtrls, dxDBTLCl, ufrmOrganMng;
type
  TfrmBeginWorkManageBase = class(TForm)
    Panel1: TPanel;
    Panel3: TPanel;
    bbtnClose: TBitBtn;
    bbtnHelp: TBitBtn;
    bbtnConfirm: TBitBtn;
    bbtnSave: TBitBtn;
    bbtnCancel: TBitBtn;
    bbtnDeleteConfirm: TBitBtn;
    spList: TSplitter;
    Generald: TDataSource;
    ScrChild: TCSScrCtrlChild;
    Temp: TCSADOQuery;
    DetailDevCode: TCSADOQuery;
    DetailDevCoded: TDataSource;
    bbtnPrint: TBitBtn;
    frBeginWork: TfrReport;
    frDBBeginWork: TfrDBDataSet;
    Panel2: TPanel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    grdDeviceDetail: TdxDBGrid;
    Panel4: TPanel;
    Panel5: TPanel;
    bbtnAddDeviceDetail: TBitBtn;
    bbtnDeleteDeviceDetail: TBitBtn;
    navDeviceDetail: TCSdxDBNavigator;
    Panel6: TPanel;
    pagGeneralInfo: TPageControl;
    TabSheet2: TTabSheet;
    ScrollBox1: TScrollBox;
    Label3: TLabel;
    Label1: TLabel;
    Label16: TLabel;
    Label7: TLabel;
    eReportNo: TDBEditEh;
    GroupBox3: TGroupBox;
    mRemark: TdxDBMemo;
    peDevKind: TdxDBPickEdit;
    peConstKind: TdxDBPickEdit;
    TabSheet4: TTabSheet;
    grdPersonDetail: TdxDBGrid;
    Panel7: TPanel;
    Panel8: TPanel;
    bbtnAddPersonDetail: TBitBtn;
    bbtnDeletePersonDetail: TBitBtn;
    navPersonDetail: TCSdxDBNavigator;
    DeviceDetail: TCSADOQuery;
    DeviceDetaild: TDataSource;
    PersonDetail: TCSADOQuery;
    PersonDetaild: TDataSource;
    BuildDetail: TCSADOQuery;
    BuildDetaild: TDataSource;
    DocDetaild: TDataSource;
    SuprDetail: TCSADOQuery;
    SuprDetaild: TDataSource;
    DocDetail: TCSADOQuery;
    ConstDetail: TCSADOQuery;
    PersonDetailsysid: TStringField;
    PersonDetailstwk_id: TStringField;
    PersonDetailcard_no: TStringField;
    PersonDetailname: TStringField;
    PersonDetailwork_kind: TStringField;
    PersonDetailwork_item: TStringField;
    PersonDetailwork_level: TStringField;
    PersonDetailoutflag: TIntegerField;
    ConstDetaild: TDataSource;
    General: TCSADOQuery;
    Generalsysid: TStringField;
    Generalreport_no: TStringField;
    Generalconst_kind: TStringField;
    Generalappraise_date: TStringField;
    Generalproject_name: TStringField;
    Generalproperty_com: TStringField;
    Generalproperty_address: TStringField;
    Generalproperty_manager: TStringField;
    Generalmanager_tel: TStringField;
    Generalprj_design_com: TStringField;
    Generalcontract_no: TStringField;
    Generalcontract_date: TStringField;
    Generalbuild_project: TStringField;
    Generaldev_num: TIntegerField;
    Generalstart_date: TStringField;
    Generalend_date: TStringField;
    Generalbuild_charge: TBCDField;
    Generaldev_charge: TBCDField;
    Generalconst_com: TStringField;
    Generalconst_address: TStringField;
    Generalconst_reg_no: TStringField;
    Generalconst_deputy: TStringField;
    Generalconst_lics_no: TStringField;
    Generalconst_lics_date: TStringField;
    Generalconst_group: TStringField;
    Generalconst_group_address: TStringField;
    Generalconst_group_tel: TStringField;
    Generalconst_group_fax: TStringField;
    Generalconst_manager: TStringField;
    Generalconst_manager_tel: TStringField;
    Generalconst_instructor: TStringField;
    Generalconst_instructor_tel: TStringField;
    Generalidea_content: TStringField;
    Generalnotice_no: TStringField;
    Generalnotice_date: TStringField;
    Generalremark: TStringField;
    Generaloutflag: TIntegerField;
    TabSheet5: TTabSheet;
    deAppraiseDate: TCSdxDBDateEdit;
    Label5: TLabel;
    Label10: TLabel;
    Label12: TLabel;
    Label18: TLabel;
    eProjectName: TDBEditEh;
    Label19: TLabel;
    Label20: TLabel;
    Label22: TLabel;
    Label25: TLabel;
    deContractDate: TCSdxDBDateEdit;
    Label26: TLabel;
    eContractNo: TDBEditEh;
    Label28: TLabel;
    Label35: TLabel;
    Label33: TLabel;
    deStartDate: TCSdxDBDateEdit;
    Label34: TLabel;
    deEndDate: TCSdxDBDateEdit;
    GroupBox1: TGroupBox;
    Label14: TLabel;
    Label36: TLabel;
    GroupBox4: TGroupBox;
    DeviceDetaildev_type: TStringField;
    DeviceDetaildev_reg_no: TStringField;
    DeviceDetaildev_inner_no: TStringField;
    DeviceDetaildev_address: TStringField;
    DeviceDetailmanu_no: TStringField;
    DeviceDetailmanu_date: TStringField;
    DeviceDetailmanu_reg_no: TStringField;
    DeviceDetailmanu_name: TStringField;
    DeviceDetailoutflag: TIntegerField;
    BuildDetailsysid: TStringField;
    BuildDetailstwk_id: TStringField;
    BuildDetailreg_no: TStringField;
    BuildDetailcom_name: TStringField;
    BuildDetailitem_name: TStringField;
    BuildDetailoutflag: TIntegerField;
    ConstDetailsysid: TStringField;
    ConstDetailstwk_id: TStringField;
    ConstDetailreg_no: TStringField;
    ConstDetailcom_name: TStringField;
    ConstDetailitem_name: TStringField;
    ConstDetailoutflag: TIntegerField;
    SuprDetailsysid: TStringField;
    SuprDetailstwk_id: TStringField;
    SuprDetailreg_no: TStringField;
    SuprDetailcom_name: TStringField;
    SuprDetailitem_name: TStringField;
    SuprDetailoutflag: TIntegerField;
    DocDetailsysid: TStringField;
    DocDetailstwk_id: TStringField;
    DocDetaildoc_name: TStringField;
    DocDetailpages: TIntegerField;
    DocDetailoutflag: TIntegerField;
    eManagerTel: TDBEditEh;
    ePrjDesignCom: TDBEditEh;
    Generalstate: TIntegerField;
    Generaldev_kind: TStringField;
    DeviceDetaildev_category: TStringField;
    grdDeviceDetaildev_category: TdxDBGridPickColumn;
    grdDeviceDetaildev_level: TdxDBGridPickColumn;
    grdDeviceDetaildev_model: TdxDBGridPickColumn;
    grdDeviceDetaildev_name: TdxDBGridMaskColumn;
    grdDeviceDetaildev_type: TdxDBGridMaskColumn;
    grdDeviceDetaildev_reg_no: TdxDBGridMaskColumn;
    grdDeviceDetaildev_inner_no: TdxDBGridMaskColumn;
    grdDeviceDetaildev_address: TdxDBGridMaskColumn;
    grdDeviceDetailmanu_no: TdxDBGridMaskColumn;
    grdDeviceDetailmanu_date: TdxDBGridMaskColumn;
    grdDeviceDetailmanu_reg_no: TdxDBGridMaskColumn;
    grdDeviceDetailmanu_name: TdxDBGridMaskColumn;
    grdDeviceDetaildev_kind: TdxDBGridMaskColumn;
    grdConstDetailreg_no: TdxDBGridColumn;
    grdConstDetailcom_name: TdxDBGridButtonColumn;
    grdConstDetailitem_name: TdxDBGridColumn;
    grdBuildDetailreg_no: TdxDBGridColumn;
    grdBuildDetailitem_name: TdxDBGridColumn;
    grdBuildDetailcom_name: TdxDBGridButtonColumn;
    grdSuprDetailreg_no: TdxDBGridColumn;
    grdSuprDetailitem_name: TdxDBGridColumn;
    grdSuprDetailcom_name: TdxDBGridButtonColumn;
    grdDocDetaildoc_name: TdxDBGridColumn;
    grdDocDetailpages: TdxDBGridColumn;
    grdPersonDetailname: TdxDBGridColumn;
    grdPersonDetailwork_kind: TdxDBGridColumn;
    grdPersonDetailwork_item: TdxDBGridColumn;
    grdPersonDetailwork_level: TdxDBGridColumn;
    grdPersonDetailcard_no: TdxDBGridButtonColumn;
    procedure FormCreate(Sender: TObject);
    procedure bbtnCloseClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure bbtnSaveClick(Sender: TObject);
    procedure bbtnCancelClick(Sender: TObject);
    procedure bbtnConfirmClick(Sender: TObject);
    procedure DeviceDetailAfterInsert(DataSet: TDataSet);
    procedure bbtnDeleteDeviceDetailClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure bbtnPrintMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure navDeviceDetailBeforeAction(Sender: TObject; Button: TNavigateBtn);
    procedure bbtnAddDeviceDetailClick(Sender: TObject);
    procedure bbtnDeleteConfirmClick(Sender: TObject);
    procedure GeneraldDataChange(Sender: TObject; Field: TField);
    procedure GeneralAfterInsert(DataSet: TDataSet);
    procedure PersonDetailAfterInsert(DataSet: TDataSet);
    procedure bbtnAddPersonDetailClick(Sender: TObject);
    procedure bbtnDeletePersonDetailClick(Sender: TObject);
    procedure peConstKindChange(Sender: TObject);
    procedure bbtnAddConstDetailClick(Sender: TObject);
    procedure bbtnDeleteConstDetailClick(Sender: TObject);
    procedure bbtnAddBuildDetailClick(Sender: TObject);
    procedure bbtnDeleteBuildDetailClick(Sender: TObject);
    procedure bbtnAddSuprDetailClick(Sender: TObject);
    procedure bbtnDeleteSuprDetailClick(Sender: TObject);
    procedure bbtnAddDocDetailClick(Sender: TObject);
    procedure bbtnDeleteDocDetailClick(Sender: TObject);
    procedure navConstDetailBeforeAction(Sender: TObject;
      Button: TNavigateBtn);
    procedure navBuildDetailBeforeAction(Sender: TObject;
      Button: TNavigateBtn);
    procedure navSuprDetailBeforeAction(Sender: TObject;
      Button: TNavigateBtn);
    procedure navDocDetailBeforeAction(Sender: TObject;
      Button: TNavigateBtn);
    procedure peDevKindChange(Sender: TObject);
    procedure DeviceDetailAfterScroll(DataSet: TDataSet);
    procedure grdDeviceDetailChangeColumn(Sender: TObject;
      Node: TdxTreeListNode; Column: Integer);
    procedure BuildDetailAfterInsert(DataSet: TDataSet);
    procedure DocDetailAfterInsert(DataSet: TDataSet);
    procedure SuprDetailAfterInsert(DataSet: TDataSet);
    procedure ConstDetailAfterInsert(DataSet: TDataSet);
    procedure grdDeviceDetaildev_categoryCloseUp(Sender: TObject;
      var Value: Variant; var Accept: Boolean);
    procedure grdDeviceDetaildev_levelCloseUp(Sender: TObject;
      var Value: Variant; var Accept: Boolean);
    procedure DeviceDetailBeforeOpen(DataSet: TDataSet);
    procedure DeviceDetailAfterOpen(DataSet: TDataSet);
    procedure eConstComEditButtons0Click(Sender: TObject;
      var Handled: Boolean);
    procedure ePropertyComEditButtons0Click(Sender: TObject;
      var Handled: Boolean);
    procedure ePrjDesignComEditButtons0Click(Sender: TObject;
      var Handled: Boolean);
    procedure eConstGroupEditButtons0Click(Sender: TObject;
      var Handled: Boolean);
    procedure grdBuildDetailcom_nameButtonClick(Sender: TObject;
      AbsoluteIndex: Integer);
    procedure grdSuprDetailcom_nameButtonClick(Sender: TObject;
      AbsoluteIndex: Integer);
    procedure grdConstDetailcom_nameButtonClick(Sender: TObject;
      AbsoluteIndex: Integer);
    procedure grdPersonDetailcard_noButtonClick(Sender: TObject;
      AbsoluteIndex: Integer);
  private
    Fs_CurOrganId, Fs_CurCertId: string;
    Fb_DataModified, Fb_GeneralChanged, Fb_DetailChanged,
    Fb_DisableSetChange, Fb_DisableAfterScroll: Boolean;
    Fs_BWGeneralId, Fs_PrevBWCustomId, Fs_DevKindId, Fs_DevCategoryId, Fs_DevLevelId: string;
    Fe_DeviceDetail: TDataSetNotifyEvent;
    procedure prip_AfterEdit(DataSet: TDataSet);
    procedure prip_GetGeneralData;
    procedure prip_GetDetailData;
    procedure prip_IniData;
    procedure prip_IniInterface(Ai_ActMode: Integer);
    procedure prip_Adjust;
    function prif_CheckBlank(Ac_DataSet: TDataSet;
      Ac_Fields: array of TField): Boolean;
    function prif_Validate: Boolean;
    function prif_CheckSaved: Boolean;
    function prof_GenerateCustomId: string;
    function prif_Save: Boolean;
    function prif_Sameness: Boolean;
    procedure prip_SelectCompany(const Ai_Category: Integer;
      Ac_Requestor: TfrmOrganMng);
    procedure prip_SelectPerson;
    procedure prip_Reset;
    procedure prip_AddGeneral;
    procedure prip_AddDeviceDetail;
    procedure prip_AddPersonDetail;
    procedure prip_AddBuildDetail;
    procedure prip_AddSuprDetail;
    procedure prip_AddDocDetail;
    procedure prip_AddConstDetail;
    procedure prip_DeleteDeviceDetail;
    procedure prip_DeletePersonDetail;
    procedure prip_DeleteBuildDetail;
    procedure prip_DeleteSuprDetail;
    procedure prip_DeleteDocDetail;
    procedure prip_DeleteConstDetail;
    procedure prip_Cancel;
    procedure prip_Confirm;
    procedure prip_PrintReport(Ab_IsDesign: Boolean);
    procedure prip_GetDevKind;
    procedure prip_GetDevCategory;
    procedure prip_GetDevLevel;
    procedure prip_GetDevModel;
    procedure prip_GetConstKind;
    procedure prip_EnableAfterScroll;
    procedure prip_DisableAfterScroll;
  protected
    Rs_BeginWorkReport, Rs_DetailTableName, Rs_CustomIdHead,
    Rs_DevCodeId: string;
    procedure prop_GetTechInfoItems(const As_Section: string;
      Ac_DBGridPickColumn: TdxDBGridPickColumn);
  public
    procedure pubp_Ini(const Ai_ActMode: Integer; Ac_Args: TStrings);
    property DataModified: Boolean read Fb_DataModified;
    property BWGeneralId: string read Fs_BWGeneralId;
  end;
implementation
uses
  StrUtils, IniFiles, CSDBUtils, udmData, Commonlib,
  ufrmPersonMng;
const
  SAVE_STATE = 0;
  CONFIRM_STATE = 1;
    
{$R *.dfm}
{ TfrmBeginWorkManageBase }
procedure TfrmBeginWorkManageBase.prip_AddGeneral;
begin
  with General do
  begin
    Fb_DisableSetChange := True;
    try
      Append;
    finally
      Fb_DisableSetChange := False;
    end;
  end;
end;
procedure TfrmBeginWorkManageBase.prip_Cancel;
begin
  Gp_ProgressHint(',...');
  try
    DeviceDetail.CancelBatch;
    PersonDetail.CancelBatch;
    SuprDetail.CancelBatch;
    BuildDetail.CancelBatch;
    ConstDetail.CancelBatch;
    DocDetail.CancelBatch; 
    with General do
    begin
      if State <> dsBrowse then Cancel;
      if IsEmpty then prip_AddGeneral;
    end;
    prip_GetDetailData;
    prip_Reset;
  finally
    Gp_ProgressHint;
  end;
end;
procedure TfrmBeginWorkManageBase.prip_Confirm;
begin
  if Application.MessageBox('?', PChar(Caption),
    MB_YESNO + MB_ICONQUESTION) = IDNO then Exit;
  if not prif_Save then Exit;
  Gp_ProgressHint(',...');
  try
    with General do
    begin
      Fb_DisableSetChange := True;
      try
        Edit;
        FieldByName('state').AsInteger := CONFIRM_STATE;
        Post;
      finally
        Fb_DisableSetChange := False;
      end;
      Fb_DataModified := True;
    end;
    Gp_ProgressHint;
    Close;
  except
    on E: Exception do
    begin
      Gp_ProgressHint;
      Application.MessageBox(PChar(',:' + E.Message),
        PChar(Caption), MB_OK + MB_ICONERROR);
    end;
  end;
end;
procedure TfrmBeginWorkManageBase.prip_GetDetailData;
begin
  with DeviceDetail do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT * FROM device.equipment_stwk_device ' +
      'WHERE stwk_id = ''%s, [Fs_BWGeneralId]);
    Open;
  end;
  with PersonDetail do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT * FROM device.equipment_stwk_person ' +
      'WHERE stwk_id = ''%s, [Fs_BWGeneralId]);
    Open;
  end;
  with BuildDetail do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT * FROM device.equipment_stwk_build ' +
      'WHERE stwk_id = ''%s, [Fs_BWGeneralId]);
    Open;
  end;
  with DocDetail do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT * FROM device.equipment_stwk_doc ' +
      'WHERE stwk_id = ''%s, [Fs_BWGeneralId]);
    Open;
  end;
  with SuprDetail do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT * FROM device.equipment_stwk_supr ' +
      'WHERE stwk_id = ''%s, [Fs_BWGeneralId]);
    Open;
  end;
  with ConstDetail do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT * FROM device.equipment_stwk_const ' +
      'WHERE stwk_id = ''%s, [Fs_BWGeneralId]);
    Open;
  end;
end;
procedure TfrmBeginWorkManageBase.prip_GetGeneralData;
begin
  with General do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT * FROM device.equipment_stwk_report WHERE ' +
      'sysid = ''%s, [Fs_BWGeneralId]);
    Open;
    if not IsEmpty then
    begin
      Fs_PrevBWCustomId := VarToStr(FieldValues['report_no']);
    end;
  end;
end;
function TfrmBeginWorkManageBase.prif_Save: Boolean;
var
  lb_DetailUpdated: Boolean;
begin
  Result := False;
  
  if not prif_Validate then Exit;
  
  lb_DetailUpdated := False;
  Gp_ProgressHint(',...');
  dmData.adocon.BeginTrans;
  try
    with General do
    begin
      Fb_DisableSetChange := True;
      try
        Edit;
        FieldByName('state').AsInteger := SAVE_STATE;
        Fb_DataModified := True;
        if State <> dsBrowse then Post;
      finally
        Fb_DisableSetChange := False;
      end;
    end;
    with DeviceDetail do
    begin
      if State <> dsBrowse then Post;
      UpdateBatch;
      lb_DetailUpdated := True;
    end;
    with PersonDetail do
    begin
      if State <> dsBrowse then Post;
      UpdateBatch;
      lb_DetailUpdated := True;
    end;
    with BuildDetail do
    begin
      if State <> dsBrowse then Post;
      UpdateBatch;
      lb_DetailUpdated := True;
    end;
    with ConstDetail do
    begin
      if State <> dsBrowse then Post;
      UpdateBatch;
      lb_DetailUpdated := True;
    end;
    with DocDetail do
    begin
      if State <> dsBrowse then Post;
      UpdateBatch;
      lb_DetailUpdated := True;
    end;
    with SuprDetail do
    begin
      if State <> dsBrowse then Post;
      UpdateBatch;
      lb_DetailUpdated := True;
    end;
    dmData.adocon.CommitTrans;
    Fb_GeneralChanged := False;
    Fb_DetailChanged := False;
    bbtnSave.Enabled := False;
    bbtnCancel.Enabled := False;
    Result := True;
  except
    on E: Exception do
    begin
      dmData.adocon.RollbackTrans;
      try
        with General do
        begin
          if State = dsBrowse then Requery;
          if IsEmpty then prip_AddGeneral;
        end;
        if lb_DetailUpdated then prip_GetDetailData;
      except
      end;
      Application.MessageBox(PChar(',:' + E.Message),
        PChar(Caption), MB_OK + MB_ICONERROR);
    end;
  end;
  Gp_ProgressHint;
end;
procedure TfrmBeginWorkManageBase.pubp_Ini(const Ai_ActMode: Integer;
  Ac_Args: TStrings);
begin
  ScrChild.SetSecurity(Self);
  Gp_ProgressHint(Format('%s,...', [Caption]));
  try
    if Ac_Args.Count > 0 then
    begin
      Fs_BWGeneralId := Ac_Args.Strings[0];
    end;
    prip_IniData;
    if Ai_ActMode = AM_VMADDREPORT then prip_AddGeneral;
    General.AfterEdit := prip_AfterEdit;
    with DeviceDetail do
    begin
      AfterEdit := prip_AfterEdit;
      AfterDelete := prip_AfterEdit;
    end;
    with PersonDetail do
    begin
      AfterEdit := prip_AfterEdit;
      AfterDelete := prip_AfterEdit;
    end;
    with BuildDetail do
    begin
      AfterEdit := prip_AfterEdit;
      AfterDelete := prip_AfterEdit;
    end;
    with DocDetail do
    begin
      AfterEdit := prip_AfterEdit;
      AfterDelete := prip_AfterEdit;
    end;
    with ConstDetail do
    begin
      AfterEdit := prip_AfterEdit;
      AfterDelete := prip_AfterEdit;
    end;
    with SuprDetail do
    begin
      AfterEdit := prip_AfterEdit;
      AfterDelete := prip_AfterEdit;
    end;
    prip_IniInterface(Ai_ActMode);
    BorderIcons := BorderIcons -[biMinimize];
    Position := poScreenCenter;
    WindowState := wsMaximized;
    prip_Adjust;
  finally
    Gp_ProgressHint;
  end;
end;
procedure TfrmBeginWorkManageBase.FormCreate(Sender: TObject);
begin
  Fb_DataModified := False;
  Fb_GeneralChanged := False;
  Fb_DetailChanged := False;
  Fb_DisableSetChange := False;
  Fs_BWGeneralId := '';
  Fs_PrevBWCustomId := '';
  Fs_CurOrganId := '';
  Fs_CurCertId := '';
end;
procedure TfrmBeginWorkManageBase.bbtnCloseClick(Sender: TObject);
begin
  Close;
end;
procedure TfrmBeginWorkManageBase.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caHide;
end;
procedure TfrmBeginWorkManageBase.bbtnSaveClick(Sender: TObject);
begin
  prif_Save;
end;
procedure TfrmBeginWorkManageBase.bbtnCancelClick(Sender: TObject);
begin
  prip_Cancel;
end;
procedure TfrmBeginWorkManageBase.bbtnConfirmClick(Sender: TObject);
begin
  prip_Confirm;
end;
procedure TfrmBeginWorkManageBase.prip_AddDeviceDetail;
begin
  with General do
  begin
    if VarToStr(FieldValues['dev_kind']) = '' then
    begin
      Application.MessageBox('', PChar(Caption),
        MB_OK + MB_ICONINFORMATION);
      Exit;
    end;
    if not IsEmpty then DeviceDetail.Append;
  end;
end;
procedure TfrmBeginWorkManageBase.DeviceDetailAfterInsert(DataSet: TDataSet);
begin
  with DataSet do
  begin
    FieldByName('sysid').AsString := Gf_GenSysId;
    FieldByName('stwk_id').AsString := Fs_BWGeneralId;
    FieldByName('dev_kind').AsString := peDevKind.Text;
  end;
  prip_AfterEdit(DataSet);   
end;
procedure TfrmBeginWorkManageBase.PersonDetailAfterInsert(
  DataSet: TDataSet);
begin
  with DataSet do
  begin
    FieldByName('sysid').AsString := Gf_GenSysId;
    FieldByName('stwk_id').AsString := Fs_BWGeneralId;
  end;
  prip_AfterEdit(DataSet);
end;
procedure TfrmBeginWorkManageBase.prip_IniInterface(Ai_ActMode: Integer);
var
  li_GeneralState: Integer;
  procedure SetReadOnly;
  begin
    eReportNo.Enabled := False;
    peDevKind.Enabled := False;
    peConstKind.Enabled := False;
    deAppraiseDate.Enabled := False;
    eProjectName.Enabled := False;
    ePropertyCom.Enabled := False;
    ePropertyAddress.Enabled := False;
    ePropertyManager.Enabled := False;
    eManagerTel.Enabled := False;
    ePrjDesignCom.Enabled := False;
    eContractNo.Enabled := False;
    eBuildProject.Enabled := False;
    deContractDate.Enabled := False;
    eDevNum.Enabled := False;
    deStartDate.Enabled := False;
    deEndDate.Enabled := False;
    eBuildCharge.Enabled := False;
    eDevCharge.Enabled := False;
    mRemark.Enabled := False;
    eConstCom.Enabled := False;
    eConstAddress.Enabled := False;
    eConstRegNo.Enabled := False;
    eConstDeputy.Enabled := False;
    eConstLicsNo.Enabled := False;
    deConstLicsDate.Enabled := False;
    eConstGroup.Enabled := False;
    eConstGroupAddress.Enabled := False;
    eConstManager.Enabled := False;
    eConstManagerTel.Enabled := False;
    eConstGroupTel.Enabled := False;
    eConstGroupFax.Enabled := False;
    eConstInstructor.Enabled := False;
    eConstInstructorTel.Enabled := False;
    mIdeaContent.Enabled := False;
    eNoticeNo.Enabled := False;
    deNoticeDate.Enabled := False;
    bbtnAddDeviceDetail.Enabled := False;
    bbtnDeleteDeviceDetail.Enabled := False;
    navDeviceDetail.Enabled := False;
    bbtnAddPersonDetail.Enabled := False;
    bbtnDeletePersonDetail.Enabled := False;
    navPersonDetail.Enabled := False;
    bbtnAddBuildDetail.Enabled := False;
    bbtnDeleteBuildDetail.Enabled := False;
    navBuildDetail.Enabled := False;
    bbtnAddDocDetail.Enabled := False;
    bbtnDeleteDocDetail.Enabled := False;
    navDocDetail.Enabled := False;
    bbtnAddConstDetail.Enabled := False;
    bbtnDeleteConstDetail.Enabled := False;
    navConstDetail.Enabled := False;
    bbtnAddSuprDetail.Enabled := False;
    bbtnDeleteSuprDetail.Enabled := False;
    navSuprDetail.Enabled := False;
    bbtnSave.Enabled := False;
    bbtnCancel.Enabled := False;
    bbtnConfirm.Enabled := False;
    with grdDeviceDetail do OptionsBehavior := OptionsBehavior - [edgoEditing];
    with grdPersonDetail do OptionsBehavior := OptionsBehavior - [edgoEditing];
    with grdBuildDetail do OptionsBehavior := OptionsBehavior - [edgoEditing];
    with grdDocDetail do OptionsBehavior := OptionsBehavior - [edgoEditing];
    with grdSuprDetail do OptionsBehavior := OptionsBehavior - [edgoEditing];
    with grdConstDetail do OptionsBehavior := OptionsBehavior - [edgoEditing];
  end;
  
begin
  case Ai_ActMode of
    AM_VMADDREPORT, AM_VMEDITREPORT:
      begin
        bbtnDeleteConfirm.Visible := False;
        bbtnPrint.Left := bbtnConfirm.Left + bbtnConfirm.Width + 2;
        if Ai_ActMode = AM_VMEDITREPORT then
        begin
          li_GeneralState := General.FieldByName('state').AsInteger;
          if li_GeneralState = CONFIRM_STATE then SetReadOnly;
        end;
      end;
    AM_VMDELETEREPORT: SetReadOnly;
  end;
end;
procedure TfrmBeginWorkManageBase.prip_DeleteDeviceDetail;
begin
  with DeviceDetail do if not IsEmpty then Delete;
end;
procedure TfrmBeginWorkManageBase.bbtnDeleteDeviceDetailClick(Sender: TObject);
begin
  prip_DeleteDeviceDetail;
end;
function TfrmBeginWorkManageBase.prif_CheckBlank(Ac_DataSet: TDataSet;
  Ac_Fields: array of TField): Boolean;
var
  li_i: Integer;
begin
  Result := True;
  with Ac_DataSet do
    for li_i := 0 to Length(Ac_Fields) - 1 do
      if Trim(VarToStr(Ac_Fields[li_i].Value)) = '' then
      begin
        Result := False;
        Application.MessageBox(PChar(Ac_Fields[li_i].DisplayLabel +
          '。'), PChar(Caption), MB_OK + MB_ICONWARNING);
        Ac_Fields[li_i].FocusControl;
        Exit;
      end;
end;
function TfrmBeginWorkManageBase.prif_Validate: Boolean;
var
  ls_BWCustomId: string;
begin
  with General do
  begin
    Result := prif_CheckBlank(General, [FieldByName('report_no'),FieldByName('dev_kind'),
                FieldByName('const_kind'),FieldByName('appraise_date'),
                FieldByName('project_name'),FieldByName('property_com'),
                FieldByName('property_address'),FieldByName('property_manager'),
                FieldByName('manager_tel'),FieldByName('prj_design_com'),
                FieldByName('build_project'),FieldByName('dev_num'),
                FieldByName('start_date'),FieldByName('end_date'),
                FieldByName('build_charge'),FieldByName('dev_charge'),
                FieldByName('const_com'),FieldByName('const_address'),
                FieldByName('const_reg_no'),FieldByName('const_deputy'),
                FieldByName('const_lics_no'),FieldByName('const_lics_date')]);
    if not Result then Exit;
    
    if FieldByName('end_date').AsString <=
      FieldByName('start_date').AsString then
    begin
      Result := False;
      Application.MessageBox('', PChar(Caption),
        MB_OK + MB_ICONWARNING);
      Exit;
    end;
    
    if DeviceDetail.IsEmpty then
    begin
      Result := False;
      Application.MessageBox(',。',
        PChar(Caption), MB_OK + MB_ICONWARNING);
      Exit;
    end;
    if PersonDetail.IsEmpty then
    begin
      Result := False;
      Application.MessageBox(',。',
        PChar(Caption), MB_OK + MB_ICONWARNING);
      Exit;
    end;
    if BuildDetail.IsEmpty then
    begin
      Result := False;
      Application.MessageBox(',。',
        PChar(Caption), MB_OK + MB_ICONWARNING);
      Exit;
    end;
    if DocDetail.IsEmpty then
    begin
      Result := False;
      Application.MessageBox(',。',
        PChar(Caption), MB_OK + MB_ICONWARNING);
      Exit;
    end;
    if ConstDetail.IsEmpty then
    begin
      Result := False;
      Application.MessageBox(',。',
        PChar(Caption), MB_OK + MB_ICONWARNING);
      Exit;
    end;
    if SuprDetail.IsEmpty then
    begin
      Result := False;
      Application.MessageBox(',。',
        PChar(Caption), MB_OK + MB_ICONWARNING);
      Exit;
    end;
    ls_BWCustomId := VarToStr(FieldValues['report_no']);
    if ls_BWCustomId <> Fs_PrevBWCustomId then
    begin
      if Temp.Active then Temp.Close;
      Temp.SQL.Text := Format('SELECT sysid FROM device.equipment_stwk_report ' +
        'WHERE report_no = ''%s, [ls_BWCustomId]);
      Temp.Open;
      if not Temp.IsEmpty then
      begin
        Result := False;
        eReportNo.SetFocus;
        Application.MessageBox(',。',
          PChar(Caption), MB_OK + MB_ICONWARNING);
      end;
    end;
  end;
end;
function TfrmBeginWorkManageBase.prif_CheckSaved: Boolean;
var
  li_Result: Integer;
  lc_PrevActive: TWinControl;
begin
  Result := True;
  if ActiveControl <> bbtnClose then
  begin
    lc_PrevActive := ActiveControl;
    ActiveControl := bbtnClose;
    ActiveControl := lc_PrevActive;
  end;
  
  if Fb_GeneralChanged or Fb_DetailChanged then
  begin
    li_Result := Application.MessageBox(',?',
      PChar(Caption), MB_YESNOCANCEL + MB_ICONQUESTION);
    case li_Result of
      IDYES: Result := prif_Save;
      IDNO:
        begin
          DeviceDetail.CancelBatch;
          PersonDetail.CancelBatch;
          BuildDetail.CancelBatch;
          DocDetail.CancelBatch;
          ConstDetail.CancelBatch;
          SuprDetail.CancelBatch;
          General.Cancel;
          Result := True;
        end;
      IDCANCEL: Result := False;
    end;
  end;
end;
procedure TfrmBeginWorkManageBase.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  CanClose := prif_CheckSaved;
end;
procedure TfrmBeginWorkManageBase.prip_PrintReport(
  Ab_IsDesign: Boolean);
//var
//  ls_WorkReportReport: string;
//  lc_Bookmark: TBookmarkStr;
begin
{  ls_WorkReportReport := Gs_AppPath + REPORTS_PATH + Rs_BeginWorkReport;
  Detail.DisableControls;
  lc_Bookmark := Detail.Bookmark;
  try
    Detail.First;
    with frBeginWork do
    begin
      LoadFromFile(ls_WorkReportReport);
      if Ab_IsDesign then DesignReport else ShowReport;
    end;
  finally
    try
      Detail.GotoBookmark(Pointer(lc_Bookmark));
    except
    end;
    Detail.EnableControls;
  end;}
end;
procedure TfrmBeginWorkManageBase.bbtnPrintMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  prip_PrintReport(Shift = [ssShift, ssCtrl, ssAlt]);
end;
procedure TfrmBeginWorkManageBase.navDeviceDetailBeforeAction(Sender: TObject;
  Button: TNavigateBtn);
begin
  if Button = nbRefresh then
  begin
    prip_GetDetailData;
    Abort;
  end;
end;
function TfrmBeginWorkManageBase.prof_GenerateCustomId: string;
var
  ls_CustomIdHead: string;
begin
  ls_CustomIdHead := Rs_CustomIdHead + FormatDateTime('yyyymm', Now);
  with Temp do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT MAX(report_no) AS report_no FROM ' +
      'device.equipment_stwk_report WHERE report_no LIKE ''%s%%,
      [ls_CustomIdHead]);
    Open;
    if VarToStr(FieldValues['report_no']) = '' then
      Result := ls_CustomIdHead + Format('%.5d', [1])
    else Result := ls_CustomIdHead + Format('%.5d',
      [StrToInt(RightStr(FieldByName('report_no').AsString, 5)) + 1]);
    Close;
  end;
end;
procedure TfrmBeginWorkManageBase.prop_GetTechInfoItems(
  const As_Section: string; Ac_DBGridPickColumn: TdxDBGridPickColumn);
var
  ls_IniFile: string;
  lc_IniFile: TIniFile;
begin
  ls_IniFile := Gs_AppPath + TECHINFO_NAME;
  lc_IniFile := TIniFile.Create(ls_IniFile);
  try
    lc_IniFile.ReadSection(As_Section, Ac_DBGridPickColumn.Items);
  finally
    lc_IniFile.Free;
  end;
end;
procedure TfrmBeginWorkManageBase.bbtnAddDeviceDetailClick(Sender: TObject);
begin
  prip_AddDeviceDetail;
end;
procedure TfrmBeginWorkManageBase.prip_IniData;
begin
  prip_GetDevKind;
  prip_GetConstKind;  
  prip_GetGeneralData;
  prip_GetDetailData;
  if not (General.FieldByName('dev_kind').AsString = '') then
    prip_GetDevCategory;
end;
procedure TfrmBeginWorkManageBase.bbtnDeleteConfirmClick(Sender: TObject);
begin
  ModalResult := mrOK;
end;
procedure TfrmBeginWorkManageBase.prip_Reset;
begin
  Fb_GeneralChanged := False;
  Fb_DetailChanged := False;
  bbtnSave.Enabled := False;
  bbtnCancel.Enabled := False;
end;
procedure TfrmBeginWorkManageBase.prip_AfterEdit(DataSet: TDataSet);
begin
  if Fb_DisableSetChange then Exit;
  if DataSet = General then Fb_GeneralChanged := True;
  if DataSet = DeviceDetail then Fb_DetailChanged := True;
  if DataSet = BuildDetail then Fb_DetailChanged := True;
  if DataSet = ConstDetail then Fb_DetailChanged := True;
  if DataSet = DocDetail then Fb_DetailChanged := True;
  if DataSet = SuprDetail then Fb_DetailChanged := True;
  if not bbtnSave.Enabled then bbtnSave.Enabled := True;
  if not bbtnCancel.Enabled then bbtnCancel.Enabled := True;
end;
procedure TfrmBeginWorkManageBase.GeneraldDataChange(Sender: TObject;
  Field: TField);
begin
  if Field <> nil then prip_AfterEdit(General);
end;
procedure TfrmBeginWorkManageBase.prip_Adjust;
//var
//  li_i, li_Bottom, li_MaxBottom, li_Height: Integer;
begin
{  li_MaxBottom := 0;
  with scrbGeneral do
    for li_i := 0 to ControlCount - 1 do
    begin
      li_Bottom := Controls[li_i].Top + Controls[li_i].Height;
      if li_Bottom > li_MaxBottom then li_MaxBottom := li_Bottom;
    end;
  Inc(li_MaxBottom, 5);
  li_Height := scrbGeneral.Height;
  if li_Height > li_MaxBottom then
  begin
    scrbGeneral.Align := alNone;
    scrbGeneral.Height := li_Height - li_MaxBottom;
    spList.Align := alTop;
    scrbDetail.Align := alTop;
    scrbDetail.Height := scrbDetail.Height + (li_Height - li_MaxBottom);
    scrbDetail.Align := alBottom;
    spList.Align := alBottom;
    scrbGeneral.Align := alClient;
  end;}
end;
procedure TfrmBeginWorkManageBase.GeneralAfterInsert(DataSet: TDataSet);
begin
  Fs_BWGeneralId := Gf_GenSysId;
  with DataSet do
  begin
    FieldByName('sysid').AsString := BWGeneralId;
    FieldByName('report_no').AsString := prof_GenerateCustomId;
  end;
end;
procedure TfrmBeginWorkManageBase.prip_AddPersonDetail;
begin
  with General do if not IsEmpty then PersonDetail.Append;
end;
procedure TfrmBeginWorkManageBase.prip_DeletePersonDetail;
begin
  with PersonDetail do if not IsEmpty then Delete;
end;
procedure TfrmBeginWorkManageBase.bbtnAddPersonDetailClick(
  Sender: TObject);
begin
  prip_AddPersonDetail;
end;
procedure TfrmBeginWorkManageBase.bbtnDeletePersonDetailClick(
  Sender: TObject);
begin
  prip_DeletePersonDetail
end;
procedure TfrmBeginWorkManageBase.peConstKindChange(Sender: TObject);
begin
//  prip_GetDevKindData(peReportKind.Text);
end;
procedure TfrmBeginWorkManageBase.prip_SelectPerson;
var
  ls_PrevPersonId: string;
  lc_Arg: TStrings;
  lc_Rc: TModalResult;
  lc_Person: TfrmPersonMng;
begin
  ls_PrevPersonId := '';
  lc_Person := TfrmPersonMng.Create(nil);
  try
    with PersonDetail do
    begin
      lc_Arg := TStringList.Create;
      lc_Arg.Add(ls_PrevPersonId);
      try
        lc_Person.pubp_ini(True, lc_Arg);
        lc_Rc := lc_Person.ShowModal;
        Self.Update;
      finally
        lc_Arg.Free;
      end;
      if lc_Rc = mrOK then
      begin
        Edit;
        FieldValues['card_no'] := lc_Person.PersonInfo.FieldValues['cardid'];
        FieldValues['name'] := lc_Person.PersonInfo.FieldValues['name'];
        FieldValues['work_kind'] :=
          lc_Person.licenselist.FieldValues['licns_category_name'];
        FieldValues['work_item'] :=
          lc_Person.licnsprjlist.FieldValues['psnlicns_prjname'];
        FieldValues['work_level'] :=
          lc_Person.licnsprjlist.FieldValues['psnlicns_levelcode_name'];
      end;
    end;
  finally
    if lc_Person <> nil then lc_Person.Free;
  end;
end;
procedure TfrmBeginWorkManageBase.bbtnAddConstDetailClick(Sender: TObject);
begin
  prip_AddConstDetail;
end;
procedure TfrmBeginWorkManageBase.bbtnDeleteConstDetailClick(
  Sender: TObject);
begin
  prip_DeleteConstDetail;
end;
procedure TfrmBeginWorkManageBase.bbtnAddBuildDetailClick(Sender: TObject);
begin
  prip_AddBuildDetail;
end;
procedure TfrmBeginWorkManageBase.bbtnDeleteBuildDetailClick(
  Sender: TObject);
begin
  prip_DeleteBuildDetail;
end;
procedure TfrmBeginWorkManageBase.bbtnAddSuprDetailClick(Sender: TObject);
begin
  prip_AddSuprDetail;
end;
procedure TfrmBeginWorkManageBase.bbtnDeleteSuprDetailClick(
  Sender: TObject);
begin
  prip_DeleteSuprDetail;
end;
procedure TfrmBeginWorkManageBase.bbtnAddDocDetailClick(Sender: TObject);
begin
  prip_AddDocDetail;
end;
procedure TfrmBeginWorkManageBase.bbtnDeleteDocDetailClick(
  Sender: TObject);
begin
  prip_DeleteDocDetail;
end;
procedure TfrmBeginWorkManageBase.prip_AddBuildDetail;
begin
  with General do if not IsEmpty then BuildDetail.Append;
end;
procedure TfrmBeginWorkManageBase.prip_AddConstDetail;
begin
  with General do if not IsEmpty then ConstDetail.Append;
end;
procedure TfrmBeginWorkManageBase.prip_AddDocDetail;
begin
  with General do if not IsEmpty then DocDetail.Append;
end;
procedure TfrmBeginWorkManageBase.prip_AddSuprDetail;
begin
  with General do if not IsEmpty then SuprDetail.Append;
end;
procedure TfrmBeginWorkManageBase.prip_DeleteBuildDetail;
begin
  with BuildDetail do if not IsEmpty then Delete;
end;
procedure TfrmBeginWorkManageBase.prip_DeleteConstDetail;
begin
  with ConstDetail do if not IsEmpty then Delete;
end;
procedure TfrmBeginWorkManageBase.prip_DeleteDocDetail;
begin
  with DocDetail do if not IsEmpty then Delete;
end;
procedure TfrmBeginWorkManageBase.prip_DeleteSuprDetail;
begin
  with SuprDetail do if not IsEmpty then Delete;
end;
procedure TfrmBeginWorkManageBase.navConstDetailBeforeAction(
  Sender: TObject; Button: TNavigateBtn);
begin
  if Button = nbRefresh then
  begin
    prip_GetDetailData;
    Abort;
  end;
end;
procedure TfrmBeginWorkManageBase.navBuildDetailBeforeAction(
  Sender: TObject; Button: TNavigateBtn);
begin
  if Button = nbRefresh then
  begin
    prip_GetDetailData;
    Abort;
  end;
end;
procedure TfrmBeginWorkManageBase.navSuprDetailBeforeAction(
  Sender: TObject; Button: TNavigateBtn);
begin
  if Button = nbRefresh then
  begin
    prip_GetDetailData;
    Abort;
  end;
end;
procedure TfrmBeginWorkManageBase.navDocDetailBeforeAction(Sender: TObject;
  Button: TNavigateBtn);
begin
  if Button = nbRefresh then
  begin
    prip_GetDetailData;
    Abort;
  end;
end;
procedure TfrmBeginWorkManageBase.prip_GetDevKind;
begin
  with Temp do
  begin
    if Active then Close;
    SQL.Text := 'SELECT name FROM device.code_cert_device ' +
      'WHERE code_level = 2 ORDER BY id';
    Open;
    peDevKind.Items.Clear;
    if not IsEmpty then
    begin
      while not Eof do
      begin
        peDevKind.Items.Add(FieldByName('name').AsString);
        Next;
      end;
    end;
    Close;
  end;
end;
procedure TfrmBeginWorkManageBase.prip_GetConstKind;
begin
  with Temp do
  begin
    if Active then Close;
    SQL.Text := 'SELECT name FROM device.code_stwk_kind ORDER BY code';
    Open;
    peConstKind.Items.Clear;
    if not IsEmpty then
    begin
      while not Eof do
      begin
        peConstKind.Items.Add(FieldByName('name').AsString);
        Next;
      end;
    end;
    Close;
  end;
end;
procedure TfrmBeginWorkManageBase.prip_GetDevCategory;
var
  ls_DevKind: string;
begin
  Fb_DisableAfterScroll := True;
  ls_DevKind := peDevKind.Text;
  with Temp do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT id,name FROM device.code_cert_device ' +
      'WHERE code_level = 2 AND name = ''%s, [ls_DevKind]);
    Open;
    Fs_DevKindId :=FieldByName('id').AsString;
  end;
  with Temp do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT name FROM device.code_cert_device ' +
      'WHERE code_level = 3 AND parent_id = ''%s, [Fs_DevKindId]);
    Open;
    grdDeviceDetaildev_category.Items.Clear;
    if not IsEmpty then
    begin
      while not Eof do
      begin
        grdDeviceDetaildev_category.Items.Add(FieldByName('name').AsString);
        Next;
      end;
    end;
    Close;
  end;
  
  Fb_DisableAfterScroll := False;
end;
procedure TfrmBeginWorkManageBase.prip_GetDevLevel;
begin
  Fb_DisableAfterScroll := True;
  with Temp do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT id, name FROM device.code_cert_device ' +
      'WHERE code_level = 3 AND name = ''%s'' AND parent_id = ''%s,
      [grdDeviceDetaildev_category.Field.AsString, Fs_DevKindId]);
    Open;
    Fs_DevCategoryId := FieldByName('id').AsString;
  end;
  with Temp do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT name FROM device.code_cert_device ' +
      'WHERE code_level = 4 AND parent_id = ''%s, [Fs_DevCategoryId]);
    Open;
    grdDeviceDetaildev_level.Items.Clear;
    if not IsEmpty then
    begin
      while not Eof do
      begin
        grdDeviceDetaildev_level.Items.Add(FieldByName('name').AsString);
        Next;
      end;
    end;
    Close;
  end;
  Fb_DisableAfterScroll := False;
end;
procedure TfrmBeginWorkManageBase.prip_GetDevModel;
begin
  Fb_DisableAfterScroll := True;
  with Temp do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT id, name FROM device.code_cert_device ' +
      'WHERE code_level = 4 AND name = ''%s'' AND parent_id= ''%s,
      [grdDeviceDetaildev_level.Field.AsString, Fs_DevCategoryId]);
    Open;
    Fs_DevLevelId := FieldByName('id').AsString;
  end;
  with Temp do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT name FROM device.code_cert_device ' +
      'WHERE code_level = 5 AND parent_id= ''%s, [Fs_DevLevelId]);
    Open;
    grdDeviceDetaildev_model.Items.Clear;
    if not IsEmpty then
    begin
      while not Eof do
      begin
        grdDeviceDetaildev_model.Items.Add(FieldByName('name').AsString);
        Next;
      end;
    end;
    Close;
  end;
  Fb_DisableAfterScroll := False;
end;
procedure TfrmBeginWorkManageBase.peDevKindChange(Sender: TObject);
begin
//  ShowMessage('peDevKindChange');
  prip_GetDevCategory;
end;
procedure TfrmBeginWorkManageBase.DeviceDetailAfterScroll(
  DataSet: TDataSet);
begin
//  ShowMessage('DeviceDetailAfterScroll');
  if Fb_DisableAfterScroll then Exit;  
  prip_GetDevCategory;
  prip_GetDevLevel;
  prip_GetDevModel;
end;
procedure TfrmBeginWorkManageBase.grdDeviceDetailChangeColumn(
  Sender: TObject; Node: TdxTreeListNode; Column: Integer);
begin
//  ShowMessage('grdDeviceDetailChangeColumn');
  case Column of
    2: prip_GetDevLevel;
    3: prip_GetDevModel;
  end;
end;
procedure TfrmBeginWorkManageBase.BuildDetailAfterInsert(
  DataSet: TDataSet);
begin
  with DataSet do
  begin
    FieldByName('sysid').AsString := Gf_GenSysId;
    FieldByName('stwk_id').AsString := Fs_BWGeneralId;
  end;
  prip_AfterEdit(DataSet);
end;
procedure TfrmBeginWorkManageBase.DocDetailAfterInsert(DataSet: TDataSet);
begin
  with DataSet do
  begin
    FieldByName('sysid').AsString := Gf_GenSysId;
    FieldByName('stwk_id').AsString := Fs_BWGeneralId;
  end;
  prip_AfterEdit(DataSet);
end;
procedure TfrmBeginWorkManageBase.SuprDetailAfterInsert(DataSet: TDataSet);
begin
  with DataSet do
  begin
    FieldByName('sysid').AsString := Gf_GenSysId;
    FieldByName('stwk_id').AsString := Fs_BWGeneralId;
  end;
  prip_AfterEdit(DataSet);
end;
procedure TfrmBeginWorkManageBase.ConstDetailAfterInsert(
  DataSet: TDataSet);
begin
  with DataSet do
  begin
    FieldByName('sysid').AsString := Gf_GenSysId;
    FieldByName('stwk_id').AsString := Fs_BWGeneralId;
  end;
  prip_AfterEdit(DataSet);
end;
procedure TfrmBeginWorkManageBase.grdDeviceDetaildev_categoryCloseUp(
  Sender: TObject; var Value: Variant; var Accept: Boolean);
begin
  if prif_Sameness then
  begin
    with DeviceDetail do
    begin
      Edit;
      FieldByName('dev_level').Clear;
      FieldByName('dev_model').Clear;
    end;
  end;
end;
function TfrmBeginWorkManageBase.prif_Sameness: Boolean;
begin
  Result := True;
end;
procedure TfrmBeginWorkManageBase.grdDeviceDetaildev_levelCloseUp(
  Sender: TObject; var Value: Variant; var Accept: Boolean);
begin
  with DeviceDetail do
  begin
    Edit;
    FieldByName('dev_model').Clear;
  end;
end;
procedure TfrmBeginWorkManageBase.DeviceDetailBeforeOpen(
  DataSet: TDataSet);
begin
  prip_DisableAfterScroll;
end;
procedure TfrmBeginWorkManageBase.DeviceDetailAfterOpen(DataSet: TDataSet);
begin
  prip_EnableAfterScroll;
end;
procedure TfrmBeginWorkManageBase.prip_DisableAfterScroll;
begin
  Fe_DeviceDetail := DeviceDetail.AfterScroll;
  DeviceDetail.AfterScroll := nil;
end;
procedure TfrmBeginWorkManageBase.prip_EnableAfterScroll;
begin
  DeviceDetail.AfterScroll := Fe_DeviceDetail;
end;
procedure TfrmBeginWorkManageBase.prip_SelectCompany(
  const Ai_Category: Integer; Ac_Requestor: TfrmOrganMng);
var
  ls_PrevId: string;
  lc_Arg: TStrings;
  lc_Rc: TModalResult;
  lc_Company: TfrmOrganMng;
begin
  ls_PrevId := '';
  lc_Company := Ac_Requestor;
  with lc_Company do
  begin
    lc_Arg := TStringList.Create;
    lc_Arg.Add(ls_PrevId);
    lc_Arg.Add(IntToStr(Ai_Category));
    try
      pubp_ini(True, lc_Arg);
      lc_Rc := ShowModal;
      Self.Update;
    finally
      lc_Arg.Free;
    end;
    if lc_Rc = mrOK then
    begin
      Fs_CurOrganId := CurOrganId;
      Fs_CurCertId := CurCertId;
    end;
  end;
end;
procedure TfrmBeginWorkManageBase.eConstComEditButtons0Click(
  Sender: TObject; var Handled: Boolean);
var
  lc_Organ: TfrmOrganMng;
begin
  with Generald do if (not AutoEdit) and (State = dsBrowse) then Exit;
  lc_Organ := TfrmOrganMng.Create(nil);
  try
    prip_SelectCompany(INST_SIGN, lc_Organ);
    if Fs_CurOrganId <> '' then
    begin
      with Temp do
      begin
        if Active then Close;
        SQL.Text := Format('SELECT * FROM device.organ_baseinfo ' +
          'WHERE sysid = ''%s, [Fs_CurOrganId]);
        Open;
        General.Edit;
        General.FieldValues['const_com'] := FieldValues['name'];
        General.FieldValues['const_reg_no'] := FieldValues['regno'];
        General.FieldValues['const_address'] := FieldValues['addr'];
        General.FieldValues['const_deputy'] := FieldValues['legalperson'];
        Close;
      end;
    end;
    if Fs_CurCertId <> '' then
    begin
      with Temp do
      begin
        if Active then Close;
        SQL.Text := Format('SELECT * FROM device.organ_cert ' +
          'WHERE sysid= ''%s, [Fs_CurCertId]);
        Open;
        General.Edit;
        General.FieldValues['const_lics_no'] := FieldValues['certno'];
        General.FieldValues['const_lics_date'] := FieldValues['end_date'];
        Close;
      end;
    end;
  finally
    if lc_Organ <> nil then lc_Organ.Free;
    Fs_CurOrganId := '';
    Fs_CurCertId := '';
  end;
end;
procedure TfrmBeginWorkManageBase.ePropertyComEditButtons0Click(
  Sender: TObject; var Handled: Boolean);
var
  lc_Organ: TfrmOrganMng;
begin
  with Generald do if (not AutoEdit) and (State = dsBrowse) then Exit;
  lc_Organ := TfrmOrganMng.Create(nil);
  try
    prip_SelectCompany(PROPERTY_SIGN, lc_Organ);
    if Fs_CurOrganId <> '' then
    begin
      with Temp do
      begin
        if Active then Close;
        SQL.Text := Format('SELECT * FROM device.organ_baseinfo ' +
          'WHERE sysid = ''%s, [Fs_CurOrganId]);
        Open;
        General.Edit;
        General.FieldValues['property_com'] := FieldValues['name'];
        General.FieldValues['property_address'] := FieldValues['addr'];
        Close;
      end;
    end;
  finally
    if lc_Organ <> nil then lc_Organ.Free;
    Fs_CurOrganId := '';
    Fs_CurCertId := '';
  end;
end;
procedure TfrmBeginWorkManageBase.ePrjDesignComEditButtons0Click(
  Sender: TObject; var Handled: Boolean);
var
  lc_Organ: TfrmOrganMng;
begin
  with Generald do if (not AutoEdit) and (State = dsBrowse) then Exit;
  lc_Organ := TfrmOrganMng.Create(nil);
  try
    prip_SelectCompany(0, lc_Organ);
    if Fs_CurOrganId <> '' then
    begin
      with Temp do
      begin
        if Active then Close;
        SQL.Text := Format('SELECT * FROM device.organ_baseinfo ' +
          'WHERE sysid = ''%s, [Fs_CurOrganId]);
        Open;
        General.Edit;
        General.FieldValues['prj_design_com'] := FieldValues['name'];
        Close;
      end;
    end;
  finally
    if lc_Organ <> nil then lc_Organ.Free;
    Fs_CurOrganId := '';
    Fs_CurCertId := '';
  end;
end;
procedure TfrmBeginWorkManageBase.eConstGroupEditButtons0Click(
  Sender: TObject; var Handled: Boolean);
var
  lc_Organ: TfrmOrganMng;
begin
  with Generald do if (not AutoEdit) and (State = dsBrowse) then Exit;
  lc_Organ := TfrmOrganMng.Create(nil);
  try
    prip_SelectCompany(INST_SIGN, lc_Organ);
    if Fs_CurOrganId <> '' then
    begin
      with Temp do
      begin
        if Active then Close;
        SQL.Text := Format('SELECT * FROM device.organ_baseinfo ' +
          'WHERE sysid = ''%s, [Fs_CurOrganId]);
        Open;
        General.Edit;
        General.FieldValues['const_group'] := FieldValues['name'];
        General.FieldValues['const_group_address'] := FieldValues['addr'];
        General.FieldValues['const_group_tel'] := FieldValues['tel'];
        General.FieldValues['const_group_fax'] := FieldValues['fax'];
        Close;
      end;
    end;
  finally
    if lc_Organ <> nil then lc_Organ.Free;
    Fs_CurOrganId := '';
    Fs_CurCertId := '';
  end;
end;
procedure TfrmBeginWorkManageBase.grdConstDetailcom_nameButtonClick(
  Sender: TObject; AbsoluteIndex: Integer);
var
  lc_Organ: TfrmOrganMng;
begin
  with ConstDetaild do if (not AutoEdit) and (State = dsBrowse) then Exit;
  lc_Organ := TfrmOrganMng.Create(nil);
  try
    prip_SelectCompany(BUILDER_SIGN, lc_Organ);
    if Fs_CurOrganId <> '' then
    begin
      with Temp do
      begin
        if Active then Close;
        SQL.Text := Format('SELECT * FROM device.organ_baseinfo ' +
          'WHERE sysid = ''%s, [Fs_CurOrganId]);
        Open;
        ConstDetail.Edit;
        ConstDetail.FieldValues['com_name'] := FieldValues['name'];
        ConstDetail.FieldValues['reg_no'] := FieldValues['regno'];
        Close;
      end;
    end;
  finally
    if lc_Organ <> nil then lc_Organ.Free;
    Fs_CurOrganId := '';
    Fs_CurCertId := '';
  end;
end;
procedure TfrmBeginWorkManageBase.grdBuildDetailcom_nameButtonClick(
  Sender: TObject; AbsoluteIndex: Integer);
var
  lc_Organ: TfrmOrganMng;
begin
  with BuildDetaild do if (not AutoEdit) and (State = dsBrowse) then Exit;
  lc_Organ := TfrmOrganMng.Create(nil);
  try
    prip_SelectCompany(BUILDER_SIGN, lc_Organ);
    if Fs_CurOrganId <> '' then
    begin
      with Temp do
      begin
        if Active then Close;
        SQL.Text := Format('SELECT * FROM device.organ_baseinfo ' +
          'WHERE sysid = ''%s, [Fs_CurOrganId]);
        Open;
        BuildDetail.Edit;
        BuildDetail.FieldValues['com_name'] := FieldValues['name'];
        BuildDetail.FieldValues['reg_no'] := FieldValues['regno'];
        Close;
      end;
    end;
  finally
    if lc_Organ <> nil then lc_Organ.Free;
    Fs_CurOrganId := '';
    Fs_CurCertId := '';
  end;
end;
procedure TfrmBeginWorkManageBase.grdSuprDetailcom_nameButtonClick(
  Sender: TObject; AbsoluteIndex: Integer);
var
  lc_Organ: TfrmOrganMng;
begin
  with SuprDetaild do if (not AutoEdit) and (State = dsBrowse) then Exit;
  lc_Organ := TfrmOrganMng.Create(nil);
  try
    prip_SelectCompany(BUILDVERIFY_SIGN, lc_Organ);
    if Fs_CurOrganId <> '' then
    begin
      with Temp do
      begin
        if Active then Close;
        SQL.Text := Format('SELECT * FROM device.organ_baseinfo ' +
          'WHERE sysid = ''%s, [Fs_CurOrganId]);
        Open;
        SuprDetail.Edit;
        SuprDetail.FieldValues['com_name'] := FieldValues['name'];
        SuprDetail.FieldValues['reg_no'] := FieldValues['regno'];
        Close;
      end;
    end;
  finally
    if lc_Organ <> nil then lc_Organ.Free;
    Fs_CurOrganId := '';
    Fs_CurCertId := '';
  end;
end;
procedure TfrmBeginWorkManageBase.grdPersonDetailcard_noButtonClick(
  Sender: TObject; AbsoluteIndex: Integer);
begin
  prip_SelectPerson;
end;
end.
unit ufrmBeginWorkManage;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ufrmBeginWorkManageBase, dxExEdtr, DB, FR_DSet, FR_DBSet,
  FR_Class, ADODB, CSADOQuery, CSScrCtrlChild, dxEdLib, dxDBELib, dxCntner,
  dxEditor, CSCustomdxDateEdit, CSdxDBDateEdit, StdCtrls, Mask, DBCtrlsEh,
  DBCtrls, CSDBNavigator, CSdxDBNavigator, dxDBTLCl, dxGrClms, dxTL,
  dxDBCtrl, dxDBGrid, ComCtrls, Buttons, ExtCtrls;
type
  TfrmBeginWorkManage = class(TfrmBeginWorkManageBase)
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  frmBeginWorkManage: TfrmBeginWorkManage;
implementation
{$R *.dfm}
end.
unit ufrmBeginWorkListBase;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, CSScrCtrlChild, CSBarMDIChild, CSGrdColCtrl, CSdxGrdColCtrl,
  CSADOFilter, CSADOdxGrdFilter, CSDBBase, CSDBFind, CSDBdxGrdFind, DB,
  ADODB, CSADOQuery, dxExEdtr, dxCntner, dxTL, dxDBCtrl, dxDBGrid,
  dxEditor, dxEdLib, StdCtrls, Buttons, ExtCtrls, CSRowCountPanel,
  CSdxDateEdit, CSCustomdxDateEdit, dxDBTLCl, dxGrClms;
type
  TfrmBeginWorkListBase = class(TForm)
    List: TCSADOQuery;
    Listd: TDataSource;
    ListFind: TCSDBdxGrdFind;
    ListFilter: TCSADOdxGrdFilter;
    ListColCtrl: TCSdxGrdColCtrl;
    CSBarMDIChild1: TCSBarMDIChild;
    ScrChild: TCSScrCtrlChild;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    bbtnFind: TBitBtn;
    bbtnFilter: TBitBtn;
    bbtnColCtrl: TBitBtn;
    deStartDate: TCSdxDateEdit;
    deEndDate: TCSdxDateEdit;
    Panel1: TPanel;
    Panel3: TPanel;
    bbtnClose: TBitBtn;
    bbtnHelp: TBitBtn;
    bbtnAddReport: TBitBtn;
    bbtnEditReport: TBitBtn;
    bbtnDeleteReport: TBitBtn;
    bbtnRefresh: TBitBtn;
    grdList: TdxDBGrid;
    Temp: TCSADOQuery;
    bbtnCollapse: TBitBtn;
    bbtnExpand: TBitBtn;
    CSRowCountPanel1: TCSRowCountPanel;
    Listsysid: TStringField;
    Listreport_no: TStringField;
    Listdev_kind: TStringField;
    Listconst_kind: TStringField;
    Listappraise_date: TStringField;
    Listproject_name: TStringField;
    Listproperty_com: TStringField;
    Listproperty_address: TStringField;
    Listproperty_manager: TStringField;
    Listmanager_tel: TStringField;
    Listprj_design_com: TStringField;
    Listcontract_no: TStringField;
    Listcontract_date: TStringField;
    Listbuild_project: TStringField;
    Listdev_num: TIntegerField;
    Liststart_date: TStringField;
    Listend_date: TStringField;
    Listbuild_charge: TBCDField;
    Listdev_charge: TBCDField;
    Listconst_com: TStringField;
    Listconst_address: TStringField;
    Listconst_reg_no: TStringField;
    Listconst_deputy: TStringField;
    Listconst_lics_no: TStringField;
    Listconst_lics_date: TStringField;
    Listconst_group: TStringField;
    Listconst_group_address: TStringField;
    Listconst_group_tel: TStringField;
    Listconst_group_fax: TStringField;
    Listconst_manager: TStringField;
    Listconst_manager_tel: TStringField;
    Listconst_instructor: TStringField;
    Listconst_instructor_tel: TStringField;
    Listidea_content: TStringField;
    Listnotice_no: TStringField;
    Listnotice_date: TStringField;
    Listremark: TStringField;
    Listoutflag: TIntegerField;
    Liststate: TIntegerField;
    grdListreport_no: TdxDBGridMaskColumn;
    grdListdev_kind: TdxDBGridMaskColumn;
    grdListconst_kind: TdxDBGridMaskColumn;
    grdListappraise_date: TdxDBGridMaskColumn;
    grdListproject_name: TdxDBGridMaskColumn;
    grdListproperty_com: TdxDBGridMaskColumn;
    grdListproperty_address: TdxDBGridMaskColumn;
    grdListproperty_manager: TdxDBGridMaskColumn;
    grdListmanager_tel: TdxDBGridMaskColumn;
    grdListprj_design_com: TdxDBGridMaskColumn;
    grdListcontract_no: TdxDBGridMaskColumn;
    grdListcontract_date: TdxDBGridMaskColumn;
    grdListbuild_project: TdxDBGridMaskColumn;
    grdListdev_num: TdxDBGridMaskColumn;
    grdListstart_date: TdxDBGridMaskColumn;
    grdListend_date: TdxDBGridMaskColumn;
    grdListbuild_charge: TdxDBGridCurrencyColumn;
    grdListdev_charge: TdxDBGridCurrencyColumn;
    grdListconst_com: TdxDBGridMaskColumn;
    grdListconst_address: TdxDBGridMaskColumn;
    grdListconst_reg_no: TdxDBGridMaskColumn;
    grdListconst_deputy: TdxDBGridMaskColumn;
    grdListconst_lics_no: TdxDBGridMaskColumn;
    grdListconst_lics_date: TdxDBGridMaskColumn;
    grdListconst_group: TdxDBGridMaskColumn;
    grdListconst_group_address: TdxDBGridMaskColumn;
    grdListconst_group_tel: TdxDBGridMaskColumn;
    grdListconst_group_fax: TdxDBGridMaskColumn;
    grdListconst_manager: TdxDBGridMaskColumn;
    grdListconst_manager_tel: TdxDBGridMaskColumn;
    grdListconst_instructor: TdxDBGridMaskColumn;
    grdListconst_instructor_tel: TdxDBGridMaskColumn;
    grdListidea_content: TdxDBGridMaskColumn;
    grdListnotice_no: TdxDBGridMaskColumn;
    grdListnotice_date: TdxDBGridMaskColumn;
    grdListstate: TdxDBGridMaskColumn;
    procedure bbtnCloseClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure bbtnFindClick(Sender: TObject);
    procedure bbtnFilterClick(Sender: TObject);
    procedure bbtnColCtrlClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure bbtnAddReportClick(Sender: TObject);
    procedure bbtnEditReportClick(Sender: TObject);
    procedure bbtnDeleteReportClick(Sender: TObject);
    procedure bbtnRefreshClick(Sender: TObject);
    procedure grdListCustomDraw(Sender: TObject; ACanvas: TCanvas;
      ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxDBTreeListColumn;
      const AText: String; AFont: TFont; var AColor: TColor; ASelected,
      AFocused: Boolean; var ADone: Boolean);
    procedure grdListChangeNode(Sender: TObject; OldNode,
      Node: TdxTreeListNode);
    procedure bbtnCollapseClick(Sender: TObject);
    procedure bbtnExpandClick(Sender: TObject);
  private
    procedure prip_SetBtnState;
    procedure prip_IniInterface;
    procedure prip_Refresh(const As_Id: string = '');
    procedure prip_AddReport;
    procedure prip_EditReport;
    procedure prip_DeleteReport;
  protected
    Rs_DetailTable: string;
    function prof_CreateManage: TForm; virtual;
    procedure prop_IniData; virtual;
  public
    procedure pubp_Ini;
  end;
implementation
uses
  DateUtils, CSVCLUtils, CSScrCtrlMaster, udmData, CommonLib,
  ufrmBeginWorkManageBase;
const
  CONFIRM_STATE = 1;
{$R *.dfm}
{ TfrmBeginWorkListBase }
procedure TfrmBeginWorkListBase.prip_AddReport;
var
  ls_Id: string;
  lc_Args: TStrings;
  lc_BeginWorkManage: TfrmBeginWorkManageBase;
begin
  ls_Id := '';
  lc_Args := TStringList.Create;
  try
    lc_Args.Add(ls_Id);
    lc_BeginWorkManage := TfrmBeginWorkManageBase(prof_CreateManage);
    with lc_BeginWorkManage do
    begin
      try
        pubp_Ini(AM_VMADDREPORT, lc_Args);
        ShowModal;
        if DataModified then prip_Refresh(BWGeneralId);
      finally
        Free;
      end;
    end;
  finally
    lc_Args.Free;
  end;
end;
procedure TfrmBeginWorkListBase.prip_DeleteReport;
var
  ls_Id: string;
  lc_Args: TStrings;
  lc_BeginWorkManage: TfrmBeginWorkManageBase;
  procedure PerformDelete;
  begin
    Gp_ProgressHint(',...');
    with dmData.adocon do
    begin
      BeginTrans;
      try
        Execute(Format('DELETE FROM device.equipment_stwk_report WHERE ' +
          'sysid = ''%s, [ls_Id]));
        Execute(Format('DELETE FROM device.equipment_stwk_device ' +
          'WHERE stwk_id = ''%s, [ls_Id]));
        Execute(Format('DELETE FROM device.equipment_stwk_person ' +
          'WHERE stwk_id = ''%s, [ls_Id]));
        Execute(Format('DELETE FROM device.equipment_stwk_build ' +
          'WHERE stwk_id = ''%s, [ls_Id]));
        Execute(Format('DELETE FROM device.equipment_stwk_const ' +
          'WHERE stwk_id = ''%s, [ls_Id]));
        Execute(Format('DELETE FROM device.equipment_stwk_doc ' +
          'WHERE stwk_id = ''%s, [ls_Id]));
        Execute(Format('DELETE FROM device.equipment_stwk_supr ' +
          'WHERE stwk_id = ''%s, [ls_Id]));
        CommitTrans;
        prip_Refresh;
      except
        on E: Exception do
        begin
          RollbackTrans;
          Application.MessageBox(PChar(',:' +
            E.Message), PChar(Caption), MB_OK + MB_ICONERROR);
        end;
      end;
    end;
    Gp_ProgressHint;
  end;
begin
  with List do
  begin
    if (not Active) or IsEmpty then Exit;
    ls_Id := FieldByName('sysid').AsString;
  end;
  lc_Args := TStringList.Create;
  try
    lc_Args.Add(ls_Id);
    lc_BeginWorkManage := TfrmBeginWorkManageBase(prof_CreateManage);
    with lc_BeginWorkManage do
      try
        pubp_Ini(AM_VMDELETEREPORT, lc_Args);
        ShowModal;
        if ModalResult = mrOK then PerformDelete;
      finally
        Free;
      end;
  finally
    lc_Args.Free;
  end;
end;
procedure TfrmBeginWorkListBase.prip_EditReport;
var
  ls_Id: string;
  lc_Args: TStrings;
  lc_BeginWorkManage: TfrmBeginWorkManageBase;
begin
  with List do
  begin
    if (not Active) or IsEmpty then Exit;
    ls_Id := FieldByName('sysid').AsString;
  end;
  lc_Args := TStringList.Create;
  try
    lc_Args.Add(ls_Id);
    lc_BeginWorkManage := TfrmBeginWorkManageBase(prof_CreateManage);
    with lc_BeginWorkManage do
    begin
      try
        pubp_Ini(AM_VMEDITREPORT, lc_Args);
        ShowModal;
        if DataModified then prip_Refresh(BWGeneralId);
      finally
        Free;
      end;
    end;
  finally
    lc_Args.Free;
  end;
end;
procedure TfrmBeginWorkListBase.prop_IniData;
var
  ls_StartDate, ls_EndDate: string;
begin
  ls_StartDate := deStartDate.Text;
  ls_EndDate := deEndDate.Text;
  with List do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT * FROM device.equipment_stwk_report WHERE ' +
      '(start_date >= ''%s'' AND start_date <=  ''%s'') OR state <> ' +
      IntToStr(CONFIRM_STATE), [ls_StartDate, ls_EndDate]);
    Open;
  end;
end;
procedure TfrmBeginWorkListBase.prip_IniInterface;
begin
  prip_SetBtnState;
  with grdList do
  begin
    FullExpand;
    GotoFirst;
  end;
end;
procedure TfrmBeginWorkListBase.prip_Refresh(const As_Id: string);
begin
  prop_IniData;
  prip_SetBtnState;
  grdList.FullExpand;
  if not List.Locate('sysid', As_Id, []) then grdList.GotoFirst;
end;
procedure TfrmBeginWorkListBase.pubp_Ini;
begin
  ScrChild.SetSecurity(Self);
  Gp_ProgressHint(Format('%s,...', [Caption]));
  try
    prop_IniData;
    Position := poScreenCenter;
    BorderIcons := BorderIcons -[biMinimize];
    FormStyle := fsMDIChild;
    if MAXIMIZEDBYDEFAULT then WindowState := wsMaximized else ClientTile(Self);
    prip_IniInterface;
  finally
    Gp_ProgressHint;
  end;
end;
procedure TfrmBeginWorkListBase.bbtnCloseClick(Sender: TObject);
begin
  Close;
end;
procedure TfrmBeginWorkListBase.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;
procedure TfrmBeginWorkListBase.bbtnFindClick(Sender: TObject);
begin
  ListFind.FindDlg;
end;
procedure TfrmBeginWorkListBase.bbtnFilterClick(Sender: TObject);
begin
  ListFilter.FilterDlg;
end;
procedure TfrmBeginWorkListBase.bbtnColCtrlClick(Sender: TObject);
begin
  with ListColCtrl do
  begin
    InitColumns;
    SetupDlg;
  end;
end;
procedure TfrmBeginWorkListBase.FormCreate(Sender: TObject);
begin
  with grdList do
  begin
    IniFileName := Gs_AppPath + USERCONFIG_NAME;
    LoadFromIniFile(IniFileName);
  end;
  Rs_DetailTable := '';
  
  deStartDate.Date := IncDay(ToDay, -60);
  deEndDate.Date := IncDay(ToDay, 60);
end;
procedure TfrmBeginWorkListBase.bbtnAddReportClick(Sender: TObject);
begin
  prip_AddReport;  
end;
procedure TfrmBeginWorkListBase.bbtnEditReportClick(Sender: TObject);
begin
  prip_EditReport;
end;
procedure TfrmBeginWorkListBase.bbtnDeleteReportClick(Sender: TObject);
begin
  prip_DeleteReport;
end;
procedure TfrmBeginWorkListBase.bbtnRefreshClick(Sender: TObject);
begin
  prip_Refresh;
end;
procedure TfrmBeginWorkListBase.grdListCustomDraw(Sender: TObject;
  ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
  AColumn: TdxDBTreeListColumn; const AText: String; AFont: TFont;
  var AColor: TColor; ASelected, AFocused: Boolean; var ADone: Boolean);
var
  li_StateIndex, li_State: Integer;
begin
  if ANode.HasChildren then Exit;
  li_StateIndex := grdList.ColumnByFieldName('state').Index;
  if ANode.Strings[li_StateIndex] = '' then Exit;
  li_State := StrToInt(ANode.Strings[li_StateIndex]);
  if li_State = CONFIRM_STATE then AFont.Color := CL_CONFIRM;
end;
procedure TfrmBeginWorkListBase.grdListChangeNode(Sender: TObject; OldNode,
  Node: TdxTreeListNode);
var
  li_StateIndex, li_State: Integer;
begin
  if Node.HasChildren then li_State := List.FieldByName('state').AsInteger
  else begin
    li_StateIndex := grdList.ColumnByFieldName('state').Index;
    li_State := StrToInt(Node.Strings[li_StateIndex]);
  end;
  if li_State = CONFIRM_STATE then
  begin
    bbtnEditReport.Caption := '';
    bbtnEditReport.Enabled := True;
    bbtnDeleteReport.Enabled := False;
  end else begin
    bbtnEditReport.Caption := '';
    bbtnEditReport.Enabled := True;
    bbtnDeleteReport.Enabled := True;
  end;
end;
procedure TfrmBeginWorkListBase.prip_SetBtnState;
begin
  bbtnEditReport.Caption := '';
  if List.IsEmpty then
  begin
    bbtnEditReport.Enabled := False;
    bbtnDeleteReport.Enabled := False;
  end else with grdList do
    OnChangeNode(grdList, TopVisibleNode, TopVisibleNode);
end;
procedure TfrmBeginWorkListBase.bbtnCollapseClick(Sender: TObject);
begin
  grdList.FullCollapse;
end;
procedure TfrmBeginWorkListBase.bbtnExpandClick(Sender: TObject);
begin
  grdList.FullExpand;
end;
function TfrmBeginWorkListBase.prof_CreateManage: TForm;
begin
  Result := nil;
end;
end.
unit ufrmBeginWorkList;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ufrmBeginWorkListBase, dxExEdtr, CSScrCtrlChild, CSBarMDIChild,
  CSGrdColCtrl, CSdxGrdColCtrl, CSADOFilter, CSADOdxGrdFilter, CSDBBase,
  CSDBFind, CSDBdxGrdFind, DB, ADODB, CSADOQuery, dxCntner, dxTL, dxDBCtrl,
  dxDBGrid, dxEditor, dxEdLib, StdCtrls, Buttons, ExtCtrls, CSRowCountPanel,
  CSdxDateEdit, CSCustomdxDateEdit, dxDBTLCl, dxGrClms;
type
  TfrmBeginWorkList = class(TfrmBeginWorkListBase)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  protected
    function prof_CreateManage: TForm; override;
  public
    { Public declarations }
  end;
var
  frmBeginWorkList: TfrmBeginWorkList;
implementation
uses
  DateUtils, CSVCLUtils, CSScrCtrlMaster, udmData, CommonLib,
  ufrmBeginWorkManage;
{$R *.dfm}
{ TfrmBeginWorkList }
procedure TfrmBeginWorkList.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  
  frmBeginWorkList := nil;
end;
function TfrmBeginWorkList.prof_CreateManage: TForm;
begin
  Result := TfrmBeginWorkManage.Create(nil);
end;
end.
unit ufrmBeginning;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, dxfColorButton, DB, ADODB, CSADOQuery;
var
  frmBeginning: TfrmBeginning;
implementation
uses StrUtils, ufrmFrontPay, upubCommon, udmData;
{$R *.dfm}
//{$DEFINE DEBUG}
{ TfrmBeginning }
procedure TfrmBeginning.OnBbtnNumClick(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
var
  li_Tag: Integer;
begin
  li_Tag := (Sender as TdxfColorButton).Tag;
  Case li_Tag of
    10:  //
    begin
      if Pos(eMoney.Text, '.') = 0 then
      begin
        eMoney.Text := eMoney.Text + '.';
      end;
    end;
    11:
    begin
      eMoney.Text := LeftStr(eMoney.Text, Length(eMoney.Text) - 1);
    end;
    12:
    begin
      eMoney.Clear;
    end;
    else
    begin
      eMoney.Text := eMoney.Text + LeftStr((Sender as TdxfColorButton).Caption.Text, 1);
    end;
  end;
end;
procedure TfrmDeviceManage.grdListGetCellParams(Sender: TObject;
  Column: TColumnEh; AFont: TFont; var Background: TColor;
  State: TGridDrawState);
begin
  with List do
  begin
    if FieldByName('dev_state').AsString = DS_STOP then
      AFont.Color := CL_DSSTOP;
    if FieldByName('dev_state').AsString = DS_USELESS then
      AFont.Color := CL_DSUSELESS;
  end;
end;
procedure TfrmDeviceManage.bbtnLogPrintClick(Sender: TObject);
begin
  with PrintGrd do
  begin
    DBGridEh := grdDeviceLog;
    Preview;
  end;
end;
procedure TfrmDeviceManage.prip_GetComInfo(Asa_Ids: array of string);
var
  li_Index: Integer;
begin
  with Temp do
  begin
    if Active then Close;
    SQL.Text := Format('SELECT sysid, name, 1 AS ix FROM device.organ_baseinfo ' +
      'WHERE sysid = ''%s'' UNION ' +
      'SELECT sysid, name, 2 AS ix FROM device.organ_baseinfo ' +
      'WHERE sysid = ''%s'' UNION ' +
      'SELECT sysid, name, 3 AS ix FROM device.organ_baseinfo ' +
      'WHERE sysid = ''%s'' UNION ' +
      'SELECT sysid, name, 4 AS ix FROM device.organ_baseinfo ' +
      'WHERE sysid = ''%s'' UNION ' +
      'SELECT sysid, name, 5 AS ix FROM device.organ_baseinfo ' +
      'WHERE sysid = ''%s'' UNION ' +
      'SELECT sysid, name, 6 AS ix FROM device.organ_baseinfo ' +
      'WHERE sysid = ''%s'' UNION ' +
      'SELECT sysid, name, 7 AS ix FROM device.organ_baseinfo ' +
      'WHERE sysid = ''%s'' UNION ' +
      'SELECT sysid, name, 8 AS ix FROM device.organ_baseinfo ' +
      'WHERE sysid = ''%s'' UNION ' +
      'SELECT sysid, name, 9 AS ix FROM device.organ_baseinfo ' +
      'WHERE sysid = ''%s'' UNION ' +
      'SELECT sysid, name, 10 AS ix FROM device.organ_baseinfo ' +
      'WHERE sysid = ''%s'' UNION ' +
      'SELECT sysid, name, 11 AS ix FROM device.organ_baseinfo ' +
      'WHERE sysid = ''%s,
      [Asa_Ids[0], Asa_Ids[1], Asa_Ids[2], Asa_Ids[3], Asa_Ids[4], Asa_Ids[5],
      Asa_Ids[6], Asa_Ids[7], Asa_Ids[8], Asa_Ids[9], Asa_Ids[10]]);
    Open;
    if not mComInfo.IsEmpty then mComInfo.Delete;
    mComInfo.Insert;
    while not Eof do
    begin
      li_Index := FieldByName('ix').AsInteger;
      mComInfo.Fields[li_Index * 2 - 1].Value := FieldValues['sysid'];
      mComInfo.Fields[li_Index * 2].Value := FieldValues['name'];
      Next;
    end;
    mComInfo.Post;
    if BaseInfo.State <> dsInsert then mComInfoBak.LoadFromDataSet(mComInfo);
    prip_GetUserCom(VarToStr(mComInfo.FieldValues['user_id']));
    Close;
  end;
  prip_RefreshListSource;
end;
procedure TfrmDeviceManage.BaseInfoAfterScroll(DataSet: TDataSet);
begin
  with DataSet do
  begin
    if State <> dsInsert then
      prip_GetComInfo([VarToStr(FieldValues['user_id']),
        VarToStr(FieldValues['inst_id']),
        VarToStr(FieldValues['manu_id']),
        VarToStr(FieldValues['repair_id']),
        VarToStr(FieldValues['property_id']),
        VarToStr(FieldValues['design_id']),
        VarToStr(FieldValues['verify_id']),
        VarToStr(FieldValues['build_id']),
        VarToStr(FieldValues['buildverify_id']),
        VarToStr(FieldValues['supervise_id']),
        VarToStr(FieldValues['verifyorg_id'])]);
//    else prip_RefreshListSource;
  end;
end;
procedure TfrmDeviceManage.prip_RefreshListSource;
begin
  with lcmbUserCom do
  begin
    ListSource := nil;
    ListSource := mComInfod;
  end;
  with lcmbInstCom do
  begin
    ListSource := nil;
    ListSource := mComInfod;
  end;
  with lcmbManuCom do
  begin
    ListSource := nil;
    ListSource := mComInfod;
  end;

  with lcmbRepairCom do
  begin
    ListSource := nil;
    ListSource := mComInfod;
  end;
  with lcmbPropertyCom do
  begin
    ListSource := nil;
    ListSource := mComInfod;
  end;
  with lcmbDesignCom do
  begin
    ListSource := nil;
    ListSource := mComInfod;
  end;
  with lcmbVerifyCom do
  begin
    ListSource := nil;
    ListSource := mComInfod;
  end;
  with lcmbBuildCom do
  begin
    ListSource := nil;
    ListSource := mComInfod;
  end;
  with lcmbBuildVerifyCom do
  begin
    ListSource := nil;
    ListSource := mComInfod;
  end;
  with lcmbSuperviseOrg do
  begin
    ListSource := nil;
    ListSource := mComInfod;
  end;
  with lcmbVerifyOrg do
  begin
    ListSource := nil;
    ListSource := mComInfod;
  end;
end;
procedure TfrmDeviceManage.BaseInfoAfterCancel(DataSet: TDataSet);
begin
  with mComInfo do
  begin
    LoadFromDataSet(mComInfoBak);
    prip_GetUserCom(VarToStr(FieldValues['user_id']));
  end;
  prip_RefreshListSource;
end;
procedure TfrmDeviceManage.prip_CheckDevCode(
  Ac_lcmbDevCode: TDBLookupComboboxEh);
var
  li_OldType, li_NewType: Integer;
begin
  if BaseInfo.State <> dsEdit then Exit;
  li_OldType := StrToInt(Copy(Fs_PrevDevCode, 1, 1));
  li_NewType := StrToInt(Copy(DeviceCode.FieldByName('code').AsString, 1, 1));
  PostMessage(Handle, CM_DEVICECODECHANGED, li_OldType, li_NewType);
end;
procedure TfrmDeviceManage.CMDeviceCodeChanged(var Msg: TMessage);
var
  ls_DevCode: string;
begin

  if Msg.WParam <> Msg.LParam then
  begin
    Application.MessageBox('', PChar(Self.Caption),
      MB_OK + MB_ICONWARNING);
    BaseInfo.FieldByName('dev_code_id').AsString := Fs_PrevDevCodeId;
  end;
  ls_DevCode := DeviceCode.FieldByName('code').AsString;
  prip_SetInterface(ls_DevCode);
end;
procedure TfrmDeviceManage.lcmbSuperviseOrgEditButtons0Click(
  Sender: TObject; var Handled: Boolean);
begin
  prip_CompanyDialog(SUPERVISOR_SIGN, lcmbSuperviseOrg, TfrmOrganMng.Create(nil));
end;
procedure TfrmDeviceManage.lcmbUserComEditButtons0Click(Sender: TObject;
  var Handled: Boolean);
begin
  prip_CompanyDialog(USER_SIGN, lcmbUserCom, TfrmOrganMng.Create(nil));
end;
procedure TfrmDeviceManage.lcmbManuComEditButtons0Click(Sender: TObject;
  var Handled: Boolean);
begin
  prip_CompanyDialog(MANU_SIGN, lcmbManuCom, TfrmOrganMng.Create(nil));
end;
procedure TfrmDeviceManage.lcmbInstComEditButtons0Click(Sender: TObject;
  var Handled: Boolean);
begin
  prip_CompanyDialog(INST_SIGN, lcmbInstCom, TfrmOrganMng.Create(nil));
end;
procedure TfrmDeviceManage.lcmbRepairComEditButtons0Click(
  Sender: TObject; var Handled: Boolean);
begin
  prip_CompanyDialog(REPAIR_SIGN, lcmbRepairCom, TfrmOrganMng.Create(nil));
end;
procedure TfrmDeviceManage.lcmbBuildComEditButtons0Click(
  Sender: TObject; var Handled: Boolean);
begin
  prip_CompanyDialog(BUILDER_SIGN, lcmbBuildCom, TfrmOrganMng.Create(nil));
end;
procedure TfrmDeviceManage.lcmbBuildVerifyComEditButtons0Click(
  Sender: TObject; var Handled: Boolean);
begin
  prip_CompanyDialog(BUILDVERIFY_SIGN, lcmbBuildVerifyCom,
    TfrmOrganMng.Create(nil));
end;
procedure TfrmDeviceManage.lcmbVerifyOrgEditButtons0Click(
  Sender: TObject; var Handled: Boolean);
begin
  prip_CompanyDialog(VERIFYACCEPT_SIGN, lcmbVerifyOrg, TfrmOrganMng.Create(nil));
end;
procedure TfrmDeviceManage.lcmbPropertyComEditButtons0Click(
  Sender: TObject; var Handled: Boolean);
begin
  prip_CompanyDialog(PROPERTY_SIGN, lcmbPropertyCom, TfrmOrganMng.Create(nil));
end;
procedure TfrmDeviceManage.prip_SetInterface(const As_DevCode: string);
var
  li_DevCode: Integer;
begin
  li_DevCode := StrToInt(Copy(As_DevCode, 1, 1));
  case li_DevCode of
  
  end;
procedure TfrmBeginning.prip_IniData;
begin
  labEmpCD.Caption := LoginInfo.UserId;
  labEmpName.Caption := LoginInfo.UserName;
  labOnDate.Caption := FormatDateTime('YYYY-MM-DD', Date);
  labOnTime.Caption := FormatDateTime('HH:MM:SS', Time);
  labNum.Caption := MachinesInfo.MachinesCD;
  with dmData.Temp do
  begin
    if Active then Close;
    Connection := dmData.adocon;
    SQL.Text := Format('SELECT * FROM T_SHOP_MS WHERE I_SHOP_CD = ''%s,
      [ShopInfo.ShopCD]);
    {$IF DEFINED(DEBUG)}
      ShowMessage(SQL.Text);
    {$IFEND}
    Open;
    if not IsEmpty then
    begin
      ShopInfo.CompanyName := FieldByName('I_COMPANY_NAME').AsString;
      ShopInfo.ShopName := FieldByName('I_SHOP_NAME').AsString;
      labCompany.Caption := ShopInfo.CompanyName;
      labShopName.Caption := ShopInfo.ShopName;
    end;
    Close;
    SQL.Clear;
    SQL.Text := Format('SELECT I_WORK_CD FROM T_WORK_MS WHERE I_START_TIME <= ' +
      %s'' AND I_END_TIME >= ''%s,[Trim(labOnTime.Caption),
      Trim(labOnTime.Caption)]);
    Open;
    {$IF DEFINED(DEBUG)}
      SQL.SaveToFile('1.txt');
      ShowMessage(SQL.Text);
    {$IFEND}
    if not IsEmpty then
    begin
      LoginInfo.WorkCD := FieldByName('I_WORK_CD').AsString;
    end;
    labWork.Caption := LoginInfo.WorkCD;
    Close;
  end;
end;
procedure TfrmBeginning.prip_IniInterFace;
begin
  btnNum0.OnMouseDown := OnBbtnNumClick;
  btnNum1.OnMouseDown := OnBbtnNumClick;
  btnNum2.OnMouseDown := OnBbtnNumClick;
  btnNum3.OnMouseDown := OnBbtnNumClick;
  btnNum4.OnMouseDown := OnBbtnNumClick;
  btnNum5.OnMouseDown := OnBbtnNumClick;
  btnNum6.OnMouseDown := OnBbtnNumClick;
  btnNum7.OnMouseDown := OnBbtnNumClick;
  btnNum8.OnMouseDown := OnBbtnNumClick;
  btnNum9.OnMouseDown := OnBbtnNumClick;
  btnDot.OnMouseDown := OnBbtnNumClick;
  btnModify.OnMouseDown := OnBbtnNumClick;
  btnClear.OnMouseDown := OnBbtnNumClick;
  WindowState := wsMaximized;
end;
procedure TfrmBeginning.pubp_Ini;
begin
  prip_IniData;
  prip_IniInterFace;
end;
procedure TfrmBeginning.bbtnCancelClick(Sender: TObject);
var
  ls_SQL: String;
begin
  Close;
  pubCommon.OnOffLine := False;
  ls_SQL := Format('UPDATE T_MACHINES_MS SET I_MACHINES_FREE = 1, ' +
    ' I_LAST_ON_TIME = ''%s'' WHERE I_MACHINES_CD = ''%s, 
    [FormatDateTime('YYYY-MM-DD HH:MM:SS', Now), MachinesInfo.MachinesCD]);
  dmData.pubp_ExecSQL(ls_SQL);
end;
procedure TfrmBeginning.bbtnConfirmClick(Sender: TObject);
begin
  LoginInfo.LYMoney := StrToCurrDef(eMoney.Text, 0.00);
  with OnLineq do
  begin
    if Active then Close;
    Connection := dmData.adocon;
    SQL.Text := 'SELECT * FROM T_LOGIN_WORK_MS WHERE 1 = 2';
    Open;
Append;

    FieldByName('I_MACHINES_CD').AsString := MachinesInfo.MachinesCD;
    FieldByName('I_LOGIN_CD').AsString := LoginInfo.UserId;
    FieldByName('I_DATE').AsString := labOnDate.Caption;
    FieldByName('I_TIME').AsString := labOnTime.Caption;
    FieldByName('I_WORK_CD').AsString := LoginInfo.WorkCD;
    FieldByName('I_AMOUNT').AsCurrency := LoginInfo.LYMoney;  
    FieldByName('I_FLAG').AsCurrency := AI_ONLINE;
    Post;
    Close;
  end;
  ModalResult := MrOk;
end;
end.