Ir para conteúdo
  • Cadastre-se

dev botao

DACTe / XML - CT-e 3.00


Ver Solução Respondido por José S. Simione,
  • Este tópico foi criado há 2721 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Estou implantando o CT-e 3.00 em meu sistema, tive que fazer algumas alterações no componente para evitar alguns erros sobre os Schemas da Versão 3.00.

Segue as alterações feitas:

"pcteCTe" Alterado de:

  TNatCarga = class(TPersistent)
  private
    FxDime    : String;
    FcinfManu : Integer; // Alterar para ser uma lista
    FcIMP     : String;  // Alterar para ser uma lista
  public
    property xDime: String     read FxDime    write FxDime;
    property cinfManu: Integer read FcinfManu write FcinfManu;
    property cIMP: String      read FcIMP     write FcIMP;
  end;

para:

  TNatCarga = class(TPersistent)
  private
    FxDime    : String;
    FcinfManu : TpInfManu;
    FcIMP     : String;  // Alterar para ser uma lista
  public
    property xDime: String        read FxDime    write FxDime;
    property cinfManu: TpInfManu  read FcinfManu write FcinfManu;
    property cIMP: String         read FcIMP     write FcIMP;
  end;

 

"pcteCTeR" Alterado de:

      if Leitor.rExtrai(3, 'natCarga') <> '' then
       begin
         CTe.infCTeNorm.aereo.natCarga.xDime     := Leitor.rCampo(tcStr,'xDime');
         CTe.infCTeNorm.aereo.natCarga.cinfManu  := Leitor.rCampo(tcInt,'cInfManu');
         CTe.infCTeNorm.aereo.natCarga.cIMP      := Leitor.rCampo(tcStr,'cIMP');
       end;

para:

      if Leitor.rExtrai(3, 'natCarga') <> '' then
       begin
         CTe.infCTeNorm.aereo.natCarga.xDime     := Leitor.rCampo(tcStr,'xDime');
         CTe.infCTeNorm.aereo.natCarga.cinfManu  := StrToTpInfManu(ok, Leitor.rCampo(tcStr,'cInfManu'));
         CTe.infCTeNorm.aereo.natCarga.cIMP      := Leitor.rCampo(tcStr,'cIMP');
       end;

 

"pcteCTeW"  a procedure "GerarAereo" foi Alterado de:

  Gerador.wGrupo('tarifa', '#07');
  Gerador.wCampo(tcStr, '#08', 'CL     ', 01, 02, 0, CTe.infCTeNorm.aereo.tarifa.CL, DSC_CL);
  Gerador.wCampo(tcStr, '#09', 'cTar   ', 01, 04, 0, CTe.infCTeNorm.aereo.tarifa.cTar, DSC_CTAR);
  Gerador.wCampo(tcDe2, '#10', 'vTar   ', 01, 15, 0, CTe.infCTeNorm.aereo.tarifa.vTar, DSC_VTAR);
  Gerador.wGrupo('/tarifa');

  if (trim(CTe.infCTeNorm.aereo.natCarga.xDime) <> '') or (CTe.infCTeNorm.aereo.natCarga.cinfManu <> 0) or
     (trim(CTe.infCTeNorm.aereo.natCarga.cImp) <> '')
   then begin
    Gerador.wGrupo('natCarga', '#11');
    Gerador.wCampo(tcStr, '#12', 'xDime   ', 05, 14, 0, CTe.infCTeNorm.aereo.natCarga.xDime, DSC_XDIME);
    Gerador.wCampo(tcInt, '#13', 'cInfManu', 01, 02, 0, CTe.infCTeNorm.aereo.natCarga.cinfManu, DSC_CINFMANU);
    Gerador.wCampo(tcStr, '#14', 'cIMP    ', 03, 03, 0, CTe.infCTeNorm.aereo.natCarga.cIMP, DSC_CIMP);
    Gerador.wGrupo('/natCarga');

para:

  if CTe.infCTe.versao >= 3 then
   begin
    if (trim(CTe.infCTeNorm.aereo.natCarga.xDime) <> '') or (TpInfManuToStr(CTe.infCTeNorm.aereo.natCarga.cinfManu) <> '') then
     begin
      Gerador.wGrupo('natCarga', '#11');
      Gerador.wCampo(tcStr, '#12', 'xDime   ', 05, 14, 0, CTe.infCTeNorm.aereo.natCarga.xDime, DSC_XDIME);
      Gerador.wCampo(tcInt, '#13', 'cInfManu', 02, 02, 0, TpInfManuToStr(CTe.infCTeNorm.aereo.natCarga.cinfManu), DSC_CINFMANU);
      Gerador.wGrupo('/natCarga');
     end;

    Gerador.wGrupo('tarifa', '#07');
    Gerador.wCampo(tcStr, '#08', 'CL     ', 01, 02, 0, CTe.infCTeNorm.aereo.tarifa.CL, DSC_CL);
    Gerador.wCampo(tcStr, '#09', 'cTar   ', 01, 04, 0, CTe.infCTeNorm.aereo.tarifa.cTar, DSC_CTAR);
    Gerador.wCampo(tcDe2, '#10', 'vTar   ', 01, 15, 0, CTe.infCTeNorm.aereo.tarifa.vTar, DSC_VTAR);
    Gerador.wGrupo('/tarifa');
   end
  else
   begin
    Gerador.wGrupo('tarifa', '#07');
    Gerador.wCampo(tcStr, '#08', 'CL     ', 01, 02, 0, CTe.infCTeNorm.aereo.tarifa.CL, DSC_CL);
    Gerador.wCampo(tcStr, '#09', 'cTar   ', 01, 04, 0, CTe.infCTeNorm.aereo.tarifa.cTar, DSC_CTAR);
    Gerador.wCampo(tcDe2, '#10', 'vTar   ', 01, 15, 0, CTe.infCTeNorm.aereo.tarifa.vTar, DSC_VTAR);
    Gerador.wGrupo('/tarifa');

    if (trim(CTe.infCTeNorm.aereo.natCarga.xDime) <> '') or (TpInfManuToStr(CTe.infCTeNorm.aereo.natCarga.cinfManu) <> '') or
     (trim(CTe.infCTeNorm.aereo.natCarga.cImp) <> '') then
     begin
      Gerador.wGrupo('natCarga', '#11');
      Gerador.wCampo(tcStr, '#12', 'xDime   ', 05, 14, 0, CTe.infCTeNorm.aereo.natCarga.xDime, DSC_XDIME);
      Gerador.wCampo(tcInt, '#13', 'cInfManu', 01, 02, 0, TpInfManuToStr(CTe.infCTeNorm.aereo.natCarga.cinfManu), DSC_CINFMANU);
      Gerador.wCampo(tcStr, '#14', 'cIMP    ', 03, 03, 1, CTe.infCTeNorm.aereo.natCarga.cIMP, DSC_CIMP);
      Gerador.wGrupo('/natCarga');
     end;

procedure "GerarAquav" foi Alterado de:

procedure TCTeW.GerarAquav;
var
 i, j: Integer;
begin
  Gerador.wGrupo('aquav', '#01');
  Gerador.wCampo(tcDe2, '#02', 'vPrest   ', 01, 15, 1, CTe.infCTeNorm.aquav.vPrest, DSC_VPREST);
  Gerador.wCampo(tcDe2, '#03', 'vAFRMM   ', 01, 15, 1, CTe.infCTeNorm.aquav.vAFRMM, DSC_VAFRMM);
  Gerador.wCampo(tcStr, '#04', 'nBooking ', 01, 10, 0, CTe.infCTeNorm.aquav.nBooking, DSC_NBOOKING);
  Gerador.wCampo(tcStr, '#05', 'nCtrl    ', 01, 10, 0, CTe.infCTeNorm.aquav.nCtrl, DSC_NCTRL);
  Gerador.wCampo(tcStr, '#06', 'xNavio   ', 01, 60, 1, CTe.infCTeNorm.aquav.xNavio, DSC_XNAVIO);

...

  Gerador.wCampo(tcStr, '#09', 'nViag    ', 01, 10, 0, CTe.infCTeNorm.aquav.nViag, DSC_NVIAG);
  Gerador.wCampo(tcStr, '#10', 'direc    ', 01, 01, 1, TpDirecaoToStr(CTe.infCTeNorm.aquav.direc), DSC_DIREC);
  Gerador.wCampo(tcStr, '#11', 'prtEmb   ', 01, 60, 0, CTe.infCTeNorm.aquav.prtEmb, DSC_PRTEMB);
  Gerador.wCampo(tcStr, '#12', 'prtTrans ', 01, 60, 0, CTe.infCTeNorm.aquav.prtTrans, DSC_PRTTRANS);
  Gerador.wCampo(tcStr, '#13', 'prtDest  ', 01, 60, 0, CTe.infCTeNorm.aquav.prtDest, DSC_PRTDEST);
  Gerador.wCampo(tcStr, '#14', 'tpNav    ', 01, 01, 1, TpNavegacaoToStr(CTe.infCTeNorm.aquav.tpNav), DSC_TPNAV);
  Gerador.wCampo(tcStr, '#15', 'irin     ', 01, 10, 1, CTe.infCTeNorm.aquav.irin, DSC_IRIN);

para:

procedure TCTeW.GerarAquav;
var
 i, j: Integer;
begin
  Gerador.wGrupo('aquav', '#01');
  Gerador.wCampo(tcDe2, '#02', 'vPrest   ', 01, 15, 1, CTe.infCTeNorm.aquav.vPrest, DSC_VPREST);
  Gerador.wCampo(tcDe2, '#03', 'vAFRMM   ', 01, 15, 1, CTe.infCTeNorm.aquav.vAFRMM, DSC_VAFRMM);
  if (CTe.infCTe.versao = 2) then
   begin
    Gerador.wCampo(tcStr, '#04', 'nBooking ', 01, 10, 0, CTe.infCTeNorm.aquav.nBooking, DSC_NBOOKING);
    Gerador.wCampo(tcStr, '#05', 'nCtrl    ', 01, 10, 0, CTe.infCTeNorm.aquav.nCtrl, DSC_NCTRL);
   end;
  Gerador.wCampo(tcStr, '#06', 'xNavio   ', 01, 60, 1, CTe.infCTeNorm.aquav.xNavio, DSC_XNAVIO);

...

  Gerador.wCampo(tcStr, '#09', 'nViag    ', 01, 10, 0, CTe.infCTeNorm.aquav.nViag, DSC_NVIAG);
  Gerador.wCampo(tcStr, '#10', 'direc    ', 01, 01, 1, TpDirecaoToStr(CTe.infCTeNorm.aquav.direc), DSC_DIREC);
  if (CTe.infCTe.versao = 2) then
   begin
    Gerador.wCampo(tcStr, '#11', 'prtEmb   ', 01, 60, 0, CTe.infCTeNorm.aquav.prtEmb, DSC_PRTEMB);
    Gerador.wCampo(tcStr, '#12', 'prtTrans ', 01, 60, 0, CTe.infCTeNorm.aquav.prtTrans, DSC_PRTTRANS);
    Gerador.wCampo(tcStr, '#13', 'prtDest  ', 01, 60, 0, CTe.infCTeNorm.aquav.prtDest, DSC_PRTDEST);
    Gerador.wCampo(tcStr, '#14', 'tpNav    ', 01, 01, 1, TpNavegacaoToStr(CTe.infCTeNorm.aquav.tpNav), DSC_TPNAV);
   end;
  Gerador.wCampo(tcStr, '#15', 'irin     ', 01, 10, 1, CTe.infCTeNorm.aquav.irin, DSC_IRIN);

 

"pcnConversao" Foi adicionado as seguintes funções:

  TpInfManu = (imCEEAV, imAPCDEA, imSAC, imAPDENR, imAPQI, imGSR, imNR, imAPCC, imAAGA, imPI965, imPI966, imPI967, imPI968, imPI969, imPI970, imOUTRO);

function TpInfManuToStr(const t: TpInfManu): string;
function StrToTpInfManu(out ok: boolean; const s: string): TpInfManu;

function TpInfManuToStr(const t: TpInfManu): string;
begin
  result := EnumeradoToStr(t, ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','99'],
                              [imCEEAV, imAPCDEA, imSAC, imAPDENR, imAPQI, imGSR, imNR, imAPCC, imAAGA,
                               imPI965, imPI966, imPI967, imPI968, imPI969, imPI970, imOUTRO]);
end;

function StrToTpInfManu(out ok: boolean; const s: string): TpInfManu;
begin
  result := StrToEnumerado(ok, s, ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','99'],
                                  [imCEEAV, imAPCDEA, imSAC, imAPDENR, imAPQI, imGSR, imNR, imAPCC, imAAGA,
                                   imPI965, imPI966, imPI967, imPI968, imPI969, imPI970, imOUTRO]);
end;

em Anexo as UNIT's Alteradas. E um fr3 alterado para a Versão 3.00, já com os campos sobre vale pedágio, veículos, motorista e outros campos removidos conforme o Manual de Ve300.

att

José Suzano Simione

 

pcteCTe.pas

pcteCTeR.pas

pcteCTeW.pas

pcnConversao.pas

  • Consultores
Postado

Boa noite José,

Primeiramente gostaria de lhe agradecer pelo empenho em deixar o componente cada vez mais em conformidade com o manual.

Mas devemos tomar o cuidado de ao fazer esses ajustes nos fontes mais atuais.

Notei que alguns fontes que você alterou não estão atualizados., por exemplo o pcnConversao.pas

Outra coisa o tipo que você criou me parece ser especifico do CT-e, sendo assim sugiro que seja colocado na unit: pcteConversaoCTe.pas

O elemento cInfManu que você alterou o tipo é preciso mais uma alteração, pois ele pode se repetir n vezes dentro do grupo natCarga.

Logo é preciso fazer com que ele seja considerado uma lista e não apenas um simples elemento dentro do seu grupo, isso acarreta alterações em pcteCTe.pas, pcteCTeR.pas e pcteCTeW.pas

Sendo assim ainda não vou aplicar as suas alterações.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Italo,

Eu dei uma olhada no manual e creio que isso possa ser um erro. Pois o próprio Schema não trata o campo como uma Lista, e no manual o tipo do campo não esta como grupo (G), por padrão os campos de lista são grupos que possuem ao menos uma tag, o que não se aplica com o caso do cInfManu, validando minha teoria de que isso é algum erro no manual.

Veja a tag cInfManu:

cInfManu.thumb.png.c1026d0877734dea6377d31adfae09f3.png

podemos ver a diferencia de um campo indicado como lista:

58ca9488f18e3_ExemploG.thumb.png.81e342b775582f7d389d8d91851fc196.png

 

Sem contar os Schemas onde a tag cInfManu não contem o grupo <xs:sequence> que seria o indicador de uma lista.

Podemos concluir que se isso for alterado o Schema não validará.

 

Att

José S. Simione 

Postado

Bom dia!

Hoje, atualizei o componente e conferi minha alterações, fiz alguns ajustes no código para ficar mais limpo e funcional mas nada muito diferente do que já postei acima. Referente ao campo cInfManu eu não alterei para lista, seguindo a logica explicada no post anterior. Segue as UNITs alteradas para emissão do CT-e 3.00, e um modelo da DACTe 3.00.

Aguardo retorno.

pcteConversaoCTe.pas

pcteCTe.pas

pcteCTeR.pas

pcteCTeW.pas

ACBrCTeDACTEFR.pas

DACTE_Ve300.fr3

  • Consultores
Postado

Boa noite José,

Note que a TAG cInfManu é um elemento e não grupo, é do tipo Numérico, mas na coluna ocorrências temos 0-n.

Quando temos 1-1 significa que a tag aparece apenas uma vez e é obrigatória.

Quando temos 0-1 significa que a tag aparece apenas uma vez e é opcional

Mas o caso é 0-n, isso significa que a tag é opcional e pode aparecer no XML n vezes.

Logo temos uma lista.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Bom dia Italo,

Obrigado pelo retorno. Eu entendo isso, porem você consegue imaginar esse campo sendo alimentado como lista sem pertencer a um grupo? Poderia me dar um exemplo de uma XML assim ou me mostrar um campo semelhante de exemplo?

Ao meu entendimento, o XML ficaria dessa maneira, o que não creio que seja correto.

<aereo>
	<nOCA>00000000000</nOCA>
	<dPrevAereo>2017-03-23</dPrevAereo>
	<natCarga>	
		<xDime>15x10x15</xDime>
		<cInfManu>01</cInfManu>
		<cInfManu>02</cInfManu>		
		<cInfManu>03</cInfManu>
		<cInfManu>04</cInfManu>
		<cInfManu>05</cInfManu>
		<cInfManu>06</cInfManu>
		...      
	</natCarga>

	<tarifa>
		<CL>M</CL>
		<cTar>001</cTar>
		<vTar>10.00</vTar>
	</tarifa>
</aereo>

Outro ponto seria que mesmo que façamos em lista o Schemas atual não esta preparado para tratar esse campo como lista.

Grato pela atenção!

Att,

José S. Simione

  • Consultores
Postado

Boa tarde José,

Veja estes 2 exemplos extraído do schema cteModalAereo_v3.00:

                            <xs:element name="xDime" minOccurs="0">
                            <xs:element name="cInfManu" minOccurs="0" maxOccurs="unbounded">

A tag <xDime> é opcional, pois o minimo de ocorrências é zero, como não esta definido o máximo, fica subentendido que é 1.

Já a tag <cInfManu> temos que o minimo é zero e o máximo é indefinido, ou seja, N isso significa que essa tag poderá ocorrer no XML N vezes, logo temos uma lista.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Bom dia!

O senhor chegou a ver o exemplo que dei? Devo concluir que você concorda e que é dessa maneira que devemos fazer?

 

Devo pedir um pouco mais de atenção, pois não estou questionando se o item é uma lista ou não, e sim o fato de ser uma lista sem um grupo e que isso geraria uma XML peculiar como o exemplo que dei acima. No schemas temos a mesma questão o item não se encontra dentro de uma tag  <xs:sequence> que indicaria o grupo desse item. Outro fato seria que no manual todo não existe outro campo que seja 0 - n que não pertença a um grupo, o que leva a crer que seja um erro no manual, que não seria o primeiro. 

Agradeceria uma resposta um pouco mais conclusiva, pois a outros pontos nesse post que gostaria de concluir.

  • Consultores
Postado

Boa noite José,

Na postagem onde você coloca um fragmento de XML é exatamente como ele tem que ficar.

Eu só não entendo o motivo que somente um grupo pode se repetir, porque um elemento não pode?

Veja a página 184 da versão 6.0 do Manual da NF-e, procure pelo elemento: NVE, o numero de ocorrências varia de 0-8, note que não existe um erro, pois a coluna de observação deixa claro que podemos informar até 8 NVE.

Para colocar um ponto final.

1. Para um grupo ou elemento possuir 2 ou mais ocorrências não precisa estar dentro de um <xs:sequence>, visto que sequence é um conector que define a ordem que os elementos devem aparecer dentro de um grupo;

2. Tanto o manual quanto o schema não estão errados;

3. O elemento cInfManu poderá se repetir N vezes dentro do grupo natCarga;

4. O seu exemplo de XML esta correto;

5. O elemento cInfManu tem que ser implementado aos mesmos moldes do NVE da NF-e.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Bom dia, Italo!

Obrigado pela atenção!

Ótimo, vou estudar o campo de exemplo e ver como trabalhar com um campo assim.

Se alguém souber como ler esses tipos de campo me ajudaria com algum exemplo de logica ou código.

Att

José S. Simione

  • Consultores
Postado

Boa noite José,

Como dito na postagem anterior, você pode tomar como base o elemento NVE da NF-e.

Procure por ele nas units: pcnNFe (definição das classes), pcnNFeW (gera a tag no XML) e pcnNFeR (lê a tag do XML).

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Solution
Postado

Bom dia, Italo!

Alterei o campo cInfManu para lista, conforme discutido acima. Segue as UNITs com as alterações já descritas no post e o campo em lista, mandarei também um modelo de DACTe 3.00 que estou usando com meus clientes.

Grato pela atenção e aguardo o retorno.

Att,

José S. Simione

pcteCTeW.pas

pcteConversaoCTe.pas

pcteCTe.pas

pcteCTeR.pas

DACTE_Ve300.fr3

ACBrCTeDACTEFR.pas

  • Curtir 2
Postado

Bom dia!

Obrigado pela colaboração.

Estava revendo o código referente a DACTe e encontrei um pequeno erro, no campo cInfManu, eu criei uma logica para formatar o campo com pontuações, esqueci de validar para que o ponto final, não fosse impresso caso o campo fosse vazio. Fiz uma pequena alteração nesse trecho para corrigir. 

Alterado de:

for i := 0 to CTe.infCTeNorm.aereo.natCarga.cinfManu.Count - 1 do
begin
  if (i > 0) then
    FieldByName('cInfManu').AsString := FieldByName('cInfManu').AsString + ', ';
  FieldByName('cInfManu').AsString := FieldByName('cInfManu').AsString + TpInfManuToStr(CTe.infCTeNorm.aereo.natCarga.cinfManu.Items[i].nInfManu);
end;
FieldByName('cInfManu').AsString := FieldByName('cInfManu').AsString + '.';

para:

for i := 0 to CTe.infCTeNorm.aereo.natCarga.cinfManu.Count - 1 do
begin
  if (i > 0) then
    FieldByName('cInfManu').AsString := FieldByName('cInfManu').AsString + ', ';
  FieldByName('cInfManu').AsString := FieldByName('cInfManu').AsString + TpInfManuToStr(CTe.infCTeNorm.aereo.natCarga.cinfManu.Items[i].nInfManu);
end;
if (FieldByName('cInfManu').AsString <> '') then
  FieldByName('cInfManu').AsString := FieldByName('cInfManu').AsString + '.';

Foi o único ajuste, peço desculpas pela falta de atenção nesse ponto e segue a UNIT com essa alteração.

Att

José S. Simione

ACBrCTeDACTEFR.pas

  • Membros Pro
Postado

Boa tarde Cleonir,

Olhei seu post anterior e fiz a atualização dos componentes do CTe. Mas na impressão do CTe 3.0 quando for um cte de subcontratação não esta saindo na impressão do DACTe as chaves dos CTe(s) anteriores no Fast Report.

Você fez alguma alteração referente ao CTE de subcontratação?

Obrigado e bom final.

Att.

Postado
17 minutos atrás, sesistemas disse:

Boa tarde Cleonir,

Olhei seu post anterior e fiz a atualização dos componentes do CTe. Mas na impressão do CTe 3.0 quando for um cte de subcontratação não esta saindo na impressão do DACTe as chaves dos CTe(s) anteriores no Fast Report.

Você fez alguma alteração referente ao CTE de subcontratação?

Obrigado e bom final.

Att.

Boa tarde.

José S. Simione esta fazendo etes ajustes, Estou esperando eles adicionarem no SVN,

acredito que adicionarão logo.

  • Moderadores
Postado
15 horas atrás, sesistemas disse:

Boa tarde Cleonir,

Olhei seu post anterior e fiz a atualização dos componentes do CTe. Mas na impressão do CTe 3.0 quando for um cte de subcontratação não esta saindo na impressão do DACTe as chaves dos CTe(s) anteriores no Fast Report.

Você fez alguma alteração referente ao CTE de subcontratação?

Obrigado e bom final.

Att.

Por favor leia as regras e parem de postar em diversos locais ou serão punidos!

não foi subido ainda ao svn toda a implementação! então aguardem.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado

Bom dia, Juliomar.

Só queria saber se esta tudo o que o código que não foi subido, ainda estou no aguardo desse fonte, caso tenha algum problema com o código estou a disposição para discutirmos sobre.

Obrigado pela atenção!

 

Att

José S. Simione

  • Este tópico foi criado há 2721 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.