viernes, 29 de agosto de 2014

Visión General de Work in Process


Trabajo en proceso (Work in Process) es un sistema completo de gestión de la producción. Work in Process es un modulo  que apoya los diferentes tipos de trabajo de Manufactura como: 

Discontinuo - Este es una orden de  producción para hacer una (discreta) cantidad específica de un conjunto usando una ruta fija y operaciones. 

Proyecto - Estos son los trabajos con referencias a proyectos y tareas. Se utilizan en un entorno de Proyectos de Fabricación. 

Repetitivo- Los cronogramas repetitivos son la contraparte para los trabajos discontinuos en un entorno de Manufactura Repetitiva, donde  los ensamblados o productos finales se construyen sobre una base continua. 

Flujos - Los cronogramas de Flujo se utilizan para realizar productos en un entorno de Manufactura que está influido por un Just-in-Time (JIT) o un sistema de tracción de Pull por los pedidos del cliente. Estos se ejecutan  Flow Manufacturing. 

Basado en Lotes - Se puede utilizar trabajos basado en Lotes sólo si se implementa el módulo de Oracle Shop Floor Management. A diferencia de un trabajo discotinuo, Los basados en lote sigue una ruta de red. En un ruteo , el usuario puede elegir las siguiente operaciones de un conjunto y  a su vez determinará la serie de operaciones de trabajo a seguir.

Ensamblar por orden - Este es un trabajo utilizado para ensamblar articulos para un producto final en base a un pedido de un cliente. 

Configurar por orden - En este entorno, las opciones y los artículos incluidos en un modelo aparecen en un Recoge Pedidos. Los Recoge Pedidos reúnen estas opciones antes de enviar el pedido al cliente.




Este modulo a su vez genera Consultas y reportes que dan una imagen completa de las transacciones, los materiales, los recursos, los costos  y el progreso programado de trabajos.

jueves, 28 de agosto de 2014

Desplegar ceros a la izquierda en reportes XML

Cuando uno trabaja haciendo reportes en XML debe tener en cuenta que al generar un reporte en formato de  Microsoft Excel ,no mostrara correctamente un formato de numero con prefijo de ceros. Por ejemplo, si hay un valor "007" el reporte le muestra como "7", excel pantalla como "007" sólo si la columna se establece en formato de texto. Usted puede ver la diferencia en la siguiente captura de pantalla:



En esos caso la solución es abrir  la plantilla RTF en Microsoft  Word. Ir   a Complementos >> Data >> Load XML DataUna vez que los datos se cargan correctamente, haga doble clic en el campo. En Propiedades , establecer el tipo de formato como Texto Regular  y marcar la opción  Force LTR.


Después de seguir los pasos anteriores, guardar la plantilla y ejecutar el reporte donde se mostrara la información correcta.


Query para obtener Usuarios y Responsabilidades

Este query nos devolverá la información de los usuarios y responsabilidades asignadas mutuamente el EBS. Puede consultar ya sea por Usuario o por la Responsabilidad.

SELECT fuser.USER_NAME         USUARIO,
       per.FULL_NAME           EMPLEADO,
       per.EMPLOYEE_NUMBER     NUM_EMPLEADO,
       frt.RESPONSIBILITY_NAME RESPONSABILIDAD
      
  FROM apps.FND_USER              fuser,
       apps.PER_PEOPLE_F          per,
       apps.FND_USER_RESP_GROUPS  furg,
       apps.FND_RESPONSIBILITY_TL frt
 WHERE fuser.EMPLOYEE_ID = per.PERSON_ID
   AND fuser.USER_ID = furg.USER_ID
   AND (to_char(fuser.END_DATE) is null OR fuser.END_DATE > sysdate)
   AND frt.RESPONSIBILITY_ID = furg.RESPONSIBILITY_ID
   AND (to_char(furg.END_DATE) is null OR furg.END_DATE > sysdate)
   AND EFFECTIVE_END_DATE > sysdate
   AND frt.LANGUAGE = 'US'
   and (FRt.responsibIlity_name =&RESP_NAME or &RESP_NAME  IS NULL)
  and (fuser.USER_NAME  =&USER_NAME  or &USER_NAME  IS NULL)

 ORDER BY fuser.USER_NAME;

miércoles, 27 de agosto de 2014

Reglas de Seguridad


Las Reglas de Seguridad(Security Rule) le dan la capacidad para restringir un conjunto de valores para un usuario durante el ingreso de datos. Es fácil definir las reglas de seguridad y controlar a  nivel de responsabilidad. Le permite determinar quién puede usar los valores de segmento de FlexField le da un mayor control sobre quién puede utilizar los datos con restricciones en su aplicación.

Las Reglas de seguridad  controlan el acceso del usuario a los valores de Flexfields Claves tal es el caso para el Plan de Cuentas. El FlexField contable debe ser estructurado de manera que las normas de seguridad se puedan definir de manera sencilla. Estas reglas se asignan a las responsabilidades, que luego son asignados a individuos.

Definir Reglas de Seguridad
Para definir Reglas de Seguridad ir a una  Responsabilidad de General Ledger >> Configuración >> Financiera >> Flexfields >>Clave >>Seguridad >>Definir. En el Bloque de valores de segmentos, identificar el Flexfield a Definir Reglas. Puede identificar el valor establecido o por el segmento Flexfield.  En la región de regla de seguridad, escriba un nombre y una descripción para su regla de seguridad. Ingresar un mensaje para esta regla de seguridad. Este mensaje aparece automáticamente cada vez que un usuario entra en un segmento de valor que infringe la regla de seguridad. Finalmente definir los elementos de regla de seguridad que componen su regla. 



Elementos de Reglas de Seguridad
Se define un Elemento de Regla de Seguridad especificando un rango de valores que incluye tanto un valor Desde y Hasta para su segmento. Un elemento de regla de seguridad se aplica a todos los valores de segmentos incluidos en el rango de valores que se especifique. 

Se pueden usar los tipos Incluir o Excluir, donde Incluir incluye todos los valores y excluir excluye todos los valores en el rango especificado. Cada regla debe tener por lo menos un elemento Incluir , ya que una regla excluye automáticamente a todos los valores salvo que los incluya específicamente. 

Asignar  Reglas de Seguridad
Para asignar las Reglas de Seguridad a una Responsabilidad dar al botón Asignar en la misma ventana de  Reglas de Seguridad.  En la región de reglas de seguridad, ingresar la aplicación y la responsabilidad a la que desea asignar las  reglas de seguridad. Luego en el campo nombre ingresar el l nombre de la regla de seguridad que desea asignar a esta responsabilidad y grabar los cambios.



API para Ejecutar concurrentes por SQL

FND_REQUEST es un API que permite enviar un programa concurrente en las aplicaciones de Oracle. Usando la función FND_REQUEST.SUBMIT_REQUEST y pasando los parámetros necesarios a ella podemos ejecutar un programa concurrente. Pero antes de hacerlo, tenemos que inicializar los siguientes parámetros podemos utilizar:


fnd_global.apps_initialize(user_id, resp_id, resp_appl_id);



User_id: ID del usuario de Oracle aplicaciones
Resp_id: ID de la Responsabilidad donde se ejecutara el reporte
Resp_appl_id: ID de la aplicación donde se ubica la responsabilidad



Luego podemos usar el API de la siguiente manera:


  vn_request_id := fnd_request.submit_request(Aplication,
                                              Program ,
                                              Description ,
                                              Start_time,
                                              Sub_request,
                                              argument1,
                                              argument2,
                                              .
                                              .
                                              .
                                              argument100);

Parámetros
Aplication: Nombre corto de la aplicación asociada al concurrente a ejecutar. 
Program: Nombre corto del programa concurrente
Description: Descripción de la solicitud (Opcional). 
Start_time: Hora que debe empezar, con el formato HH24:MI or HH24:MI:SS (Opcional). 
Sub_request: Establecer a TRUE si la solicitud  viene de otra solicitud sino FALSE 
Argument1 ... 100: Los parámetros para la solicitud del concurrente; Se permite un máximo de 100 argumentos. 

Normalmente para verificar y hacer unseguimiento de la solicitud ejecutada se crea una variable que lo reciba en este caso vn_request_id  es el ID  de la solicitud del concurrente al completar con éxito. si hubiera algún problema devuelve 0.

Podemos crear el siguiente código para demostrar y realizar pruebas de la ejecución de un concurrente por SQL: 

DECLARE
VN_REQUEST_ID   NUMBER;
USER_ID NUMBER :=10039;
RESP_ID NUMBER :=293;
RESP_APPL_ID NUMBER := 220;

BEGIN

  FND_GLOBAL.APPS_INITIALIZE(user_id, resp_id, resp_appl_id);

  VN_REQUEST_ID := FND_REQUEST.SUBMIT_REQUEST('SQLAP',---APPLICATION
                                              'APXSUIMP',---PROGRAM
                                              '',---DESCRIPTION
                                              '',---START_TIME
                                              FALSE,---SUB_REQUEST
                                              'ALL',---ARGUMENT1
                                              1000,---ARGUMENT2
                                              'N',---ARGUMENT3
                                              'N',---ARGUMENT4
                                              'N');---ARGUMENT5

  COMMIT;
  IF VN_REQUEST_ID > 0 THEN
    DBMS_OUTPUT.PUT_LINE('Se ejecutó la solicitud de concurrente : ' ||
                         VN_REQUEST_ID);
    ELSE
      DBMS_OUTPUT.PUT_LINE('Error al ejecutar : ' || VN_REQUEST_ID);
                        
  END IF;

END;

martes, 26 de agosto de 2014

Concepto de Plantilla de Datos


La Plantilla de Datos(Data Template) es el método por el cual se comunica la solicitud de datos al motor de datos. Se trata de un documento XML cuyos elementos colectivamente definen cómo el motor de datos que procesa la plantilla para generar el XML. A diferencia de otros métodos la Plantilla de Datos no necesita un programa ejecutable como un .RDF ni generar código para la salida del XML.  

Esto se debe a que el archivo solo contendrá la consulta de datos y la agrupación para la etiquetas del XML. El proceso de generación de XML,  sera encargado por el ejecutable XDODTEXE el cual es un  programa concurrente java  utilizado como plantilla de  BI Publisher. El propósito principal de este ejecutable es identificar el archivo de Plantilla de Datos (.xml) y ejecutar la plantilla de datos para generar los datos de salida XML  sin formato, que luego puede usarse como motor de BI Publisher  de formato a formato como en el modelo (RTF, PDF, etc) .

La plantilla de datos es un documento XML se compone de cuatro secciones básicas: 
  • Definir parámetros
  • Definir la consulta de datos
  • Definir Triggers 
  • Definir la estructura de datos
Esta estructura se muestra en el siguiente gráfico


Estructura de la Plantilla de Datos
El elemento <dataTemplate> es el elemento raíz. Cuenta con un conjunto de atributos relacionados expresadas dentro de la etiqueta <dataTemplate>. Dentro de sus carateristicas encontramos las siguientes:



El elemento <parameter> se coloca entre las etiquetas <parameter> de apertura y cierre. El elemento <parameter> tiene un conjunto de atributos relacionados. Estos se expresan dentro de la etiqueta <parameter>. Por ejemplo, el nombre, dataType, y atributos defaultValue se expresan como sigue:




El elemento  <sqlStatement> se coloca entre las etiquetas <DataQuery> de apertura y cierre. El elemento <sqlStatement> tiene un atributo relacionado, name. Se expresa en la etiqueta <sqlStatment>. La consulta se introduce en la sección CDATA:


Los nombres de columnas no son únicos, debe utilizar los alias en sus sentencias SELECT para garantizar la singularidad de sus nombres de columna. Si usted no utiliza un alias, se utiliza el nombre de la columna por defecto. Esto es importante cuando se especifica la salida de XML en la sección de estructura de datos. Para especificar un elemento XML de salida de su consulta se declara un atributo de valor para la etiqueta de elemento que corresponde a la columna de origen.


Puede utilizar referencias léxicas para reemplazar las cláusulas que aparecen después de SELECT, FROM, WHERE, GROUP BY, ORDER BY, o HAVING. Utilice una referencia léxica cuando desea que el parámetro para reemplazar múltiples valores en tiempo de ejecución.
Crear una referencia léxica con la siguiente sintaxis:  &parametername


Definir los parámetros léxicas de la siguiente manera:
• Antes de crear la consulta, definir un parámetro en el paquete por defecto PL / SQL para cada referencia léxica en la consulta. El motor de datos utiliza estos valores para reemplazar los parámetros léxicos.

• Crear la consulta contiene referencias léxicas.

Si dispone de varias consultas, debe vincular a crear la salida de datos correspondiente. En la plantilla de datos, existen dos métodos para vincular las consultas: el uso de variables de enlace o mediante el elemento <link> para definir el vínculo entre las consultas.
Consejo: Para maximizar el rendimiento al generar consultas de datos en el modelo de datos:
Pruebas de BI Publisher han demostrado que el uso de variables de enlace es más eficiente que el uso de la etiqueta de enlace.

El siguiente ejemplo muestra un vínculo de consulta utilizando una variable de vinculación:


El elemento <link> tiene un conjunto de atributos. Utilice estos atributos para especificar la información de los vínculos necesarios. Se puede especificar cualquier número de enlaces. Por ejemplo:




<DataTriggers> ejecutan funciones PL/SQL en momentos específicos durante la ejecución y generación de salida XML. El uso de las capacidades de procesamiento condicional de PL/SQL para estos triggers, puede hacer cosas como realizar tareas de inicialización y acceder a la base de datos.

DataTriggers son opcionales, y usted puede tener tantos elementos <dataTrigger> según sea necesario. El elemento <dataTrigger> tiene un conjunto de atributos relacionados. Estos se expresan dentro de la etiqueta <DataTrigger>. Por ejemplo, los atributos de nombre y origen se expresan como sigue:



En la sección de estructura de datos  <DataStructure> se define cuál será la salida XML y cómo se estructurará. La jerarquía del grupo completa está disponible para la salida. Puede especificar todas las columnas dentro de cada grupo y romper el orden de las columnas, se puede utilizar resúmenes y marcadores para personalizar aún más dentro de los grupos. Se requiere que la sección de estructura de datos para múltiples consultas y opcional para las consultas individuales. Si se omite para una única consulta, el motor de datos generará salida XML.

En la plantilla de datos, el elemento <Group> se coloca entre las etiquetas de apertura y cierre <DataStructure>. Cada <grupo> tiene un conjunto de elementos relacionados. Se puede definir una jerarquía del grupo y el nombre de las etiquetas del elemento de la salida XML.

La siguiente tabla se muestran los atributos de la etiqueta elemento <Group>:


En la siguiente tabla se muestran los atributos de la etiqueta elemento <Element>:


Pasos  para cargar  la Plantilla de Datos
Debe realizar lo siguiente:
a)Crear Programa concurrente bajo el ejecutable XDODTEXE
b)Crear la definición de datos
c)Cargar la Plantilla de Datos 
d)Crear la plantilla RTF
e)Generación de Output  

Para ver mayor detalle se recomienda leer  : Informe XML Publisher con plantilla de datos

Grupo de Pago

Cuando se crea un lote de pagos, se puede elegir un Grupo de Pago(Pay Group) para pagar una categoría de proveedores o facturas al mismo tiempo. Esta opción se da ya que al crear un lote de pagos se utiliza para crear un conjunto de pagos que se pagará una sola vez. 

Al realizar esta opción podemos pagar todas las factura a menos claro esta que filtremos por proveedor.La lógica del Grupo de Pagos es seleccionar automáticamente facturas en base a una categoría que se define como un Grupo el cual puede definir un Grupo de pago a Trabajadores, Proveedores extranjeros, Sucursales Especiales ,pago a áreas especificas entre otros.

Para definir los grupos de pagos a trabajar en Cuentas por Pagar ir a una  Responsabilidad de Payables >> Configuración >> Consultas >> Compra. Saldrá la ventana de Consultas Purchasing y buscar el Tipo PAY GROUP. Ingresar el código ,significado y descripción del Grupo de Pagos, por ejemplo Administración y guardar. Si en el caso ya no requiera usar un Grupo de Pagos solo basta con desactivar la casilla de Activado. También puede otorgar un rango de fechas por si estará pagando un Grupo durante un intervalo de tiempo.



Agregando Grupo de Pagos a nivel de Sucursal de Proveedor
Al usar la opción de Grupo de Pagos se recomienda agregar el Grupo de Pagos en la Sucursal de cada Proveedor. Así al crear facturas de un proveedor de diferentes sucursales podamos definir diferentes Grupos Pago y sea mas dinámica al momento de generar nuestro filtro durante la creación de Lotes de Pagos. Configurarlo en una  Responsabilidad de Payables >> Proveedores>> Asiento. 



Creando Facturas con Grupo de Pagos
Al crear facturas  por el mismo proveedor al cual se le asignado un Grupo de Pagos. El campo Grupo de pago se completara automáticamente. Si no se llega  ver el campo Grupo de pago, es  necesario hacer clic en Carpeta >> Mostrar Campo y seleccione  el campo "Grupo de pago"  para agregarlo en el formulario. Incluso puede cambiar por otro Grupo de Pagos si fuera necesario. Para ello ir a  una  Responsabilidad de Payables >> Facturas >> Asiento >> Facturas. 


Creando Lote de Pagos
Para Crear un Lote pagos ir a Responsabilidad de Payables >> Pagos >> Asiento >> Lotes de Pagos.  Crear el lote de pagos y ingresar el Grupo Pago al cual desea crear Lotes de Pagos.


Luego de completar la información hacer clic en Procesos y ejecutar Seleccionar Facturas y Crear Pagos. Después de que los pagos se han incorporado se activa el botón de Pagos en la  ventana. Hacer clic al botón para ver las facturas seleccionadas.


La factura que habíamos creado ha sido seleccionado en el Lote de Pagos con el filtro del Grupo Pago. Así, mediante el uso de Grupo de Pagos podemos filtrar durante el proceso de selección de facturas. Así podemos  enviar un lote de pagos para un grupo seleccionado..