Jump to content
Antº Gonçalves

ANSWERED Tecla para Importação de ficheiro excel para a contabilidade (PHC)

Recommended Posts

Antº Gonçalves

Boas,

Tenho tido dificuldades na importação de ficheiro excel para o PHC (versão corporate), para as linhas da grelha (tabela ML) de contabilidade (tabela DO).

Criei o seguinte código, corre tudo bem, mas não consegue colocar o ecrã em modo de edição nem criar as linhas nem preencher o conteúdo.

Será que alguém me consegue ajudar?

if messagebox('Para iniciar a importação de linhas p/ a CTB, os campos devem ser (obrigatória e respetivamente): "CONTA", "DEBITO", "CREDITO", "CANALITICO", "DESCRITIVO" e "NUMDOC". Confirma?',32+4)=7

    return

endif



qfile = Getfile('XLSX','Escolher', 'Abrir',0,'Escolha o ficheiro a importar')

If Empty(qfile)

    Return

Endif

mvisible=.T.

Wait Window 'A abrir o ficheiro...' Nowait

oExcel = Createobject("Excel.Application")

oExcel.Visible = mvisible

oExcel.Application.UserControl=mvisible

oExcel.Application.Interactive=mvisible

oExcel.DisplayAlerts = mvisible

oWorkbook = oExcel.Application.Workbooks.Open(qfile)

oSheet = oWorkbook.activesheet.Name

   

Wait Window 'A verificar a versão do ficheiro...' Nowait

If Val(oExcel.Version) > 11

    Wait Window 'A guardar o ficheiro em formato compativel...' Nowait

    oWorkbook.SaveAs(ac_dir+"excel95.xls", 39) && xlExcel8

    qfile=ac_dir+"excel95.xls"

Endif



Wait Window 'A fechar a folha...' Nowait

oWorkbook.Close()

Wait Window 'A fechar a aplicação excel...' Nowait

oExcel.Quit()



**************Nr de colunas igual ao excel



Create Cursor curgastos (CONTA c(20),DEBITO n(18,2),CREDITO n(18,2),CANALITICO C(20),DESCRITIVO c(50),NUMDOC c(20) )



***************



    Select curgastos

Erro = .F.

Try

    Mvar = "APPEND FROM '"+qfile+"' TYPE XL5"

    &Mvar

Catch When .T.

    &&msg('O ficheiro não pode estar aberto ou não existe fisicamente!')

    &&merror = .t.

    &&msg(qfile)

Endtry

If Erro = .T.

    Return

Endif



Delete File ac_dir+"excel95.xls"



* 3. Conta o nº de colunas da tabela, se não corresponder a 6 não continua.



Select curgastos

If Fcount("curgastos")<>6

Msg("O Ficheiro excel é INVÁLIDO! Nº de colunas INCONSISTENTE!!!","DIRECTA")

Use In curgastos

Return

EndIf



* 4. Altera as decimais que são utilizadas por defeito na aplicação

set point to "."



* 5. Mostra a informação e pede p/ cancelar a execução ou mandar prosseguir



select curgastos

go top

delete

go top



m.escolheu=.F.

mostrameisto("curgastos", "** Detalhe do lançamento ***** ")

    If ! (m.escolheu)

        Return

    Endif



if messagebox('Vai iniciar a importação de linhas p/ a CTB. Os campos devem ser (respetivamente): "CONTA", "DEBITO", "CREDITO", "CANALITICO", "DESCRITIVO" e "NUMDOC". Confirma?',32+4)=7

    return

endif



* 6. Nº DE REGISTOS E ACUMULADOS A DR E CR



numerototal=reccount("curgastos")-1



local tvalordeb, tvalorcred

tvalordeb=0

tvalorcred=0



select curgastos

go top

scan 

        tvalordeb  = tvalordeb  + curgastos.debito

        tvalorcred = tvalorcred + curgastos.credito

endscan



Messagebox("6. Total registos =  " +astr(reccount("curgastos")-1) +" .  Somam a DR = " +astr(tvalordeb) + " €.  Somam a CR = " +astr(tvalorcred) + " €. Saldo =  " +astr(tvalordeb-tvalorcred) )




* 7. INSERÇÃO DE LINHAS



sdo.showsave() 



Select curgastos

go top



replace DO.CRIADOIMP    with    .t.

sdo.refresh()




* Se o ecrã de DO estiver em modo de introdução ou alteração são eliminados todas as linhas do Docº

* Se o ecrã de DO não estiver em modo de introdução ou alteração é colocado em modo de introdução

If SDO.Adding or SDO.Editing



Select ML

Delete All

sdo.refresh()



Else

return

EndIf



SDO.showsave()



Select curgastos

go top



scan

   

    replace    ML.CONTA        with    alltrim(curgastos.CONTA)

    replace ML.EDEB            with    curgastos.DEBITO

    replace ML.ECRE            with    curgastos.CREDITO

    replace ML.CCT            with    curgastos.CANALITICO

    replace ML.DESCRITIVO    with    curgastos.DESCRITIVO

    replace ML.ADOC            with    curgastos.NUMDOC



    do dotots with .t.

    sdo.refresh()



endscan



fecha("curgastos")

 

Share this post


Link to post
Share on other sites
Antº Gonçalves

Após aconselhamento, verificou-se que o problema estava no ecrã de entrada, que não era SDO mas sim SDOINTRO, muito diferente dos módulos de faturação, compras e dossiers internos.

Ok! Resolvido. Podem encerrar p.f.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.