Como todos sabemos o código da chave da Nfe é gerado por uma série de regras como estas
cuf       =  código da unidade de federação do emitente
cnpj     =  cnpj do emitente
mod     =  Código do modelo do Documento Fiscal. Utilizar 55 para identificação da NF-e
serie    =  série da nota
nnf       =  Número do Documento Fiscal
aamm  =   data de emissão da nota
cnf       =   Código numérico que compõe a Chave de Acesso. Número aleatório gerado pelo emitente para cada NF-e

Sabendo destas regras e nomeado os parametros já sabemos como trabalhar na nfe a série é obrigatória ter três digitos por isso utilizamos a proc  procedure p_s_nfe_preenchenumero(serie,3,'0','E') que adiciona zeros a esquerda do mesmo modo a nnf e a cnf com nove digitos obrigatórios onde o cnf é um codigo incremental com zeros a esquerda simulando um numero aleatório.
Espero ter ajudado para compreender melhor, de uma olhada nos primeiros posts.
Esta proc retorna a chave da Nfe e o digito verificador.

Um abraço e no próximo post vamos montar a view V_NFE_NOTA_FISCAL




CREATE PROCEDURE P_S_NFE_IDNFE (
    cuf varchar(2),
    aamm date,
    cnpj varchar(20),
    mod varchar(10),
    serie varchar(10),
    nnf integer,
    cnf integer)
returns (
    verificador varchar(2),
    result varchar(1000))
as
declare variable ano varchar(4);
declare variable data varchar(4);
declare variable mes varchar(2);
declare variable dv varchar(2);
declare variable numero varchar(500);
declare variable cnfresult varchar(100);
declare variable nnfresult varchar(100);
begin

nnfresult  = cast (nnf as varchar (100));
cnfresult = cast (cnf as varchar (100));

execute procedure p_s_nfe_preenchenumero(cnfresult,9,'0','E')
returning_values :cnfresult ;

execute procedure p_s_nfe_preenchenumero(nnfresult,9,'0','E')
returning_values :nnfresult ;

ano = cast(extract(year from :aamm) as varchar(4));
mes = trim(cast(extract(month from :aamm)as varchar(2)));
ano = substring(ano from 3 for 4 );
execute procedure p_s_nfe_preenchenumero(mes,2,'0','E')
returning_values :mes ;
data = ano||mes;

execute procedure p_s_nfe_preenchenumero(serie,3,'0','E')
returning_values :serie ;

numero = cuf||data||CNPJ||mod||serie||nnfresult||cnfresult;
execute procedure p_s_nfe_digitoverificador(numero)
returning_values : dv;

result = cuf||data||CNPJ||mod||serie||nnfresult||CNFresult||dv ;
verificador = dv;
  suspend;
end^