Jump to content
Fivewin Brasil

Manoel Marinho

Membros
  • Posts

    289
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Manoel Marinho

  1. Boa idéia, vou começar por ai também. Tem uma previsão de quando a Dataprev vai liberar as importações ?
  2. Na NFe uso a solução do Gilmer/Flexdocs, mas não sei se ele vai fazer alguma coisa para o eSocial.
  3. Alguém já começou a desenvolver ? Comecei a estudar o layout e verifiquei que é MUITO pior que todos os SPED. Além disso os arquivos (XML) tem que ser enviados via consumo de web services. Tem como fazer isso em xHarbour/Fivewin ? manoelmarinho@hotmail.com
  4. Também gostaria de participar, tenho experiência com SPED Contábil e EFD Contribuiçoes, poderia ajudar nessa área. Manoel Marinho Recife-PE manoelmarinho@hotmail.com
  5. Gilmer, após os comandos sugeridos voltou a funcionar normalmente. Tem apenas um detalhe que vou citar para quem vier a passar por isso: para deletar a DLL da CEF só foi possível iniciando o windows em modo de segurança; Obrigado mais uma vez. Manoel Marinho.
  6. Gilmer, o certificado é exatamente da CEF, vou fazer os procedimentos, depois retorno o resultado.
  7. Alguém já viu esse erro ? Aconteceu após a renovação do certificado A1. Já desinstalei, instalei novamente, atualizei as cadeias do certificado mas não tem jeito. Erro: Ao assinar o documento - O índice estava fora dos limites da matriz., || caso esteja utilizando um certificado digital do tipo A3, existe uma grande || possibilidade de o software gerenciado de dispositivo estar desatualizado, || procure obter uma versão mais atualizada.. || TVONFEUTIL:ASSINAR Manoel Marinho xHarbor Comercial + Fivewin
  8. Alguém já viu esse erro ? Aconteceu após a renovação do certificado A1. Já desinstalei, instalei novamente, atualizei as cadeias do certificado mas não tem jeito. Erro: Ao assinar o documento - O índice estava fora dos limites da matriz., || caso esteja utilizando um certificado digital do tipo A3, existe uma grande || possibilidade de o software gerenciado de dispositivo estar desatualizado, || procure obter uma versão mais atualizada.. || TVONFEUTIL:ASSINAR Manoel Marinho xHarbor Comercial + Fivewin
  9. Error: Unresolved external '_HB_FUN_BOM' referenced from SPEED.OBJ A função BOM() é do xharbour e retorna o primeiro dia do mês Error: Unresolved external '_HB_FUN_EOM' referenced from SPEED.OBJ A função EOM() é do xharbour e retorna o último dia do mês Error: Unresolved external '_HB_FUN_SELECTDBF' referenced from SPEED.OBJ SelectDbf() é a função que eu uso para abrir as tabelas, substitua por USE ou pela sua própria função Error: Unresolved external '_HB_FUN_ATUSALDO' referenced from SPEED.OBJ AtuSaldo() é a função que atualiza os saldos das contas contábeis, substitua pela sua própria função Error: Unresolved external '_HB_FUN_DDMMAAAA' referenced from SPEED.OBJ A função DDMMAAAA() segue no fim do post Error: Unresolved external '_HB_FUN_LIMPASTR' referenced from SPEED.OBJ A função LimpaStr() segue no fim do post Error: Unresolved external '_HB_FUN_SELECTCID' referenced from SPEED.OBJ A função SelectCid() é apenas para selecionar o código IBGE da cidade, substitua a linha por esta: fwrite( nTMP, "|" + CADEMP->CODIBGE ) OBS: Substituir CADEMP->CODIBGE pelo campo correspondente na sua tabela que guarda os dados da empresa Error: Unresolved external '_HB_FUN_BOY' referenced from SPEED.OBJ A função BOY() é do xharbour e retorna o primeiro dia do ano Error: Unresolved external '_HB_FUN_CONTA_SUP' referenced from SPEED.OBJ A função CONTA_SUP() retorna a conta contábil sintética de gráu imediatamente inferior à conta analítica passada como parâmetro, desenvolva essa função baseada no seu plano de contas Error: Unresolved external '_HB_FUN_SALDOCTA' referenced from SPEED.OBJ A função SALDOCTA() retorna o saldo da conta passada como parâmetro, desenvolva essa função baseada no seu plano de contas Error: Unresolved external '_HB_FUN_DEBCRE' referenced from SPEED.OBJ A função DEBCRE() retorna se saldo da conta passada como parâmetro é D ou C, desenvolva essa função baseada no seu plano de contas Error: Unresolved external '_HB_FUN_VALORDEB' referenced from SPEED.OBJ A função VALORDEB() retorna o valor lançado a débito no período na conta passada como parâmetro, desenvolva essa função baseada no seu plano de contas Error: Unresolved external '_HB_FUN_VALORCRE' referenced from SPEED.OBJ A função VALORCRE() retorna o valor lançado a débito no período na conta passada como parâmetro, desenvolva essa função baseada no seu plano de contas Error: Unresolved external '_HB_FUN_STR2' referenced from SPEED.OBJ A função Str2() segue no fim do post function STR2( nVALOR ) return strtran( alltrim( tran( nVALOR, "@E 999,999,999,999.99" ) ), ".", "" ) function DDMMAAAA( dDATA ) return strzero( day( dDATA ), 2 ) + strzero( month( dDATA ), 2 ) + strzero( year( dDATA ), 4 ) function LimpaStr( cStr ) cStr := strtran( cStr, " ", "" ) cStr := strtran( cStr, ".", "" ) cStr := strtran( cStr, ",", "" ) cStr := strtran( cStr, "-", "" ) cStr := strtran( cStr, "/", "" ) return cStr
  10. Não é só compilar e rodar, mas dá prá aproveitar a estrutura e adaptar. Quem fizer melhorias favor disponibilizar no fórum. No fim do post seguem as dialogs para acrescentar nos RC. // sped contábil #include "Fivewin.ch" function SPED() local nSemCodSped := 0 private lErroGeracao := .F. private lPlanoReferencial := .T. private dDATAINI := BOM( dDATAPROC ) private dDATAFIM := EOM( dDATAPROC ) private nNUMTERMO := 0 private cNATLIVRO := space( 80 ) private dDTATOCON := ctod( " / / " ) private dDTATOCNV := ctod( " / / " ) private nLIN_TOTAL := 0 private nLIN_BLOC0 := 0 private nLIN_BLOCI := 0 private nLIN_BLOCJ := 0 private nLIN_BLOC9 := 0 private nLIN_R0000 := 0 private nLIN_R0001 := 0 private nLIN_R0007 := 0 private nLIN_R0990 := 0 private nLIN_RI001 := 0 private nLIN_RI010 := 0 private nLIN_RI030 := 0 private nLIN_RI050 := 0 private nLIN_RI051 := 0 private nLIN_RI150 := 0 private nLIN_RI155 := 0 private nLIN_RI200 := 0 private nLIN_RI250 := 0 private nLIN_RI990 := 0 private nLIN_RJ001 := 0 private nLIN_RJ900 := 0 private nLIN_RJ930 := 0 private nLIN_RJ990 := 0 private nLIN_R9001 := 0 private nLIN_R9900 := 0 selectdbf( "CADCON" ) CADCON->( dbgotop() ) while !CADCON->( eof() ) if CADCON->TIPO == "A" .and. empty( CADCON->CODSPED ) nSemCodSped ++ endif CADCON->( dbskip() ) enddo close DATABASES if nSemCodSped > 0 lPlanoReferencial := .F. if !MsgYesNo( "Existem " + alltrim( str( nSemCodSped ) ) + ; " contas analíticas sem o código do plano referencial SPED correspondente." + ; " O plano referencial ainda não é obrigatório, conforme as regras de validação" + ; " definidas no anexo ao Ato Declaratório Cofis nº 36/07, mas pode vir a ser no" + ; " futuro, quando for disponibilizado o programa E-Lalur eletrônico." + ; " Confirma geração do SPED sem plano de contas referencial ?", "Confirmação" ) return NIL endif endif // atualiza saldos das contas AtuSaldo( .f. ) while !lIsDir( ".\SPED" ) lMkDir( ".\SPED" ) enddo private cTMP := ".\SPED\SPED_" + strzero( year( dDATAPROC ), 4, 0 ) + "_" + strzero( month( dDATAPROC ), 2, 0 ) + ".TMP" private nTMP := fcreate( ".\SPED\SPED_" + strzero( year( dDATAPROC ), 4, 0 ) + "_" + strzero( month( dDATAPROC ), 2, 0 ) + ".TMP" ) MsgRun( "Aguarde...", "Gerando arquivo SPED", { || GeraSPED() } ) close DATABASES fclose( nTMP ) // grava total de linhas nos registros pertinentes TOTAL_LINHAS() if lErroGeracao MsgStop( "Ocorreu um erro na geração do arquivo SPED.", "Atenção" ) else MsgInfo( "Foi gerado o arquivo " + CurDrive() + ":\" + curdir() + "\SPED\SPED_" + strzero( year( dDATAPROC ), 4, 0 ) + "_" + strzero( month( dDATAPROC ), 2, 0 ) + ".TXT" + CRLF + CRLF + "Este arquivo deve ser validado pelo programa validador e assinador (PVA) disponível em www.receita.fazenda.gov.br/Publico/programas/Sped/SpedContabil/SPEDContabil-2.1.7-win32.exe", "Atenção" ) endif return NIL static function GeraSPED() R_0000() R_0001() R_0007() R_0990() R_I001() R_I010() R_I030() R_I050() R_I150() R_I155() R_I200() R_I990() R_J001() R_J900() R_J930() R_J990() R_9001() R_9900() R_9990() R_9999() return NIL // INÃCIO DO BLOCO 0 static function R_0000() selectdbf( "CADEMP" ) if empty( CADEMP->CODIBGE ) msgstop( "Informe o código IBGE da cidade no cadastro da empresa.", "Atenção" ) lErroGeracao := .T. return NIL endif fwrite( nTMP, "|" + "0000" ) fwrite( nTMP, "|" + "LECD" ) fwrite( nTMP, "|" + DDMMAAAA( dDATAINI ) ) fwrite( nTMP, "|" + DDMMAAAA( dDATAFIM ) ) fwrite( nTMP, "|" + alltrim( CADEMP->NOME ) ) fwrite( nTMP, "|" + LimpaStr( CADEMP->CGC ) ) fwrite( nTMP, "|" + alltrim( CADEMP->ESTADO ) ) fwrite( nTMP, "|" + LimpaStr( CADEMP->INSC ) ) fwrite( nTMP, "|" + if( len( alltrim( CADEMP->CODIBGE ) ) == 7, CADEMP->CODIBGE, SELECTCID( CADEMP->CADEMPCID, CADEMP->CADEMPEST ) ) ) fwrite( nTMP, "|" + LimpaStr( CADEMP->INSCMUN ) ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC0 ++ nLIN_R0000 ++ close DATABASES return NIL static function R_0001() fwrite( nTMP, "|" + "0001" ) fwrite( nTMP, "|" + "0" + "|" + CRLF ) nLIN_BLOC0 ++ nLIN_R0001 ++ return NIL static function R_0007() selectdbf( "CADEMP" ) fwrite( nTMP, "|" + "0007" ) fwrite( nTMP, "|" + CADEMP->ESTADO ) fwrite( nTMP, "|" + CADEMP->CGC ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC0 ++ nLIN_R0007 ++ close databases return NIL static function R_0990() fwrite( nTMP, "|" + "0990" ) fwrite( nTMP, "|" + alltrim( str( ++ nLIN_BLOC0 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC0 ++ nLIN_R0990 ++ return NIL // BLOCO I: LANÇAMENTOS CONTÃBEIS static function R_I001() // ABERTURA DO BLOCO I fwrite( nTMP, "|" + "I001" ) fwrite( nTMP, "|" + "0" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI001 ++ return NIL static function R_I010() // IDENTIFICAÇÃO DA ESCRITURAÇÃO CONTÃBIL fwrite( nTMP, "|" + "I010" ) fwrite( nTMP, "|" + "G" ) fwrite( nTMP, "|" + "1.00" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI010 ++ return NIL static function R_I030() // TERMO DE ABERTURA DO LIVRO selectdbf( "CADEMP" ) if empty( CADEMP->NIRE ) if !msgyesno( "O número do NIRE (Número de Identificação do Registro de Empresas na Junta Comercial) não está informado no cadastro da empresa. Confirma geração do SPED sem número do NIRE ?", "Atenção" ) lErroGeracao := .T. close databases return NIL endif endif if file( "NUMTERMO.MEM" ) RESTORE from NUMTERMO additive endif if file( "NATLIVRO.MEM" ) RESTORE from NATLIVRO additive endif if file( "DTATOCON.MEM" ) RESTORE from DTATOCON additive endif if file( "DTATOCNV.MEM" ) RESTORE from DTATOCNV additive endif DEFINE DIALOG oEdt RESOURCE "SPED_TERMO_A" oEdt:lHelpIcon := .F. REDEFINE get oNUMTERMO var nNUMTERMO ID 101 OF oEdt valid nNUMTERMO > 0 REDEFINE get oNATLIVRO var cNATLIVRO ID 102 OF oEdt valid !empty( cNATLIVRO ) oNATLIVRO:bGotFocus := { || if( empty( cNATLIVRO ), ( cNATLIVRO := padr( "LIVRO DIÃRIO GERAL", 80 ), oNATLIVRO:Refresh() ), NIL ) } REDEFINE get oDTATOCON var dDTATOCON picture "99/99/9999" ID 103 OF oEdt valid !empty( dDTATOCON ) REDEFINE get oDTATOCNV var dDTATOCNV picture "99/99/9999" ID 104 OF oEdt REDEFINE BTNBMP oBtn ID 201 OF oEdt RESOURCE "OK" action oEdt:End() ACTIVATE DIALOG oEdt RESIZE16 CENTER if nNUMTERMO < 1 lErroGeracao := .T. return NIL endif save to NUMTERMO all like nNUMTERMO if empty( cNATLIVRO ) lErroGeracao := .T. return NIL endif save to NATLIVRO all like cNATLIVRO if empty( dDTATOCON ) lErroGeracao := .T. return NIL endif save to DTATOCON all like dDTATOCON save to DTATOCNV all like dDTATOCNV fwrite( nTMP, "|" + "I030" ) fwrite( nTMP, "|" + "TERMO DE ABERTURA" ) fwrite( nTMP, "|" + alltrim( str( nNUMTERMO ) ) ) fwrite( nTMP, "|" + alltrim( cNATLIVRO ) ) fwrite( nTMP, "|" + "TOTAL_LINHAS" ) fwrite( nTMP, "|" + alltrim( CADEMP->NOME ) ) if val( CADEMP->NIRE ) > 0 fwrite( nTMP, "|" + strzero( val( CADEMP->NIRE ), 11, 0 ) ) else fwrite( nTMP, "|" + alltrim( CADEMP->NIRE ) ) endif fwrite( nTMP, "|" + LimpaStr( CADEMP->CGC ) ) fwrite( nTMP, "|" + DDMMAAAA( dDTATOCON ) ) fwrite( nTMP, "|" + if( !empty( dDTATOCNV ), DDMMAAAA( dDTATOCNV ), "" ) ) fwrite( nTMP, "|" + alltrim( CADEMP->CIDADE ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI030 ++ close DATABASES return NIL static function R_I050() // PLANO DE CONTAS selectdbf( "CADEMP" ) selectdbf( "PLANSPED" ) selectdbf( "CADCON" ) CADCON->( dbgotop() ) while !CADCON->( eof() ) if len( alltrim( CADCON->NATSPED ) ) <> 2 msgstop( "Informe a natureza SPED da conta " + alltrim( CADCON->CODIGO ) + "-" + alltrim( CADCON->NOME ) + " no plano de contas.", "Atenção" ) lErroGeracao := .T. return NIL endif fwrite( nTMP, "|" + "I050" ) fwrite( nTMP, "|" + DDMMAAAA( BOY( dDATAPROC ) ) ) fwrite( nTMP, "|" + CADCON->NATSPED ) fwrite( nTMP, "|" + CADCON->TIPO ) fwrite( nTMP, "|" + alltrim( str( CADCON->GRAU ) ) ) fwrite( nTMP, "|" + alltrim( tran( CADCON->CODIGO, plan_conta ) ) ) fwrite( nTMP, "|" + CONTA_SUP( CADCON->GRAU, CADCON->( recno() ) ) ) fwrite( nTMP, "|" + alltrim( CADCON->NOME ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI050 ++ // PLANO DE CONTAS REFERENCIAL if lPlanoReferencial if CADCON->TIPO == "A" .and. !empty( CADCON->CODSPED ) fwrite( nTMP, "|" + "I051" ) fwrite( nTMP, "|" + "10" ) fwrite( nTMP, "|" + alltrim( CADCON->CODSPED ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI051 ++ endif endif CADCON->( dbskip() ) enddo close DATABASES return NIL static function R_I150() // SALDOS PERIÓDICOS – IDENTIFICAÇÃO DO PERÃODO fwrite( nTMP, "|" + "I150" ) fwrite( nTMP, "|" + DDMMAAAA( dDATAINI ) ) fwrite( nTMP, "|" + DDMMAAAA( dDATAFIM ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI150 ++ return NIL static function R_I155() // DETALHE DOS SALDOS PERIÓDICOS local nVL_SLD_INI := 0 local cIND_DC_INI := "" local nVL_DEB := 0 local nVL_CRED := 0 local nVL_SLD_FIN := 0 local cIND_DC_FIN := "" selectdbf( "CADCON" ) CADCON->( dbgotop() ) while !CADCON->( eof() ) if CADCON->TIPO == "A" nVL_SLD_INI := SaldoCta( CADCON->CODIGO, month( dDATAINI ) ) - 1 cIND_DC_INI := alltrim( DEBCRE( nVL_SLD_INI ) ) if empty( cIND_DC_INI ) cIND_DC_INI := "D" endif nVL_SLD_FIN := SaldoCta( CADCON->CODIGO, month( dDATAINI ) ) cIND_DC_FIN := alltrim( DEBCRE( nVL_SLD_FIN ) ) if empty( cIND_DC_FIN ) cIND_DC_FIN := "D" endif nVL_DEB := ValorDeb( CADCON->CODIGO, month( dDATAINI ) ) nVL_CRED := ValorCre( CADCON->CODIGO, month( dDATAINI ) ) fwrite( nTMP, "|" + "I155" ) fwrite( nTMP, "|" + alltrim( tran( CADCON->CODIGO, plan_conta ) ) ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + STR2( abs( nVL_SLD_INI ) ) ) fwrite( nTMP, "|" + cIND_DC_INI ) fwrite( nTMP, "|" + STR2( nVL_DEB ) ) fwrite( nTMP, "|" + STR2( nVL_CRED ) ) fwrite( nTMP, "|" + STR2( abs( nVL_SLD_FIN ) ) ) fwrite( nTMP, "|" + cIND_DC_FIN ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI155 ++ endif CADCON->( dbskip() ) enddo close DATABASES return NIL static function R_I200() // LANÇAMENTO CONTÃBIL selectdbf( "CADLAN" ) CADLAN->( dbsetfilter( { || CADLAN->DATALANC >= dDATAINI .and. CADLAN->DATALANC <= dDATAFIM } ) ) CADLAN->( dbgotop() ) while !CADLAN->( eof() ) fwrite( nTMP, "|" + "I200" ) fwrite( nTMP, "|" + CADLAN->NUMLOTE + CADLAN->NUMLANC ) fwrite( nTMP, "|" + DDMMAAAA( CADLAN->DATALANC ) ) fwrite( nTMP, "|" + STR2( CADLAN->VALOR ) ) fwrite( nTMP, "|" + if( at( "TRANSFERENCIA DE", upper( CADLAN->HISTORICO ) ) <> 0 .and. at( "PARA RESULTADO", upper( CADLAN->HISTORICO ) ) <> 0, "E", "N" ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI200 ++ // PARTIDAS DO LANÇAMENTO if !empty( CADLAN->CONTADEBI ) fwrite( nTMP, "|" + "I250" ) fwrite( nTMP, "|" + alltrim( tran( CADLAN->CONTADEBI, plan_conta ) ) ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + STR2( CADLAN->VALOR ) ) fwrite( nTMP, "|" + "D" ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + alltrim( CADLAN->HISTORICO ) ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI250 ++ endif if !empty( CADLAN->CONTACRED ) fwrite( nTMP, "|" + "I250" ) fwrite( nTMP, "|" + alltrim( tran( CADLAN->CONTACRED, plan_conta ) ) ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + STR2( CADLAN->VALOR ) ) fwrite( nTMP, "|" + "C" ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + alltrim( CADLAN->HISTORICO ) ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI250 ++ endif CADLAN->( dbskip() ) enddo close DATABASES return NIL static function R_I990() fwrite( nTMP, "|" + "I990" ) fwrite( nTMP, "|" + alltrim( str( ++ nLIN_BLOCI ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI990 ++ return NIL // BLOCO J: DEMONSTRAÇÕES CONTÃBEIS static function R_J001() // ABERTURA DO BLOCO J fwrite( nTMP, "|" + "J001" ) fwrite( nTMP, "|" + "0" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCJ ++ nLIN_RJ001 ++ return NIL static function R_J900() // TERMO DE ENCERRAMENTO selectdbf( "CADEMP" ) fwrite( nTMP, "|" + "J900" ) fwrite( nTMP, "|" + "TERMO DE ENCERRAMENTO" ) fwrite( nTMP, "|" + alltrim( str( nNUMTERMO ) ) ) fwrite( nTMP, "|" + alltrim( cNATLIVRO ) ) fwrite( nTMP, "|" + alltrim( CADEMP->NOME ) ) fwrite( nTMP, "|" + "TOTAL_LINHAS" ) fwrite( nTMP, "|" + DDMMAAAA( dDATAINI ) ) fwrite( nTMP, "|" + DDMMAAAA( dDATAFIM ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCJ ++ nLIN_RJ900 ++ close databases return NIL static function R_J930() // IDENTIFICAÇÃO DOS SIGNATÃRIOS DA ESCRITURAÇÃO local aQUAL := { "203 Diretor", ; "204 Conselheiro de Administração", ; "205 Administrador", ; "206 Administrador de Grupo", ; "207 Administrador de Sociedade Filiada", ; "220 Administrador Judicial – Pessoa Física", ; "222 Administrador Judicial – Pessoa Jurídica", ; "223 Administrador Judicial/Gestor", ; "226 Gestor Judicial", ; "309 Procurador", ; "312 Inventariante", ; "313 Liquidante", ; "315 Interventor", ; "801 Empresário", ; "900 Contador", ; "999 Outros" } local oJ930_NOME local oJ930_CPF local oJ930_QUAL local oJ930_COD local oJ930_CRC private J930_NOME := space( 40 ) private J930_CPF := space( 11 ) private J930_QUAL := space( 60 ) private J930_COD := space( 3 ) private J930_CRC := space( 15 ) if file( "R_J930.MEM" ) restore from R_J930 additive endif DEFINE DIALOG oEdt RESOURCE "SPED_J930" oEdt:lHelpIcon := .F. REDEFINE get oJ930_NOME var J930_NOME ID 101 OF oEdt valid !empty( J930_NOME ) REDEFINE COMBOBOX oJ930_QUAL var J930_QUAL ITEMS aQUAL ID 102 OF oEdt oJ930_QUAL:bGotFocus := { || if( empty( J930_QUAL ), ( J930_QUAL := aQUAL[ 1 ], oJ930_QUAL:Refresh() ), NIL ) } REDEFINE get oJ930_CPF var J930_CPF picture "99999999999" ID 103 OF oEdt valid !empty( J930_CPF ) REDEFINE get oJ930_IDENT_CRC var J930_CRC picture "@!" ID 104 OF oEdt REDEFINE BTNBMP oBtn ID 201 OF oEdt RESOURCE "OK" action oEdt:End() ACTIVATE DIALOG oEdt RESIZE16 CENTER on init oJ930_QUAL:Set( J930_QUAL ) save to R_J930 all like J930_* fwrite( nTMP, "|" + "J930" ) fwrite( nTMP, "|" + alltrim( J930_NOME ) ) fwrite( nTMP, "|" + alltrim( J930_CPF ) ) fwrite( nTMP, "|" + alltrim( J930_QUAL ) ) fwrite( nTMP, "|" + left( J930_QUAL, 3 ) ) fwrite( nTMP, "|" + alltrim( J930_CRC ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCJ ++ nLIN_RJ930 ++ return NIL static function R_J990() fwrite( nTMP, "|" + "J990" ) fwrite( nTMP, "|" + alltrim( str( ++ nLIN_BLOCJ ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCJ ++ nLIN_RJ990 ++ return NIL // BLOCO 9: CONTROLE E ENCERRAMENTO DO ARQUIVO DIGITAL static function R_9001() // ABERTURA DO BLOCO 9 fwrite( nTMP, "|" + "9001" ) fwrite( nTMP, "|" + "0" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9001 ++ return NIL static function R_9900() // REGISTROS DO ARQUIVO if nLIN_R0000 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "0000" ) fwrite( nTMP, "|" + alltrim( str( nLIN_R0000 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_R0001 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "0001" ) fwrite( nTMP, "|" + alltrim( str( nLIN_R0001 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_R0007 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "0007" ) fwrite( nTMP, "|" + alltrim( str( nLIN_R0007 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_R0990 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "0990" ) fwrite( nTMP, "|" + alltrim( str( nLIN_R0990 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI001 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I001" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI001 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI010 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I010" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI010 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI030 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I030" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI030 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI050 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I050" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI050 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI051 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I051" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI051 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI150 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I150" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI150 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI155 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I155" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI155 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI200 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I200" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI200 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI250 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I250" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI250 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI990 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I990" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI990 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RJ001 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "J001" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RJ001 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RJ900 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "J900" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RJ900 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RJ930 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "J930" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RJ930 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RJ990 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "J990" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RJ990 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_R9001 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "9001" ) fwrite( nTMP, "|" + alltrim( str( nLIN_R9001 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_R9900 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "9900" ) //fwrite( nTMP, "|" + alltrim( str( ++ nLIN_R9900 ) ) ) fwrite( nTMP, "|" + alltrim( str( nLIN_R9900 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif return NIL static function R_9990() // ENCERRAMENTO DO BLOCO 9 fwrite( nTMP, "|" + "9990" ) fwrite( nTMP, "|" + alltrim( str( nLIN_BLOC9 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ return NIL static function R_9999() // ENCERRAMENTO DO ARQUIVO nLIN_TOTAL := nLIN_BLOC0 + nLIN_BLOCI + nLIN_BLOCJ + nLIN_BLOC9 - 2 fwrite( nTMP, "|" + "9999" ) fwrite( nTMP, "|" + alltrim( str( nLIN_TOTAL ) ) ) fwrite( nTMP, "|" + CRLF ) return NIL static function TOTAL_LINHAS() local nSPED := fcreate( ".\SPED\SPED_" + strzero( year( dDATAPROC ), 4, 0 ) + "_" + strzero( month( dDATAPROC ), 2, 0 ) + ".TXT" ) local nTMP := fopen( cTMP ) local aLinhas := {} local cLinha local N while HB_FReadLine( nTMP, @cLinha ) == 0 aadd( aLinhas, cLinha ) enddo aadd( aLinhas, cLinha ) // Adiciona última linha fclose( nTMP ) for N := 1 to len( aLinhas ) if len( alltrim( aLinhas[ N ] ) ) > 0 if at( "TOTAL_LINHAS", aLinhas[ N ] ) == 0 fwrite( nSPED, aLinhas[ N ] + CRLF ) else fwrite( nSPED, strtran( aLinhas[ N ], "TOTAL_LINHAS", alltrim( str( nLIN_TOTAL ) ) ) + CRLF ) endif endif next N fclose( nSPED ) ferase( cTMP ) return NIL SPED_TERMO_A DIALOG 29, 40, 319, 157 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME CAPTION "Termo de Abertura" FONT 8, "MS Sans Serif" { PUSHBUTTON "OK", 201, 134, 139, 50, 14 EDITTEXT 101, 9, 24, 41, 12, ES_RIGHT | WS_BORDER | WS_TABSTOP EDITTEXT 102, 9, 54, 297, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP EDITTEXT 103, 9, 84, 46, 12 EDITTEXT 104, 9, 114, 46, 12 CONTROL "Número de Ordem do Termo de Abertura:", -1, "STATIC", SS_LEFTNOWORDWRAP | WS_CHILD | WS_VISIBLE | WS_GROUP, 9, 13, 201, 8 CONTROL "Natureza do Livro (finalidade a que se destina o instrumento):", -1, "STATIC", SS_LEFTNOWORDWRAP | WS_CHILD | WS_VISIBLE | WS_GROUP, 9, 43, 201, 8 CONTROL "Data do arquivamento dos atos constitutivos:", -1, "STATIC", SS_LEFTNOWORDWRAP | WS_CHILD | WS_VISIBLE | WS_GROUP, 9, 73, 201, 8 CONTROL "Data do arquivamento do ato de conversão de sociedade simples em sociedade empresária:", -1, "STATIC", SS_LEFTNOWORDWRAP | WS_CHILD | WS_VISIBLE | WS_GROUP, 9, 103, 300, 8 CONTROL "", -1, "static", SS_WHITEFRAME | WS_CHILD | WS_VISIBLE, 3, 4, 313, 130 } SPED_J930 DIALOG 105, 46, 246, 99 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME CAPTION "Signatário da Escrituração" FONT 8, "MS Sans Serif" { PUSHBUTTON "OK", 201, 103, 81, 40, 14 EDITTEXT 101, 65, 12, 172, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP COMBOBOX 102, 65, 27, 172, 68, CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP EDITTEXT 103, 65, 43, 62, 12 EDITTEXT 104, 65, 58, 62, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP RTEXT "Nome:", -1, 9, 14, 52, 8 RTEXT "CPF:", -1, 9, 45, 52, 8 RTEXT "Qualificação:", -1, 9, 29, 52, 8 RTEXT "CRC:", -1, 9, 60, 52, 8 CONTROL "", -1, "static", SS_WHITEFRAME | WS_CHILD | WS_VISIBLE, 2, 5, 241, 71 }
  11. Não é só compilar e rodar, mas dá prá aproveitar a estrutura e adaptar. Quem fizer melhorias favor disponibilizar no fórum. No fim do post seguem as dialogs para acrescentar nos RC. // sped contábil #include "Fivewin.ch" function SPED() local nSemCodSped := 0 private lErroGeracao := .F. private lPlanoReferencial := .T. private dDATAINI := BOM( dDATAPROC ) private dDATAFIM := EOM( dDATAPROC ) private nNUMTERMO := 0 private cNATLIVRO := space( 80 ) private dDTATOCON := ctod( " / / " ) private dDTATOCNV := ctod( " / / " ) private nLIN_TOTAL := 0 private nLIN_BLOC0 := 0 private nLIN_BLOCI := 0 private nLIN_BLOCJ := 0 private nLIN_BLOC9 := 0 private nLIN_R0000 := 0 private nLIN_R0001 := 0 private nLIN_R0007 := 0 private nLIN_R0990 := 0 private nLIN_RI001 := 0 private nLIN_RI010 := 0 private nLIN_RI030 := 0 private nLIN_RI050 := 0 private nLIN_RI051 := 0 private nLIN_RI150 := 0 private nLIN_RI155 := 0 private nLIN_RI200 := 0 private nLIN_RI250 := 0 private nLIN_RI990 := 0 private nLIN_RJ001 := 0 private nLIN_RJ900 := 0 private nLIN_RJ930 := 0 private nLIN_RJ990 := 0 private nLIN_R9001 := 0 private nLIN_R9900 := 0 selectdbf( "CADCON" ) CADCON->( dbgotop() ) while !CADCON->( eof() ) if CADCON->TIPO == "A" .and. empty( CADCON->CODSPED ) nSemCodSped ++ endif CADCON->( dbskip() ) enddo close DATABASES if nSemCodSped > 0 lPlanoReferencial := .F. if !MsgYesNo( "Existem " + alltrim( str( nSemCodSped ) ) + ; " contas analíticas sem o código do plano referencial SPED correspondente." + ; " O plano referencial ainda não é obrigatório, conforme as regras de validação" + ; " definidas no anexo ao Ato Declaratório Cofis nº 36/07, mas pode vir a ser no" + ; " futuro, quando for disponibilizado o programa E-Lalur eletrônico." + ; " Confirma geração do SPED sem plano de contas referencial ?", "Confirmação" ) return NIL endif endif // atualiza saldos das contas AtuSaldo( .f. ) while !lIsDir( ".\SPED" ) lMkDir( ".\SPED" ) enddo private cTMP := ".\SPED\SPED_" + strzero( year( dDATAPROC ), 4, 0 ) + "_" + strzero( month( dDATAPROC ), 2, 0 ) + ".TMP" private nTMP := fcreate( ".\SPED\SPED_" + strzero( year( dDATAPROC ), 4, 0 ) + "_" + strzero( month( dDATAPROC ), 2, 0 ) + ".TMP" ) MsgRun( "Aguarde...", "Gerando arquivo SPED", { || GeraSPED() } ) close DATABASES fclose( nTMP ) // grava total de linhas nos registros pertinentes TOTAL_LINHAS() if lErroGeracao MsgStop( "Ocorreu um erro na geração do arquivo SPED.", "Atenção" ) else MsgInfo( "Foi gerado o arquivo " + CurDrive() + ":\" + curdir() + "\SPED\SPED_" + strzero( year( dDATAPROC ), 4, 0 ) + "_" + strzero( month( dDATAPROC ), 2, 0 ) + ".TXT" + CRLF + CRLF + "Este arquivo deve ser validado pelo programa validador e assinador (PVA) disponível em www.receita.fazenda.gov.br/Publico/programas/Sped/SpedContabil/SPEDContabil-2.1.7-win32.exe", "Atenção" ) endif return NIL static function GeraSPED() R_0000() R_0001() R_0007() R_0990() R_I001() R_I010() R_I030() R_I050() R_I150() R_I155() R_I200() R_I990() R_J001() R_J900() R_J930() R_J990() R_9001() R_9900() R_9990() R_9999() return NIL // INÃCIO DO BLOCO 0 static function R_0000() selectdbf( "CADEMP" ) if empty( CADEMP->CODIBGE ) msgstop( "Informe o código IBGE da cidade no cadastro da empresa.", "Atenção" ) lErroGeracao := .T. return NIL endif fwrite( nTMP, "|" + "0000" ) fwrite( nTMP, "|" + "LECD" ) fwrite( nTMP, "|" + DDMMAAAA( dDATAINI ) ) fwrite( nTMP, "|" + DDMMAAAA( dDATAFIM ) ) fwrite( nTMP, "|" + alltrim( CADEMP->NOME ) ) fwrite( nTMP, "|" + LimpaStr( CADEMP->CGC ) ) fwrite( nTMP, "|" + alltrim( CADEMP->ESTADO ) ) fwrite( nTMP, "|" + LimpaStr( CADEMP->INSC ) ) fwrite( nTMP, "|" + if( len( alltrim( CADEMP->CODIBGE ) ) == 7, CADEMP->CODIBGE, SELECTCID( CADEMP->CADEMPCID, CADEMP->CADEMPEST ) ) ) fwrite( nTMP, "|" + LimpaStr( CADEMP->INSCMUN ) ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC0 ++ nLIN_R0000 ++ close DATABASES return NIL static function R_0001() fwrite( nTMP, "|" + "0001" ) fwrite( nTMP, "|" + "0" + "|" + CRLF ) nLIN_BLOC0 ++ nLIN_R0001 ++ return NIL static function R_0007() selectdbf( "CADEMP" ) fwrite( nTMP, "|" + "0007" ) fwrite( nTMP, "|" + CADEMP->ESTADO ) fwrite( nTMP, "|" + CADEMP->CGC ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC0 ++ nLIN_R0007 ++ close databases return NIL static function R_0990() fwrite( nTMP, "|" + "0990" ) fwrite( nTMP, "|" + alltrim( str( ++ nLIN_BLOC0 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC0 ++ nLIN_R0990 ++ return NIL // BLOCO I: LANÇAMENTOS CONTÃBEIS static function R_I001() // ABERTURA DO BLOCO I fwrite( nTMP, "|" + "I001" ) fwrite( nTMP, "|" + "0" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI001 ++ return NIL static function R_I010() // IDENTIFICAÇÃO DA ESCRITURAÇÃO CONTÃBIL fwrite( nTMP, "|" + "I010" ) fwrite( nTMP, "|" + "G" ) fwrite( nTMP, "|" + "1.00" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI010 ++ return NIL static function R_I030() // TERMO DE ABERTURA DO LIVRO selectdbf( "CADEMP" ) if empty( CADEMP->NIRE ) if !msgyesno( "O número do NIRE (Número de Identificação do Registro de Empresas na Junta Comercial) não está informado no cadastro da empresa. Confirma geração do SPED sem número do NIRE ?", "Atenção" ) lErroGeracao := .T. close databases return NIL endif endif if file( "NUMTERMO.MEM" ) RESTORE from NUMTERMO additive endif if file( "NATLIVRO.MEM" ) RESTORE from NATLIVRO additive endif if file( "DTATOCON.MEM" ) RESTORE from DTATOCON additive endif if file( "DTATOCNV.MEM" ) RESTORE from DTATOCNV additive endif DEFINE DIALOG oEdt RESOURCE "SPED_TERMO_A" oEdt:lHelpIcon := .F. REDEFINE get oNUMTERMO var nNUMTERMO ID 101 OF oEdt valid nNUMTERMO > 0 REDEFINE get oNATLIVRO var cNATLIVRO ID 102 OF oEdt valid !empty( cNATLIVRO ) oNATLIVRO:bGotFocus := { || if( empty( cNATLIVRO ), ( cNATLIVRO := padr( "LIVRO DIÃRIO GERAL", 80 ), oNATLIVRO:Refresh() ), NIL ) } REDEFINE get oDTATOCON var dDTATOCON picture "99/99/9999" ID 103 OF oEdt valid !empty( dDTATOCON ) REDEFINE get oDTATOCNV var dDTATOCNV picture "99/99/9999" ID 104 OF oEdt REDEFINE BTNBMP oBtn ID 201 OF oEdt RESOURCE "OK" action oEdt:End() ACTIVATE DIALOG oEdt RESIZE16 CENTER if nNUMTERMO < 1 lErroGeracao := .T. return NIL endif save to NUMTERMO all like nNUMTERMO if empty( cNATLIVRO ) lErroGeracao := .T. return NIL endif save to NATLIVRO all like cNATLIVRO if empty( dDTATOCON ) lErroGeracao := .T. return NIL endif save to DTATOCON all like dDTATOCON save to DTATOCNV all like dDTATOCNV fwrite( nTMP, "|" + "I030" ) fwrite( nTMP, "|" + "TERMO DE ABERTURA" ) fwrite( nTMP, "|" + alltrim( str( nNUMTERMO ) ) ) fwrite( nTMP, "|" + alltrim( cNATLIVRO ) ) fwrite( nTMP, "|" + "TOTAL_LINHAS" ) fwrite( nTMP, "|" + alltrim( CADEMP->NOME ) ) if val( CADEMP->NIRE ) > 0 fwrite( nTMP, "|" + strzero( val( CADEMP->NIRE ), 11, 0 ) ) else fwrite( nTMP, "|" + alltrim( CADEMP->NIRE ) ) endif fwrite( nTMP, "|" + LimpaStr( CADEMP->CGC ) ) fwrite( nTMP, "|" + DDMMAAAA( dDTATOCON ) ) fwrite( nTMP, "|" + if( !empty( dDTATOCNV ), DDMMAAAA( dDTATOCNV ), "" ) ) fwrite( nTMP, "|" + alltrim( CADEMP->CIDADE ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI030 ++ close DATABASES return NIL static function R_I050() // PLANO DE CONTAS selectdbf( "CADEMP" ) selectdbf( "PLANSPED" ) selectdbf( "CADCON" ) CADCON->( dbgotop() ) while !CADCON->( eof() ) if len( alltrim( CADCON->NATSPED ) ) <> 2 msgstop( "Informe a natureza SPED da conta " + alltrim( CADCON->CODIGO ) + "-" + alltrim( CADCON->NOME ) + " no plano de contas.", "Atenção" ) lErroGeracao := .T. return NIL endif fwrite( nTMP, "|" + "I050" ) fwrite( nTMP, "|" + DDMMAAAA( BOY( dDATAPROC ) ) ) fwrite( nTMP, "|" + CADCON->NATSPED ) fwrite( nTMP, "|" + CADCON->TIPO ) fwrite( nTMP, "|" + alltrim( str( CADCON->GRAU ) ) ) fwrite( nTMP, "|" + alltrim( tran( CADCON->CODIGO, plan_conta ) ) ) fwrite( nTMP, "|" + CONTA_SUP( CADCON->GRAU, CADCON->( recno() ) ) ) fwrite( nTMP, "|" + alltrim( CADCON->NOME ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI050 ++ // PLANO DE CONTAS REFERENCIAL if lPlanoReferencial if CADCON->TIPO == "A" .and. !empty( CADCON->CODSPED ) fwrite( nTMP, "|" + "I051" ) fwrite( nTMP, "|" + "10" ) fwrite( nTMP, "|" + alltrim( CADCON->CODSPED ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI051 ++ endif endif CADCON->( dbskip() ) enddo close DATABASES return NIL static function R_I150() // SALDOS PERIÓDICOS – IDENTIFICAÇÃO DO PERÃODO fwrite( nTMP, "|" + "I150" ) fwrite( nTMP, "|" + DDMMAAAA( dDATAINI ) ) fwrite( nTMP, "|" + DDMMAAAA( dDATAFIM ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI150 ++ return NIL static function R_I155() // DETALHE DOS SALDOS PERIÓDICOS local nVL_SLD_INI := 0 local cIND_DC_INI := "" local nVL_DEB := 0 local nVL_CRED := 0 local nVL_SLD_FIN := 0 local cIND_DC_FIN := "" selectdbf( "CADCON" ) CADCON->( dbgotop() ) while !CADCON->( eof() ) if CADCON->TIPO == "A" nVL_SLD_INI := SaldoCta( CADCON->CODIGO, month( dDATAINI ) ) - 1 cIND_DC_INI := alltrim( DEBCRE( nVL_SLD_INI ) ) if empty( cIND_DC_INI ) cIND_DC_INI := "D" endif nVL_SLD_FIN := SaldoCta( CADCON->CODIGO, month( dDATAINI ) ) cIND_DC_FIN := alltrim( DEBCRE( nVL_SLD_FIN ) ) if empty( cIND_DC_FIN ) cIND_DC_FIN := "D" endif nVL_DEB := ValorDeb( CADCON->CODIGO, month( dDATAINI ) ) nVL_CRED := ValorCre( CADCON->CODIGO, month( dDATAINI ) ) fwrite( nTMP, "|" + "I155" ) fwrite( nTMP, "|" + alltrim( tran( CADCON->CODIGO, plan_conta ) ) ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + STR2( abs( nVL_SLD_INI ) ) ) fwrite( nTMP, "|" + cIND_DC_INI ) fwrite( nTMP, "|" + STR2( nVL_DEB ) ) fwrite( nTMP, "|" + STR2( nVL_CRED ) ) fwrite( nTMP, "|" + STR2( abs( nVL_SLD_FIN ) ) ) fwrite( nTMP, "|" + cIND_DC_FIN ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI155 ++ endif CADCON->( dbskip() ) enddo close DATABASES return NIL static function R_I200() // LANÇAMENTO CONTÃBIL selectdbf( "CADLAN" ) CADLAN->( dbsetfilter( { || CADLAN->DATALANC >= dDATAINI .and. CADLAN->DATALANC <= dDATAFIM } ) ) CADLAN->( dbgotop() ) while !CADLAN->( eof() ) fwrite( nTMP, "|" + "I200" ) fwrite( nTMP, "|" + CADLAN->NUMLOTE + CADLAN->NUMLANC ) fwrite( nTMP, "|" + DDMMAAAA( CADLAN->DATALANC ) ) fwrite( nTMP, "|" + STR2( CADLAN->VALOR ) ) fwrite( nTMP, "|" + if( at( "TRANSFERENCIA DE", upper( CADLAN->HISTORICO ) ) <> 0 .and. at( "PARA RESULTADO", upper( CADLAN->HISTORICO ) ) <> 0, "E", "N" ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI200 ++ // PARTIDAS DO LANÇAMENTO if !empty( CADLAN->CONTADEBI ) fwrite( nTMP, "|" + "I250" ) fwrite( nTMP, "|" + alltrim( tran( CADLAN->CONTADEBI, plan_conta ) ) ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + STR2( CADLAN->VALOR ) ) fwrite( nTMP, "|" + "D" ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + alltrim( CADLAN->HISTORICO ) ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI250 ++ endif if !empty( CADLAN->CONTACRED ) fwrite( nTMP, "|" + "I250" ) fwrite( nTMP, "|" + alltrim( tran( CADLAN->CONTACRED, plan_conta ) ) ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + STR2( CADLAN->VALOR ) ) fwrite( nTMP, "|" + "C" ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + alltrim( CADLAN->HISTORICO ) ) fwrite( nTMP, "|" + "" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI250 ++ endif CADLAN->( dbskip() ) enddo close DATABASES return NIL static function R_I990() fwrite( nTMP, "|" + "I990" ) fwrite( nTMP, "|" + alltrim( str( ++ nLIN_BLOCI ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCI ++ nLIN_RI990 ++ return NIL // BLOCO J: DEMONSTRAÇÕES CONTÃBEIS static function R_J001() // ABERTURA DO BLOCO J fwrite( nTMP, "|" + "J001" ) fwrite( nTMP, "|" + "0" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCJ ++ nLIN_RJ001 ++ return NIL static function R_J900() // TERMO DE ENCERRAMENTO selectdbf( "CADEMP" ) fwrite( nTMP, "|" + "J900" ) fwrite( nTMP, "|" + "TERMO DE ENCERRAMENTO" ) fwrite( nTMP, "|" + alltrim( str( nNUMTERMO ) ) ) fwrite( nTMP, "|" + alltrim( cNATLIVRO ) ) fwrite( nTMP, "|" + alltrim( CADEMP->NOME ) ) fwrite( nTMP, "|" + "TOTAL_LINHAS" ) fwrite( nTMP, "|" + DDMMAAAA( dDATAINI ) ) fwrite( nTMP, "|" + DDMMAAAA( dDATAFIM ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCJ ++ nLIN_RJ900 ++ close databases return NIL static function R_J930() // IDENTIFICAÇÃO DOS SIGNATÃRIOS DA ESCRITURAÇÃO local aQUAL := { "203 Diretor", ; "204 Conselheiro de Administração", ; "205 Administrador", ; "206 Administrador de Grupo", ; "207 Administrador de Sociedade Filiada", ; "220 Administrador Judicial – Pessoa Física", ; "222 Administrador Judicial – Pessoa Jurídica", ; "223 Administrador Judicial/Gestor", ; "226 Gestor Judicial", ; "309 Procurador", ; "312 Inventariante", ; "313 Liquidante", ; "315 Interventor", ; "801 Empresário", ; "900 Contador", ; "999 Outros" } local oJ930_NOME local oJ930_CPF local oJ930_QUAL local oJ930_COD local oJ930_CRC private J930_NOME := space( 40 ) private J930_CPF := space( 11 ) private J930_QUAL := space( 60 ) private J930_COD := space( 3 ) private J930_CRC := space( 15 ) if file( "R_J930.MEM" ) restore from R_J930 additive endif DEFINE DIALOG oEdt RESOURCE "SPED_J930" oEdt:lHelpIcon := .F. REDEFINE get oJ930_NOME var J930_NOME ID 101 OF oEdt valid !empty( J930_NOME ) REDEFINE COMBOBOX oJ930_QUAL var J930_QUAL ITEMS aQUAL ID 102 OF oEdt oJ930_QUAL:bGotFocus := { || if( empty( J930_QUAL ), ( J930_QUAL := aQUAL[ 1 ], oJ930_QUAL:Refresh() ), NIL ) } REDEFINE get oJ930_CPF var J930_CPF picture "99999999999" ID 103 OF oEdt valid !empty( J930_CPF ) REDEFINE get oJ930_IDENT_CRC var J930_CRC picture "@!" ID 104 OF oEdt REDEFINE BTNBMP oBtn ID 201 OF oEdt RESOURCE "OK" action oEdt:End() ACTIVATE DIALOG oEdt RESIZE16 CENTER on init oJ930_QUAL:Set( J930_QUAL ) save to R_J930 all like J930_* fwrite( nTMP, "|" + "J930" ) fwrite( nTMP, "|" + alltrim( J930_NOME ) ) fwrite( nTMP, "|" + alltrim( J930_CPF ) ) fwrite( nTMP, "|" + alltrim( J930_QUAL ) ) fwrite( nTMP, "|" + left( J930_QUAL, 3 ) ) fwrite( nTMP, "|" + alltrim( J930_CRC ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCJ ++ nLIN_RJ930 ++ return NIL static function R_J990() fwrite( nTMP, "|" + "J990" ) fwrite( nTMP, "|" + alltrim( str( ++ nLIN_BLOCJ ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOCJ ++ nLIN_RJ990 ++ return NIL // BLOCO 9: CONTROLE E ENCERRAMENTO DO ARQUIVO DIGITAL static function R_9001() // ABERTURA DO BLOCO 9 fwrite( nTMP, "|" + "9001" ) fwrite( nTMP, "|" + "0" ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9001 ++ return NIL static function R_9900() // REGISTROS DO ARQUIVO if nLIN_R0000 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "0000" ) fwrite( nTMP, "|" + alltrim( str( nLIN_R0000 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_R0001 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "0001" ) fwrite( nTMP, "|" + alltrim( str( nLIN_R0001 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_R0007 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "0007" ) fwrite( nTMP, "|" + alltrim( str( nLIN_R0007 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_R0990 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "0990" ) fwrite( nTMP, "|" + alltrim( str( nLIN_R0990 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI001 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I001" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI001 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI010 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I010" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI010 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI030 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I030" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI030 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI050 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I050" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI050 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI051 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I051" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI051 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI150 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I150" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI150 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI155 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I155" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI155 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI200 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I200" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI200 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI250 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I250" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI250 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RI990 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "I990" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RI990 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RJ001 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "J001" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RJ001 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RJ900 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "J900" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RJ900 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RJ930 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "J930" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RJ930 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_RJ990 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "J990" ) fwrite( nTMP, "|" + alltrim( str( nLIN_RJ990 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_R9001 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "9001" ) fwrite( nTMP, "|" + alltrim( str( nLIN_R9001 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif if nLIN_R9900 > 0 fwrite( nTMP, "|" + "9900" ) fwrite( nTMP, "|" + "9900" ) //fwrite( nTMP, "|" + alltrim( str( ++ nLIN_R9900 ) ) ) fwrite( nTMP, "|" + alltrim( str( nLIN_R9900 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ nLIN_R9900 ++ endif return NIL static function R_9990() // ENCERRAMENTO DO BLOCO 9 fwrite( nTMP, "|" + "9990" ) fwrite( nTMP, "|" + alltrim( str( nLIN_BLOC9 ) ) ) fwrite( nTMP, "|" + CRLF ) nLIN_BLOC9 ++ return NIL static function R_9999() // ENCERRAMENTO DO ARQUIVO nLIN_TOTAL := nLIN_BLOC0 + nLIN_BLOCI + nLIN_BLOCJ + nLIN_BLOC9 - 2 fwrite( nTMP, "|" + "9999" ) fwrite( nTMP, "|" + alltrim( str( nLIN_TOTAL ) ) ) fwrite( nTMP, "|" + CRLF ) return NIL static function TOTAL_LINHAS() local nSPED := fcreate( ".\SPED\SPED_" + strzero( year( dDATAPROC ), 4, 0 ) + "_" + strzero( month( dDATAPROC ), 2, 0 ) + ".TXT" ) local nTMP := fopen( cTMP ) local aLinhas := {} local cLinha local N while HB_FReadLine( nTMP, @cLinha ) == 0 aadd( aLinhas, cLinha ) enddo aadd( aLinhas, cLinha ) // Adiciona última linha fclose( nTMP ) for N := 1 to len( aLinhas ) if len( alltrim( aLinhas[ N ] ) ) > 0 if at( "TOTAL_LINHAS", aLinhas[ N ] ) == 0 fwrite( nSPED, aLinhas[ N ] + CRLF ) else fwrite( nSPED, strtran( aLinhas[ N ], "TOTAL_LINHAS", alltrim( str( nLIN_TOTAL ) ) ) + CRLF ) endif endif next N fclose( nSPED ) ferase( cTMP ) return NIL SPED_TERMO_A DIALOG 29, 40, 319, 157 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME CAPTION "Termo de Abertura" FONT 8, "MS Sans Serif" { PUSHBUTTON "OK", 201, 134, 139, 50, 14 EDITTEXT 101, 9, 24, 41, 12, ES_RIGHT | WS_BORDER | WS_TABSTOP EDITTEXT 102, 9, 54, 297, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP EDITTEXT 103, 9, 84, 46, 12 EDITTEXT 104, 9, 114, 46, 12 CONTROL "Número de Ordem do Termo de Abertura:", -1, "STATIC", SS_LEFTNOWORDWRAP | WS_CHILD | WS_VISIBLE | WS_GROUP, 9, 13, 201, 8 CONTROL "Natureza do Livro (finalidade a que se destina o instrumento):", -1, "STATIC", SS_LEFTNOWORDWRAP | WS_CHILD | WS_VISIBLE | WS_GROUP, 9, 43, 201, 8 CONTROL "Data do arquivamento dos atos constitutivos:", -1, "STATIC", SS_LEFTNOWORDWRAP | WS_CHILD | WS_VISIBLE | WS_GROUP, 9, 73, 201, 8 CONTROL "Data do arquivamento do ato de conversão de sociedade simples em sociedade empresária:", -1, "STATIC", SS_LEFTNOWORDWRAP | WS_CHILD | WS_VISIBLE | WS_GROUP, 9, 103, 300, 8 CONTROL "", -1, "static", SS_WHITEFRAME | WS_CHILD | WS_VISIBLE, 3, 4, 313, 130 } SPED_J930 DIALOG 105, 46, 246, 99 STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME CAPTION "Signatário da Escrituração" FONT 8, "MS Sans Serif" { PUSHBUTTON "OK", 201, 103, 81, 40, 14 EDITTEXT 101, 65, 12, 172, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP COMBOBOX 102, 65, 27, 172, 68, CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP EDITTEXT 103, 65, 43, 62, 12 EDITTEXT 104, 65, 58, 62, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP RTEXT "Nome:", -1, 9, 14, 52, 8 RTEXT "CPF:", -1, 9, 45, 52, 8 RTEXT "Qualificação:", -1, 9, 29, 52, 8 RTEXT "CRC:", -1, 9, 60, 52, 8 CONTROL "", -1, "static", SS_WHITEFRAME | WS_CHILD | WS_VISIBLE, 2, 5, 241, 71 }
  12. A solução que está funcionando prá mim até agora: 1.gerar disquete ou cd de boot com NTFS4DOS (site do AVIRA) 2.deletar a pasta GBPLUGIN dentro de Arquivos de Programas 3.acessar sites de bancos com o FireFox (nunca com IE) Desde que adotei isso não deu mais problemas. OBS: o GBPLUGIN derrubava meu sistema financeiro (que tinha nomes de bancos) e o sistema de Livros Fiscais (que não tem nada com bancos). Manoel Marinho Recife-PE xHarbour Comercial + FiveWin 710
  13. Quero aqui deixar meu agradecimento e elogiar o trabalho do colega Valdecir Teixeira, que fez todo o processo de homologação do meu sistema de frente de loja para o TEF. Como sou de Recife-PE, fazer essa homologação pessoalmente ficaria quase impraticável em termos de custo e tempo. Aos colegas que estão longe de São Paulo como eu, recomendo sem reservas o trabalho de Valdecir. O acordo financeiro que fechamos, garanto que foi muito menor do que os custos de viagem/hotel (sem falar do tempo) para fazer a homologação. Abraços, Manoel.
  14. Quero aqui deixar meu agradecimento e elogiar o trabalho do colega Valdecir Teixeira, que fez todo o processo de homologação do meu sistema de frente de loja para o TEF. Como sou de Recife-PE, fazer essa homologação pessoalmente ficaria quase impraticável em termos de custo e tempo. Aos colegas que estão longe de São Paulo como eu, recomendo sem reservas o trabalho de Valdecir. O acordo financeiro que fechamos, garanto que foi muito menor do que os custos de viagem/hotel (sem falar do tempo) para fazer a homologação. Abraços, Manoel.
  15. Também não consegui testar ainda, mas parece interessante, substituiria o ADS.
  16. Alguém já testou isso ? http://sourceforge.net/projects/letodb/
  17. Alguém já testou isso ? http://sourceforge.net/projects/letodb/
  18. Uso Fivewin 7.10 + xHarbour Comercial, já alterei meu perfil N vezes mas não aparece nas mensagens.
  19. Alguém poderia testar esse código com clipper/xharbour e informando a data 31/01 de qualquer ano ? Nos meus testes a data resultante é sempre 15/02/1449 !!! function main() mdata=ctod(" / / ") while .t. cls @ 0,0 say "Data:" get mdata read if empty(mdata) exit enddo @ 2,0 say addmonth(mdata,10) inkey(0) enddo return /*** * * Date.prg * * Sample user-defined functions for manipulating dates * * Copyright © 1993-1995, Computer Associates International Inc. * All rights reserved. * * NOTE: compile with /a /m /n /w * */ /*** * * Mdy( ) --> cDate * * Convert a date to a string in the format "month dd, yyyy". * * Parameter: * dDate - Date value to convert to a string * * Returns: The date value in "long," string form * */ FUNCTION Mdy( dDate ) LOCAL cYear // Handle SET CENTURY IF SUBSTR( SET( _SET_DATEFORMAT ), -4 ) == "YYYY" cYear := STR( YEAR( dDate )) ELSE cYear := " " + SUBSTR( STR( YEAR( dDate )), 4, 2 ) ENDIF RETURN ( CMONTH( dDate ) + " " + LTRIM( STR( DAY( dDate ))) + "," + cYear ) /*** * * Dmy( ) --> cDate * * Convert a date to string formatted as "dd month yyyy". * * Parameter: * dDate - Date value to convert * * Returns: The date value in european date format * */ FUNCTION Dmy( dDate ) LOCAL cYear // Handle SET CENTURY IF SUBSTR( SET( _SET_DATEFORMAT ), -4 ) == "YYYY" cYear := STR( YEAR( dDate )) ELSE cYear := " " + SUBSTR( STR( YEAR( dDate )), 4, 2 ) ENDIF RETURN ( LTRIM( STR( DAY( dDate ))) + " " + CMONTH( dDate ) + cYear ) /*** * * DateAsAge( ) --> nAge * * Convert a date of birth to an age in years. * * Parameter: * dDate - Birthdate for which to calculate the age * * Returns: The number of years elapsed since * */ FUNCTION DateAsAge( dDate ) LOCAL nAge := 0 IF YEAR( DATE() ) > YEAR( dDate ) nAge := YEAR( DATE() ) - YEAR( dDate ) // Decrease the age by one if the date (month/day) has not yet // occurred this year IF ( MONTH( DATE() ) < MONTH( dDate ) .OR. ; ( MONTH( DATE() ) == MONTH( dDate ) .AND. ; DAY( DATE() ) < DAY( dDate ) ; )) --nAge ENDIF ENDIF RETURN nAge /*** * * AddMonth( , ) --> dNewDate * * Calculate a new date by adding a number of months to a given * date. * * Date validation must be done by calling program. * * Parameters: * dDate - Date value to add to * nMonths - Number of months to add to * * Returns: The date value representing + * */ FUNCTION AddMonth( dDate, nMonths) LOCAL nMonth LOCAL nDay LOCAL nYear LOCAL nLimit LOCAL nMonthAdd LOCAL nYearAdd LOCAL dNew // Break date up into its numeric components nMonth := MONTH( dDate ) nDay := DAY( dDate ) nYear := YEAR( dDate ) // nLimit determines the minimum number of months that will push the // date into the next year. If the number of months added to the date // exceeds this limit, the year must be advanced by one nLimit := 12 - nMonth + 1 // Compute number of years to add nYearAdd := INT( nMonths / 12 ) nMonths := nMonths % 12 IF nMonths >= nLimit nYearAdd++ ENDIF nYear += nYearAdd // Compute number of months to add and normalize month nMonthAdd := nMonths % 12 nMonth := ( nMonth + nMonthAdd ) % 12 IF nMonth = 0 // December special case nMonth := 12 ENDIF // Convert numeric portions to new date dNew := NtoD( nMonth, nDay, nYear ) IF DTOC(dNew) = ' / / ' nMonth := (nMonth + 1) % 12 nDay := 1 nYear := nYear + INT((nMonth + 1) / 12) dNew := NtoD(nMonth,nDay,nYear) - 1 ENDIF RETURN ( dNew ) /*** * * DateAsArray( dDate ) --> aDate * * Convert a date to an array of year, month, and day * * Parameter: * dDate - Date value to convert into array form * * Returns: The date in the format { nYear, nMonth, nDay } * If the parameter is invalid, an empty array ({}) is returned * */ FUNCTION DateAsArray( dDate ) LOCAL aDate := {} IF VALTYPE( dDate ) == "D" aDate := { YEAR( dDate ), MONTH( dDate ), DAY( dDate ) } ENDIF RETURN aDate /*** * * ArrayAsDate( aDate ) --> dDate * * Convert an array of year, month, and day to a date value * * Parameter: * aDate - Array holding a date in the form { nYear, nMonth, nDay } * * Returns: aDate in date value form * */ FUNCTION ArrayAsDate( aDate ) RETURN NtoD( aDate[2], aDate[3], aDate[1] ) /*** * * DateIsLeap( ) --> lLeap * * Determine if the year of a supplied date is a leap year * */ FUNCTION DateIsleap( dDate ) LOCAL nYear := YEAR( dDate ) RETURN (( nYear % 4 ) == 0 ) .AND. ; ((( nYear % 100 ) != 0 ) .OR. ; (( nYear % 400 ) == 0) ) /*** * * NtoD( nMonth, nDay, nYear ) --> dNew * * Convert a date passed as separate numeric parameters to a date value * */ FUNCTION NtoD( nMonth, nDay, nYear ) LOCAL cSavDateFormat := SET( _SET_DATEFORMAT, "MM/DD/YYYY" ) LOCAL dDate dDate := CTOD( TRANSFORM( nMonth, "99/" ) + ; TRANSFORM( nDay, "99/" ) + ; TRANSFORM( nYear, "9999" ) ) SET( _SET_DATEFORMAT, cSavDateFormat ) RETURN ( dDate )
  20. Alguém poderia testar esse código com clipper/xharbour e informando a data 31/01 de qualquer ano ? Nos meus testes a data resultante é sempre 15/02/1449 !!! function main() mdata=ctod(" / / ") while .t. cls @ 0,0 say "Data:" get mdata read if empty(mdata) exit enddo @ 2,0 say addmonth(mdata,10) inkey(0) enddo return /*** * * Date.prg * * Sample user-defined functions for manipulating dates * * Copyright © 1993-1995, Computer Associates International Inc. * All rights reserved. * * NOTE: compile with /a /m /n /w * */ /*** * * Mdy( ) --> cDate * * Convert a date to a string in the format "month dd, yyyy". * * Parameter: * dDate - Date value to convert to a string * * Returns: The date value in "long," string form * */ FUNCTION Mdy( dDate ) LOCAL cYear // Handle SET CENTURY IF SUBSTR( SET( _SET_DATEFORMAT ), -4 ) == "YYYY" cYear := STR( YEAR( dDate )) ELSE cYear := " " + SUBSTR( STR( YEAR( dDate )), 4, 2 ) ENDIF RETURN ( CMONTH( dDate ) + " " + LTRIM( STR( DAY( dDate ))) + "," + cYear ) /*** * * Dmy( ) --> cDate * * Convert a date to string formatted as "dd month yyyy". * * Parameter: * dDate - Date value to convert * * Returns: The date value in european date format * */ FUNCTION Dmy( dDate ) LOCAL cYear // Handle SET CENTURY IF SUBSTR( SET( _SET_DATEFORMAT ), -4 ) == "YYYY" cYear := STR( YEAR( dDate )) ELSE cYear := " " + SUBSTR( STR( YEAR( dDate )), 4, 2 ) ENDIF RETURN ( LTRIM( STR( DAY( dDate ))) + " " + CMONTH( dDate ) + cYear ) /*** * * DateAsAge( ) --> nAge * * Convert a date of birth to an age in years. * * Parameter: * dDate - Birthdate for which to calculate the age * * Returns: The number of years elapsed since * */ FUNCTION DateAsAge( dDate ) LOCAL nAge := 0 IF YEAR( DATE() ) > YEAR( dDate ) nAge := YEAR( DATE() ) - YEAR( dDate ) // Decrease the age by one if the date (month/day) has not yet // occurred this year IF ( MONTH( DATE() ) < MONTH( dDate ) .OR. ; ( MONTH( DATE() ) == MONTH( dDate ) .AND. ; DAY( DATE() ) < DAY( dDate ) ; )) --nAge ENDIF ENDIF RETURN nAge /*** * * AddMonth( , ) --> dNewDate * * Calculate a new date by adding a number of months to a given * date. * * Date validation must be done by calling program. * * Parameters: * dDate - Date value to add to * nMonths - Number of months to add to * * Returns: The date value representing + * */ FUNCTION AddMonth( dDate, nMonths) LOCAL nMonth LOCAL nDay LOCAL nYear LOCAL nLimit LOCAL nMonthAdd LOCAL nYearAdd LOCAL dNew // Break date up into its numeric components nMonth := MONTH( dDate ) nDay := DAY( dDate ) nYear := YEAR( dDate ) // nLimit determines the minimum number of months that will push the // date into the next year. If the number of months added to the date // exceeds this limit, the year must be advanced by one nLimit := 12 - nMonth + 1 // Compute number of years to add nYearAdd := INT( nMonths / 12 ) nMonths := nMonths % 12 IF nMonths >= nLimit nYearAdd++ ENDIF nYear += nYearAdd // Compute number of months to add and normalize month nMonthAdd := nMonths % 12 nMonth := ( nMonth + nMonthAdd ) % 12 IF nMonth = 0 // December special case nMonth := 12 ENDIF // Convert numeric portions to new date dNew := NtoD( nMonth, nDay, nYear ) IF DTOC(dNew) = ' / / ' nMonth := (nMonth + 1) % 12 nDay := 1 nYear := nYear + INT((nMonth + 1) / 12) dNew := NtoD(nMonth,nDay,nYear) - 1 ENDIF RETURN ( dNew ) /*** * * DateAsArray( dDate ) --> aDate * * Convert a date to an array of year, month, and day * * Parameter: * dDate - Date value to convert into array form * * Returns: The date in the format { nYear, nMonth, nDay } * If the parameter is invalid, an empty array ({}) is returned * */ FUNCTION DateAsArray( dDate ) LOCAL aDate := {} IF VALTYPE( dDate ) == "D" aDate := { YEAR( dDate ), MONTH( dDate ), DAY( dDate ) } ENDIF RETURN aDate /*** * * ArrayAsDate( aDate ) --> dDate * * Convert an array of year, month, and day to a date value * * Parameter: * aDate - Array holding a date in the form { nYear, nMonth, nDay } * * Returns: aDate in date value form * */ FUNCTION ArrayAsDate( aDate ) RETURN NtoD( aDate[2], aDate[3], aDate[1] ) /*** * * DateIsLeap( ) --> lLeap * * Determine if the year of a supplied date is a leap year * */ FUNCTION DateIsleap( dDate ) LOCAL nYear := YEAR( dDate ) RETURN (( nYear % 4 ) == 0 ) .AND. ; ((( nYear % 100 ) != 0 ) .OR. ; (( nYear % 400 ) == 0) ) /*** * * NtoD( nMonth, nDay, nYear ) --> dNew * * Convert a date passed as separate numeric parameters to a date value * */ FUNCTION NtoD( nMonth, nDay, nYear ) LOCAL cSavDateFormat := SET( _SET_DATEFORMAT, "MM/DD/YYYY" ) LOCAL dDate dDate := CTOD( TRANSFORM( nMonth, "99/" ) + ; TRANSFORM( nDay, "99/" ) + ; TRANSFORM( nYear, "9999" ) ) SET( _SET_DATEFORMAT, cSavDateFormat ) RETURN ( dDate )
  21. Kapiaba, o conterrâneo ainda não fez contato, se eu puder ajudar em alguma coisa, tá na mão. Lembra daquele problema que não aparecia o cabeçalho dos listbox ? Eu passei uns dias enchendo o saco dos amigos do fórum e no fim das contas não tinha nada a ver com FIVE nem xHARBOUR, era sómente o arquivo .MANIFEST que bagunçava o listbox. Alexandre, mande prá meu email mais informações sobre o produto, gostaria de saber preço e como integrar ao meu frente de loja. Abraços, Manoel. manoelmarinho@gmail.com manoelmarinho@hotmail.com
  22. Alexandre, qual o produto que você apresentou ? Esclareça para os que não foram ao encontro.
×
×
  • Create New...