Novo código dicionário para o banco

Pessoal, boa tarde.

Estamos utilizando o codeanalisys para validar nossas customizações antes de atualizarmos nosso dicionário de dados para o banco e gostaria de uma ajuda de vocês para ajustar o código abaixo:

cArqTrab1 := CriaTrab(aCampos,.T.)
&& cIdxTrb1 := cArqTrab1

Use &cArqTrab1 NEW Exclusive Alias TRB1
Append from &MV_PAR01 SDF
nArq:=FCreate("SAT010.ERR",0)

Select TRB1

DbGoTop()

Sei que temos que utilizar o novo comando FWTemporaryTable mas não estou conseguindo, vocês poderiam me ajudar com o código acima?

Muito obrigado pela ajuda.

Adnam.

Vou adicionar o código completo:

#include "rwmake.ch"

User Function Sat010()

SetPrvt("AAC,LI,NOPCA,CLINHA1,CLINHA2,ACAMPOS")
SetPrvt("CARQTRAB1,CIDXTRB1,NARQ,ERRO,CNUM_ULTIMO_CLIENTE,")

/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³Fun‡…o    ³ SAT010   ³ Autor ³                       ³ Data ³          ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡…o ³ Importacao de Arquivo de Clientes                          ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Uso      ³ Generico                                                   ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/
Pergunte("SAT010",.T.)
If !File(MV_PAR01)
    Return()
Endif

cLinha1 := OemToAnsi("Este programa tem como objetivo Importar os Clientes para o Sistema.")
cLinha2 := OemToAnsi("Os Erros da importacao estarao no arquivo SAT010.ERR")

@ 5,0 TO 200,500 DIALOG oDlg TITLE "Importacao de Clientes"
@ 5,10 TO 60,240
@ 24, 40 SAY cLinha1  SIZE  180,10
@ 38, 40 SAY cLinha2  SIZE  150,10

@ 70,184 BMPBUTTON TYPE 1 ACTION C010PRO()
@ 70,213 BMPBUTTON TYPE 2 ACTION Close(oDlg)

ACTIVATE DIALOG oDlg CENTERED

Return()



/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³Fun‡…o    ³C010PRO   ³Autor  ³                       ³ Data ³          ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡…o ³ Chamada do Programa                                        ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Uso      ³ Generico                                                   ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/
Static Function C010PRO()

Processa( { |lEnd| P010PRO() } )

Close(oDlg)

Return(nil)



/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³Fun‡…o    ³P010PRO   ³Autor  ³                       ³ Data ³          ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡…o ³ Processamento de Exportacao dos Dados                      ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³ Uso      ³ Generico                                                   ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/
Static Function P010PRO()

aCampos := {}
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Montar arquivo De Clientes                                   ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
AADD(aCampos,{ "TIPO"       , "C",001,0 })
AADD(aCampos,{ "EMPRESA"    , "C",002,0 })
AADD(aCampos,{ "MNEMONICO"  , "C",015,0 })
AADD(aCampos,{ "NOME"       , "C",040,0 })
AADD(aCampos,{ "FANTASIA"   , "C",015,0 })
AADD(aCampos,{ "LIMITECRED" , "N",009,0 })
AADD(aCampos,{ "SITCRED"    , "C",001,0 })
AADD(aCampos,{ "TIPOCLI"    , "C",002,0 })
AADD(aCampos,{ "EMISSAO"    , "D",008,0 })
AADD(aCampos,{ "SDOANT"     , "N",014,0 })
AADD(aCampos,{ "SDOATU"     , "N",014,0 })
AADD(aCampos,{ "PRACAVENDA" , "C",003,0 })
AADD(aCampos,{ "SEQEND"     , "C",001,0 })
AADD(aCampos,{ "IDENT"      , "C",001,0 })
AADD(aCampos,{ "CGC"        , "C",014,0 })
AADD(aCampos,{ "RAZAOSOC"   , "C",040,0 })
AADD(aCampos,{ "ENDERECO"   , "C",060,0 })
AADD(aCampos,{ "COMPL"      , "C",010,0 })
AADD(aCampos,{ "BAIRRO"     , "C",030,0 })
AADD(aCampos,{ "CIDADE"     , "C",060,0 })
AADD(aCampos,{ "UF"         , "C",002,0 })
AADD(aCampos,{ "CEP"        , "C",008,0 })
AADD(aCampos,{ "IE"         , "C",016,0 })
AADD(aCampos,{ "IM"         , "C",016,0 })
AADD(aCampos,{ "CODPOR"     , "C",004,0 })
AADD(aCampos,{ "CODCLI"     , "C",007,0 })

cArqTrab1 := CriaTrab(aCampos,.T.)
&& cIdxTrb1  := cArqTrab1

Use &cArqTrab1 NEW Exclusive Alias TRB1
&& IndRegua("TRB1",cIdxTrb1,"NUMPEDCOMP",,,"Selecionando Registros...")
&& Set Index to &cIdxTrb1.
Append from &MV_PAR01 SDF
nArq:=FCreate("SAT010.ERR",0)
&& Set print to SAT010.ERR

Select TRB1
DbGoTop()

ProcRegua( Reccount() )

Do While !EOF()

    IncProc()

    //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    //³ Criando um registro no arquivo de Clientes SA1               ³
    //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    If TIPO=="N"
        If Val(TRB1->CGC)==0
            ERRO:="NOME:" +Left(TRB1->NOME,25) + "/ CODIGO: " + TRB1->CODCLI + " - CGC ESTA VAZIO."
            ERRAR()
            DbSelectArea("TRB1")
            DbSkip()
            Loop
        Endif

        dbSelectArea("SX6")
        dbSetOrder(1)
        DbSeek(XFilial()+"MV_PROXCLI",.T.)
        cNum_Ultimo_Cliente:=SX6->X6_CONTEUDO


        dbSelectArea("SA1")
        dbSetOrder(1)
        DbGotop()
        DbSeek(XFilial()+StrZero(Val(cNum_Ultimo_Cliente),6))

        IF StrZero(Val(cNum_Ultimo_Cliente),6) <> SA1->A1_COD

            dbSelectArea("SA1")
            dbSetOrder(3)
            DbGotop()
            DbSeek(XFilial()+alltrim(TRB1->CGC))
            If Eof()
                RecLock("SA1",.T.)
                Replace A1_FILIAL      WITH XFilial()
                Replace A1_COD         WITH StrZero(Val(cNum_Ultimo_Cliente),6)
                Replace A1_LOJA        WITH "01"
                Replace A1_CGC         WITH TRB1->CGC
                Replace A1_CODCLI      WITH StrZero(Val(Alltrim(TRB1->CODCLI)),7) 
                Replace A1_RECISS       WITH "2"  // A1_RECISS E A1_INCISS inseridos para geração de ISS na emissão da NF
                Replace A1_INCISS       WITH "S" 
                Replace A1_TPASS        WITH "6" // CLASSE DE CONSUMO - CAT 79
                Replace A1_TPUTI        WITH "6" // TIPO DE LIGAÇÃO / UTILIZAÇÃO - CAT 79
                Replace A1_GRPTEN       WITH "00" // GRUPO DE TENSÃO  - CAT 79
                MsUnlock()

                //-----------------------------------------------------------------------------
                //Atualização do Parâmetro MV_PROXCLI - Ultimo Numero de Cliente.
                //-----------------------------------------------------------------------------
                dbSelectArea("SX6")
                aSalvAmb := GetArea()
                dbSetOrder(1)
                dbSeek(xFilial("SA1")+"MV_PROXCLI",.T.)
                RECLOCK("SX6")
                SX6->X6_CONTEUD        := StrZero(Val(cNum_Ultimo_Cliente)+1,6)
                SX6->X6_CONTENG      := StrZero(Val(cNum_Ultimo_Cliente)+1,6)
                SX6->X6_CONTSPA      := StrZero(Val(cNum_Ultimo_Cliente)+1,6)
                Msunlock()
                RestArea( aSalvAmb )

            Endif

            RecLock("SA1",.F.)
            Replace A1_NOME         WITH TRB1->RAZAOSOC
            Replace A1_NREDUZ       WITH TRB1->MNEMONICO
            Replace A1_LC           WITH TRB1->LIMITECRED/100
            Replace A1_TIPO         WITH "R"
            Replace A1_END          WITH Alltrim(TRB1->ENDERECO)+" "+Alltrim(TRB1->COMPL)
            Replace A1_BAIRRO       WITH TRB1->BAIRRO
            Replace A1_MUN          WITH TRB1->CIDADE
            Replace A1_EST          WITH TRB1->UF
            Replace A1_CEP          WITH TRB1->CEP
            Replace A1_INSCR        WITH TRB1->IE
            Replace A1_INSCRM       WITH TRB1->IM
            Replace A1_CODCLI       WITH StrZero(Val(Alltrim(TRB1->CODCLI)),7)
            Replace A1_RECISS       WITH "2"  // A1_RECISS E A1_INCISS inseridos para geração de ISS na emissão da NF
            Replace A1_INCISS       WITH "S" 
            Replace A1_TPASS        WITH "6" // CLASSE DE CONSUMO - CAT 79
            Replace A1_TPUTI        WITH "6" // TIPO DE LIGAÇÃO / UTILIZAÇÃO - CAT 79
            Replace A1_GRPTEN       WITH "00" // GRUPO DE TENSÃO  - CAT 79
            && TRB1->CODPOR
            MsUnlock()

        ELSE

            MsgInfo("Verificar Parametro MV_PROXCLI, deve ser o próximo código de cliente ","Mensagem")

        endif

    Endif
    Select TRB1
    dbSkip()
End

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Corrige Posicoes                                             ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea("SA1")
dbSetOrder(1)
dbGoTop()
Do While !eof()
    If Len(Alltrim(A1_CODCLI))!=8
        Reclock("SA1",.F.)
        Replace A1_CODCLI WITH StrZero(Val(Alltrim(A1_CODCLI)),8)
        MsUnlock()
    Endif
    Dbskip()
Enddo

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Apaga Arquivos de trabalho                                   ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Fclose(nARQ)
dbSelectArea("TRB1")
dbCloseArea()

cArqTrab1 := cArqTrab1 + ".DBF"
&&cIdxTrb1  := cIdxTrb1 + OrdBagExt()
FErase( cArqTrab1 )
&&FErase( cIdxTrb1 )

dbSelectArea("SA1")
Set Filter To
dbSetOrder(1)

Return()



// Funcao para Gravar o Erro
Static Function ERRAR()

Msgalert(ERRO,"Atencao")

&& Set device to print
FWRITE(nARQ,ERRO+Chr(13))
&& Set device to screen

Return(.T.)
compartilhar
  • Obrigado Daniel Mendes, ajudou muito. Valeu.

    Adnam Rigueira Mota   02 de Jun de 2023
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags fwtemporarytable sonarqube ou faça a sua própria pergunta.