Code: Select all
function Ponceros( cValor, nCeros )
cValor = strzero( val( cValor ), nCeros )
return .T.
saludos
Wilson
Code: Select all
function Ponceros( cValor, nCeros )
cValor = strzero( val( cValor ), nCeros )
return .T.
wilsongamboa wrote:Rosita buenas tardesponga esta funcion en un valid y envie cValor como referencia Poncers( @cValor, 6 )Code: Select all
function Ponceros( cValor, nCeros ) cValor = strzero( val( cValor ), nCeros ) return .T.
saludos
Wilson
Code: Select all
function ValidaMascara( cValor )
local aValores := listasarray( alltrim( cValor ), '-' )
local i
local cResult := ''
//0002-0001-0003-0004
for i = 1 to len( aValores )
cResult += strzero( val( aValores[ i ] ), 4 ) + if( i == len( aValores ), '', '-' )
next
cValor = cResult
return .t.
/***
* ListAsArray( <cList>, <cDelimiter> ) --> aList
* Converierte un string delimitado a un array de elementos
*
*/
FUNCTION ListAsArray( cList, cDelimiter )
LOCAL nPos
LOCAL aList := {} // Defino un array vac¡o
IF cDelimiter = NIL
cDelimiter := ","
ENDIF
//
DO WHILE (nPos := AT(cDelimiter, cList)) != 0
AADD(aList, SUBSTR(cList, 1, nPos - 1)) // Aumento nuevo elemento del array
cList := SUBSTR(cList, nPos + 1)
ENDDO
AADD(aList, cList) // aumento el £ltimo
//
RETURN aList // Retorno el array
Gracias mi estimado Wilson por la ayuda y su tiempo de la aportacion de su codigo,es lo que buscaba,es usted contador ,tiene desarrollado sistema contable ?wilsongamboa wrote:Ok le entendi mal
use esto
llamandolo en un valid por referenciaCode: Select all
function ValidaMascara( cValor ) local aValores := listasarray( alltrim( cValor ), '-' ) local i local cResult := '' //0002-0001-0003-0004 for i = 1 to len( aValores ) cResult += strzero( val( aValores[ i ] ), 4 ) + if( i == len( aValores ), '', '-' ) next cValor = cResult return .t. /*** * ListAsArray( <cList>, <cDelimiter> ) --> aList * Converierte un string delimitado a un array de elementos * */ FUNCTION ListAsArray( cList, cDelimiter ) LOCAL nPos LOCAL aList := {} // Defino un array vac¡o IF cDelimiter = NIL cDelimiter := "," ENDIF // DO WHILE (nPos := AT(cDelimiter, cList)) != 0 AADD(aList, SUBSTR(cList, 1, nPos - 1)) // Aumento nuevo elemento del array cList := SUBSTR(cList, nPos + 1) ENDDO AADD(aList, cList) // aumento el £ltimo // RETURN aList // Retorno el array
saludos
Wilson
ender wrote:rosa te paso un manual de fivewin no es nuevo pero espero que para comprender su metologia te sirva .
https://www.dropbox.com/s/xhbwms3cqdew2 ... N.PDF?dl=0
p.d. no es mio y espero que el legitimo dueño no le importe si no retirare el enlace
wilsongamboa wrote:Rosita buenas tardes
No soy contador soy Ingeniero Electronico dedicado a programar desde hace muuuchos años
Me alegro mucho que le haya servido
Cualquier duda a las ordenes
saludos
Wilson
wilsongamboa wrote:Rosita
encantado de intercambiar experiencias tengo sistema contable funcionando varios años
saludos
Wilson
Rosita wrote:wilsongamboa wrote:Rosita
encantado de intercambiar experiencias tengo sistema contable funcionando varios años
saludos
Wilson
Gracias mi estimado Wilson, le dejo mi correo y el manual que descargue es interesante puros defines y mas defines .
este es mi correo rositatun@gmail.com
Gracias y saludos
Rosa
Code: Select all
//------------------------------------------------------------------------------
* FORMATO1 CON GUION 0000-0000-0000-0000 ó SIN GUION 000000000000
FUNCTION FORMATO1(VarCta, Ctaf,lGuion)
Local lcad1, lcad2, lcad3, lCad4, I, cFormCta
I := 0
lcad1 := ""
lcad2 := ""
lcad3 := ""
lcad4 := ""
//Procesa el primer campo de 4 Digitos: 0000- // Nivel 1
Do While .T.
I=I+1
IF SubStr(Ctaf, I, 1) == '-' .OR. I > Len(Ctaf)
Exit
EndIF
lcad1 := lcad1 + SubStr(Ctaf, I , 1)
EndDo
//Procesa el segundo campo de 4 Digitos: 0000-0000 // Nivel 2
Do While .T.
I=I+1
IF SubStr(Ctaf, I, 1) == '-' .OR. I > Len(Ctaf)
Exit
EndIF
lcad2 := lcad2 + SubStr(Ctaf, I , 1)
EndDo
//Procesa el tercer campo de 4 Digitos: 0000-0000-0000 // Nivel 3
Do While .T.
I=I+1
IF SubStr(Ctaf, I, 1) == '-' .OR. I > Len(Ctaf)
Exit
EndIF
lcad3 := lcad3 + SubStr(Ctaf, I, 1)
EndDo
//Procesa el cuarto campo de 4 Digitos: 0000-0000-0000-0000 // Nivel 4
Do While .T.
I=I+1
IF SubStr(Ctaf, I, 1) == '-' .OR. I > Len(Ctaf)
Exit
EndIF
lcad4 := lcad4 + SubStr(Ctaf, I, 1)
EndDo
*Nota: Tienes que indicar los 3 '-', ej: 1--, y como resultado: 00001-0000-0000-0000
IF lGuion
cFormCta := STRZERO(Val(lcad1),4) +'-'+ STRZERO(Val(lcad2),4)+'-'+ STRZERO(Val(lcad3),4)+'-'+ STRZERO(Val(lcad4),4)
ELSE
cFormCta := STRZERO(Val(lcad1),4) + STRZERO(Val(lcad2),4) + STRZERO(Val(lcad3),4) + STRZERO(Val(lcad4),4)
ENDIF
*MsgInfo(cFormCta)
RETURN (cFormCta)
ACC69 wrote:Rosita wrote:wilsongamboa wrote:Rosita
encantado de intercambiar experiencias tengo sistema contable funcionando varios años
saludos
Wilson
Gracias mi estimado Wilson, le dejo mi correo y el manual que descargue es interesante puros defines y mas defines .
este es mi correo rositatun@gmail.com
Gracias y saludos
Rosa
Hola Ing. Rosi buenas tardes como esta, de antemano le envio cordial saludos.
Tarde pero llegue ,te paso la rutina de como rellenar ceros a la izquierda.
Esta es la funcion y como se usa ?:Code: Select all
//------------------------------------------------------------------------------ * FORMATO1 CON GUION 0000-0000-0000-0000 ó SIN GUION 000000000000 FUNCTION FORMATO1(VarCta, Ctaf,lGuion) Local lcad1, lcad2, lcad3, lCad4, I, cFormCta I := 0 lcad1 := "" lcad2 := "" lcad3 := "" lcad4 := "" //Procesa el primer campo de 4 Digitos: 0000- // Nivel 1 Do While .T. I=I+1 IF SubStr(Ctaf, I, 1) == '-' .OR. I > Len(Ctaf) Exit EndIF lcad1 := lcad1 + SubStr(Ctaf, I , 1) EndDo //Procesa el segundo campo de 4 Digitos: 0000-0000 // Nivel 2 Do While .T. I=I+1 IF SubStr(Ctaf, I, 1) == '-' .OR. I > Len(Ctaf) Exit EndIF lcad2 := lcad2 + SubStr(Ctaf, I , 1) EndDo //Procesa el tercer campo de 4 Digitos: 0000-0000-0000 // Nivel 3 Do While .T. I=I+1 IF SubStr(Ctaf, I, 1) == '-' .OR. I > Len(Ctaf) Exit EndIF lcad3 := lcad3 + SubStr(Ctaf, I, 1) EndDo //Procesa el cuarto campo de 4 Digitos: 0000-0000-0000-0000 // Nivel 4 Do While .T. I=I+1 IF SubStr(Ctaf, I, 1) == '-' .OR. I > Len(Ctaf) Exit EndIF lcad4 := lcad4 + SubStr(Ctaf, I, 1) EndDo *Nota: Tienes que indicar los 3 '-', ej: 1--, y como resultado: 00001-0000-0000-0000 IF lGuion cFormCta := STRZERO(Val(lcad1),4) +'-'+ STRZERO(Val(lcad2),4)+'-'+ STRZERO(Val(lcad3),4)+'-'+ STRZERO(Val(lcad4),4) ELSE cFormCta := STRZERO(Val(lcad1),4) + STRZERO(Val(lcad2),4) + STRZERO(Val(lcad3),4) + STRZERO(Val(lcad4),4) ENDIF *MsgInfo(cFormCta) RETURN (cFormCta)
Aqui desde get:
REDEFINE GET oG_D[01] VAR cCta ID 105 OF oDlg2 BITMAP "AYUDA" PICT "@K ###################";
ACTION ListCat(@cCta,S08,"cCta",oG_D[01]);
WHEN lNew VALID V_Cta()
Function V_CTA()
cCta := FORMATO1("cCta",cCta, .T.) // Si Permite separar guiones
cCta2 := FORMATO1("cCta",cCta, .F.) // No Permite separar guiones
RETURN NIL
Adaptalo a tus necesidades Rosi.
Si alguien la pueda mejorar,seria mejor
Saludos cordiales .
Atte: Adrian C. C.
acc69@hotmail.com
Willi Quintana wrote:Holas,,,
Disculpen, pero seria también fácil, tener 4 variables en 4 GETs, y luego a cada uno rellenar con los ceros a la izquierda (STRZERO(x)) y concatenarlos a una variable...
A1 := A2 := A3 := A4 := SPACE(4)
@ 5, 10 GET A1 PICTURE "9999"
@ 5, 15 GET A2 PICTURE "9999"
@ 5, 20 GET A3 PICTURE "9999"
@ 5, 25 GET A4 PICTURE "9999"
READ
A1 := STRZERO(VAL(A1),4)
A2 := STRZERO(VAL(A2),4)
A3 := STRZERO(VAL(A3),4)
A4 := STRZERO(VAL(A4),4)
AX := A1 + "-" + A2 + "-" + A3 + "-" + A4
@ X,Y SAY AX
RESULTADO 0034-0344-3445-0001
Saludos