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

📄 u_math.pas

📁 一个仓库管理软件包括,仓库入库,仓库出库,库存信息,单据审核,反审核等功能.
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  Result := S;
  for I := 1 to Length(S) do
  begin
    Result[I] := char(byte(S[I]) xor (AKey shr 8));
    AKey := (byte(Result[I]) + AKey) * BegKey + EndKey;
    if Result[I] = Chr(0) then Result[I] := S[I];
  end;
  Result := StrToHex(Result);
end;

function Decrypt(S: string): string;
var
  I: Integer;
  AKey: Word;
  LockKey, BegKey, EndKey: integer;
begin
  LockKey := 13;
  BegKey := 53523;
  EndKey := 32768;

  S := HexToStr(S);
  Result := S;
  AKey := Lockkey;
  for I := 1 to Length(S) do
  begin
    if char(byte(S[I]) xor (AKey shr 8)) = Chr(0) then
    begin
      Result[I] := S[I];
      AKey := (byte(Chr(0)) + AKey) * BegKey + EndKey; //保证Key的正确性
    end
    else
    begin
      Result[I] := char(byte(S[I]) xor (AKey shr 8));
      AKey := (byte(S[I]) + AKey) * BegKey + EndKey;
    end;
  end;
end;

function ReadReg: string;
var
  RegF: TRegistry;
begin
  Result := '';
  RegF := TRegistry.Create;
  RegF.RootKey := HKEY_CURRENT_USER;
  try
    RegF.OpenKey('SOFTWARE\Microsoft\Microsoft Data Management', True);
    Result := RegF.ReadString('DefaultChar');
  finally
    RegF.CloseKey;
    RegF.Free;
  end;
end;

function WriteReg(Str: String): Integer;
var
  RegF: TRegistry;
begin
  Result := 0;
  RegF := TRegistry.Create;
  RegF.RootKey := HKEY_CURRENT_USER;
  try
    RegF.OpenKey('SOFTWARE\Microsoft\Microsoft Data Management', True);
    RegF.WriteString('DefaultChar', Str);
  finally
    RegF.CloseKey;
    RegF.Free;
  end;
end;

//*******************************************
//输入: DateString 待校验的时间字符串
//处理: 判断传入的字符串时间是否有效
//输出: 有效则True 无效则False
//*******************************************
Function IsDateTime(const DateString: String): Boolean;
begin
  try
    StrToDateTime(DateString);
    Result:=true;
  except
    Result:=false;
  end;
end;

//*******************************************
//输入: Flag标记 1格式[YYYY-MM-DD] 2格式[YYYY-MM-DD HH:MM:SS]
//处理: 读取服务器上最新当前时间
//输出: 最新当前时间
//*******************************************
Function GetNow(Flag: Integer): TDateTime;
var qurTmp: TQuery; 
begin
  try
    qurTmp := TQuery.Create(nil);
    qurTmp.DatabaseName := 'DBMain';
    qurTmp.Close;
    qurTmp.SQL.Clear;
    if Flag=2 then
      qurTmp.SQL.Add('select NowDate=getdate() ')
    else qurTmp.SQL.Add('select NowDate=CONVERT(CHAR(10),getdate(),120) ');
    qurTmp.Open;
    Result:=qurTmp.FieldByName('NowDate').AsDateTime;
  finally
    qurTmp.Free;
  end;
end;

//***************************************************************************
//输入: Flag --> 0.出库 1.入库 2.盘点    List--> 物料ID和出入库盘点数量的链表
//       Num  --> 多物料时提示Num个物料的安全库存信息
//处理: 检测单据中各物料的安全库存、最大库存情况
//输出: 1:无提示 2:询问框 3:提示框
//       gStoreSafetyInfo 变量用于存放描述信息<Variable.pas>
//***************************************************************************
function CheckStoreSafety(Flag,ShowNum:Integer;var List:TList):Integer;
var
  qurfree:TQuery;
  I:Integer;           //  循环控制变量
  GidNum:CBGidNum;     //  物料出入库信息链 
  RetuFlag:Integer;    //  暂存返回标志
  TempStr:String;      //  暂存返回信息
  J:Integer;           //  临时变量 }
begin
  qurfree:=TQuery.Create(nil);
  qurfree.DatabaseName:='DBMain';
  J:=0;
  for I:=0 to List.Count -1 do
  begin
    GidNum:=List.Items[i];
    qurfree.Close;
    qurfree.SQL.Clear;
    qurfree.SQL.Add('DECLARE @Result int,@VContext Varchar(250)'
      +' EXECUTE sp_StoreSafety :Flag,:Gid,:Num,@Result OUTPUT,@VContext OUTPUT'
      +' SELECT Result=@Result,VContext=@VContext');
    qurfree.ParamByName('Flag').AsInteger :=Flag;  
    qurfree.ParamByName('Gid').AsInteger :=GidNum^.Gid;
    qurfree.ParamByName('Num').AsInteger :=GidNum^.Num;
    try
      qurfree.Open;
    except
      On E:EDBEngineError do
      begin
        TempStr:='安全库存判断失败!'+E.Message;
        Result:=0;       //  执行失败
        Exit;
      end;
    end;
    if qurfree.FieldByName('Result').AsInteger=0 then                //  出错
    begin
      gStoreSafetyInfo:=qurfree.FieldByName('VContext').AsString;
      Result:=0;
    end
    else if qurfree.FieldByName('Result').AsInteger=1 then           //  无提示
    begin
      RetuFlag:=1;
    end
    else if qurfree.FieldByName('Result').AsInteger=3 then           //  提示框
    begin
      if J<ShowNum then
        TempStr:=TempStr+qurfree.FieldByName('VContext').AsString+#13+#10;
      Inc(J);
      if not(RetuFlag=2)then     // 若有物料需要提示的则返回标志应为询问框(优先级高)
        RetuFlag:=3;
    end
    else if qurfree.FieldByName('Result').AsInteger=2 then           //  询问框
    begin
      if J<ShowNum then
        TempStr:=TempStr+qurfree.FieldByName('VContext').AsString+#13+#10;
      Inc(J);
      RetuFlag:=2;
    end;
  end;
  gStoreSafetyInfo:='';
  if J>ShowNum then
    gStoreSafetyInfo:=TempStr+#13+#10+'...'
  else
    gStoreSafetyInfo:=TempStr;
  Result:=RetuFlag;
end;  

//***************************************************************************
//输入: Index:下拉数据的Item位置  Code:下拉数据的编码值  Name下拉数据的名称  List出入的TList类『存储下栏数据』
//处理: 输入下拉数据,将有效值存入列表中
//输出: 无
//***************************************************************************
procedure SetCBList(Index: Integer; Code, Name: String;var List: TList);
var
  CBRecord: CBList;
begin
  new(CBRecord);
  CBRecord^.Index:=Index;
  CBRecord^.Code:=Code;
  CBRecord^.Name:=Name;
  List.Add(CBRecord);
  //dispose(CBRecord);
end;

//***************************************************************************
//输入: Index:下拉数据的Item位置  List出入的TList类『存储下栏数据』
//处理: 根据下拉位置,取出对于编码值
//输出: 返回下拉位置对于的编码值
//***************************************************************************
function GetCBCode(Index:Integer;var List: Tlist): String;
var
  CBRecord: CBList; i: Integer;
begin
  for i:=0 to List.Count-1 do
  begin
    CBRecord := List.Items[i];
    if CBRecord^.Index=Index then
    begin
      result := CBRecord^.Code;
      exit;
    end
    else
      result := '';
  end;
end;

//***************************************************************************
//输入: GID:物料编码  Num:出入库数量 (盘点盘赢归为入库、盘亏归为出库) List出入的TList类『存储下栏数据』
//处理: 将输入信息存入列表中
//输出: 无
//***************************************************************************
procedure SetCBGidNum(GID:Integer;Num:Integer;var List:TList);
var
  GidNum:CBGidNum;
begin
  new(GidNum);
  GidNum^.Gid:=GID;
  GidNum^.Num:=Num;
  List.Add(GidNum);
end;

//***************************************************************************
//输入: SenderGrid待转换的网格  SourceGrid数据源网格
//处理: 增强版网格转换到普通网格中
//输出: 无
//***************************************************************************
procedure AssignPrintGrid(SenderGrid: TDBGrid; SourceGrid: TDBGridEh);
var
  i,j,k:Integer;
begin
  k:=0;
  i:=SourceGrid.Columns.Count;
  SenderGrid.DataSource:=SourceGrid.DataSource;
  SenderGrid.Columns.Clear;
  for j:=0 to i-1 do
  begin
    if SourceGrid.Columns[j].Visible=false then
    begin
      Inc(k);
      Continue;
    end;
    SenderGrid.Columns.Add;
    SenderGrid.Columns[j-k].Title.Caption:=SourceGrid.Columns[j].Title.Caption;
    SenderGrid.Columns[j-k].FieldName:=SourceGrid.Columns[j].FieldName;
    SenderGrid.Columns[j-k].Width:=SourceGrid.Columns[j].Width;
    SenderGrid.Columns[j-k].Alignment:=SourceGrid.Columns[j].Alignment;
  end;
end;

//***************************************************************************
//输入: QFormName窗体变量名 Flag选择查询类型 SourceGrid数据源网格
//       PInt打印或预览 Company单位 BeginDate起始日期 EndDate结束日期
//       PType统计类型  Maker操作员 Context备注说明栏
//处理: 打印增强版网格数据
//输出: 无
//***************************************************************************
procedure PrintGridEh(QFormName: String; Flag: Integer; SourceGrid: TDBGridEh;
  PInt: Integer; BeginDate, EndDate: TDateTime; Maker: String);
  //将对齐的表示形式转换一下
  function AlignChange(Align: String): String;
  begin
    if Align='居中' then Result := 'taCenter';
    if Align='居左' then Result := 'taLeftJustify';
    if Align='居右' then Result := 'taRightJustify';
    if Align='taCenter' then Result := '居中';
    if Align='taLeftJustify' then Result := '居左';
    if Align='taRightJustify' then Result := '居右';
  end;
  //将对齐的字符串转换成TAlignment
  function GetAlign(Align: String): TAlignment;
  begin
    if Align='taCenter' then Result := taCenter;
    if Align='taLeftJustify' then Result := taLeftJustify;
    if Align='taRightJustify' then Result := taRightJustify;
  end;
var
  SenderGrid: TDBGrid;
  frPrintGrid: TfrPrintGrid;
  Orientation: TPrinterOrientation;
  qurTmp: TQuery;
  PageHeader, PageFooter: String;
begin
  qurTmp:=TQuery.Create(nil);
  qurTmp.DatabaseName:='DBMain';
  SenderGrid := TDBGrid.Create(nil);
  frPrintGrid := TfrPrintGrid.Create(nil);
  qurTmp.Close;
  qurTmp.SQL.Clear;
  qurTmp.SQL.Add('if not exists(select * from Sys_ReportSet where QFormName=:QFormName and Flag=:Flag) '
    +' insert into Sys_ReportSet(QFormName,Flag) values (:QFormName,:Flag)'
    +' select * from Sys_ReportSet where QFormName=:QFormName and Flag=:Flag ');
  qurTmp.ParamByName('QFormName').AsString := QFormName;
  qurTmp.ParamByName('Flag').AsInteger := Flag;
  qurTmp.Open;
  //导入打印设置数据
  try
    AssignPrintGrid(SenderGrid,SourceGrid);
    frPrintGrid.DBGrid := SenderGrid;
    //打印方式读取转换   poLandscape竖打  poPortrait横打
    Orientation := poPortrait;
    if qurTmp.FieldByName('Orientation').AsString = 'poLandscape' then Orientation := poLandscape;
    frPrintGrid.Orientation := Orientation;
    frPrintGrid.PageHeight := qurTmp.FieldByName('PageHeight').AsInteger;
    frPrintGrid.PageSize := qurTmp.FieldByName('PageSize').AsInteger;
    frPrintGrid.Title.Text := qurTmp.FieldByName('TitleText').AsString;
    frPrintGrid.Title.Align := GetAlign(qurTmp.FieldByName('TitleAlign').AsString);
    frPrintGrid.Title.Font.Name := qurTmp.FieldByName('TitleFontName').AsString;
    frPrintGrid.Title.Font.Size := qurTmp.FieldByName('TitleFontSize').AsInteger;
    frPrintGrid.Header.Color := clCream;
    frPrintGrid.Header.Font.Color := clBlack;
    frPrintGrid.PageHeader.Text := qurTmp.FieldByName('PageHeaderText').AsString;
    frPrintGrid.PageHeader.Align := GetAlign(qurTmp.FieldByName('PageHeaderAlign').AsString);
    frPrintGrid.PageHeader.Font.Name := qurTmp.FieldByName('PageHeaderFontName').AsString;
    frPrintGrid.PageHeader.Font.Size := qurTmp.FieldByName('PageHeaderFontSize').AsInteger;
    frPrintGrid.PageFooter.Text := qurTmp.FieldByName('PageFooterText').AsString;
    frPrintGrid.PageFooter.Align := GetAlign(qurTmp.FieldByName('PageFooterAlign').AsString);
    frPrintGrid.PageFooter.Font.Name := qurTmp.FieldByName('PageFooterFontName').AsString;
    frPrintGrid.PageFooter.Font.Size := qurTmp.FieldByName('PageFooterFontSize').AsInteger;
    //调整页头页脚的文本内容
    PageHeader := '';
    if qurTmp.FieldByName('Company').AsString<>'' then PageHeader := PageHeader + '编制单位:'+qurTmp.FieldByName('Company').AsString;
    PageHeader := PageHeader + '     起始日期 '+FormatDateTime('YYYY''年''MM''月''DD''日''',BeginDate)
      +'     结束日期 '+FormatDateTime('YYYY''年''MM''月''DD''日''',EndDate);
    PageHeader := PageHeader + '     统计类型 '+qurTmp.FieldByName('PType').AsString;
    frPrintGrid.PageHeader.Text := PageHeader;
    PageFooter := '';
    PageFooter := PageFooter + '操作员:'+Maker;
    if qurTmp.FieldByName('Context').AsString<>'' then PageFooter := PageFooter + '    '+qurTmp.FieldByName('Context').AsString;
    PageFooter := PageFooter + '                 页码:第[PAGE#]页 ';//共[TOTALPAGES#]页 ';
    frPrintGrid.PageFooter.Text := PageFooter; 
    if PInt=1 then frPrintGrid.ShowReport;
  finally
    SenderGrid.Free;
    frPrintGrid.Free;
    qurTmp.Free;
  end;
end;


procedure ExPortEh(SourceGrid: TDBGridEh);
var ExpClass:TDBGridEhExportClass;
    Ext:String;
    SaveDialog1:TSaveDialog ;
begin
  SaveDialog1:=TSaveDialog.create(nil);
  SaveDialog1.Filter := 'Microsoft Excel 文件|*.xls|Microsoft Word 文件|*.doc|htm 文件|*.htm|文本文件|*.txt';
  if SaveDialog1.Execute then
    begin
      case SaveDialog1.FilterIndex of
        4: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
        3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;
        2: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'doc'; end;
        1: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
      else
        ExpClass := nil; Ext := '';
      end;
      if ExpClass <> nil then
      begin
        if UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3)) <>
           UpperCase(Ext) then
          SaveDialog1.FileName := SaveDialog1.FileName + '.' + Ext;
        SaveDBGridEhToExportFile(ExpClass,SourceGrid,
             SaveDialog1.FileName,true);
      end;
   end;
end;

//*******************************************
//输入: MODID模板编码  
//处理: 将打印模板加载
//输出: 返回值 False True
//*******************************************
function LoadPrintModal(MODID: String; PrintRep: TfrReport): Boolean;
var qryReportsContent: TBlobField; qurTmp: TQuery;
begin
  Result := false;
  qurTmp := TQuery.Create(nil);
  qurTmp.DatabaseName := 'DBMain';
  //根据类别提取该类别当前有效报表模板
  with qurTmp do
  begin
    Close;
    SQL.Clear;
    SQL.Add('Select Content from SYS_Reports Where RTCode =:RTCode And CurrFlag=1');
    ParamByName('RTCode').AsString := MODID;
    Open;
    if RecordCount=0 then
    begin
      InfoOk('没有设置当前打印模板!');
      Exit;
    end;
  end;
  //根据提取到的报表模板设置报表格式
  //根据处理类别决定打印或预览
  DeleteFile(g_RepFileName);
  (qurTmp.Fields[0] as TBlobField).SaveToFile(g_RepFileName);
  PrintRep.LoadFromFile(g_RepFileName);
  Result := true;
  qurTmp.Free;
end;

//*******************************************
//输入: X,Y 纵横坐标  ZSeries线指针  Qstr备注信息  AColor线条颜色
//处理: 图表画点函数『纵横坐标』
//输出: 无
//*******************************************
procedure AddPoint(const x, y: Double; ZSeries: TLineSeries;
  Qstr: String; AColor: TColor);
begin
  with ZSeries do
  begin
    XValues.DateTime := true;
    AddXY(x,y,Qstr,AColor);
  end;
end;

end.

⌨️ 快捷键说明

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