#INCLUDE "PROTHEUS.CH" #INCLUDE "TOTVS.CH" #INCLUDE "FWMVCDEF.CH" User Function CANORCA() Local dDat_DE :=() //as character //data inicial Local dDat_ATE :=() //as character //data final Local cAliasProd := GetNextAlias() as character //o alias que vai abrir o bd Local aDados :={} as array //tela de retorno Local cResult as character //retorno do processamento Local lValido := .F. //segunda tela de retorno Local nPos := 0 as Numeric //contador Local aArea := SCJ ->(GetArea()) //area para manipulação ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// dDat_DE := FwInputBox("Digite a data inicial para o cancelamento dos orçamentos",dDat_DE) //entrada dos dados //// If IsValidDate(dDat_DE) = .F. //// MsgStop("Data inicial inválida, Digite corretamente","Atenção") //// Return lValido //// Else //// dDat_ATE := FwInputBox("Digite a data final para o cancelamento dos orçamentos", dDat_ATE) //// If IsValidDate(dDat_ATE) = .F. //// MsgStop("Data final inválida, Digite corretamente","Atenção") //// Return lValido //// Else //// dDat_DE := cToD(dDat_DE) //conversão de caractere para data //// dDat_ATE := cToD(dDat_ATE) //conversão de caractere para data //// Endif //// Endif //teste do GPT //// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* Validação de Vazio e formato data funcional dDat_DE := FwInputBox("Digite a data inicial para o cancelamento dos orçamentos",dDat_DE) //entrada dos dados If Len(dDat_DE) <> 10 .OR. Empty(dDat_DE) MsgStop("Data inicial inválida, Digite corretamente","Atenção") Return lValido Else dDat_ATE := FwInputBox("Digite a data final para o cancelamento dos orçamentos", dDat_ATE) //saida dos dados If Len(dDat_ATE) <> 10 .OR. Empty(dDat_ATE) MsgStop("Data final inválida, Digite corretamente","Atenção") Return lValido Else dDat_DE := cToD(dDat_DE) //conversão de caractere para data dDat_ATE := cToD(dDat_ATE) //conversão de caractere para data Endif Endif */ oBrowse := GetObjBrow() //inserinOdo objeto no browse dbSelectArea("SCJ") //selecionando tabela SCJ -> (DbSetOrder(1)) //evidencia que a variavel SCJ fará alterações na tabela SJC e está setando a 1°coluna BeginSql Alias cAliasProd //alias abre banco Column CJ_NUM as Numeric(6,0) //alterações neste campo(numerico(tamanho:6 ,Decimal:0)) Column CJ_EMISSAO as date //alterações neste campo data %NOPARSER% //para que o DBAcess não altere o script SELECT CJ_NUM, CJ_STATUS, CJ_EMISSAO, R_E_C_N_O_ RECN //Alterações no RECNO FROM %TABLE:SCJ% //%TABLE:% SELECIONA A TABELA CORRENTE WHERE CJ_FILIAL = %xFilial:SCJ% AND CJ_EMISSAO >= %EXP:dDat_DE% //%EXP:CAMPO% CHAMA O CAMPO DO CODIGO FORA DO BANCO AND CJ_EMISSAO <= %EXP:dDat_ATE% AND %NOTDEL% //SELECIONA OS NAO EXCLUIDOS EndSql While !(cAliasProd) -> (EOF()) If (cAliasProd)-> CJ_STATUS = "A" SCJ->(dbGoTo((cAliasProd)->RECN)) //ESTÁ APONTANDO O SCJ PARA O CALIASPROD NO RECNO PARA FUNCIONAR AS ALTERAÇÕES CORRENTES If Reclock("SCJ",.F.) //SE O RECLOCK ESTIVER FALSO M-> CJ_STATUS:= CJ_STATUS:= 'C' SCJ->(MsUnlock()) nPos++ //ADICIONA MAIS UM NO CONTADOR Endif cResult:= "ABERTO" Else cResult:= "FECHADO" Endif aAdd(aDados,{CJ_NUM,CJ_EMISSAO,CJ_STATUS,cResult}) //campos do retorno (cAliasProd)-> (dbSkip()) //proxima linha Enddo MsgInfo("Foram Cancelados :" + cValToChar(nPos) + ' orçamentos | Até a data :'+cValToChar(CJ_EMISSAO), "Atenção: " ) (cAliasProd)->(dbClosearea()) //fecha o banco oBrowse:Refresh() //atualiza a pagina RestArea(aArea) // fecha a area Return //Chama validação Function IsValidDate(cData) Local dDate Local aDate := {} cError := "" bError := ErrorBlock({ |oError| cError := oError:Description}) // Verifica se a data está no formato DD/MM/AAAA If Len(cData) <> 10 .OR. Substr(cData, 3, 1) <> '/' .OR. Substr(cData, 6, 1) <> '/' Return .F. EndIf // Divide a string da data em um array aDate := {Val(cData[1, 2]), Val(cData[4, 2]), Val(cData[7, 4])} // Tenta criar uma data com os valores do array BEGIN SEQUENCE dDate := cToD(aDate[1] + aDate[2] + aDate[3]) End Sequence ErrorBlock(bError) If ! Empty(cError) MsgStop("Houve um erro") Return .F. endif // Verifica se a data criada é válida If !Empty(dDate) .AND. Year(dDate) == aDate[3] .AND. Month(dDate) == aDate[2] .AND. Day(dDate) == aDate[1] Return .T. Else Return .F. EndIf //ENDFUNCTION