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

📄 datamrp.pas

📁 飞恒进销存,从盒子上下来的,不知这里有没有.
💻 PAS
📖 第 1 页 / 共 4 页
字号:
unit dataMRP;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db,  printers ,stdctrls,registry,math ;

Const
  CopyRight='清远市飞恒软件工程公司';
  Developer='FeiHengSoftwareBuildedBySunXiaoMing';
  Software='酒店信息管理系统';
  EncodeKey=#143#7#91#37;

  MaxMDIChild=5; //may open mdichild

  DataSQL5=1;    //Data source is sqlanywhere 5
  DataAccess=2;  //is Access 97
  DataSQL7=3;    //is sql 7
  DataError=4;    //is error data ,***security use

  HCBBGHotel=1;  //环城步步高
  GuestHouse=2;  //迎宾馆
  ZXHotel=3;     //正鑫
  GuestFood=4;  //迎宾馆仓库
  CYHotel=5;  //翠苑宾馆

  YongShen=11;   //永盛
  HuanChen=12;   //华泰
  XinDa=13;      //信达
  YongXin=14;    //文明
  QuanWei=15;    //权威
  DuZhongWei=16; //杜忠伟 access
  HaoLong=17;    //浩隆,环城日用,大名行,明惠,新大地,建兴
  HuiChun=18;
  ZhenDa=19;   //正大,第三级固定

type
  TDataPub = class(TDataModule)
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    nDatabaseType,nDatabaseTypeTmp:integer;
    StoreName,barcode1,sUser,sUsrName,sCustomer,sBillTail:string;
    sPrinter,sAddress,sTelphone:string;     // store chinese name, app's caption
    sPassword:string;
    printOption:boolean;          // true print,false preview  , used in paydlg
    bBackup:boolean;              //have backup data

    nStoreId:integer;
    sStoreName,sWHName,sWhId:string;

    HotelName,sName,HotelId:string;
    InstallDate:Tdatetime;

    //for same form use
    softName:string;
    // software set for one hotel
    HotelSpe:integer;
    myInvodate:tDatetime; //财务日
    ReportPath:string;    //报表路径
    OrderType:string;

    //in setemp seted
    bNoStore,bExtraPage,bCloseOut,bPrintIn:boolean;
    bPrintFrame:boolean; //由打印边框 改为 作废单不保留
    bExpDate:boolean;
    bNetFresh:boolean;
    bZone:boolean;//分区价格管理
    bPenStyle:boolean; //出仓单为实线 改为 自动客户价
    nSysPaper,nSysCopy:integer;
    nSysLevel1,nSyslevel2,nSysLevel3:integer;
    bWholeSale:boolean;    //sale or whole sale
    nSysItemPerPage,nSysLine:integer;
    nPageAdd:integer;    //页长附加值 4,因为打300K打印进纸不准确
    nPageWidth:integer;  //页宽 default=190
    nFontSize:integer;   //字体大小 default=11
    b7Seq:boolean;       //采用7位顺序号
    nSaveDataDay:integer;//字体大小 default=11
    bFIFO:boolean;      //先进先出
    bSafe:boolean;      //清除删除数据,即:清除前,设为0,
                        //因为只删除,在二进制可见
    bOutUnit2:boolean;  //出仓零数价优先
    nSumbit:integer;    //保留小数位数
    nInpriceType:integer; //库存进价方式:平均价,最新价
    bPrnCusTel:boolean; //出仓单打印客户电话
    bAutoIO:boolean;    //出入库自动统计
    nBillStyle:integer; //出仓单样式号 0:普通 1:美雅装饰
    bZeroProfit:boolean;    //出仓价为0 计利润
    bPrintBarcode:boolean;    //出仓时打印条形码
    nPageTopMargin,nPageBottomMargin:integer;    //页顶,底部留空(1,9)
    bSalePos:boolean; //零售时用条形码

    sPrnMemo,sPrnMemo2:string;
    //Can search inprice
    bInPrice:boolean;
    sSelection,sDataPath:string;

    SavePlace: TBookmark; //进入商品浏览时,保存当前数据位置
    //sSetEmp:string;       //控制页面的可见


    //物品单位
    aUnit : array  [1..2,1..10] of string;

    // form's width and height
    nFormWidth:integer;//=627;
    nFormHeight:integer;//=414;// have toolbar is 386;

    nNowFormWidth,nNowFormHeight :integer;
    nOrgFormWidth,nOrgFormHeight:integer;

    function myDatetostr(xDate:Tdatetime):string;
    function GetLastMonth(xDate:TDatetime):Tdatetime;
    function GetMonthFirst(xDate:TDatetime):Tdatetime;
    Function CheckNewStore(sTableName:string):boolean;
    function getInvoNo:string;
    function getInStoreNo:string;
    function getOrderNo:string;    
    function ReadInvoNo:string;
    procedure RepairCFG;    
    Function Int2ToStrPad0(N:LongInt;ch:char;Len:integer):string;
    Function StrPadCh(sStr:string;ch:char;Len:integer):string;
    Function MoneyToStr(nAmount:real):string;
    function GetCredID(date1:TDatetime;n:integer):string;
    Function SetSize(nSize,nType:integer):integer;
    Function SetSize2(form1:TForm;nSize,nType,nPercent:integer):integer;
    procedure SetSize1(form1:TForm;control1:TControl;nType,nPercent:integer);
    Function ToMyValue(oldValue:real):real;
    Function GetPinYin(sName:string):string;
    Function GetLetter(nAsc:integer):char;
    Function ExcelColStr(nCol:integer):string; //返回EXCEL行串 A-Z AA-AZ BA-BZ

    procedure DecodeSelection;
    procedure EncodeHotel ;
    procedure DecodeOneHotel ;

    function EncodeString(mCusName,mKey:string):string;
    function SerialNo(mString: string): string;
    function RegisterCode(mstring,mCusNo :string):string;
    function ReadRegistry:string;
    function WriteRegistry:boolean;
    function GetWindowsPlatFormId:integer;

    Function GetSql(sFunc:string):string;
    procedure InsertLedger(sInvono,sName,sInout,sSaler,sBuyer,sWarehouseman,sOthers:string;nPay,nPay1:real;dIODate:Tdatetime);
    procedure InsertOrder(sInvono,sName,sCompanyId,sSaler,sInout:string;nAmount:real;dIoDate:TDatetime);
    procedure UpdateOrder(sInvono:string;nAmount:real);
    procedure CancelOrder(sInvono:string);
    procedure UpCusbill(sId,sBarcode:string;nOldPrice,nNewPrice:real);
    procedure InsertIOstore(bClearSql:boolean;nDirection,nSeq:integer;sInvo,
      sbarcode,sunits,smemo1:string;nQty,
      nprice,nProfit,nBal_qty,nBal_price,nCost:real;IODate,pro_date,exp_date:Tdatetime);
    procedure UpExpDate(nQty1:real;nseq:integer;sInvo:string);
    procedure UpdateTarStore(bClearSql:boolean;sTarStore,Barcode:string;nQty,nLastQty:real);
    procedure UpdatePOSStore(Barcode,sUnits,sUnit2:string;nQty,nLastQty,nPerQty,nOutQty:real);
    procedure UpdateOutProfit(sInvoNo,sbarcode:string;nProfit,nCost:real);
    procedure DeleteOldData(dDelDate:Tdatetime);
    Function  DoFIFO(nQty,nLastQty,nSaleprice,nPerQty,nInprice:real;sBarcode,sUnits:string):real;
    Function  BackFIFO(nQty,nLastQty,nSaleprice,nPerQty,nInprice:real;sBarcode,sUnits:string):real;
    procedure UpdateOneFIFO(sInvo:string;nseq:integer;nQty1:real);
    procedure InsEvent(appopr,description:string);
    procedure InsFinanceUpBank(sBankId,sCusName,sother:string;nDebits,nCredits:real;dIndate:tDatetime);
    procedure PayToLend(dIodate1,dIoDate2:TDatetime;sCusName:string);
    procedure UpDeposit(sCardno:string;nAmount:real);    
  end;

var
  DataPub: TDataPub;

implementation
uses datamodule1;

{$R *.DFM}
Function TDataPub.myDatetostr(xDate:Tdatetime):string;
var
   s:string;
begin
     if ShortDateFormat<>'yyyy-mm-dd' then
     begin
       DateSeparator := '-';
       ShortDateFormat:='yyyy-mm-dd';
       Longtimeformat:='hh:mm';
     end;

     s:=datetostr(xdate);
     ReSult:=copy(s,1,4);
     result:=result+copy(s,6,2)+copy(s,9,2)
end;

function int2strPad0(N:integer;Len:integer):string;
begin
     FmtStr(Result,'%d',[N]);
     while Length(Result)<Len do
           Result:='0'+Result;
end;

//出仓单编号,7位编码 零售用条形码,财务日人工转
Function TDataPub.GetInvono:string;
var
   s,s1:string;
   nSeq:integer;
begin
  with dataModule2 do
  begin
     ShortDateFormat:='yyyy-mm-dd';
     queryCfg.sql.clear;
     queryCfg.sql.Add('select invodate,invoseq from cfg');
     queryCfg.open;
     myInvodate:=queryCfg.fieldbyname('Invodate').asDatetime;
     nSeq:=queryCfg.fieldbyname('invoseq').asinteger;
     queryCfg.close;
     if (datapub.myInvodate>=date) or b7Seq then
     begin
       nSeq:=nSeq+1;
       queryCfg.sql.clear;
       queryCfg.sql.add('update cfg set invoseq= :seq');
       querycfg.params[0].asinteger:=nSeq;
       queryCfg.execsql;  end
     else  begin
       nSeq:=1;
       myInvodate:=date;
       queryCfg.sql.clear;
       queryCfg.sql.add('update cfg set inseq=0,invoseq=1,OrderSeq=0,invodate= :invodate');
       querycfg.params[0].asdatetime:=myInvodate;
       queryCfg.execsql;
     end;
  end; //end of datamodule2

  s:=datetostr(datapub.myInvodate);
  s1:=copy(s,1,4);
  s:=s1+copy(s,6,2)+copy(s,9,2);

  if b7Seq then
    result:=int2ToStrPad0(nSeq,'0',7)
  else
    result:=s+'.'+int2ToStrPad0(nSeq,'0',4);
end;

Function TDataPub.GetInStoreNo:string; //入仓单编号
var
   s,s1:string;
   nSeq:integer;
begin
  with dataModule2 do
  begin
     ShortDateFormat:='yyyy-mm-dd';
     queryCfg.sql.clear;
     queryCfg.sql.Add('select * from cfg');
     queryCfg.open;
     myInvodate:=queryCfg.fieldbyname('Invodate').asDatetime;
     nSeq:=queryCfg.fieldbyname('inseq').asinteger;
     queryCfg.close;
     if (myInvoDate>=date) or b7Seq  then
     begin
       nSeq:=nSeq+1;
       queryCfg.sql.clear;
       queryCfg.sql.add('update cfg set inseq= :seq');
       querycfg.params[0].asinteger:=nSeq;
       queryCfg.execsql;     end
     else  begin
       nSeq:=1;
       myInvodate:=date;
       queryCfg.sql.clear;
       queryCfg.sql.add('update cfg set inseq=1,invoseq=0,OrderSeq=0,invodate= :invodate');
       querycfg.params[0].asdatetime:=myInvoDate;
       queryCfg.execsql;
     end;
  end; //end of datamodule2

  s:=datetostr(myInvodate);
  s1:=copy(s,1,4);
  s:=s1+copy(s,6,2)+copy(s,9,2);

  if b7Seq then
    result:=int2ToStrPad0(nSeq,'0',7)
  else
    result:=s+'-'+int2ToStrPad0(nSeq,'0',4);
end;

Function TDataPub.GetOrderNo:string; //订单编号
var
   s,s1:string;
   nSeq:integer;
begin
  with dataModule2 do
  begin
     ShortDateFormat:='yyyy-mm-dd';
     queryCfg.sql.clear;
     queryCfg.sql.Add('select * from cfg');
     queryCfg.open;
     myInvodate:=queryCfg.fieldbyname('Invodate').asDatetime;
     nSeq:=queryCfg.fieldbyname('OrderSeq').asinteger;
     queryCfg.close;
     if (myInvoDate>=date) or b7Seq then
     begin
       nSeq:=nSeq+1;
       queryCfg.sql.clear;
       queryCfg.sql.add('update cfg set OrderSeq= :OrderSeq');
       querycfg.params[0].asinteger:=nSeq;
       queryCfg.execsql;     end
     else  begin
       nSeq:=1;
       myInvodate:=date;
       queryCfg.sql.clear;
       queryCfg.sql.add('update cfg set inseq=0,invoseq=0,OrderSeq=1,invodate= :invodate');
       querycfg.params[0].asdatetime:=myInvoDate;
       queryCfg.execsql;
     end;
  end; //end of datamodule2

  s:=datetostr(myInvodate);
  s1:=copy(s,1,4);
  s:=s1+copy(s,6,2)+copy(s,9,2);

  if b7Seq then
    result:=int2ToStrPad0(nSeq,'0',7)
  else
    result:=s+'*'+int2ToStrPad0(nSeq,'0',4);
end;

Function TDataPub.ReadInvono:string;
var
   s,s1:string;
   nowDate:TDatetime;
   nSeq:integer;
begin
  with datamodule2 do
  begin
     ShortDateFormat:='yyyy-mm-dd';
     if queryCfg.active then queryCfg.close;
     queryCfg.sql.clear;
     queryCfg.sql.Add('select * from cfg');
     queryCfg.open;
     NowDate:=queryCfg.fieldbyname('Invodate').asDatetime;
     nSeq:=queryCfg.fieldbyname('invoseq').asinteger;
     queryCfg.close;
  end; //end of datamoudle

  s:=datetostr(Nowdate);
  s1:=copy(s,1,4);
  s:=s1+copy(s,6,2)+copy(s,9,2);

  result:=s+'.'+int2ToStrPad0(nSeq,'0',4);
end;


procedure TDataPub.RepairCFG;
var
   s,s1:string;
   nowDate:TDatetime;
   nInvoSeq,nInSeq,nOrderSeq,nTmp:integer;
begin
  with datamodule2 do
  begin
     ShortDateFormat:='yyyy-mm-dd';
     if queryCfg.active then queryCfg.close;
     queryCfg.sql.clear;
     queryCfg.sql.Add('select * from cfg');
     queryCfg.open;
     NowDate:=queryCfg.fieldbyname('Invodate').asDatetime;
     nInvoSeq:=queryCfg.fieldbyname('invoseq').asinteger;
     nInSeq:=queryCfg.fieldbyname('inseq').asinteger;
     nOrderSeq:=queryCfg.fieldbyname('OrderSeq').asinteger;

     //非7位编号
     if not datapub.b7Seq then
     begin
       queryCfg.close;
       querycfg.sql.clear;
       queryCfg.sql.add('select max(invono) as mInvono from ledger where Invono like :Invono');

       querycfg.params[0].asstring:=myDateToStr(nowdate)+'.%';
       querycfg.open;
       if not querycfg.eof then
       begin
         s:=querycfg.fieldbyname('mInvono').asstring;
         if s='' then nTmp:=0
           else nTmp:=strToint(copy(s,10,4));
         if (nTmp > nInvoSeq) or (nInvoseq > 9999) then nInvoseq:=nTmp;
       end;

       queryCfg.close;
       querycfg.params[0].asstring:=myDateToStr(nowdate)+'-%';
       querycfg.open;
       if not querycfg.eof then
       begin
         s:=querycfg.fieldbyname('mInvono').asstring;
         if s='' then nTmp:=0 else nTmp:=strToint(copy(s,10,4));
         if (nTmp > nInSeq) or (nInseq > 9999) then nInseq:=nTmp;
       end;

       queryCfg.close;
       querycfg.params[0].asstring:=myDateToStr(nowdate)+'*%';
       querycfg.open;
       if not querycfg.eof then
       begin
         s:=querycfg.fieldbyname('mInvono').asstring;
         if s='' then nTmp:=0 else nTmp:=strToint(copy(s,10,4));
         if (nTmp > nOrderSeq) or (nOrderseq > 9999) then nOrderseq:=nTmp;
       end;end
     else  begin
       queryCfg.close;
       querycfg.sql.clear;
       queryCfg.sql.add('select max(invono) as mInvono from ledger where inout= :inout and len(invono) < 10');

       querycfg.params[0].asstring:='O';
       querycfg.open;
       if not querycfg.eof then
       begin
         s:=querycfg.fieldbyname('mInvono').asstring;
         if s='' then nTmp:=0 else  nTmp:=strToint(s);
         if nTmp > nInvoSeq then nInvoseq:=nTmp;
       end;

       queryCfg.close;
       querycfg.params[0].asstring:='I';
       querycfg.open;
       if not querycfg.eof then
       begin
         s:=querycfg.fieldbyname('mInvono').asstring;
         if s='' then nTmp:=0 else  nTmp:=strToint(s);
         if nTmp > nInSeq then nInseq:=nTmp;
       end;

       //nInseq,nInvoseq 之差 > 100 000
       if abs(nInvoseq-nInseq) < 100000 then
         nInvoSeq:=nInvoseq +  1000000 ;

       queryCfg.close;
       querycfg.sql.clear;
       queryCfg.sql.add('select max(invono) as mInvono from orders where len(invono) < 10');

⌨️ 快捷键说明

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