unit U_Fun;

interface
uses
  Windows, Messages, SysUtils,dxCore, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ToolWin, StdCtrls, BtnEdit, cxStyles, cxCustomData,
  cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit,DBGrids, DB, cxDBData,
  cxGridLevel, cxClasses, cxControls, cxGridCustomView, ADODB,StrUtils,
  Midas,cxGridCustomTableView, cxGridTableView, cxGridDBTableView,cxTimeEdit,
  cxTreeView,  cxGrid,cxDBLookupComboBox,cxCalendar, cxCurrencyEdit,cxGridExportLink,
  ExtCtrls, Buttons,DBClient,RTComboBox,cxDropDownEdit,cxGridBandedTableView,
  cxGridDBBandedTableView,cxRichEdit,cxButtonEdit,IniFiles,WinSock,IdHTTP;
//Function sendarp(ipaddr:ulong;temp:dword;ulmacaddr:pointer;ulmacaddrleng:pointer) : DWord; StdCall; External 'Iphlpapi.dll' Name 'SendARP';
type
    TA = class(TComponent)
    public
      S:string;
end;

  function  SGetMaxId(AdoQueryTemp:TADOQuery;MyTable:string;MyField:string;Var MaxId:Integer):Boolean;
  function  SIsRepeated(AdoQueryTemp:TADOQuery;MyTable:string;MyField:string;MyCode:String):Boolean;
  function  SSetSaveDataCDS(AdoQueryCmd:TADOQuery;Tv1:TcxGridDBTableView;
                          CDS_Sub:TClientDataSet;MyTable:string;MyTag:Integer):Boolean;
  function  SSetSaveDataCDS10(AdoQueryCmd:TADOQuery;Tv1:TcxGridDBBandedTableView;
                         CDS_Sub:TClientDataSet;MyTable:string;MyTag:Integer):Boolean;
  function  SGetServerDate(ADOQueryTmp:TADOQuery):TdateTime;
  procedure SSetsavedata(ADOQueryCmd:TADOQuery;MyTable:string;
                                       Myparent:TWinControl;MyTag:integer);
  procedure SSetWinData(ADOQueryTmp:TADOQuery;mParent:TWinControl);
  function  SDelData(ADOQueryCmd:TADOQuery;mDelStr:String):Boolean;
  function  SGetFilters(TMPanel:TPanel;EquTag,LikeTag:Integer):string;
  function  SGetFiltersHint(TMPanel:TPanel;EquTag,LikeTag:Integer):string;
  procedure SDofilter(ADOQry:TADOQuery;FilterStr:string);
  function  SGetMaxNo(MyAdoQuery:TADOQuery;MyTable:string;MyField:string;MyFlag:string):String;
  procedure SCreateCDS20(SADOQry:TADOQuery; mClientDataset:TclientDataSet );
  procedure SInitCDSData20(fromADO:TADOQuery;toCDS:TclientDataSet);
  procedure SInitFtComBoxBySql(ADOQueryTmp:TADOQuery;
                           cb: TRTComboBox;FlagType:string;
                           Boxtype:integer;
                           showMsg:string;
                           emptyFlag:Boolean;
                           mSql:string
                           );
  procedure SInitComBoxBySql(ADOQueryTmp:TADOQuery;
                           cb: TComboBox;
                           emptyFlag:Boolean;
                           mSql:string
                           );
  procedure SInitComBoxByCustCode(ADOQueryTmp:TADOQuery;
                           cb: TComboBox;FlagType:string;
                           Boxtype:integer;
                           showMsg:string;
                           emptyFlag:Boolean
                           );
  procedure SInitCxGridComboBoxByCustCode(ADOQueryTmp:TADOQuery;c3:TcxGriddbColumn;
                                        FlagType:string;PState:Integer;IsNull:Boolean;Shmeg:string);
  procedure SSetsavedata10(ADOQueryCmd:TADOQuery;MyTable:string;
                                       Myparent:TWinControl;MyTag:integer);
  procedure SSetWinData10(ADOQueryTmp:TADOQuery;mParent:TWinControl);
  procedure SInitCxGridComboBoxBySql(ADOQueryTmp:TADOQuery;c3:TcxGriddbColumn;FSql:string;
                                        PState:Integer;IsNull:Boolean;Shmeg:string);
  function  SSWR(s: real): real; //*****�������� *****//
  procedure SSetWinData20(ADOQueryTmp:TADOQuery;mParent:TWinControl);
  procedure SSetWinData30(ADOQueryTmp:TADOQuery;mParent:TWinControl;FTag:Integer);
  procedure SCSHData(ADOQueryTmp:TADOQuery;mParent:TWinControl;FTag:Integer);
  procedure SSetsavedataNew(ADOQueryCmd:TADOQuery;MyTable:string;
                                       Myparent:TWinControl;MyTag:integer);
  function SGetServerDate10(ADOQueryTmp:TADOQuery):TDateTime;
  function SGetServerDateTime(ADOQueryTmp:TADOQuery):TDateTime;
  procedure SCreateCDSSel(SADOQry:TADOQuery; mClientDataset:TclientDataSet );
  procedure SInitCDSDataSel(fromADO:TADOQuery;toCDS:TclientDataSet);
  procedure CopyAddRow(Tv1:TcxGridDBTableView;CDS_Sub:TClientDataSet); //�������С���groupformat���ֵ��
  procedure CopyAddRowBand(Tv1:TcxGridDBBandedTableView;CDS_Sub:TClientDataSet);
  procedure OneKeyPost(Tv1:TcxGridDBTableView;CDS_Sub:TClientDataSet); //һ���滻ճ��
  procedure CopyAddRowCDS(CDS_Sub:TClientDataSet);
  function SSetSaveDataCDSNew(AdoQueryCmd:TADOQuery;Tv1:TcxGridDBTableView;
                         CDS_Sub:TClientDataSet;MyTable:string;MyTag:Integer):Boolean;
  function SGetFinds(TMPanel:TPanel;EquTag,LikeTag:Integer):string;
  function SSetSaveDataCDSBandNew(AdoQueryCmd:TADOQuery;Tv1:TcxGridDBBandedTableView;
                         CDS_Sub:TClientDataSet;MyTable:string;MyTag:Integer):Boolean;
  function GetLSNo(ADOQueryTmp:TADOQuery;
                    var mMaxNo:string;
                    mFlag:string;
                    mTable:string;
                    mlen:integer;
                    mtype:integer=0):Boolean;
  procedure SSetsaveSql(ADOQueryCmd:TADOQuery;MyTable:string;
                                       Myparent:TWinControl;MyTag:integer);
  procedure ReadCxGrid(fileName:string;cxgrid:TcxGridDBTableView;filePack:string='����');
  procedure ReadCxBandedGrid(fileName:string;cxgrid:TcxGridDBBandedTableView;filePack:string='����');
  procedure WriteCxGrid(fileName:string;cxgrid:TcxGridDBTableView;filePack:string='����');
  procedure WriteCxBandedGrid(fileName:string;cxgrid:TcxGridDBBandedTableView;filePack:string='����');
  procedure CreateGroupSummarry(tv1:TcxGridDBTableView);
  procedure TcxGridToExcel(mfileName:string;gridName:TcxGrid);
  function ReadINIFileStr(ininame,TypeName:string;ValueName,ValueMR:String):string;
  procedure SClearData(mParent:TWinControl;FTag:Integer);
  procedure SelExportData(FTv:TcxGridDBTableView;FAdoQry:TADOQuery;FTile:string);
  procedure SDofilter10(cds_Main:TClientDataSet;FilterStr:string);
  procedure SInitCxBandGridComboBoxBySql(ADOQueryTmp:TADOQuery;c3:TcxGridDBBandedColumn;FSql:string;
                                        PState:Integer;IsNull:Boolean;Shmeg:string);
  procedure ColumnView(AdoQueryTemp:TADOQuery;Tv1:TcxGridDBTableView;MKName10:string);
  procedure ColumnSet(TV10:TcxGridDBTableView;MKName10:String);
  procedure ColumnBandSet(TV10:TcxGridDBBandedTableView;MKName10:String);
  procedure ColumnBandView(AdoQueryTemp:TADOQuery;Tv1:TcxGridDBBandedTableView;MKName10:string);
  procedure SCSHDataWTag(ADOQueryTmp:TADOQuery;mParent:TWinControl);
  procedure GetSWLDZ(IPStr:string);
  procedure SCSHDataCDS(CDS_Main:TClientDataSet;mParent:TWinControl;FTag:Integer);
  procedure SelPrintData(FTv:TcxGridDBTableView;FAdoQry:TADOQuery;FTitle:string
                         ;FLTitle:string;FRTile:string);
  procedure SelPrintDataMore(FTv:TcxGridDBTableView;FAdoQry:TADOQuery;FTitle:string
                         ;FLTitle:string;FRTile:string;FKK:Integer;FiniName:string);
  procedure SelExportDataBand(FTv:TcxGridDBBandedTableView;FAdoQry:TADOQuery;FTile:string);
  procedure SSetsaveSqlNew(ADOQueryCmd:TADOQuery;MyTable:string;
                                       Myparent:TWinControl;MyTag:integer);
  procedure SCSHDataNew(ADOQueryTmp:TADOQuery;mParent:TWinControl;FTag:Integer);
  function RTSetSaveDataCDS(AdoQueryCmd:TADOQuery;Tv1:TcxGridDBTableView;
                         CDS_Sub:TClientDataSet;MyTable:string;MyTag:Integer):Boolean;
  function RTSetSaveDataCDSBand(AdoQueryCmd:TADOQuery;Tv1:TcxGridDBBandedTableView;
                         CDS_Sub:TClientDataSet;MyTable:string;MyTag:Integer):Boolean;
  procedure SCreateCDSOnly(SADOQry:TADOQuery; mClientDataset:TclientDataSet );
  procedure SInitCDSDataOnly(fromADO:TADOQuery;toCDS:TclientDataSet);
  procedure SelOKNo(CDS_MainSel:TClientDataSet;FSel:Boolean);
  function num2cengnum(strArabic:string):string;
  function num2ceng(strArabic:string):string;
  procedure RTSetsavedata(ADOQueryCmd:TADOQuery;MyTable:string;
                                       Myparent:TWinControl;MyTag:integer);
  procedure InitOrderColor(OrdMainId:string;Combox:TComboBox;FAdoQry:TADOQuery);
  procedure InitBCGangNo(OrdSubId:string;Combox:TComboBox;FAdoQry:TADOQuery);
  procedure InitRCGangNo(OrdSubId:string;Combox:TComboBox;FAdoQry:TADOQuery);
  procedure DelCDS(ClientDataSet1:TClientDataSet;ADOCmd:TADOQuery;DelSql:string);
  function  GetKw(ADOQueryTmp:TADOQuery;C_CodeName,C_Color:string):string;
  procedure InitCDSToCDS(fromADO:TclientDataSet;toCDS:TclientDataSet);
  procedure HJ(mClientDataset:TclientDataSet;Label1:TLabel;mfieldName:double);
  function ExportFtErpFile(mFileName:string;ADORead:TADOQuery):boolean;
  procedure GetFileInfo(mFile:string;var mfileSize:integer;var CreationTime:tdatetime;var WriteTime:tdatetime);
  procedure UpdateFileTime(FileName:string; CreationTime, LastAccessTime, LastWriteTime:TDateTime);
  procedure SelExportDataSel(FTv:TcxGridDBTableView;FClient:TClientDataSet;FTile:string);
  function CovFileDate(Fd:_FileTime):TDateTime;
  function RoundFloat(f: double; i: integer): double;
  procedure SSetEditDataCDSNew(yClientDataset:TclientDataSet; mClientDataset:TclientDataSet );
  procedure GetHTTP(FUrl:string);
  function WriteCloseWin(AdoCmd:TadoQuery;mCaption:string;formId:integer;mDllName:string):Boolean;

  procedure GetServerTime(ADOQueryTmp:TADOQuery);
implementation
uses U_DataLink,U_SelExportField,U_ColumnSet,U_ColumnBandSet,U_SelPrintFieldNew;


function WriteCloseWin(AdoCmd:TadoQuery;mCaption:string;formId:integer;mDllName:string):Boolean;
begin
  result:=false;
  try
    GetServerTime(AdoCmd);
    with  AdoCmd do
    begin
      close;
      sql.Clear ;
      sql.Add('select *');
      sql.Add('from SY_CloseFormInfo');
      sql.Add('where UserId='+quotedStr(DCode));
      sql.Add('and formCaption='+quotedStr(mCaption));
      Open;

      if Recordcount>0 then
      begin
        edit;
      end
      else
      begin
        append;
        fieldByName('UserId').Value :=DCode;
        fieldByName('formCaption').Value :=mCaption;
        fieldByName('formId').Value :=formId;
        fieldByName('dllfileName').Value :=mDllName;
      end ;
      fieldByName('filltime').Value :=DServerDate;
      post;
    end ;
    result:=true;
  except
    application.MessageBox('д�ر���Ϣʱ��������!','��ʾ��Ϣ',0); 
  end;
end;
//////////////////////////////////////////////////
  //��ȡ������ʱ��
///////////////////////////////////////////////////
procedure GetServerTime(ADOQueryTmp:TADOQuery);
begin
  //����������
  with ADOQueryTmp do
  begin
    close;
    sql.Clear;
    sql.Add('select getDate()as dt');
    open;
  end;
  DServerDate:=ADOQueryTmp.fieldByName('dt').AsDatetime;
end;
procedure GetHTTP(FUrl:string);
var
  IdHttp: TIdHTTP;
  ResponseStream : TStringStream; //������Ϣ
  ResponseStr : string;
begin
  //����IDHTTP�ؼ�
  IdHttp := TIdHTTP.Create(nil);
  IdHttp.HTTPOptions:=IdHttp.HTTPOptions+[hoKeepOrigProtocol];
  //TStringStream�������ڱ�����Ӧ��Ϣ
  ResponseStream := TStringStream.Create('');
  try
    try
      IdHttp.Get(FUrl,ResponseStream); //�����ַ
    except
      on e : Exception do
      begin
        ShowMessage(e.Message);
      end;
    end;
    //��ȡ��ҳ���ص���Ϣ
    ResponseStr := ResponseStream.DataString;
    //��ҳ�еĴ�������ʱ����Ҫ����UTF8����
    ResponseStr := UTF8Decode(ResponseStr);
    //ShowMessage(ResponseStr);
  finally
    IdHttp.Free;
    ResponseStream.Free;
  end;
end;
procedure SSetEditDataCDSNew(yClientDataset:TclientDataSet; mClientDataset:TclientDataSet );
var
  i:integer;
  k:integer;
  mfieldName:string;
begin
  if yClientDataset.IsEmpty then exit;
  K:=1;
  try
    mClientDataset.DisableControls;
    mClientDataset.Filtered:=false;
    with mClientDataset do
    begin
      Append;
      for i:=0 to yClientDataset.FieldCount-1 do
      begin
        mfieldName:=trim(yClientDataset.fields[i].FieldName);
        fieldbyname(mfieldName).Value:=yClientDataset.Fields[i].Value;
      end;
      post;
      inc(k);
    end;
    if not mClientDataset.IsEmpty then
    begin
      mClientDataset.First;
    end;
  finally
    mClientDataset.First;
    mClientDataset.EnableControls;
  end;
end;

procedure SelExportDataSel(FTv:TcxGridDBTableView;FClient:TClientDataSet;FTile:string);
var
   i,j:Integer;
   fsj:string;
begin
  if FClient.IsEmpty then Exit;
  try
    frmSelExportField:=TfrmSelExportField.Create(Application);
    with frmSelExportField do
    begin
      with frmSelExportField.ExpGrid do
      begin
       // ExpGrid.Columns.Clear;
        ExpGrid.ClearItems;
        frmSelExportField.IniName:=FTile;
        ExpGrid.OptionsView.Footer:=FTv.OptionsView.Footer;
        for i:=0 to FTv.ColumnCount-1 do
        begin
          //if FTv.Columns[i].Visible=True then
          begin
            ExpGrid.CreateColumn;
            j:=ExpGrid.ColumnCount-1;
            ExpGrid.Columns[j].Caption:=FTv.Columns[i].Caption;
            ExpGrid.Columns[i].Visible:=FTv.Columns[i].Visible;
            ExpGrid.Columns[j].DataBinding.FieldName:=FTv.Columns[i].DataBinding.FieldName;
            ExpGrid.Columns[j].Width:=FTv.Columns[i].Width;
            ExpGrid.Columns[i].Summary.FooterKind:=FTv.Columns[i].Summary.FooterKind;
          end;
        end;
      end;
      ExportDataSource.DataSet:=FClient;
      FClient.Open;
      if ShowModal=1 then
      begin

      end;
    end;
    frmSelExportField.Free;
  except

  end;
end;

function RoundFloat(f: double; i: integer): double;
var
  s: string;
  ef: Extended;
begin
  if f = 0 then
  begin
    Result := 0;
    Exit;
  end;
  s := '#.' + StringOfChar('0', i);
  if s = '#.' then
    s := '#';
  ef := StrToFloat(FloatToStr(f)); //��ֹ������������
  result := StrToFloat(FormatFloat(s, ef));
end;
///////////////////////////////////////////////////////
  //�������ܣ��ӷ����������ļ���
///////////////////////////////////////////////////////
function ExportFtErpFile(mFileName:string;ADORead:TADOQuery):boolean;
var
  Stream : TMemoryStream;
  ff:TADOBlobstream;
  mfileSize:integer;
  mCreationTime:TdateTime;
  mWriteTime:TdateTime;
  IsFileHas:boolean;
  mChildPath:string;
  mFilePath:string;
begin
  try
    result:=false;
    mChildPath:='';
    ///////////////////////////////////////////////
    //��ȡ�ļ����ص���·��
    with ADORead do
    begin
      close;
      sql.Clear ;
      sql.Add('select FilePath ');
      sql.Add('from RT_FileUpdate');
      sql.Add('where FileName='+quotedStr(mFileName));
      Open;
      if RecordCount>0 then
      begin
       // if not fieldByName('valid').AsBoolean then exit;
        if trim(fieldByName('FilePath').AsString)<>'' then
          mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
      end;
    end;
    //�����Ʒ����
    mFilePath:= ExtractFilePath(Paramstr(0))+mChildPath;
    IsFileHas:= FileExists(mFilePath+mFileName);
    if IsFileHas then
    begin
      //////////////////////////
      //��ȡ�ļ���Ϣ
      GetFileInfo(mFilePath+mFileName,mfileSize,mCreationTime,mWriteTime);
    end;
    //////////////////////////////////////////
    //�����ļ�
    if IsFileHas then
    begin
      with ADORead do
      begin
        close;
        sql.Clear ;
        sql.Add('select count(FileName) as cnt ');
        sql.Add('from RT_FileUpdate');
        sql.Add('where FileName='+quotedStr(mFileName));
       // sql.Add('and fileEditDate>'''+formatDateTime('yyyy-MM-dd hh:mm',mWriteTime)+'''');
        sql.Add(' and DATEDIFF(minute,'+ quotedStr(formatDateTime('yyyy-MM-dd hh:mm',mWriteTime))+',fileEditDate)>0');
        Open;


        //�Ƿ�����µ��ļ�
        if fieldByName('cnt').AsInteger>0 then
        begin
          close;
          sql.Clear ;
          sql.Add('select * ');
          sql.Add('from RT_FileUpdate');
          sql.Add('where FileName='+quotedStr(mFileName));

          Open;

          ff := TADOBlobstream.Create(fieldByName('Files') as TblobField, bmRead);
        end
        else
        begin
          exit;
        end;

       if trim(fieldByName('FilePath').AsString)<>'' then
          mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
      end;
    end
    //////////////////////////////////////
    //������
    else
    begin
      with ADORead do
      begin
        close;
        sql.Clear ;
        sql.Add('select * ');
        sql.Add('from RT_FileUpdate');
        sql.Add('where FileName='+quotedStr(mFileName));
        Open;

        if recordCount>0 then
        begin
          ff := TADOBlobstream.Create(fieldByName('Files') as TblobField, bmRead);
        end
        else
        begin
          exit;
        end;

       if trim(fieldByName('FilePath').AsString)<>'' then
          mChildPath:=trim(fieldByName('FilePath').AsString)+'\';
      end;

    end;
    
    if  ff<>nil then
    begin
      try
        mfileName:=trim(ADORead.fieldByName('FileName').asString);
        if not DirectoryExists(ExtractFileDir(mFilePath+mfileName)) then
        ForceDirectories(ExtractFileDir(mFilePath+mfileName));
        Stream:= TMemoryStream.Create ;
        //OleContainer1.SaveToStream(Stream);
        //ADOQuery1FileContent.SaveToFile('tmp'); //���ݴ�����ʱ�ļ�
        //OleContainer1.LoadFromFile('tmp'); //����ʱ�ļ��ж�ȡOLE����
        ff.SaveToStream(Stream);
        //OleContainer1.SaveToFile(ExtractFilePath(Paramstr(0))+mfielName)
        Stream.SaveToFile(mFilePath+mfileName); //+'\tmpFile\'

        //OleContainer1.SaveToFile('tmp');
      finally
        Stream.Free ;
      end;
    end;
    UpdateFileTime(mFilePath+mfileName,ADORead.fieldByName('FileCreateDate').AsDateTime,ADORead.fieldByName('FileEditDate').AsDateTime,ADORead.fieldByName('FileEditDate').AsDateTime);
    Result:=true;
  except
    application.MessageBox(pchar('��ȡ�ļ�'+mfileName+'ʧ��!'),'��ʾ��Ϣ',0);
  end;
end;
////////////////////////////////////////////////////////
  //
///////////////////////////////////////////////////////
procedure GetFileInfo(mFile:string;var mfileSize:integer;var CreationTime:tdatetime;var WriteTime:tdatetime);
var
  vSearchRec:   TSearchRec;
begin
   FindFirst(mFile,faAnyFile,vSearchRec);
   mfileSize:=vSearchRec.Size;
   CreationTime:=CovFileDate(vSearchRec.FindData.ftCreationTime);//����ʱ��
   //vSearchRec.FindData.ftLastAccessTime//����ʱ��
   WriteTime:=CovFileDate(vSearchRec.FindData.ftLastWriteTime);//�޸�ʱ��
   FindClose(vSearchRec);
end;

procedure GetFileEditTime(mFile:string;var editTime:tdatetime);
var
  vSearchRec:   TSearchRec;
begin
   FindFirst(mFile,faAnyFile,vSearchRec);
   //mfileSize:=vSearchRec.Size;
 //  CreationTime:=CovFileDate(vSearchRec.FindData.ftCreationTime);//����ʱ��
   //vSearchRec.FindData.ftLastAccessTime//����ʱ��
   editTime:=CovFileDate(vSearchRec.FindData.ftLastWriteTime);//�޸�ʱ��
   FindClose(vSearchRec);
end;
///////////////////////////////////////////////
  //
/////////////////////////////////////////////
function CovFileDate(Fd:_FileTime):TDateTime;
var 
  Tct:_SystemTime;
  Temp:_FileTime;
begin 
  FileTimeToLocalFileTime(Fd,Temp);
  FileTimeToSystemTime(Temp,Tct);
  CovFileDate:=SystemTimeToDateTime(Tct);
end;
procedure UpdateFileTime(FileName:string; CreationTime, LastAccessTime, LastWriteTime:TDateTime);
var
  FileHnd : Integer;
  SysTime : TSystemTime;
  tTzi: TTimezoneInformation;
  FCreationTime, FLastAccessTime, FLastWriteTime: TFileTime;
begin
  GetTimezoneInformation(tTzi) ;
  CreationTime := CreationTime+Ttzi.Bias/1440;
  DateTimeToSystemTime(CreationTime,SysTime);
  SystemTimeToFileTime(SysTime,FCreationTime);
  //LastAccessTime := LastAccessTime + Ttzi.Bias/1440;
  //DateTimeToSystemTime(LastAccessTime,SysTime);
  //SystemTimeToFileTime(SysTime,FLastAccessTime);
  LastWriteTime := LastWriteTime + Ttzi.Bias/1440;
  DateTimeToSystemTime(LastWriteTime,SysTime);
  SystemTimeToFileTime(SysTime,FLastWriteTime);
  try
    FileHnd := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
    SetFileTime(FileHnd, @FCreationTime, nil, @FLastWriteTime);
  finally
    FileClose(FileHnd);
  end;
end;
procedure HJ(mClientDataset:TclientDataSet;Label1:TLabel;mfieldName:double);
begin
  if mClientDataset.IsEmpty then exit;
  with mClientDataset do
  begin
    if fieldbyname('Ssel').AsBoolean=true then
    Label1.Caption:=currtostr(strtoCurr(Label1.Caption)+mfieldName)
    else
    Label1.Caption:=currtostr(strtoCurr(Label1.Caption)-mfieldName);
  end;
end;
procedure InitCDSToCDS(fromADO:TclientDataSet;toCDS:TclientDataSet);
var
  i:integer;
begin
  try
      with toCDS do
      begin
        Append;
        for i:=0 to fromADO.FieldCount-1 do
        begin
          fields[i].value:=fromADO.Fields[i].Value ;
        end;
        Post;
      end;
  finally
  end;
end;
function  GetKw(ADOQueryTmp:TADOQuery;C_CodeName,C_Color:string):string;
var
  kw:string;
begin
  kw:='';
  try
    with ADOQueryTmp do
    begin
      close;
      SQL.Clear;
      sql.add(' select zdyCode from KH_Zdy_Attachment ');
      sql.add(' where defstr1='+quotedstr(trim(C_CodeName)));
      sql.add(' and defstr2='+quotedstr(trim(C_Color)));
      sql.add(' and Type=''CPKW'' ');
      sql.add(' and isnull(DEFstr3,'''')=''�̶���'' ');
      open;
      IF not isEmpty then
      kw:=trim(fieldbyname('zdyCode').asstring);
    end;
    result:=kw;
  except
    result:=kw;
  end;

end;

///////////////////ȡ����Int���ֶ����ֵ///////////////////////////////////////
function SGetMaxId(AdoQueryTemp:TADOQuery;MyTable:string;MyField:string;Var MaxId:Integer):Boolean;
begin
  try
    with AdoQueryTemp do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select Max('+MyField+')+1 MaxId from '+MyTable);
      Open;
    end;
    with AdoQueryTemp do
    begin
      if (Trim(FieldByName('MaxId').AsString)='') or
         (Trim(FieldByName('MaxId').AsString)=NULL) then
        MaxId:=1
      else
        MaxId:=(fieldbyname('MaxId').AsInteger);
      Close;
      SQL.Clear;
    end;
    Result:=True;
  except
    Result:=False;
    Application.MessageBox('ȡ���ֵʧ�ܣ�','��ʾ',0);
  end;
end;
procedure InitBCGangNo(OrdSubId:string;Combox:TComboBox;FAdoQry:TADOQuery);
var
  fsj:string;
begin
  fsj:='select distinct(MJstr4) Code from WFB_MJJY '+
       ' where Subid='''+Trim(OrdSubId)+'''';
  with FAdoQry do
  begin
    Close;
    sql.Clear;
    sql.Add(fsj);
    Open;
  end;
  Combox.Clear;
  with FAdoQry do
  begin
    First;
    while not Eof do
    begin
      Combox.Items.Add(Trim(FAdoQry.fieldbyname('Code').AsString));
      Next;
    end;
  end;
  Combox.Items.Add('');
end;
procedure InitRCGangNo(OrdSubId:string;Combox:TComboBox;FAdoQry:TADOQuery);
var
  fsj:string;
begin
  fsj:='select distinct(gangno) Code from JYOrder_Sub_AnPai '+
       ' where Subid='''+Trim(OrdSubId)+'''';
  with FAdoQry do
  begin
    Close;
    sql.Clear;
    sql.Add(fsj);
    Open;
  end;
  Combox.Clear;
  with FAdoQry do
  begin
    First;
    while not Eof do
    begin
      Combox.Items.Add(Trim(FAdoQry.fieldbyname('Code').AsString));
      Next;
    end;
  end;
  Combox.Items.Add('');
end;
procedure InitOrderColor(OrdMainId:string;Combox:TComboBox;FAdoQry:TADOQuery);
var
  fsj:string;
begin
  fsj:='select distinct(PRTColor) Code from JYOrder_Sub '+
       ' where Mainid='''+Trim(OrdMainId)+'''';
  with FAdoQry do
  begin
    Close;
    sql.Clear;
    sql.Add(fsj);
    Open;
  end;
  Combox.Clear;
  with FAdoQry do
  begin
    First;
    while not Eof do
    begin
      Combox.Items.Add(Trim(FAdoQry.fieldbyname('Code').AsString));
      Next;
    end;
  end;
  Combox.Items.Add('');
end;
////�Զ����ӡ
procedure SelPrintData(FTv:TcxGridDBTableView;FAdoQry:TADOQuery;FTitle:string
                         ;FLTitle:string;FRTile:string);
var
   i,j,k,KK:Integer;
   fsj:string;
   FOrder,fcolumnName:string;
begin
  if FAdoQry.IsEmpty then Exit;
  try
    frmSelPrintFieldNew:=TfrmSelPrintFieldNew.Create(Application);
    with frmSelPrintFieldNew do
    begin
      with frmSelPrintFieldNew.PrnGrid do
      begin
        PrnGrid.Columns.Clear;
        frmSelPrintFieldNew.IniName:=FTitle;
        for i:=0 to FTv.ColumnCount-1 do
        begin
          if FTv.Columns[i].Visible=True then
          begin
            PrnGrid.Columns.Add;
            j:=PrnGrid.Columns.Count-1;
            PrnGrid.Columns[j].Title.Caption:=FTv.Columns[i].Caption;
            PrnGrid.Columns[j].FieldName:=FTv.Columns[i].DataBinding.FieldName;
            PrnGrid.Columns[j].Width:=FTv.Columns[i].Width;
            if FTv.Columns[i].SortOrder=soAscending then
            begin
              FOrder:=' '+FTv.Columns[i].DataBinding.FieldName+'  ';
            end else
            if FTv.Columns[i].SortOrder=soDescending then
            begin
              FOrder:=' '+FTv.Columns[i].DataBinding.FieldName+' DESC';
            end;
          end;
        end;
      end;
      FAdoQry.Sort:=FOrder;
      frmSelPrintFieldNew.RMPrintDBGrid1.PageCaptionMsg.TitleMemo.Add(FTitle);
      frmSelPrintFieldNew.RMPrintDBGrid1.PageCaptionMsg.CaptionMsg.LeftMemo.Add(FLTitle);
      frmSelPrintFieldNew.RMPrintDBGrid1.PageCaptionMsg.CaptionMsg.RightMemo.Add(FRTile);
      SCreatecds20(FAdoQry,frmSelPrintFieldNew.ClientDataSet1);
      SInitCDSData20(FAdoQry,frmSelPrintFieldNew.ClientDataSet1);
      if FTv.OptionsView.Footer=True then
      begin
        if FTv.DataController.Summary.FooterSummaryItems.Count>0 then
        begin
          frmSelPrintFieldNew.ClientDataSet1.Append;
          //frmSelPrintFieldNew.ClientDataSet1.FieldByName('Sindex').Value:=frmSelPrintFieldNew.ClientDataSet1.RecNo+1;
          frmSelPrintFieldNew.ClientDataSet1.Post;
          KK:=0;
          for i:=0 to FTv.ColumnCount-1 do
          begin
            if FTv.Columns[i].Visible=False then  Continue;

            fcolumnName:=FTv.Columns[i].Name;
            if FTv.Columns[i].Summary.FooterKind<>sknone then
            begin
              for k:=0 to FTv.DataController.Summary.FooterSummaryItems.Count-1 do
              begin
                if TcxGridDBTableSummaryItem(FTv.DataController.Summary.FooterSummaryItems.Items[k]).Column.Name=fcolumnName then
                begin
                  frmSelPrintFieldNew.ClientDataSet1.edit;
                  frmSelPrintFieldNew.ClientDataSet1.FieldByName(FTv.Columns[i].DataBinding.FieldName).Value:=
                                                             FTv.DataController.Summary.FooterSummaryValues[k];
                  frmSelPrintFieldNew.ClientDataSet1.Post;
                end;
              end;
            end;
          end;
        end;
      end;
      if ShowModal=1 then
      begin

      end;
    end;

  finally
    frmSelPrintFieldNew.Free;
  end;
end;
////�Զ����ӡ
procedure SelPrintDataMore(FTv:TcxGridDBTableView;FAdoQry:TADOQuery;FTitle:string
                         ;FLTitle:string;FRTile:string;FKK:Integer;FiniName:string);
var
   i,j,k,KK:Integer;
   fsj:string;
   FOrder,fcolumnName:string;
begin
  if FAdoQry.IsEmpty then Exit;
  try
    frmSelPrintFieldNew:=TfrmSelPrintFieldNew.Create(Application);
    with frmSelPrintFieldNew do
    begin
      with frmSelPrintFieldNew.PrnGrid do
      begin
        PrnGrid.Columns.Clear;
        frmSelPrintFieldNew.IniName:=FiniName;
        for i:=0 to FTv.ColumnCount-1 do
        begin
          if FTv.Columns[i].Visible=True then
          begin
            PrnGrid.Columns.Add;
            j:=PrnGrid.Columns.Count-1;
            PrnGrid.Columns[j].Title.Caption:=FTv.Columns[i].Caption;
            PrnGrid.Columns[j].FieldName:=FTv.Columns[i].DataBinding.FieldName;
            PrnGrid.Columns[j].Width:=FTv.Columns[i].Width;
            if FTv.Columns[i].SortOrder=soAscending then
            begin
              FOrder:=' '+FTv.Columns[i].DataBinding.FieldName+'  ';
            end else
            if FTv.Columns[i].SortOrder=soDescending then
            begin
              FOrder:=' '+FTv.Columns[i].DataBinding.FieldName+' DESC';
            end;
          end;
        end;
      end;
      FAdoQry.Sort:=FOrder;
      frmSelPrintFieldNew.RMPrintDBGrid1.PageCaptionMsg.TitleMemo.Add(FTitle);
      frmSelPrintFieldNew.RMPrintDBGrid1.PageCaptionMsg.CaptionMsg.LeftMemo.Add(FLTitle);
      frmSelPrintFieldNew.RMPrintDBGrid1.PageCaptionMsg.CaptionMsg.RightMemo.Add(FRTile);
      
      SCreatecds20(FAdoQry,frmSelPrintFieldNew.ClientDataSet1);
      SInitCDSData20(FAdoQry,frmSelPrintFieldNew.ClientDataSet1);
      if FTv.OptionsView.Footer=True then
      begin
        if FTv.DataController.Summary.FooterSummaryItems.Count>0 then
        begin
          frmSelPrintFieldNew.ClientDataSet1.Append;

          frmSelPrintFieldNew.ClientDataSet1.Post;
          KK:=0;
          for i:=0 to FTv.ColumnCount-1 do
          begin


            fcolumnName:=FTv.Columns[i].Name;
            if FTv.Columns[i].Summary.FooterKind<>sknone then
            begin
              if KK=0 then
              begin
                frmSelPrintFieldNew.ClientDataSet1.edit;
                frmSelPrintFieldNew.ClientDataSet1.FieldByName(FTv.Columns[i-FKK].DataBinding.FilterFieldName).Value:='Total';
                frmSelPrintFieldNew.ClientDataSet1.Post;
                KK:=99;
              end;
              for k:=0 to FTv.DataController.Summary.FooterSummaryItems.Count-1 do
              begin
                if TcxGridDBTableSummaryItem(FTv.DataController.Summary.FooterSummaryItems.Items[k]).Column.Name=fcolumnName then
                begin
                  frmSelPrintFieldNew.ClientDataSet1.edit;
                  frmSelPrintFieldNew.ClientDataSet1.FieldByName(FTv.Columns[i].DataBinding.FieldName).Value:=
                                                             FTv.DataController.Summary.FooterSummaryValues[k];
                  frmSelPrintFieldNew.ClientDataSet1.Post;
                end;
              end;
            end;
          end;
        end;
      end;
      if ShowModal=1 then
      begin

      end;
    end;

  finally
    frmSelPrintFieldNew.Free;
  end;
end;
///////////////////////�жϱ��������Ƿ��ظ�///////////////////////////////////
function SIsRepeated(AdoQueryTemp:TADOQuery;MyTable:string;MyField:string;MyCode:String):Boolean;
begin
  try
    Result:=False;
    with AdoQueryTemp do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from '+MyTable+' where '+MyField+'='''+Trim(MyCode)+'''');
      Open;
      if IsEmpty then Result:=True;
      Close;
      SQL.Clear;
    end;
  except
    Result:=False;
    Application.MessageBox('�������ֶ�������','��ʾ',0);
  end;
end;
////////////////////����ClientDataSet�ı�����Ϣ/////////////////////////////
function SSetSaveDataCDS(AdoQueryCmd:TADOQuery;Tv1:TcxGridDBTableView;
                         CDS_Sub:TClientDataSet;MyTable:string;MyTag:Integer):Boolean;
var
  i:Integer;
begin
  try
    Result:=False;
    for i:=0 to Tv1.ColumnCount-1 do
    begin
      if Tv1.Columns[i].Tag=MyTag then
      begin
        if Trim(CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).AsString)<>'' then
        begin
          AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=
                         CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).Value;
        end;

      end;
    end;
    Result:=True;
  except
    Result:=False;
    Application.MessageBox('����Cds������Ϣʧ��!','��ʾ',0);
  end;
end;
////////////////////����ClientDataSet�ı�����Ϣ/////////////////////////////
function SSetSaveDataCDSNew(AdoQueryCmd:TADOQuery;Tv1:TcxGridDBTableView;
                         CDS_Sub:TClientDataSet;MyTable:string;MyTag:Integer):Boolean;
var
  i:Integer;
begin
  try
    Result:=False;
    for i:=0 to Tv1.ColumnCount-1 do
    begin
      if Tv1.Columns[i].Tag=MyTag then
      begin
        if Tv1.Columns[i].Visible=True then
        begin
          if Trim(Tv1.Columns[i].Summary.GroupFooterFormat)<>'1' then
          begin
            if Trim(CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).AsString)<>'' then
            begin
              AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=
                             CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).Value;
            end
            else
            begin
              AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=null;
            end;
          end;
          if Trim(Tv1.Columns[i].Summary.GroupFormat)<>'' then
          begin
            if Trim(CDS_Sub.fieldbyname(Tv1.Columns[i].Summary.GroupFormat).AsString)<>'' then
            begin
              AdoQueryCmd.FieldByName(Tv1.Columns[i].Summary.GroupFormat).Value:=
                             CDS_Sub.fieldbyname(Tv1.Columns[i].Summary.GroupFormat).Value;
            end;{ else
            begin
              AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=null;
            end; }
          end;
        end;



      end;
    end;
    Result:=True;
  except
    Result:=False;
    Application.MessageBox('����Cds������Ϣʧ��!','��ʾ',0);
  end;
end;
function RTSetSaveDataCDS(AdoQueryCmd:TADOQuery;Tv1:TcxGridDBTableView;
                         CDS_Sub:TClientDataSet;MyTable:string;MyTag:Integer):Boolean;
var
  i:Integer;
begin
  try
    Result:=False;
    for i:=0 to Tv1.ColumnCount-1 do
    begin
      if Tv1.Columns[i].Tag=MyTag then
      begin
        IF  trim(Tv1.Columns[i].DataBinding.FieldName)<>'' then
        begin
          if Trim(CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).AsString)<>'' then
          begin
            AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=
                           CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).Value;
          end
          else
          begin
            if Trim(Tv1.Columns[i].Summary.GroupFooterFormat)='0' then
            begin
              AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=0;
            end else
            begin
              AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=null;
            end;
          end;
        end;

      end;
    end;
    Result:=True;
  except
    Result:=False;
    Application.MessageBox('����Cds������Ϣʧ��!','��ʾ',0);
  end;
end;
function RTSetSaveDataCDSBand(AdoQueryCmd:TADOQuery;Tv1:TcxGridDBBandedTableView;
                         CDS_Sub:TClientDataSet;MyTable:string;MyTag:Integer):Boolean;
var
  i:Integer;
begin
  try
    Result:=False;
    for i:=0 to Tv1.ColumnCount-1 do
    begin
      if Tv1.Columns[i].Tag=MyTag then
      begin

        begin
          if Trim(CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).AsString)<>'' then
          begin
            AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=
                           CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).Value;
          end else
          begin
            if Trim(Tv1.Columns[i].Summary.GroupFooterFormat)<>'' then
              AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=0
            else
              AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=Trim(Tv1.Columns[i].Summary.GroupFooterFormat);
          end;

        end;

      end;
    end;
    Result:=True;
  except
    Result:=False;
    Application.MessageBox('����Cds������Ϣʧ��!','��ʾ',0);
  end;
end;

function SSetSaveDataCDSBandNew(AdoQueryCmd:TADOQuery;Tv1:TcxGridDBBandedTableView;
                         CDS_Sub:TClientDataSet;MyTable:string;MyTag:Integer):Boolean;
var
  i:Integer;
begin
  try
    Result:=False;
    for i:=0 to Tv1.ColumnCount-1 do
    begin
      if Tv1.Columns[i].Tag=MyTag then
      begin
        if Tv1.Columns[i].Visible=True then
        begin
          if Trim(Tv1.Columns[i].Summary.GroupFooterFormat)<>'1' then
          begin
            if Trim(CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).AsString)<>'' then
            begin
              AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=
                             CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).Value;
            end
            else
            begin
              AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=null;
            end;
          end;
          if Trim(Tv1.Columns[i].Summary.GroupFormat)<>'' then
          begin
            if Trim(CDS_Sub.fieldbyname(Tv1.Columns[i].Summary.GroupFormat).AsString)<>'' then
            begin
              AdoQueryCmd.FieldByName(Tv1.Columns[i].Summary.GroupFormat).Value:=
                             CDS_Sub.fieldbyname(Tv1.Columns[i].Summary.GroupFormat).Value;
            end;{ else
            begin
              AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=null;
            end; }
          end;
        end;



      end;
    end;
    Result:=True;
  except
    Result:=False;
    Application.MessageBox('����Cds������Ϣʧ��!','��ʾ',0);
  end;
end;
////////////////////����ClientDataSet�ı�����Ϣ/////////////////////////////
function SSetSaveDataCDS10(AdoQueryCmd:TADOQuery;Tv1:TcxGridDBBandedTableView;
                         CDS_Sub:TClientDataSet;MyTable:string;MyTag:Integer):Boolean;
var
  i:Integer;
begin
  try
    Result:=False;
    for i:=0 to Tv1.ColumnCount-1 do
    begin
      if Tv1.Columns[i].Tag=MyTag then
      begin
        if Trim(CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).AsString)<>'' then
          AdoQueryCmd.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=
                         CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).Value;
      end;
    end;
    Result:=True;
  except
    Result:=False;
    Application.MessageBox('����Cds������Ϣʧ��!','��ʾ',0);
  end;
end;
 ///////////////////////////����������//////////////////////////////////////
function SGetServerDate(ADOQueryTmp:TADOQuery):TdateTime;
var
  FSetting : TFormatSettings;
begin
  try
  FSetting := TFormatSettings.Create(LOCALE_USER_DEFAULT);
  FSetting.ShortDateFormat:='yyyy-MM-dd';
  FSetting.DateSeparator:='-';
    with ADOQueryTmp do
    begin
      close;
      sql.Clear;
      sql.Add('select getDate()as dt');
      open;
      result:=StrToDateTime(formatdatetime('yyyy-MM-dd',fieldByName('dt').AsDatetime),FSetting);
      close;
      SQL.Clear;
    end;
  except
    application.MessageBox('��ȡ��ǰ���ڷ�������!','��ʾ��Ϣ',0); 
  end;

end;
function SGetServerDateTime(ADOQueryTmp:TADOQuery):TdateTime;
begin
  try

    with ADOQueryTmp do
    begin
      close;
      sql.Clear;
      sql.Add('select getDate()as dt');
      open;
      result:=fieldByName('dt').AsDatetime;
      close;
      SQL.Clear;
    end;
  except
    application.MessageBox('��ȡ��ǰ���ڷ�������!','��ʾ��Ϣ',0); 
  end;

end;
function SGetServerDate10(ADOQueryTmp:TADOQuery):TdateTime;
var
  FSetting : TFormatSettings;
begin
  try
    FSetting := TFormatSettings.Create(LOCALE_USER_DEFAULT);
    FSetting.ShortDateFormat:='yyyy-MM-dd';
    FSetting.DateSeparator:='-';
    with ADOQueryTmp do
    begin
      close;
      sql.Clear;
      sql.Add('select getDate()as dt');
      open;
      result:=StrToDateTime(formatdatetime('yyyy-MM-dd',fieldByName('dt').AsDatetime),FSetting);
      close;
      SQL.Clear;
    end;
  except
    application.MessageBox('��ȡ��ǰ���ڷ�������!','��ʾ��Ϣ',0);
  end;

end;

/////////////////////////////////////////////////////
//��������ʱ�ֶθ�ֵ
/////////////////////////////////////////////////////
procedure SSetsavedata(ADOQueryCmd:TADOQuery;MyTable:string;
                                       Myparent:TWinControl;MyTag:integer);
var
  i:Integer;
begin
  with Myparent do
  begin
    for i:=0 to ControlCount-1 do
    begin
      if Controls[i].Tag=MyTag then
      begin
        if Controls[i] is TEdit then
        begin
          if Trim(TEdit(Controls[i]).Text)<>'' then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TEdit(Controls[i]).Text);
        end else
        if Controls[i] is TRichEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TRichEdit(Controls[i]).Text;
        end else
        if Controls[i] is TcxRichEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TcxRichEdit(Controls[i]).Text;
        end else
        if Controls[i] is TMemo then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TMemo(Controls[i]).Text;
        end;
        if Controls[i] is TRTComboBox then
        begin
          if (TRTComboBox(Controls[i]).Text)<>'' then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TRTComboBox(Controls[i]).Item2);
        end else
        if Controls[i] is TComboBox then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TComboBox(Controls[i]).Text);
        end else
        if Controls[i] is TCheckBox then
        begin
          if TCheckBox(Controls[i]).Checked=True then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=1
          else
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=0;
        end else
        if Controls[i] is TDateTimePicker then
        begin
          if TDateTimePicker(Controls[i]).ShowCheckbox then
          begin
            if TDateTimePicker(Controls[i]).Checked then
              ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TDateTimePicker(Controls[i]).DateTime;
          end else
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TDateTimePicker(Controls[i]).DateTime;
        end else
        if Controls[i] is TBtnEditA then
        begin
          if TBtnEditA(Controls[i]).Hint='����' then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TBtnEditA(Controls[i]).Text)
          else
           ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TBtnEditA(Controls[i]).TxtCode);
        end  else
        if Controls[i] is TBtnEditC then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TBtnEditC(Controls[i]).TxtCode);
        end else
        if Controls[i] is TcxTimeEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TcxTimeEdit(Controls[i]).Text);
        end;
      end;
    end;
  end;
end;
procedure SSetsavedataNew(ADOQueryCmd:TADOQuery;MyTable:string;
                                       Myparent:TWinControl;MyTag:integer);
var
  i:Integer;
begin
  with Myparent do
  begin
    for i:=0 to ControlCount-1 do
    begin
      if Controls[i].Tag=MyTag then
      begin
        if Controls[i] is TEdit then
        begin
          if Trim(TEdit(Controls[i]).Text)<>'' then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TEdit(Controls[i]).Text);
        end else
        if Controls[i] is TRichEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TRichEdit(Controls[i]).Text;
        end else
        if Controls[i] is TMemo then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TMemo(Controls[i]).Text;
        end;
        if Controls[i] is TRTComboBox then
        begin
          if (TRTComboBox(Controls[i]).Text)<>'' then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TRTComboBox(Controls[i]).Item2);
        end else
        if Controls[i] is TComboBox then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TComboBox(Controls[i]).Text);
        end else
        if Controls[i] is TDateTimePicker then
        begin
          if TDateTimePicker(Controls[i]).ShowCheckbox then
          begin
            if TDateTimePicker(Controls[i]).Checked then
              ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TDateTimePicker(Controls[i]).DateTime;
          end else
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TDateTimePicker(Controls[i]).DateTime;
        end else
        if Controls[i] is TBtnEditA then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TBtnEditA(Controls[i]).TxtCode);
          if (TBtnEditA(Controls[i]).Hint<>'') and (TBtnEditA(Controls[i]).ParentCtl3D=True) then
            ADOQueryCmd.FieldByName(Trim(TBtnEditA(Controls[i]).Hint)).Value:=Trim(TBtnEditA(Controls[i]).Text);
        end  else
        if Controls[i] is TBtnEditC then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TBtnEditC(Controls[i]).TxtCode);
          //if (TBtnEditC(Controls[i]).Hint<>'') and (TBtnEditC(Controls[i]).ParentCtl3D=True)then
            //ADOQueryCmd.FieldByName(Trim(TBtnEditC(Controls[i]).Hint)).Value:=Trim(TBtnEditC(Controls[i]).Text);
        end else
        if Controls[i] is TcxTimeEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TcxTimeEdit(Controls[i]).Text);
        end;
      end;
    end;
  end;
end;
procedure RTSetsavedata(ADOQueryCmd:TADOQuery;MyTable:string;
                                       Myparent:TWinControl;MyTag:integer);
var
  i:Integer;
begin
  with Myparent do
  begin
    for i:=0 to ControlCount-1 do
    begin
      if Controls[i].Tag=MyTag then
      begin
        if Controls[i] is TEdit then
        begin
          if Trim(TEdit(Controls[i]).Text)<>'' then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TEdit(Controls[i]).Text);
        end else
        if Controls[i] is TRichEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TRichEdit(Controls[i]).Text;
        end else
        if Controls[i] is TMemo then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TMemo(Controls[i]).Text;
        end;
        if Controls[i] is TRTComboBox then
        begin
          if (TRTComboBox(Controls[i]).Text)<>'' then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TRTComboBox(Controls[i]).Item2);
        end else
        if Controls[i] is TComboBox then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TComboBox(Controls[i]).Text);
        end else
        if Controls[i] is TDateTimePicker then
        begin
          if TDateTimePicker(Controls[i]).ShowCheckbox then
          begin
            if TDateTimePicker(Controls[i]).Checked then
              ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TDateTimePicker(Controls[i]).DateTime;
          end else
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TDateTimePicker(Controls[i]).DateTime;
        end else
        if Controls[i] is TBtnEditA then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TBtnEditA(Controls[i]).Text);
          if (TBtnEditA(Controls[i]).Hint<>'')  then
            ADOQueryCmd.FieldByName(Trim(TBtnEditA(Controls[i]).Hint)).Value:=Trim(TBtnEditA(Controls[i]).TxtCode);
        end  else
        if Controls[i] is TBtnEditC then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TBtnEditC(Controls[i]).Text);
          if (TBtnEditC(Controls[i]).Hint<>'')  then
            ADOQueryCmd.FieldByName(Trim(TBtnEditC(Controls[i]).Hint)).Value:=Trim(TBtnEditC(Controls[i]).TxtCode);
        end else
        if Controls[i] is TcxTimeEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TcxTimeEdit(Controls[i]).Text);
        end;
      end;
    end;
  end;
end;
procedure SSetsaveSql(ADOQueryCmd:TADOQuery;MyTable:string;
                                       Myparent:TWinControl;MyTag:integer);
var
  i:Integer;
  MCode:String;
begin
  with Myparent do
  begin
    for i:=0 to ControlCount-1 do
    begin
      if Controls[i].Tag=MyTag then
      begin
        if Controls[i] is TEdit then
        begin
          if Trim(TEdit(Controls[i]).Text)<>'' then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TEdit(Controls[i]).Text);
        end else
        if Controls[i] is TRichEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TRichEdit(Controls[i]).Text;
        end else
        if Controls[i] is TcxRichEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TcxRichEdit(Controls[i]).Text;
        end else
        if Controls[i] is TMemo then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TMemo(Controls[i]).Text;
        end else
        if Controls[i] is TRTComboBox then
        begin
          if (TRTComboBox(Controls[i]).Text)<>'' then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TRTComboBox(Controls[i]).Item2);
        end else
        if Controls[i] is TComboBox then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TComboBox(Controls[i]).Text);
        end else
        if Controls[i] is TDateTimePicker then
        begin
          if TDateTimePicker(Controls[i]).ShowCheckbox then
          begin
            if TDateTimePicker(Controls[i]).Checked then
              ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TDateTimePicker(Controls[i]).DateTime;
          end else
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TDateTimePicker(Controls[i]).DateTime;
        end else
        if Controls[i] is TBtnEditA then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TBtnEditA(Controls[i]).TxtCode);
          if (TBtnEditA(Controls[i]).Hint<>'') and (TBtnEditA(Controls[i]).ParentCtl3D=True) then
            ADOQueryCmd.FieldByName(Trim(TBtnEditA(Controls[i]).Hint)).Value:=Trim(TBtnEditA(Controls[i]).Text);
        end  else
        if Controls[i] is TBtnEditC then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TBtnEditC(Controls[i]).TxtCode);
          //if (TBtnEditC(Controls[i]).Hint<>'') and (TBtnEditC(Controls[i]).ParentCtl3D=True)then
            //ADOQueryCmd.FieldByName(Trim(TBtnEditC(Controls[i]).Hint)).Value:=Trim(TBtnEditC(Controls[i]).Text);
        end else
        if Controls[i] is TcxTimeEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TcxTimeEdit(Controls[i]).Text);
        end else
        if Controls[i] is TcxButtonEdit then
        begin
          if (TcxButtonEdit(Controls[i]).BeepOnEnter=True) or (TcxButtonEdit(Controls[i]).ParentShowHint=True) then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TcxButtonEdit(Controls[i]).Text);
          if TcxButtonEdit(Controls[i]).ParentShowHint=False then
          begin
            MCode:=Copy(Trim(Controls[i].Name),1,Length(Trim(Controls[i].Name))-4);
            ADOQueryCmd.FieldByName(MCode).Value:=Trim(TcxButtonEdit(Controls[i]).Hint);
          end;
        end;
      end;
    end;
  end;
end;
procedure SSetsaveSqlNew(ADOQueryCmd:TADOQuery;MyTable:string;
                                       Myparent:TWinControl;MyTag:integer);
var
  i:Integer;
  MCode:String;
begin
  with Myparent do
  begin
    for i:=0 to ControlCount-1 do
    begin
      if Controls[i].Tag=MyTag then
      begin
        if Controls[i] is TEdit then
        begin
          if Trim(TEdit(Controls[i]).Text)<>'' then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TEdit(Controls[i]).Text)
          else
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Null;
        end else
        if Controls[i] is TRichEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TRichEdit(Controls[i]).Text;
        end else
        if Controls[i] is TCheckBox then
        begin
          if TCheckBox(Controls[i]).Checked=True then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=1
          else
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=0;
        end else
        if Controls[i] is TcxRichEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TcxRichEdit(Controls[i]).Text;
        end else
        if Controls[i] is TMemo then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TMemo(Controls[i]).Text;
        end else
        if Controls[i] is TRTComboBox then
        begin
          if (TRTComboBox(Controls[i]).Text)<>'' then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TRTComboBox(Controls[i]).Item2);
        end else
        if Controls[i] is TComboBox then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TComboBox(Controls[i]).Text);
        end else
        if Controls[i] is TDateTimePicker then
        begin
          if TDateTimePicker(Controls[i]).ShowCheckbox then
          begin
            if TDateTimePicker(Controls[i]).Checked then
              ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TDateTimePicker(Controls[i]).DateTime
            else
              ADOQueryCmd.FieldByName(Controls[i].Name).Value:=null;
          end else
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=TDateTimePicker(Controls[i]).DateTime;
        end else
        if Controls[i] is TBtnEditA then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TBtnEditA(Controls[i]).Text);
          if (TBtnEditA(Controls[i]).Hint<>'')  then
            ADOQueryCmd.FieldByName(Trim(TBtnEditA(Controls[i]).Hint)).Value:=Trim(TBtnEditA(Controls[i]).TxtCode);
        end  else
        if Controls[i] is TBtnEditC then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TBtnEditC(Controls[i]).Text);
           if (TBtnEditC(Controls[i]).Hint<>'')  then
           begin
             if Pos('/',TBtnEditC(Controls[i]).Hint)>0 then
             begin

             end else
               ADOQueryCmd.FieldByName(Trim(TBtnEditC(Controls[i]).Hint)).Value:=Trim(TBtnEditC(Controls[i]).TxtCode);
           end;
        end else
        if Controls[i] is TcxTimeEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TcxTimeEdit(Controls[i]).Text);
        end else
        if Controls[i] is TcxCurrencyEdit then
        begin
          ADOQueryCmd.FieldByName(Controls[i].Name).Value:=strtofloatdef((TcxCurrencyEdit(Controls[i]).Text),0);
        end else
        if Controls[i] is TcxButtonEdit then
        begin
          if (TcxButtonEdit(Controls[i]).BeepOnEnter=True) or (TcxButtonEdit(Controls[i]).ParentShowHint=True) then
            ADOQueryCmd.FieldByName(Controls[i].Name).Value:=Trim(TcxButtonEdit(Controls[i]).Text);
          if TcxButtonEdit(Controls[i]).ParentShowHint=False then
          begin
            MCode:=Copy(Trim(Controls[i].Name),1,Length(Trim(Controls[i].Name))-4);
            ADOQueryCmd.FieldByName(MCode).Value:=Trim(TcxButtonEdit(Controls[i]).Hint);
          end;
        end;
      end;
    end;
  end;
end;
procedure SSetsavedata10(ADOQueryCmd:TADOQuery;MyTable:string;
                                       Myparent:TWinControl;MyTag:integer);
var
  i:Integer;
  FFName:string;
begin
  with Myparent do
  begin
    for i:=0 to ControlCount-1 do
    begin
      FFName:=Trim(Copy(Controls[i].Name,1,(Length(Controls[i].Name)-1)));
      if Controls[i].Tag=MyTag then
      begin
        if Controls[i] is TEdit then
        begin
          if Trim(TEdit(Controls[i]).Text)<>'' then
            ADOQueryCmd.FieldByName(FFName).Value:=Trim(TEdit(Controls[i]).Text);
        end else
        if Controls[i] is TRichEdit then
        begin
          ADOQueryCmd.FieldByName(FFName).Value:=TRichEdit(Controls[i]).Text;
        end else
        if Controls[i] is TMemo then
        begin
          ADOQueryCmd.FieldByName(FFName).Value:=TMemo(Controls[i]).Text;
        end;
        if Controls[i] is TRTComboBox then
        begin
          if (TRTComboBox(Controls[i]).Text)<>'' then
            ADOQueryCmd.FieldByName(FFName).Value:=Trim(TRTComboBox(Controls[i]).Item2);
        end else
        if Controls[i] is TComboBox then
        begin
          ADOQueryCmd.FieldByName(FFName).Value:=Trim(TComboBox(Controls[i]).Text);
        end else
        if Controls[i] is TDateTimePicker then
        begin
          if TDateTimePicker(Controls[i]).ShowCheckbox then
          begin
            if TDateTimePicker(Controls[i]).Checked then
              ADOQueryCmd.FieldByName(FFName).Value:=TDateTimePicker(Controls[i]).DateTime;
          end else
            ADOQueryCmd.FieldByName(FFName).Value:=TDateTimePicker(Controls[i]).DateTime;
        end else
        if Controls[i] is TBtnEditA then
        begin
          ADOQueryCmd.FieldByName(FFName).Value:=Trim(TBtnEditA(Controls[i]).TxtCode);
        end  else
        if Controls[i] is TBtnEditC then
        begin
          ADOQueryCmd.FieldByName(FFName).Value:=Trim(TBtnEditC(Controls[i]).TxtCode);
        end;
      end;
    end;
  end;
end;
/////////////////////////////////////////////////////
  //��������:��ʼ����������
/////////////////////////////////////////////////////
procedure SSetWinData(ADOQueryTmp:TADOQuery;mParent:TWinControl);
var
  i,idx:integer;
  mfield:string;
begin
  with ADOQueryTmp do
  begin
    if isEmpty then exit;
    with mParent  do
    begin
      for i:=0 to ControlCount-1 do
      begin
        if Controls[i] is TLabel then continue;
        if Controls[i].Tag >=999 then  continue;
        mfield:=Controls[i].Name;

        ///////////////////////////
        //EDIT
        if Controls[i] is TEdit then
        begin
         { if Trim(Controls[i].Hint)='��ֵ' then
            continue
          else }
          if Trim(fieldByName(mfield).AsString)<>'' then
            TEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end  else
        if Controls[i] is TRichEdit then
        begin
         { if Trim(Controls[i].Hint)='��ֵ' then
            continue
          else }
          if Trim(fieldByName(mfield).AsString)<>'' then
            TRichEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        //ftcombobox
        else if Controls[i] is TRTComboBox then
        begin
          if Controls[i].Tag =99 then
          begin
           idx:=TRTComboBox(Controls[i]).Items.IndexOf(trim(fieldByName(mfield).AsString));
           TComboBox(Controls[i]).ItemIndex:=idx;
          end
          else
          begin
           idx:=TRTComboBox(Controls[i]).IndexOfItem2(trim(fieldByName(mfield).AsString));
           TComboBox(Controls[i]).ItemIndex:=idx;
          end;
        end
        //combobox
        else if Controls[i] is TComboBox then
        begin
          if TComboBox(Controls[i]).Items.Count>0 then
          begin
            //idx:=getCombIdx(TComboBox(Controls[i]),i,trim(fieldByName(mfield).AsString));
            idx:=TComboBox(Controls[i]).Items.IndexOf(trim(fieldByName(mfield).AsString));
          end
          else
            idx:=-1;
          TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TBtnEditA then
        begin
          if TBtnEditA(Controls[i]).Tag=1 then
          begin
            TBtnEditA(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
            TBtnEditA(Controls[i]).text:= trim(fieldByName(mfield+'Name').AsString);
          end
          else
          begin
            TBtnEditA(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
            TBtnEditA(Controls[i]).text:= trim(fieldByName(mfield).AsString);
          end;
        end
        else if Controls[i] is TBtnEditC then
        begin
          TBtnEditC(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
          TBtnEditC(Controls[i]).text:= trim(fieldByName(mfield+'Name').AsString);
        end
        else if Controls[i] is TDateTimePicker then
        begin
          if IsEmpty  or fieldByName(mfield).IsNull then
          begin
            if TDateTimePicker(Controls[i]).Checked then
              TDateTimePicker(Controls[i]).Date:=strToDate('1990-01-01');
          end
          else
            TDateTimePicker(Controls[i]).Date:=fieldByName(mfield).AsDateTime;
        end
        else if Controls[i] is Tmemo then
        begin
            Tmemo(Controls[i]).Text :=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxRichEdit then
        begin
            TcxRichEdit(Controls[i]).Text :=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxDateEdit then
        begin
           if not IsEmpty  and not fieldByName(mfield).IsNull then
             TcxDateEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxTimeEdit then
        begin
           if not IsEmpty  and ( fieldByName(mfield).AsString<>'') then
             TcxTimeEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxCurrencyEdit then
        begin
          TcxCurrencyEdit(Controls[i]).Text:=fieldByName(mfield).AsString;
        end
        else if  Controls[i] is TcheckBox then
        begin
          TcheckBox(Controls[i]).Checked:=fieldByName(mfield).asBoolean;
        end;
      end; // end for
    end; // end with
  end;  //end for with

end;

procedure SSetWinData30(ADOQueryTmp:TADOQuery;mParent:TWinControl;FTag:Integer);
var
  i,idx:integer;
  mfield:string;
  ma:TA;
begin
  with ADOQueryTmp do
  begin
    if isEmpty then exit;
    with mParent  do
    begin
      for i:=0 to ControlCount-1 do
      begin
        if Controls[i] is TLabel then continue;
        if Controls[i].Tag<>FTag then  continue;
        mfield:=Controls[i].Name;

        ///////////////////////////
        //EDIT
        if Controls[i] is TEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        //ftcombobox
        else if Controls[i] is TRTComboBox then
        begin
           idx:=TRTComboBox(Controls[i]).IndexOfItem2(trim(fieldByName(mfield).AsString));
           TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TRichEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TRichEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxRichEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TcxRichEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        //combobox
        else if Controls[i] is TComboBox then
        begin
          if TComboBox(Controls[i]).Items.Count>0 then
          begin
            idx:=TComboBox(Controls[i]).Items.IndexOf(trim(fieldByName(mfield).AsString));
          end
          else
            idx:=-1;
          TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TBtnEditA then
        begin
          TBtnEditA(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
          if Trim(TBtnEditA(Controls[i]).Hint)<>'' then
            TBtnEditA(Controls[i]).text:= trim(fieldByName(Trim(TBtnEditA(Controls[i]).Hint)).AsString);
        end else if Controls[i] is TBtnEditC then
        begin
          TBtnEditC(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
          if Trim(TBtnEditC(Controls[i]).Hint)<>'' then
            TBtnEditC(Controls[i]).text:= trim(fieldByName(Trim(TBtnEditC(Controls[i]).Hint)).AsString);
        end
        else if Controls[i] is TDateTimePicker then
        begin
          if IsEmpty  or fieldByName(mfield).IsNull then
          begin
            if TDateTimePicker(Controls[i]).Checked then
              TDateTimePicker(Controls[i]).Date:=strToDate('1990-01-01');
          end
          else
            TDateTimePicker(Controls[i]).DateTime:=fieldByName(mfield).AsDateTime;
        end
        else if Controls[i] is Tmemo then
        begin
          Tmemo(Controls[i]).Text :=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxDateEdit then
        begin
           if not IsEmpty  and not fieldByName(mfield).IsNull then
             TcxDateEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxTimeEdit then
        begin
           if not IsEmpty  and ( fieldByName(mfield).AsString<>'') then
             TcxTimeEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxCurrencyEdit then
        begin
          TcxCurrencyEdit(Controls[i]).Text:=fieldByName(mfield).AsString;
        end
        else if  Controls[i] is TcheckBox then
        begin
          TcheckBox(Controls[i]).Checked:=fieldByName(mfield).asBoolean;
        end else if Controls[i] is TRichEdit then
        begin
          TRichEdit(Controls[i]).Text:=fieldbyname(mfield).AsString;
        end;
      end; // end for
    end; // end with
  end;  //end for with

end;
procedure SClearData(mParent:TWinControl;FTag:Integer);
var
  i,idx:integer;
begin
  with mParent  do
  begin
    for i:=0 to ControlCount-1 do
    begin
      if Controls[i] is TLabel then continue;
      if Controls[i].Tag<>FTag then  continue;
      if Controls[i] is TEdit then
      begin
          TEdit(Controls[i]).Text:='';
      end
      else if Controls[i] is TRichEdit then
      begin
          TRichEdit(Controls[i]).Text:='';
      end
      else if Controls[i] is TcxRichEdit then
      begin
          TcxRichEdit(Controls[i]).Text:='';
      end
      else if Controls[i] is TBtnEditC then
      begin
          TBtnEditC(Controls[i]).Text:='';
          TBtnEditC(Controls[i]).TxtCode:='';
      end
      else if Controls[i] is TBtnEditA then
      begin
          TBtnEditA(Controls[i]).Text:='';
          TBtnEditA(Controls[i]).TxtCode:='';
      end
      else if Controls[i] is TComboBox then
      begin
          idx:=-1;
        TComboBox(Controls[i]).ItemIndex:=idx;
      end
    end;
  end;
end;
procedure SCSHData(ADOQueryTmp:TADOQuery;mParent:TWinControl;FTag:Integer);
var
  i,idx:integer;
  mfield,mfieldCode:string;
begin
  with ADOQueryTmp do
  begin
    if isEmpty then exit;
    with mParent  do
    begin
      for i:=0 to ControlCount-1 do
      begin
        if Controls[i] is TLabel then continue;
        if Controls[i].Tag<>FTag then  continue;
        mfield:=Controls[i].Name;

        ///////////////////////////
        //EDIT
        if Controls[i] is TEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        //ftcombobox
        else if Controls[i] is TRTComboBox then
        begin
           idx:=TRTComboBox(Controls[i]).IndexOfItem2(trim(fieldByName(mfield).AsString));
           TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TRichEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TRichEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxRichEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TcxRichEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        //combobox
        else if Controls[i] is TComboBox then
        begin
          if TComboBox(Controls[i]).Items.Count>0 then
          begin
            idx:=TComboBox(Controls[i]).Items.IndexOf(trim(fieldByName(mfield).AsString));
          end
          else
            idx:=-1;
          TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TBtnEditA then
        begin
          TBtnEditA(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
          if Trim(TBtnEditA(Controls[i]).Hint)<>'' then
            TBtnEditA(Controls[i]).text:= trim(fieldByName(Trim(TBtnEditA(Controls[i]).Hint)).AsString);
        end else if Controls[i] is TBtnEditC then
        begin
          TBtnEditC(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
          if Trim(TBtnEditC(Controls[i]).Hint)<>'' then
            TBtnEditC(Controls[i]).text:= trim(fieldByName(Trim(TBtnEditC(Controls[i]).Hint)).AsString);
        end
        else if Controls[i] is TDateTimePicker then
        begin
          if Trim(fieldByName(mfield).AsString)='' then
          begin
            TDateTimePicker(Controls[i]).Checked:=False;
          end
          else
            TDateTimePicker(Controls[i]).DateTime:=fieldByName(mfield).AsDateTime;
        end
        else if Controls[i] is Tmemo then
        begin
          Tmemo(Controls[i]).Text :=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxDateEdit then
        begin
           if not IsEmpty  and not fieldByName(mfield).IsNull then
             TcxDateEdit(Controls[i]).date :=fieldByName(mfield).AsDateTime;
        end
        else if Controls[i] is TcxTimeEdit then
        begin
           if not IsEmpty  and ( fieldByName(mfield).AsString<>'') then
             TcxTimeEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxCurrencyEdit then
        begin
          TcxCurrencyEdit(Controls[i]).Text:=fieldByName(mfield).AsString;
        end
        else if  Controls[i] is TcheckBox then
        begin
          TcheckBox(Controls[i]).Checked:=fieldByName(mfield).asBoolean;
        end
        else if Controls[i] is TcxButtonEdit then
        begin
          TcxButtonEdit(Controls[i]).Text:=Trim(fieldbyname(mfield).AsString);
          if TcxButtonEdit(Controls[i]).ParentShowHint=False then
          begin
            mfieldCode:=Trim(Copy(mfield,1,Length(mfield)-4));
            TcxButtonEdit(Controls[i]).Hint:=Trim(fieldbyname(mfieldCode).AsString);
          end;
          
        end;
      end; // end for
    end; // end with
  end;  //end for with

end;
procedure SCSHDataNew(ADOQueryTmp:TADOQuery;mParent:TWinControl;FTag:Integer);
var
  i,idx:integer;
  mfield,mfieldCode:string;
begin
  with ADOQueryTmp do
  begin
    if isEmpty then exit;
    with mParent  do
    begin
      for i:=0 to ControlCount-1 do
      begin
        if Controls[i] is TLabel then continue;
        if Controls[i].Tag<>FTag then  continue;
        mfield:=Controls[i].Name;

        ///////////////////////////
        //EDIT
        if Controls[i] is TEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString)
          else
            TEdit(Controls[i]).Text:='';
        end
        //ftcombobox
        else if Controls[i] is TRTComboBox then
        begin
           idx:=TRTComboBox(Controls[i]).IndexOfItem2(trim(fieldByName(mfield).AsString));
           TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TRichEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TRichEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxRichEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TcxRichEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        //combobox
        else if Controls[i] is TComboBox then
        begin
          if TComboBox(Controls[i]).Items.Count>0 then
          begin
            idx:=TComboBox(Controls[i]).Items.IndexOf(trim(fieldByName(mfield).AsString));
          end
          else
            idx:=-1;
          TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TBtnEditA then
        begin
          TBtnEditA(Controls[i]).Text := trim(fieldByName(mfield).AsString);
          if Trim(TBtnEditA(Controls[i]).Hint)<>'' then
            TBtnEditA(Controls[i]).TxtCode:= trim(fieldByName(Trim(TBtnEditA(Controls[i]).Hint)).AsString);
        end else if Controls[i] is TBtnEditC then
        begin
          TBtnEditC(Controls[i]).Text := trim(fieldByName(mfield).AsString);
          if Trim(TBtnEditC(Controls[i]).Hint)<>'' then
          begin
            if Pos('/',TBtnEditC(Controls[i]).Hint)>0 then
            begin

            end else
              TBtnEditC(Controls[i]).TxtCode:= trim(fieldByName(Trim(TBtnEditC(Controls[i]).Hint)).AsString);
          end;
        end
        else if Controls[i] is TDateTimePicker then
        begin
          if Trim(fieldByName(mfield).AsString)='' then
          begin
            TDateTimePicker(Controls[i]).Checked:=False;
          end
          else
            TDateTimePicker(Controls[i]).DateTime:=fieldByName(mfield).AsDateTime;
        end
        else if Controls[i] is Tmemo then
        begin
          Tmemo(Controls[i]).Text :=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxDateEdit then
        begin
           if not IsEmpty  and not fieldByName(mfield).IsNull then
             TcxDateEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxTimeEdit then
        begin
           if not IsEmpty  and ( fieldByName(mfield).AsString<>'') then
             TcxTimeEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxCurrencyEdit then
        begin
          TcxCurrencyEdit(Controls[i]).Text:=fieldByName(mfield).AsString;
        end
        else if  Controls[i] is TcheckBox then
        begin
          if FieldByName(mfield).Value=null then
            TcheckBox(Controls[i]).Checked:=False
          else
            TcheckBox(Controls[i]).Checked:=fieldByName(mfield).asBoolean;
        end else if Controls[i] is TcxButtonEdit then
        begin
          TcxButtonEdit(Controls[i]).Text:=Trim(fieldbyname(mfield).AsString);
          if TcxButtonEdit(Controls[i]).ParentShowHint=False then
          begin
            mfieldCode:=Trim(Copy(mfield,1,Length(mfield)-4));
            TcxButtonEdit(Controls[i]).Hint:=Trim(fieldbyname(mfieldCode).AsString);
          end;
          
        end;
      end; // end for
    end; // end with
  end;  //end for with

end;
procedure SCSHDataCDS(CDS_Main:TClientDataSet;mParent:TWinControl;FTag:Integer);
var
  i,idx:integer;
  mfield,mfieldCode:string;
begin
  with CDS_Main do
  begin
    if isEmpty then exit;
    with mParent  do
    begin
      for i:=0 to ControlCount-1 do
      begin
        if Controls[i] is TLabel then continue;
        if Controls[i].Tag<>FTag then  continue;
        mfield:=Controls[i].Name;

        ///////////////////////////
        //EDIT
        if Controls[i] is TEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        //ftcombobox
        else if Controls[i] is TRTComboBox then
        begin
           idx:=TRTComboBox(Controls[i]).IndexOfItem2(trim(fieldByName(mfield).AsString));
           TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TRichEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TRichEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxRichEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TcxRichEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        //combobox
        else if Controls[i] is TComboBox then
        begin
          if TComboBox(Controls[i]).Items.Count>0 then
          begin
            idx:=TComboBox(Controls[i]).Items.IndexOf(trim(fieldByName(mfield).AsString));
          end
          else
            idx:=-1;
          TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TBtnEditA then
        begin
          TBtnEditA(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
          if Trim(TBtnEditA(Controls[i]).Hint)<>'' then
            TBtnEditA(Controls[i]).text:= trim(fieldByName(Trim(TBtnEditA(Controls[i]).Hint)).AsString);
        end else if Controls[i] is TBtnEditC then
        begin
          TBtnEditC(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
          if Trim(TBtnEditC(Controls[i]).Hint)<>'' then
            TBtnEditC(Controls[i]).text:= trim(fieldByName(Trim(TBtnEditC(Controls[i]).Hint)).AsString);
        end
        else if Controls[i] is TDateTimePicker then
        begin
          if Trim(fieldByName(mfield).AsString)='' then
          begin
            TDateTimePicker(Controls[i]).Checked:=False;
          end
          else
            TDateTimePicker(Controls[i]).DateTime:=fieldByName(mfield).AsDateTime;
        end
        else if Controls[i] is Tmemo then
        begin
          Tmemo(Controls[i]).Text :=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxDateEdit then
        begin
           if not IsEmpty  and not fieldByName(mfield).IsNull then
             TcxDateEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxTimeEdit then
        begin
           if not IsEmpty  and ( fieldByName(mfield).AsString<>'') then
             TcxTimeEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxCurrencyEdit then
        begin
          TcxCurrencyEdit(Controls[i]).Text:=fieldByName(mfield).AsString;
        end
        else if  Controls[i] is TcheckBox then
        begin
          TcheckBox(Controls[i]).Checked:=fieldByName(mfield).asBoolean;
        end else if Controls[i] is TcxButtonEdit then
        begin
          TcxButtonEdit(Controls[i]).Text:=Trim(fieldbyname(mfield).AsString);
          if TcxButtonEdit(Controls[i]).ParentShowHint=False then
          begin
            mfieldCode:=Trim(Copy(mfield,1,Length(mfield)-4));
            TcxButtonEdit(Controls[i]).Hint:=Trim(fieldbyname(mfieldCode).AsString);
          end;
          
        end;
      end; // end for
    end; // end with
  end;  //end for with

end;
procedure SCSHDataWTag(ADOQueryTmp:TADOQuery;mParent:TWinControl);
var
  i,idx:integer;
  mfield,mfieldCode:string;
  ma:TA;
begin
  with ADOQueryTmp do
  begin
    if isEmpty then exit;
    with mParent  do
    begin
      for i:=0 to ControlCount-1 do
      begin
        if Controls[i] is TLabel then continue;
        //if Controls[i].Tag<>FTag then  continue;
        mfield:=Controls[i].Name;

        ///////////////////////////
        //EDIT
        if Controls[i] is TEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        //ftcombobox
        else if Controls[i] is TRTComboBox then
        begin
           idx:=TRTComboBox(Controls[i]).IndexOfItem2(trim(fieldByName(mfield).AsString));
           TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TRichEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TRichEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxRichEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TcxRichEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        //combobox
        else if Controls[i] is TComboBox then
        begin
          if TComboBox(Controls[i]).Items.Count>0 then
          begin
            idx:=TComboBox(Controls[i]).Items.IndexOf(trim(fieldByName(mfield).AsString));
          end
          else
            idx:=-1;
          TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TBtnEditA then
        begin
          TBtnEditA(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
          if Trim(TBtnEditA(Controls[i]).Hint)<>'' then
            TBtnEditA(Controls[i]).text:= trim(fieldByName(Trim(TBtnEditA(Controls[i]).Hint)).AsString);
        end else if Controls[i] is TBtnEditC then
        begin
          TBtnEditC(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
          if Trim(TBtnEditC(Controls[i]).Hint)<>'' then
            TBtnEditC(Controls[i]).text:= trim(fieldByName(Trim(TBtnEditC(Controls[i]).Hint)).AsString);
        end
        else if Controls[i] is TDateTimePicker then
        begin
          if Trim(fieldByName(mfield).AsString)='' then
          begin
            TDateTimePicker(Controls[i]).Checked:=False;
          end
          else
            TDateTimePicker(Controls[i]).DateTime:=fieldByName(mfield).AsDateTime;
        end
        else if Controls[i] is Tmemo then
        begin
          Tmemo(Controls[i]).Text :=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxDateEdit then
        begin
           if not IsEmpty  and not fieldByName(mfield).IsNull then
             TcxDateEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxTimeEdit then
        begin
           if not IsEmpty  and ( fieldByName(mfield).AsString<>'') then
             TcxTimeEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxCurrencyEdit then
        begin
          TcxCurrencyEdit(Controls[i]).Text:=fieldByName(mfield).AsString;
        end
        else if  Controls[i] is TcheckBox then
        begin
          TcheckBox(Controls[i]).Checked:=fieldByName(mfield).asBoolean;
        end else if Controls[i] is TcxButtonEdit then
        begin
          TcxButtonEdit(Controls[i]).Text:=Trim(fieldbyname(mfield).AsString);
          if TcxButtonEdit(Controls[i]).ParentShowHint=False then
          begin
            mfieldCode:=Trim(Copy(mfield,1,Length(mfield)-4));
            TcxButtonEdit(Controls[i]).Hint:=Trim(fieldbyname(mfieldCode).AsString);
          end;
          
        end;
      end; // end for
    end; // end with
  end;  //end for with

end;

procedure SSetWinData10(ADOQueryTmp:TADOQuery;mParent:TWinControl);
var
  i,idx:integer;
  mfield:string;
  ma:TA;
begin
  with ADOQueryTmp do
  begin
    if isEmpty then exit;
    with mParent  do
    begin
      for i:=0 to ControlCount-1 do
      begin
        if Controls[i] is TLabel then continue;
        if Controls[i].Tag >=999 then  continue;
        //mfield:=Copy(Trim(Controls[i].Name),1,(Length(Trim(Controls[i].Name))-1));
        mfield:=Trim(Controls[i].Name);
        if Controls[i] is TEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        //ftcombobox
        else if Controls[i] is TRTComboBox then
        begin
          if Controls[i].Tag =99 then
          begin
           idx:=TRTComboBox(Controls[i]).Items.IndexOf(trim(fieldByName(mfield).AsString));
           TComboBox(Controls[i]).ItemIndex:=idx;
          end
          else
          begin
           idx:=TRTComboBox(Controls[i]).IndexOfItem2(trim(fieldByName(mfield).AsString));
           TComboBox(Controls[i]).ItemIndex:=idx;
          end;
        end
        //combobox
        else if Controls[i] is TComboBox then
        begin
          if TComboBox(Controls[i]).Items.Count>0 then
          begin
            idx:=TComboBox(Controls[i]).Items.IndexOf(trim(fieldByName(mfield).AsString));
          end
          else
            idx:=-1;
          TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TBtnEditA then
        begin
          if TBtnEditA(Controls[i]).Tag=1 then
          begin
            TBtnEditA(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
            TBtnEditA(Controls[i]).text:= trim(fieldByName(mfield+'Name').AsString);
          end
          else
          begin
            TBtnEditA(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
            TBtnEditA(Controls[i]).text:= trim(fieldByName(mfield).AsString);
          end;
        end
        else if Controls[i] is TBtnEditC then
        begin
          TBtnEditC(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
          TBtnEditC(Controls[i]).text:= trim(fieldByName(mfield+'Name').AsString);
        end
        else if Controls[i] is TDateTimePicker then
        begin
          if IsEmpty  or fieldByName(mfield).IsNull then
          begin
            if TDateTimePicker(Controls[i]).Checked then
              TDateTimePicker(Controls[i]).Date:=strToDate('1990-01-01');
          end
          else
            TDateTimePicker(Controls[i]).Date:=fieldByName(mfield).AsDateTime;
        end
        else if Controls[i] is Tmemo then
        begin
            Tmemo(Controls[i]).Text :=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxDateEdit then
        begin
           if not IsEmpty  and not fieldByName(mfield).IsNull then
             TcxDateEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxTimeEdit then
        begin
           if not IsEmpty  and ( fieldByName(mfield).AsString<>'') then
             TcxTimeEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxCurrencyEdit then
        begin
          TcxCurrencyEdit(Controls[i]).Text:=fieldByName(mfield).AsString;
        end
        else if  Controls[i] is TcheckBox then
        begin
          TcheckBox(Controls[i]).Checked:=fieldByName(mfield).asBoolean;
        end
        {else if Controls[i] is TcxLookupComboBox then
        begin
          TcxLookupComboBox(Controls[i]).EditValue:=fieldByName(mfield).AsString;
          TcxLookupComboBox(Controls[i]).EditingText:=fieldByName(mfield+'name').AsString;
        end};
      end; // end for
    end; // end with
  end;  //end for with

end;
procedure SSetWinData20(ADOQueryTmp:TADOQuery;mParent:TWinControl);
var
  i,idx:integer;
  mfield:string;
  ma:TA;
begin
  with ADOQueryTmp do
  begin
    if isEmpty then exit;
    with mParent  do
    begin
      for i:=0 to ControlCount-1 do
      begin
        if Controls[i] is TLabel then continue;
        if Controls[i].Tag >=999 then  continue;
        mfield:=Copy(Trim(Controls[i].Name),1,(Length(Trim(Controls[i].Name))-1));
        //mfield:=Trim(Controls[i].Name);
        if Controls[i] is TEdit then
        begin
          if Trim(fieldByName(mfield).AsString)<>'' then
            TEdit(Controls[i]).Text:=trim(fieldByName(mfield).AsString);
        end
        //ftcombobox
        else if Controls[i] is TRTComboBox then
        begin
          if Controls[i].Tag =99 then
          begin
           idx:=TRTComboBox(Controls[i]).Items.IndexOf(trim(fieldByName(mfield).AsString));
           TComboBox(Controls[i]).ItemIndex:=idx;
          end
          else
          begin
           idx:=TRTComboBox(Controls[i]).IndexOfItem2(trim(fieldByName(mfield).AsString));
           TComboBox(Controls[i]).ItemIndex:=idx;
          end;
        end
        //combobox
        else if Controls[i] is TComboBox then
        begin
          if TComboBox(Controls[i]).Items.Count>0 then
          begin
            idx:=TComboBox(Controls[i]).Items.IndexOf(trim(fieldByName(mfield).AsString));
          end
          else
            idx:=-1;
          TComboBox(Controls[i]).ItemIndex:=idx;
        end
        else if Controls[i] is TBtnEditA then
        begin
          if TBtnEditA(Controls[i]).Tag=1 then
          begin
            TBtnEditA(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
            TBtnEditA(Controls[i]).text:= trim(fieldByName(mfield+'Name').AsString);
          end
          else
          begin
            TBtnEditA(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
            TBtnEditA(Controls[i]).text:= trim(fieldByName(mfield).AsString);
          end;
        end
        else if Controls[i] is TBtnEditC then
        begin
          TBtnEditC(Controls[i]).TxtCode := trim(fieldByName(mfield).AsString);
          TBtnEditC(Controls[i]).text:= trim(fieldByName(mfield+'Name').AsString);
        end
        else if Controls[i] is TDateTimePicker then
        begin
          if IsEmpty  or fieldByName(mfield).IsNull then
          begin
            if TDateTimePicker(Controls[i]).Checked then
              TDateTimePicker(Controls[i]).Date:=strToDate('1990-01-01');
          end
          else
            TDateTimePicker(Controls[i]).Date:=fieldByName(mfield).AsDateTime;
        end
        else if Controls[i] is Tmemo then
        begin
            Tmemo(Controls[i]).Text :=trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxDateEdit then
        begin
           if not IsEmpty  and not fieldByName(mfield).IsNull then
             TcxDateEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxTimeEdit then
        begin
           if not IsEmpty  and ( fieldByName(mfield).AsString<>'') then
             TcxTimeEdit(Controls[i]).text :=fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxCurrencyEdit then
        begin
          TcxCurrencyEdit(Controls[i]).Text:=fieldByName(mfield).AsString;
        end
        else if  Controls[i] is TcheckBox then
        begin
          TcheckBox(Controls[i]).Checked:=fieldByName(mfield).asBoolean;
        end
        {else if Controls[i] is TcxLookupComboBox then
        begin
          TcxLookupComboBox(Controls[i]).EditValue:=fieldByName(mfield).AsString;
          TcxLookupComboBox(Controls[i]).EditingText:=fieldByName(mfield+'name').AsString;
        end};
      end; // end for
    end; // end with
  end;  //end for with

end;

//////////////////////////////////////////////
//////�������ܣ�����SQL���ɾ������
//////////////////////////////////////////////
function SDelData(ADOQueryCmd:TADOQuery;mDelStr:String):Boolean;
begin
  try
    result:=False;
    with ADOQueryCmd do
    begin
      Close;
      SQL.Clear;
      SQL.Add(mDelStr);
      ExecSQL;
    end;
    result:=True;
  except
    result:=False;
    Application.MessageBox('����ɾ��ʧ�ܣ�','��ʾ',0);
  end;
end;

  ////////////////////////////////////////////
 ////************��ȡ��������***********/////
////////////////////////////////////////////
function SGetFilters(TMPanel:TPanel;EquTag,LikeTag:Integer):string;
var
  i,j,k:Integer;
  fsj,fsj1:String;
begin
  Result:='';
  with TMPanel do
  begin
    for i:=0 to ControlCount-1 do
    begin
      if Controls[i] is TLabel then Continue;
      if Controls[i] is TEdit then
      begin
        if Trim(TEdit(Controls[i]).Text)<>'' then
        begin
          if Controls[i].Tag=EquTag then
            Result:=Result+'and '+Controls[i].Name+'='+QuotedStr(Trim(TEdit(Controls[i]).Text))
          else if Controls[i].Tag=LikeTag then
          begin
            j:=Pos(' ',Trim(TEdit(Controls[i]).Text));
            if j>0 then
            begin
              Result:=Result+'and '+Controls[i].Name+' like '+QuotedStr('%'+Copy(Trim(TEdit(Controls[i]).Text),1,j-1 )+'%');
              fsj1:=Copy(Trim(TEdit(Controls[i]).Text),j+1,Length(Trim(TEdit(Controls[i]).Text)));
              while Trim(fsj1)<>'' do
              begin
                j:=Pos(' ',Trim(fsj1));
                if j>0 then
                begin
                  Result:=Result+'and '+Controls[i].Name+' like '+QuotedStr('%'+Copy(Trim(fsj1),1,j-1 )+'%');
                  fsj1:=Copy(Trim(fsj1),j+1,Length(Trim(fsj1)));
                end else
                begin
                  Result:=Result+'and '+Controls[i].Name+' like '+QuotedStr('%'+Trim(fsj1)+'%');
                  fsj1:='';
                end;
              end;
            end else
              Result:=Result+'and '+Controls[i].Name+' like '+QuotedStr('%'+Trim(TEdit(Controls[i]).Text)+'%');
          end;
        end;
      end else
      if Controls[i] is TBtnEditA then
      begin
        if Trim(TBtnEditA(Controls[i]).Text)<>'' then
        begin
          if Controls[i].Tag=EquTag then
            Result:=Result+'and '+Controls[i].Name+'='+QuotedStr(Trim(TBtnEditA(Controls[i]).Text))
          else if Controls[i].Tag=LikeTag then
            Result:=Result+'and '+Controls[i].Name+'Name'+' like '+QuotedStr('%'+Trim(TBtnEditA(Controls[i]).Text)+'%')
          else if Controls[i].Tag=99 then
            Result:=Result+'and '+Controls[i].Name+' like '+QuotedStr('%'+Trim(TBtnEditA(Controls[i]).TxtCode)+'%')
          else if Controls[i].Tag=100 then
            Result:=Result+'and '+Controls[i].Name+' like '+QuotedStr('%'+Trim(TBtnEditA(Controls[i]).Text)+'%');
        end;
      end else
      if Controls[i] is TBtnEditC then
      begin
        if Trim(TBtnEditC(Controls[i]).TxtCode)<>'' then
        begin
          if Controls[i].Tag=EquTag then
            Result:=Result+'and '+Controls[i].Name+'='+QuotedStr(Trim(TBtnEditC(Controls[i]).TxtCode))
          else if Controls[i].Tag=LikeTag then
            Result:=Result+'and '+Controls[i].Name+'Name'+' like '+QuotedStr('%'+Trim(TBtnEditC(Controls[i]).Text)+'%');
        end;
      end else
      if Controls[i] is TRTComboBox then
      begin
        if Trim(TRTComboBox(Controls[i]).Text)<>'' then
        begin
          if Controls[i].Tag=EquTag then
            Result:=Result+'and '+Controls[i].Name+'='+QuotedStr(Trim(TRTComboBox(Controls[i]).Item2))
          else if Controls[i].Tag=LikeTag then
            Result:=Result+'and '+Controls[i].Name+' like '+QuotedStr('%'+Trim(TRTComboBox(Controls[i]).Item2)+'%');
        end;
      end
      else
      if Controls[i] is TComboBox then
      begin
        if (Trim(TComboBox(Controls[i]).Text)<>'')   then
        begin
          if Controls[i].Tag=EquTag then
            Result:=Result+'and '+Controls[i].Name+'='+QuotedStr(Trim(TComboBox(Controls[i]).Text))
          else if Controls[i].Tag=LikeTag then
            Result:=Result+'and '+Controls[i].Name+' like '+QuotedStr('%'+Trim(TComboBox(Controls[i]).Text)+'%');
        end;
      end;
    end;
  end;
  if Trim(Result)<>'' then
    Result:=Trim(RightBStr(Result,Length(Result)-4));
end;
function SGetFiltersHint(TMPanel:TPanel;EquTag,LikeTag:Integer):string;
var
  i,j,k:Integer;
  fsj,fsj1:String;
begin
  Result:='';
  with TMPanel do
  begin
    for i:=0 to ControlCount-1 do
    begin
      if Controls[i] is TLabel then Continue;
      if Controls[i] is TEdit then
      begin
        if Trim(TEdit(Controls[i]).Text)<>'' then
        begin
          if Controls[i].Tag=EquTag then
            Result:=Result+'and '+Controls[i].Hint+'='+QuotedStr(Trim(TEdit(Controls[i]).Text))
          else if Controls[i].Tag=LikeTag then
          begin
            j:=Pos(' ',Trim(TEdit(Controls[i]).Text));
            if j>0 then
            begin
              Result:=Result+'and '+Controls[i].Hint+' like '+QuotedStr('%'+Copy(Trim(TEdit(Controls[i]).Text),1,j-1 )+'%');
              fsj1:=Copy(Trim(TEdit(Controls[i]).Text),j+1,Length(Trim(TEdit(Controls[i]).Text)));
              while Trim(fsj1)<>'' do
              begin
                j:=Pos(' ',Trim(fsj1));
                if j>0 then
                begin
                  Result:=Result+'and '+Controls[i].Hint+' like '+QuotedStr('%'+Copy(Trim(fsj1),1,j-1 )+'%');
                  fsj1:=Copy(Trim(fsj1),j+1,Length(Trim(fsj1)));
                end else
                begin
                  Result:=Result+'and '+Controls[i].Hint+' like '+QuotedStr('%'+Trim(fsj1)+'%');
                  fsj1:='';
                end;
              end;
            end else
              Result:=Result+'and '+Controls[i].Hint+' like '+QuotedStr('%'+Trim(TEdit(Controls[i]).Text)+'%');
          end;
        end;
      end;
    end;
  end;
  if Trim(Result)<>'' then
    Result:=Trim(RightBStr(Result,Length(Result)-4));
end;

function SGetFinds(TMPanel:TPanel;EquTag,LikeTag:Integer):string;
var
  i:Integer;
begin
  Result:='';
  with TMPanel do
  begin
    for i:=0 to ControlCount-1 do
    begin
      if Controls[i] is TLabel then Continue;
      if Controls[i] is TEdit then
      begin
        if Trim(TEdit(Controls[i]).Text)<>'' then
        begin
          if Controls[i].Tag=EquTag then
            Result:=Result+'and '+Controls[i].Name+'='+QuotedStr(Trim(TEdit(Controls[i]).Text))
          else if Controls[i].Tag=LikeTag then
            Result:=Result+'and '+Controls[i].Name+' like '+QuotedStr('%'+Trim(TEdit(Controls[i]).Text)+'%');
        end;
      end else
      if Controls[i] is TBtnEditA then
      begin
        if Trim(TBtnEditA(Controls[i]).Text)<>'' then
        begin
          if Controls[i].Tag=EquTag then
            Result:=Result+'and '+Controls[i].Name+'='+QuotedStr(Trim(TBtnEditA(Controls[i]).TxtCode))
          else if Controls[i].Tag=LikeTag then
            Result:=Result+'and '+Controls[i].Name+'Name'+' like '+QuotedStr('%'+Trim(TBtnEditA(Controls[i]).Text)+'%');
        end;
      end else
      if Controls[i] is TBtnEditC then
      begin
        if Trim(TBtnEditC(Controls[i]).TxtCode)<>'' then
        begin
          if Controls[i].Tag=EquTag then
            Result:=Result+'and '+Controls[i].Name+'='+QuotedStr(Trim(TBtnEditC(Controls[i]).TxtCode))
          else if Controls[i].Tag=LikeTag then
            Result:=Result+'and '+Controls[i].Name+'Name'+' like '+QuotedStr('%'+Trim(TBtnEditC(Controls[i]).Text)+'%');
        end;
      end else
      if Controls[i] is TRTComboBox then
      begin
        if Trim(TRTComboBox(Controls[i]).Text)<>'' then
          if Controls[i].Tag=EquTag then
            Result:=Result+'and '+Controls[i].Name+'='+QuotedStr(Trim(TRTComboBox(Controls[i]).Item2))
          else if Controls[i].Tag=LikeTag then
            Result:=Result+'and '+Controls[i].Name+' like '+QuotedStr('%'+Trim(TRTComboBox(Controls[i]).Item2)+'%');
      end else
      if Controls[i] is TComboBox then
      begin
        if Trim(TComboBox(Controls[i]).Text)<>'' then
          if Controls[i].Tag=EquTag then
            Result:=Result+'and '+Controls[i].Name+'='+QuotedStr(Trim(TComboBox(Controls[i]).Text))
          else if Controls[i].Tag=LikeTag then
            Result:=Result+'and '+Controls[i].Name+' like '+QuotedStr('%'+Trim(TComboBox(Controls[i]).Text)+'%');
      end;
    end;
  end;
end;

////////////////////////////////////////////////////////////
  //���ù��˺���
////////////////////////////////////////////////////////////
procedure SDofilter(ADOQry:TADOQuery;FilterStr:string);
begin
  try
    ADOQry.DisableControls;
    with ADOQry do
    begin
      if Trim(FilterStr)='' then
      begin
        Filtered:=False;
      end else
      begin
        Filtered:=False;
        Filter:=FilterStr;
        Filtered:=True;
      end;
    end;
  finally
    ADOQry.EnableControls;
  end;
end;
procedure SDofilter10(cds_Main:TClientDataSet;FilterStr:string);
begin
  try
    cds_Main.DisableControls;
    with cds_Main do
    begin
      if Trim(FilterStr)='' then
      begin
        Filtered:=False;
      end else
      begin
        Filtered:=False;
        Filter:=FilterStr;
        Filtered:=True;
      end;
    end;
  finally
    cds_Main.EnableControls;
  end;
end;
function SGetMaxNo(MyAdoQuery:TADOQuery;MyTable:string;MyField:string;MyFlag:string):String;
var
  fsj:string;
  i:Integer;
begin
  try
    result:='';
    fsj:=Trim(Formatdatetime('yyyyMMdd',Now));
    i:=Length(Trim(MyFlag));
    with MyAdoQuery do
    begin
      Close;
      SQL.Clear;
      sql.Add('select Max('+MyField+') MaxNo from '+MyTable);
      SQL.Add('where '+MyField+' like '+QuotedStr('%'+fsj+'%'));
      Open;
    end;
    with MyAdoQuery do
    begin
      if Trim(fieldbyname('MaxNo').AsString)='' then
      begin
        Result:=Trim(MyFlag)+Trim(Formatdatetime('yyyyMMdd',Now))+'1001';
        Exit;
      end;
    end;
    fsj:=Trim(MyAdoQuery.fieldbyname('MaxNo').AsString);
    result:=Trim(MyFlag)+Trim(Formatdatetime('yyyyMMdd',Now))+IntToStr(StrtoInt(Copy(fsj,i+9,Length(fsj)-i-8))+1);

  except
    Result:='';
    Application.MessageBox(PChar('�ֶ�ȡֵMaxNo���󣬲鿴��<'+Trim(MyTable)+'>�����ֶ�<'+MyField+'>'),'��ʾ',0);
  end;
end;
procedure SCreateCDS20(SADOQry:TADOQuery; mClientDataset:TclientDataSet );
var
  i:integer;
  mfieldName:string;
  mSize:integer;
begin
  mfieldName:='';
 // mClientDataset.Close;
  mClientDataset.FieldDefs.Clear;
  with SADOQry do
  begin
    for i:=0 to fieldCount-1 do     //
    begin
      if (Fields[i].DataType=ftString) and (Fields[i].Size=0) then
      begin
        msize:=1;
      end
      else
        msize:=Fields[i].Size;
      mfieldName:=trim(fields[i].FieldName);
      mClientDataset.FieldDefs.Add(mfieldName,
                                    Fields[i].DataType,msize);

    end;
  end;
  mClientDataset.FieldDefs.Add('Sflag',ftString,1);
  mClientDataset.FieldDefs.Add('Sindex',ftInteger,0);
  mClientDataset.FieldDefs.Add('Ssel',ftBoolean,0);
  mClientDataset.FieldDefs.Add('SDefNote',ftString,20);
  mClientDataset.Close;
  mClientDataset.CreateDataSet;
end;
procedure SCreateCDSOnly(SADOQry:TADOQuery; mClientDataset:TclientDataSet );
var
  i:integer;
  mfieldName:string;
  mSize:integer;
begin
  mfieldName:='';
  mClientDataset.FieldDefs.Clear;
  with SADOQry do
  begin
    for i:=0 to fieldCount-1 do     //
    begin
      if (Fields[i].DataType=ftString) and (Fields[i].Size=0) then
      begin
        msize:=1;
      end
      else
        msize:=Fields[i].Size;
      mfieldName:=trim(fields[i].FieldName);
      mClientDataset.FieldDefs.Add(mfieldName,
                                    Fields[i].DataType,msize);

    end;
  end;
  mClientDataset.Close;
  mClientDataset.CreateDataSet;
end;
procedure SInitCDSData20(fromADO:TADOQuery;toCDS:TclientDataSet);
var
  i:integer;
  k:integer;
begin
  if fromADO.IsEmpty then exit;
  fromADO.DisableControls;
  fromADO.first;
  K:=1;
  try
    toCDS.DisableControls;
    toCDS.Filtered:=false;

    while not fromADO.Eof do
    begin
      with toCDS do
      begin
        Append;
        for i:=0 to fromADO.FieldCount-1 do
        begin
          fields[i].value:=fromADO.Fields[i].Value ;
        end;
        fieldByName('Sflag').AsString :='1';
        fieldByName('Sindex').value :=k;
        fieldByName('Ssel').value :=false;
        fieldByName('SDefNote').value :='';
        inc(k);
        Post;
      end;
      fromADO.Next;
    end;
    if not toCDS.IsEmpty then
    begin
      toCDS.First ;
    end;
  finally
    toCDS.First;
    toCDS.EnableControls;
    fromADO.EnableControls;
  end;
end;
procedure SInitCDSDataOnly(fromADO:TADOQuery;toCDS:TclientDataSet);
var
  i:integer;
  k:integer;
begin
  if fromADO.IsEmpty then exit;
  fromADO.first;
  K:=1;
  try
    toCDS.DisableControls;
    toCDS.Filtered:=false;

    while not fromADO.Eof do
    begin
      with toCDS do
      begin
        Append;
        for i:=0 to fromADO.FieldCount-1 do
        begin
          fields[i].value:=fromADO.Fields[i].Value ;
        end;
        inc(k);
        Post;
      end;
      fromADO.Next;
    end;
    if not toCDS.IsEmpty then
    begin
      toCDS.First ;
    end;
  finally
    toCDS.EnableControls;
  end;
end;
procedure SInitFtComBoxBySql(ADOQueryTmp:TADOQuery;
                           cb: TRTComboBox;FlagType:string;
                           Boxtype:integer;
                           showMsg:string;
                           emptyFlag:Boolean;
                           mSql:string
                           );
begin
  with ADOQueryTmp do
  begin
    close;
    sql.clear;
    sql.Add(mSql);
    Open;
    if isEmpty then
    begin
      application.MessageBox(pChar(showMsg),'',0);
      exit;
    end;
    cb.Clear;
    while not EOF do
    begin
      if Boxtype=0 then
      begin
        cb.Items.Add(trim(fieldByName('Name').AsString));
      end
      else
      begin
        cb.AddItem2(trim(fieldByName('Name').AsString),nil,trim(fieldByName('code').AsString));
      end;
      next;
    end;
    
    if not emptyFlag then
      cb.Items.Add('');

    if emptyFlag and (cb.Items.Count >0) then
       cb.ItemIndex :=0;
  end;
end;
procedure SInitComBoxBySql(ADOQueryTmp:TADOQuery;
                           cb: TComboBox;
                           emptyFlag:Boolean;
                           mSql:string
                           );
begin
  with ADOQueryTmp do
  begin
    close;
    sql.clear;
    sql.Add(mSql);
    Open;
    if isEmpty then
    begin
      //plication.MessageBox(pChar(showMsg),'',0);
      exit;
    end;
    cb.Clear;
    if not emptyFlag then
      cb.Items.Add('');
    while not EOF do
    begin
      cb.Items.Add(trim(fieldByName('Name').AsString));
      next;
    end;
    


    if emptyFlag and (cb.Items.Count >0) then
       cb.ItemIndex :=0;
  end;
end;
//////////////////////////////////////////////
  //���������Ի�combox�е�����
  //��XC_CustCode����ȡ��������
  //Boxtype:0; ����ţ�1;
//////////////////////////////////////////////
procedure SInitComBoxByCustCode(ADOQueryTmp:TADOQuery;
                           cb: TComboBox;FlagType:string;
                           Boxtype:integer;
                           showMsg:string;
                           emptyFlag:Boolean
                           );
var
  A:TA;
begin
  cb.Items.Clear ;
  with ADOQueryTmp do
  begin
    close;
    sql.clear;
    sql.Add('exec P_Get_XC_Custcode');
    sql.Add(quotedStr(trim(flagType)));
    Open;
    if isEmpty then
    begin
      application.MessageBox(pChar('�ͻ�������Ϣά��ģ����δ�ҵ���'+showMsg),'',0);
      exit;
    end;

    while not EOF do
    begin
      if Boxtype=0 then
      begin
        cb.Items.Add(trim(fieldByName('name').AsString));
      end
      else
      begin
        A   :=   TA.Create(Nil);
        A.s:= trim(fieldByName('code').AsString);
        cb.Items.AddObject(trim(fieldByName('name').AsString),TObject(a));
      end;
      next;
    end;
    
    if not emptyFlag then
      cb.Items.Add('');

    if emptyFlag and (cb.Items.Count >0) then
       cb.ItemIndex :=0;
  end;
end;
procedure SInitCxGridComboBoxByCustCode(ADOQueryTmp:TADOQuery;c3:TcxGriddbColumn;
                                        FlagType:string;PState:Integer;IsNull:Boolean;Shmeg:string);
var
  A:TA;
begin

  (c3.Properties as TcxComboBoxProperties).Items.Clear ;
  with ADOQueryTmp do
  begin
    close;
    sql.clear;
    sql.Add(' select * from XC_CustCode  '+
            ' where Flag='''+trim(FlagType)+''' '+
            ' order by orderno ');
    Open;
    if isEmpty then
    begin
      Application.MessageBox(PChar('�ͻ�������Ϣά��ģ����δ�ҵ�:'+shmeg),'',0);
      exit;
    end;
    while not EOF do
    begin
      A   :=   TA.Create(Nil);
      A.s:= trim(fieldByName('Code').AsString);
      if PState=1 then
        (c3.Properties as TcxComboBoxProperties).Items.AddObject(trim(fieldByName('name').AsString),TObject(A))
      else if PState=0 then
      begin
        (c3.Properties as TcxComboBoxProperties).Items.Add(trim(fieldByName('name').AsString));
      end;
      next;
    end;
    if not IsNull then
      (c3.Properties as TcxComboBoxProperties).Items.Add('');
  end;

end;

procedure SInitCxGridComboBoxBySql(ADOQueryTmp:TADOQuery;c3:TcxGriddbColumn;FSql:string;
                                        PState:Integer;IsNull:Boolean;Shmeg:string);
var
  A:TA;
begin

  (c3.Properties as TcxComboBoxProperties).Items.Clear ;
  with ADOQueryTmp do
  begin
    close;
    sql.clear;
    sql.Add(FSql);
    Open;
    if isEmpty then
    begin
      //Application.MessageBox(PChar('δ�ҵ�:'+shmeg),'',0);
      exit;
    end;
    while not EOF do
    begin
      A   :=   TA.Create(Nil);
      A.s:= trim(fieldByName('Code').AsString);
      if PState=1 then
        (c3.Properties as TcxComboBoxProperties).Items.AddObject(trim(fieldByName('name').AsString),TObject(A))
      else if PState=0 then
      begin
        (c3.Properties as TcxComboBoxProperties).Items.Add(trim(fieldByName('name').AsString));
      end;
      next;
    end;
    if not IsNull then
    begin
      (c3.Properties as TcxComboBoxProperties).Items.Add('');
    end;
  end;

end;
procedure SInitCxBandGridComboBoxBySql(ADOQueryTmp:TADOQuery;c3:TcxGridDBBandedColumn;FSql:string;
                                        PState:Integer;IsNull:Boolean;Shmeg:string);
var
  A:TA;
begin

  (c3.Properties as TcxComboBoxProperties).Items.Clear ;
  with ADOQueryTmp do
  begin
    close;
    sql.clear;
    sql.Add(FSql);
    Open;
    if isEmpty then
    begin
      Application.MessageBox(PChar('δ�ҵ�:'+shmeg),'',0);
      exit;
    end;
    while not EOF do
    begin
      A   :=   TA.Create(Nil);
      A.s:= trim(fieldByName('Code').AsString);
      if PState=1 then
        (c3.Properties as TcxComboBoxProperties).Items.AddObject(trim(fieldByName('name').AsString),TObject(A))
      else if PState=0 then
      begin
        (c3.Properties as TcxComboBoxProperties).Items.Add(trim(fieldByName('name').AsString));
      end;
      next;
    end;
    if not IsNull then
    begin
      (c3.Properties as TcxComboBoxProperties).Items.Add('');
    end;
  end;

end;


///////////////////////////////////////////////////
//*****�������� *****                           //
/////////////////////////////////////////////////
function SSWR(s: real): real;
var 
 r1, r2: real;
 s1, s2: string;
begin 
  r1:= int(s);
  r2:= frac(s);
  s1:= copy(floattostr(r1), 1, length(floattostr(r1)));
  if length(floattostr(r2)) >= 5 then
  begin
    if strtoint(copy((floattostr(r2)), 5, 1)) >= 5 then
      if strtoint(copy((floattostr(r2)), 4, 1)) = 9 then
        if strtoint(copy((floattostr(r2)), 3, 1)) = 9 then
        begin
          s1:= inttostr(strtoint(s1) + 1);
          s2:= '';
        end
        else
          S2:= inttostr(strtoint(copy((floattostr(r2)), 3, 1)) + 1)
      else
      if copy((floattostr(r2)), 3, 1) = '0' then
        S2:= '0' + inttostr(strtoint(copy(floattostr(r2), 3, 2)) + 1)
      else
        s2:= inttostr(strtoint(copy(floattostr(r2), 3, 2)) + 1)
    else
      s2:= copy(floattostr(r2), 3, 2);
  end
  else
    s2:= copy(floattostr(r2), 3, 2);
  result := strtofloat(s1 + '.' + s2);
end;

procedure SInitCDSDataSel(fromADO:TADOQuery;toCDS:TclientDataSet);
var
  i:integer;
  k:integer;
begin
  if fromADO.IsEmpty then exit;
  fromADO.first;
  K:=1;
  try
    toCDS.DisableControls;
    toCDS.Filtered:=false;

    while not fromADO.Eof do
    begin
      with toCDS do
      begin
        Append;
        for i:=0 to fromADO.FieldCount-1 do
        begin
          fields[i].value:=fromADO.Fields[i].Value ;
        end;
        //fieldByName('Sflag').AsString :='1';
        //fieldByName('Sindex').value :=k;
        fieldByName('Ssel').value :=false;
        inc(k);
        Post;
      end;
      fromADO.Next;
    end;
    if not toCDS.IsEmpty then
    begin
      toCDS.First ;
    end;
  finally
    toCDS.EnableControls;
  end;
end;

procedure SCreateCDSSel(SADOQry:TADOQuery; mClientDataset:TclientDataSet );
var
  i:integer;
  mfieldName:string;
  mSize:integer;
begin
  mfieldName:='';
  mClientDataset.FieldDefs.Clear;
  with SADOQry do
  begin
    for i:=0 to fieldCount-1 do     //
    begin
      if (Fields[i].DataType=ftString) and (Fields[i].Size=0) then
      begin
        msize:=1;
      end
      else
        msize:=Fields[i].Size;
      mfieldName:=trim(fields[i].FieldName);
      mClientDataset.FieldDefs.Add(mfieldName,
                                    Fields[i].DataType,msize);

    end;
  end;
  mClientDataset.FieldDefs.Add('Sflag',ftString,1);
  mClientDataset.FieldDefs.Add('Sindex',ftInteger,0);
  mClientDataset.FieldDefs.Add('Ssel',ftBoolean,0);
  mClientDataset.FieldDefs.Add('SDefNote',ftString,10);
  mClientDataset.Close;
  mClientDataset.CreateDataSet;
end;
//��������
procedure CopyAddRow(Tv1:TcxGridDBTableView;CDS_Sub:TClientDataSet);
var
  AA:array[0..50] of string;
  i,j:Integer;
begin
  if CDS_Sub.IsEmpty then
  begin
    CDS_Sub.Append;
    CDS_Sub.Post;
    Exit;
  end;
  for i:=0 to Tv1.ColumnCount-1 do
  begin
    AA[i]:=Trim(CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).AsString);
  end;
  with CDS_Sub do
  begin
    Append;
    for i:=0 to Tv1.ColumnCount-1 do
    begin
      if AA[i]<>'' then
      begin
        CDS_Sub.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=AA[i];
      end;
    end;
    Post;
  end;
end;
procedure CopyAddRowBand(Tv1:TcxGridDBBandedTableView;CDS_Sub:TClientDataSet);
var
  AA:array[0..50] of string;
  i,j:Integer;
begin
  if CDS_Sub.IsEmpty then
  begin
    CDS_Sub.Append;
    CDS_Sub.Post;
    Exit;
  end;
  for i:=0 to Tv1.ColumnCount-1 do
  begin
    AA[i]:=Trim(CDS_Sub.fieldbyname(Tv1.Columns[i].DataBinding.FieldName).AsString);
  end;
  with CDS_Sub do
  begin
    Append;
    for i:=0 to Tv1.ColumnCount-1 do
    begin
      if AA[i]<>'' then
      begin
        CDS_Sub.FieldByName(Tv1.Columns[i].DataBinding.FieldName).Value:=AA[i];
      end;
    end;
    Post;
  end;
end;
//��������
procedure CopyAddRowCDS(CDS_Sub:TClientDataSet);
var
  AA:array[0..100] of string;
  i,j:Integer;
begin

  if CDS_Sub.IsEmpty then Exit;
  for i:=0 to CDS_Sub.FieldCount-1 do
  begin
      AA[i]:=Trim(CDS_Sub.fieldbyname(CDS_Sub.Fields[i].FieldName).AsString);
  end;
  with CDS_Sub do
  begin
    Append;
    for i:=0 to CDS_Sub.FieldCount-1 do
    begin
      if AA[i]<>'' then
      begin
        CDS_Sub.FieldByName(CDS_Sub.Fields[i].FieldName).Value:=AA[i];
      end;
    end;
    Post;
  end;
end;

procedure OneKeyPost(Tv1:TcxGridDBTableView;CDS_Sub:TClientDataSet);
var
  FValue,FFValue,FColumn,FFColumn:String;
begin
  //FColumn:=tv1.Columns[Tv1.Controller.FocusedColumnIndex].DataBinding.FieldName;
  //FFColumn:=Tv1.Columns[Tv1.Controller.FocusedColumnIndex].Summary.GroupFormat;
  FColumn:=Tv1.Controller.FocusedColumn.DataBinding.FilterFieldName;
  FFColumn:=Tv1.Controller.FocusedColumn.Summary.GroupFormat;
  FValue:=Trim(CDS_Sub.fieldbyname(FColumn).AsString);
  if Trim(FFColumn)<>'' then
  begin
    FFValue:=Trim(CDS_Sub.fieldbyname(FFColumn).AsString);
  end;
  with CDS_Sub do
  begin
    DisableControls;
    First;
    while not Eof do
    begin
      Edit;
      if FValue='' then
      begin
        CDS_Sub.FieldByName(FColumn).Value:=null;
      end else
      begin
        CDS_Sub.FieldByName(FColumn).Value:=FValue;
      end;
      if Trim(FFColumn)<>'' then
      begin
        if FFValue='' then
        begin
          CDS_Sub.FieldByName(FFColumn).Value:=null;
        end else
        begin
          CDS_Sub.FieldByName(FFColumn).Value:=FFValue;
        end;
      end;
      
      Post;
      Next;
    end;
    EnableControls;
  end;
end;


///////////////////////////////////////////////////
//�������ܣ�ȡ��ˮ��
//mFlag:ǰ׺��mTable:����
//mlen:��ˮ�ų���; mtype:�Ƿ������  1���� 0 ����
///////////////////////////////////////////////////
function GetLSNo(ADOQueryTmp:TADOQuery;
                    var mMaxNo:string;
                    mFlag:string;
                    mTable:string;
                    mlen:integer;
                    mtype:integer=0):Boolean;
begin
  try
    with ADOQueryTmp do
    begin
      Close;
      sql.Clear ;
      sql.Add('exec Get_SY_MaxBH ');
      sql.Add(' '+quotedStr(trim(mFlag)));
      sql.Add(','+quotedStr(trim(mTable)));
      sql.Add(','+intTostr(mlen));
      sql.Add(','+intTostr(mtype));
      //ShowMessage(SQL.Text);
      Open;

      if RecordCount>0 then
      begin
        mMaxNo:=trim(fieldByName('MaxBH').AsString) ;
        if mMaxNo<>'' then
          result:=true
        else
          Result:=false;
      end
      else
      begin
        result:=false;
      end;

    end;
    if not Result then
      application.MessageBox(Pchar('�޷�������ˮ��('+mflag+')'),'��ʾ��Ϣ',MB_ICONINFORMATION);

  Except
    result:=false;
    application.MessageBox(Pchar('�޷�������ˮ��('+mflag+')'),'��ʾ��Ϣ',MB_ICONINFORMATION);

  end;
end;

procedure ReadCxGrid(fileName:string;cxgrid:TcxGridDBTableView;filePack:string='����');
var
 mFileName:string;
begin
  mFileName := ExtractFilePath(Application.ExeName)+'Layout\' +filePack+'\'+trim(fileName)+ '.dbg';
  //�Ӳ����ļ��лָ�
  if FileExists(mFileName) then
    cxgrid.RestoreFromIniFile(mFileName,false,false);
  CreateGroupSummarry(cxgrid);
end;
///////////////////////////////////////////////////////////////
  //�������ܣ����ļ��ж�ȡcxGridCol����
  //fileName �Ƽ�Ϊ���ڵ�caption����caption����
///////////////////////////////////////////////////////////////
procedure ReadCxBandedGrid(fileName:string;cxgrid:TcxGridDBBandedTableView;filePack:string='����');
var
 mFileName:string;
begin
  mFileName := ExtractFilePath(Application.ExeName)+'Layout\' +filePack+'\'+trim(fileName)+ '.dbg';
  //�Ӳ����ļ��лָ�
  if FileExists(mFileName) then
    cxgrid.RestoreFromIniFile(mFileName,false,false);
end;
///////////////////////////////////////////////////////////////
  //�������ܣ�дcxGridCol���õ�.dbg�ļ���
  //Ĭ���Ƽ�Ϊ���ڵ�caption����
///////////////////////////////////////////////////////////////
procedure WriteCxGrid(fileName:string;cxgrid:TcxGridDBTableView;filePack:string='����');
var
 mFileName:string;
begin
  mFileName := ExtractFilePath(Application.ExeName)+'Layout\' +filePack+'\'+trim(fileName)+ '.dbg';
  if not DirectoryExists(ExtractFileDir(mFileName)) then
      CreateDir(ExtractFileDir(mFileName));
  //����Ϊ�����ļ�
  cxgrid.StoreToIniFile(mFileName);

end;
///////////////////////////////////////////////////////////////
  //�������ܣ�дcxGridCol���õ�.dbg�ļ���
  //Ĭ���Ƽ�Ϊ���ڵ�caption����
///////////////////////////////////////////////////////////////
procedure WriteCxBandedGrid(fileName:string;cxgrid:TcxGridDBBandedTableView;filePack:string='����');
var
 mFileName:string;
begin
  mFileName := ExtractFilePath(Application.ExeName)+'Layout\' +filePack+'\'+trim(fileName)+ '.dbg';
  if not DirectoryExists(ExtractFileDir(mFileName)) then
      CreateDir(ExtractFileDir(mFileName));
   //����Ϊ�����ļ�
  cxgrid.StoreToIniFile(mFileName);
end;

procedure CreateGroupSummarry(tv1:TcxGridDBTableView);
var
  csg : TcxDataSummaryGroup;
  csglink : TcxDataSummaryGroupItemLink;
  csgItem : TcxDataSummaryItem;
  i:integer;
  mFieldName:string;
begin
    ///����������
    with tv1.DataController.Summary do
    begin
      try
         csg := DataController.Summary.SummaryGroups.Add;   //����������

         csg.Links.Clear;
         for i:= 0 to tv1.ColumnCount -1 do
         begin
           if not tv1.Columns[i].Visible then continue;
           mFieldName:=tv1.Columns[i].DataBinding.FieldName;

           if tv1.Columns[i].Summary.FooterKind=skSum  then
           begin
            // (tv1.DataController.DataSet.Fields[i] as TNumericField).DisplayFormat := '#,0.00;-#,0.00;#';
             //tv1.Columns[i].Summary.FooterFormat:='0.0';
             //tv1.Columns[i].Summary.FooterKind := skSum;

             //�����Group Row�ϵĻ���ͬʱʹ��ʱ����ֻ����һ����Ч
             //�����з������ϵĻ�����

             csgitem := csg.SummaryItems.Add;
             csgitem.ItemLink := tv1.Columns[i];   //�����ֶ�1
             csgitem.Position :=spGroup;
             csgitem.Kind := skSum;
             csgItem.Format := trim(tv1.Columns[i].Caption) +'��=#,0.0';

             tv1.Columns[i].Summary.GroupFooterKind := skSum;
             tv1.Columns[i].Summary.GroupFooterFormat := '#,0.00';

           end
           else if tv1.Columns[i].Summary.FooterKind=skCount  then
           begin
            // (tv1.DataController.DataSet.Fields[i] as TNumericField).DisplayFormat := '#,0.00;-#,0.00;#';
             //tv1.Columns[i].Summary.FooterFormat:='0.0';
             tv1.Columns[i].Summary.FooterKind := skCount;

             tv1.Columns[i].Summary.GroupFooterKind := skCount;

             //tv1.Columns[i].Summary.GroupFooterFormat := '#,0.00';
             //�����Group Row�ϵĻ���ͬʱʹ��ʱ����ֻ����һ����Ч
             //�����з������ϵĻ�����
             csgitem := csg.SummaryItems.Add;
             csgitem.ItemLink := tv1.Columns[i];   //�����ֶ�1
             csgitem.Kind := skCount;
             //csgItem.Format := '��=#,0.0';

           end
           else
           begin
             csglink := csg.Links.Add;
             csglink.ItemLink := tv1.Columns[i];  //�����ֶ�
              //���в�������ܵ��ж��п����������飬���뽫��Щ�м��뵽
              //SummaryGroupItemLink�У�û�м�������ӵ�����������ʱ
              //����ֵ������ʾ
            end;

          end;
    finally
    end;
  end;

end;

procedure  TcxGridToExcel(mfileName:string;gridName:TcxGrid);
var
    saveDialog:TSaveDialog;
begin
    try
        saveDialog:=TSaveDialog.Create(nil);
        saveDialog.Filter:='xls(*.xls)|*.xls|ȫ��(*.*)|*.*';
        saveDialog.Options:=[ofOverwritePrompt];
        saveDialog.FileName:=mfileName;
        if saveDialog.Execute then
            if Assigned(gridName) then
            begin
                try

                    ExportGridToExcel(saveDialog.FileName,gridName);
                except
                    application.MessageBox('����ʧ��,Դ�ļ����ܴ��ڱ༭״̬!','��ʾ��Ϣ',0);
                    exit;
                end;
                application.MessageBox('�ɹ�����!','��ʾ��Ϣ',0);
            end
            else
               application.MessageBox('����ʧ��!','��ʾ��Ϣ',0);
    finally
        saveDialog.Free;
    end;
end;

function ReadINIFileStr(ininame,TypeName:string;ValueName,ValueMR:String):string;
var
  programIni:Tinifile;  //�����ļ���
  FileName,ValueZS:string;
begin
  FileName:=ExtractFilePath(Paramstr(0))+ininame;
  programIni:=Tinifile.create(FileName);
  ValueZS:=programIni.ReadString(TypeName,ValueName,ValueMR);
  Result:=ValueZS;
  programIni.Free;
end;

procedure SelExportData(FTv:TcxGridDBTableView;FAdoQry:TADOQuery;FTile:string);
var
   i,j:Integer;
   fsj:string;
begin
  if FAdoQry.IsEmpty then Exit;
  try
    frmSelExportField:=TfrmSelExportField.Create(Application);
    with frmSelExportField do
    begin
      with frmSelExportField.ExpGrid do
      begin
       // ExpGrid.Columns.Clear;
        ExpGrid.ClearItems;
        frmSelExportField.IniName:=FTile;
        {if FTv.OptionsView.Footer=true then
        begin
          ExpGrid.OptionsView.Footer:=True;
        end else
        begin
          ExpGrid.OptionsView.Footer:=False;
        end;    }
        ExpGrid.OptionsView.Footer:=FTv.OptionsView.Footer;
        for i:=0 to FTv.ColumnCount-1 do
        begin
          //if FTv.Columns[i].Visible=True then
          begin
            ExpGrid.CreateColumn;
            j:=ExpGrid.ColumnCount-1;
            ExpGrid.Columns[j].Caption:=FTv.Columns[i].Caption;
            ExpGrid.Columns[i].Visible:=FTv.Columns[i].Visible;
            ExpGrid.Columns[j].DataBinding.FieldName:=FTv.Columns[i].DataBinding.FieldName;
            ExpGrid.Columns[j].Width:=FTv.Columns[i].Width;
            ExpGrid.Columns[i].Summary.FooterKind:=FTv.Columns[i].Summary.FooterKind;

          end;
        end;
      end;
      ExportDataSource.DataSet:=FAdoQry;
      FAdoQry.Open;
      if ShowModal=1 then
      begin

      end;
    end;
    frmSelExportField.Free;
  except

  end;
end;
procedure SelExportDataBand(FTv:TcxGridDBBandedTableView;FAdoQry:TADOQuery;FTile:string);
var
   i,j:Integer;
   fsj:string;
begin
  if FAdoQry.IsEmpty then Exit;
  try
    frmSelExportField:=TfrmSelExportField.Create(Application);
    with frmSelExportField do
    begin
      with frmSelExportField.ExpGrid do
      begin
       // ExpGrid.Columns.Clear;
        ExpGrid.ClearItems;
        frmSelExportField.IniName:=FTile;
        {if FTv.OptionsView.Footer=true then
        begin
          ExpGrid.OptionsView.Footer:=True;
        end else
        begin
          ExpGrid.OptionsView.Footer:=False;
        end;    }
        ExpGrid.OptionsView.Footer:=FTv.OptionsView.Footer;
        for i:=0 to FTv.ColumnCount-1 do
        begin
          if FTv.Columns[i].Visible=True then
          begin
            ExpGrid.CreateColumn;
            j:=ExpGrid.ColumnCount-1;
            ExpGrid.Columns[j].Caption:=FTv.Columns[i].Caption;
            ExpGrid.Columns[j].DataBinding.FieldName:=FTv.Columns[i].DataBinding.FieldName;
            ExpGrid.Columns[j].Width:=FTv.Columns[i].Width;
            ExpGrid.Columns[i].Summary.FooterKind:=FTv.Columns[i].Summary.FooterKind;

          end;
        end;
      end;
      ExportDataSource.DataSet:=FAdoQry;
      FAdoQry.Open;
      if ShowModal=1 then
      begin

      end;
    end;
    frmSelExportField.Free;
  except

  end;
end;
procedure ColumnView(AdoQueryTemp:TADOQuery;Tv1:TcxGridDBTableView;MKName10:string);
begin
  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add('select * from Table_Column where CxTabName='''+Trim(MKName10)+''' and Owner='''+Trim(DCode)+'''');
    sql.Add(' and TCNotVisble=1 ');
    open;
  end;
  if ADOQueryTemp.IsEmpty=False then
  begin
    with ADOQueryTemp do
    begin
      First;
      while not eof do
      begin

        TV1.GetColumnByFieldName(ADOQueryTemp.fieldbyname('ColName').AsString).Visible:=False;
        TV1.GetColumnByFieldName(ADOQueryTemp.fieldbyname('ColName').AsString).Hidden:=True;
        Next;
      end;
    end;
  end;
end;
procedure ColumnBandView(AdoQueryTemp:TADOQuery;Tv1:TcxGridDBBandedTableView;MKName10:string);
var
  fsj:string;
begin
  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add('select * from Table_Column where CxTabName='''+Trim(MKName10)+''' and Owner='''+Trim(DCode)+'''');
    sql.Add(' and TCNotVisble=1 ');
    open;
  end;
  if ADOQueryTemp.IsEmpty=False then
  begin
    with ADOQueryTemp do
    begin
      First;
      while not eof do
      begin
        fsj:=Trim(ADOQueryTemp.fieldbyname('ColName').AsString);
       // Tv1.Controller.ge
        Tv1.GetColumnByFieldName(fsj).Visible:=False;
        Tv1.GetColumnByFieldName(fsj).Hidden:=True;
        Next;
      end;
    end;
  end;
end;
procedure ColumnSet(TV10:TcxGridDBTableView;MKName10:String);
var
  i:Integer;
begin
  try
    frmColumnSet:=TfrmColumnSet.Create(Application);
    with frmColumnSet do
    begin
      ADOQuery2.DisableControls;
      with ADOQuery2 do
      begin
        Close;
        sql.Clear;
        sql.Add('select * from Table_Column where 1<>1');
        Open;
      end;
      SCreateCDS20(ADOQuery2,ClientDataSet2);
      SInitCDSData20(ADOQuery2,ClientDataSet2);
      ADOQuery2.EnableControls;
      MKName:=MKName10;
      for i:=0 to TV10.ColumnCount-1 do
      begin
        with ClientDataSet2 do
        begin
          Append;
          FieldByName('CxTabName').Value:=MKName;
          FieldByName('CxColName').Value:=Trim(TV10.Columns[i].Caption);
          FieldByName('ColName').Value:=Trim(TV10.Columns[i].DataBinding.FieldName);
          Post;
        end;
      end;
      if ShowModal=1 then
      begin

      end;
    end;
  finally
    frmColumnSet.Free;
  end;
end;
procedure ColumnBandSet(TV10:TcxGridDBBandedTableView;MKName10:String);
var
  i:Integer;
begin
  try
    frmColumnBandSet:=TfrmColumnBandSet.Create(Application);
    with frmColumnBandSet do
    begin
      ADOQuery2.DisableControls;
      with ADOQuery2 do
      begin
        Close;
        sql.Clear;
        sql.Add('select * from Table_Column where 1<>1');
        Open;
      end;
      SCreateCDS20(ADOQuery2,ClientDataSet2);
      SInitCDSData20(ADOQuery2,ClientDataSet2);
      ADOQuery2.EnableControls;
      MKName:=MKName10;
      for i:=0 to TV10.ColumnCount-1 do
      begin
        with ClientDataSet2 do
        begin
          Append;
          FieldByName('CxTabName').Value:=Trim(TV10.Bands[TV10.Columns[i].Position.BandIndex].Caption);
          FieldByName('CxColName').Value:=Trim(TV10.Columns[i].Caption);
          FieldByName('ColName').Value:=Trim(TV10.Columns[i].DataBinding.FieldName);
          FieldByName('OrderNo').Value:=i;
          Post;
        end;
      end;
      ADOQuery5.DisableControls;
      with ADOQuery5 do
      begin
        Close;
        sql.Clear;
        sql.Add('select * from Table_Name where 1<>1');
        Open;
      end;
      SCreateCDS20(ADOQuery5,CDSName);
      SInitCDSData20(ADOQuery5,CDSName);
      ADOQuery2.EnableControls;
      MKName:=MKName10;
      for i:=0 to TV10.Bands.Count-1  do
      begin
        with CDSName do
        begin
          Append;
          FieldByName('CxTabName').Value:=Trim(TV10.Bands[i].Caption);
          FieldByName('OrderNo').Value:=i;
          Post;
        end;
      end;
      if ShowModal=1 then
      begin

      end;
    end;
  finally
    frmColumnBandSet.Free;
  end;
end;

procedure GetSWLDZ(IPStr:string);
var
  myip:ulong;
  mymac:array[0..5] of byte;
  mymaclength:ulong;
  r:integer;
begin
  {myip:=inet_addr(PChar(Trim(IPStr)));
  mymaclength:=length(mymac);
  r:=sendarp(myip,0,@mymac,@mymaclength);
  IpCall:=r;      
  IpWLDZStr:=format('%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x',[mymac[0],mymac[1],mymac[2],mymac[3],mymac[4],mymac[5]]);}
end;
procedure SelOKNo(CDS_MainSel:TClientDataSet;FSel:Boolean);
begin
  if CDS_MainSel.IsEmpty then Exit;
  CDS_MainSel.DisableControls;
  with CDS_MainSel do
  begin
    First;
    while not Eof do
    begin
      if FieldByName('SSel').AsBoolean=not FSel then
      begin
        Edit;
        FieldByName('SSel').Value:=FSel;
        Post;
      end;
      Next;
    end;
  end;
  CDS_MainSel.EnableControls;
end;
function num2ceng(strArabic:String):String;//����С��������ת��Ӣ��
const
  sw:array[2..9]of string=('twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety');
  gw:array[1..19] of string=('one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen');
  exp:array[1..4] of string=('','thousand','million','billion');
var
  t,j,glb,t1 :integer;
  ts:string;
  tmp1:AnsiString;
  rtnStr:AnsiString;
  function readu1000(ss:string):string;
  var
    t,code:integer;
    rtvStr:AnsiString ;
	begin
    rtvStr := '';
	  while ss[1]='0' do
    begin
      delete(ss,1,1);
      if length(ss)=0 then exit;//����ȫ��0���
    end;
    if length(ss)=3 then
    begin
      tmp1:= gw[ord(ss[1])-ord('0')];
      appendstr(rtvStr ,tmp1);
      //appendstr(result,' hundred ');
      appendstr(rtvStr,' hundred  ');
      delete(ss,1,1);
    end;
    while ss[1]='0' do
    begin
      delete(ss,1,1);
      if length(ss)=0 then exit;
    end;
   if length(ss)<>0 then
    if rtvStr <> '' then appendstr(AnsiString(rtvStr),AnsiString('and '));
    if (glb = 1) and (t1<>1) then //������λʱ�������3λ
      if rtvStr='' then appendstr(rtvStr,'and ');
    begin
      val(ss,t,code);
      if t<20 then rtvStr :=rtvStr+gw[t]
      else if t mod 10=0 then rtvStr:=rtvStr+sw[t div 10]
      else
      //result := result+sw[trunc(t/10)]+'-'+gw[t mod 10];
      rtvStr := rtvStr+sw[trunc(t/10)]+' '+gw[t mod 10];
    end;

    result:=rtvStr;

  end;
begin

  rtnStr :='';
  t := pos('.',strArabic);
  if t=0 then t:=length(strArabic)+1;
  while (t mod 3<>1)do
  begin
    t:=t+1;
    strArabic:='0'+ strArabic;
  end;
  t1:=(t-1) div 3;
  for glb:=t1 downto 1 do
  begin
	  ts:='';
    for j:=1 to 3 do
    begin
      ts:=ts+ strArabic[1];
      delete(strArabic,1,1);
    end;
    result := rtnStr + readu1000(ts);
    if ts<>'000' then rtnStr := rtnStr+' '+exp[glb]+' ';
  end;
  if length(strArabic)<>0 then
  begin
	  delete(strArabic,1,1);
    appendstr(rtnStr,'and ');
    rtnStr :=rtnStr + readu1000(strArabic);
  end;
end;
function num2cengnum(strArabic:string):string;
const
  gw:array[1..10] of string =('0','one','two','three','four','five','six','seven','eight','nine');
var
  p,i,j,x:integer;
  s:string;
begin
   result := '';
   s := strarabic;
   p := pos('.',strarabic);
   if p = 0 then
   begin
     result := num2ceng(strarabic)+'Only';
     exit;
   end
   else
   begin
      i := length(s)-p;//����С��������м�λ
      delete(strarabic,p,i+1);//ɾ��С�����������
      result := num2ceng(strarabic)+'Point';
   end;
   for x:=1 to i do //ת��С�����������
   begin
      j:= strtoint(copy(s,p+x,1));
      case j of
        0: result := result +' '+gw[1];
        1: result := result +' '+gw[2];
        2: result := result +' '+gw[3];
        3: result := result +' '+gw[4];
        4: result := result +' '+gw[5];
        5: result := result +' '+gw[6];
        6: result := result +' '+gw[7];
        7: result := result +' '+gw[8];
        8: result := result +' '+gw[9];
        9: result := result +' '+gw[10];
      end;
   end;
end;

procedure DelCDS(ClientDataSet1:TClientDataSet;ADOCmd:TADOQuery;DelSql:string);
begin
  if ClientDataSet1.IsEmpty then Exit;
  if Trim(ClientDataSet1.fieldbyname('ZSID').AsString)<>'' then
  begin
    if Application.MessageBox('ȷ��Ҫɾ��������','��ʾ',32+4)<>IDYES then Exit;
    with ADOCmd do
    begin
      Close;
      SQL.Clear;
      sql.Add(DelSql);
      ExecSQL;
    end;
  end;
  ClientDataSet1.Delete;
end;

procedure LSCSHData(ADOQueryTmp: TADOQuery; mParent: TdxLayoutControl; FTag: Integer);
var
  i, idx: Integer;
  mfield, mfieldCode: string;
  ma: TA;
begin
  with ADOQueryTmp do
  begin
    if isEmpty then
      exit;
    with mParent do
    begin
      for i := 0 to ControlCount - 1 do
      begin
        if Controls[i] is TLabel then
          continue;
        if Controls[i].Tag <> FTag then
          continue;
        mfield := Controls[i].Name;

        if Controls[i] is TEdit then
        begin
          if Trim(fieldByName(mfield).AsString) <> '' then
            TEdit(Controls[i]).Text := Trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxTextEdit then
        begin
          if Trim(fieldByName(mfield).AsString) <> '' then
            TcxTextEdit(Controls[i]).Text := Trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TRTComboBox then
        begin
          idx := TRTComboBox(Controls[i]).IndexOfItem2(Trim(fieldByName(mfield).AsString));
          TComboBox(Controls[i]).ItemIndex := idx;
        end
        else if Controls[i] is TRichEdit then
        begin
          if Trim(fieldByName(mfield).AsString) <> '' then
            TRichEdit(Controls[i]).Text := Trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxRichEdit then
        begin
          if Trim(fieldByName(mfield).AsString) <> '' then
            TcxRichEdit(Controls[i]).Text := Trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TComboBox then
        begin
          if TComboBox(Controls[i]).Items.Count > 0 then
          begin
            idx := TComboBox(Controls[i]).Items.IndexOf(Trim(fieldByName(mfield).AsString));
          end
          else
            idx := -1;
          TComboBox(Controls[i]).ItemIndex := idx;
        end
        else if Controls[i] is TcxComboBox then
        begin
          if TcxComboBox(Controls[i]).Properties.Items.Count > 0 then
          begin
            idx := TcxComboBox(Controls[i]).Properties.Items.IndexOf(Trim(fieldByName(mfield).AsString));
          end
          else
            idx := -1;
          TcxComboBox(Controls[i]).ItemIndex := idx;
        end
        else if Controls[i] is TBtnEditA then
        begin
          if Trim(TBtnEditA(Controls[i]).Hint) <> '' then
          begin
            TBtnEditA(TBtnEditA(Controls[i])).TxtCode := Trim(fieldByName(mfield).AsString);
            TBtnEditA(Controls[i]).Text := Trim(fieldByName(Trim(TBtnEditA(Controls[i]).Hint)).AsString);
          end
          else
          begin
            TBtnEditA(Controls[i]).Text := Trim(fieldByName(mfield).AsString);
          end;

        end
        else if Controls[i] is TBtnEditC then
        begin
          TBtnEditC(TBtnEditA(Controls[i])).Text := Trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TDateTimePicker then
        begin
          if Trim(fieldByName(mfield).AsString) = '' then
          begin
            TDateTimePicker(Controls[i]).Checked := false;
          end
          else
            TDateTimePicker(Controls[i]).DateTime := fieldByName(mfield).AsDateTime;
        end
        else if Controls[i] is Tmemo then
        begin
          Tmemo(Controls[i]).Text := Trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is Tcxmemo then
        begin
          Tcxmemo(Controls[i]).Text := Trim(fieldByName(mfield).AsString);
        end
        else if Controls[i] is TcxDateEdit then
        begin
          if not isEmpty and not fieldByName(mfield).IsNull then
            TcxDateEdit(Controls[i]).date := fieldByName(mfield).AsDateTime;
        end
        else if Controls[i] is TcxTimeEdit then
        begin
          if not isEmpty and (fieldByName(mfield).AsString <> '') then
            TcxTimeEdit(Controls[i]).Text := fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcxCurrencyEdit then
        begin
          TcxCurrencyEdit(Controls[i]).Text := fieldByName(mfield).AsString;
        end
        else if Controls[i] is TcheckBox then
        begin
          TcheckBox(Controls[i]).Checked := fieldByName(mfield).asBoolean;
        end
        else if Controls[i] is TcxButtonEdit then
        begin
          TcxButtonEdit(Controls[i]).Text := Trim(fieldByName(mfield).AsString);
//          if TcxButtonEdit(Controls[i]).ParentShowHint = false then
//          begin
//            mfieldCode := Trim(Copy(mfield, 1, Length(mfield) - 4));
//            TcxButtonEdit(Controls[i]).Hint := Trim(fieldByName(mfieldCode).AsString);
//          end;
        end;
      end; // end for
    end; // end with
  end; // end for with

end;

end.