Configuração da margem de segurança nos relatórios do PrintBuilder
Nota: está incluído no diretório de instalação do Módulo de Incerteza um exemplo de certificado IndySoft denominado GuardbandingExample.rtm, que contém todo o layout de exemplo e o código personalizado mencionados neste tópico de ajuda. Para importar este modelo de certificado de exemplo para o PrintBuilder, selecione o tipo de modelo «Certificados» no PrintBuilder e clique no botão «Importar a partir do ficheiro».
É possível configurar facilmente a faixa de segurança num relatório CERTIFICATE ou NON-CONFORMANCE da IndySoft utilizando o PrintBuilder. Selecione o relatório pretendido e edite-o utilizando o criador de relatórios IndySoft (clique duas vezes no nome do relatório no PrintBuilder). Selecione o subrelatório «CalibrationTestPoints» nas separadores na parte inferior e, em seguida, adicione o campo «Incerteza» à sua grelha de pontos de teste. Segue-se um exemplo:

Adicionar um campo de incerteza a um certificado - Exemplo
Para além do novo campo «Incerteza», este exemplo também utiliza um símbolo opcional *** para indicar se um ponto de teste está potencialmente fora da tolerância quando se tem em conta a incerteza. Pode configurar código personalizado para mostrar ou ocultar estes *** em cada ponto de teste, utilizando o separador «Calc» no IndySoft Report Designer. Segue-se um exemplo deste código personalizado. Neste caso, o evento BeforePrint é utilizado para a faixa «Detalhe» do subrelatório «CalibrationTestPoints».

Código personalizado do DetailBeforePrint para mostrar/ocultar o aviso sobre guardbanding
Pascal
Var
dUncertainty, dAsFound, dTolerancePlus, dToleranceMinus : Double;
{mostrar/ocultar *** etiqueta com base na margem de segurança}
Label3.Visible := False;
dUncertainty := CalibrationTestPoints['Uncertainty'];
dAsFound := CalibrationTestPoints['As Found'];
dTolerancePlus := CalibrationTestPoints['Tolerance +'];
dTolerânciaMenos := PontosDeTesteDeCalibração['Tolerância -'];
se dEncontrado + dIncerteza > dTolerânciaMais então Label3.Visível :=True;
se dEncontrado - dIncerteza < dTolerânciaMenos então Label3.Visível :=True;
se Label3.Visível então Label3.Visível := True;
Por fim, é provável que seja necessário formatar a apresentação do campo «Incerteza» no certificado de acordo com a resolução especificada no Orçamento de Incerteza (que não é necessariamente a resolução especificada para os campos «Tal como encontrado», «Tal como deixado» ou «Tolerância»). Esta resolução do orçamento de incerteza é mapeada para um campo personalizado de ponto de teste utilizando a opção «Mapear Unidade/Res. Campo «To» no Módulo de Incerteza. Para efeitos deste exemplo, foi selecionada a opção «Custom 1» para «Map Unit/Res. Para... Para formatar o valor da incerteza na grelha de pontos de ensaio dentro do certificado, utilize o código personalizado conforme indicado abaixo:

Código «BeforeDetail» para a aplicação da resolução de incertezas
Pascal
Var
I, I2, I3, iNumResolution, iResResolution, j : Integer;
sRes, sRes2 : String;
sSpecFormat, sResultFormat : String;
sUncertRes, sUncertTemp : String;
iUncertRes : Integer;
bWithinParentheses : Boolean;
dUncertainty, dAsFound, dTolerancePlus, dToleranceMinus : Double;
begin
{Resolução de incerteza da Apple, deve primeiro ser analisada a partir de 'Custom 1'}
sUncertRes := CalibrationTestPoints['Custom 1'];
bWithinParentheses := False;
sUncertTemp := '';
for j := 0 to 29 do
begin
if Copy(sUncertRes, j, 1) = '(' then bWithinParentheses := True;
if Copy(sUncertRes, j, 1) = ')' then bWithinParentheses := False;
se bWithinParentheses então
começo
se ((Copy(sUncertRes, j, 1) = '0') ou (Copy(sUncertRes, j, 1) = '1') ou
((Copy(sUncertRes, j, 1) = '2') ou (Copy(sUncertRes, j, 1) = '3') ou
((Copy(sUncertRes, j, 1) = '4') ou (Copy(sUncertRes, j, 1) = '5') ou
((Copy(sUncertRes, j, 1) = '6') ou (Copy(sUncertRes, j, 1) = '7') ou
((Copy(sUncertRes, j, 1) = '8') ou (Copy(sUncertRes, j, 1) = '9')) então
sUncertTemp := sUncertTemp + Copy(sUncertRes, j, 1);
end;
end;
iUncertRes := StrToInt(sUncertTemp);
sRes := '#######0';
if ((iUncertRes >= 0) and (iUncertRes <= 12) then i2 := iUncertRes
else i2 := 6;
if i2 > 0 then
begin
sRes := sRes + '.';
for i := 0 to i2-1 do sRes := sRes + '0';
end;
DBText1.DisplayFormat := sRes;
No exemplo de código acima, repare que Label3 se refere ao componente de texto «***» adicionado no separador Design. A Legenda 2 refere-se à legenda abaixo dos pontos de teste que diz: «Os pontos de teste assinalados com "***" estão potencialmente fora da tolerância quando se tem em conta a incerteza.». Uma vez que a propriedade Visible do Label2 está definida por predefinição como False na tabela Design principal, o Label2 só será exibido se houver pelo menos um ponto de teste marcado com «***». |