quinta-feira, 28 de janeiro de 2016

Curso WinDev - Datas - 001 - Diferenca Entre Datas - Duração


















Nessa Aula, vou mostrar como calcular a diferenca entre Datas e Horarios
WinDev


Video

 


http://doc.windev.com/en-US/?1514069&name=duration_type_variable

http://doc.pcsoft.fr/fr-FR/?1514069&name=duree_type_variable


http://windevdesenvolvimento.blogspot.com.br/2015/03/wx-trabalhando-com-datas-horas.html



Blog - WinDev - Curso Datas - 001/... - Diferença entre Datas - Duração
Blog - WinDev - Curso Datas - 002/... - Data - Função Dia da Semana - DateToDay
Blog - WinDev - Curso Datas - 003/... - Transformar Data Texto em Data Date
Blog - WinDev - Curso Datas - 004/... - Transformar Data Date em Texto
Blog - WinDev - Curso Datas - 005/... - Date em Texto - "2016-02-15T12:10:00-3:00" - DateToString
Blog - WinDev - Curso Datas - 006/... - Diferença entre Datas - DateDifference
Blog - WinDev - Curso Datas - 007/... - Saber o Ultimo Dia do Mes - LastDaOfMonth
Blog - WinDev - Curso Datas - 008/... - Mostra idade - Age
Blog - WinDev - Curso Datas - 009/... - Mes e Ano Corrente - CurrentMonth/CurrentYear
Blog - WinDev - Curso Datas - 010/... - Texto em Data - DateToString
Blog - WinDev - Curso Datas - 011/... - Inteiro Para Data - IntegerToDate
Blog - WinDev - Curso Datas - 012/... - Pegar Hora - Now
Blog - WinDev - Curso Datas - 013/... - Texto Para Data - StringtoDate
Blog - WinDev - Curso Datas - 014/... - Diferença Tempo - TimeDifference
Hoje -Data Hoje - DateSys() - Blog - WinDev - Curso Datas - 015/... 
Dia Mes Ano - Separar da Data - WinDev Data 016/...
TIMER - COM HORA - DATA 017 - AULA 1265
SEPARAR DIA MES E ANO - DICAS 1772 - PUBLICA - WINDEV 23 - DATAS 020 - 









//Calculo Dias
_data_inicial is Date =SAI_data_inicial
_Data_final is Date = SAI_data_final
du_diferenca_data est une Durée // Em Frances
du_diferenca_data = _Data_final - _data_inicial
SAI_dias=du_diferenca_data..Day



//Calculo horas
h_hora_inicial is Time = SAI_Hora_Inicial
h_hora_final is Time = SAI_Hora_Final
du_diferenca_hora is Duration // Em Ingles
du_diferenca_hora=h_hora_final-h_hora_inicial
SAI_horas=du_diferenca_hora..Hour
SAI_minutos=du_diferenca_hora..Minute














WX - Exemplo da Criptografia da senha - Marco machado








//Gera senha com criptografia dupla fazendo com SHA e depois aplicando a criptografia EncodeBase64

minha is string = "1234"
rhash is string = HashString(HA_SHA_160,minha)
res is string = Crypt(rhash,"",cryptNone,encodeBASE64)
//RESULTADO: cRDtpNCeBiql5KOQsKVyrA0sAiA=


http://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/886-exemplo-criptografia-senha/read.awp


http://forum.pcsoft.fr/fr-FR/pcsoft.br.windev/887-senha-criptografada-webservice/read.awp


http://doc.windev.com/en-US/?1000007111

http://doc.windev.com/?3024014&name=crypt_function






Windev escrevendo C#




Dica para quem precisa usar Senha Criptografada.
Um dos maiores usos que faço disso é no consumo de WebServices, onde necessitamos passar como parâmetros para autenticação, o usuário e a senha.

Esta necessidade surgiu dos códigos de exemplo que temos disponíveis quando vamos trabalhar com WebServices. Sempre temos Java ou C#.

Para facilitar a vida, vamos dispor dos código em Java, C# e Windev ( ainda poderíamos fazer os mesmo código usando C# dentro do Windev)

Código JAVA:

String senha = "1234" ;

java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA");
md.update(senha.getBytes());
String senhaSHA = new String(org.apache.commons.codec.binary.Base64.encodeBase64(md.digest()));

Código C#:

var sha1 = SHA1Managed.Create();
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
byte[] outputBytes = sha1.ComputeHash(inputBytes);
return BitConverter.ToString(outputBytes).Replace("-", "").ToLower();

Código Windev:

SenhaBase is string = "1234"
rhash is string = HashString(HA_SHA_160,SenhaBase)
res is string = Crypt(rhash,"",cryptNone,encodeBASE64)

Info(res)

O código nas 3 linguagens tem que produzir o seguinte resultado:

cRDtpNCeBiql5KOQsKVyrA0sAiA=

Portando:

SenhaBase = "1234" <=> cRDtpNCeBiql5KOQsKVyrA0sAiA=

Isso é extremamente útil quando trabalhamos com Webservices, como já falamos, ou quando simplesmente queremos colocar um resultado em arquivo texto e não queremos que ele fique aberto.

Referências:











Wx - Exemplo Excel - Tom Silva






http://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/883-exemplo-excel/read.awp

https://www.dropbox.com/s/5fd53o3qn3eez75/exemploExcel.rar?dl=0 







PROCEDURE WIN_MUESTRA_EXCEL()
//global declararion
gnFirstLineForOrderLine is int
gnLastLineForOrderLine is int






//Seleciona
// Opens the file picker
sFile is string = fSelect(fExeDir(), "", "Select a file...", "Excel or OpenOffice file" + TAB + "*.xls;*.xlsx", "*.xls;*.xlsx")


IF sFile <> "" THEN
   
    EDT_xslx_file = sFile   
   
    GetNbWorksheets(sFile)
   
END




PROCEDURE GetNbWorksheets(sFile)

MyXlsDoc is a xlsDocument = xlsOpen(sFile)
nNbWorksheets is int = xlsNbWorksheet(MyXlsDoc)

ListDeleteAll(COMBO_Worksheet)
FOR i = 1 _TO_  nNbWorksheets
    ListAdd(COMBO_Worksheet, i)   
END
ListSelectPlus(COMBO_Worksheet,1)





//Cargar Datos en la Planilla
sFile is string
IF EDT_xslx_file = "" THEN
   
    // Opens the file picker
    sFile = fSelect(fExeDir(), "", "Select a file...", "Excel or OpenOffice file" + TAB + "*.xls;*.xlsx", "*.xls;*.xlsx")
   
    IF sFile <> "" THEN
        EDT_xslx_file = sFile   
    END
   
END
IF EDT_xslx_file <> "" THEN
    SpreadsheetDeleteAll(PSHEET_PRODUCTOS)
    //The WLanguage SpreadsheetLoad function is used to load an Excel or OpenOffice Calc file in the Spreadsheet control of WinDev
    SpreadsheetLoad(PSHEET_PRODUCTOS, EDT_xslx_file, COMBO_Worksheet)
    SpreadsheetClose(PSHEET_PRODUCTOS)
END


CASE ERROR:
Error("The spreadsheet was not loaded.", ErrorInfo())

//left button
ExecuteProcess(MySelf, trtClick)
GR_1Step..Grayed = True
//GR_2Step..Grayed = False

EDT_TOTALINEAS = PSHEET_PRODUCTOS..NumberRow




//limpar
SpreadsheetDeleteAll(PSHEET_PRODUCTOS)





MySelf = fExeDir() + fSep() + "exemplo.xlsx"






WinDev - Data Por Extenso - Danilo Valim











http://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/885-data-por-extenso/read.awp


Procedure ExtensoData(pData)

dData is Date = pData
xDia is numeric = dData..Day
xAno is numeric = dData..Year

Unidade is array of 50 strings
Unidade[1]="Primeiro "
Unidade[2]="Segundo "
Unidade[3]="Terceiro "
Unidade[4]="Quarto "
Unidade[5]="Quinto "
Unidade[6]="Sexto "
Unidade[7]="Sétimo "
Unidade[8]="Oitavo "
Unidade[9]="Nono "
Unidade[10]="Décimo "
Unidade[20]="Vigésimo "
Unidade[30]="Trigésimo "

//TRATANDO DIA
sDiaextenso is string = ""
IF xDia > 31 THEN
NextTitle("Verifique..")
Error("Não existe dia do Mês maior que 31!!")
RESULT ""
ELSE
IF xDia < 10 OR xDia = 10 OR xDia = 20 OR xDia = 30 THEN
sDiaextenso = Unidade[xDia]
ELSE IF xDia > 10 AND xDia <= 19
sDiaextenso = Unidade[10]+" "+Unidade[Middle(xDia,2)]
ELSE IF xDia > 20 AND xDia <= 29
sDiaextenso = Unidade[20]+" "+Unidade[Middle(xDia,2)]
ELSE IF xDia > 30
sDiaextenso = Unidade[30]+" "+Unidade[Middle(xDia,2)]
END
END

//TRATANDO MÊS
sMesextenso is string = DateToMonthInAlpha(dData)

//TRATANDO ANO
sAnoextenso is string = ""
IF xAno >= 1000 AND xAno <= 9999 //Ano permitido é de: 1000 a 9999 - pois no nosso caso não usará anos fora disso THEN

IF Left(xAno,1) = 1 THEN
sAnoextenso = "Mil "
ELSE
sAnoextenso = ExtCent(Left(xAno,1))+" Mil "
END
IF Middle(xAno,3,2) = "00" THEN
sAnoextenso += "e "
END

IF Middle(xAno,2,1) = "0" THEN
IF Middle(xAno,3,2) <> "00" THEN
sAnoextenso += "e "
END

IF Middle(xAno,3,1) = "0" THEN
sAnoextenso += ExtCent(Middle(xAno,4,1))
ELSE
sAnoextenso += ExtCent(Middle(xAno,3,2))
END
ELSE
sAnoextenso += ExtCent(Middle(xAno,2,3))
END

ELSE
NextTitle("Aviso..")
Warning("Não é possível escrever por Extenso o Ano Informado!!")
END

sDataPorExtenso is string = sDiaextenso +" Dia do Mês de "+sMesextenso+" do Ano de "+sAnoextenso

RESULT sDataPorExtenso



Procedure ExtCent(pNumero)
Txt is string
IF pNumero < 1 OR pNumero > 999 THEN RESULT ""
Nro is int = pNumero

SWITCH Nro
CASE >= 900: Txt = "novecentos"
CASE >= 800: Txt = "oitocentos"
CASE >= 700: Txt = "setecentos"
CASE >= 600: Txt = "seiscentos"
CASE >= 500: Txt = "quinhentos"
CASE >= 400: Txt = "quatrocentos"
CASE >= 300: Txt = "trezentos"
CASE >= 200: Txt = "duzentos"
CASE > 100: Txt = "cento"
CASE = 100: RESULT "cem"
END

Nro = Modulo(Nro,100)
IF Nro = 0 THEN RESULT Txt
IF Txt<>"" THEN Txt+=" e "

SWITCH Nro
CASE >= 90 : Txt+= "noventa"
CASE >= 80 : Txt+= "oitenta"
CASE >= 70 : Txt+= "setenta"
CASE >= 60 : Txt+= "sessenta"
CASE >= 50 : Txt+= "cinquenta"
CASE >= 40 : Txt+= "quarenta"
CASE >= 30 : Txt+= "trinta"
CASE >= 20 : Txt+= "vinte"
CASE = 19 : RESULT Txt + "dezenove"
CASE = 18 : RESULT Txt + "dezoito"
CASE = 17 : RESULT Txt + "dezessete"
CASE = 16 : RESULT Txt + "dezesseis"
CASE = 15 : RESULT Txt + "quinze"
CASE = 14 : RESULT Txt + "quatorze"
CASE = 13 : RESULT Txt + "treze"
CASE = 12 : RESULT Txt + "doze"
CASE = 11 : RESULT Txt + "onze"
CASE = 10 : RESULT Txt + "dez"
OTHER CASE : IF Txt<>"" THEN Txt = Txt[[ TO Length(Txt)-3]] // Txt-=" e " // tira o "e" que não usou
END

Nro = Modulo(Nro,10)
IF Nro = 0 THEN RESULT Txt
IF Txt<>"" THEN Txt+=" e "

SWITCH Nro
CASE 1 : RESULT Txt + "um"
CASE 2 : RESULT Txt + "dois"
CASE 3 : RESULT Txt + "três"
CASE 4 : RESULT Txt + "quatro"
CASE 5 : RESULT Txt + "cinco"
CASE 6 : RESULT Txt + "seis"
CASE 7 : RESULT Txt + "sete"
CASE 8 : RESULT Txt + "oito"
CASE 9 : RESULT Txt + "nove"
OTHER CASE : RESULT ""
END















Teste

Teste
teste