En este proyecto personal de ingreso de
pedidos a SAP usamos vb.net y ABAP 4 de
lado del servidor. En este ejemplo solo vamos a explicar cómo hacer una simple
consulta de clientes para registrar su pedido.
Herramientas a utilizar:
-
Microsoft Visual Studio .NET 2005
- Microsoft .NET Data Provider for mySAP.
- SAP R/3.
Manos a la obra
Primer
paso:
Abrimos
un proyecto nuevo en VB.net y le ponemos
como nombre “RFCClientes”
Segundo
paso:
Referenciamos
a la librería del sap provider .
Puedes descargar gratis de aquí: http://msdn2.microsoft.com/en-us/library/ms141761.aspx
el data provider my sap.
Tercer
paso:
Creamos en el form los siguientes componentes:
·
2 textbox
-
TxtDescripcion
-
TxtDireccion
·
2 maskedtextbox
·
1 datagridview
·
1 button
Debe
quedar la pantalla más o menos así:
Cuarto
paso:
Crear un paquete de funciones en SAP usando
la transacción SE80, damos click derecho a Grupo funciones, Crear, ponen como nombre “ZKNA1” y una descripción
del paquete.
Y dan grabar.
Quinto
paso.
Creamos una tabla física llamada. “ZBRFCKNA1”
con la transacción SE11.
Grabamos y Activamos
Sexto
paso:
Creamos la función en sap que nos traiga la
consulta de los clientes, usamos la transacción SE37.
Le damos un nombre “Z_FI_CLIENTE” y
creamos.
Debemos
poner en la pestaña de atributos la opción de “Módulo de acceso remoto”
Luego establecemos valores de entrada en
“Import”.
Establecemos en la parte de Tablas una
referencia llamada “TABCLIENTE”.
Por último el código fuente.
En detalle:
FUNCTION
Z_FI_CLIENTE.
*"----------------------------------------------------------------------
*"*"Interfase
local
*" IMPORTING
*" VALUE(KUNNR1) LIKE KNA1-KUNNR DEFAULT SPACE
*" VALUE(KUNNR2) LIKE KNA1-KUNNR DEFAULT SPACE
*" VALUE(NAME1) LIKE KNA1-NAME1 DEFAULT SPACE
*" VALUE(STRAS) LIKE KNA1-STRAS DEFAULT SPACE
*" TABLES
*" TABCLIENTE STRUCTURE ZBRFCKNA1
*"----------------------------------------------------------------------
IF KUNNR2 = ''.
SELECT KNA1~KUNNR KNA1~STCD1 KNA1~ANRED
KNA1~NAME1
KNA1~ORT01 KNA1~STRAS
KNA1~TELF1 KNA1~TELFX KNVI~TAXKD INTO TABLE
TABCLIENTE
FROM ( KNA1
inner join KNB1
on
KNB1~KUNNR = KNA1~KUNNR
inner join KNVI
on
KNVI~KUNNR = KNB1~KUNNR )
WHERE KNB1~BUKRS EQ 'GRUP'
AND KNA1~KUNNR LIKE KUNNR1
AND KNA1~NAME1 LIKE NAME1
AND KNA1~STRAS LIKE STRAS.
ELSE.
SELECT KNA1~KUNNR KNA1~STCD1 KNA1~ANRED
KNA1~NAME1
KNA1~ORT01 KNA1~STRAS
KNA1~TELF1 KNA1~TELFX KNVI~TAXKD INTO TABLE
TABCLIENTE
FROM ( KNA1
inner join KNB1
on
KNB1~KUNNR = KNA1~KUNNR
inner join KNVI
on
KNVI~KUNNR = KNB1~KUNNR )
WHERE KNB1~BUKRS EQ 'GRUP'
AND KNA1~KUNNR BETWEEN KUNNR1 AND KUNNR2
AND KNA1~NAME1 LIKE NAME1
AND KNA1~STRAS LIKE STRAS.
ENDIF.
ENDFUNCTION.
Como vez el código es muy simple, hacemos
una validación cuando hay un segundo código del cliente realiza el siguiente
query.
Grabamos y Activamos.
Séptimo
Paso:
El código VB.net:
Imports
Microsoft.Adapter.SAP
Public
Class Form1
Private Sub BtnPresentar_Click(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles BtnPresentar.Click
Me.Cursor =
System.Windows.Forms.Cursors.WaitCursor
Try
Dim sSql As String = "EXEC
Z_FI_CLIENTE "
If Me.TxtCod1.Text.Length > 0
Then
Dim Cod1 As String =
Me.TxtCod1.ToString.Substring(Me.TxtCod1.ToString.Length - 10)
If Me.TxtCod2.Text.Length >
0 Then
Dim Cod2 As String =
Me.TxtCod2.ToString.Substring(Me.TxtCod2.ToString.Length - 10)
sSql
&= "@KUNNR1='" & Cod1 & "'"
sSql &= ",@KUNNR2='"
& Cod2 & "'"
Else
sSql &=
"@KUNNR1='" & Cod1 & "',@KUNNR2=''"
End If
Else
sSql &=
"@KUNNR1='%',@KUNNR2=''"
End If
If Me.TxtDescripcion.Text.Trim.Length
> 0 Then
sSql
&= ",@NAME1='" & Me.TxtDescripcion.Text.Trim &
"'"
Else
sSql &=
",@NAME1='%'"
End If
If Me.TxtDireccion.Text.Trim.Length
> 0 Then
sSql
&= ",@STRAS='" & Me.TxtDireccion.Text.Trim &
"'"
Else
sSql &=
",@STRAS='%'"
End If
Dim I As SAPConnection = New
SAPConnection
Dim Cont As Long = 0
I.ConnectionString =
"ASHOST=192.168.0.180;SYSNR=0;CLIENT=200;USER=IOBREGON;PASSWORD=******;LANG=EN"
I.Open()
Dim R As SAPCommand = New
SAPCommand(I)
R.CommandText = sSql
R.CommandType = CommandType.Text
Dim Dr As SAPDataReader = R.ExecuteReader()
Dim intCol As Integer
Me.DataGridView1.Rows.Clear()
Me.DataGridView1.Columns.Clear()
For intCol = 0 To Dr.FieldCount - 1
Me.DataGridView1.Columns.Add(Dr.GetName(intCol), Dr.GetName(intCol))
Next
While Dr.Read
Dim objCelulas(intCol) As
Object
Dr.GetValues(objCelulas)
Me.DataGridView1.Rows.Add(objCelulas)
End While
Me.DataGridView1.Columns(0).HeaderText
= "Código"
Me.DataGridView1.Columns(1).HeaderText = "Identificación"
Me.DataGridView1.Columns(2).HeaderText = "Trato"
Me.DataGridView1.Columns(2).Width =
80
Me.DataGridView1.Columns(3).HeaderText = "Nombre"
Me.DataGridView1.Columns(3).Width =
220
Me.DataGridView1.Columns(4).HeaderText = "Ciudad"
Me.DataGridView1.Columns(5).HeaderText = "Dirección"
Me.DataGridView1.Columns(6).HeaderText = "Teléfono"
Me.DataGridView1.Columns(7).HeaderText
= "Fax"
Me.DataGridView1.Columns(8).HeaderText = "IVA"
Me.DataGridView1.Columns(8).Width =
80
Dr.Close()
I.Close()
I.Dispose()
If Me.DataGridView1.RowCount <=
1 Then Me.DataGridView1.Item(1, 0).Value = "No se produjo resultados"
Me.DataGridView1.Focus()
Catch Ex As Exception
System.Windows.Forms.MessageBox.Show("No pudo realizar la consulta
por: " & Ex.Message, "Mensaje del Sistema",
Windows.Forms.MessageBoxButtons.OK, Windows.Forms.MessageBoxIcon.Exclamation)
End Try
Me.Cursor =
System.Windows.Forms.Cursors.Default
End Sub
End Class
Octavo
y ultimo
Lo probamos:

y listo
Se pueden descargar el proyecto completo: RFCClientes.rar (86,88 kb)
Cualquier cosa estoy para ayudarlos
Actualmente calificado con 5.0 por 2 personas
- Currently 5/5 Stars.
- 1
- 2
- 3
- 4
- 5