NFP - Faça sua Nota Fiscal Prefeitura com Classe.

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

NFP - Faça sua Nota Fiscal Prefeitura com Classe.

Mensagem por rochinha »

Amiguinhos,

A pauta dos ultimos tempos é se falar em siglas, e sinceramente já não aguento mais, ta parecendo taquigrafia informatizada.

Bom vamos ao que interessa e que me trouxe aqui mais uma vez para juntos escovarmos bits( se bem que estamos na ERA de escovar tERA ).

Como o Maligno disse outro dia, tudo é concatenação de palavras, vamos concatenar com classe então.

O código é simples de se entender e implementar e aqueles que quizerem ir mais a fundo poderão melhorá-lo acrescentando consistencias e consumo de webservices.

Eu poderia postar tudo isto já completo, mas vamos e covenhamos, teremos os velhos craques e os novos fenomenos, para debater e aprimorar.

NFP, muito chamada por Nota Fiscal Paulista não tem nada de Paulista. O P é de Prefeitura pois é ela que comanda o show das notas ao consumidor nos estados.

Vejamos o código:

Código: Selecionar todos

/////////////////////////////////////////////////////////////////////////////
//
//          NFP - Classe de Funcoes Compativeis para Nota Fiscal Prefeitura
//
//         Autor: Jose Carlos da Rocha
//          Data: 11/02/2011
//         Email: irochinha@hotmail.com.br
//           MSN: fivolution@hotmail.com
//     Linguagem: xBase
//       Prefixo: NFPRegistro
//   Plataformas: DOS, Windows
// Requerimentos: Harbour/xHarbour
//
// Hierarquia:
// 10-Identificação do Arquivo (Cabeçalho)
//    1 por arquivo
// 20-Dados de Identificação da Nota Fiscal
//    >= 1 por arquivo
// 30-Mercadoria / Produto / Servico
//    >= 1 por NF na criacao
//    0 por NF no cancelamento
// 40-Valores Totais da NF
//    = 1 por NF na criacao
//    = 0 por NF no cancelamento
// 50-Informações do Transporte da NF
//    = 1 por NF na criacao
//    = 0 por NF no cancelamento
// 60-Informações Adicionais e de Cobrança
//    0 ou 1 por NF na criacao
//    = 0 por NF no cancelamento
// 90-Rodape
//    =1 por arquivo
// Fonte: http://www.nfp.fazenda.sp.gov.br/leg03_port102_07.shtm
/////////////////////////////////////////////////////////////////////////////

#include "FiveWin.ch"

function Main()

   oNFP := tNFP():new( "TESTE.TXT" )

   oNFP:NFPRegistro10( "1,00", ;       // (N  2) Versão do leiaute do arquivo. Preencher com “1,00” nesta versão.
                       CharRem( [./-], "00.000.000/0000-00" ), ; // (X 14) Informar o CNPJ do emitente com os zeros não significativos. Preencher apenas com números, sem separadores.
                       dtoc(date()), ; // (D 10) Menor data de emissão das notas fiscais transmitidas.
							  dtoc(date()) )  // (D 10) Menor data de emissão das notas fiscais transmitidas.

   ? oNFP:NFPFinaliza()
   
return .t.

CREATE CLASS tNFP
   VAR cFileName
   VAR aNFPRegistros
	VAR aNFPListagem
	//
   METHOD New
   METHOD NFPRegistro10
   METHOD NFPRegistro20
   METHOD NFPRegistro30
   METHOD NFPRegistro40
   METHOD NFPRegistro50
   METHOD NFPRegistro60
   METHOD NFPRegistro90
   METHOD NFPSalvaRegistro
   METHOD NFPFinaliza
   //
   METHOD NFPEnviar
   METHOD NFPConsulta
END CLASS

METHOD New( cNFPFileName )
   if cNFPFileName == nil
      ::cFileName := "NFP.TXT"
   else
      ::cFileName := cNFPFileName
   endif
   ::aNFPRegistros := {}
	::aNFPListagem  := {}
RETURN( self )

METHOD NFPRegistro10( p02,p03,p04,p05 )
   local cCRLF := "chr(13)+chr(10)", cPIPE := "|"
   cTrailler := "10"                                             // (X  2) Preencher com o valor "10" para indicar o tipo de registro
   cTrailler := cTrailler + cPIPE + StrFill( p02, 02, " ", "R" ) // (N  2) Versão do leiaute do arquivo. Preencher com “1,00” nesta versão.
   cTrailler := cTrailler + cPIPE + StrFill( p03, 14, " ", "R" ) // (X 14) Informar o CNPJ do emitente com os zeros não significativos. Preencher apenas com números, sem separadores.
   cTrailler := cTrailler + cPIPE + StrFill( p04, 10, " ", "R" ) // (D 10) Menor data de emissão das notas fiscais transmitidas.
   cTrailler := cTrailler + cPIPE + StrFill( p05, 10, " ", "R" ) // (D 10) Maior data de emissão das notas fiscais transmitidas.
   cTrailler := alltrim( cTrailler ) + &(cCRLF)
   ::NFPSalvaRegistro( cTrailler )  
RETURN nil

METHOD NFPRegistro20( p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24 )
   local cCRLF := "chr(13)+chr(10)", cPIPE := "|"
   cTrailler := "20"                                      // (X  2) Preencher com o valor "20" para indicar o tipo de registro
   cTrailler := cTrailler + cPIPE + StrFill( p02, 01, " ", "R" ) // (X 1) Informar conforme a função do registro:
                                                                 // I – Inclusão do registro da NF
                                                                 // R – Retificação do registro da NF
                                                                 // C – Cancelamento da NF
   cTrailler := cTrailler + cPIPE + StrFill( p03,255, " ", "R" ) // (X 15-255) Informar a justificativa do cancelamento. Campo obrigatório se campo 7 (Função do Registro) for igual a “C”.
   cTrailler := cTrailler + cPIPE + StrFill( p04, 60, " ", "R" ) // (X 60) Informar a natureza da operação da qual decorreu a saída ou a entrada, tais como: venda, compra, transferência, devolução, importação, consignação, remessa (para fins de demonstração, de industrialização ou outra), conforme previsto na alínea 'i', inciso I, art. 19 do CONVÊNIO S/Nº, de 15 de dezembro de 1970.
   cTrailler := cTrailler + cPIPE + StrFill( p05, 02, " ", "R" ) // (N 2) Série da Nota Fiscal. Informar 0 (zero) para série única.
   cTrailler := cTrailler + cPIPE + StrFill( p06, 06, " ", "R" ) // (N 6) Número da Nota Fiscal.
   cTrailler := cTrailler + cPIPE + StrFill( p07, 20, " ", "R" ) // (D 20) Data de Emissao Formato “DD/MM/AAAA HH:MM:SS” ; Hora: 0 a 23
   cTrailler := cTrailler + cPIPE + StrFill( p08, 20, " ", "R" ) // (D 20) Data de Saida/Entrada Formato “DD/MM/AAAA HH:MM:SS ”.
   cTrailler := cTrailler + cPIPE + StrFill( p09, 01, " ", "R" ) // (N 1) 0-entrada / 1-saída
   cTrailler := cTrailler + cPIPE + StrFill( p10, 04, " ", "R" ) // (N 4) Utilizar Tabela de CFOP prevista no Anexo V do RICMS aprovado pelo decreto 45.490 de 30/11/2000 - Convênio s/nº de 15 de dezembro de 1970. Na hipótese de o documento fiscal conter mais de um Código Fiscal de Operações ou Prestação – CFOP, nesse campo deverá ser informado apenas o “CFOP” do item de maior valor; os demais “CFOP” deverão ser informados no campo “Descrição do produto ou serviço” conforme previsto no artigo 127, § 19, do RICMS/2000.
   cTrailler := cTrailler + cPIPE + StrFill( p11, 14, " ", "R" ) // (X 14) Informar a IE do substituto tributário na UF de destino da mercadoria conforme previsto no artigo 127, inciso I, alínea “ l ” e § 5º do RICMS/2000. Preencher apenas com números, sem separadores.
   cTrailler := cTrailler + cPIPE + StrFill( p12, 15, " ", "R" ) // (X 15) Este campo deve ser informado quando ocorrer a emissão de NF-e conjugada, com prestação de serviços sujeitos ao ISSQN e fornecimento sujeito ao ICMS. Deve ser preenchido apenas com números, sem separadores.
   cTrailler := cTrailler + cPIPE + StrFill( p13, 14, " ", "R" ) // (X 11 ou 14) Informar o CNPJ ou o CPF do destinatário, preenchendo com os zeros não significativos.
                                                                 // Deve ser preenchido apenas com números, sem separadores.
                                                                 // Não informar se a operação for realizada com o exterior.
   cTrailler := cTrailler + cPIPE + StrFill( p14,100, " ", "R" ) // (X Razão Social ou nome do destinatário
   cTrailler := cTrailler + cPIPE + StrFill( p15,100, " ", "R" ) // (X Livre) Logradouro
   cTrailler := cTrailler + cPIPE + StrFill( p16, 05, " ", "R" ) // (X Livre) Número
   cTrailler := cTrailler + cPIPE + StrFill( p17, 50, " ", "R" ) // (X Livre) Complemento
   cTrailler := cTrailler + cPIPE + StrFill( p18, 50, " ", "R" ) // (X Livre) Bairro
   cTrailler := cTrailler + cPIPE + StrFill( p19, 08, " ", "R" ) // (X Livre) Informar “EXTERIOR” para operações com o exterior.
   cTrailler := cTrailler + cPIPE + StrFill( p20, 02, " ", "R" ) // (X 2) Informar “EX” para operações com o exterior.
   cTrailler := cTrailler + cPIPE + StrFill( p21, 08, "0", "R" ) // (N 8) CEP. Informar os zeros não significativos. Preencher apenas com números, sem separadores.
   cTrailler := cTrailler + cPIPE + StrFill( p22, 10, " ", "R" ) // (X 20) Pais
   cTrailler := cTrailler + cPIPE + StrFill( p23, 10, " ", "R" ) // (N Livre) Preencher o número do telefone com o respectivo código DDD, sem caracteres como hífens e parênteses.
   cTrailler := cTrailler + cPIPE + StrFill( p24, 10, " ", "R" ) // (X 0-14) Informar a Inscrição Estadual quando o destinatário for inscrito no cadastro de contribuintes do ICMS. Preencher apenas com números, sem separadores.
   cTrailler := alltrim( cTrailler ) + &(cCRLF)
   ::NFPSalvaRegistro( cTrailler )  
RETURN nil

METHOD NFPRegistro30( p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12 )
   local cCRLF := "chr(13)+chr(10)", cPIPE := "|"
   *** Registro30 - Mercadoria / Produto / Servico
   *** 30|Produto 0|Pinga tipo 0|12345678|caixa|1,0000|5,0000|5,00|010|18,00|6,00|10,00
   cTrailler := "30"                                             // (X 2) Preencher com o valor "30" para indicar o tipo de registro
   cTrailler := cTrailler + cPIPE + StrFill( p02, 20, "0", "R" ) // (X 16) Preencher com o código do produto ou serviço.
   cTrailler := cTrailler + cPIPE + StrFill( p03,120, "0", "R" ) // (X 120) Nome, marca, tipo, modelo, série, espécie, qualidade e demais elementos que permitam sua perfeita identificação. Deve conter também os demais “CFOP” não informados no campo “CFOP”, na hipótese de o documento fiscal conter mais de um “CFOP”, conforme previsto no artigo 127, § 19, do RICMS/2000.
   cTrailler := cTrailler + cPIPE + StrFill( p04, 08, "0", "R" ) // (X 8) Para mercadorias e produtos, preencher de acordo com a Tabela de Capítulos da NCM. Para serviços, não preencher o campo.
   cTrailler := cTrailler + cPIPE + StrFill( p05, 03, "0", "R" ) // (X 3) Informar a unidade de comercialização da mercadoria / produto.
   cTrailler := cTrailler + cPIPE + StrFill( p06, 12, "0", "R" ) // (N 12 4) Informar a quantidade de comercialização da mercadoria / produto.
   cTrailler := cTrailler + cPIPE + StrFill( p07, 16, "0", "R" ) // (N 16 4) Informar o valor unitário de comercialização da mercadoria / produto
   cTrailler := cTrailler + cPIPE + StrFill( p08, 15, "0", "R" ) // (N 15 2) Valor Total Bruto dos Produtos ou Serviços
   cTrailler := cTrailler + cPIPE + StrFill( p09, 03, "0", "R" ) // (N 3) Código da Situação Tributária:
                                                                 // 1° Dígito: Origem da mercadoria
                                                                 // 0 – Nacional
                                                                 // 1 – Estrangeira – Importação direta
                                                                 // 2 – Estrangeira – Adquirida no mercado interno
                                                                 // 2° e 3° Dígitos: Tributação pelo ICMS
                                                                 // 00 – Tributada integralmente;
                                                                 // 10 – Tributada e com cobrança de; ICMS por substituição tributária;
                                                                 // 20 – Com redução de base de cálculo;
                                                                 // 30 – Isenta ou não tributada e com cobrança do ICMS por substituição tributária;
                                                                 // 40 – Isenta;
                                                                 // 41 – Não tributada;
                                                                 // 50 – Suspensão;
                                                                 // 51 – Diferimento;
                                                                 // 60 – ICMS cobrado anteriormente por substituição tributária;
                                                                 // 70 – Com redução de base de cálculo e cobrança de ICMS substituição tributária;
                                                                 // 90 - Outras.
   cTrailler := cTrailler + cPIPE + StrFill( p10, 05, "0", "R" ) // (N 5 2) Alíquota do imposto ICMS
   cTrailler := cTrailler + cPIPE + StrFill( p11, 05, "0", "R" ) // (N 5 2) Alíquota do IPI
   cTrailler := cTrailler + cPIPE + StrFill( p12, 15, "0", "R" ) // (N 15 2) Valor do IPI
   cTrailler := alltrim( cTrailler ) + &(cCRLF)
   ::NFPSalvaRegistro( cTrailler )  
RETURN nil
	
METHOD NFPRegistro40( p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15 )
   local cCRLF := "chr(13)+chr(10)", cPIPE := "|"
   *** Registro40 - Valores Totais da NF
   *** 40|69,01|1234,56|45,78|123,45|100,10|20,02|10,01|30,00|5,00|1,00|106,13|234,00|6,00|154,00
   cTrailler := "40"                                             // (X 2) Preencher com o valor "40" para indicar o tipo de registro
   cTrailler := cTrailler + cPIPE + StrFill( p02, 15, "0", "R" ) // (N 15 2) Base de Calculo do ICMS
   cTrailler := cTrailler + cPIPE + StrFill( p03, 15, "0", "R" ) // (N 15 2) Valor Total do ICMS
   cTrailler := cTrailler + cPIPE + StrFill( p04, 15, "0", "R" ) // (N 15 2) Base de Cálculo do ICMS ST
   cTrailler := cTrailler + cPIPE + StrFill( p05, 15, "0", "R" ) // (N 15 2) Valor Total do ICMS ST
   cTrailler := cTrailler + cPIPE + StrFill( p06, 15, "0", "R" ) // (N 15 2) Valor Total dos produtos e serviços
   cTrailler := cTrailler + cPIPE + StrFill( p07, 15, "0", "R" ) // (N 15 2) Valor Total do Frete
   cTrailler := cTrailler + cPIPE + StrFill( p08, 15, "0", "R" ) // (N 15 2) Valor Total do Seguro
   cTrailler := cTrailler + cPIPE + StrFill( p09, 15, "0", "R" ) // (N 15 2) Valor Total do Desconto
   cTrailler := cTrailler + cPIPE + StrFill( p10, 15, "0", "R" ) // (N 15 2) Valor Total do IPI
   cTrailler := cTrailler + cPIPE + StrFill( p11, 15, "0", "R" ) // (N 15 2) Outras Despesas acessórias
   cTrailler := cTrailler + cPIPE + StrFill( p12, 15, "0", "R" ) // (N 15 2) Valor Total da NF
   cTrailler := cTrailler + cPIPE + StrFill( p13, 15, "0", "R" ) // (N 15 2) Valor Total dos Serviços sob não-incidência ou não tributados pelo ICMS
   cTrailler := cTrailler + cPIPE + StrFill( p14, 05, "0", "R" ) // (N  5 2) Alíquota do ISS
   cTrailler := cTrailler + cPIPE + StrFill( p15, 15, "0", "R" ) // (N 15 2) Valor Total do ISS
   cTrailler := alltrim( cTrailler ) + &(cCRLF)
   ::NFPSalvaRegistro( cTrailler )  
RETURN nil
	
METHOD NFPRegistro50( p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15,p16 )
   local cCRLF := "chr(13)+chr(10)", cPIPE := "|"
   *** Registro50 - Informações do Transporte da NF
   *** 50|0|00000000000000|Transportadora Xing Ling|000000000000|Av. da Lentidao, 321|Sao Paulo|SP|ABC1234|SP|123456789012345|litros|Xing Ling|123456789|123,000|154,064
   cTrailler := "50"                                             // (X 2) O tipo do registro deve ser “50”
   cTrailler := cTrailler + cPIPE + StrFill( p02, 01, "0", "R" ) // (N 1)	0 – por conta do emitente;	1 – por conta do destinatário;
   cTrailler := cTrailler + cPIPE + StrFill( p03, 14, " ", "R" ) // (X 14 ou 11) Informar o CNPJ ou o CPF do Transportador, preenchendo com os zeros não significativos.
   cTrailler := cTrailler + cPIPE + StrFill( p04,100, " ", "R" ) // (X Livre) Razão Social ou nome
   cTrailler := cTrailler + cPIPE + StrFill( p05, 14, " ", "R" ) // (X Livre) Inscrição Estadual
   cTrailler := cTrailler + cPIPE + StrFill( p06,100, " ", "R" ) // (X Livre) Endereço Completo
   cTrailler := cTrailler + cPIPE + StrFill( p07, 50, " ", "R" ) // (X Livre) Nome do município
   cTrailler := cTrailler + cPIPE + StrFill( p08, 02, " ", "R" ) // (X 2)	Sigla da UF
   cTrailler := cTrailler + cPIPE + StrFill( p09, 08, " ", "R" ) // (X Livre) Placa do Veículo
   cTrailler := cTrailler + cPIPE + StrFill( p10, 02, " ", "R" ) // (X 2) Sigla da UF da Placa
   cTrailler := cTrailler + cPIPE + StrFill( p11, 15, " ", "R" ) // (N 15) Quantidade de volumes transportados
   cTrailler := cTrailler + cPIPE + StrFill( p12, 20, " ", "R" ) // (X Livre) Especie dos volumes transportados
   cTrailler := cTrailler + cPIPE + StrFill( p13, 20, " ", "R" ) // (X Livre) Marca dos volumes transportados
   cTrailler := cTrailler + cPIPE + StrFill( p14, 10, " ", "R" ) // (X Livre) Numeração dos volumes transportados
   cTrailler := cTrailler + cPIPE + StrFill( p15, 15, " ", "R" ) // (N 15 3) Peso Líquido (em kg)
   cTrailler := cTrailler + cPIPE + StrFill( p16, 15, " ", "R" ) // (N 15 3) Peso Bruto (em kg)
   cTrailler := alltrim( cTrailler ) + &(cCRLF)
   ::NFPSalvaRegistro( cTrailler )  
RETURN nil
	
METHOD NFPRegistro60( p02,p03,p04 )
   local cCRLF := "chr(13)+chr(10)", cPIPE := "|"
   *** Registro60 - Informações Adicionais e de Cobrança
   *** 60|Dados da fatura|Informacoes adicionais de interesse do Fisco|Informacoes complementares de interesse do contribuinte
   cTrailler := "60"                                              // (X  2) Preencher com o valor "60" para indicar o tipo de registro
   cTrailler := cTrailler + cPIPE + StrFill( p02, 256, " ", "R" ) // (X 1-256) Preencher o campo com os dados da fatura
   cTrailler := cTrailler + cPIPE + StrFill( p03, 256, " ", "R" ) // (X 1-256) Informacoes adicionais de interesse do Fisco
   cTrailler := cTrailler + cPIPE + StrFill( p04, 256, " ", "R" ) // (X ...) Informacoes complementares de interesse do contribuinte
   cTrailler := alltrim( cTrailler ) + &(cCRLF)
   ::NFPSalvaRegistro( cTrailler )  
RETURN nil
	
METHOD NFPRegistro90()
   local cCRLF := "chr(13)+chr(10)", cPIPE := "|"
   *** Registro90 - Rodape
   *** 90|00002|00010|00002|00002|00001
   nSR20 := nSR30 := nSR40 := nSR50 := nSR60 := 0
   for i = 1 to len( aNFPRegistros )
       nSR20 := nSR20 + iif( "20" = aNFPRegistros[i], 1, 0 )
       nSR30 := nSR30 + iif( "30" = aNFPRegistros[i], 1, 0 )
       nSR40 := nSR40 + iif( "40" = aNFPRegistros[i], 1, 0 )
       nSR50 := nSR50 + iif( "50" = aNFPRegistros[i], 1, 0 )
       nSR60 := nSR60 + iif( "60" = aNFPRegistros[i], 1, 0 )
   next
   cTrailler := "90"                                    // (X 2) Preencher com o valor "90" para indicar o tipo de registro
   cTrailler := cTrailler + cPIPE + strZero( nSR20, 5 ) // (N 5) Indicar total de registros tipo 20 existentes no arquivo
   cTrailler := cTrailler + cPIPE + strZero( nSR30, 5 ) // (N 5) Indicar total de registros tipo 30 existentes no arquivo
   cTrailler := cTrailler + cPIPE + strZero( nSR40, 5 ) // (N 5) Indicar total de registros tipo 40 existentes no arquivo
   cTrailler := cTrailler + cPIPE + strZero( nSR50, 5 ) // (N 5) Indicar total de registros tipo 50 existentes no arquivo
   cTrailler := cTrailler + cPIPE + strZero( nSR60, 5 ) // (N 5) Indicar total de registros tipo 60 existentes no arquivo
   cTrailler := alltrim( cTrailler ) + &(cCRLF)
   ::NFPSalvaRegistro( cTrailler )  
RETURN nil

METHOD NFPSalvaRegistro( _Trailler_ )
   aadd( ::aNFPRegistros, substr( _Trailler_, 1, 2 ) )
   aadd( ::aNFPListagem, _Trailler_ )
   return ""

METHOD NFPFinaliza()
   local aNFP := ASORT( ::aNFPListagem )
   local nNFP := fCreate( ::cFileName )
   FOR I = 1 TO LEN(aNFP)
       fWrite( nNFP, aNFP[I], LEN(aNFP[I]) )
   NEXT 
   fClose( nNFP )
   return MemoRead( ::cFileName )

METHOD NFPEnviar( cUsuario,;
                  cSenha,;
                  cCNPJ,;
                  cCategoria,;
                  cNomArq,;
                  cConteudo,;
                  lEnvio,;
                  lRetificar,;
                  cObs )
   LOCAL cResultado
   //
   cResultado :=              [<?xml version="1.0" encoding="utf-8"?>]
   cResultado := cResultado + [<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">]
   cResultado := cResultado + [  <soap12:Header>]
   cResultado := cResultado + [    <Autenticacao Usuario="] + cUsuario + [" ]
   cResultado := cResultado + [       Senha="] + cSenha + [" ]
   cResultado := cResultado + [       CNPJ="] + cCNPJ + [" ]
   cResultado := cResultado + [       CategoriaUsuario="] + cCategoria + [" ]
   cResultado := cResultado + [       xmlns="https://www.nfp.sp.gov.br/ws" />]
   cResultado := cResultado + [  </soap12:Header>]
   cResultado := cResultado + [  <soap12:Body>]
   if lRetificar
      cResultado := cResultado + [    <Retificar xmlns="https://www.nfp.sp.gov.br/ws">]
   else
      cResultado := cResultado + [    <Enviar xmlns="https://www.nfp.sp.gov.br/ws">]
   endif
   cResultado := cResultado + [      <NomeArquivo>"] + cNomArq + ["</NomeArquivo>]
   cResultado := cResultado + [      <ConteudoArquivo>] + cConteudo + [</ConteudoArquivo>]
   if lEnvio
      cResultado := cResultado + [    <EnvioNormal>true</EnvioNormal>]
   else
      cResultado := cResultado + [    <EnvioNormal>false</EnvioNormal>]
   endif
   cResultado := cResultado + [      <Observacoes>"] + cObs + ["</Observacoes>]
   if lRetificar 
      cResultado := cResultado + [    </Retificar>]
   else
      cResultado := cResultado + [    </Enviar>]
   endif
   cResultado := cResultado + [  </soap12:Body>]
   cResultado := cResultado + [</soap12:Envelope>]
   //
   return cResultado

METHOD NFPConsulta( cProtocolo, cUsuario, cSenha, cCNPJ, cCategoria )
   LOCAL cResultado
   //
   cResultado :=              [<?xml version="1.0" encoding="utf-8"?>]
   cResultado := cResultado + [<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">]
   cResultado := cResultado + [  <soap12:Header>]
   cResultado := cResultado + [    <Autenticacao Usuario='] + cUsuario + [' ]
   cResultado := cResultado + [       Senha='] + cSenha + [' ]
   cResultado := cResultado + [       CNPJ='] + cCNPJ + [' ]
   cResultado := cResultado + [       CategoriaUsuario='] + cCategoria + [' ]
   cResultado := cResultado + [       xmlns="https://www.nfp.sp.gov.br/ws" />]
   cResultado := cResultado + [  </soap12:Header>]
   cResultado := cResultado + [  <soap12:Body>]
   cResultado := cResultado + [    <Consultar xmlns="https://www.nfp.sp.gov.br/ws">]
   cResultado := cResultado + [      <Protocolo>'] + cProtocolo + ['</Protocolo>]
   cResultado := cResultado + [    </Consultar>]
   cResultado := cResultado + [  </soap12:Body>]
   cResultado := cResultado + [</soap12:Envelope>]
   //
   return cResultado

STATIC Function StrFill( _string_, _tamanho_, _fill_, _direction_ )
   default _fill_ := " ", _direction_ := "R"
   cStrFill := alltrim( CharRem( "[<(-.)>]*&@", _string_ ) )
   //if _direction_ = "R"
   //   cStrFill := PadR(SubStr(cStrFill,1,_tamanho_),_tamanho_,_fill_)
   //else	  
   //   cStrFill := PadL(SubStr(cStrFill,1,_tamanho_),_tamanho_,_fill_)
   //endif
   return alltrim( cStrFill )
Código puro e comentado para facilitar o entendimento e uso.

O trecho de teste foi para meu teste usando Fivewin, mas não é requisito principal, pois a classe apenas concatena conteúdos.

Bom trabalho.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder