Vector Struct Looplex

Asked

Viewed 45 times

0

"Access to an internal field of a vector must be indexed: name " This message appears when I try to upload my code, I do not understand what is wrong whereas I declared all Fields, follow code :

template[TEMP_BFNProcuracao] { 
    metainfo { 
        language = "pt_BR"
        declarations {
            +<naturezaJuridica> : List ("Pessoa Física" , "Pessoa Jurídica") {
                name = "Natureza Jurídica do cliente"
                request = "O cliente é Pessoa Física ou Pessoa Jurídica?"
                atomic = true 
                default = "Pessoa Física"
            },
            -|clientePf| : Vector [*PessoaFisica] {
                name = "Dados do cliente"
                request = "Insira as informações do cliente"
            },
            -|cliente| : Vector [*PessoaJuridica] {
                name = "Dados da Empresa"
                request = "Insira as informações do cliente"
            },
            +|adv| :  Vector [*Advogado] {
                name = "Dados do Advogado"
                request = "Informe os dados do advogado"
            },
            -<data> : Date ,
            +<procuracao> : List ("ad judicia et extra" , "ad judicia") {
                name = "Procuração"
                request = "Informe o tipo de procuração"
                default = "ad judicia"
                atomic = true 
            },
            +<numeroDoProcesso> : String {
                name = "Número do Processo"
                request = "Informe o número do processo"
            },
            &<prazoDeValidade> : Date {
                name = "Prazo de Validade da Procuração"
                request = "Informe a data de validade da procuração"
            } 
        } 
    } 
    head { 
        title = "Procuração BFN" 
    } 
    body {
        operations {
            use *branch[BRC_Operacoes]
        }
    }
}

// colocar vetor para clientes e advogados 
*branch[BRC_ProcuracaoPF] {
    operations {
        print "Pelo presente instrumento particular, " ,
        beginList("I"),
        foreach(<clientePf> IN |clientePf|) where (separator = "%f; %s; %p; e %l.") {
            print  "\i" & <clientePf.nome> & ", " & <clientePf.nacionalidade> & ", " & <clientePf.estadoCivil> & <clientePf.profissao> & ", RG nº " & <clientePf.rg.numero> & ", residente e domicilidado em " & <clientePf.endereco.logradouro> ,
        if (<clientePf.endereco.logradouro> == "Rua") {
            <endereco.nomeDaRua>.mandatory = "+" ,
            print ", " & <endereco.nomeDaRua>
            }
        else {
            <endereco.nomeDaAvenida>.mandatory = "+" ,
            print ", " & <endereco.nomeDaAvenida>
            },
        print  ", nº " & <clientePf.endereco.numero> ,
        if ( <clientePf.endereco.complemento>.isNotEmpty()) {
            print ", complemento: " & <clientePf.endereco.complemento>
        }, 
        print  "-" & <clientePf.endereco.cidade> & "- Brasil. \n"
        },
        endList(),
        print "  nomeia e constitui seu bastante procurador(es), " ,
        beginList("I"),
        foreach(<adv> IN |adv|) where (separator = "%f; %s; %p; e %l.") {
        print "\i" & <adv.nome> & ", inscrito na OAB/" & <adv.carteira.uf> & "sob o numero " & <adv.carteira.numero> & ", " & <adv.nacionalidade> & ", endereço eletrônico " & <adv.email> & "\n"
        },
        endList(),
        print ", para fim de atuarem profissionalmente, em conjunto ou separadamente, independentemente da ordem de nomeação, outorgando-lhes os poderes da cláusula" &  <procuração> & ", mais os necessários para atuação nos autos, processo nº " & <numeroDoProcesso> & ", podendo substabelecer, no todo ou em parte, os poderes conferidos, e todo o mais que for necessário para o bom e fiel cumprimento do presente mandato. \n" , 
        if (<prazoDeValidade>.isNotEmpty ()) {
            print "Esta procuração é valida até a data do dia "& <procuracao.prazoDeValidade> & "."
        },
        print "\t\n São Paulo, " & <data> & "
        \t\n _________________________________________________"
    }
}

*branch[BRC_ProcuracaoPJ] {
    operations {
        print "Pelo presente instrumento particular, " ,
        beginList("I"),
        foreach(<cliente> IN |cliente|) where (separator = "%f; %s; %p; e %l.") {
            print  "\i" & <cliente.razaoSocial> & ", CNPJ nº " & <cliente.cnpj> & ", com sede em " & <cliente.endereco.via> ,
        if (<cliente.endereco.via> == "Rua") {
            <cliente.endereco.nomeDaRua>.mandatory = "+" ,
            print ", " & <endereco.nomeDaRua>
            }
        elseif (<cliente.endereco.via> == "Avenida") {
                <cliente.endereco.nomeDaAvenida>.mandatory = "+" ,
                print ", " & <cliente.endereco.nomeDaAvenida>
            }
        else {
            <cliente.endereco.nomeDaEstrada>.mandatory = "+" ,
            print ", " & <cliente.endereco.nomeDaEstrada>
        },
        print  ", nº " & <cliente.endereco.numero> ,
        if(<cliente.endereco.complemento>.isNotEmpty()) {
            print ", complemento: " & <cliente.endereco.complemento>
        },
        print  "-" & <cliente.endereco.cidade> & "- Brasil. \n"
        },
        endList(),
        print ", devidamente representada por " & <cliente.representante.nome> & ", RG nº " & <cliente.representante.rg.numero> , 
        if (<ehSocioAdministrador> == true ) {
            print " na qualidade de sócio administrador"
        }
        else {
            print " na qualidade de sócio"
        },
        print "  nomeia e constitui seu bastante procurador(es), " ,
        beginList("I"),
        foreach(<adv> IN |adv|) where (separator = "%f; %s; %p; e %l.") {
        print "\i" & <adv.nome> & ", inscrito na OAB/" & <adv.carteira.uf> & "sob o numero " & <adv.carteira.numero> & ", " & <adv.nacionalidade> & ", endereço eletrônico " & <adv.email> & "\n"
        },
        endList(),
        print ", para fim de atuarem profissionalmente, em conjunto ou separadamente, independentemente da ordem de nomeação, outorgando-lhes os poderes da cláusula" &  <procuração> & ", mais os necessários para atuação nos autos, processo nº " & <numeroDoProcesso> & ", podendo substabelecer, no todo ou em parte, os poderes conferidos, e todo o mais que for necessário para o bom e fiel cumprimento do presente mandato. \n" , 
        if (<prazoDeValidade>.isNotEmpty ()) {
            print "Esta procuração é valida até a data do dia "& <procuracao.prazoDeValidade> & "."
        },
        print "\t\n São Paulo, " & <data> & "
        \t\n _________________________________________________" 
    }
}

*struct[PessoaFisica] {
    name = "Dados Pessoa Física"
    request = "Informe os dados pessoais"
    fields {
        +[nome] : String  { 
            name = "Nome"
            request = "Informe o nome completo"
        },
        +[dataDeNascimento] : Date {
            name = "Data de Nascimento"
            request = "Informe a data de nascimento"
        },
        -[nacionalidade] : List ("Brasileiro" , "Estrangeiro"){
            atomic = true
            default = "Brasileiro"
        }, 
        +[estadoCivil] : List ("Casado(a)" , "Solteiro(a)" , "Divorciado(a)" , "Viúvo(a)" , "Desquitado(a)"){
            name = "Estado Civil"
            request = "Informe o estado civil"
            atomic = true
        },
        -[regimeDeBens] : List ("Comunhão Universal" , "Comunhão Parcial" , "Separação Total") {
            name = "Regime de Bens"
            request = "Qual o regime de bens?"
            atomic = true 
        },
        +[rg] : *RG {
            name = "RG"
        },
        -[cpf] : String where ("\d\d\d.\d\d\d.\d\d\d-\d\d"){
            name = "CPF"
            request = "Informe o número do cpf"
        },
        +[endereco] : *EnderecoPessoaFisica {
            name = "Endereço da Pessoa"
            request = "Informe o Endereço"
        },
        -[conjuge] : *Conjuge
    }
}
*struct[RG] {
    name = "RG"
    request = "Informações do RG"
    fields {
        +[numero] : String { 
            name = "Número do RG"
            request = "Informe o número do RG"
        },
        -[orgaoExpedidor] : String {
            name = "Órgão Expedidor"
            request = "Informe o órgão expedidor"
            default = "SSP"
        },
        -[dataDeEmissao] : Date {
            name = "Data de Emissão"
            request = "Qual a data de emissão do documento?"
        },
        -[uf] : List ("AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SP", "SE", "TO") {
            name = "UF"
            atomic = true
            default = "SP"
        }
    }
}
*struct[EnderecoPessoaFisica] {
    fields {
        +[logradouro] : List ("Rua" , "Avenida") { 
            name = "Logradouro"
            request = "Informe a via"
            atomic  = true 
        },
        -[nomeDaRua] : String {
            name = "Nome da rua"
            request = "Informe o nome da rua"
        },
        -[nomedaAvenida] : String {
            name = "Nome da avenida"
            request = "Informe o nome da avenida"
        },
        +[numero] : Integer {
            name = "Número do logradouro"
            request = "Informe o número do logradouro"
        },
        &[complemento] : String {
            name = "Complemento"
            request = "Informe o complemento"
            help = "Se houver complemento, preencha esse campo"
        },
        -[uf] : List ("AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SP", "SE", "TO") {
            name = "UF"
            atomic = true
            default = "SP"
        },
        -[cep] : String {
            name = "CEP"
            request = "Informe o CEP"
        },
        -[bairro] : String {
            name = "Bairro"
            request = "Informe o bairro"
        },
        +[cidade] : String {
            name = "Cidade"
            request = "Informe a cidade"
        }
    }
}
// Pessoa Jurídica
*struct[PessoaJuridica] {
    name = "Dados Pessoa Jurídca"
    fields {
        +[razaoSocial] : String { 
            name = "Razão Social"
            request = "Informe a razão social da empresa"
        },
        +[cnpj] : String {
            name = "CNPJ"
            request = "Informe o CNPJ"
        },
        -[socio] : *Socios {
            name = "Informe os dados dos Sócios/Acionistas"
        },
        +[representante] : *Representante , 
        +[endereco] : *EnderecoPessoaJuridica{
            name = "Sede"
        }
    }
}
 *struct[EnderecoPessoaJuridica] {
    fields {
        +[via] : List ("Rua" , "Avenida" , "Estrada") { 
            name = "Endereço"
            request = "Informe a via"
            atomic = true
        },
        +[numero] : Integer {
            name = "Número"
            request = "Informe o número da sede"
        },
        &[complemento] : String {
            name = "Complemento"
            request  = "Informe o complemento"
            help = "Se houver complemento preencha este campo"
        },
        +[uf] : List ("AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SP", "SE", "TO") {
            name = "UF"
            atomic = true
            default = "SP"
        },
        +[cep] : String {
            name = "CEP"
            request = "Informe o CEP"
        },
        +[cidade] : String {
            name = "Cidade"
            request = "Informe a cidade"
        },
        +[bairro] : String {
            name = "Bairro"
            request = "Informe o bairro"
        },
        -[nomeDaRua] : String {
            name = "Nome da Rua"
            request = "Informe o nome da rua"
        },
        -[nomeDaAvenida] : String {
            name = "Nome da Avenida"
            request = "Informe o nome da avenida"
        },
        -[nomeDaEstrada] : String {
            name = "Nome da Estrada"
            request = "Informe o nome da estrada"
        }
    }
}
//Advogado
*struct[Advogado] {
    fields {
        +[nome] : String {
            name = "Nome do advogado"
            request = "Informe o nome do advogado"
        },
        +[cpf] : String where ("\d\d\d.\d\d\d.\d\d\d-\d\d") {
            name = "CPF"
            request = "Informe o CPF"
        },
        +[carteira] : *CarteiraOAB {
            name = "Carteira da OAB"
        },
        -[endereco] : *EnderecoPessoaFisica {
            name = "Endereço do Advogado"
        },
        -[escritório] : String {
            name = "Escritório"
            request = "Informe o nome do escritório"
        },
        +[email] : String {
            name =  "Email do Advogado"
            request = "Informe o email do advogado"
        }
    }
}
*struct[CarteiraOAB] {
    fields {
        +[numero] : String { 
            name = "Número da carteira da OAB"
            request = "Informe o número da carteira da OAB"
        },
        +[uf] : List ("AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SP", "SE", "TO") {
            name = "UF"
            request = "Selecione o UF da carteira da OAB"
            atomic = true
            default = "SP"
        }
    }
}
*branch[BRC_Operacoes] {
    operations {
        <clientePf.nome> = bold(uppercase(<clientePf.nome>)),
        <cliente.razaoSocial> = bold(uppercase(<cliente.razaoSocial>)),
        <data> = today(expandedDate(<data>)),
        <adv.nome> = bold(uppercase(<adv.nome>)),
        <prazoDeValidade> = expandedDate(<prazoDeValidade>) , 
        if (<naturezaJuridica> == "Pessoa Física") {
            <clientePf>.mandatory = "+" ,
            use *branch[BRC_ProcuracaoPF] 
        }
        elseif (<naturezaJuridica> == "Pessoa Jurídica") {
            <cliente>.mandatory = "+" , 
            use *branch[BRC_ProcuracaoPJ]
        }
    }
}
*struct[Representante] {
    name = "Representante"
    fields {
        +[nome] : String { 
            name = "Nome do representante"
            request = "Informe o nome do representante"
        },
        +[rg] : *RG {
            name = "Dados do rg do representante"
        },
        +[ehSocioAdministrador] : Boolean {
            name = "Sócio Administrador"
            request = "O representante é sócio administrador?"
        }
    }
}
  • Please edit your question and try to put in code between the appropriate and indented tags. So the community can help you more easily.

1 answer

0

Lucas, I looked and tested your code, and I found some problems in it:

  1. In your branch BRC_Operacoes, you tried to use directly <clientePF.nome> and <cliente.razaoSocial> (lines 352 and 353), but as you initialized these elements as invisible, you are trying to use on the Tubs (in this case bold and uppercase), an element that does not yet exist in value, that is, it is null. The same logic for the <adv.nome> (line 355). For this, you have two solutions:

a. Adding a if to check the existence of the field Before using Tube, check:

if(<clientePF.nome>.isNotEmpty()) { ...
if(<cliente.razaoSocial>.isNotEmpty()) { ...
if(<adv.nome>.isNotEmpty()) { ...

b. Using the default You can initialize the name field of the struct declaration with a default value to ensure there is a value before Tube is called

+[nome]{
    default = "valorPadrão"
}
  1. After changing this field, I found another error on line 78, where you used the name of the accented variable <procuração>, instead of the version you stated (<procuracao>)

  2. I found other problems, probably similar, with the fields <endereco>, but I leave it to you to review the code and see if it is not calling some operation using this struct or some field of it before starting it.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.