## Captura a granel rápida Este programa presenta una ventana (diálogo) para introducir fácilmente cantidad y precio según los requerimientos de velocidad en la captura en negocios que venden frutas, verduras, semillas, chiles y productos a granel en general con un alto volumen de operaciones. El programa puede leer automáticamente los datos de una báscula conectada al puerto serie. ### Línea de comando ``` capturaGranel.exe "MA0001" "Piña" "1" "45.5" "Kg" "Reja:25,Costal:35.5, Tara:150,Tonelada:1000" "Kg" ``` Donde los argumentos por orden son: 1. Código del producto 2. Descripción del producto 3. Cantidad 4. Precio en unidad estándar 5. Unidad estándar 6. Unidades alternas y sus factores de conversión respecto a la unidad estándar (opcional) 7. Unidad que al estar seleccionada activa la entrada automática de la báscula (opcional) #### Nota sobre la especificación de unidades alternas Observe que la notación es: ```Unidad_alterna:Factor_conversión, ...``` El caracter dos puntos (:) sirve como delimitador entre la unidad y su factor, mientras que el caracter coma (,) delimita los pares unidad-factor ### Uso de teclado Se ha habilitado el uso de las teclas (flecha) arriba y abajo para desplazarse entre los campos unidad, cantidad, precio y total. El campo unidad, que es un ComboBox puede desplegarse y contraerse con F4 (no admite las flechas arriba y abajo porque son para elegir de la lista). En todos los campos, al presionar ENTER se avanza al siguiente. ESC cierra la ventana. ### Salida de consola Si la operación se cancela, se imprime en la consola: ```**CANCEL***``` Si la operación se confirma, la salida es: ```***codigo|total|cantidad``` - codigo Es el código del producto - total es el importe total a cobrar por la cantidad de unidades (estándar) vendidas - cantidad es la cantidad expresada en la unidad estándar (no importa si se eligió otra unidad, la cantidad será convertida a lo correspondiente) Suponga que la unidad estándar es Kg y tiene una unidad alterna Caja con un factor de 25, es decir 25Kg=1Caja con un precio por caja de $100. Si confirma la venta de 2 Caja, la cantidad devuelta será 50 y el total $ 200 ### Implementación 1. Compile el proyecto capturaGranel.sln para obtener capturaGranel.exe 2. Copie el archivo capturaGranel.exe a una ubicación en el equipo que ejecuta el POS 3. Cree un archivo .bat que ejecute a capturaGranel.exe como se muestra más adelante. 4. Modifique el script pos_usercmds.js como se muestra más adelante para habilitar un comando de usuario. #### capturagranel.bat Para capturar la salida de consola de aplicaciones .Net de Windows Forms se requiere un archivo de proceso por lotes en el POS de MaxiComercio R5. ``` bacth @capturagranel.exe %1 %2 %3 %4 %5 %6 %7 ``` #### pos_usercmds.js Aquí se habilita el comando +f para desplegar la ventana de captura (capturagranel.exe) ``` javascript function main() { //Este código debe ir en el script pos_usrcmd.js //MainForm.AddUserCommand("Comando", "Accion", "Descripcion", "function", Negritas t/f,Color fuente); //Comandos definibles por el usuario: +12 ... +98 //MainForm.AddUserCommand("+12", "Accion", "Descripcion", "mifuncion", false,0xC000); MainForm.AddUserCommand("+12", "Catálogo de documentos de flujo", "Muestra el catálogo de documentos de flujo", "pos_requisiciones.dlgbrowser",false,0xC000); MainForm.AddUserCommand("+13", "Configuración de envío de correo", "Permite al usuario configurar envío del corte de caja por correo", "config_email_arqueo.configLoad",false,0xC000); // ************ GRANEL ************* MainForm.AddUserCommand("+f", "Captura de productos a granel", "Despliega la ventana de captura de productos a granel", "pos_usercmds.cmd_granel",false,0xC000); // ********************************* } function cmd_granel() { pos_usercmds.granel(""); } function granel(cod) { MainForm.SetProducto(cod); var codigo=MainForm.dxProducto.Value; if (!codigo) return; // Aquí puede validarse si el código de producto aplica para usar este método de captura // Tú código aquí //////////////////////////////////////////////////////////////////////////////////////// var idxp=MainForm.BuscarProductoEnPantalla_PorCodigo(codigo); var cantidad_actual=0; var importe_actual=0; var descripcion=""; var precio=0; var unidad=""; if (idxp>0) { MainForm.SeleccionaProductoEnPantalla(idxp); cantidad_actual=eBasic.RoundVal(MainForm.lvwProductos.ListItems(idxp).SubItems(2),4); importe_actual=eBasic.RoundVal(MainForm.lvwProductos.ListItems(idxp).SubItems(5),4); descripcion=MainForm.lvwProductos.ListItems(idxp).SubItems(1); precio=eBasic.RoundVal(MainForm.lvwProductos.ListItems(idxp).SubItems(4),2); unidad=MainForm.lvwProductos.ListItems(idxp).SubItems(3); } else { precio=MainForm.PrecioProdActualConImpuestos; descripcion=MainForm.ProductoActual.Descripcion; unidad=MainForm.ProductoActual.Unidad; } Application.MainForm.ClearConsole(); var command = "capturaGranel.bat "+ "\""+codigo + "\" "+ "\""+descripcion+"\" "+ "\"1\" "+ "\""+precio+"\" "+ "\""+unidad+"\""; Application.MainForm.ExecInConsole(command); var response = eBasic.ClearStrBorders(Application.MainForm.txtConsole.Text); if (response.indexOf("*CANCEL*")<0) { try { var ultMayorQue = response.lastIndexOf("*"); response = response.substr(ultMayorQue+1, response.length-ultMayorQue); var datos=response.split('|'); importe_actual=importe_actual+eBasic.RoundVal(datos[1],4); cantidad_actual=cantidad_actual+eBasic.RoundVal(datos[2],4); if (idxp>0) MainForm.Execute("--"); var c1=codigo+"*"+cantidad_actual; // Agregar el producto con su cantidad var c2="/"+importe_actual; // Establecer el importe total por todas las unidades MainForm.Execute(c1); MainForm.Execute(c2); } catch(e) { eBasic.eMsgbox("Error"); } } } ```