exemplo extensibilidade - primavera bss, software de ... · pdf fileprimavera business...

13
PRIMAVERA v7.00 Tutorial de Extensibilidade Importação de Pendentes por excel Versão 1.0 Abril de 2007

Upload: hadien

Post on 24-Mar-2018

302 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

PRIMAVERA v7.00

Tutorial de Extensibilidade

Importação de Pendentes por excel

Versão 1.0

Abril de 2007

Page 2: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

Índice ÍNDICE .................................................................................................................................. 1

INTRODUÇÃO...................................................................................................................... 2

EXCEL DE IMPORTAÇÃO DE PENDENTES .................................................................. 3 Enquadramento ................................................................................................................................................................3 Como utilizar o Excel? ....................................................................................................................................................4

COMO CONSTRUIR O EXCEL DE IMPORTAÇÃO DE PENDENTES? ..................... 6 Identificação da informação a importar...................................................................................................................6 Criação do projecto VBA................................................................................................................................................7

PRIMAVERA Business Software Solutions | ERP 7.00 – Exemplo de Extensibilidade

Page 3: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

Importação de Pendentes

Introdução Todos os pendentes de clientes e fornecedores são gerados a partir da criação dos diversos documentos de vendas e compras. No entanto podem existir situações em que os pendentes de clientes tenham que ser introduzidos manualmente (por exemplo, na instalação da aplicação para introdução dos pendentes já existentes). Neste caso, podemos através da opção Novos Documentos disponível no módulo de Tesouraria efectuar a introdução manual dos diversos pendentes existentes para cada uma das entidades. Tratando-se de uma lista considerável de pendentes este procedimento pode ser muito moroso.

Assim, este documento apresenta – na perspectiva dos Parceiros PRIMAVERA – um exemplo concreto para a criação de uma ferramenta de Extensibilidade que visa a importação em Lote de Pendentes.

PRIMAVERA Business Software Solutions | ERP 7.00 – Exemplo de Extensibilidade

Page 4: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

Importação de Pendentes

Excel de importação de Pendentes A implementação deste exemplo VBA pretende, por um lado mostrar a facilidade de utilização do VBA e por outro sublinhar as vantagens advindas do seu uso.

O exemplo apresenta uma sugestão para a construção de um ficheiro .xls que permita a importação em lote de pendentes.

Enquadramento A introdução, no ERP, de pendentes já existentes, pode tornar-se uma tarefa morosa, na medida em para cada um dos pendentes teria de ser preenchida a ficha de um Novo Documento, Tesouraria | Pagamentos e Recebimentos | Novos Documentos:

A automatização desta tarefa passaria pela possibilidade de, com um simples clique num botão, importar todos os pendentes de uma só vez, como ilustra a imagem em baixo:

PRIMAVERA Business Software Solutions | ERP 7.00 – Exemplo de Extensibilidade 3

Page 5: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

Importação de Pendentes

Como utilizar o Excel? • Na primeira folha o utilizador deve colocar a partir da linha 8 os pendentes que

pretende importar;

• Nem todas as colunas necessitam ser preenchidas, pelo que as validações que são feitas são as mesmas que as da janela de introdução manual de pendentes;

As colunas enumeradas a seguir não precisam ser preenchidas sendo preenchidas internamente pelo motor: • Data Vencimento; • Moeda; • Câmbio; • Data Introdução.

• Só são consideradas as seguintes entidades: Clientes (C), Fornecedores (F) e Outros Terceiros (O). O preenchimento de outras entidades despoleta uma mensagem a informar que a "Entidade é inexistente";

• Por omissão, o valor total do pendente é igual ao valor do pendente, na medida em que não há maneira de justificar uma possível diferença. Ou seja, não há histórico sobre essa informação;

• O não preenchimento da taxa de IVA implica a consideração da taxa de Iva igual a zero;

• O valor do total do iva é calculado da seguinte forma: Valor Pendente – (Valor Pendente / (Taxa IVA / 100 + 1))

• O valor de incidência é calculado automaticamente pelo motor;

• Depois dos dados estarem todos introduzidos é necessário fazer Login, que é o mesmo que dizer que é necessário preencher respectivamente as células, C3, C4 e C5 com o nome da empresa, nome do utilizador e password do mesmo. Se não estiver definido nenhum utilizador ou password as respectivas células não precisam ser preenchidas;

• Para gerar os pendentes basta clicar no botão ‘IMPORTAR’. A importação tem o mesmo comportamento do botão gravar da janela de introdução manual de pendentes;

• Para validar a importação dos registos, aceder a 'Dentro de Ficheiros' e executar a seguinte script: SELECT * FROM Pendentes;

• A coluna S apresenta as mensagens com a indicação se a importação do Pendente foi, ou não bem sucedida. No caso de se tentar importar uma segunda vez e esta coluna estiver preenchida com "OK", então passa para o registo seguinte.

PRIMAVERA Business Software Solutions | ERP 7.00 – Exemplo de Extensibilidade 4

Page 6: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

Importação de Pendentes

PRIMAVERA Business Software Solutions | ERP 7.00 – Exemplo de Extensibilidade 5

Page 7: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

Importação de Pendentes

Como construir o Excel de importação de pendentes?

Identificação da informação a importar O primeiro passo para a construção do ficheiro é filtrar, a partir do layout do ecran de lançamento manual de pendentes do ERP, em Tesouraria | Pagamentos e Recebimentos | Novos Documentos, os campos necessários para gerar um pendente.

Numa rápida observação, facilmente se verifica a necessidade de preenchimento dos seguintes campos:

• Tipo de Entidade;

• Entidade;

• Documento;

• Série;

• Nº Documento;

• Nº Doc.Interno;

• Data Doc.;

• Data Venc.;

• Data Introdução;

• Moeda;

• Câmbio;

PRIMAVERA Business Software Solutions | ERP 7.00 – Exemplo de Extensibilidade 6

Page 8: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

Importação de Pendentes

• Vendedor;

• Conta Banc.;

• Cond. Pag.;

• C. Domiciliação;

• Modo Pag.;

• Valor Pendente.

Identificados os campos é basta preencher um xls com essa informação, para que cada uma das linhas represente um pendente:

Criação do projecto VBA O passo seguinte é criar um projecto VBA para gravar na tabela “Pendentes” os registos listados no ficheiro. Ou seja, criar um botão que, quando seleccionado permita gravar na base de dados os pendentes.

Para criar o projecto VBA executar os seguintes passos:

1. Costumizar a barra de ferramentas do ficheiro xls criado anteriormente, adicionando a barra 'Visual Basic', Tools | Costumize... | Toolbars | seleccionar a opção 'Visual Basic':

PRIMAVERA Business Software Solutions | ERP 7.00 – Exemplo de Extensibilidade 7

Page 9: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

Importação de Pendentes

2. Nessa barra de ferramentas seleccionar:

a. O botão Design Mode;

b. O botão Control Toolbox, que permite mostrar a barra de controlos que poderão ser utilizados:

3. Seleccionar o botão e desenhar na folha;

Barra de ferramentas – Visual Basic

Design Mode

Control Toolbox

Control Toolbox Command Button

4. Seleccionar, com o botão do lado direito do rato, o botão desenhado e aceder à opção 'Properties';

5. Definir as propriedades do botão, por exemplo atribuir uma descrição sugestiva: 'IMPORTAR'. Fechar a janela:

PRIMAVERA Business Software Solutions | ERP 7.00 – Exemplo de Extensibilidade 8

Page 10: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

Importação de Pendentes

6. Clicar duas vezes sobre o botão e verificar que é aberto o editor do Visual Basic';

7. A janela que é aberta por omissão nesse editor é a do controlo seleccionado com a sugestão de implementação do evento Click do mesmo. Editar o evento com o seguinte código:

Private Sub cmdImporta_Click() On Error GoTo ERRO ImportaPendentes Exit Sub ERRO: MsgBox Err.Description, vbError + vbOKOnly, "cmdImporta_Click" End Sub

8. Aceder ao menu Tools | References e seleccionar as seguintes referências:

9. Clicar com o botão do lado direito no painel esquerdo do editor e seleccionar a opção 'Insert | Module':

PRIMAVERA Business Software Solutions | ERP 7.00 – Exemplo de Extensibilidade 9

Page 11: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

Importação de Pendentes

10. Neste editor definir o método ImportaPendentes.

Apresenta-se de seguida o código que permite implementar a funcionalidade descrita.

'Definição de constantes para cada uma das colunas preenchidas Const COLUNA_TIPOENTIDADE As String = "A" Const COLUNA_ENTIDADE As String = "B" Const COLUNA_DOCUMENTO As String = "C" Const COLUNA_SERIE As String = "D" Const COLUNA_NUMDOC As String = "E" Const COLUNA_NUMDOCINT As String = "F" Const COLUNA_DATADOC As String = "G" Const COLUNA_DATAVENC As String = "H" Const COLUNA_DATAINTRO As String = "I" Const COLUNA_MOEDA As String = "J" Const COLUNA_CAMBIO As String = "K" Const COLUNA_VENDEDOR As String = "L" Const COLUNA_CONTABANC As String = "M" Const COLUNA_CONDPAG As String = "N" Const COLUNA_CONTADOM As String = "O" Const COLUNA_MODOPAG As String = "P" Const COLUNA_IVA As String = "Q" Const COLUNA_VALORPEND As String = "R" 'Definição da constante para a linha do primeiro registo Const LINHA_INICIAL As Long = 8 'Definição de outras variáveis Private Entidade As Boolean Private m_objErpBSO As ErpBS Sub ImportaPendentes() Dim Iniciou As Boolean Dim Linha As Long Dim Pendente As GcpBEPendente Dim blnErro As Boolean On Error GoTo ERRO Iniciou = False blnErro = False 'Abre Motor Set m_objErpBSO = New ErpBS

PRIMAVERA Business Software Solutions | ERP 7.00 – Exemplo de Extensibilidade 10

Page 12: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

Importação de Pendentes

m_objErpBSO.AbreEmpresaTrabalho 0, Range("C" & 3), Range("C" & 4), Range("C" & 5) 'Grava o conteudo da linha. Linha = LINHA_INICIAL 'Validação para obrigar a que o primeiro registo seja preenchido na 'linha correcta, neste caso a linha 8. If Range("A" & CStr(Linha)) = "" And Linha = 8 Then MsgBox "A informação deve ser preenchida a partir da linha 8 da sheet1", vbInformation Exit Sub End If Iniciou = True 'Ciclo que percorre todas as células da coluna A que não estejam vazias, 'a partir da linha inicial, que neste caso é a 8. While Range("A" & CStr(Linha)) <> "" 'Se a respectiva linha da coluna S estiver preenchida com 'a string "OK", então é porque o registo já foi importado. 'Pelo que passa para o registo seguinte. If Range(“S” & CStr(Linha)) <> "OK" Then 'Preenche o objecto Set Pendente = PreenchePendente(Linha) 'Grava o pendente na base de dados. On Error GoTo ERRO If Not Pendente Is Nothing Then m_objErpBSO.Comercial.Pendentes.Actualiza Pendente 'Se a actualização for realizada com sucesso então a respectiva 'linha da coluna S é preenchida com a string "OK". 'O preenchimento desta coluna permite evitar que se tente importar 'mais do que uma vez o mesmo registo. If Not blnErro Then Sheets("Sheet1").Cells(CInt(Linha), “S”) = "OK" End If End If Linha = Linha + 1 blnErro = False Wend MsgBox "Gravação Concluida com Sucesso.", vbInformation 'Fecha Motor m_objErpBSO.FechaEmpresaTrabalho Set m_objErpBSO = Nothing inicou = False Exit Sub ERRO: blnErro = True Set Pendente = Nothing Application.Cursor = xlDefault 'Se a actualização não foi executada com sucesso preenche-se a respectiva 'linha da coluna S com os erros. Sheets("Sheet1").Cells(CInt(Linha), “S”) = Err.Description Err.Clear 'Se o erro foi despoletado dentro do ciclo então passa-se para o registo seguinte. If Iniciou Then Resume Next End Sub Private Function PreenchePendente(numlinha As Long) As GcpBEPendente On Error GoTo ERRO Dim objPendente As GcpBEPendente Set objPendente = New GcpBEPendente With objPendente ' Entidades .TipoEntidade = Range(COLUNA_TIPOENTIDADE & CStr(numlinha)) .Entidade = Range(COLUNA_ENTIDADE & CStr(numlinha))

PRIMAVERA Business Software Solutions | ERP 7.00 – Exemplo de Extensibilidade 11

Page 13: Exemplo Extensibilidade - PRIMAVERA BSS, Software de ... · PDF filePRIMAVERA Business Software Solutions ... internamente pelo motor: • Data Vencimento; ... .ValorTotal = CDbl(Range(COLUNA_VALORPEND

Importação de Pendentes

Select Case .TipoEntidade Case "C" Entidade = m_objErpBSO.Comercial.Clientes.Existe(.Entidade) Case "F" Entidade = m_objErpBSO.Comercial.Fornecedores.Existe(.Entidade) Case "O" Entidade = m_objErpBSO.Comercial.Clientes.Existe(.Entidade) Case Else Entidade = False End Select If Not Entidade Then Sheets("Sheet1").Cells(CInt(numlinha), “S”) = "Entidade não existe." Exit Function End If 'Outros dados documento .Tipodoc = Range(COLUNA_DOCUMENTO & CStr(numlinha)) .NumDoc = Range(COLUNA_NUMDOC & CStr(numlinha)) .Serie = Range(COLUNA_SERIE & CStr(numlinha)) .NumDoc = Range(COLUNA_NUMDOC & CStr(numlinha)) .NumDocInt = Range(COLUNA_NUMDOCINT & CStr(numlinha)) If Not CDate(Range(COLUNA_DATADOC & CStr(numlinha))) = CDate("0:00:00") Then .DataDoc = Format(CDate(Range(COLUNA_DATADOC & CStr(numlinha))), "DD-MM-YYYY") End If If Not CDate(Range(COLUNA_DATAVENC & CStr(numlinha))) = CDate("0:00:00") Then .DataVenc = Format(CDate(Range(COLUNA_DATAVENC & CStr(numlinha))), "DD-MM-YYYY") End If If Not CDate(Range(COLUNA_DATAINTRO & CStr(numlinha))) = CDate("0:00:00") Then .DataIntroducao = Format(CDate(Range(COLUNA_DATAINTRO & CStr(numlinha))), "DD-MM-YYYY") Else .DataIntroducao = Date End If If Len(.Moeda) > 0 Then .Moeda = Range(COLUNA_MOEDA & CStr(numlinha)) .Cambio = Range(COLUNA_CAMBIO & CStr(numlinha)) .Vendedor = Range(COLUNA_VENDEDOR & CStr(numlinha)) .ContaBancaria = Range(COLUNA_CONTABANC & CStr(numlinha)) .CondPag = Range(COLUNA_CONDPAG & CStr(numlinha)) .ContaDomiciliacao = Range(COLUNA_CONTADOM & CStr(numlinha)) .ModoPag = Range(COLUNA_MODOPAG & CStr(numlinha)) .ValorTotal = CDbl(Range(COLUNA_VALORPEND & CStr(numlinha))) .ValorPendente = CDbl(Range(COLUNA_VALORPEND & CStr(numlinha))) .CodIva = m_objErpBSO.Comercial.Iva.DaIva(CSng(Range(COLUNA_IVA & CStr(numlinha)))) If Not m_objErpBSO.Comercial.Iva.Existe(.CodIva) Then Sheets("Sheet1").Cells(CInt(numlinha), "S") = "O código do IVA não existe!" GoTo ERRO End If .TotalIva = CDbl(.ValorPendente) - (CDbl(.ValorPendente) / CDbl((Range(COLUNA_IVA & CStr(numlinha)) / 100) + 1)) .EmModoEdicao = False m_objErpBSO.Comercial.Pendentes.PreencheDadosRelacionados objPendente End With Set PreenchePendente = objPendente Exit Function ERRO: Set objPendente = Nothing Sheets("Sheet1").Cells(CInt(numlinha), “S”) = Err.Description End Function

PRIMAVERA Business Software Solutions | ERP 7.00 – Exemplo de Extensibilidade 12