Ajuda com Matriz Multidimensional
Enviado: 26 Fev 2018 20:54
por Paredes01
Hola
Ejemplo:
Voy guardando la información capturada:
AADD(aMA,{ cCOD ,; // 1
cDES ,; // 2
cMENU ,; // 3
nCANT ,; // 4
nPRECIO ,; // 5
nPUBL ,; // 6
cART22 ,; // 7
cTIPO ,; // 8
nIMP ,; // 9
nIVA ,; //10
cPROV ,; //11
nCOSTO ,; //12
nPRECIOX ,; //13
nPZAXCJA ,; //14
nPFAR ,; //15
cBARR ,; //16
cNADR ,; //17
cDEKA ,; //18
nD ,; //19
cONCO ,; //20
nDESCMAXF,; //21
nDESCMAXP,; //22
nCOSTO_P ,; //23
nCOSTO_U ,; //24
cSUN ,; //25
nIVASUN ,; //26
nIMPSUN ,; //27
nCANTOFTA,; //28
nPUBX ,; //29
cLINEA ,; //30
nDESCLIN ,; //31
xCEDULA ,; //32
xNOM ,; //33
xRECETA ,; //34
nCAJAS ,; //35
cKEY ,; //36
cIDIMSS ,; //37
cIDHRAE ,; //38
cES_CAUSE,; //39
nSolicita }) //40
elimino lo que no me sirve y lo demas lo gardo en 2 arrays difrentes para guardar e imprimir
aSiCause:={}
aNoCause:={}
Z:= 0
For Z = 1 TO Len(aMA)
If Left(aMA[Z, 1],9) = "ELIMINADO"
ADEL(aMA, Z, .T.)
Endif
Next
Y:= 0
For Y = 1 to Len(aMA)
If !Empty(aMA[Y,39])
AADD(aNoCause,{ aMA[Y, 1] ,; // 1
aMA[Y, 2] ,; // 2
aMA[Y, 3] ,; // 3
aMA[Y, 4] ,; // 4
aMA[Y, 5] ,; // 5
aMA[Y, 6] ,; // 6
aMA[Y, 7] ,; // 7
aMA[Y, 8] ,; // 8
aMA[Y, 9] ,; // 9
aMA[Y,10] ,; //10
aMA[Y,11] ,; //11
aMA[Y,12] ,; //12
aMA[Y,13] ,; //13
aMA[Y,14] ,; //14
aMA[Y,15] ,; //15
aMA[Y,16] ,; //16
aMA[Y,17] ,; //17
aMA[Y,18] ,; //18
aMA[Y,19] ,; //19
aMA[Y,20] ,; //20
aMA[Y,21] ,; //21
aMA[Y,22] ,; //22
aMA[Y,23] ,; //23
aMA[Y,24] ,; //24
aMA[Y,25] ,; //25
aMA[Y,26] ,; //26
aMA[Y,27] ,; //27
aMA[Y,28] ,; //28
aMA[Y,29] ,; //29
aMA[Y,30] ,; //30
aMA[Y,31] ,; //31
aMA[Y,32] ,; //32
aMA[Y,33] ,; //33
aMA[Y,34] ,; //34
aMA[Y,35] ,; //35
aMA[Y,36] ,; //36
aMA[Y,37] ,; //37
aMA[Y,38] ,; //38
aMA[Y,39] ,; //39
aMA[Y,40] }) //40
Endif
Next
Z:= 0
For Z = 1 to Len(aMA)
If Empty(aMA[Z, 39])
AADD(aSiCause,{ aMA[Z, 1] ,; // 1
aMA[Z, 2] ,; // 2
aMA[Z, 3] ,; // 3
aMA[Z, 4] ,; // 4
aMA[Z, 5] ,; // 5
aMA[Z, 6] ,; // 6
aMA[Z, 7] ,; // 7
aMA[Z, 8] ,; // 8
aMA[Z, 9] ,; // 9
aMA[Z,10] ,; //10
aMA[Z,11] ,; //11
aMA[Z,12] ,; //12
aMA[Z,13] ,; //13
aMA[Z,14] ,; //14
aMA[Z,15] ,; //15
aMA[Z,16] ,; //16
aMA[Z,17] ,; //17
aMA[Z,18] ,; //18
aMA[Z,19] ,; //19
aMA[Z,20] ,; //20
aMA[Z,21] ,; //21
aMA[Z,22] ,; //22
aMA[Z,23] ,; //23
aMA[Z,24] ,; //24
aMA[Z,25] ,; //25
aMA[Z,26] ,; //26
aMA[Z,27] ,; //27
aMA[Z,28] ,; //28
aMA[Z,29] ,; //29
aMA[Z,30] ,; //30
aMA[Z,31] ,; //31
aMA[Z,32] ,; //32
aMA[Z,33] ,; //33
aMA[Z,34] ,; //34
aMA[Z,35] ,; //35
aMA[Z,36] ,; //36
aMA[Z,37] ,; //37
aMA[Z,38] ,; //38
aMA[Z,39] ,; //39
aMA[Z,40] }) //40
Endif
Next
If Len(aSiCause) > 0
Alert("Cause : " + Str(Len(aSiCause)), , ,2)
nTOTAL = 0
nDEP_UNO = 0
nDEP_DOS = 0
nDEP_TRES = 0
nDEP_CUATRO = 0
IVA = 0
n15SUN = 0
n05SUN = 0
AEVAL(aSiCause,{ |X| nTOTAL += X[9] })
AEVAL(aSiCause,{ |X| IIF( X[8] = "A", nDEP_UNO += X[9], NIL ) } )
AEVAL(aSiCause,{ |X| IIF( X[8] = "E", nDEP_TRES += X[9], NIL ) } )
AEVAL(aSiCause,{ |X| IIF( X[8] = "B" , nDEP_DOS += X[ 9], NIL ) } )
AEVAL(aSiCause,{ |X| IIF( X[8] = "B" , IVA += X[10], NIL ) } )
nTOTAL = ROUND( nTOTAL, 2 )
zSTA = "1"
GRABA_NOTA(aSiCause,"1")
IMP_NOTA(aSiCause)
Endif
If Len(aNoCause) > 0
Alert("No Cause : " + Str(Len(aNoCause)), , ,2)
nTOTAL = 0
nDEP_UNO = 0
nDEP_DOS = 0
nDEP_TRES = 0
nDEP_CUATRO = 0
IVA = 0
n15SUN = 0
n05SUN = 0
AEVAL(aNoCause,{ |X| nTOTAL += X[9] })
AEVAL(aNoCause,{ |X| IIF( X[8] = "A", nDEP_UNO += X[9], NIL ) } )
AEVAL(aNoCause,{ |X| IIF( X[8] = "E", nDEP_TRES += X[9], NIL ) } )
AEVAL(aNoCause,{ |X| IIF( X[8] = "B" , nDEP_DOS += X[ 9], NIL ) } )
AEVAL(aNoCause,{ |X| IIF( X[8] = "B" , IVA += X[10], NIL ) } )
nTOTAL = ROUND( nTOTAL, 2 )
zSTA = "1"
GRABA_NOTA(aNoCause,"2")
IMP_NOTA(aNoCause)
Endif
Saludos
Ajuda com Matriz Multidimensional
Enviado: 27 Fev 2018 21:06
por Eolo
Poka,
Deixa eu fazer uma “correção” sobre o TÍTULO do tópico: a dúvida apresentada não é sobre uma matriz MULTIdimensional, já que são somente 2 dimensões (linhas e colunas). É só uma matriz (bidimensional), como uma simples planilha do Excel.
Já uma matriz multidimensional tem outros planos, como por exemplo uma PASTA de trabalho do Excel, que contém várias planilhas, com suas respectivas linhas e colunas, cujos dados podem ser agrupados.
Pra começar, imagina a matriz VENDAS (bidimensional):
[Dia Venda Dinheiro Fiado]
dia1 100 75 25
dia2 110 60 50...
dia31 95 35 60
Quer o fiado do dia 02? VENDAS[2,4] -> segunda linha, quarta coluna.
Feito.
Agora, imagina que a matriz VENDAS tem outra dimensão, além de linhas e colunas, para conter os dados de 10 filiais. Aqui é que entra o conceito de Multidimensional: o Plano1 mostra os dados da Filial1 (com suas linhas e colunas), o Plano2 mostra a Filial2 (idem) e assim por diante.
Quer o total geral de FIADO do dia 02, incluindo todos os planos (filiais)?
É só somar:
VENDAS[1,2,4] -> fiado da filial 1, dia 2, coluna 4
+VENDAS[2,2,4] -> fiado da filial 2, dia 2, coluna 4
+VENDAS[3,2,4] -> fiado da filial 3, dia 2, coluna 4
etc.
Bão, não sei afirmar que se existe algum limite no Harbour quanto ao número de planos, nunca tentei (prefiro usar DBFs temporários), mas trabalhei com uma linguagem chamada APL, muito tempo atrás, e não tinha limite além da memória. Ou seja, você poderia incluir outro plano, como por exemplo PAÍS):
VENDAS[55,1,2,4] -> Brasil, Filial 1, dia 2, coluna 4
Ou ainda região:
VENDAS[5,55,1,2,4] -> América do Sul, Brasil, Filial 1, dia 2, coluna 4
Pra terminar, limitei a coisa ao CONCEITO, não me preocupei com sintaxe, nem entrei no mérito das funções AEVAL etc.
Agora é com você.