Problemas con Batch-Input y ventanas dinámicas

Para el batch input puedes hacer lo siguiente, una la clasica, condiciona sentecias batch por clase de pedido, si sabes cuales levantan multiple ventas y cuales no, podras condicionar las sentencias, esto es haciendo dos grabaciones, una con multiple ventanas y otra con single screen.

La otra manera, es preguntar si el campo que requieres existe, y si no existe no enviar la sentencia correspondiente a ese dato inesistente.

Asi solucionas, trabajar con batch siempre resulta hard, pero despues que esta hecho es una delicia, al final los usuarios finales no ven el trabajo sucio. Por eso le llamamos de dark side of SAP.

@smota lo de condicionar según clase de pedido es lo que tenía pensado hacer, pero como pregunto si el campo existe antes de hacer el call transaction?

GET PARAMETER ID ‘CAC’ FIELD l_kokrs.

  IF l_kokrs IS INITIAL.
            sentencia batch
  endif.

si tiene valor entonces existe, pero si no tiene valor entonces no existe.
Asi lo condicionas, y con eso solucionas.

Imposible, porque tengo acceso a esos parameters ids después de hacer el CALL TRANSACTION, pero es antes de llenar mi tabla de batch-input que necesito saber si existirán o no las pestañas.

La única opción es preguntar por las clases de pedido como dices y llamar una grabación u la otra, pero veré si existe un simular batch-input porque me resulta tedioso preguntar por todas esas clases de pedido.

no man, mira como funciona, el batch input va por parte.

sentencia batch uno
sentencia batch dos…
ect…
sentencia que llama la subscreen… OJO aqui.
GET PARAMETER ID ‘CAC’ FIELD l_kokrs.
IF l_kokrs IS INITIAL.
sentencia batch que sigue si el parametro existe.
else.
sentencia batch que sigue si no existe el parametro.
endif.

luego mas sentencias batch.
Y ahora el call transaccion.

A cuales sentencias te refieres?? Porque antes del call transaction lo que hago es llenar una tabla interna con los datos de las pantallas. A esas te refieres? Si es así entonces lo que me dices es que haga el GET PARAMETER despues de que llene el subscreen?

Dejame ir probando a ver.

Pega un poco del codigo que estas usando o mejor dejame buscar un ejemplo para que veas lo qeu digo.

DATA: l_kokrs TYPE kokrs.


******** Grabacion Batch-input **************************


  PERFORM batch_input USING 'X' 'SAPMKBUD' '0300' .
  PERFORM batch_input USING ' ' 'BDC_CURSOR' 'CODIA-AUFNR' .
  PERFORM batch_input USING ' ' 'BDC_OKCODE' '/00' .

  GET PARAMETER ID 'CAC' FIELD l_kokrs.

  IF l_kokrs IS INITIAL.
    PERFORM batch_input USING 'X' 'SAPLSPO4' '0300' .
    PERFORM batch_input USING ' ' 'BDC_CURSOR' 'SVALD-VALUE(01)' .
    PERFORM batch_input USING ' ' 'BDC_OKCODE' '=FURT' .
    PERFORM batch_input USING ' ' 'SVALD-VALUE(01)' input3 ."Aqui Va La Sociedad
  ENDIF.

  PERFORM batch_input USING 'X' 'SAPMKBUD' '0300' .
  PERFORM batch_input USING ' ' 'BDC_CURSOR' 'CODIA-AUFNR' .
  PERFORM batch_input USING ' ' 'BDC_OKCODE' '/00' .

Lo hice así pero no funciona para los campos del tab, probé con el campo cl. de pedido y sí lo trae.

Pero como es que ese GET PARAMETER trae el dato si el PERFORM batch_input lo que hace es llenar una simple tablita interna?? Eso es nuevo para mí.

Es magia, mi teoria es que el batch se ejecuta regresando a la sentencia origen, paso por paso, y hay se encuentra el GET y entonces funciona, listo, has el get al pedido o a la factura, si ves la factura, entonces metes los batch de la factura, si ves el pedido metes los batch que mueven el tab de factura. con eso vas a solucionar

Lo estoy haciendo al pedido y/o factura pero no viene nada (SUBRC = 4).

Y que paso con la frase de que para el pedido si te trae algo? tampoco te sirve con eso?

No, lo que digo es que probé con el campo Clase de pedido que está afuera, que ese siempre tendrá valor.
Solo probé con eso para confirmar que esté funcionando el GET PARAMETER. dejame intentar otras cosas y al final digo con que me quedé pa resolver.

Gracias por tu time dude.

Hola @Haden_Yasser_ espero no contestar demasiando tarde y como observo que aun no posteas la forma en que lo resolviste, me atrevo a comentar.

Según pude entenderte el problema lo presentas al colocar una clase de documento debido que el control de copia te define que pestaña se activara y que campos te solicitara como es el caso de los pedido, oferta, factura etc.

Observa que el campo que te solicita independientemente de la clase de documento que coloques siempre es VBELN y lo unico que cambia es la tabla.

Por ejemplo - para factura

Para Pedido

Para Oferta

mi sugerencia es que intentes crear una tabla “Z” donde leas envies a leer la tabla y la dynpro que debe de tomar dependiendo la clase de pedido y en tu grabación solo debes de comentar las lineas de codigo que no son requeridas.

Por ejemplo, al momento de ingresar una clase de pedido donde el control de copia te pide el # de pedido, debes de comentar el resto del codigo de esa dynpro.

Saludos.

1 me gusta

Gracias @mpalomo,

Si sé cuales son los campos de cada pestaña, al final utilizaremos una sola clase de pedido que llama el tab referencia con factura y así no tengo problemas. Antes la grabación se volvia loca porque solo salía un tab en algunos casos y en otros salían varios tabs.

Buenas,

en vez de hacer un Batch Input, no te sirve ninguna bapi? Por ejemplo:

BAPI_SALESORDER_CREATEFROMDAT1
BAPI_SALESORDER_CREATEFROMDAT2

Un saludo.

La 1 creo que no te va a servir, pero la 2 no tiene mala pinta,

BAPI_SALESORDER_CREATEFROMDAT2

Ohhhh @Haden_Yasser_, también estás por aquí, placer leerte.

Orlando Cuevas (AriasMotors)

1 me gusta

@OrlandoCuevas Mi hermano, igualmente :smiley:

1 me gusta

Hola Buenos Dias , en primer lugar deberias hacerle un debugin al programa que tiene el batch-input y colocarlo en modo visible para ver que te esta haciendo y saber por que te da el error, para hacer esto debes de hacer lo siguiente :
1.- te vas a parar exactamente antes de la instruccion que llama a la pantalla ejemplo :
CALL TRANSACTION 'F-90’
USING bdcdata
MODE V_MODO
UPDATE 'S’
MESSAGES INTO messtab.
2.- antes de esta instruccion parado en el debuging vas a cambiar el contenido de la variable MODE a ‘A’, al continuar veras el batch-input de forma visible y vas a ver donde se queda y por que.

espero te esto te encamine a solucionar tu problema

1 me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.