Ir para conteúdo
  • Cadastre-se

dev botao

Movimento por ECF - R02


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

Recommended Posts

Quando informo que o Registro não é valido, deveria preencher o Modelo ECF com as "?", porem tem algo errado pois não esta preenchendo. Acabei de depurar novamente, e constatei que a variavel RegistroValido está recebendo FALSE.

Trecho do codigo:

with ACBrPAF1.PAF_R.RegistroR02.New do begin

NUM_USU := 1;

CRZ := 180;

COO := 588;

CRO := 15;

......

RegistroValido := FALSE;

end;

Link para o comentário
Compartilhar em outros sites

Ola Regys, obrigado pela pronta resposta....

No meu codigo, está assim:

RegistroValido := Hash_R02_RedZ(ibd_R02_RedZ.fieldbyName('REDZ_VERIFICACAO').AsString);

Sendo que a funcao HASH_R02_REDZ retorna false, e mesmo assim nao preenche com as "?"

De qualquer forma, mesmo eu usando no exemplo acima, "RegistroValido := false", ele nao marca as interrogacoes...

Link para o comentário
Compartilhar em outros sites

Ramon, tive problema parecido e não sei se foi coincidência.

Meu código estava todo pronto, só que eu achava que quando tivesse um registro inválido eu estava mudando o Modelo do ECF para '?' com isso modificava em todos os registros, no R01 ao R07. Só que é para aparecer apenas no registro modificado.

Ao começar a utilizar o RegistroValido várias comparaçãos minhas do tipo 'If x> 0 then ... else ...' sempre retornavam maior, independente de serem menor, igual ou maior que 0, o Delphi sempre entrava na comparação de Maior Que...

Perdi uma manhã inteira e não sabia o que fazer, no final eu apaguei parte do código e compilei, depois redigitei tudo (não pode colar) e funcionou, o mesmo código agora estava dando certo.

Não é a primeira fez que isso acontece comigo.

Ass. Vially Israel

Link para o comentário
Compartilhar em outros sites

  • 8 meses depois ...

Vou reviver o tópico pq está acontecendo algo parecido comigo.

Tenho a seguinte situação

R01.RegistroValido := true

R01.MODELO_ECF := 'MP4000 TH FI'

R02.RegistroValido := False;

No arquivo mostra da seguinte forma no registro R02 no campo MODELO ECF : 'MP-2100?TH?FI???????', ou seja, quando tem informação no campo Modelo ECF e o registro não é válido no R02, apenas é colocado o caractere "?" nos espaços em branco.

Debugando o componente, fui até a unit ACBrPAF_R_Class na função function TPAF_R.WriteRegistroR02: String;

logo vi que o registro é escrito pelo método

RFill(FRegistroR01.MODELO_ECF, 20, ifThen(RegistroValido, ' ', '?')) +

ou seja, essa função RFill da unit ACBrTXTClass.pas so insere o cactere passado como parametro APENAS nos espaços em branco, não deveria inserir o "?" no campo todo?. segue a função

function TACBrTXTClass.RFill(Value: String; Size: Integer = 0; Caracter: Char = ' '): String;

begin

/// Se a propriedade TrimString = true, Result retorna sem espaços em branco

/// iniciais e finais.

if FTrimString then

Result := Trim(Value);

if (Size > 0) and (Length(Value) > Size) then

Result := Copy(Value, 1, Size)

else

Result := Value + StringOfChar(Caracter, Size - Length(Value));

if Caracter = '?' then

Result := FDelimitador + StringReplace(Result, ' ', Caracter, [rfReplaceAll])

else

Result := FDelimitador + Result;

end;

Link para o comentário
Compartilhar em outros sites

Pessoal, eu alterei a função RFill na linha

if Caracter = '?' then

Result := FDelimitador + StringReplace(Result, ' ', Caracter, [rfReplaceAll])

else

Result := FDelimitador + Result;

para

if Caracter = '?' then

Result := FDelimitador + StringOfChar(Caracter, Size)

else

Result := FDelimitador + Result;

ae completou os "?" corretamente, pergunto, a alteração procede? tipo, so vai influenciar quando for para colocar o caractrere "?" que é o caso.

Link para o comentário
Compartilhar em outros sites

  • Moderadores


if (Size > 0) and (Length(Value) > Size) then
Result := Copy(Value, 1, Size)
else
Result := Value + StringOfChar(Caracter, Size - Length(Value));

if Caracter = '?' then
Result := FDelimitador + StringReplace(Result, ' ', Caracter, [rfReplaceAll])
else
Result := FDelimitador + Result;
end;
[/code]

Sim ele troca todos os espaços em branco para "?", mas veja que antes ele completa o campo até o tamanho com espaços em branco, portanto, está correto.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

Olá Regys, obrigado pela resposta.

Sim ele troca todos os espaços em branco para "?", mas veja que antes ele completa o campo até o tamanho com espaços em branco, portanto, está correto.

Certo, ele completa (Result := Value + StringOfChar(Caracter, Size - Length(Value));), mas logo depois temos "if Caracter = '?' then ", nesse caso, ele não deveria trazer somente o "?" ao invés de trazer algo como "MP-2100?TH?FI???????" no campo modelo? no R02, quando a gente diz que o registro é Invalido, ae ele preenche o campo no arquivo dessa forma acima, não deveria ser algo como "????????????????????", agora imagine se no campo modelo é preenchido com os 20 caracteres sem espaço, ae no caso ele não traria nenhum "?" no campo Modelo do ECF.

Link para o comentário
Compartilhar em outros sites

No roteiro ver. 1.7, teste 107 passo 6a.

PASSO 6a: Observar se o campo “Modelo do ECF”, para a redução “Z” emitida no passo

3, do registro tipo R02 gerado no passo anterior, apresenta como conteúdo o caracter “?”;

Ou seja, é obrigatório, agora se o registro for inválido, ae tem que colocar o "?", no caso do ACBrPAF ele ta colocando os "?", mas apenas quando não tem informação no campo, quando tem informação no campo ele coloca o "?" apenas nos espaços em branco, juntando com a informação do campo como mostrei, só que ao meu entender, o campo "Modelo de ECF" do registro R02 deve apresentar os cacteres "?" para indicar que o mesmo foi alterado sem ser pelo PAF, ou seja, direto pelo banco, como consta no teste do roteiro.

Na verdade, isso ocorre com os demais registros, vim observando que não ficava com o cacactere "?" POR COMPLETO quando o registro era inválido, com essa alteração, agora quando o registro é inválido está preenchendo o campo todo com o "?", que no caso do R02 é o Modelo do ECF.

Ou seja, nos campos que devem preencher com o caractere "?", o ACBrPAF so preenche nos espaços em brancos e não no tamanho do campo todo. Levando em considereção que deve preencher no campo todo, pois eu estou entendendo assim no roteiro, ae eu modifiquei para que o ACBrPAF preencha o campo todo com "?" quando o registro for inválido e substitua o valor que foi passado para o campo.

Link para o comentário
Compartilhar em outros sites

Na homologação vc tem q deixar as informações do modelo do ECF e os os espeços em branco é preencido com o ??? o ACBrPAF esta correto agora se vc substituir o modelo do ECf e prrencher todo o campo com o ?? o homologador pode alegar q para onde foi para o modelo do ECF...

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 4491 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.