Clientes, condiciones y contactos — Pro
Localidad, dirección, teléfono, bloqueo, tarifa y descuentos configurados; contactos del cliente a pedido.
NO OFICIAL — NO VALIDADA EN UNA INSTALACIÓN ERP REAL.
Para ventas, atención al cliente y responsables comerciales: filtra por localidad y bloqueo registrado. Consulta cliente, razón social, teléfono, dirección, localidad, clasificación fiscal y alta del registro. La ficha añade tarifa y valores configurados de descuento/pronto pago. Abre Contactos para leer, a pedido, los nombres y correos asociados al mismo cliente. Las claves internas no aparecen en las tarjetas ni en Detalles.
¿Por qué Cifru? Adapta las configuraciones a tu forma de trabajar. Elige los campos, filtros y detalles que necesitas y lleva al móvil información que quizá no esté disponible en la aplicación móvil de tu software de gestión. Las opciones dependen de los datos accesibles en tu fuente autorizada y de tu plan Cifru.
Pro: una fuente, un botón Home, dos listas/Detalles y un sub-botón inicialmente cerrado. SELECT únicamente; 2.000 clientes y 200 contactos por lectura, sin actualización periódica. Localidad y bloqueo son filtros nativos antes del límite final, no permisos ni garantía de catálogo completo. Sin filtro de alta por defecto: no oculta clientes antiguos. Reduce el ámbito si alcanzas el límite; busca y filtra localmente solo entre filas cargadas.
Son DATOS ACTUALES del registro, no una instantánea histórica ni una lista de facturas o saldos. El tipo del cliente proviene de Clientes_Tipos.Descrip en el ejemplo fiscal, no de un estado activo/inactivo inventado. Bloqueado=0 se muestra como Sin bloqueo según el ejemplo oficial; NULL y otros códigos se conservan sin adivinar su significado. Esto no certifica autorización para operar o vender. Alta no es última modificación ni fecha de contrato.
Tarifa es la descripción de la lista configurada, no el precio final de un artículo. Descuento y pronto pago son valores originales: confirma unidades y escala en tu instalación; no fuerza porcentajes, moneda, descuentos acumulados o cálculos. No convierte códigos desconocidos de moneda/pago en nombres, ni calcula deuda o riesgo. Los datos económicos, el tipo y la tarifa se enriquecen solo con correspondencia única; una referencia ausente o ambigua conserva al cliente, muestra el diagnóstico y no multiplica sus filas.
Contactos usa IdCliente y el ámbito IdTipo=0 del ejemplo ERP5 HF68. Verifica ese ámbito en tu edición antes de importar. Nombre y E_Mail están documentados en ejemplos distintos; no se presume teléfono personal, cargo, contacto principal o dirección propia. El teléfono del cliente no se presenta como teléfono del contacto. El hijo vuelve a validar la identidad única del cliente y usa su contexto actual, no una copia histórica. Identidad propuesta de contacto: cliente+tipo+contacto con longitudes UTF-16; no es certificación de una PK física. Identidades incompletas o duplicadas se excluyen, sin elegir arbitrariamente una fila. Esto no prueba ausencia de datos.
Base documental: ejemplos físicos oficiales 4.2.1, 4.4.2300/4.4.2400, 5.0.0 hotfix68 y ejemplos sin edición indicada. No certifican una sola instalación ERP5. Requiere objetos existentes dbo.Clientes_Datos, Clientes_Tipos, Clientes_Datos_Economicos, Listas_Precios_Cli y Clientes_Contactos; dbo es requisito del adaptador, no owner universal demostrado. Confirma objetos, columnas, tipos de fecha, unicidad, escala, versión, índices y tiempos de lectura. No crea objetos, ejecuta procedimientos Z, inserta datos o cambia permisos/contexto ERP.
Acceso SQL dedicado con SELECT mínimo aprobado por tu organización. SQL directo NO hereda automáticamente las sesiones, delegaciones, visibilidad por empresa/empleado ni controles de AHORA/Flexygo. El administrador debe limitar la base y filas autorizadas en la fuente; filtros Cifru no son ACL. No reutilices cuentas administrativas. El paquete no contiene servidores, contraseñas, filas reales, NIF, bancos o identificadores fiscales.
Comprobaciones documentales y sintéticas, no ejecución en AHORA, SQL Server o iOS reales. Valida la lectura y las relaciones con acceso autorizado antes de importar. Capturas reales de Cifru Android con datos DEMO enteramente ficticios; sin conexión a un AHORA real. Las pruebas no garantizan compatibilidad universal, rendimiento, seguridad de tu servidor ni límites de licencia ERP.
Documentación física: https://ahora.freshdesk.com/support/solutions/articles/154000128049-transact-sql-consultas-de-uni%C3%B3n ; https://ahora.freshdesk.com/support/solutions/articles/154000128342-grid-todo-lo-que-debes-saber-sobre-este-control ; https://ahora.freshdesk.com/support/solutions/articles/154000128205-actualizaci%C3%B3n-a-las-versiones-4-4-2300-y-4-4-2400 ; https://ahora.freshdesk.com/support/solutions/articles/154000218962-consultas-parametrizadas ; https://ahora.freshdesk.com/support/solutions/articles/154000128373-utilidades-sql-ejemplo-de-stored-de-integraci%C3%B3n-de-pedidos-con-erp ; https://help.flexygo.com/support/solutions/articles/154000130199-configurar-una-app-offline-en-framework ; https://ahoraa.freshdesk.com/support/solutions/articles/44001739696-script-enviar-por-email-listados-en-pdf
Cobertura de la galería: 5 imágenes complementarias muestran la tarjeta completa de un cliente DEMO, 11 datos de negocio y tres diagnósticos de correspondencia en Detalles, y los cuatro datos del contacto seleccionado, con Contactos realmente abierto. No muestran todos los clientes/contactos o casos adversarios. Cifru Android con transporte sintético local, no conexión a AHORA/SQL Server real ni prueba iOS, rendimiento o compra Pro. Home, lista amplia y RAW quedan privados; guía SQL separada.
Screenshots
What this package creates
- Home: Clientes y condiciones
- Details: Contactos
- Sub-button: Contactos del cliente
Sources are mapped locally and verified before applying.
Custom queriesPRO2 SQL
Custom queries are a PRO feature. Cifru repeats read-only validation against the local source before execution.
$.components.workspaceSelection.datasets.0.sqlQuerySELECT CAST(c.IdCliente AS nvarchar(max)) AS CustomerKey, c.Cliente AS Customer, c.RazonSocial AS LegalName, c.NumTelefono AS Phone, c.Direccion AS Address, c.Ciudad AS City, COALESCE(NULLIF(c.Cliente,N''),NULLIF(c.RazonSocial,N''),N'Cliente sin nombre') AS RecordTitle, t.Descrip AS CustomerType, CONVERT(nvarchar(max),c.FechaAlta,126) AS CreatedAt, CASE WHEN c.Bloqueado IS NULL THEN N'Bloqueo sin dato' WHEN c.Bloqueado=0 THEN N'Sin bloqueo (0)' ELSE CONCAT(N'Bloqueo: ',c.Bloqueado,N' — código') END AS BlockState, l.Descrip AS Tariff, e.Descuento AS Discount, e.ProntoPago AS EarlyDiscount, CASE WHEN e.IdCliente IS NULL THEN N'Sin correspondencia única autorizada' ELSE N'Registro único actual' END AS EconomicsState, CASE WHEN t.IdTipo IS NULL THEN N'Sin correspondencia única autorizada' ELSE N'Registro único actual' END AS TypeState, CASE WHEN l.IdLista IS NULL THEN N'Sin correspondencia única autorizada' ELSE N'Registro único actual' END AS TariffState FROM dbo.Clientes_Datos c LEFT JOIN dbo.Clientes_Tipos t ON t.IdTipo=c.IdTipo AND (SELECT COUNT_BIG(*) FROM dbo.Clientes_Tipos q_clientes_tipos WHERE q_clientes_tipos.IdTipo=t.IdTipo)=1 LEFT JOIN dbo.Clientes_Datos_Economicos e ON e.IdCliente=c.IdCliente AND (SELECT COUNT_BIG(*) FROM dbo.Clientes_Datos_Economicos q_clientes_datos_economicos WHERE q_clientes_datos_economicos.IdCliente=e.IdCliente)=1 LEFT JOIN dbo.Listas_Precios_Cli l ON l.IdLista=e.IdLista AND (SELECT COUNT_BIG(*) FROM dbo.Listas_Precios_Cli q_listas_precios_cli WHERE q_listas_precios_cli.IdLista=l.IdLista)=1 WHERE c.IdCliente IS NOT NULL AND (SELECT COUNT_BIG(*) FROM dbo.Clientes_Datos q_clientes_datos WHERE q_clientes_datos.IdCliente=c.IdCliente)=1
static read-only checks passed
$.components.workspaceSelection.datasets.1.sqlQuerySELECT CAST(c.IdCliente AS nvarchar(max)) AS CustomerKey, c.Cliente AS Customer, c.Ciudad AS City, CONCAT(DATALENGTH(CAST(k.IdCliente AS nvarchar(max))), N':', CAST(k.IdCliente AS nvarchar(max)), N'|' , DATALENGTH(CAST(k.IdTipo AS nvarchar(max))), N':', CAST(k.IdTipo AS nvarchar(max)), N'|' , DATALENGTH(CAST(k.IdContacto AS nvarchar(max))), N':', CAST(k.IdContacto AS nvarchar(max)), N'|' ) AS ContactKey, k.Nombre AS Contact, k.E_Mail AS Email FROM dbo.Clientes_Contactos k INNER JOIN dbo.Clientes_Datos c ON c.IdCliente=k.IdCliente WHERE c.IdCliente=:customer AND c.IdCliente IS NOT NULL AND (SELECT COUNT_BIG(*) FROM dbo.Clientes_Datos q_clientes_datos WHERE q_clientes_datos.IdCliente=c.IdCliente)=1 AND k.IdTipo=0 AND k.IdContacto IS NOT NULL AND (SELECT COUNT_BIG(*) FROM dbo.Clientes_Contactos q_clientes_contactos WHERE q_clientes_contactos.IdCliente=k.IdCliente AND q_clientes_contactos.IdTipo=k.IdTipo AND q_clientes_contactos.IdContacto=k.IdContacto)=1
static read-only checks passed
View the JSON being importedcollapsed by default
{
"components": {
"sourceSlots": [
{
"displayName": "AHORA ERP — SQL Server autorizado",
"id": "EC3BCD6F-540F-50AD-B262-BA611C7DB79C",
"kind": "sqlServer",
"requiredObjects": [
"dbo.Clientes_Datos",
"dbo.Clientes_Tipos",
"dbo.Clientes_Datos_Economicos",
"dbo.Listas_Precios_Cli",
"dbo.Clientes_Contactos"
],
"requiresCustomSQL": true
}
],
"workspaceSelection": {
"commonFields": [],
"datasets": [
{
"cacheMode": "live",
"calculatedFields": [],
"customQueryIntegrationName": "AHORA ERP",
"endpointPath": "",
"fetchSortRules": [
{
"direction": "ascending",
"id": "EC949014-D73A-5B95-9D94-7300FFCE1DA7",
"key": "Customer",
"type": "text"
},
{
"direction": "ascending",
"id": "D389B707-4A2F-5643-8EAA-D9F4FE890B9E",
"key": "CustomerKey",
"type": "text"
}
],
"id": "C15DDE46-2368-5658-9437-AF7FFBA3D6E9",
"mappings": [
{
"commonFieldKey": "",
"key": "CustomerKey",
"label": "Identidad interna no visible",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CustomerKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "Customer",
"label": "Cliente actual",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "Customer",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "LegalName",
"label": "Razón social",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "LegalName",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "Phone",
"label": "Teléfono del cliente",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "Phone",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "Address",
"label": "Dirección del cliente",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "Address",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "City",
"label": "Localidad",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "City",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "RecordTitle",
"label": "Título de presentación",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "RecordTitle",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "CustomerType",
"label": "Tipo fiscal del cliente",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CustomerType",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "CreatedAt",
"label": "Alta en el registro",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CreatedAt",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "BlockState",
"label": "Bloqueo registrado",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "BlockState",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "Tariff",
"label": "Tarifa configurada",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "Tariff",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "Discount",
"label": "Descuento configurado",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "Discount",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "EarlyDiscount",
"label": "Pronto pago configurado",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "EarlyDiscount",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "EconomicsState",
"label": "Datos económicos",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "EconomicsState",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "TypeState",
"label": "Datos de clasificación",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "TypeState",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "TariffState",
"label": "Datos de la tarifa",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "TariffState",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
}
],
"maxRows": 2000,
"name": "Clientes y condiciones",
"primaryKey": "CustomerKey",
"queryParameters": [],
"refreshPolicy": {
"enabled": false,
"intervalMinutes": 60
},
"rootArrayPath": "",
"rowLimitEnabled": true,
"searchKeys": [
"Customer",
"LegalName",
"Phone",
"Address",
"City",
"CustomerType",
"CreatedAt",
"BlockState",
"Tariff",
"Discount",
"EarlyDiscount",
"EconomicsState",
"TypeState",
"TariffState"
],
"sourceID": "EC3BCD6F-540F-50AD-B262-BA611C7DB79C",
"sqlQuery": "SELECT CAST(c.IdCliente AS nvarchar(max)) AS CustomerKey, c.Cliente AS Customer, c.RazonSocial AS LegalName, c.NumTelefono AS Phone, c.Direccion AS Address, c.Ciudad AS City, COALESCE(NULLIF(c.Cliente,N''),NULLIF(c.RazonSocial,N''),N'Cliente sin nombre') AS RecordTitle, t.Descrip AS CustomerType, CONVERT(nvarchar(max),c.FechaAlta,126) AS CreatedAt, CASE WHEN c.Bloqueado IS NULL THEN N'Bloqueo sin dato' WHEN c.Bloqueado=0 THEN N'Sin bloqueo (0)' ELSE CONCAT(N'Bloqueo: ',c.Bloqueado,N' — código') END AS BlockState, l.Descrip AS Tariff, e.Descuento AS Discount, e.ProntoPago AS EarlyDiscount, CASE WHEN e.IdCliente IS NULL THEN N'Sin correspondencia única autorizada' ELSE N'Registro único actual' END AS EconomicsState, CASE WHEN t.IdTipo IS NULL THEN N'Sin correspondencia única autorizada' ELSE N'Registro único actual' END AS TypeState, CASE WHEN l.IdLista IS NULL THEN N'Sin correspondencia única autorizada' ELSE N'Registro único actual' END AS TariffState FROM dbo.Clientes_Datos c LEFT JOIN dbo.Clientes_Tipos t ON t.IdTipo=c.IdTipo AND (SELECT COUNT_BIG(*) FROM dbo.Clientes_Tipos q_clientes_tipos WHERE q_clientes_tipos.IdTipo=t.IdTipo)=1 LEFT JOIN dbo.Clientes_Datos_Economicos e ON e.IdCliente=c.IdCliente AND (SELECT COUNT_BIG(*) FROM dbo.Clientes_Datos_Economicos q_clientes_datos_economicos WHERE q_clientes_datos_economicos.IdCliente=e.IdCliente)=1 LEFT JOIN dbo.Listas_Precios_Cli l ON l.IdLista=e.IdLista AND (SELECT COUNT_BIG(*) FROM dbo.Listas_Precios_Cli q_listas_precios_cli WHERE q_listas_precios_cli.IdLista=l.IdLista)=1 WHERE c.IdCliente IS NOT NULL AND (SELECT COUNT_BIG(*) FROM dbo.Clientes_Datos q_clientes_datos WHERE q_clientes_datos.IdCliente=c.IdCliente)=1",
"tableName": ""
},
{
"cacheMode": "live",
"calculatedFields": [],
"customQueryIntegrationName": "AHORA ERP",
"endpointPath": "",
"fetchSortRules": [
{
"direction": "ascending",
"id": "55473EED-7179-5C02-B339-8D24038CCA58",
"key": "Contact",
"type": "text"
},
{
"direction": "ascending",
"id": "992EF8B7-F10C-54B1-A8C7-5989E8B1BD96",
"key": "ContactKey",
"type": "text"
}
],
"id": "60A443AA-291C-5BEE-9CF4-D83B66F7326F",
"mappings": [
{
"commonFieldKey": "",
"key": "CustomerKey",
"label": "Identidad interna no visible",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "CustomerKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "Customer",
"label": "Cliente actual",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "Customer",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "City",
"label": "Localidad",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "City",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
},
{
"commonFieldKey": "",
"key": "ContactKey",
"label": "Identidad interna no visible",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "ContactKey",
"type": "text",
"visibleInDetail": false,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "Contact",
"label": "Nombre del contacto",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "Contact",
"type": "text",
"visibleInDetail": true,
"visibleInList": false
},
{
"commonFieldKey": "",
"key": "Email",
"label": "Correo del contacto",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text",
"sourceColumn": "Email",
"type": "text",
"visibleInDetail": true,
"visibleInList": true
}
],
"maxRows": 200,
"name": "Contactos del cliente",
"primaryKey": "ContactKey",
"queryParameters": [
{
"constantValue": "",
"dayOffset": 0,
"fieldKey": "CustomerKey",
"id": "5DE0C520-5B45-59A2-8225-3262073B9D9D",
"name": "customer",
"source": "parentField",
"type": "text"
}
],
"refreshPolicy": {
"enabled": false,
"intervalMinutes": 60
},
"rootArrayPath": "",
"rowLimitEnabled": true,
"searchKeys": [
"Customer",
"City",
"Contact",
"Email"
],
"sourceID": "EC3BCD6F-540F-50AD-B262-BA611C7DB79C",
"sqlQuery": "SELECT CAST(c.IdCliente AS nvarchar(max)) AS CustomerKey, c.Cliente AS Customer, c.Ciudad AS City, CONCAT(DATALENGTH(CAST(k.IdCliente AS nvarchar(max))), N':', CAST(k.IdCliente AS nvarchar(max)), N'|' , DATALENGTH(CAST(k.IdTipo AS nvarchar(max))), N':', CAST(k.IdTipo AS nvarchar(max)), N'|' , DATALENGTH(CAST(k.IdContacto AS nvarchar(max))), N':', CAST(k.IdContacto AS nvarchar(max)), N'|' ) AS ContactKey, k.Nombre AS Contact, k.E_Mail AS Email FROM dbo.Clientes_Contactos k INNER JOIN dbo.Clientes_Datos c ON c.IdCliente=k.IdCliente WHERE c.IdCliente=:customer AND c.IdCliente IS NOT NULL AND (SELECT COUNT_BIG(*) FROM dbo.Clientes_Datos q_clientes_datos WHERE q_clientes_datos.IdCliente=c.IdCliente)=1 AND k.IdTipo=0 AND k.IdContacto IS NOT NULL AND (SELECT COUNT_BIG(*) FROM dbo.Clientes_Contactos q_clientes_contactos WHERE q_clientes_contactos.IdCliente=k.IdCliente AND q_clientes_contactos.IdTipo=k.IdTipo AND q_clientes_contactos.IdContacto=k.IdContacto)=1",
"tableName": ""
}
],
"pages": [
{
"actions": [
{
"id": "C545301C-D9C4-5507-99B5-007AF6090A95",
"kind": "showRelated",
"relatedInitiallyExpanded": false,
"relatedPresentation": "separate",
"relatedPreviewLimit": 12,
"relatedRowStyle": "cards",
"relatedShowsCount": true,
"relationID": "B90054E6-0A22-5EDC-8BFC-EE441236124A",
"systemImage": "list.bullet.rectangle",
"targetDatasetID": "60A443AA-291C-5BEE-9CF4-D83B66F7326F",
"title": "Contactos",
"urlKey": ""
}
],
"badgeKey": "BlockState",
"cardEnrichments": [],
"cardFieldLayout": [
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "Phone",
"label": "Teléfono del cliente",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "City",
"label": "Localidad",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "CustomerType",
"label": "Tipo fiscal del cliente",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "Tariff",
"label": "Tarifa configurada",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
}
],
"datasetID": "C15DDE46-2368-5658-9437-AF7FFBA3D6E9",
"dateFilterKey": "",
"dateFilterLastDays": 7,
"dateFilterPreset": "none",
"detailFieldLayout": [
{
"detailGroup": "Cliente y dirección actual",
"detailRole": "information",
"isVisible": true,
"key": "Customer",
"label": "Cliente actual",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Cliente y dirección actual",
"detailRole": "information",
"isVisible": true,
"key": "LegalName",
"label": "Razón social",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Cliente y dirección actual",
"detailRole": "information",
"isVisible": true,
"key": "Phone",
"label": "Teléfono del cliente",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Cliente y dirección actual",
"detailRole": "information",
"isVisible": true,
"key": "Address",
"label": "Dirección del cliente",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Cliente y dirección actual",
"detailRole": "information",
"isVisible": true,
"key": "City",
"label": "Localidad",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Registro y clasificación",
"detailRole": "information",
"isVisible": true,
"key": "CustomerType",
"label": "Tipo fiscal del cliente",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Registro y clasificación",
"detailRole": "information",
"isVisible": true,
"key": "CreatedAt",
"label": "Alta en el registro",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Registro y clasificación",
"detailRole": "information",
"isVisible": true,
"key": "BlockState",
"label": "Bloqueo registrado",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Condiciones registradas — no un cálculo de precio",
"detailRole": "information",
"isVisible": true,
"key": "Tariff",
"label": "Tarifa configurada",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Condiciones registradas — no un cálculo de precio",
"detailRole": "information",
"isVisible": true,
"key": "Discount",
"label": "Descuento configurado",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Condiciones registradas — no un cálculo de precio",
"detailRole": "information",
"isVisible": true,
"key": "EarlyDiscount",
"label": "Pronto pago configurado",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Condiciones registradas — no un cálculo de precio",
"detailRole": "information",
"isVisible": true,
"key": "EconomicsState",
"label": "Datos económicos",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Registro y clasificación",
"detailRole": "information",
"isVisible": true,
"key": "TypeState",
"label": "Datos de clasificación",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Condiciones registradas — no un cálculo de precio",
"detailRole": "information",
"isVisible": true,
"key": "TariffState",
"label": "Datos de la tarifa",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
}
],
"detailLiveRefreshSeconds": 0,
"fixedFilters": [],
"id": "A5B18DAF-3F1D-5078-B868-DDE528F5C4E9",
"openFilters": [
{
"id": "7FCE27D0-EA8B-5A5E-AF28-0B97FC311D02",
"includeAllOption": true,
"key": "City",
"title": "Elegir localidad",
"type": "text"
},
{
"id": "2E2138FA-B949-5630-926C-0753EAE13AB8",
"includeAllOption": true,
"key": "BlockState",
"title": "Bloqueo registrado",
"type": "text"
}
],
"pageSize": 100,
"requiresOpeningFilterSelection": true,
"showOnHome": true,
"sortRules": [
{
"direction": "ascending",
"id": "EC949014-D73A-5B95-9D94-7300FFCE1DA7",
"key": "Customer",
"type": "text"
},
{
"direction": "ascending",
"id": "D389B707-4A2F-5643-8EAA-D9F4FE890B9E",
"key": "CustomerKey",
"type": "text"
}
],
"subtitle": "",
"subtitleKey": "LegalName",
"systemImage": "person.2",
"title": "Clientes y condiciones",
"titleKey": "RecordTitle"
},
{
"actions": [],
"badgeKey": "",
"cardEnrichments": [],
"cardFieldLayout": [
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "City",
"label": "Localidad",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "",
"detailRole": "information",
"isVisible": true,
"key": "Email",
"label": "Correo del contacto",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
}
],
"datasetID": "60A443AA-291C-5BEE-9CF4-D83B66F7326F",
"dateFilterKey": "",
"dateFilterLastDays": 7,
"dateFilterPreset": "none",
"detailFieldLayout": [
{
"detailGroup": "Cliente seleccionado — datos actuales",
"detailRole": "information",
"isVisible": true,
"key": "Customer",
"label": "Cliente actual",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Cliente seleccionado — datos actuales",
"detailRole": "information",
"isVisible": true,
"key": "City",
"label": "Localidad",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Contacto asociado",
"detailRole": "information",
"isVisible": true,
"key": "Contact",
"label": "Nombre del contacto",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
},
{
"detailGroup": "Contacto asociado",
"detailRole": "information",
"isVisible": true,
"key": "Email",
"label": "Correo del contacto",
"locationLabelKey": "",
"locationLongitudeKey": "",
"presentation": "text"
}
],
"detailLiveRefreshSeconds": 0,
"fixedFilters": [],
"id": "5416D772-60DF-5701-A215-8447C73D83BF",
"openFilters": [],
"pageSize": 100,
"requiresOpeningFilterSelection": false,
"showOnHome": false,
"sortRules": [
{
"direction": "ascending",
"id": "55473EED-7179-5C02-B339-8D24038CCA58",
"key": "Contact",
"type": "text"
},
{
"direction": "ascending",
"id": "992EF8B7-F10C-54B1-A8C7-5989E8B1BD96",
"key": "ContactKey",
"type": "text"
}
],
"subtitle": "",
"subtitleKey": "Customer",
"systemImage": "person.crop.circle",
"title": "Contactos del cliente",
"titleKey": "Contact"
}
],
"relations": [
{
"childDatasetID": "60A443AA-291C-5BEE-9CF4-D83B66F7326F",
"childKey": "CustomerKey",
"id": "B90054E6-0A22-5EDC-8BFC-EE441236124A",
"name": "Contactos",
"parentDatasetID": "C15DDE46-2368-5658-9437-AF7FFBA3D6E9",
"parentKey": "CustomerKey"
}
],
"widgets": []
}
},
"format": "cifru-configuration-package",
"formatVersion": 1,
"manifest": {
"applicationName": "AHORA ERP",
"changelog": "Nuevo dosier Pro de clientes, condiciones actuales y contactos; galería nativa ficticia, no validado en ERP real.",
"configurationLanguages": [
"es"
],
"countries": [
"ES"
],
"createdAt": "2026-10-11T00:00:00Z",
"description": "NO OFICIAL — NO VALIDADA EN UNA INSTALACIÓN ERP REAL.\n\nPara ventas, atención al cliente y responsables comerciales: filtra por localidad y bloqueo registrado. Consulta cliente, razón social, teléfono, dirección, localidad, clasificación fiscal y alta del registro. La ficha añade tarifa y valores configurados de descuento/pronto pago. Abre Contactos para leer, a pedido, los nombres y correos asociados al mismo cliente. Las claves internas no aparecen en las tarjetas ni en Detalles.\n\n¿Por qué Cifru? Adapta las configuraciones a tu forma de trabajar. Elige los campos, filtros y detalles que necesitas y lleva al móvil información que quizá no esté disponible en la aplicación móvil de tu software de gestión. Las opciones dependen de los datos accesibles en tu fuente autorizada y de tu plan Cifru.\n\nPro: una fuente, un botón Home, dos listas/Detalles y un sub-botón inicialmente cerrado. SELECT únicamente; 2.000 clientes y 200 contactos por lectura, sin actualización periódica. Localidad y bloqueo son filtros nativos antes del límite final, no permisos ni garantía de catálogo completo. Sin filtro de alta por defecto: no oculta clientes antiguos. Reduce el ámbito si alcanzas el límite; busca y filtra localmente solo entre filas cargadas.\n\nSon DATOS ACTUALES del registro, no una instantánea histórica ni una lista de facturas o saldos. El tipo del cliente proviene de Clientes_Tipos.Descrip en el ejemplo fiscal, no de un estado activo/inactivo inventado. Bloqueado=0 se muestra como Sin bloqueo según el ejemplo oficial; NULL y otros códigos se conservan sin adivinar su significado. Esto no certifica autorización para operar o vender. Alta no es última modificación ni fecha de contrato.\n\nTarifa es la descripción de la lista configurada, no el precio final de un artículo. Descuento y pronto pago son valores originales: confirma unidades y escala en tu instalación; no fuerza porcentajes, moneda, descuentos acumulados o cálculos. No convierte códigos desconocidos de moneda/pago en nombres, ni calcula deuda o riesgo. Los datos económicos, el tipo y la tarifa se enriquecen solo con correspondencia única; una referencia ausente o ambigua conserva al cliente, muestra el diagnóstico y no multiplica sus filas.\n\nContactos usa IdCliente y el ámbito IdTipo=0 del ejemplo ERP5 HF68. Verifica ese ámbito en tu edición antes de importar. Nombre y E_Mail están documentados en ejemplos distintos; no se presume teléfono personal, cargo, contacto principal o dirección propia. El teléfono del cliente no se presenta como teléfono del contacto. El hijo vuelve a validar la identidad única del cliente y usa su contexto actual, no una copia histórica. Identidad propuesta de contacto: cliente+tipo+contacto con longitudes UTF-16; no es certificación de una PK física. Identidades incompletas o duplicadas se excluyen, sin elegir arbitrariamente una fila. Esto no prueba ausencia de datos.\n\nBase documental: ejemplos físicos oficiales 4.2.1, 4.4.2300/4.4.2400, 5.0.0 hotfix68 y ejemplos sin edición indicada. No certifican una sola instalación ERP5. Requiere objetos existentes dbo.Clientes_Datos, Clientes_Tipos, Clientes_Datos_Economicos, Listas_Precios_Cli y Clientes_Contactos; dbo es requisito del adaptador, no owner universal demostrado. Confirma objetos, columnas, tipos de fecha, unicidad, escala, versión, índices y tiempos de lectura. No crea objetos, ejecuta procedimientos Z, inserta datos o cambia permisos/contexto ERP.\n\nAcceso SQL dedicado con SELECT mínimo aprobado por tu organización. SQL directo NO hereda automáticamente las sesiones, delegaciones, visibilidad por empresa/empleado ni controles de AHORA/Flexygo. El administrador debe limitar la base y filas autorizadas en la fuente; filtros Cifru no son ACL. No reutilices cuentas administrativas. El paquete no contiene servidores, contraseñas, filas reales, NIF, bancos o identificadores fiscales.\n\nComprobaciones documentales y sintéticas, no ejecución en AHORA, SQL Server o iOS reales. Valida la lectura y las relaciones con acceso autorizado antes de importar. Capturas reales de Cifru Android con datos DEMO enteramente ficticios; sin conexión a un AHORA real. Las pruebas no garantizan compatibilidad universal, rendimiento, seguridad de tu servidor ni límites de licencia ERP.\n\nDocumentación física: https://ahora.freshdesk.com/support/solutions/articles/154000128049-transact-sql-consultas-de-uni%C3%B3n ; https://ahora.freshdesk.com/support/solutions/articles/154000128342-grid-todo-lo-que-debes-saber-sobre-este-control ; https://ahora.freshdesk.com/support/solutions/articles/154000128205-actualizaci%C3%B3n-a-las-versiones-4-4-2300-y-4-4-2400 ; https://ahora.freshdesk.com/support/solutions/articles/154000218962-consultas-parametrizadas ; https://ahora.freshdesk.com/support/solutions/articles/154000128373-utilidades-sql-ejemplo-de-stored-de-integraci%C3%B3n-de-pedidos-con-erp ; https://help.flexygo.com/support/solutions/articles/154000130199-configurar-una-app-offline-en-framework ; https://ahoraa.freshdesk.com/support/solutions/articles/44001739696-script-enviar-por-email-listados-en-pdf\n\nCobertura de la galería: 5 imágenes complementarias muestran la tarjeta completa de un cliente DEMO, 11 datos de negocio y tres diagnósticos de correspondencia en Detalles, y los cuatro datos del contacto seleccionado, con Contactos realmente abierto. No muestran todos los clientes/contactos o casos adversarios. Cifru Android con transporte sintético local, no conexión a AHORA/SQL Server real ni prueba iOS, rendimiento o compra Pro. Home, lista amplia y RAW quedan privados; guía SQL separada.",
"licenseCode": "Cifru-Community-1.0",
"minimumCifruVersion": "1.1.0",
"minimumPlan": "pro",
"packageID": "5E4724A1-1619-5D76-BCF3-1250FD8E8DAC",
"rootButtonCount": 1,
"summary": "Localidad, dirección, teléfono, bloqueo, tarifa y descuentos configurados; contactos del cliente a pedido.",
"tags": [
"AHORA ERP",
"SQL Server",
"Clientes",
"Contactos",
"Ventas",
"Pro"
],
"title": "Clientes, condiciones y contactos — Pro"
}
}