miércoles, 12 de mayo de 2021

 Invertir en "playbusiness.mx"?

Si estas leyendo esto es porque conoces el sitio web de playbussines y estas pensando en invertir. Hace 16 meses  invertí dinero en las siguientes modalidades:

1. Franquicias. Inicialmente me pareció una gran opción para poder poner a trabajar mi dinero pero después de 24 meses he obtenido un retorno neto promedio acumulado del 1.16%. Al finalizar los primeros 12 meses pensé que los rendimientos habían sido bajos por que hay un tiempo de espera en lo que terminas de pagar tu inversión antes de que esta quede activa. Me dieron un rendimiento de 0.algo que me pareció alarmante pero recién en Abril del 2021 se hizo el segundo pago de  rendimientos y logre sumar el 1.16 ya mencionado. Posiblemente estos rendimientos tan bajos sean consecuencia de la pandemia ya que todas las franquicias en las que invertí estaban relacionadas con restaurantes.  Mi conclusión es que no es tan buena opción invertir en esta modalidad por las siguientes razones:

-El punto de equilibro de las franquicias parece ser alto. No soy un economista y no sabría decir cuanto debería de ser pero después de revisar los reportes del 2020 y 2021 fueron muy pocos los meses en los que se rebasaban esos puntos de equilibrio. Playbussines, debo decirlo, en algunos proyectos si ha hecho revisiones de estos puntos y se han ajustado los puntos de equilibrio y algunos retornos se han ajustado a las ventas y no a los sobrantes después de descontar los costos de operación.

-Los reportes de ventas en algunos proyectos tardan mucho en ser actualizados. Playbussines explica que estos reportes son actualizados en tiempo pero en algunos proyectos la demora ha sido evidente.

-El mercado secundario de venta de participaciones parece un poco confuso. He visto a múltiples players vender. Si no estas preparado para perder tu dinero, es decir, que este invirtiendo con dinero prestado, creo, es muy mala opción para invertir. 

Al momento creo que fue una mala inversión. Tal vez hubiera sido mejor meter ese dinero en prestamos de yotepresto.com


2. Empresa de tecnología. En esta inversión la idea es financiar una startup. Al momento la empresa que seleccione parece tener un crecimiento bueno. En esta modalidad no hay retornos. Se supone que la ganancia la puedes generar al entrar al mercado secundario y vender obteniendo en este paso una ganancia. Aún no lo hago  ya que estoy esperando a que madure la inversión.


Despues de un par de a;os con estas inversiones comprendi mi error. La mejor estrategia es invertir en varios proyectos el monto minimo disponible. Tal vez 2000 o 4000. La teoria es que al hacer un balance de todas las inversiones estas deberan de arrojar un resultado positivo.


¿Conviene utilizar leasing automotriz para deducir mis impuestos?


Hace aproximadamente un año estuve revisando la posibilidad de rentar un auto para poder deducir mis impuestos de manera mas eficiente. Hice mis cuentas y al final note lo siguiente:

1. El monto invertido entre comprar, dando un enganche pequeño,  y rentar no es tan grande.  Este punto es muy relevante. Si el enganche que tienes es grande, posiblemente te convenga comprar el coche y deducir la comprar de tu pago de impuestos. No conozco todas las variantes pero entiendo que se puede deducir si eres una persona con actividad empresarial. Estos datos solo aplican a México.

2. Los contratos de leasing disponibles en Mexico consideran un tope de uso. Es decir, solo puedes utilizar ciertos kilómetros el coche. Es muy relevante revisar si no excedes este kilometraje para no pagar penalizaciones.

3. Los costos de seguro y mantenimiento deben de ser considerados. Al rentar deberás de hacer el mantenimiento en el concesionario.

En conclusión me dio la impresión de que gastabas mas por buscar ahorrar en la deducción de impuestos. Tiempo después encontré este video en youtube:

https://www.youtube.com/watch?v=Qu_fhMhKBCo

Sin duda reforzó las ideas que tenia sobre el tema de leasing.  Tal vez toda esta información te ayude a tomar una decisión. 

domingo, 9 de mayo de 2021

Leí hace poco que posiblemente vivimos en una simulación y justo lo que me llamo la atención es  han demostrado que vivimos en una simulación. No leí mas que el encabezado de la noticia pero me vino a la mente esta idea:

Y que si vivimos en una simulación

¿Acaso el dolor no lo sentimos?

¿Nuestras risas no las escuchamos?

¿Las lagrimas han dejado de mojarnos?


Y que si la simulación se detiene. 

¿Nos daremos cuenta del momento en que dejemos de vivir?

¿El sufrimiento y el dolor cesarán?

¿Nuestras almas dejarán de estar vacías?

Y si nada existe. ¿Por qué temer que se acabe?




miércoles, 29 de septiembre de 2010

Interfaz Asincrona

SAP XI/PI

Que es SAP XI/PI?

Bueno...a estas alturas del partido hay mucha informacion sobre los que es XI/PI por lo que tampoco es mi intencion detenerme mucho en esto...lo que si es intentar poner lo mas sobresaliente sobre la construccion de interfaces en XI....


SAP XI/PI es un ambiente de integracion de sistema por lo que nos sirve para conectar sistemas en alguna de estas categorias:

-Sistemas SAP con SAP
-Sistemas no SAP con SAP
-Sistemas no SAP con no SAP

En este punto deberia de explicar la arquitectura y demas cositas pero pasare de alto este punto y dare por hecho que conoces algo ( busca en internet el TBIT40) de esto por lo que solo desarrollare algunos puntos.

Componentes:
System Landscape Directory (SLD): Es el repositorio central donde tendremos toda la información referente a software y sistemas data center.
Integration Builder: Una extrúctura cliente-servidor para acceder y editar en sus dos pilas de Shared Collaboration Knowledge.
Integration Repositori (IR): Lo utilizamos para el diseño y desarrollo de interface, procesos, y mapeo de objetos que seran empleados en la implementación de los escenarios.
Integration Directori (ID): Lo utilizamos para la configuración de escenarios, utilizando las interafaces, procesos y mapeos definidos en nuestro Integration Repositori (IR).
Integration Server (IS): Es el motor central de procesamiento de SAP XI/PI. Todos los mensajes, SAP o no-SAP, A2A o B2B, independientemente de la tecnología o el proveedor backend, son procesados de una forma consistente y coherente.
Central Monitoring: Podemos monitorizar todos los componentes y procesos en tiempo de ejecución.
Adapter Engine: Es un conector Java denominado Java Conector Architecture (JCA), necesario para conectar los sistemas backend con SAP XI/PI



Construccion.

¿Que necesito saber para empezar?
Lo mas imporante al construir una interfaz es identificar los siguientes puntos:
1.- Reconocer si es una interfaz sincrona o una interfaz asincrona.
Este punto es crucial. Las interfaces sincronas son aquellas que requieren una respuesta del sistema destino para terminar su ejecucion mientras que las interfaces asincronas solo envian informacion al sistema destino sin requerir una respuesta para terminar su ejecucion.
2.- Reconocer que es lo que vas a enviar al sistema destino.
Me refiero al hecho de saber exactamente que datos quieres enviar al sistema destino.
3.. Reconocer como enviaremos la informacion al sistema destino.
Esto implica conocer que tipo de adaptador usaremos...y aqui te preguntaras que es un adaptador? Bueno, de manera burda, una adapatador es la "forma" en que XI escribira o leera los datos de los sistemas.


¿Como voy a empezar?
Cuando queremos construir una interfaz debemos de seguir esta serie de pasos:
Integration Repository
1. Importar el Software Component Version en el Integration Reposity (IR)
2. Crear los Namespaces
3. Crear los Data Types de las estructuras de Origen y de Destino
4. Crear los Message Types
5. Crear los Message Interfaces
6. Crear el Message Mapping
7. Crear la Interface Mapping
Integration Directory
8. Crear Scenario
10. Crear el Service de Origen y El Service de destino
11. Crear el Communication Channel de origen y el Communication Channel de destino
12. Crear el Sender Agreement y Receiver Agreement
13. Crear el Receiver Determination y Interface Determination

En otras entradas del blog veras un escenario basico asincrono y un escenario básico sincrono...

Al ser un tema mas complicado ire poniendo la configuracion por adapatadr para hacer mas util la informacion...

lunes, 15 de febrero de 2010

Funciones FIPI

Las funciones FIPI sirven para generar un batch pero utilizando un grupo de funciones que generara automaticamente el batch indicandole los campos que se quieren cargar.

La funcion que contabiliza es esta:
POSTING_INTERFACE_DOCUMENT
Si todo va bien generara un documento financiero. Si no generara un BATCH en la sm35 para poder visualizar el error.

Primero se debe de abrir el juego de datos con esta funcion:
CALL FUNCTION 'POSTING_INTERFACE_START'
EXPORTING
i_client = sy-mandt
i_function = 'C'
i_group = 'DES847'
* I_HOLDDATE = ' '
* I_KEEP = ' '
i_mode = ld_mode
i_update = 'S'
i_user = sy-uname
i_xbdcc = 'X'
EXCEPTIONS
client_incorrect = 1
function_invalid = 2
group_name_missing = 3
mode_invalid = 4
update_invalid = 5
OTHERS = 6.



Ahora tendremos que cargar los datos al juego de datos y es aqui lo interesante ya que en los programas para batch teniamos que cargar el tipico SCREEN y CAMPO en las funciones FIPI bastara con indicar la esctructura a la cual le queremos pasar datos:


PERFORM informar_ftpost TABLES p_it_ftpost
USING c_k l_cont 'BKPF-BUKRS' g_bukrs.

* Clase de documento
PERFORM informar_ftpost TABLES p_it_ftpost
USING c_k l_cont 'BKPF-BLART' g_blart. "T1

Aqui le estamos pasando sociedad y clase de documento, este es el detalle del form:

FORM informar_ftpost TABLES p_it_ftpost STRUCTURE ftpost
USING p_tipo TYPE c
p_contador
p_campo
p_valor.

DATA: lw_ftpost TYPE ftpost.
CLEAR lw_ftpost.

*TIPO DE CAMPOS K = CABECERA P = POSICION
lw_ftpost-stype = p_tipo.
*CONTADOR DE LINEAS
lw_ftpost-count = p_contador.
*CAMPO
lw_ftpost-fnam = p_campo.
*VALOR DEL CAMPO INDICADO
lw_ftpost-fval = p_valor.
CONDENSE lw_ftpost-fval.

APPEND lw_ftpost TO p_it_ftpost.
CLEAR lw_ftpost.

ENDFORM. " INFORMAR_FTPOST


Lo mismo para las posiciones:

PERFORM informar_ftpost
TABLES p_it_ftpost
USING c_p
l_cont
'BSEG-BSCHL'
lw_estructura-clavecontdebe.


Y viene la pregunta, como sabemos en que momento estamos hablando de la cabecer o de un debe o de un haber?


Esto vendra regido por una variable que en el form es l_cont que indica la posicion a donde queremos cargar. Para la creacion de una factura tendriamos:
l_cont = 1 Para la cabecera
l_cont = 2 Para el Debe
l_cont = 3 para le Haber



Cuando ya tengamos todos los campos listos contabilizaremos con esta funcion:

CALL FUNCTION 'POSTING_INTERFACE_DOCUMENT'
EXPORTING
i_tcode = g_transaccion
* I_SGFUNCT = ' '
* I_NO_AUTH = ' '
IMPORTING
e_msgid = p_retorno-id
e_msgno = p_retorno-number
e_msgty = p_retorno-type
e_msgv1 = p_retorno-message_v1
e_msgv2 = p_retorno-message_v2
e_msgv3 = p_retorno-message_v3
e_msgv4 = p_retorno-message_v4
* E_SUBRC =
TABLES
t_blntab = p_blntab
t_ftpost = p_ftpost
t_fttax = p_fttax
EXCEPTIONS
account_missing = 1
company_code_missing = 2
posting_key_invalid = 3
posting_key_missing = 4
record_type_invalid = 5
transaction_code_invalid = 6
amount_format_error = 7
too_many_line_items = 8
company_code_invalid = 9
screen_not_found = 10
no_authorization = 11
OTHERS = 12.

De ser todo correcto p_retorno traera el numero de documento generado.
s

Para cerrar el juego de datos no olvidemos :
CALL FUNCTION 'POSTING_INTERFACE_END'.


Para tener un ejemplo completo revisa este link

http://www.sapnet.ru/viewtopic.php?t=2350

martes, 1 de diciembre de 2009

¿Cuándo debo de usar una rutina de conversión y como se cual usar?

¿Cuándo debo de usar una rutina de conversión y como se cual usar?
Retomando el ejemplo de la cuenta tenemos que ir al dominio de datos de esta y en la pestaña de definición veremos esto:


En el campo rutina conv
Veremos la rutina a utilizar, si viene el campo vacio no se requiere rutina de conversión
Para saber que función es, damos doble click sobre ALPHA


Buscando datos maestros...

¿Cómo obtengo los datos maestros?
Para buscar el maestro de cuentas de mayor nos podemos apoyar en el campo del concepto que queremos buscar, ejemplo:
Entro por la SE11 a la bseg

Entro al dominio de datos

Doy doble click sobre el dominio
Entro a ámbito de valores

En tabla de valores esta la tabla de datos maestros

viernes, 22 de mayo de 2009

How to convert time to text ...

Tratando de cargar un fichero de excel a SAP en donde una de las columnas correspondia a datos en formato hora detectamos que la hora se pasaba a la tabla interna como un numero, este numero nos daba un problemon por que no teniamos manera de saber a que hora correspondia, navegando encontramos este codigo:

REPORT ZTEST_VDLL_2.
*eg: 17:39:53
*the excel convert each in days and add up i.e
**17*/24 = 0.708333333
**39*/60/24 = 0.027083333
**53*/60/60/24 = 0.000613426
*Total coming as 0.736030093
*
*so we can do in reverse way as
data: aux2 type f.
data: aux(12) type p decimals 10.
data: v1(12) type p decimals 10.
data: v2(12) type p decimals 10.
data: v3(12) type p decimals 10.
data: hr(2) type n.
data: min(2) type n.
data: sec(2) type n.

aux2 = '0.000127314814814815'.
aux = aux2.
*aux = '0.736030093'.
v1 = aux * 24.
v2 = v1 MOD 1.
v2 = v2 * 60.
v3 = V2 MOD 1.
v3 = v3 * 60.
hr = trunc( v1 ).
min = trunc( v2 ).
sec = trunc( v3 ).

break-point.

martes, 3 de marzo de 2009

Inspector de codigo ABAP

Alguna vez te has preguntado como saber si has programado bien? Pues SAP te da una herramienta que te puede ayudar saberlo, la herramienta es la transaccion SCI que basicamente hace un analisis de tu codigo fuente he aqui un manual de como usarlo:

https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/5037

lunes, 9 de febrero de 2009

Como encontrar exits en las transacciones estandar??

Como encontrar exits en las transacciones estadar de SAP o extensiones SAP??
Esa es la pregunta del millon de dolares cada vez que estamos a punto de hacer una ampliacion z!
Pues basicamente el truco, segun yo, consiste en:
1. Entras a la transaccion que te interesa
2. Pones en la lines de comando /h
3. Ejecutas la transaccion
4. En este momento estaras en modo debuggin si no estas ahialgo has hecho mal jeje

5. Entras al meno breakpitns -> breakpoints at -> breakpoint at statement ->
pues aqui viene la escencia. Habilias break points para la sentencia CALL CUSTOMER-FUNCTION
5. Los break points que se habiliten seran las user exits a las cuales tienes acceso solo resta descubrir cual es el punto donde quieres hacer la ampliacion, encontrar el nombre de la ampliacion para activarla por la cmod y listo!

Necesito pegar un codigo de un programa z q hace esto.... sin embargo no entra el codigo fuente asi que pasare un link

http://www.sapnet.ru/viewtopic.php?t=2819&start=0&postdays=0&postorder=asc&highlight

Copiar y ejecutar el codigo y veras que puedas obtener diferentes user exit.

La ventaja de hacerlo por medio del debuggin es que sabras en que momento de la ejecucion del porgrama podras entrar a la exit que te interesa y de esta manera habilitar solo la que te interesa.

Si has hecho los pasos anteriores seguramente tendras el nombre de la exit asi que solo resta en la opcion ampliacion del programa z de obtencion de ampliaciones y tendras el nombre de la ampliacion a activar!

Si quieres buscar otro tipo de ampliacion deberas de poner break poins segun lo que quieras buscar:

Sustituciones - SUBSTITUTION

viernes, 6 de febrero de 2009

Sustituciones

Las sustituciones las utilice para cargar un valor predefinido en un determinado campo de algún campo z o estándar. Hay que tener en cuenta que es una especie de inicialización de campos y por lo tanto si pretendes hacer que dependan de un valor posterior a la carga de los mismos pueden generar errores no esperados. Entiandase por esto al hecho de querer hacer una validacion dentro de una sustitucion, esto aunque es factible hacer por medio de fuerza bruta no es una buena idea ya que a la larga no te servira.
Existen las sustituciones de datos maestros y de datos contables. Si es factible hacer sustituciones de campos z solo que requieren que agregues dicho campo z en unas estructuras que vienen en los links de abajo :)

Se implementan en los programas ZRGGBS000 ZRGGBR000
Requieren de ciertos aspectos de parametrización para hacerlas funcionar en estas páginas puedes ver algo al respecto:

http://www.richard-harper.me.uk/Kb/showtext.aspx?id=0007chttp://sapprogramming.blogspot.com/2007/01/programming-with-substitution.html
OAZ1, GGB0 Sirve para validar las operaciones contables (BKPF,BSEG)ZRGGBR000
ABUMNOB28 Documentos financierosABZON OBBH Sustitución de documentos contables


Ver nota SAP 842318

Tips ABAP

Como crear vistas en SAP
1 Creo la tabla z, con parámetro a y permitiendo to
2 Voy al menú utilidades y de ahí le doy en generador act. tabla
3 En grupo de autorizaciones le doy la primera opticion
4 Le doy el grupo de funciones el nombre de mi tabla z
5 Asigno paquete
6 Le pongo un nivel
7 Le doy 100 como imagen resumen
8 Le doy guardar
9 Creo la transacción
10 Entro a la se93
11 Le doy en la ultima opcion Transacción con parámetros
12 Le doy en omitir imagen inicial
13 En la transacción le doy sm30
14 En val propuesta ingreso:
15 VIEWNAME nombre de mi tabla z
16 UPDATE X
Traportar
Siempre me logueo al mandate destino
STMS -> Carrito
Cola de QUAS
Buscar la orden con los binculares
Darle en el carrito con un cuarto de la caja El OTRO no se estropea TODO
Seleccion mandante destino
Selecciono todo
Le doy OK
Aplicar notas
Bajar la nota con usuario market place
Entras al mandante donde tienes el porblema
Entras a la snotes
Le das donde dice aplicar nota, y le das buscar con el broxse
Seleccionas y le das aplicar
El sistema te dice si es aplicable o no
Luego te dice si quieres plaicarla o no
Para revisa el tiempo de ejecucion de un programa le doy click
Para que los reportes funcionen correctamente con toda la funcionalidad que proveé la herramienta es necesario que el catálogo y
la tabla de salida estén correctamente cargados. Existe una forma para chequear esto último; para los ALV llamados mediante la
función REUSE_ALV_LIST* se debe ingresar el valor &SOS en la línea de comandos. Cuando se trate de un objeto ALV o un ALV llamado
mediante REUSE_ALV_GRID*, basta con posicionar el puntero en una zona vacía del ALV (sin registros de la tabla de salida) y hacer
doble click derecho mientras se presiona la tecla SHIFT.
Cuando ingresamos en el modo de chequeo de consistencia mediante los métodos mencionados el sistema nos indica si hay algún error
en la llamada al ALV, y también podemos visualizar los principales parámetros que se le envían al ALV.
Errores en el filtro de un ALV
ls_fieldcat-fieldname = 'NAME1'.
ls_fieldcat-tabname = 'TU TABLA INTERNA'
ls_fieldcat-datatype = 'CHAR'.---> tipo de dato del campo
ls_fieldcat-outputlen = '30'. --->longitud del campo
Ejemplos ALV
BCALV_TEST_*.
F4 dinámico para cualquier campo
Si queremos crear una ayuda (F4) para cualquier campo, basta con utilizar el siguiente código:
DATA: carrid TYPE spfli-carrid,
hlp TYPE string,
struc TYPE dfies-tabname,
comp TYPE dfies-fieldname.
DESCRIBE FIELD carrid HELP-ID hlp.
SPLIT hlp AT '-' INTO struc comp.
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
tabname = struc
fieldname = comp
EXCEPTIONS
field_not_found = 1
no_help_for_field = 2
inconsistent_help = 3
no_values_found = 4
OTHERS = 5.
Ayuda de busqueda
En una dynpro hay dos maneras de declara la ayuda de busqueda
1. Con la definicion de datos y en visualizar marcar el campo programa en el combo pulsar entradas posibles le damos ver opciones, hay q tener definido correctamente el dato
2. Cargar directamente en el campo la ayuda de busqueda
Screen Exits
yo vi el agregado de un campo adicional para la ME51N. Solo debes de agregar un campo(s) mas a la tabla EBAN a traves de su CI Include CI_EBANDB. Luego creas la dynpro 0111 para el programa SAPLXM02.
Finalmente, debes utilizar la ampliacion MEREQ001 que trae los componentes que realizan la funcionalidad de PBO y PAI para los controles agregados, estos son: EXIT_SAPLMEREQ_001 y EXIT_SAPLMEREQ_003 respectivamente.

viernes, 22 de agosto de 2008

Mis transacciones ABAP mas usadas

Transacciones ABAP

Hace tiempo escribí esta entrada y ahora mismo estamos en la nueva revolución tecnologica y me doy cuenta de que aun sigue siendo util esta informacion por lo que agregare unos temas de IDOCs y ordenare esto un poco

SE54 Sirve par amodificar vistas de actualizacion
SE71 Sirve para ver sapscript
SE73 Sirve para definir los atributos de codigos de barras o de fuentes
SE80 Sirve para ver paquetes
SE93 Visualización, modificación y creación de transacciones
SM12 sirve para desbloquear
SM30 Sirve para actualizar una vista
SM35 Sirve para hacer grabaciones de transaciones / Batch Input
SM37 Sirve para ve rlos jobs (procesos de fondo) q estan corriendo en el sistema / Resumen de
JOBS
SMOD Gestión de ampliaciones SAP (para user-exits)
SP01 Ordenes de impresión
SPAD Sirve para crear un formato de pagina
SPAD Sirve para deifnir formatos de pagina
SQ01 Sirve para ir revisando que se van haciendo las cargas
ST05 Sirve para medir el rendimiento de sentecias SQl de SAP
TSTCT Aqui viene la relacion user-exit porgrama
SCC1 Para apsar los cambios de un mandante a otro en un sapscript
SHDB Sirve para hacer bath input
Para cambiar el tiempo de ejecucion a nivel sistema. Es necesario entrar previamente a la transaccion RZ70
rdisp/max_wprun_time
Siempre semodifica en la instancia (en QAS) ya de ahi le das en nueva
El porgrama de visualizacion es RSPARAM
DWDM Vienen ejemplos de los objetos de SAP
NACE/NACU Sirve para definir clases de mensajes (Aplica para facturas, entregas, transportes)
CMOD Sirve para deshabilitar UE de un proyecto
SE78 Sirve para importar imágenes a SAP
OAOR Sirve para transprotar imágenes, hay que darle PICTURES / OT / id_imagen
SBDSV1 Asignación clases aplicación a clases documen
SE30 Sirve para analizar jobs
SCAT Sirve para hacer CAT
AL11 Sirve para ver los directorios en el servidor
SE24 Sirve para visualizar ojetos
SE18 Metodos
SE41 Sirve para crear status
ST22 Sirve para revisar dumps
Transacciones para trabajar con ampliaciones
CMOD Ampliaciones / Definir User-Exits

Transacciones para consultar el diccionario de datos


SE11 Diccionario ABAP
SE16 Visualizar tabla
SE16N Visualizar tabla
SM30 Vistas de actualización
BS22 Status de órdenes
SNRO Secuencias de numeros
TBTCO Listado de los Jobs el sistema
TBTCP Resumen de Jobs
V_T015Z Vista cuando hay problemas con la spell_amount
TNAPR Tratamiento de mensajes /Util para modifica rformularios
E070 Tabla de ordenes de transporte
E071 Tabla de ordenes de transporte

SmartForms
SE71 SapScript
NACE Gestion de mensajes
SE73 Gestion de fuentes
SE63 Traduccion de SmartForms
SE78 Cargar/Gestionar Imágenes
SO10 Textos estandares
SPAD Gestion de SPOOL(definiciones de impresoras, tamaños de papel...)

Funciones / BAPIS
CK_F_SHOW_CONTROL_MESSAGES_ALV Sirve para controlar los mensajes en un ALV
ISHMED_CALC_DATE_TIME_DIFF Calcula las horas entre dos fechas
CO_CMDT_POPUP_ONLINE_OR_BATCH Sirve para mandar un mensjae de decision en un
POP UP
FVEDIT_NOTES_EDIT Sirve para q salte un popo up como un bloq de notas
BDS_BUSINESSDOCUMENT_CREATEF Crea documentos de negocio
FI_DOCUMENT_READ Lee el documento financiero a partir de la factura de entrada
GUI_DELETE_FILE()
GUI_FILE_SAVE_DIALOG()
GUI_UPLOAD()
GUI_DOWNLOAD()
GUI_EXEC()
GUI_RUN()
GUI_CREATE_DIRECTORY()
GUI_REMOVE_DIRECTORY()
See Function-Group: SI72
TMP_GUI_BROWSE_FOR_FOLDER()
TMP_GUI_CREATE_DIRECTORY()
TMP_GUI_DELETE_FILE()
TMP_GUI_DEREGISTER_SERVER()
TMP_GUI_DIRECTORY_LIST_FILES()
TMP_GUI_FILE_OPEN_DIALOG()
TMP_GUI_GET_COMPUTERNAME()
TMP_GUI_GET_FILE_EXIST()
TMP_GUI_GET_SYSTEMDIR()
TMP_GUI_GET_TEMPPATH()
TMP_GUI_READ_DIRECTORY()
TMP_GUI_REGISTER_SERVER()
TMP_GUI_REMOVE_DIRECTORY()

Funciones mas utililes
spell_amount Es una estructura que convierte numero en texto, es posible que una cantida la
desgloce en decimales y dem,as cosas
SCP_REPLACE_STRANGE_CHARS Quita acentos de un texto
SO01

Sistema
SM04 Eliminar sesiones abiertas
SM12 Liberar bloqueos
SE01 Transporte
STMS Transporte
SPAD Impresoras
SP02 Spool de impresion
SM59 Cambiar de sistema (internamente)
SM36 Crear Jobs
SM62 Crear eventos
SM37 Borrar Jobs
ST05 Trazas
SU01 Configuracion de usuarios
AL11 Navegador sist. ficheros
SXDA Direct Input
SCC4 Abrir mandantes
SCC1 Cambiar mandate
SU01 Crear usuarios y define roles
PFCG Crear papeles, esto poder a una transaccion, en usuarios se asignan los provilegios
OAOR Bussiner Document Navigator
OAC0 Visual Content Repositories
OAC3 Enlace contente repositories
EBPP_RICONN Vincular ficheros archivados


Querys
SQ03 Define grupos de usuarios
SQ02 Define el infoset q es donde se manejan los campos de selección
SQ01 Editor Query

Tablas para Activos fijos
ANEA Partidas indiv.de activos fijos: Valores proporcionales
ANEK Cabecera de documento de contabilización AF
ANEP Partidas individuales de act.fijos
ANEV Compensación de anticipos de activo fijo
ANKB Clase de activos fijos: área valoración
ANLA Segm.reg.maestro inmov.
ANLB Parámetros de amortización
ANLBZW Valores de referencia específ.activos fijos
ANLC Campos de valor de activos fijos
ANLE Origen de AF según partida individual
ANLI Tabla de conexión medida de inversión -> AFeC
ANLK Origen de AF según clases de coste
ANLP Valores periódicos de activos fijos
ANLU Registro maestro de activos fijos: Campos de usuario
ANLV Datos de seguros
ANLW Valores de seguro (dependientes del año)
ANLZ Asignaciones de activos fijos con fecha valor
AUAA Documento de liquidación: Segmento de receptor

HR
PM01 Diálogos en la gestión de personal se pueden crear y tratar infotipos

PP
CO01 CO01 Crear orden de producción
CO02 CO02 Editar orden de producción
CO03 CO03 Visualizar orden de producción
CO11N CO11N Notificar orden de producción
KO88 KO88 Liquidar orden de producción
CO13 CO13 Anular notificación

SD
VA01 Crear pedido
VA02 Modificar pedido
VA03 Visualizar pedido
VL02N Modificar entrega
VL03N Visualizar entrega
VF01 Crear factura
VF02 Modificar factura
VF03 Consultar factura
VA22 Ofertas

MM
ME23N Consultar pedidos de compras
ME22N Modificar pedidos de compras
ME21N Crear pedidos de compras
MM02 Editar material
MB51 Buscar docs de material
MB03 Consultar doc de material
MB1C Movimientos de mercancia (poner stock...)
MMSC Dar de alta un material en un almacén
MB03
MIR3

FIFB01 Crear asiento contable / Crea facturas
FB02 Modificar asiento contable / Modifico facturas
FB03 Consultar asiento contable / Ver facturas
FB08 Anular asiento contable / Anulo facturas
FIBF Acceso a BTEs
FBZP Configura cheque
F-58 Imprimir cheque
XD03 Visualizo deudores
XK03 Visualizo acreedores
SKA1 Cuentas de mayor sociedad
SKB1 Cuentas de mayor control
SKAT Cuentas de mayor denominaciones
FB41 Contabilizaciones sobre cuentas de IVA sin introducir indicador
F-02 Contabilizaciones sobre cuentas de IVA
S_ALR_87012287 Registro diario mercantil
MIRO Recibe facturas

miércoles, 13 de agosto de 2008

ALV

¿Qué es un ALV?
Nota: Los ejemplos aqui mostrados fueron tomados de http://www.mundosap.com/ Para poder ejemplificar el contenido.

•Es una herramienta flexible para el despliegue de listas de datos
•Provee de una lista de funciones genericas por default como sumar, ordenar, etcetera.
•Presenta numerosas interfaces con Excel o Crystal Reports.

Elementos principales
•Lista de datos
•Field catalog
•Estructura de salida
•Manejador de eventos
•Datos adicionales

Lista de datos
•Es la lista de datos que va a ser mostrada en el ALV
•Es una tabla interna que puede ser manipulada con cualquier tipo de sentencia antes de entrar a la funcion del ALV.


Field Catalog
•Define las características de despliegue de la lista de datos
•Permite la definir las caracteristicas de despliegue de cada columna.
•El tipo de dato de referencia es: LVC_T_FCAT


Estructura de salida (layout structure)
•Especifica las características generales de la “grid” de salida
•Permite cargar las opciones de visualización, personalizar la grid, ajustar colores, etcétera
•Permite indicar las columnas del reporte que deseamos que queden “ocultas” o “visibles”
•El dato de referencia es: LVC_S_LAYO


Control de eventos(Event handler)

•Permite definir e implementar los eventos disparados en un ALV
–Click
–Top of page
–End of page


Datos adicionales
•Define características adicionales del ALV como puede ser:
–Criterios iniciales de ordenamiento
–Botones a desactivar, etcétera

Tipos de ALV
• REUSE_ALV_GRID_DISPLAY
• REUSE_ALV_HIERSEQ_LIST_DISPLAY
• REUSE_ALV_LIST_DISPLAY

Parámetros principales para usar las funciones del ALV
•- I_CALLBACK_PROGRAM :
Se informa a la función con el nombre del programa que está llamando a dicha función.
•- IT_FIELDCAT:
Este parámetro se informará con una tabla interna que contiene la definición de los campos que aparecerán en el listado.
•- T_OUTTAB:
Nombre de la tabla interna que contiene toda la información recogida por el programa y la cual debe ser impresa en el report.


Ejemplo

DATA: L_REPID TYPE SY-REPID.
L_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = L_REPID
I_CALLBACK_PF_STATUS_SET = 'STATUS_SET'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = D_FIELDCAT
IT_SORT = D_SORTCAT
I_SAVE = 'A'
IS_VARIANT = I_VARIAN
IT_EVENTS = D_EVENTCAT
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = I_BSEG
EXCEPTIONS


PROGRAM_ERROR = 1
OTHERS = 2.




IT_FIELDCAT

•Tipo de tabla interna LIS_FIELDCAT_ALV
•Campos obligatorios:
–FIELDNAME: Nombre del campo en la tabla interna que contendrá los datos a mostrar.
–REF_TABNAME: Nombre de una tabla o estructura del diccionario de datos a la cual el campo a mostrar está referenciado.



Manejo de eventos

•Tipo de dato: SLIS_ALV_EVENT
•Invocar la funcion REUSE_ALV_EVENTS_GET
•Eventos:
–Top-of-page. Cabecera del ALV
–At user command



Top-of-page

*& Form F_FILL_I_TITLE
*&---------------------------------------------------------------------
* Build I_TITLE for header
*----------------------------------------------------------------------
FORM F_FILL_I_TITLE.
* Local variables and constants
DATA: L_DATUM(10),
L_TIME(8).
CONSTANTS: C_ACTION LIKE WA_TITLE-TYP VALUE 'A',
C_TITLE LIKE WA_TITLE-TYP VALUE 'H',
C_HEADER LIKE WA_TITLE-TYP VALUE 'S'.
CLEAR WA_TITLE.
* Title of report
WA_TITLE-TYP = C_HEADER.
WA_TITLE-KEY = TEXT-003.
WA_TITLE-INFO = L_TIME.
APPEND WA_TITLE TO I_TITLE.
CLEAR WA_TITLE.
ENDFORM. " F_FILL_I_TITLE


I_SAVE

•REUSE_ALV_VARIANT_EXISTENCE. Permite identificar algún layout ya existente
•REUSE_ALV_VARIANT_F4 . Hara las funciones de matchcode para ese parametro.
–IS_VARIANT. Contendrá en nombre de la funcion, tipo de dato DISVARIANT.
–I_SAVE. Indica la manera en que se guardara el layout.


REUSE_ALV_VARIANT_EXISTENCE

CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'EXPORTING
i_save = gf_save
CHANGING
cs_variant = gwa_variant1.
gwa_variant = gwa_variant1.



REUSE_ALV_VARIANT_F4

call function 'REUSE_ALV_VARIANT_F4'
exporting
is_variant = g_variant
i_save = g_save
importing
e_exit = g_exit
es_variant = gx_variant
exceptions not_found = 2.



REUSE_ALV_GRID_DISPLAY

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY '
EXPORTING
I_CALLBACK_PROGRAM = report_id
IT_FIELDCAT = FCAT
IT_EVENTS = i_events
TABLES
t_outtab = DISPLAY


I_CALLBACK_USER_COMMAND

•En esta función se implementan las interacción con el usuario o en otras palabras se programan los botones.
Parametros:
- L_UCOMM like SY-UCOMM. En este parámetro vendrá informado el código de función ejecutado por el usuario.
- L_SELFIELD type SLIS_SELFIELD.En este parámetro vendrá informado el registro actual del listado seleccionado por el usuario para interactuar sobre él.


USER_COMMAND

FORM USER_COMMAND USING L_UCOMM LIKE SY-UCOMM
L_SELFIELD TYPE SLIS_SELFIELD.
READ TABLE I_BSEG INDEX L_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
CASE L_UCOMM.
WHEN '&IC1'. " Doble click
SET PARAMETER ID 'BLN' FIELD I_BSEG-BELNR.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDIF.
ENDFORM.


IS_LAYOUT.

•Define la apariencia del report.
•El tipo de dato de la estructura debera de ser: SLIS_LAYOUT_ALV.
•Se pueden definir los colores de los campos.
•Permite suprimir los campos repetidos.


IT_SORT

•Define los criterios de ordenación que se mostraran en el listado.
•Define los campos en los cuales deberán de mostrarse totales o subtotales.
•Permite definir la posición de una columna en particular.
•Permite indicar si los subtotales deberán de aparecer extendidos o comprimidos.


Ordena y obtiene el subtotal del numero de documento (BELNR)
IT_SORT-FIELDNAME = 'BELNR'.
IT_SORT-SPOS = 2.
IT_SORT-UP = 'X'.
IT_SORT-SUBTOT = ‘X’.
IT_SORT-EXPA = 'X'.


FORM f_field_kat.
* Paso 1 - Se definen los campos clave ( key = 'X' )
* Sociedad
d_colpos = d_colpos + 1.
d_fieldcat_ln-ref_tabname = 'BSEG'. " Tabla Interna
d_fieldcat_ln-fieldname = 'BUKRS'. " Campo de la Tabla Interna
d_fieldcat_ln-key = space. " Clave = 'X' / No clave = space
d_fieldcat_ln-do_sum = space. " Acepta Sumatorio = 'X' /
" No acepta sumatorio = space
d_fieldcat_ln-col_pos = d_colpos. " Posición de la columna
d_fieldcat_ln-no_out = space. " Columna invisible = 'X' /
" Columna visible = space
d_fieldcat_ln-qfieldname = SPACE.
d_fieldcat_ln-hotspot = space. " Hotspot on = 'X' /
" Hotspot off = space
APPEND d_fieldcat_ln TO d_fieldcat. " Traspasamos los datos
ENDFORM. " f_field_kat



ALV Básico

Elemento mínimos para crear un ALV
************************************************************************
* DATOS DE CREACION : *

* Nombre del programa : *
* Modulo SAP : *
* Creado por : *
* No. del Requerimiento : *
* Fecha Documento : *
* Descripción Breve : *
* *
* *
************************************************************************


Estructura reporte

•REPORT
•************************************************************************
•* INCLUDES
•************************************************************************
•************************************************************************
•* TABLAS
•************************************************************************
•************************************************************************
•* TABLAS INTERNAS
•************************************************************************
•************************************************************************
•* VARIABLES
•************************************************************************
•************************************************************************
•* PARAMETERS
•************************************************************************
•************************************************************************
•* START-OF-SELECTION
•************************************************************************
•************************************************************************
•* END-OF-SELECTION
•************************************************************************
•************************************************************************
•* FORMS
•************************************************************************

Implementacion

•**************** BLOQUE DE DOCUMENTACION PRINCIPAL *********************
•* Nombre del Programa : Z_EDESARROLLO
•* Descripcion : Reporte estadistico de desarrollo
•* Autor del Programa : Victor Daniel Lopez Lorenzo
•* Fecha : 12.04.2007
•* Numero de version : 1.0v
•************************************************************************
•REPORT z_edesarrollo.
•************************************************************************
•* TYPE POOLS
•************************************************************************
•TYPE-POOLS: slis.
•************************************************************************
•* PROGRAMAS INCLUIDOS
•************************************************************************
•INCLUDE z_iedesarrollo.
•************************************************************************
•* PARAMETERS
•************************************************************************

************************************************************************
* INICIALIZATION
************************************************************************
************************************************************************
* ALV
************************************************************************
g_repid = sy-repid.
PERFORM layout_init USING gs_layout.
PERFORM eventtab_build USING gt_events[].
gs_variant-report = g_repid.
g_save = 'A'.


************************************************************************
* START-OF-SELECTION
************************************************************************
START-OF-SELECTION.
************************************************************************
* END-OF-SELECTION
************************************************************************
END-OF-SELECTION.
PERFORM fill_catalog.
* PERFORM comment_build USING gt_list_top_of_page[].
* PERFORM modif_catalog.
* PERFORM llena_subtotales.
PERFORM call_function.

FORM fill_catalog.
DATA: temp_fieldc TYPE slis_fieldcat_alv.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = 'Z_EDESARROLLO'
i_internal_tabname = 'IT_REPORT'
i_inclname = 'Z_IEDESARROLLO'
CHANGING
ct_fieldcat = ct_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " FILL_CATALOG


Call_function

FORM call_function.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = ct_fieldcat
i_callback_user_command = 'USER_COMMAND'
i_background_id = 'ALV_BACKGROUND'
i_buffer_active = 'X'
i_callback_program = 'Z_EDESARROLLO'
is_layout = gs_layout
it_sort = gt_sort[]
i_save = g_save
is_variant = gs_variant
it_events = gt_events[]
IMPORTING
e_exit_caused_by_caller = g_exit_caused_by_caller
es_exit_caused_by_user = gs_exit_caused_by_user
TABLES
t_outtab = it_report
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc = 0.
IF g_exit_caused_by_caller = 'X'.
ELSE.
IF gs_exit_caused_by_user-back = 'X'. "F3
ELSE.
IF gs_exit_caused_by_user-exit = 'X'. "F15
ELSE.
IF gs_exit_caused_by_user-cancel = 'X'. "F12
ELSE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
ENDIF.
ENDFORM. " CALL_FUNCTION



EVENTS_INIT

*---------------------------------------------------------------------*
* FORM EVENTS_INIT *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_EVENTS *
*---------------------------------------------------------------------*
FORM events_init USING p_events TYPE slis_t_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'.
ENDFORM. "events_init



FILL_LAYOUT


*&-------------------------------------------------------------------*
*& Form FILL_LAYOUT
*&-------------------------------------------------------------------*
* text
*--------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*--------------------------------------------------------------------*
FORM fill_layout.
gs_layout-zebra = 'X'.
gs_layout-coltab_fieldname = 'WERKS'.
* is_layout-expand_fieldname = 'EXPAND'.
ENDFORM. " FILL_LAYOUT


SET_PF_STATUS
*---------------------------------------------------------------------*
* FORM SET_PF_STATUS *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> RT_EXTAB *
*---------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
* SET PF-STATUS 'ST_100'.
ENDFORM. "set_pf_status



FORM modif_catalog.
DATA: temp_fieldcat TYPE slis_fieldcat_alv OCCURS 0 WITH HEADER LINE.
* Aqui es donde se formatea la salida del ALV
LOOP AT ct_fieldcat INTO temp_fieldcat.
CASE temp_fieldcat-fieldname.
WHEN 'CENTRO_W'.
temp_fieldcat-seltext_l = text-010.
temp_fieldcat-seltext_m = text-010.
temp_fieldcat-seltext_s = text-010.
temp_fieldcat-reptext_ddic = space.
temp_fieldcat-ref_fieldname = space.
temp_fieldcat-ref_tabname = space.
temp_fieldcat-fix_column = ''.
ENDCASE.
MODIFY ct_fieldcat FROM temp_fieldcat.
ENDLOOP.
ENDFORM. " MODIF_CATALOG



*---------------------------------------------------------------------*
* FORM USER_COMMAND *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> R_UCOMM *
* --> RS_SELFIELD *
*---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
IF rs_selfield-sel_tab_field = 'TBKPF-BELNR'.
BREAK-POINT.
ENDIF.
ENDFORM. "user_command



TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
* i_logo = 'ENJOYSAP_LOGO'
it_list_commentary = gt_list_top_of_page.
ENDFORM. "TOP_OF_PAGE


Comment_build

FORM comment_build USING lt_top_of_page TYPE
slis_t_listheader.
DATA: ls_line TYPE slis_listheader.
DATA: aux_low(30) TYPE c,
aux_high(30) TYPE c,
final(60) TYPE c.
DATA: it_month_name TYPE TABLE OF t247 WITH HEADER LINE,
wa_month_name LIKE it_month_name.
* CLEAR ls_line.
* ls_line-typ = 'A'.
* ls_line-info = final.
* APPEND ls_line TO lt_top_of_page.
*
ENDFORM. "COMMENT_BUILD



Layout_init

FORM layout_init USING rs_layout TYPE slis_layout_alv.
rs_layout-detail_popup = 'X'.
ENDFORM. "LAYOUT_INIT


eventtab_build

FORM eventtab_build USING rt_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
*
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = rt_events.
READ TABLE rt_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
MOVE g_top_of_page TO ls_event-form.
APPEND ls_event TO rt_events.
ENDIF.
ENDFORM. "EVENTTAB_BUILD

martes, 12 de agosto de 2008

Que es el ABAP?

Que es el abap ...
ABAP es un lenguje de programacion tanto precedural como orientado a objetos. Se usa basicamente para hacer ciertas tareas en los sistemas SAP. En este blog intentare iniciar una serie de documentos para que puedas empezar a instruirte en ABAP.

¿Como empiezo a programar en ABAP?
Es la pregunta clasica sin lugar a dudas. Yo creo que lo ideal es empezar con los siguientes puntos:
Diccionario de datos (Creación de tabla z, dominios, elementos de datos, etcetera).
Listado convencional, ALV list y ALV grid.
Programación de BAtch-Input.
Formularios tipo Sapscript y SmartForms.
Funciones estándar ( con patrón)

Para que una vez dominados estos items puedas proceguir con lo siguiente:
Diccionario de datos (Creación de tabla z, dominios, elementos de datos, etcétera).
Funciones / Grupo de funciones
Desarrollo de funciones
Programación en Module Pool
Conocimientos básicos de User-Exits.
Generalidad y posibilidad de carga ( Manejo de Cats, DI, LMSW ).
Y dejar como temas avanzados:
Conocimientos básicos de Idocs, ALE, EDI y CATTS.
Conocimientos funcionales en módulos específicos.

La experiencia sobre los modulos funcionales se va tomando conforme se avance en el sistema y conforme vaya participando en los proyectos sin embargo ir conociendo las transacciones basicas ayuda.