Impresión
La impresión de etiquetas y documentos (ej. albaranes) es una de las solicitudes más habituales por parte de los clientes que instalan iDynamics Warehouse. Para compaginar esta necesidad con el hecho de que la mayoría de clientes tienen necesidades distintas, no sólo respecto a lo que desean imprimir si no sobre todo a los formatos, iDynamics Warehouse incluye eventos que permiten enlazar de manera sencilla las distintas pantallas de la aplicación móvil con los informes particulares que el cliente desee imprimir.
Opciones en la aplicación móvil
Cuando se activa la opción de imprimir a nivel de la cabecera o líneas de un documento (o ambos), la aplicación muestra la opción de imprimir en el menú contextual del documento. Una vez se pulse dicha opción, según lo indicado en Business Central, la aplicación podrá solicitar el número de copias y/o una opción entre un desplegable (ej. el tipo de documento,...), o lanzar directamente la impresión.
Cómo activar las opciones de impresión
Cada vez que un usuario de la aplicación móvil se valida en el servidor, la codeunit "IDPWHS Printing Management" lanza los eventos CheckPrintDocumentHeaderEnabled y CheckPrintDocumentLineEnabled, una vez por cada tipo de documento que el usuario puede gestionar desde la aplicación móvil.
CheckPrintDocumentHeaderEnabled
local procedure OnCheckPrintDocumentHeaderEnabled(DocumentType: Enum "IDPWHS Source Document Type"; DocumentSubtype: Enum "IDPWHS Source Document Subtype"; ActivityType: Enum "IDPWHS Activity Type"; var Options: Text; var AskForQuantity: Boolean; var Enabled: Boolean)
Este evento recibe los siguientes parámetros:
- DocumentType. El tipo de documento del que queremos consultar si estará habilitada la impresión (recepción, envío, picking, venta...)
- DocumentSubtype. En el caso de ventas o compras, el tipo del documento "Sales Order" o "Purchase Order". El índice corresponde con el del campo "Document Type" de dichos documentos.
- ActivityType. En el caso de cabecera de actividad de almacén, el tipo de actividad en concreto.
- Options. Una lista de opciones separada por comas. Si se captura por un suscriptor y se asigna valor, será la lista que se mostrará al usuario en la aplicación móvil.
- AskForQuantity. Si se captura por un suscriptor y se asigna a verdadero, al usuario se le solicitará el número de copias.
- Enabled. Por omisión falso. Si se captura por un suscriptor y se asigna a verdadero, se mostrará la opción de imprimir para este tipo de documentos en la aplicación móvil.
Ejemplo
[EventSubscriber(ObjectType::Codeunit, Codeunit::"IDPWHS Printing Management", 'OnCheckPrintDocumentHeaderEnabled', '', true, true)]
local procedure OnCheckPrintDocumentHeaderEnabled(DocumentType: Enum "IDPWHS Source Document Type"; var Options: Text; var AskForQuantity: Boolean; var Enabled: Boolean)
begin
if DocumentType = DocumentType::Shipment then begin
Options := 'Etiquetas,Albarán';
AskForQuantity := true;
Enabled := true;
end;
end;
El ejemplo anterior activa la opción de imprimir para documentos de envío de almacén. Cuando el usuario pulse en la acción desde la aplicación móvil se le solicitará la cantidad a imprimir y que seleccione entre "Etiquetas" y "Albarán" (la primera opción estará seleccionada por omisión).
OnCheckPrintDocumentLineEnabled
local procedure OnCheckPrintDocumentLineEnabled(DocumentType: Enum "IDPWHS Source Document Type"; DocumentSubtype: Enum "IDPWHS Source Document Subtype"; ActivityType: Enum "IDPWHS Activity Type"; var Options: Text; var AskForQuantity: Boolean; var Enabled: Boolean)
Este evento es idéntico en cuanto a parámetros y funcionalidad al CheckPrintDocumentHeaderEnabled, con la diferencia de que permite la opción de imprimir una línea en particular, en lugar de todo el documento.
Definir qué se imprime
Una vez se ha activado la opción de imprimir algún documento o línea, usando los eventos anteriores, los eventos OnPrintDocumentHeader y OnPrintDocumentLine se lanzarán cada vez que el usuario pulse en la acción correspondiente de la aplicación móvil.
OnPrintDocumentHeader
local procedure OnPrintDocumentHeader(DocumentType: Enum "IDPWHS Source Document Type"; DocumentSubtype: Enum "IDPWHS Source Document Subtype"; ActivityType: Enum "IDPWHS Activity Type"; No: Code[20]; SelectedOption: Text; Quantity: Integer);
Este evento se ejecuta cuando se solicita la impresión de un documento desde la aplicación móvil. Los parámetros recibidos son los siguientes:
- DocumentType. El tipo de documento que se ha solicitado imprimir.
- DocumentSubtype. En el caso de ventas o compras, el tipo del documento "Sales Order" o "Purchase Order". El índice corresponde con el del campo "Document Type" de dichos documentos.
- ActivityType. En el caso de cabecera de actividad de almacén, el tipo de actividad en concreto.
- No. El número de documento a imprimir.
- SelectedOption. Si se han indicado opciones cuando se activó la impresión (el parámetro Options de CheckPrintDocumentHeaderEnabled), la seleccionada por el usuario.
- Quantity. El número de copias a imprimir, solicitado si se activó la opción de AskForQuantity.
Ejemplo
[EventSubscriber(ObjectType::Codeunit, Codeunit::"IDPWHS Printing Management", 'OnPrintDocumentHeader', '', true, true)]
local procedure OnPrintShipmentHeader(DocumentType: Enum "IDPWHS Source Document Type"; No: Code[20]; Quantity: Integer; SelectedOption: Text)
var
ShipmentHeader: Record "Warehouse Shipment Header";
begin
if DocumentType <> DocumentType::Shipment then
exit;
ShipmentHeader.Get(No);
case SelectedOption of
'Albarán':
PrintWhseShipmentDocument(ShipmentHeader, Quantity);
'Etiquetas':
PrintWhseShipmentLabels(ShipmentHeader, Quantity);
end;
end;
El ejemplo anterior enlazaría con el del evento CheckPrintDocumentHeaderEnabled. En caso de que el usuario pulse la acción de imprimir en la aplicación móvil, y tras seleccionar entre las opciones mostradas e indicar la cantidad, se lanzará este evento con los parámetros recibidos.
Nota: desde el punto de vista de permisos y de configuración de impresoras, el código anterior lo ejecutará el usuario que se haya utilizado para validarse en la aplicación móvil.
OnPrintDocumentLine
local procedure OnPrintDocumentLine(DocumentType: Enum "IDPWHS Source Document Type"; DocumentSubtype: Enum "IDPWHS Source Document Subtype"; ActivityType: Enum "IDPWHS Activity Type"; No: Code[20]; LineNo: Integer; SelectedOption: Text; Quantity: Integer)
Este evento es idéntico al OnPrintDocumentHeader, con el añadido de que recibe el parámetro LineNo indicando la línea que el usuario desea imprimir.