Ir para conteúdo
  • Cadastre-se

Joceandro Perin

Membros
  • Total de ítens

    207
  • Registro em

  • Última visita

  • Days Won

    1

Posts postados por Joceandro Perin

  1. Boa tarde galera

    O campo natAtividade dos eventos S-2200 e S-2206 está setando o valor incorreto, verifiquei aqui que está pegando o ord da tipagem e somando mais um, se eu passar navUrbano, ele sempre seta navRural.. Acredito que esse problema começou a ocorrer depois da inclusão da opção navNaoInformar na tipagem..

    Ajustei os fontes para pegar a conversão, desta forma não haverá problemas..

    Como estava..

    Gerador.wCampo(tcStr, '', 'natAtividade', 1,  1, 1, ord(objInfoCeletista.NatAtividade) + 1);

    Ajustado para...

    Gerador.wCampo(tcStr, '', 'natAtividade', 1,  1, 1, eSNatAtividadeToStr(objInfoCeletista.NatAtividade));

    Ajustei tbm o campo tpRegJor para seguir o mesmo padrão..

    @Italo Jurisato Junior Segue os fontes para avaliação..

     

     

    pcesS2206.pas

    pcesS2300.pas

    pcesS2306.pas

  2. 4 minutos atrás, Jonathan Fabricio Seibel disse:

    Blz.. a minha esta assim:

    function TItemLoteEventos.GetIDEvento: string;
    var
      Ini: Integer;
    begin
      //     <evtInfoEmpregador Id="ID1012345678900002017071908065532932">
      Result := EmptyStr;
      Ini := pos('Id=', XML);
      if ini > 0 then
      begin
        Result := Copy(XML, Ini + 4, 38);
        Result := StringReplace(Result, '"', '', []);
        Result := StringReplace(Result, '>', '', []);
        Result := StringReplace(Result, '<', '', []);
        Result := StringReplace(Result, '=', '', []);
      end;
    end;

     

    Como deve ser ?

    Essa que você passou é a correta a que funciona, aí foi ajustado pra essa..

    function TItemLoteEventos.GetIDEvento: string;
    var
      Ini: Integer;
    begin
      Result := EmptyStr;
      Ini := pos('Id=', XML);
      if ini > 0 then
        Result := OnlyNumber(Copy(XML, Ini + 4, 38));
    end;

    nessa implementação ele remove a string "ID" deixando apenas a numeração.. Aí retorna o erro do ID incorreto..

    Eu acho que o Italo ajustou essa função pra poder gerar os XML em diretório com uma ID pra não sobrepor sempre o mesmo XML, e assim manter o histórico dos XML gerados..

  3. 8 minutos atrás, Jonathan Fabricio Seibel disse:

    Poise ontem estava normal agora retorna o Erro 500 e não dei update no componente de ontem para Hoje... acredito ser um erro no servidor do E-Social, porque pra enviar já foi dificil...

     

    image.png.4b6ae9ad84734576db5704af4aac5571.png

    Ahh, pode ser então ws do esocial com problema.. Com os ajustes que foi feito ontem, o envio não estava funcionando, aí voltando a função GetIDEvento para a implementação anterior, volta a funcionar..

  4. Certo, você enviou em ambiente de produção ou homologação? Se for homologação, você pode zerar a base e enviar tudo novamente, se for produção, tem que enviar todas as exclusões observando a data iniValid que foi enviado anteriormente..

    Então, essa informação do iniValid e finValid como envio dos registros pela primeira vez como 2016-01 para ambiente de homologação e 2018-01 para produção, foi orientação do eSocial.. Mas não está bem clara nos manuais como tem que ser enviado a alteração, eu vi outros colegas desenvolvedores nos grupos de whatsapp do eSocial enviando dessa forma e aqui funcionou, estou conseguindo enviar a inclusão, alteração e exclusão..

  5. Tem coisa errada nas tags iniValid e finValid.. É bem confuso de entender como tem que ser enviado, mas quando é enviado pela primeira vez, deve ser informado a iniValid = 2016-01 para homologação e 2018-01 para produção e finValid só deve ser enviado se esse registro terá uma data fim de validade, caso contrário não deve enviar nenhuma informação nessas tags.. Quando for uma alteração, o iniValid da tag idePeriodo deverá ser o do último enviado e iniValid da tag novoPeriodo o mês em questão e assim por diante conforme haja novas alterações.. Bem confuso esse negócio :?:?:?

  6. Bom dia,

    Peguei mais uma situação aqui, meu executável voltou a ficar preso em memória quando subo o evento S-1050.. Pelo debug consegui ver que está preso por causa do objeto THorarioIntervaloCollection..

    Screenshot_1.png.5845bbc040db215bf634ef5c8332c409.png

    Observei que esses objetos são destruídos, porém usando o Free, mesmo assim ele continua em memória, troquei pelo FreeAndNil e resolveu o problema..

    @Italo Jurisato Junior @Rafael Dias Mandei as units para avaliação..

     

    pcesRetornoClass.pas

    pcesS1050.pas

  7. Boa tarde galera..

    Na função GerarFGTS da unit pcesS2300, está passando a tipagem sem fazer a conversão pro gerador, desta forma está gerando inconsistência no eSocial..

     Como estava..

    procedure TEvtTSVInicio.GerarFGTS(obj: TFGTS);
    begin
      if obj.dtOpcFGTS > 0 then
      begin
        Gerador.wGrupo('fgts');
    
        Gerador.wCampo(tcStr, '', 'opcFGTS',    1,  1, 1, obj.OpcFGTS);
        Gerador.wCampo(tcDat, '', 'dtOpcFGTS', 10, 10, 0, obj.dtOpcFGTS);
    
        Gerador.wGrupo('/fgts');
      end;
    end;

    Ajustado para..

    procedure TEvtTSVInicio.GerarFGTS(obj: TFGTS);
    begin
      if obj.dtOpcFGTS > 0 then
      begin
        Gerador.wGrupo('fgts');
    
        Gerador.wCampo(tcStr, '', 'opcFGTS',    1,  1, 1, eSOpcFGTSToStr(obj.OpcFGTS));
        Gerador.wCampo(tcDat, '', 'dtOpcFGTS', 10, 10, 0, obj.dtOpcFGTS);
    
        Gerador.wGrupo('/fgts');
      end;
    end;

    @Italo Jurisato Junior @Rafael Dias Segue unit.. Abraço..

    pcesS2300.pas

  8. Bom dia galera..

    Peguei uma situação aqui em que o empregado não se enquadra no regime de jornada 1 - Submetidos a Horário de Trabalho (Cap. II da CLT) campo tpRegJor, porém a tag horContratual está sempre montando, e ao enviar esses empregados está retornando inconsistências..

    Observei que a montagem desta tag somente é obrigatória respeitando a seguinte validação.. O preenchimento é obrigatório se {tpRegJor} = [1]

    Screenshot_2.thumb.png.6a3a120bdb689f1dbbec73ba3b008806.png

    Como não estou passando valores para essas tags, ele está setando valores default, gerando as inconsistências no eSocial..

    @Italo Jurisato Junior @Rafael Dias

    Mandei as units com os ajustes para avaliação.. Obrigado..

     

    pcesGerador.pas

    pcesS2206.pas

  9. Boa tarde galera..

    A tipagem tpNivelEstagio deve possuir duas opções a mais conforme layout 2.4.01..

    8 - Especial; 
    9 - Mãe social. (Lei 7644, de 1987)

    Adicionei as duas opções faltantes na unit pcesConversaoeSocial...

    tpNivelEstagio = (nvFundamental, nvMedio, nvEnsinoProfis, nvSuperior, nvEspecial, nvMaeSocial);

    Adequado a unit pcesS2300 para passar corretamente a conversão pro gerador..

    @Italo Jurisato Junior @Rafael Dias Segue as units para avaliação, obrigado..

     

    pcesConversaoeSocial.pas

    pcesS2300.pas

  10. Boa tarde Alisson, estava gerando com o enum da tipagem e deveria pegar o convertido.. Por exemplo, se pegar direto da tipagem vc tem um sequencial 0,1,2,3.. e não é esse o código correto porque a tabela dos motivos de afastamento tem furos no sequencial sem contar que 0 não existe.. Veja..

    Screenshot_1.thumb.png.07d62e4c617f9f6345167fcdd91f96a4.png

  11. Bom dia, estava com esse problema, aí observei uma validação que tem e consegui enviar..

    No manual a condição para montagem é F (até 31/12/2017 se {codCateg} = [104]). N (nas demais situações).

    Então pelo meu entendimento, se a aposentadoria foi até 31/12/2017 e a Categoria for 104 - Empregado - Doméstico, ele aceita a montagem, se for diferente disso, deve ser passado N ou não montar essa tag..

  12. Boa tarde galera..

    Peguei uma situação aqui em que o empregado está afastado há algum tempo..

    Quando ele vai gerar o campo codMotAfast está setando o valor errado, ajustei a unit pcesGerador para passar a tipagem convertida pra string pro gerador, desta forma seta o valor correto..

    Como estava..

    procedure TeSocialEvento.GerarAfastamento(pAfastamento: TAfastamento);
    begin
      if pAfastamento.DtIniAfast > 0 then
      begin
        Gerador.wGrupo('afastamento');
    
        Gerador.wCampo(tcDat, '', 'dtIniAfast',  10, 10, 1, pAfastamento.DtIniAfast);
        Gerador.wCampo(tcStr, '', 'codMotAfast',  1,  1, 1, pAfastamento.codMotAfast);
    
        Gerador.wGrupo('/afastamento');
      end;
    end;

    Ajustado para..

    procedure TeSocialEvento.GerarAfastamento(pAfastamento: TAfastamento);
    begin
      if pAfastamento.DtIniAfast > 0 then
      begin
        Gerador.wGrupo('afastamento');
    
        Gerador.wCampo(tcDat, '', 'dtIniAfast',  10, 10, 1, pAfastamento.DtIniAfast);
        Gerador.wCampo(tcStr, '', 'codMotAfast',  1,  1, 1, eStpMotivosAfastamentoToStr(pAfastamento.codMotAfast));
    
        Gerador.wGrupo('/afastamento');
      end;
    end;

    @Italo Jurisato Junior, @Rafael Dias Mandei a unit para avaliação.. Abraços..

     

    pcesGerador.pas

  13. 1 minuto atrás, isaque.ribeiro disse:

    Funcionou corretamente!

    Mas em que cenário em uso o tipo teOrgaoPublico?

    Realmente não sei te dizer em que momento utiliza, só sei que quando você seta teOrgaoPublico ou tePessoaFisica, ele passa a montar o ID com todo CNPJ/CPF que é orientado no manual.. Com CPF eu já testei e sei que passa, agora órgão público não sei o motivo..

  14. 2 horas atrás, EdmarFrazao disse:

    @Joceandro Perin

    posta o exemplo para ver o que você fez

    Segue um exemplo do que eu fiz.. Tem servido como um "quebra galho" por enquanto..

    function TrataErro(Msg: string): string;
    var
      Tamanho, PosFin, PosIni: Integer;
    begin
      try
        Result := Msg;
        Result := StringReplace(Result, Chr(09), '', [rfReplaceAll]); // Tab
        Result := StringReplace(Result, Chr(10), '', [rfReplaceAll]); // Line feed
        Result := StringReplace(Result, Chr(13), '', [rfReplaceAll]); // Carriage return
        Result := StringReplace(Result, Chr(39), '', [rfReplaceAll]); // Apostrophe
        Result := StringReplace(Result, '1824 - Element ', '', [rfReplaceAll]);
        Result := StringReplace(Result, ':  is not a valid value of the local atomic type.', '', [rfReplaceAll]);
    
        PosIni := Pos('{', Result);
        PosFin := Pos('}', Result);
    
        if (PosIni > 0) and (PosFin > 0) then
        begin
          Tamanho := PosFin - PosIni;
          System.Delete(Result, PosIni, Tamanho);
          Result := StringReplace(Result, '}', ' > ', [rfReplaceAll]);
        end;
      except
        Result := Msg;
      end;
    end;

     

×
×
  • 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.