CLeEnviar (obsoleta)

Função obsoleta: com o advento do MDF-e, a Capa de Lote Eletrônica deixou de ser usada.

A função CLeEnviar é usada para gerar e enviar uma CL-e (Capa de Lote Eletrônica) para a SEFAZ.

Tipo de Retorno

Boolean

Pacote

A função CLeEnviar está definida no pacote CLeEnviar.pkg.

Sintaxe

Move (CLeEnviar({sArquivoCLe},{iTpAmbiente},{sCertificado},{vtCLe}, ;
(&{sMsgRetWS}),(&{sMsgResultado}),(&{icStat}),(&{sChaveCLe}), ;
{sProxy},{sUsuario},{sSenha},{bExibeErro})) to {bRetorno}

Onde:

  • {sArquivoCLe} é o caminho completo do arquivo XML que será gerado pela função. Importante: o arquivo será gerado pela função. Você só precisa informar o caminho onde quer que ele seja gerado.
  • {iTpAmbiente} ambiente do CT-e para o qual será enviada a CL-e: 1 - Produção / 2 - Homologação.
  • {NmCertificado} é a string que representa o certificado digital que será usado na transmissão dos dados. Se não for informado, uma tela será exibida para o usuário escolher um dos certificados instalados. Você pode obter esta string e armazená-la em um campo de sua base de dados com a função CTePegaNomeCertificado.
  • {vtCLe} é uma estrutura do tipo tCLe que contém os dados da CL-e que será gerada e enviada.
  • &{sMsgRetWS} é uma variável do tipo String que precisa ser passada por referência. Após a execução da função, esta variável receberá o XML de resposta do WS. Esta informação pode ser útil para propósitos de depuração e testes.
  • &{sMsgResultado} é uma variável do tipo String que precisa ser passada por referência. Após a execução da função, esta variável receberá o literal do xMotivo, no caso de rejeição, ou uma mensagem de erro, no caso da geração/envio não ter sido bem sucedido.
  • &{icStat} é uma variável do tipo Integer que precisa ser passada por referência. Após a execução da função, esta variável receberá o cStat devolvido pelo WS ou 0 (zero) no caso do envio não ter sido feito. Se o cadastro da CL-e for autorizado o valor retornado será 129.
  • &{sChaveCLe} é uma variável do tipo String que precisa ser passada por referência. Após a execução da função, esta variável receberá a chave da CL-e, se ela for autorizada (icStat=129).
  • {sProxy} é usado para informar ’http://proxyserver:port’ quando existir uso de proxy no ambiente. Verificar com o cliente qual é o endereço do servidor proxy e a porta https, a porta padrão do https é 443, assim teríamos algo do tipo ’http://192.168.15.1:443’. 
  • {sUsuario} é usado para informar o usuário para autenticação no proxy, se necessário. 
  • {sSenha} é usado informar a senha de autenticação no proxy, se necessário. 
  • {bExibeErro} é usado para indicar se a função deve exibir ou não os erros que ocorrerem na execução.
  • {bRetorno} é o código do retorno da chamada da função. True indica que o CT-e foi enviado. Um retorno False indica que o CT-e não foi cancelado. Neste caso, consulte o valor de iCdRetorno e sResultado para saber o motivo do não envio.

Exemplo

Um exemplo de uso desta função pode ser encontrado na Workspace de exemplo que acompanha a CTeLibrary no arquivo cCLeDataDictionary.dd:

Function EnviaCLe Returns Boolean
// Faz o envio da CL-e que estiver no buffer do DDO
Boolean bRetorno // Retorno do envio
Integer icStat // Devolve o cStat devolvido pelo WS
Integer iIdCLe // Guarda o Id para reposicionar
Integer iTpAmbiente // Ambiente para o qual será feito o envio
String sArquivoCLe // Caminho do arquivo CL-e que será gerado
String sCertificado // Certificado digital que será usado para
// geração/envio da CL-e
String sChaveCLe // Devolve a chave da CL-e em caso de
// cadastro com sucesso (cStat=129)
String sMsgRetWS // Devolve o XML de resposta do WS
String sMsgResultado // Devolve o literal do xMotivo ou mensagem
// de erro.
tCLe vtCLe // Estrutura para receber os dados da CL-e

// Deve haver um registro posicionado
If (not(HasRecord(Self))) Begin
Error DFERR_OPERATOR ;
"Não há nenhum registro posicionado para envio!"
Function_Return False
End

// Reposicionando o registro para testar se ainda existe
Get Field_Current_Value Field CLe.iIdCLe to iIdCLe
If (not(PosicionaDDCLeByIndex1(Self,iIdCLe))) Begin
Error DFERR_OPERATOR ;
"Não foi possível reposicionar o registro!"
Function_Return False
End

// Verificando a situação (tem que ser não enviada ou rejeitada
// para permitir o envio)
If (CLe.iSituacao <> 0 and CLe.iSituacao <> 2) Begin
Error DFERR_OPERATOR "A situação desta CL-e não permite envio!"
Function_Return False
End

// Posicionando tabela de configuração
Send PosicionaConfig

// Montando o caminho do arquivo
If (Config.sDirCLe = "") Begin
Error DFERR_OPERATOR "Diretório de geração não informado!"
Function_Return False
End

Move (Trim(Config.sDirCLe)) to sArquivoCLe

If (Right(sArquivoCLe,1)<>Character(47)) ;
Move (sArquivoCLe + Character(47)) to sArquivoCLe

// Não existe padrão para o nome do arquivo e também não há
// obrigatoriedade de manter cópia em disco do arquivo
// Usaremos como padrão {00000000}-CLe.xml, sendo que {00000000}
// será o valor do campo CLe.iIdCLe acrescentados zeros à esquerda
Move (sArquivoCLe + ColocaZerosEsquerda(CLe.iIdCLe,8) + ;
"-CLe.xml") to sArquivoCLe

// Altera a situação para 1 (enviando). Se o envio for bem sucedido
// será alterada para 3. Caso contrário para 2.
Set Field_Changed_Value Field CLe.iSituacao to 1
Set Field_Changed_Value Field CLe.sUltimaOpercao to "Enviando CL-e"
Send Request_Save
If (Err) Function_Return False

// Fazendo a preparação da estrutura

// Dados do transportador e CL-e avulsa
If (Length(Pessoas.sCNPJCPF)=14) ;
Move Pessoas.sCNPJCPF to vtCLe.vTransportador.sCNPJ
Else ;
Move Pessoas.sCNPJCPF to vtCLe.vTransportador.sCPF

Move Pessoas.sxNome to vtCLe.vTransportador.sxNome
Move Pessoas.sxFant to vtCLe.vTransportador.sxFantasia

Move CLe.sCPFCLeAvulsa to ;
vtCLe.vTransportador.vDadosTranspCLeAvulsa.sCPF
Move CLe.sCNPJCLeAvulsa to ;
vtCLe.vTransportador.vDadosTranspCLeAvulsa.sCPF
Move CLe.sxNomeCLeAvulsa to ;
vtCLe.vTransportador.vDadosTranspCLeAvulsa.sxNomeCLeAvulsa

// Dados da modalidade de transporte
If (CLe.smdTransp = "R") Begin // Rodoviário
Move CLe.spVeic to vtCLe.vMdTransp.vRodoviario.spVeic
Move CLe.scUFVeic to vtCLe.vMdTransp.vRodoviario.scUFVeic
Move CLe.spCarreta to vtCLe.vMdTransp.vRodoviario.spCarreta
Move CLe.scUFCarreta to vtCLe.vMdTransp.vRodoviario.scUFCarreta
Move CLe.spCarreta2 to vtCLe.vMdTransp.vRodoviario.spCarreta2
Move CLe.scUFCarreta2 to vtCLe.vMdTransp.vRodoviario.scUFCarreta2
End
Else Begin // Outros
Move CLe.smdTransp to vtCLe.vMdTransp.vOutro.scMod
Move CLe.scUFTransporte to vtCLe.vMdTransp.vOutro.scUFTransporte
Move CLe.sxIdent to vtCLe.vMdTransp.vOutro.sxIdent
End

// UFs
Move CLe.scUFOrigem to vtCLe.scUFOrigem
Move CLe.scUFDestino to vtCLe.scUFDestino

// Chaves de acesso
Clear CLeChNFe
Move CLe.iIdCLe to CLeChNFe.iIdCLe
Find Ge CLeChNFe by Index.2
While (CLe.iIdCLe = CLeChNFe.iIdCLe and Found)
Move CLeChNFe.sChvAcesso to ;
vtCLe.sChavesAcesso[SizeOfArray(vtCLe.sChavesAcesso)]
Find Gt CLeChNFe by Index.2
Loop

// Fazendo o envio
Move 2 to iTpAmbiente // Fixo para homologação, apenas p/ exemplo
Move "" to sCertificado
// O certificado será passado em branco e poderá ser escolhido
// em uma tela que será exibida pela função.
// Você pode usar a função CTePegaNomeCertificado para pegar os
// dados do certificado e armazenar em um campo de uma tabela
// p/ que ñ seja necessário solicitar esta informação do usuário

If (CLeEnviar(sArquivoCLe,iTpAmbiente,sCertificado,vtCLe, ;
(&sMsgRetWS),(&sMsgResultado),(&icStat),(&sChaveCLe), ;
"","",True)) Begin
Set Field_Changed_Value Field CLe.iSituacao to 3
Set Field_Changed_Value Field CLe.sChaveCLe to sChaveCLe
Set Field_Changed_Value Field CLe.sUltOper to "CL-e autorizada"
End
Else Begin
Set Field_Changed_Value Field CLe.iSituacao to 2
Set Field_Changed_Value Field CLe.sUltOper to sMsgResultado
End

Send Request_Save

Function_Return (CLe.iSituacao = 3)
End_Function // EnviaCLe

Observação

A função CLeEnviar está disponível a partir da versão 2012/01 da CTeLibrary.

Não encontrou o que precisava, entre em contato conosco.