{"id":12994,"date":"2025-10-17T18:02:03","date_gmt":"2025-10-17T18:02:03","guid":{"rendered":"https:\/\/pevaar.com\/?p=12994"},"modified":"2025-11-19T16:49:11","modified_gmt":"2025-11-19T16:49:11","slug":"app-de-control-financiero","status":"publish","type":"post","link":"https:\/\/pevaar.com\/es\/blog\/2025\/10\/17\/app-de-control-financiero\/","title":{"rendered":"App de control financiero: el m\u00f3dulo de ingresos que hace simple lo complicado"},"content":{"rendered":"<div class=\"wpb-content-wrapper\">[vc_row][vc_column][vc_btn title=\u00bbDescubre la App en acci\u00f3n: agenda tu llamada ahora\u00bb style=\u00bb3d\u00bb shape=\u00bbrounded\u00bb color=\u00bbprimary\u00bb size=\u00bblg\u00bb i_icon_fontawesome=\u00bbfas fa-phone\u00bb hover_effect=\u00bbhover-icon-zoom\u00bb add_icon=\u00bbtrue\u00bb link=\u00bburl:https%3A%2F%2Fpevaar.com%2Fes%2Fagenda-una-llamada%2F|target:_blank\u00bb css_params=\u00bb\u00bb][\/vc_column][\/vc_row][vc_row][vc_column][vc_column_text css=\u00bb\u00bb css_params=\u00bb\u00bb]<span style=\"font-size: 18px\">Llevar la cuenta de facturas y pagos ya no tiene que sentirse como resolver un acertijo imposible. La App de control financiero se asegura de que cada peso est\u00e9 en su lugar. Con unos pocos clics, simplifica la gesti\u00f3n de ingresos, te da una visi\u00f3n clara de tu flujo de caja y te devuelve el control de tus finanzas.\u00a0\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\">Y s\u00ed, hasta la pantalla de \u201cpagos recibidos\u201d est\u00e1 pensada para ser tan intuitiva como dar un chasquido. Simple, r\u00e1pida y hecha para la vida real.\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\">Vamos a desarmarlo paso a paso, pero con estilo:\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\"><b>El t\u00edtulo que manda\u00a0<\/b><\/span>\r\n\r\n<span style=\"font-size: 18px\">Para empezar, a\u00f1adimos un <b>label<\/b> con el t\u00edtulo <i>\u201cIngresos\u201d <\/i>en su propiedad <i>Text<\/i>. Nada de perderse: siempre sabr\u00e1s que est\u00e1s en la secci\u00f3n donde el dinero entra (y no se escapa).\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\"><b>El buscador poderoso\u00a0<\/b><\/span>\r\n\r\n<span style=\"font-size: 18px\">Insertamos un cuadro de texto con un \u00edcono de b\u00fasqueda. Es como tener un detective financiero personal para tus facturas: escribes cliente, n\u00famero de factura o proyecto y la app de control financiero te muestra el resultado al instante.\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\"><b>Bot\u00f3n de reinicio\u00a0<\/b><\/span>\r\n\r\n<span style=\"font-size: 18px\">\u00bfTe equivocaste en la b\u00fasqueda? Con un clic en el bot\u00f3n de limpiar, todo vuelve a cero. Es como sacudir una pizarra m\u00e1gica para empezar de nuevo.\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\"><b>La galer\u00eda ordenada\u00a0<\/b><\/span>\r\n\r\n<span style=\"font-size: 18px\">Aqu\u00ed llega lo divertido: La galer\u00eda organiza tus ingresos como si fueran un cat\u00e1logo, f\u00e1cil de leer y sin enredos. Para lograrlo, insertamos una <span style=\"color: #4e5865\"><b>galer\u00eda vertical<\/b><\/span> con la propiedad <i>Items<\/i>:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">Sort(\u00a0\u00a0<\/span>\r\n<span style=\"font-size: 18px\">Search( InvoicePayments;\u00a0\u00a0<\/span>\r\n<span style=\"font-size: 18px\">TextInput_Search_Income.Text;\u00a0 <\/span>\r\n<span style=\"font-size: 18px\">Client; Project; InvoiceNumber; Date; InvoiceValue; Budgeted value, PurchaseOrderNumber, ICA withholding; Withholding\u00a0\u00a0<\/span>\r\n<span style=\"font-size: 18px\">);\u00a0\u00a0<\/span>\r\n<span style=\"font-size: 18px\">'Created On';\u00a0\u00a0<\/span>\r\n<span style=\"font-size: 18px\">SortOrder.Descending\u00a0\u00a0<\/span>\r\n<span style=\"font-size: 18px\">)\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">\r\n<span class=\"TextRun SCXW245147947 BCX8\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW245147947 BCX8\">\u00bfEl resultado? Una lista donde siempre aparecen arriba los ingresos m\u00e1s recientes. Nada de revolver archivos, aqu\u00ed todo fluye como debe.<\/span><\/span><span class=\"EOP SCXW245147947 BCX8\" data-ccp-props=\"{}\">\u00a0<\/span>\r\n<\/span>\r\n<h2><b><span data-contrast=\"none\">Fuente de Datos\u00a0<\/span><\/b><\/h2>\r\n<span style=\"font-size: 18px\">Detr\u00e1s de todo buen m\u00f3dulo, en la app de control financiero hay una tabla a\u00fan mejor. todo arranca con <span style=\"color: #4e5865\"><b>InvoicePayments<\/b><\/span>, la base que guarda cada ingreso registrado.\u00a0<\/span>\r\n<span style=\"font-size: 18px\"> Aqu\u00ed viven campos esenciales como: <i>Client, Project, Invoice Number, Date, Invoice Value, Budgeted Value, Purchase Order Number, ICA Withholding y Withholding<\/i>.\u00a0<\/span>\r\n<span style=\"font-size: 18px\"> Es como tu libro contable, pero digital, organizado, limpio y listo para responder en segundos.\u00a0<\/span>\r\n<h2><b><span data-contrast=\"none\">Funciones de B\u00fasqueda <\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><\/h2>\r\n<span style=\"font-size: 18px\">El radar que todo lo encuentra:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">Search(InvoicePayments; TextInput_Search_Income.Text; \u2026)\u00a0 <\/span><\/pre>\r\n<span style=\"font-size: 18px\">Permite buscar al mismo tiempo en varios campos (cliente, proyecto, n\u00famero de factura, etc.). Escribiendo un dato y en menos de un segundo tienes las coincidencias. La App de control financiero no falla.\u00a0<\/span>\r\n<h2><b><span data-contrast=\"none\">Funci\u00f3n de Ordenamiento <\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><\/h2>\r\n<span style=\"font-size: 18px\">El orden importa, y aqu\u00ed lo garantizas con:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">Sort( \u2026 ; 'Created On'; SortOrder.Descending)\u00a0\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">\u00bfEl beneficio? Siempre tendr\u00e1s los ingresos m\u00e1s recientes en la parte superior de la lista.\u00a0<\/span>\r\n<h2><b><span data-contrast=\"none\">Dentro de la Galer\u00eda\u00a0<\/span><\/b><\/h2>\r\n<span style=\"font-size: 18px\">Aqu\u00ed es donde el m\u00f3dulo de Ingresos se vuelve interactivo:<\/span>\r\n<h3><b>Etiquetas de informaci\u00f3n <\/b><\/h3>\r\n<span style=\"font-size: 18px\">Cada ingreso muestra datos claros gracias a etiquetas conectadas a la tabla, para esto se insertan labels que muestran las columnas m\u00e1s relevantes: Cliente, Proyecto, N\u00famero de Factura, Fecha y Valor.\u00a0<\/span>\r\n<span style=\"font-size: 18px\">Cada etiqueta se conecta con el campo real de la tabla usando propiedades como:\u00a0\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">ThisItem.Client\u00a0\u00a0 <\/span>\r\n<span style=\"font-size: 18px\" data-contrast=\"auto\">ThisItem.InvoiceNumber\u00a0\u00a0<\/span> \r\n<span style=\"font-size: 18px\">ThisItem.InvoiceValue\u00a0\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">As\u00ed nunca tienes que adivinar de d\u00f3nde vino el dinero.\u00a0<\/span>\r\n<h3><b><span data-contrast=\"none\">\u00cdconos con actitud\u00a0<\/span><\/b><\/h3>\r\n<ul>\r\n \t<li><span style=\"font-size: 18px\"><b>Eliminar<\/b>: Con la propiedad <i>OnSelect<\/i> que activa. <\/span><\/li>\r\n<\/ul>\r\n<pre><span style=\"font-size: 18px\">Set(varIncomeDeletionRecord; ThisItem);;\u00a0  <\/span>\r\n<span style=\"font-size: 18px\">UpdateContext({ popDelete: true })<\/span><\/pre>\r\n<ul>\r\n \t<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span style=\"font-size: 18px\"><b>Editar<\/b>: Con la propiedad <i>OnSelect<\/i>:\u00a0<\/span><\/li>\r\n<\/ul>\r\n<pre><span style=\"font-size: 18px\">Set(IncomeItemRecord; ThisItem);;\u00a0 \u00a0<\/span>\r\n<span style=\"font-size: 18px\">Navigate(EditIncome)\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">As\u00ed puedes entrar directo al registro, actualizarlo o eliminarlo sin rodeos.\u00a0<\/span>\r\n<h3><b><span data-contrast=\"none\">Bot\u00f3n Crear\u00a0<\/span><\/b><\/h3>\r\n<span style=\"font-size: 18px\">\u00bfUn nuevo ingreso? Solo toca el bot\u00f3n<span style=\"color: #4e5865\"> <b>Crear <\/b><\/span>creado con esta propiedad y listo:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">Navigate(CreateIncome; ScreenTransition.None)\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">Es como abrir una nueva pesta\u00f1a, pero para tus finanzas.\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\">As\u00ed mismo creas una secci\u00f3n que convierte la galer\u00eda en un tablero interactivo: visualizas los datos, editas, eliminas o creas nuevos registros, al alcance de un clic. Justo lo que hace a la gesti\u00f3n administrativa de proyectos mucho m\u00e1s \u00e1gil y moderna.\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\"><img decoding=\"async\" class=\"size-full wp-image-12922 aligncenter lazyload\" data-src=\"\/wp-content\/uploads\/2025\/09\/26.png\" alt=\"\" width=\"1588\" height=\"469\" data-srcset=\"\/wp-content\/uploads\/2025\/09\/26.png 1588w, \/wp-content\/uploads\/2025\/09\/26-1024x302.png 1024w, \/wp-content\/uploads\/2025\/09\/26-768x227.png 768w, \/wp-content\/uploads\/2025\/09\/26-1536x454.png 1536w, \/wp-content\/uploads\/2025\/09\/26-640x189.png 640w, \/wp-content\/uploads\/2025\/09\/26-400x118.png 400w, \/wp-content\/uploads\/2025\/09\/26-500x148.png 500w, \/wp-content\/uploads\/2025\/09\/26-800x236.png 800w, \/wp-content\/uploads\/2025\/09\/26-1280x378.png 1280w\" data-sizes=\"(max-width: 1588px) 100vw, 1588px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1588px; --smush-placeholder-aspect-ratio: 1588\/469;\" \/><\/span>\r\n\r\n<span style=\"font-size: 18px\"><em>Img.1<\/em><\/span>\r\n<h2><b><span data-contrast=\"none\">Pantalla \u201cCrear Ingreso\u201d\u00a0<\/span><\/b><\/h2>\r\n<h3><b><span data-contrast=\"none\">Bot\u00f3n de regreso\u00a0<\/span><\/b><\/h3>\r\n<span style=\"font-size: 18px\">Siempre con salida r\u00e1pida:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">OnSelect = Back()\u00a0<\/span><\/pre>\r\n<h3><b><span data-contrast=\"none\">Bot\u00f3n Guardar <\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/h3>\r\n<span style=\"font-size: 18px\">El cl\u00e1sico que nunca falla:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">OnSelect = SubmitForm(Form_CreateIncome_1)\u00a0<\/span><\/pre>\r\n<h3><b><span data-contrast=\"none\">Etiqueta de t\u00edtulo\u00a0<\/span><\/b><\/h3>\r\n<span style=\"font-size: 18px\">Para que no haya dudas:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">Text = \"Create Income\"\u00a0<\/span><\/pre>\r\n<h3><b><span data-contrast=\"none\">El formulario m\u00e1gico<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><\/h3>\r\n<span style=\"font-size: 18px\">Aqu\u00ed pasa la acci\u00f3n:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">Notify(\"Income created successfully\"; NotificationType.Success);;\u00a0 \u00a0<\/span>\r\n<span style=\"font-size: 18px\">NewForm(Form_CreateIncome_1);;\u00a0 \u00a0<\/span>\r\n<span style=\"font-size: 18px\">Navigate(Incomes; ScreenTransition.Fade)<\/span><\/pre>\r\n<span style=\"font-size: 18px\">\u00bfEl resultado? Cada ingreso registrado con estilo con notificaci\u00f3n incluida.\u00a0<\/span>\r\n\r\n<img decoding=\"async\" class=\"size-full wp-image-12924 aligncenter lazyload\" data-src=\"\/wp-content\/uploads\/2025\/09\/27.png\" alt=\"\" width=\"1202\" height=\"284\" data-srcset=\"\/wp-content\/uploads\/2025\/09\/27.png 1202w, \/wp-content\/uploads\/2025\/09\/27-1024x242.png 1024w, \/wp-content\/uploads\/2025\/09\/27-768x181.png 768w, \/wp-content\/uploads\/2025\/09\/27-640x151.png 640w, \/wp-content\/uploads\/2025\/09\/27-400x95.png 400w, \/wp-content\/uploads\/2025\/09\/27-500x118.png 500w, \/wp-content\/uploads\/2025\/09\/27-800x189.png 800w\" data-sizes=\"(max-width: 1202px) 100vw, 1202px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1202px; --smush-placeholder-aspect-ratio: 1202\/284;\" \/>\r\n\r\n<span style=\"font-size: 18px\"><em>Img.2<\/em><\/span>\r\n<h3><b><span data-contrast=\"none\">Bot\u00f3n \u201c+\u201d para a\u00f1adir pagos\u00a0<\/span><\/b><\/h3>\r\n<span style=\"font-size: 18px\">Porque siempre habr\u00e1 m\u00e1s ingresos que registrar, agregamos un bot\u00f3n con el nombre \u201c+\u201d. Este bot\u00f3n tiene la propiedad <span style=\"color: #4e5865\"><b>OnSelect<\/b><\/span>:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">Collect(TemporaryInvoicePayments;\u00a0 \u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0 {\u00a0 \u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0 Payment_Date: Today();\u00a0 \u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0 Payment_Value: 0;\u00a0 \u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0 Advance: \"\";\u00a0 \u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0 TotalPayment: 0\u00a0 \u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0 }\u00a0 \u00a0<\/span>\r\n<span style=\"font-size: 18px\">)\u00a0\r\n<\/span><\/pre>\r\n<h2><b><span data-contrast=\"none\">\u00bfQu\u00e9 hace esta f\u00f3rmula?\u00a0<\/span><\/b><\/h2>\r\n<h3><strong>Collect<\/strong><\/h3>\r\n<span style=\"font-size: 18px\"> Es la funci\u00f3n que permite crear o sumar registros dentro de una colecci\u00f3n local en la app de control financiero. Aqu\u00ed la colecci\u00f3n se llama <span style=\"color: #4e5865\"><b>TemporaryInvoicePayments<\/b>.\u00a0<\/span><\/span>\r\n<h3><strong>El registro inicial\u00a0<\/strong><\/h3>\r\n<span style=\"font-size: 18px\">Cuando presionas el bot\u00f3n, se agrega un nuevo registro con estos valores predeterminados:\u00a0<\/span>\r\n<ul>\r\n \t<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"5\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span style=\"font-size: 18px\">Payment_Date \u2192 se llena autom\u00e1ticamente con la fecha de hoy gracias a <span style=\"color: #4e5865\"><b>Today()<\/b>.<\/span>\u00a0<\/span><\/li>\r\n<\/ul>\r\n<ul>\r\n \t<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"5\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"2\"><span style=\"font-size: 18px\">Payment_Value \u2192 arranca en 0, esperando que el usuario ingrese el valor real.\u00a0<\/span><\/li>\r\n<\/ul>\r\n<ul>\r\n \t<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"5\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"3\" data-aria-level=\"2\"><span style=\"font-size: 18px\">Advance \u2192 inicia vac\u00edo (\u00ab\u00bb), pensado para registrar anticipos si aplica.\u00a0<\/span><\/li>\r\n<\/ul>\r\n<ul>\r\n \t<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"5\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:1440,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Courier New&quot;,&quot;469769242&quot;:[9675],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;o&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"4\" data-aria-level=\"2\"><span style=\"font-size: 18px\">TotalPayment \u2192 comienza en 0, y luego se calcula con base en los datos ingresados.\u00a0<\/span><\/li>\r\n<\/ul>\r\n<span style=\"font-size: 18px\">Para guiar al usuario, tambi\u00e9n insertamos una etiqueta con el texto:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">Text = \"Add payment\"\u00a0<\/span><\/pre>\r\n<img decoding=\"async\" class=\"size-full wp-image-12926 aligncenter lazyload\" data-src=\"\/wp-content\/uploads\/2025\/09\/28.png\" alt=\"\" width=\"226\" height=\"71\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 226px; --smush-placeholder-aspect-ratio: 226\/71;\" \/><em><span style=\"font-size: 18px\">Img.3<\/span><\/em>\r\n\r\n<span style=\"font-size: 18px\">Porque nada como un recordatorio claro de qu\u00e9 hace el bot\u00f3n.\u00a0<\/span>\r\n<h3><strong>La galer\u00eda de pagos\u00a0<\/strong><\/h3>\r\n<span style=\"font-size: 18px\">Aqu\u00ed es donde cada pago se convierte en un registro visible y editable. Insertamos una <span style=\"color: #4e5865\"><b>galer\u00eda vertical en blanco<\/b><\/span> y en su propiedad <span style=\"color: #4e5865\"><b>Items<\/b><\/span> colocamos:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">TemporaryInvoicePayments\r\n<\/span><\/pre>\r\n<span style=\"font-size: 18px\">Dentro de la galer\u00eda, a\u00f1adimos 4 controles que hacen la magia:\u00a0<\/span>\r\n<ul>\r\n \t<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span style=\"font-size: 18px\">DatePicker \u2192 con la propiedad DefaultDate:\u00a0<\/span><\/li>\r\n<\/ul>\r\n<pre><span style=\"font-size: 18px\">ThisItem.Payment_Date\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">As\u00ed siempre aparece la fecha correcta.\u00a0<\/span>\r\n<ul>\r\n \t<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"7\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span style=\"font-size: 18px\">InputText \u2192 con la propiedad Default:\u00a0<\/span><\/li>\r\n<\/ul>\r\n<pre><span style=\"font-size: 18px\">ThisItem.Payment_Value\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">Para que el usuario ajuste el valor real del pago.\u00a0<\/span>\r\n<ul>\r\n \t<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span style=\"font-size: 18px\">\u00a0Dropdown \u2192 con las opciones:\u00a0<\/span><\/li>\r\n<\/ul>\r\n<pre><span style=\"font-size: 18px\">[\"\"; \"Yes\"; \"No\"]\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">Perfecto para indicar si hay anticipo o no.\u00a0<\/span>\r\n<ul>\r\n \t<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"9\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span style=\"font-size: 18px\">\u00cdcono de eliminar (papelera) \u2192 con la propiedad <span style=\"color: #4e5865\"><b>OnSelect<\/b><\/span>:\u00a0<\/span><\/li>\r\n<\/ul>\r\n<pre><span style=\"font-size: 18px\">Remove(TemporaryInvoicePayments; ThisItem)\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">As\u00ed puedes borrar un registro con un solo clic.\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\"><img decoding=\"async\" class=\"size-full wp-image-12930 aligncenter lazyload\" data-src=\"\/wp-content\/uploads\/2025\/09\/29-1.png\" alt=\"\" width=\"1087\" height=\"111\" data-srcset=\"\/wp-content\/uploads\/2025\/09\/29-1.png 1087w, \/wp-content\/uploads\/2025\/09\/29-1-1024x105.png 1024w, \/wp-content\/uploads\/2025\/09\/29-1-768x78.png 768w, \/wp-content\/uploads\/2025\/09\/29-1-640x65.png 640w, \/wp-content\/uploads\/2025\/09\/29-1-400x41.png 400w, \/wp-content\/uploads\/2025\/09\/29-1-500x51.png 500w, \/wp-content\/uploads\/2025\/09\/29-1-800x82.png 800w\" data-sizes=\"(max-width: 1087px) 100vw, 1087px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1087px; --smush-placeholder-aspect-ratio: 1087\/111;\" \/>\r\n<em>Img.4<\/em><\/span>\r\n\r\n<span style=\"font-size: 18px\"><span class=\"TextRun SCXW144631976 BCX8\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW144631976 BCX8\">Con este set de controles, el m\u00f3dulo de ingresos de la <\/span><\/span><span class=\"TextRun SCXW144631976 BCX8\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW144631976 BCX8\">App de control financiero<\/span><span class=\"NormalTextRun SCXW144631976 BCX8\"> se vuelve interactivo, flexible y hasta divertido de usar. Cada pago entra limpio, ordenado y f\u00e1cil de gestionar, como debe ser en una<\/span><span class=\"NormalTextRun SCXW144631976 BCX8\"> App de control financiero.<\/span><\/span><span class=\"EOP SCXW144631976 BCX8\" data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/span>\r\n<h2><b><span data-contrast=\"none\">Calculando totales como un pro\u00a0<\/span><\/b><\/h2>\r\n<span style=\"font-size: 18px\">Llegamos al momento de sacar cuentas, y aqu\u00ed tu App de control financiero se convierte en ese contador puntual que nunca se equivoca (ni se toma vacaciones). Gracias a un par de <span style=\"color: #4e5865\"><b>labels inteligentes<\/b><\/span>, todo queda bajo control:\u00a0<\/span>\r\n<h3><strong>Label \u00abPaid Value\u00bb<\/strong><\/h3>\r\n<pre><span style=\"font-size: 18px\">Text = \"$\" &amp; Text(Sum(TemporaryInvoicePayments; Value(Paid_Value));\"#,##0.00\")\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">Este label muestra autom\u00e1ticamente el <span style=\"color: #4e5865\"><b>total pagado<\/b><\/span>, con formato en pesos y bien presentable, para que no tengas que andar sacando la calculadora.\u00a0<\/span>\r\n<h3><strong>Label \u00abBalance\u00bb<\/strong><\/h3>\r\n<pre><span style=\"font-size: 18px\">Text = \"$\" &amp; Text(Value(DataCardValue24.Text) - Sum(TemporaryPaymentsInvoice; Value(Payment_Value)); \"#,##0.00\")\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">Aqu\u00ed tienes el <span style=\"color: #4e5865\"><b>saldo pendiente<\/b><\/span>: lo que falta por pagar se calcula solito, restando lo abonado al valor total de la factura. As\u00ed sabes en segundos si toca celebrar o si todav\u00eda queda esperar que te consignen.\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\"><img decoding=\"async\" class=\"size-full wp-image-12932 aligncenter lazyload\" data-src=\"\/wp-content\/uploads\/2025\/09\/30.png\" alt=\"\" width=\"1036\" height=\"107\" data-srcset=\"\/wp-content\/uploads\/2025\/09\/30.png 1036w, \/wp-content\/uploads\/2025\/09\/30-1024x106.png 1024w, \/wp-content\/uploads\/2025\/09\/30-768x79.png 768w, \/wp-content\/uploads\/2025\/09\/30-640x66.png 640w, \/wp-content\/uploads\/2025\/09\/30-400x41.png 400w, \/wp-content\/uploads\/2025\/09\/30-500x52.png 500w, \/wp-content\/uploads\/2025\/09\/30-800x83.png 800w\" data-sizes=\"(max-width: 1036px) 100vw, 1036px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1036px; --smush-placeholder-aspect-ratio: 1036\/107;\" \/><\/span>\r\n\r\n<em><span style=\"font-size: 18px\">Img.5<\/span><\/em>\r\n<h2><b><span data-contrast=\"none\">El gran final: guardar y celebrar con tu App de control financiero<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/h2>\r\n<span style=\"font-size: 18px\">Despu\u00e9s de todo el esfuerzo de registrar facturas, pagos y balances, llega el momento de apretar el <span style=\"color: #4e5865\"><b>bot\u00f3n de guardar<\/b><\/span>. Y aqu\u00ed es donde tu App de control financiero se luce como una rockstar de la organizaci\u00f3n:\u00a0\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">If( <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 CountRows(TemporaryInvoicePayments) = 0; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 Notify(\"You must add at least one payment\"; NotificationType.Error); <\/span>\r\n\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 With( <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 newInvoicePayments: Patch( <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 InvoicePayments; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Defaults(PaymentInvoice); <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 InvoiceNumberProject: DataCardValue38.Text; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 InvoiceDate: DateValue5.SelectedDate; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ClientAppRelation: DataCardValue43_2.Selected; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ProjectAppRelation: DataCardValue46.Selected; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PaidAmount: Sum(TemporaryInvoicePayments; Payment_Value); <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ReteICA: Value(DataCardValue30.Text); <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Retention: Value(DataCardValue31.Text); <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ApprovedClientBudget: Value(DataCardValue28.Text); <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 QuoteNumber: DataCardValue33.Text; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PurchaseOrderNumber: DataCardValue35.Text; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 InvoiceValue: Value(DataCardValue24.Text) <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ) <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 };\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 If( <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 !IsBlank(newInvoicePayments); \r\n<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ForAll( <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 TemporaryPaymentsInvoice; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Patch( <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ProjectInvoicePayments; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Defaults(ProjectInvoicePayments); <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PaymentDate: Payment_Date; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PaymentValue: Payment_Value; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Advance: Advance; <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 InvoicePaymentRelation: newInvoicePayments <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ) <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 );; \r\n<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Clear(TemporaryInvoicePayments); \r\n<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Notify(\"Invoice and payments saved successfully\"; NotificationType.Success) <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ) <\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 ) <\/span>\r\n<span style=\"font-size: 18px\">);; <\/span>\r\n\r\n<span style=\"font-size: 18px\">ResetForm(Form5);; <\/span>\r\n<span style=\"font-size: 18px\" data-contrast=\"none\">Navigate(Payments1_1; ScreenTransition.Fade)<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335559685&quot;:360,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/pre>\r\n<h2><b><span data-contrast=\"none\">\u00bfQu\u00e9 hace esta f\u00f3rmula?<\/span><\/b><\/h2>\r\n<h3><b><span data-contrast=\"none\">Validaci\u00f3n inicial\u00a0<\/span><\/b><\/h3>\r\n<span style=\"font-size: 18px\">Primero, la app revisa que hayas agregado al menos un pago:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">If(\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 CountRows(TemporaryInvoicePayments) = 0;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 Notify(\"You must add at least one payment\"; NotificationType.Error);\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">Si la colecci\u00f3n <strong><span style=\"color: #4e5865\">TemporaryInvoicePayments<\/span><\/strong> est\u00e1 vac\u00eda, \u00a1pum! aparece un aviso para recordarte que necesitas al menos un pago antes de seguir.\u00a0<\/span>\r\n<h3><b><span data-contrast=\"none\">Creaci\u00f3n de la factura\u00a0<\/span><\/b><\/h3>\r\n<span style=\"font-size: 18px\">Con la funci\u00f3n <span style=\"color: #4e5865\"><b>Patch<\/b><\/span>, la app guarda la factura en la tabla <strong><span style=\"color: #4e5865\">InvoicePayments<\/span><\/strong>:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">newInvoicePayments: Patch(\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 InvoicePayments;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 Defaults(PaymentsInvoice);\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 {\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 InvoiceNumberProject: DataCardValue38.Text;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 InvoiceDate: DateValue5.SelectedDate;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ClientAppRelation: DataCardValue43_2.Selected;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ProjectAppRelation: DataCardValue46.Selected;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PaidAmount: Sum(TemporaryInvoicePayments; Payment_Value);\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ReteICA: Value(DataCardValue30.Text);\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Retention: Value(DataCardValue31.Text);\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ApprovedClientBudget: Value(DataCardValue28.Text);\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 QuoteNumber: DataCardValue33.Text;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PurchaseOrderNumber: DataCardValue35.Text;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 InvoiceValue: Value(DataCardValue24.Text)\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 }\u00a0<\/span>\r\n<span style=\"font-size: 18px\">)<\/span><\/pre>\r\n<span style=\"font-size: 18px\">Aqu\u00ed queda todo registrado: cliente, proyecto, valores, retenciones\u2026 \u00a1como tener un contador autom\u00e1tico en tu bolsillo!\u00a0<\/span>\r\n<h3><b><span data-contrast=\"none\">Registro de pagos asociados\u00a0<\/span><\/b><\/h3>\r\n<span style=\"font-size: 18px\">Despu\u00e9s, se recorren uno por uno los pagos temporales con <span style=\"color: #4e5865\"><b>ForAll<\/b><\/span> para insertarlos en la tabla de pagos del proyecto y conectarlos con la factura reci\u00e9n creada:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">ForAll(\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 TemporaryPaymentsInvoice;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 Patch(\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ProjectInvoicePayments;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Defaults(ProjectInvoicePayments);\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PaymentDate: Payment_Date;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PaymentValue: Payment_Value;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Advance: Advance;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 InvoicePaymentRelation: newInvoicePayments\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0<\/span>\r\n<span style=\"font-size: 18px\">\u00a0\u00a0\u00a0 )\u00a0<\/span>\r\n<span style=\"font-size: 18px\">)<\/span><\/pre>\r\n<span style=\"font-size: 18px\" data-contrast=\"auto\">De esta manera, cada pago queda enlazado sin que tengas que hacerlo manualmente.<\/span>\r\n<h3><b><span data-contrast=\"none\">Limpieza y confirmaci\u00f3n <\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><\/h3>\r\n<span style=\"font-size: 18px\">Cuando todo est\u00e1 guardado, la app de control financiero borra la colecci\u00f3n temporal y muestra un mensaje de \u00e9xito:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">Clear(TemporaryInvoicePayments);\u00a0<\/span>\r\n<span style=\"font-size: 18px\">Notify(\"Invoice and payments saved successfully\"; NotificationType.Success)<\/span><\/pre>\r\n<span style=\"font-size: 18px\" data-contrast=\"auto\">Te avisa que todo qued\u00f3 en orden.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span>\r\n<h3><b><span data-contrast=\"none\">Acciones finales\u00a0<\/span><\/b><\/h3>\r\n<span style=\"font-size: 18px\">Para cerrar con broche de oro, la app de control financiero reinicia el formulario y te env\u00eda a la pantalla de pagos con estilo:\u00a0<\/span>\r\n<pre><span style=\"font-size: 18px\">ResetForm(Form5);;\u00a0<\/span>\r\n<span style=\"font-size: 18px\">Navigate(Payments1_1; ScreenTransition.Fade)\u00a0<\/span><\/pre>\r\n<span style=\"font-size: 18px\">La transici\u00f3n en <span style=\"color: #4e5865\"><b>fade<\/b><\/span> es como un aplauso elegante de tu App de control financiero por un trabajo bien hecho.\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\">Y as\u00ed, con este \u00faltimo paso, tu App de control financiero se convierte en la herramienta que te acompa\u00f1a en todo el ciclo: desde registrar una factura, enlazar pagos, validar informaci\u00f3n y confirmar que todo qued\u00f3 perfecto.\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\">Pero esto no termina aqu\u00ed. Te invitamos a <span style=\"color: #4e5865\"><b>visitar nuestra <\/b><a style=\"color: #4e5865\" href=\"https:\/\/pevaar.com\/es\/blog\/page\/2\/\"><b>p\u00e1gina web<\/b><\/a><\/span> para seguir descubriendo c\u00f3mo optimizar tu <a class=\"Hyperlink SCXW137716328 BCX8\" href=\"https:\/\/pevaar.com\/blog\/2025\/09\/29\/power-apps-project-profitability-app\/\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"TextRun Underlined SCXW137716328 BCX8\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW137716328 BCX8\" data-ccp-charstyle=\"Hyperlink\">Aplicaci\u00f3n de rentabilidad de proyectos<\/span><\/span><\/a> de Power Apps con la mejor tecnolog\u00eda a tu alcance.\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\">Adem\u00e1s, no te pierdas los art\u00edculos anteriores de este m\u00f3dulo, explicamos como se construye el m\u00f3dulo de <a class=\"Hyperlink SCXW195086553 BCX8\" href=\"https:\/\/pevaar.com\/es\/blog\/2025\/10\/08\/gestion-administrativa-de-proyectos\/\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"TextRun Underlined SCXW195086553 BCX8\" lang=\"ES-ES\" xml:lang=\"ES-ES\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW195086553 BCX8\" data-ccp-charstyle=\"Hyperlink\">gesti\u00f3n administrativa de proyectos<\/span><\/span><\/a> paso a paso con f\u00f3rmulas que har\u00e1n tu experiencia mucho m\u00e1s sencilla y eficiente.\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\">\u00a1Dale un vistazo, aprende y lleva tu gesti\u00f3n al siguiente nivel!\u00a0<\/span>\r\n\r\n<span style=\"font-size: 18px\">No te quedes solo con la teor\u00eda: convierte tu gesti\u00f3n en acci\u00f3n. Agenda una llamada y descubre c\u00f3mo personalizar tu propia <strong data-start=\"660\" data-end=\"689\">App de control financiero<\/strong>.<\/span>[\/vc_column_text][\/vc_column][\/vc_row][vc_row][vc_column][vc_btn title=\u00bbHabla con un experto y resuelve tus dudas\u00bb style=\u00bb3d\u00bb shape=\u00bbrounded\u00bb color=\u00bbprimary\u00bb size=\u00bbxl\u00bb align=\u00bbcenter\u00bb i_icon_fontawesome=\u00bbfas fa-phone\u00bb hover_effect=\u00bbhover-icon-zoom\u00bb add_icon=\u00bbtrue\u00bb link=\u00bburl:https%3A%2F%2Fpevaar.com%2Fes%2Fagenda-una-llamada%2F|target:_blank\u00bb css_params=\u00bb\u00bb][\/vc_column][\/vc_row]<\/div>","protected":false},"excerpt":{"rendered":"[vc_row][vc_column][vc_btn title=\u00bbDescubre la App en acci\u00f3n: agenda tu llamada ahora\u00bb style=\u00bb3d\u00bb shape=\u00bbrounded\u00bb color=\u00bbprimary\u00bb size=\u00bblg\u00bb i_icon_fontawesome=\u00bbfas fa-phone\u00bb hover_effect=\u00bbhover-icon-zoom\u00bb add_icon=\u00bbtrue\u00bb link=\u00bburl:https%3A%2F%2Fpevaar.com%2Fes%2Fagenda-una-llamada%2F|target:_blank\u00bb css_params=\u00bb\u00bb][\/vc_column][\/vc_row][vc_row][vc_column][vc_column_text css=\u00bb\u00bb css_params=\u00bb\u00bb]Llevar la cuenta de facturas y pagos ya no tiene que sentirse como resolver un acertijo imposible. La App de control financiero se asegura de que cada peso est\u00e9 en su lugar. Con unos [&hellip;]","protected":false},"author":5,"featured_media":13716,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[333,299,334,298,173,316],"tags":[335,337,336,338],"class_list":["post-12994","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-control-financiero","category-digital-innovation","category-gestion-de-proyectos","category-power-apps","category-power-automate","category-software-empresarial","tag-app-de-control-financiero","tag-automatizacion-financiera","tag-gestion-de-ingresos","tag-power-apps-tutorial"],"featured_image_src":{"landsacpe":["\/wp-content\/uploads\/2025\/10\/ingresos-espanol-1140x445.webp",1140,445,true],"list":["\/wp-content\/uploads\/2025\/10\/ingresos-espanol-463x348.webp",463,348,true],"medium":["\/wp-content\/uploads\/2025\/10\/ingresos-espanol-300x200.webp",300,200,true],"full":["\/wp-content\/uploads\/2025\/10\/ingresos-espanol.webp",1200,800,false]},"_links":{"self":[{"href":"https:\/\/pevaar.com\/es\/wp-json\/wp\/v2\/posts\/12994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pevaar.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pevaar.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pevaar.com\/es\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/pevaar.com\/es\/wp-json\/wp\/v2\/comments?post=12994"}],"version-history":[{"count":16,"href":"https:\/\/pevaar.com\/es\/wp-json\/wp\/v2\/posts\/12994\/revisions"}],"predecessor-version":[{"id":13175,"href":"https:\/\/pevaar.com\/es\/wp-json\/wp\/v2\/posts\/12994\/revisions\/13175"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pevaar.com\/es\/wp-json\/wp\/v2\/media\/13716"}],"wp:attachment":[{"href":"https:\/\/pevaar.com\/es\/wp-json\/wp\/v2\/media?parent=12994"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pevaar.com\/es\/wp-json\/wp\/v2\/categories?post=12994"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pevaar.com\/es\/wp-json\/wp\/v2\/tags?post=12994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}