Ayuda SAP

Visual basic Script para automatizar tareas

Exacto, es una herramienta peligrosa, pero SAP se proteje con los permisos. Básicamente es para repetir una acción que ves que tienes que hacer 100 veces al día igual, que es una pérdida de tiempo, pues eso lo logras hacer en segundos.

Piensa que solo es interactuar con la interfaz gráfica de SAP, no es entrar en sus tablas ni su código, entonces es como si fuera un usuario super rápido, jejeje

Yo a algunos scripts, según el estado del lote, le ponía un msgbox con opciones para escribir cosas en los inputs de sap. puedes hacerlo muy interactivo

2 Me gusta

@Jesus_Torres para entender mejor los códigos que nos compartes. Son solo para procedimientos repetitivos, no permiten carga de datos?

Por ejemplo, en caso de querer cargar un listado de usuarios nuevo (no existe ninguna transacción estándar para esto) tengo que agregar un id, nombre, apellido únicos ahi seria usando .text = ??

Hola,
Para mi han sido muy practicos, este es para agregar materiales en la CC01, etiqueta de materiales, ya que el sistema no permite pegar masivamente los mateirales. :slight_smile:

'Llamar archivo de excel -
 
Dim objExcel
Dim objWorkBook
Set objExcel = CreateObject("EXCEL.APPLICATION")
 
 
'Colocar la RUTA
 
Set objWorkBook = objExcel.Workbooks.Open("C:\Users\carabde\Documents\Datos\Script\CC01\Hoja_.xlsx")
 
 
'Colocar la hoja de excel
 
Set Hoja=objWorkBook.Sheets("Hoja1")
objWorkBook.Sheets("Hoja1").Select
objExcel.visible=true
 
 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Invocar la transaccion.
 
 
If Not IsObject(application) Then
   Set SapGuiAuto  = GetObject("SAPGUI")
   Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
  Set connection = application.Children(0)
End If
If Not IsObject(session) Then
   Set session    = connection.Children(0)
End If
If IsObject(WScript) Then
   WScript.ConnectObject session,     "on"
   WScript.ConnectObject application, "on"
End If
 
'Se debe reemplazar el código de la transacción
 
 
 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Inicializar variables. Colocar en intfila la primera fila del excel
 
Hoja.Select
 
intFila=2
 
'Colocar el nombre de la primera variable y que esté en la columna A
 
MATERIAL=Hoja.Range("B" & intFila).value
 
while MATERIAL <> ""
 
'Colocar todas las variables a utilizar y la columna de cada variable
 
	MATERIAL=Hoja.Range("B" & intfila).value
	            
 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'PEGAR Y REEMPLAZAR LOS PASOS GRABADOS EN EL SCRIPT PROPIO hasta el comando infila=intfila+1.
'Se debe reemplazar los nombres de las variables sin utilizar ""

session.findById("wnd[0]/usr/tabsTS_OBJEKTE/tabpUEMT/ssubDETAIL:SAPMC29C:0240/subBUTTONS:SAPMC29C:0500/btnPUSH_ERFA").press
session.findById("wnd[0]/usr/tabsTS_OBJEKTE/tabpUEMT/ssubDETAIL:SAPMC29C:0240/tblSAPMC29CTCO/ctxtRC29A-MATNR[0,1]").text = MATERIAL
session.findById("wnd[0]/usr/tabsTS_OBJEKTE/tabpUEMT/ssubDETAIL:SAPMC29C:0240/tblSAPMC29CTCO/ctxtRC29A-MATNR[0,1]").setFocus
session.findById("wnd[0]/usr/tabsTS_OBJEKTE/tabpUEMT/ssubDETAIL:SAPMC29C:0240/tblSAPMC29CTCO/ctxtRC29A-MATNR[0,1]").caretPosition = 0
session.findById("wnd[0]").sendVKey 0
 
intFila=intFila+1
 
WEND
5 Me gusta

Hola SidV,
Funciona como una LSMW con la ejecución online, si el usuario tiene permisos para la transacción y los objetos entonces puede ejecutar la macro (que emula la interacción del usuario con SAP)

3 Me gusta

Hola nicolasegp,
Tienes que grabar el script en Sap de cualquier transacción, por ejemplo alta de usuario, y luego te armas un Excel donde vas a cargar toooodos los usuarios que quieras en una hoja (con los datos a completar en SAP) y te creas una macro que vaya leyendo tu Excel y ejecutando el script que grabaste en SAP.
Es buenísimo!

3 Me gusta

Esta macro valdria para lotes con 2 operaciones que a su vez tienen 4 o 5 caracteristicas maestras?

Buenas noches a todos, ¿cómo están?
Estaba leyendo este artículo y me pareció muy interesante, ya que hay muchos procedimientos repetitivos que tornan molestos!
Pero me genera una pequeña duda, ¿por qué no usar batch-input para este proceso?

Hola, @Reatiga19,
Yo como mucho se hacer macros en visual basic que entiende SAP, pero no se exactamente que es un batch-imput :sob: y menos como hacerlo

Hola @renatondo ¿cómo estás?
Es cierto que ya que manejas la herramienta es una ventaja que tienes con el visual basic. Y te la apoyo, incluso me gustaría aprenderla para tomar provecho también.
Y referente a esto:

El batch-input es una herramienta que tienes en SAP, se usa para realizar una grabación de una acción en específico, por ejemplo, cargar ciertos datos repetidas veces para trabajadores diferentes, o agregar ciertas cosas en algunas transacciones en forma de lotes.

Se que no me daré a entender, ya que soy pésimo explicando, pero haré mi mayor esfuerzo… XD

El batch-input es una carga por lotes, simulando que el usuario (algo así como lo que propones con el VB) está realizando el proceso una y otra vez. Se realiza una grabación del proceso la primera vez, a través de la transacción SM35 y luego se juega un poco con el código en ABAP y se seleccionan los campos a llenar.
Y después por medio de un archivo TXT (grabado con tabulación) se sube a una transacción creada y estos serán los datos que llenara en la grabación cada vez que la ejecute.

Quizás suena enredado y loco (o quizás no sé cómo explicarlo bien jajajaja) pero es algo sumamente sencillo, después del primero los demás son fáciles.

Aunque he leído que no suelen ser tan eficaces porque repite el proceso n veces, siendo n la cantidad de registros que subas en el archivo TXT, y por consiguiente es más recomendable el uso de BAPIs (pero de estás si desconozco).

Un abrazo, espero haber ayudado en vez de haberte confundido más jajajaj

Hola @Reatiga19.
Lo del bath-imput entonces es la herramienta para hacer “macros” al estilo excel, pero desde SAP?.
Si es asi, ya la conozco, aunque no he practicado mucho.
Por mi trabajo en el area de excel tiendo a llamar a casi todo lo que se puede programar como “macros” aunque realmente no se llamen asi. :blush:

1 me gusta

Con las macros no necesitas un Abaper, ya que la macro de Excel carga los datos en la transacción estándar sin usar ni una sentencia ABAP.

Esta es otra contra del batch, de nuevo necesitas un Abaper para que cree una transacción…
En algunas filiales es muy engorroso conseguir que se creen nuevas transacciones, requiere muchas formalidades por parte de la casa matriz que concentra estos temas… con una macro Excel no hay que hacer nada en SAP, incluso se respetan las autorizaciones que tiene el usuario…

Saludos!

Hola que tal, tengo unos meses trabajando con ese tipo de scripts pero un poco mas avanzado, es decir como un ejemplo la T-Code MB1B (Enter Transfer Posting) con el movimiento 311 transferencia de inventario de sloc a sloc, lo que hace es lo siguiente

session.findById("wnd[0]").maximize
session.findById("wnd[0]/tbar[0]/okcd").Text = "/nmb1b"
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/txtMKPF-BKTXT").Text = "Transfer"
session.findById("wnd[0]/usr/ctxtRM07M-BWARTWA").Text = mov
session.findById("wnd[0]/usr/ctxtRM07M-WERKS").Text = plant
session.findById("wnd[0]/usr/ctxtRM07M-LGORT").Text = origen
session.findById("wnd[0]/usr/ctxtRM07M-LGORT").SetFocus
session.findById("wnd[0]/usr/ctxtRM07M-LGORT").caretPosition = 4
session.findById("wnd[0]").sendVKey 0
session.findById("wnd[0]/usr/ctxtMSEGK-UMLGO").Text = destino
session.findById("wnd[0]").sendVKey 0

antes de eso creo una sesion y despues creo un while, eso con programacion en visual basic y como plus para tener un respaldo de que fue lo que transferiste pues le meto SQL SERVER, si tienes un listado de 999999 numeros de parte para transferir con este codigo puedes lograr maravillas.

2 Me gusta

Me parece muy interesente el descubrir que exel interactue con sap, ya que excel lo conozco algo, :grinning: solo me falta poder tomar contacto con sap

1 me gusta

3 posts fueron trasladados a un nuevo tema: Script para cargar pedidos en lote desde Excel

Hola, una consulta, disculpen si es muy tonta pero soy nuevo en todo esto:

tengo una transacción que ya tengo definidos los parámetros en un layout, y luego ese archivo lo tengo que exportar a Excel 2007, cambiarle el nombre y guardarlo en una carpeta

Lo engorroso es que lo tengo que hacer cada una hora, sin falta,

Puedo mediante una macro programar que automáticamente a ciertas horas y se genere todo esto y guardarlo en una carpeta???

2 Me gusta

Hola @Alfredo_Araya,
lo que puedes hacer es programar en background Job tu transacción diariamente y cada dos horas, después define un nombre para cada job, después con tu macro haces la descarga de todos los job’s.

Saludos.

1 me gusta

Hola a todos:
Nada más quería ilustrar gráficamente una tarea repetitiva. Por ejemplo:

Salu2.

Hola
Me ayudas a definir un JOB para ejecutar un script?

Hola, que tal?
Tienes resuelto el tema de la creación del Job? Estoy interesado en implementarlo, ya tengo el script desarrollado, solo necesito se ejecute todos los días a las 07:00am

Saludos

Anibal

@anibal, bienvenido a la comunidad. Por favor, lee Cómo usar el foro de Consultoria-SAP, debes evitar responder a cada persona en respuestas separadas. Eso por un lado, y por otro lado, este tema es un tutorial, las consultas nuevas (relacionadas o no al tema), deben ser abiertas en tema nuevo. Primero usa el buscador a ver si ya se ha preguntado sobre “cómo definir un job” (creo que ya hay debates sobre eso), y si no encuentras el tema, abre un tema nuevo por favor.

Saludos