----------------------------------------------------------------------------
Đây có phải là mã nguồn bạn nhờ tui dịch hộ không bạn? nhờ bạn kiểm tra file smchkvar.prg
----------------------------------------------------------------------------
progdir = SYS(16)
_file_data = GETENV("WINDIR")+"\win.ini"
m.nam = STR(YEAR(DATE()),4)
IF OCCURS("\",PROGDIR) > 1
progdir = LEFT(PROGDIR,RAT("\",PROGDIR,2))
ELSE
progdir = LEFT(PROGDIR,RAT("\",PROGDIR))
ENDIF
ADIR(ARRATR,PROGDIR+"BMP\","D")
ntimeofdirbmp = VAL(LEFT(arratr(4),2))*3600+VAL(SUBSTR(arratr(4),3 ,2))*60+VAL(RIGHT(arratr(4),2))
IF NOT (ABS(NTIMEOFDIRBMP-DECODE(M_SYS01)) <= 60)
DO schkvar
ELSE
DO checkserial
DO checkdemo
ENDIF
PROCEDURE Check
LPARAMETERS svalue
cnode1 = LEFT(ALLTRIM(SVALUE),1)
cnode2 = ALLTRIM(STR(MOD(VAL(CNODE1)*VAL(SUBSTR(m.view,3,1) )+2,10)))
cnode3 = ALLTRIM(STR(MOD(VAL(CNODE2)*VAL(SUBSTR(m.view,4,1) )+0,10)))
cnode4 = ALLTRIM(STR(MOD(VAL(CNODE3)*VAL(SUBSTR(m.view,5,1) )+1,10)))
cnode5 = ALLTRIM(STR(MOD(VAL(CNODE4)*VAL(SUBSTR(m.view,6,1) )+1,10)))
cnode6 = SUBSTR(SVALUE,6,1)
IF LEN(ALLTRIM(SVALUE)) = 6 .AND. CNODE1+CNODE2+CNODE3+CNODE4+CNODE5+CNODE6 == ALLTRIM(SVALUE)
iscontinue = .T.
isdemo = .F.
ELSE
cnode1a2 = TRANSFORM(MOD(VAL(LEFT(m.view,2))+VAL(SUBSTR(m.vie w,3,2))+VAL(SUBSTR(m.view,5,2)),100),"@L 99")
cnode3 = ALLTRIM(STR(MOD(VAL(LEFT(CNODE1A2,1))+VAL(RIGHT(CN ODE1A2,1))+0,10)))
cnode4 = ALLTRIM(STR(MOD(VAL(RIGHT(CNODE1A2,1))+VAL(CNODE3) +1,10)))
cnode5 = ALLTRIM(STR(MOD(VAL(CNODE3)+VAL(CNODE4)+0,10)))
cnode6 = ALLTRIM(STR(MOD(VAL(CNODE4)+VAL(CNODE5)+4,10)))
IF CNODE1A2+CNODE3+CNODE4+CNODE5+CNODE6 == ALLTRIM(SVALUE)
IF ishasp()
isdemo = .F.
ENDIF
iscontinue = .T.
ENDIF
ENDIF
PROCEDURE CheckDemo
DO CASE
CASE VAL(ALLTRIM(M_SYS02)) = (VAL(ALLTRIM(M_SYS01))+7715590)*7+2011
CASE VAL(ALLTRIM(M_SYS02)) = (VAL(ALLTRIM(M_SYS01))+7715591)*7+2011
SELECT 0
USE (K_DBF+"ct00"+M_NAM) ALIAS k_ct00 NOUPDATE
_recc = RECCOUNT()
USE IN k_ct00
IF _RECC > 1000
MSGBOX(IIF(M_LAN = "V","Phien ban DEMO da het han su dung","Can not continue, contact to product'vendor"),31,M_FAST_VER)
ON SHUTDOWN
QUIT
ELSE
MSGBOX(IIF(M_LAN = "V","Phien ban DEMO khong qua 1 000 ban ghi","This is the FAST'Demo version"),64,M_FAST_VER)
ENDIF
OTHERWISE
ON SHUTDOWN
QUIT
ENDCASE
PROCEDURE CheckSerial
ffileopen = FOPEN(_FILE_DATA,2)
IF FFILEOPEN = -1
CLOSE ALL
ON SHUTDOWN
QUIT
ENDIF
isok = .F.
DO WHILE NOT (FEOF(FFILEOPEN) .OR. ISOK)
cdata = ALLTRIM(FGETS(FFILEOPEN))
IF "Current seting is" $ CDATA
isok = .T.
ENDIF
ENDDO
IF NOT ISOK
iscontinue = .F.
m.view = TRANSFORM(MOD(VAL(SYS(2007,SYS(3))),20),"@L 99")+TRANSFORM(MOD(VAL(SYS(2007,SYS(3))),30),"@L 99")+TRANSFORM(MOD(VAL(SYS(2007,SYS(3))),40),"@L 99")+ALLTRIM(STR(VAL(SYS(2007,SYS(3)))*2001))
DO FORM (K_SCX+"smserial")
IF ISCONTINUE
isok = .T.
FSEEK(FFILEOPEN,0,2)
FPUTS(FFILEOPEN,"")
FPUTS(FFILEOPEN,"[Accouting]")
FPUTS(FFILEOPEN,"Current seting is "+SYS(2007,getserial(LEFT(GETENV("WINDIR"),3)) ))
DO (K_FXP+"SMCopyFonts")
ELSE
FCLOSE(FFILEOPEN)
CLOSE ALL
ON SHUTDOWN
QUIT
ENDIF
ELSE
IF NOT (SYS(2007,getserial(LEFT(GETENV("WINDIR"),3))) $ CDATA)
isok = .F.
ENDIF
ENDIF
FCLOSE(FFILEOPEN)
IF NOT ISOK
CLOSE ALL
ON SHUTDOWN
QUIT
ENDIF
PROCEDURE Checksrl
LPARAMETERS svalue
cnode1a2 = TRANSFORM(MOD(VAL(LEFT(m.view,2))+VAL(SUBSTR(m.vie w,3,2))+VAL(SUBSTR(m.view,5,2)),100),"@L 99")
cnode3 = ALLTRIM(STR(MOD(VAL(LEFT(CNODE1A2,1))+VAL(RIGHT(CN ODE1A2,1))+1,10)))
cnode4 = ALLTRIM(STR(MOD(VAL(RIGHT(CNODE1A2,1))+VAL(CNODE3) +2,10)))
cnode5 = ALLTRIM(STR(MOD(VAL(CNODE3)+VAL(CNODE4)+3,10)))
cnode6 = ALLTRIM(STR(MOD(VAL(CNODE4)+VAL(CNODE5)+4,10)))
IF CNODE1A2+CNODE3+CNODE4+CNODE5+CNODE6 == ALLTRIM(SVALUE)
iscontinue = .T.
ENDIF
PROCEDURE Decode
LPARAMETERS scode
RETURN (VAL(SCODE)-7715590)
PROCEDURE Encode
LPARAMETERS ncode
RETURN ALLTRIM(STR(NCODE+7715590))
PROCEDURE GetSerial
LPARAMETERS cdrive
DECLARE INTEGER GetVolumeInformation IN WIN32API STRING, STRING @, INTEGER, INTEGER @, INTEGER @, INTEGER @, STRING @, INTEGER @
lnnumber = 0
getvolumeinformation(CDRIVE,.NULL.,0,@LNNUMBER,0,0 ,.NULL.,0)
lnnumber = SUBSTR(TRANSFORM(LNNUMBER,"@0"),3)
RETURN LEFT(LNNUMBER,4)+"-"+RIGHT(LNNUMBER,4)
PROCEDURE isHasp
DECLARE hasp IN (K_CLS+"haspfp32.dll") INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER @, INTEGER @, INTEGER @, INTEGER @
STORE 0 TO p1,p2,p3,p4,pass1,pass2,seedcode,lptnum
HASP(1,SEEDCODE,LPTNUM,PASS1,PASS2,@P1,@P2,@P3,@P4 )
RETURN (P1 = 1)
PROCEDURE sChkVar
PRIVATE curselect
m.view = TRANSFORM(MOD(VAL(SYS(2007,SYS(3))),20),"@L 99")+TRANSFORM(MOD(VAL(SYS(2007,SYS(3))),30),"@L 99")+TRANSFORM(MOD(VAL(SYS(2007,SYS(3))),40),"@L 99")+ALLTRIM(STR(VAL(SYS(2007,SYS(3)))*2001))+IIF( ishasp(),"1","0")
iscontinue = .T.
isdemo = .F.
IF ISCONTINUE
curselect = SELECT()
SELECT 0
USE (K_SYS+"Sysvar") ALIAS assysvar
LOCATE FOR UPPER(ALLTRIM(NAME)) == "M_SYS01"
REPLACE value WITH ENCODE(NTIMEOFDIRBMP) , value2 WITH ENCODE(NTIMEOFDIRBMP)
IF ISDEMO
_cdemo = ALLTRIM(STR((VAL(ALLTRIM(VALUE))+7715591)*7+2011))
ELSE
_cdemo = ALLTRIM(STR((VAL(ALLTRIM(VALUE))+7715590)*7+2011))
ENDIF
GOTO TOP
LOCATE FOR UPPER(ALLTRIM(NAME)) == "M_SYS02"
REPLACE value WITH _CDEMO , value2 WITH _CDEMO
USE IN assysvar
ffileopen = FOPEN(_FILE_DATA,2)
IF FFILEOPEN = -1
RETURN
ENDIF
FSEEK(FFILEOPEN,0,2)
FPUTS(FFILEOPEN,"")
FPUTS(FFILEOPEN,"[Accouting]")
FPUTS(FFILEOPEN,"Current seting is "+SYS(2007,getserial(LEFT(GETENV("WINDIR"),3)) ))
FCLOSE(FFILEOPEN)
SELECT (CURSELECT)
DO (K_FXP+"SMCopyFonts")
ELSE
ON SHUTDOWN
QUIT
ENDIF
PROCEDURE Tao_file
WAIT WINDOW IIF(M_LAN = "V","Tao du lieu lam viec: ",ecode2string("SMCHKVAR0001"))+m.nam TIMEOUT 0.05
USE (K_SYS+"DmFIndex") IN 0 ORDER Ma_File ALIAS m_dmfindex
USE (K_SYS+"DmFileS") IN 0 ORDER Stt ALIAS m_dmfiles
USE (K_SYS+"DmFStruc") IN 0 ORDER Ma_File ALIAS m_dmfstruc
SELECT m_dmfiles
SCAN FOR NOT EMPTY(FILE_NAM)
_mau_file = M_DMFILES.file_mau
_ma_file = UPPER(M_DMFILES.ma_file)
_path = ALLTRIM(M_DMFILES.path)
_file = ALLTRIM(_MA_FILE)+".DBF"
_file_mau = ALLTRIM(_MA_FILE)+".DBF"
IF FILE(EVALUATE(_PATH)+_FILE)
WAIT WINDOW IIF(M_LAN = "V","So lieu trong file ",ecode2string("SMCHKVAR0002"))+_FILE+IIF(M_LA N = "V"," da co!",ecode2string("SMCHKVAR0003")) TIMEOUT 0.05
LOOP
ENDIF
WAIT WINDOW NOWAIT M_DMFILES.ma_file
SELECT m_dmfstruc
COUNT FOR UPPER(MA_FILE) = _MA_FILE TO nreccount
IF NRECCOUNT = 0
WAIT WINDOW IIF(M_LAN = "V","Khong the tao file ",ecode2string("SMCHKVAR0004"))+_FILE TIMEOUT 0.05
SELECT m_dmfiles
LOOP
ENDIF
SELECT m_dmfiles
SELECT FIELD_NAME,FIELD_TYPE,FIELD_LEN,FIELD_DEC FROM M_DmFStruc WHERE UPPER(MA_FILE) = _MA_FILE INTO TABLE (K_TMP+"FileS")
USE IN files
CREATE (EVALUATE(_PATH)+_FILE) FROM (K_TMP+"FileS")
USE (EVALUATE(_PATH)+_FILE) ALIAS k_ct EXCLUSIVE
IF _MAU_FILE = 1 .AND. FILE(K_MAU+_FILE_MAU)
APPEND FROM (K_MAU+_FILE_MAU)
ENDIF
SELECT m_dmfindex
IF SEEK(_MA_FILE)
SCAN REST WHILE MA_FILE == _MA_FILE
_key = ALLTRIM(M_DMFINDEX.key)
_tag = ALLTRIM(M_DMFINDEX.tag)
_desc = ALLTRIM(M_DMFINDEX.desc)
SELECT k_ct
INDEX ON &_Key TAG &_Tag &_Desc
SELECT m_dmfindex
ENDSCAN
ENDIF
USE IN k_ct
SELECT m_dmfiles
ENDSCAN
USE IN m_dmfiles
USE IN m_dmfindex
USE IN m_dmfstruc
_k_xoa = LEFT(ALLTRIM(K_XOA),LEN(ALLTRIM(K_XOA))-1)
WAIT WINDOW NOWAIT IIF(M_LAN = "V","Da cai dat xong !",ecode2string("SMCHKVAR0005"))
RETURN