📄 datamrp.pas
字号:
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 + -