SAP Business One Integração com Sistema de Gerenciamento de Serviços

 

Alba Spectrum: São Paulo - SP - Brasil

+55-11-3444-4949, help@albaspectrum.com

 

Neste pequeno artigo nós apresentaremos um exemplo de integração utilizando código C#. O Sistema de Gerenciamento de Serviços utiliza o Microsoft CRM para armazenar as horas de serviços. A integração inclui o Código do Cliente, Horas Trabalhadas, Preço da Hora, Descrição do Serviço e o Código do Serviço de vários objetos do MS CRM 3.0, como as Atividades, Nome do Usuário, Contas e envia eles para a tabela “temporária” ALBATIMELOG, cujos dados disponíveis serão enviados para o SAP B1. A integração utilizou como base o SAP Business One SDK – Por favor, verifique com o fornecedor do seu SAP B1 para maiores esclarecimentos sobre o processo de integração.

 

Este caso mostra que você poderá utilizar o SAP Business One como uma solução ERP para companhias de Serviços: Reparo e Manutenção, Organização de Projetos, Consultorias, Comunicação, Telefonia e etc. SAP Business One é multi-moeda e possui integração com SAP my SAP, SAP all-in-one, R/3. Nós conhecemos casos onde o SAP B1 está integrado com sistemas de ERP da Microsoft, como o Microsoft Great Plains Dynamics GP, Oracle eBusiness Suite/Financials – isto é importante para companhias multi-nacionais que possuem filiais no Brasil.

 

Esta é a tabela de integração, as transações do seu  banco de dados legado deverão ser sempre exportados para esta tabela.

 

 

A tela abaixo representa um Pedido de Vendas no SAP Business One, você pode perceber que o Item é idêntico ao ùltimo registro da tabela acima.

 

 

 

Abaixo está o código da aplicação, você deverá criar um projeto C# Console Application no MS Visual Studio.

 

using Microsoft.VisualBasic;

using System;

using System.Collections;

using System.Data;

using System.Diagnostics;

using System.Data.SqlClient;

 

namespace ConsoleApplication2

{

 

      sealed public class OrderApp

      {

            public static DataTable TableLines; //  O datasource do datagrid chamado DataLines.

            public static SAPbobsCOM.Documents oOrder; //  Objeto Pedido

            public static SAPbobsCOM.Documents oInvoice; //  Objeto Nota Fiscal

            public static SAPbobsCOM.Recordset oRecordSet; //  Objeto Recorset

            public static SAPbobsCOM.Company oCompany; //  Objeto Companhia

 

            // Variáveis de erros

            public static string sErrMsg;

            public static int lErrCode;

            public static int lRetCode;

 

 

            static string description, itemnumber, accountNumber;

 

       

            public static void Main()

            {

                  int docNumber=0;

                  OrderApp.oCompany = new SAPbobsCOM.Company();

                  OrderApp.oCompany.Server = "localhost"; //Altere para o nome do servidor da sua empresa

                  OrderApp.oCompany.language = SAPbobsCOM.BoSuppLangs. ln_Portuguese_Br; //Altere para a sua linguagem

                  OrderApp.oCompany.UseTrusted = true;

 

                  OrderApp.oCompany.CompanyDB = "TEST_SAPBO_ALBA_US";

                  OrderApp.oCompany.UserName = "manager";

                  OrderApp.oCompany.Password = "manager";

 

                  OrderApp.oCompany.Connect();

                  Console.WriteLine("Company is: "+OrderApp.oCompany.CompanyName);

 

                  SqlConnection connection = new SqlConnection();

                  connection.ConnectionString = "Integrated Security = true;Data Source = CRMSERVER; Initial Catalog = CRMCUSTOMIZATION;";

                  connection.Open();

  

                  SqlCommand command = new SqlCommand();

                  command.CommandType = System.Data.CommandType.Text;

                  command.CommandText = "SELECT * FROM ALBATIMELOG";

                  command.Connection = connection;

                  SqlDataReader reader = command.ExecuteReader();

 

                  while(reader.Read())

                  {

                        decimal billableTime, unitPrice, lineTotal;

                        double bTime, uPrice;

                       

                        description="";

                        itemnumber="";

                        accountNumber="";

                                               

                        Console.WriteLine("Record:");

                        //Lendo da tabela timelog

                        accountNumber=reader.GetSqlString(0).ToString();

                        billableTime=reader.GetSqlDecimal(1).Value;

                        unitPrice=reader.GetSqlDecimal(2).Value;

                        lineTotal=reader.GetSqlDecimal(3).Value;

                        description=reader.GetSqlString(4).ToString();

                        itemnumber=reader.GetSqlString(5).ToString();

                        //Adicionar campos

 

                        bTime=(double)billableTime;

                        uPrice=(double)unitPrice;

 

                        Console.WriteLine(billableTime);

                        Console.WriteLine(billableTime.ToString());

                        Console.WriteLine(unitPrice.ToString());

                        Console.WriteLine(lineTotal.ToString());

                        Console.WriteLine(description.ToString());

                        Console.WriteLine(itemnumber.ToString ());

                        Console.WriteLine();

 

                        //Adicionar Pedidos

                        OrderApp.oOrder = ( ( SAPbobsCOM.Documents )( OrderApp.oCompany.GetBusinessObject( SAPbobsCOM.BoObjectTypes.oOrders ) ) );

           

                        //Configurações do Objeto Pedido

                        OrderApp.oOrder.CardCode = accountNumber;

                        OrderApp.oOrder.HandWritten = SAPbobsCOM.BoYesNoEnum.tNO;

          

                        SAPbobsCOM.Recordset rs = null;

                        //Cria o número do próximo Pedido

                        object sSQL = "SELECT TOP 1 DocNum FROM dbo.ORDR ORDER BY DocNum DESC";

                        rs = ( ( SAPbobsCOM.Recordset )( OrderApp.oCompany.GetBusinessObject( SAPbobsCOM.BoObjectTypes.BoRecordset ) ) );

                        rs.DoQuery( System.Convert.ToString( sSQL ) );

                        while ( !( ( rs.EoF ) ) )

                        {

                              docNumber=System.Convert.ToInt32( rs.Fields.Item( 0 ).Value ) + 1;

                              rs.MoveNext();

                        }

 

                        //Moeda Default

                        string dfcurrency="";

                        sSQL = "SELECT MainCurncy FROM dbo.OADM";

                        rs = ( ( SAPbobsCOM.Recordset )( OrderApp.oCompany.GetBusinessObject( SAPbobsCOM.BoObjectTypes.BoRecordset ) ) );

                        rs.DoQuery( System.Convert.ToString( sSQL ) );

                        while ( !( ( rs.EoF ) ) )

                        {

                              dfcurrency= System.Convert.ToString(rs.Fields.Item( 0 ).Value);

                              rs.MoveNext();

                        }

 

                        OrderApp.oOrder.DocNum = docNumber;

                        OrderApp.oOrder.DocDate = System.DateTime.Today;

                        OrderApp.oOrder.DocDueDate = System.DateTime.Today.AddDays(30);

                        OrderApp.oOrder.DocCurrency = dfcurrency;

                        OrderApp.oOrder.Lines.ItemCode = itemnumber;

                        OrderApp.oOrder.Lines.ItemDescription = description;

                        OrderApp.oOrder.Lines.Quantity = bTime;

                        OrderApp.oOrder.Lines.Price = uPrice;

                        OrderApp.oOrder.Lines.TaxCode = "00";

                        OrderApp.oOrder.Lines.LineTotal = uPrice*bTime;

 

                        //ATENÇÃO – Você não deverá adicionar a pròxima linha !!!

                        //OrderApp.oOrder.Lines.Add();

 

                        OrderApp.oCompany.GetLastError( out lErrCode, out sErrMsg );

                        lRetCode = OrderApp.oOrder.Add(); //Tenta adicionar o Pedido no Banco de Dados

                        if ( lRetCode != 0 )

                        {

                              OrderApp.oCompany.GetLastError( out lErrCode, out sErrMsg );

                        }

                  }

            }  

      }  

}

 

Douglas Oyama, Alba Spectrum Group.  São Paulo - SP - Brazil

+55-11-3444-4949, help@albaspectrum.com or skype: albaspectrum, US: 1-630-961-5918 or 1-866-528-0577