ADVPL Básico

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 51

1

10

11

12

13

14

15

16

17

18

19

20

21

22

23

( X := 10 , Y := 20 )

// Lista de Expresiones

{|| X := 10 , Y := 20 } // Bloque de Cdigo

// Esto es una matriz de datos A := {10, 20, 30} // Esto es un bloque de cdigo, sin embargo funciona como //si fuese una matriz de comandos. B := {|| x := 10, y := 20}

24

25
IF lExpresion //Comandos ELSE //Comandos ENDIF &&Si es falsa &&Si es verdadera

IF <condicion> //Comandos ENDIF &&Si es verdadera

DO CASE CASE lExpresion1 [CASE lExpresion2] //Comandos [CASE lExpresionN] //Comandos [OTHERWISE] //Comandos ENDCASE

26

WHILE lExpresion1 //Comandos [EXIT] [LOOP] ENDDO

27

28

#include "Rwmake.ch" User function msg1() cNome:= 'Microsiga' msgAlert('Hola Mundo') Return cNome

User Function Cuadro1()

Local cTit := OemtoAnsi("Ventana de Interaccion avanzada") Local cMsj1 := "De esta manera podemos generar cuadros de dialogo" Local cMsj2 Local cOCIn := "para interactuar con el cliente" := " "

Local cOCFn := "ZZZZZZ" Local cFini Local cFfin Local cFac1:= Local cFac2:= Local cFac3:= Local cFac4:= Local cFac5:= Local cFac6:= Local cFac7:= Local cFac8:= Local cFac9:= Local cLinea:= _clave:="" := "" := "" 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 "ACA"

@ 0,0 TO 250,359 DIALOG oDlg TITLE cTit @ 01,02 TO 107,179 @ 03,04 TO 105,177 @ 08,12 Say cMsj1 @ 16,12 Say cMsj2 @ 28,12 Say "L I N E A"

@ 28,47 Get cLinea size 40,10 When .F. Picture "@!" //F3 "SMB" //Valid (cOCIn<=cOCFn) @ 28,95 Say "1 - Precio 0" @ 28,130 Get cFac1 size 40,10 Picture "@E 999.99" // F3 "SZ1"// Valid (cOCFn>=cOCIn)

29
@ 43,12 Say "2 - Costo @ 43,47 Get " Picture "@E 999.99" //Valid (cFini<=cFfin) cFac2 size 40,10

@ 43,95 Say "3 - Precio 1" @ 43,130 Get cFac3 size 40,10 Picture "@E 999.99" @ 58,12 Say "4 - Precio 2" @ 58,47 Get cFac4 size 40,10 Picture "@E 999.99" //Valid (cFini<=cFfin) //Valid (cFfin>=cFini)

@ 58,95 Say "5 - Precio 3" @ 58,130 Get cFac5 size 40,10 Picture "@E 999.99" @ 73,12 Say "6 - P. Venta" @ 73,47 Get cFac6 size 40,10 Picture "@E 999.99" //Valid (cFini<=cFfin) //Valid (cFfin>=cFini)

@ 73,95 Say "7 - Pr. 3+5%" @ 73,130 Get cFac7 size 40,10 Picture "@E 999.99" @ 88,12 Say "8 - Pr.3+10%" @ 88,47 Get cFac8 size 40,10 Picture "@E 999.99" //Valid (cFini<=cFfin) //Valid (cFfin>=cFini)

@ 88,95 Say "9 - Pr.3+15%" @ 88,130 Get cFac9 size 40,10 Picture "@E 999.99" //Valid (cFfin>=cFini)

@ 110,118 BMPBUTTON TYPE 1 ACTION u_msg1() @ 110,150 BMPBUTTON TYPE 2 ACTION oDlg:End()

ACTIVATE DIALOG oDlg CENTERED Return

30

31
user function funcion5 rpcsetenv("99","01") // "Define la empresa y filial en la que queremos trabajar" Conout('La filial es ' + CFILANT) Conout('La empresa es ' + CEMPANT) IF XFILIAL('SA1') ==' '

Conout('La tabla SA1 es compartida') else Conout('La tabla SA1 es exclusiva, y estoy en la filial ' + XFILIAL('SA1') ) endif IF XFILIAL('SB1') ==' '

Conout('La tabla SB1 es compartida') else Conout('La tabla es SB1 exclusiva, y estoy en la filial ' + XFILIAL('SB1') ) endif return

user Function Funcion1() Local n rpcsetenv("99","01") FOR n:= 1 to 10 Funcion2(n) Conout( ' ' ) sleep( 1000 ) Next Return

Static function Funcion2(_n) Local nIni, nIni2,nAnt,nAct,nRecords,nTotRecords,i local c_variable:= ""

dDatabase= Date() Conout( DToc(dDatabase) + ' ' +Time() + '|' +Str(_n) + ' | ' +'Inicia Rutina usuarios-> ' + ' | ' + LTrim( Str(Len(GetUserInfoArray() )) ) ) SX5->( dbGoTop() ) nIni := Seconds() nAnt:= nIni nRecords:=0 nTotRecords:=0 While ! SX5->( Eof() ) SX5->( dbSkip() ) nRecords:=nRecords + 1 if nRecords >= 600

32
nTotRecords:=nTotRecords+nRecords nRecords=0 nAct = Seconds() Conout(DToc(dDatabase) + ' ' + Time() + '|' +Str(_n) + ' | ' + '600 Records DBSkip ' | ' + LTrim( Str( nAct - nAnt ) ) ) nAnt:=nAct end if Enddo Conout(DToc(dDatabase) + ' ' + Time() + '|' +Str(_n) + ' | ' + ' | ' +LTrim( Str( Seconds() - nIni ) ) ) nIni := Seconds() nAnt:= nIni FOR i:= 1 to 5000 c_variable:=Str(i) Next Conout( DToc(dDatabase) + ' ' + Time() + '|' +Str(_n) + ' | ' ' | ' + LTrim( Str( Seconds() - nIni ) ) ) +'Tempo Total Ciclo ' + + 'Tempo Total DBSkip ' ' +

nAnt:= nIni FOR i:= 1 to 5000 c_variable:=GETMV("MV_BOX") Next Conout(DToc(dDatabase) + ' ' + Time() + '|' +Str(_n) + ' | ' ' | '+LTrim( Str( Seconds() - nIni ) ) ) nAnt:= nIni FOR i:= 1 to 5000 SX2->( dbSeek( "SA1" ) ) SX2->( dbSeek( "SD2" ) ) SX2->( dbSeek( "SF1" ) ) SX2->( dbSeek( "SA3" ) ) SX2->( dbSeek( "SF2" ) ) SX2->( dbSeek( "SRA" ) ) Next Conout(DToc(dDatabase) + ' ' + Time() + '|' +Str(_n) + ' | ' ' | ' +LTrim( Str( Seconds() - nIni ) ) ) Return + 'Tempo Total Lectura SX2 ' + + 'Tempo Total Lectura SX6 ' +

33

34

35

//GENERA UN NOMBRE ESPECIAL PARA LA TABLA TEMPORAL cAliasBus:=criatrab(nil,.f.)

//RECUPERA EL NOMBRE FISICO DE LAS TABLA EN LA BASE cSC7RetSqlName := InitSqlName( "SC7" ) cSB1RetSqlName := InitSqlName( "SB1" )

//RECUPERA LA FILIAL DE LA TABLA cFilSc7:=xfilial("SC7") cFilSB1:=xfilial("SB1")

//A CONTINUACION COLOCA EN UNA VARIABLE LA

SENTENCIA DE CONSULTA

cQuery := "Select C7_EMISSAO,C7_FORNECE,C7_PRODUTO " cQuery += " FROM " + cSC7RetSqlName + " SC7,"+ cSB1RetSqlName + " SB1" cQuery += " WHERE C7_FILIAL = '"+cFilSc7+"'" cQuery += "AND B1_FILIAL = '"+cFilSB1+"'" cQuery += " AND C7_PRODUTO = B1_COD "

cQuery += " AND C7_PRODUTO >= '"+alltrim(cProdi)+"' cQuery += " AND C7_PRODUTO <= '"+alltrim(cProdf)+"' cQuery += " AND B1_GRUPO >= '"+alltrim(cGPO1)+"'

36
cQuery += " AND B1_GRUPO <= '"+alltrim(cGPO2)+"' cQuery += " AND C7_EMISSAO <= '"+DTOS(dFecSis)+"'" //OBSERVE COMO ES EL TRATAMIENTO PARA LAS FECHAS cQuery += " AND C7_EMISSAO >= '"+DTOS(dFecSis-90)+"'" cQuery += " AND SD1.D_E_L_E_T_=' ' AND SC7.D_E_L_E_T_=' '"

cQuery += " order by C7_FORNECE,C7_PRODUTO"

//INTERPRETA EL QUERY cQuery := ChangeQuery(cQuery) //COLOCA RESULTADO DEL QUERY EN TABLA TEMPORAL cAliasBus dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasBus,.T.,.T.)

//PROCESA LA INFORMACION DEL RESULTADO While (cAliasBus)->(!eof())

cTmpPrv:=(cAliasBus)->C7_FORNECE cTmpCod:=(cAliasBus)->C7_PRODUTO (cAliasBus)->(dbskip()) enddo (cAliasBus)->( dbCloseArea() ) //CIERRA TABLA TEMPORAL E INTERNAMENTE LA ELIMINA //SALTA AL SIGUIENTE REGISTRO

37

//COLOCA EN UNA VARIABLE EL COMANDO SQL cStrQty := "DELETE FROM "

PARA ELIMINACION DE REGISTROS

cStrQty += RetSqlName("SZ2") " //RECUPERA NOMBRE FISICO DE LA TABLA ACTUA IGUAL AL COMANDO InitSqlName cStrQty += " WHERE Z2_FILIAL='"+cFilSA1+"' AND Z2_CODCLI = '"+alltrim(cCodSA1)+ "'" //EJECUTA ACCCION DEL QUERY nResultado:=TcSqlExec(cStrQty) //AVISO SI HUBO ERROR EN QUERY if nResultado <> 0 msgAlert(No logro eliminar datos de la tabla SZ2) endif

38

//GENERA UNA CONSULTA CONDICIONADO DE LA MISMA FORMA COMO ESTARA EL QUERY DE ACTUALIZACION, CON EL OBJETIVO DE SACAR EL NUMERO DE REGISTRO FISICO MAXIMO Y MINIMO QUE PARTICIPARAN EN EL PROCESO cAliasSB2 := "SB2MA215PROC" cQuery := "SELECT MIN(R_E_C_N_O_) MINRECNO," cQuery += "MAX(R_E_C_N_O_) MAXRECNO " cQuery += "FROM "+RetSqlName("SB2")+" " cQuery += "WHERE B2_FILIAL='"+xFilial("SB2")+"' AND " cQuery += "D_E_L_E_T_=' '"

cQuery := ChangeQuery(cQuery) dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasSB2) nMax := (cAliasSB2)->MAXRECNO nMin := (cAliasSB2)->MINRECNO cAliasSB2->(dbCloseArea()) //UNA VEZ OBTENIDAS LAS POSICIONES DELOS REGISTROS MAXIMO Y MINIMO PROCEDE ELABORAR EL QUERY dbSelectArea("SB2") cQuery := "UPDATE " cQuery += RetSqlName("SB2")+" " cQuery += "SET B2_RESERVA = 0," cQuery += "B2_RESERV2 = 0," cQuery += "B2_QEMP cQuery += "B2_QEMP2 cQuery += "B2_QEMPN = 0," = 0," = 0,"

cQuery += "WHERE B2_FILIAL='"+xFilial("SB2")+"' AND " cQuery += "D_E_L_E_T_=' ' AND " //EN ESTE CICLO ES DONDE ESTAR EJECUTANDO POR BLOQUES LAS ACTUALIZACIONES ALOS REGISTROS For nX := nMin To nMax+4096 STEP 4096 cChave := "R_E_C_N_O_>="+Str(nX,10,0)+" AND R_E_C_N_O_<="+Str(nX+4096,10,0)+"" TcSqlExec(cQuery+cChave) //EJECUTA QUERY Next nX

39

40

#include Rwmake.ch User function Ejer01() cNome:= Microsiga msgAlert(Ejemplo de Funcion en Gatillos Return cNome

41

42

aXCadastro(cAlias,cTitulo,cDel,cOk)

43

Modelo2(cTtulo,aCabec,aRodap,aGd

,nOp [aGetsGD,bF4,cIniCpos,nMax,aCordw,lDelget])

,cLOk

,cTOk

44

//************************************************** // 3,4 Permitem alterar getdados e incluir linhas // 6 So permite alterar getdados e nao incluir linhas // Qualquer outro numero so visualiza nOpcx:=3 dbSelectArea(Sx3) dbSetOrder(1) dbSeek(SX5) nUsado:=0 aHeader:={}

While !Eof() .And. (x3_arquivo == SX5) IF X3USO(x3_usado) .AND. cNivel >= x3_nivel nUsado:=nUsado+1 AADD(aHeader,{ TRIM(x3_titulo),x3_campo,; x3_picture,x3_tamanho,x3_decimal,; ExecBlock(Md2valid,.f.,.f.),x3_usado,; x3_tipo, x3_arquivo, x3_context } ) Endif dbSkip() End

aCols:=Array(1,nUsado+1) dbSelectArea(Sx3) dbSeek(SX5) nUsado:=0

While !Eof() .And. (x3_arquivo == SX5) IF X3USO(x3_usado) .AND. cNivel >= x3_nivel nUsado:=nUsado+1 IF nOpcx == 3 IF x3_tipo == C aCOLS[1][nUsado] := SPACE(x3_tamanho) Elseif x3_tipo == N aCOLS[1][nUsado] := 0 Elseif x3_tipo == D aCOLS[1][nUsado] := dDataBase Elseif x3_tipo == M aCOLS[1][nUsado] := Else aCOLS[1][nUsado] := .F.

45
Endif Endif Endif dbSkip() End

aCOLS[1][nUsado+1] := .F. cCliente:=Space(6) cLoja :=Space(2) dData :=Date() nLinGetD:=0 cTitulo:=TESTE DE MODELO2" aC:={}

// aC[n,1] = Nome da Variavel Ex.:cCliente // aC[n,2] = Array com coordenadas do Get [x,y], em // Windows estao em PIXEL // aC[n,3] = Titulo do Campo // aC[n,4] = Picture // aC[n,5] = Validacao // aC[n,6] = F3 // aC[n,7] = Se campo e editavel .t. se nao .f.

#IFDEF WINDOWS AADD(aC,{cCliente ,{15,10} ,Cod. do Cliente,@!,; ExecBlock(MD2VLCLI,.F.,.F.),SA1",}) AADD(aC,{cLoja ,{15,200},Loja,@!,,,}) AADD(aC,{dData ,{27,10} ,Data de Emissao,,,,}) #ELSE AADD(aC,{cCliente ,{6,5} ,Cod. do Cliente,@!,; ExecBlock(MD2VLCLI,.F.,.F.),SA1",}) AADD(aC,{cLoja ,{6,40},Loja,@!,,,}) AADD(aC,{dData ,{7,5} ,Data de Emissao,,,,}) #ENDIF

aR:={} // aR[n,1] = Nome da Variavel Ex.:cCliente // aR[n,2] = Array com coordenadas do Get [x,y], em // Windows estao em PIXEL // aR[n,3] = Titulo do Campo // aR[n,4] = Picture // aR[n,5] = Validacao // aR[n,6] = F3

46
// aR[n,7] = Se campo e editavel .t. se nao .f.

#IFDEF WINDOWS AADD(aR,{nLinGetD ,{120,10},Linha na GetDados,; @E 999,,,.F.}) #ELSE AADD(aR,{nLinGetD ,{19,05},Linha na GetDados,; @E 999,,,.F.}) #ENDIF

#IFDEF WINDOWS aCGD:={44,5,118,315} #ELSE aCGD:={10,04,15,73} #ENDIF

cLinhaOk := ExecBlock(Md2LinOk,.f.,.f.) cTudoOk := ExecBlock(Md2TudOk,.f.,.f.) // lRet = .t. se confirmou // lRet = .f. se cancelou lRet:=Modelo2(cTitulo,aC,aR,aCGD,nOpcx,cLinhaOk,cTudoOk) // No Windows existe a funcao de apoio CallMOd2Obj() que // retorna o objeto Getdados Corrente Return

47

Modelo3(cTitulo,cAliasEnchoice,cAliasGetD,aCpoEnchoice,cLinOk,cTudOk,nOpcE,nOpcG,cFieldOk, [lVirtual,nLinhas,aAltEnchoice])

48
aRotina := {{ Pesquisa,AxPesqui, 0 , 1},; { Visual,AxVisual, 0 , 2},; { Inclui,AxInclui, 0 , 3},; { Altera,AxAltera, 0 , 4, 20 },; { Exclui,AxDeleta, 0 , 5, 21 }}

// // Opcoes de acesso para a Modelo 3 // cOpcao:=VISUALIZAR Do Case Case cOpcao==INCLUIR; nOpcE:=3 ; nOpcG:=3 Case cOpcao==ALTERAR; nOpcE:=3 ; nOpcG:=3 Case cOpcao==VISUALIZAR; nOpcE:=2 ; nOpcG:=2 EndCase

// // Cria variaveis M->????? da Enchoice // RegToMemory(SC5,(cOpcao==INCLUIR))

// // Cria aHeader e aCols da GetDados // nUsado:=0 dbSelectArea(SX3) dbSeek(SC6) aHeader:={}

While !Eof().And.(x3_arquivo==SC6") If Alltrim(x3_campo)==C6_ITEM dbSkip() Loop Endif If X3USO(x3_usado).And.cNivel>=x3_nivel nUsado:=nUsado+1 Aadd(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,; x3_tamanho, x3_decimal,AllwaysTrue(),; x3_usado, x3_tipo, x3_arquivo, x3_context } ) Endif dbSkip() End

49
If cOpcao==INCLUIR aCols:={Array(nUsado+1)} aCols[1,nUsado+1]:=.F. For _ni:=1 to nUsado aCols[1,_ni]:=CriaVar(aHeader[_ni,2]) Next Else aCols:={} dbSelectArea(SC6) dbSetOrder(1) dbSeek(xFilial()+M->C5_NUM) While !eof().and.C6_NUM==M->C5_NUM AADD(aCols,Array(nUsado+1)) For _ni:=1 to nUsado aCols[Len(aCols),_ni]:=FieldGet(FieldPos(aHeader[_ni,2])) Next aCols[Len(aCols),nUsado+1]:=.F. dbSkip() End Endif

If Len(aCols)>0 // // Executa a Modelo 3 // cTitulo:=Teste de Modelo3() cAliasEnchoice:=SC5" cAliasGetD:=SC6" cLinOk:=AllwaysTrue() cTudOk:=AllwaysTrue() cFieldOk:=AllwaysTrue() aCpoEnchoice:={C5_CLIENTE} _lRet:=Modelo3(cTitulo,cAliasEnchoice,cAliasGetD,aCpoEnchoice,cLinOk,cTudOk,nOpcE,nOpcG,cFieldOk)

// // Executar processamento // If _lRet Aviso(Modelo3(),Confirmada operacao!,{Ok}) Endif Endif Return

50

User Function <nome-da-funo>( ) Local bAcao := {|lFim| Exemplo(@lFim) } Local cTitulo := '' Local cMsg := 'Processando' Local lAborta := .T. Processa( bAcao, cTitulo, cMsg, lAborta ) Return

Static Function Exemplo(lFim) Local nI ProcRegua(10000) For nI := 1 To 10000 If lFim Exit EndIf INCPROC() Next nI Return

51

DbSelectArea(SA1) SetRegua(LastRec()) While ( ! Eof() ) @ Li, 001 PSAY SA1->A1_NOME DbSkip() IncRegua() End

También podría gustarte