Hacer coincidir varias facturas de proveedores con una única orden de compra es una tarea común en muchos procesos de AP, por lo que es mejor saber cómo manejar esta situación en NetSuite. La buena noticia es que Oracle tiene un montón de opciones para ayudarlo a agilizar este proceso: puede usar la interfaz de usuario de NetSuite, la API o SuiteScript.
En esta guía, exploraremos cómo vincular una única orden de compra a varias facturas de proveedores mediante cada uno de estos métodos. También analizaremos las limitaciones y los beneficios de usar las API.
Es importante tener en cuenta que la complejidad de la API de NetSuite puede ser abrumadora. Se necesita mucho tiempo (y esfuerzo) para configurar una integración de API y automatizar los flujos de trabajo de NetSuite.
Ahí es donde entra Nanonets, proporcionando Una integración plug-and-play con NetSuite Esto elimina las molestias y la confusión, haciendo que la automatización de la correspondencia de órdenes de compra sea muy sencilla.
Nanonets automatiza el ingreso de facturas de proveedores en NetSuite y configura una conciliación perfecta de órdenes de compra de 2 y 3 vías en menos de 15 minutos.
Pero antes de adelantarnos demasiado, primero entendamos cómo hacer coincidir múltiples facturas de proveedores con una orden de compra con facilidad.
Cómo hacer coincidir una orden de compra con varias facturas de proveedores en la interfaz de usuario de NetSuite
Usar la interfaz de usuario de NetSuite para hacer coincidir una única orden de compra (OC) con varias facturas de proveedores es una tarea sencilla, ideal para operaciones más pequeñas o empresas que no necesitan automatización. Este método le permite crear facturas para diferentes artículos de una OC o para cantidades parciales de artículos.
Instrucciones paso a paso:
- Acceder a la Orden de Compra:
- Navegar a Transacciones > Compras > Ingresar órdenes de compra para localizar la OC que desea hacer coincidir.
- Facturar la orden de compra:
- Hacer clic en Factura en la fila de encabezado superior de la orden de compra.
- Editar los detalles de la línea de factura:
- De forma predeterminada, todas las líneas de la orden de compra se agregarán a la factura del proveedor. Puede eliminar las líneas que no sean necesarias, de modo que la orden de compra solo se facture parcialmente por las líneas de artículos requeridas.
- En caso de que necesite facturar parcialmente alguna línea (por ejemplo, si no ha recibido la cantidad completa de ese artículo), puede editar la cantidad facturada en esta etapa.
- Repetir para facturas de proveedores adicionales:
- Si la orden de compra requiere varias facturas, repita el proceso y seleccione los artículos o cantidades restantes en la orden de compra.
Tenga en cuenta que las facturas de proveedores creadas NO aparecerán en la subpestaña “Facturación” de la orden de compra. Solo estarán visibles en los registros relacionados. Esto se debe a que NetSuite solo realiza una actualización única mediante su función “Transformar” para convertir una orden de compra en una factura de proveedor.
Cómo hacer coincidir una orden de compra con varias facturas de proveedores mediante la API
NetSuite ofrece API SOAP y REST (son dos tecnologías API diferentes que suelen utilizar los desarrolladores). Si bien la API SOAP es más antigua y madura, también puede tener un rendimiento lento. La API REST de NetSuite es más moderna (Oracle la introdujo en 2019), pero no tiene las amplias capacidades de soporte y personalización que tiene la API SOAP.
Para este artículo, utilizaremos el ejemplo de la API SOAP para hacer la correspondencia de órdenes de compra con facturas de proveedores.
Hay dos enfoques que puede adoptar para vincular una orden de compra a una factura de proveedor:
- Utilice el Lista de pedidos de compra Etiqueta para hacer referencia a una orden de compra al crear la factura del proveedor – Al hacer esto, se incluirán TODOS los artículos y gastos presentes en esa orden de compra.
- Utilice un Inicializar Solicitar y seleccionar líneas de artículos y gastos de órdenes de compra existentes – Hacer esto tiene la ventaja de poder seleccionar líneas específicas de la orden de compra. También puede utilizar esto para abordar el caso de uso de múltiples órdenes de compra en una sola factura de proveedor.
Instrucciones paso a paso:
- Recuperar el registro de la orden de compra:
Recupere los detalles de la orden de compra utilizando el get
Operación. Esto proporciona acceso a los artículos de línea, cantidades y cantidades restantes de la orden de compra.
Carga útil:
- Crear factura de proveedor para la primera factura:
Como vimos anteriormente, si utiliza el enfoque 1, utilice el add
operación para crear una factura de proveedor para el primer conjunto de artículos de línea o cantidades de la orden de compra.
Carga útil:
Si utiliza el enfoque 2, la carga útil será:
vendorBill
3. Repita el procedimiento para facturas de proveedores adicionales:
- Repita el proceso para agregar más facturas, ajustando los artículos de línea y las cantidades para cada factura de proveedor.
API SOAP vs API REST: Diferencias clave
Entraremos en un poco más de detalle, ya que esto es algo que surge a menudo en el desarrollo de NetSuite: ¿cuál es la diferencia, realmente, entre estos dos tipos de API proporcionadas por Oracle?
API SOAP:
- Autenticación: SOAP utiliza autenticación basada en tokens (TBA), que se basa en OAuth1. Aunque es más antigua, tiene un buen soporte en entornos empresariales y es relativamente fácil de configurar.
- Manejo de metadatos: SOAP maneja bien las entidades y campos estándar, pero tiene dificultades con los campos personalizados sin soluciones alternativas adicionales.
- Búsquedas guardadas y archivadores: SOAP proporciona soporte integrado para búsquedas guardadas y operaciones de archivadores, lo que lo convierte en la opción preferida para tareas complejas de recuperación de datos.
- Actuación: SOAP es lento (pero estable) e ideal para integraciones grandes y complejas, aunque la sintaxis es más detallada y desafiante en comparación con REST.
1. Si está realizando integraciones a gran escala o complejas que casi con certeza implicarán operaciones no estándar, movimiento de archivos, etc.
2. Para cualquier implementación de autoservicio (dado que la documentación es extensa y hay un historial de integraciones exitosas realizadas por otros)
API REST:
- Flexibilidad de autenticación: REST admite OAuth2 además de TBA. Sin embargo, OAuth2 en NetSuite tiene algunas salvedades, como vencimientos frecuentes de tokens para el método de concesión de código de autorización.
- Manejo de metadatos: REST permite un acceso más dinámico a los metadatos, lo que lo hace útil para entornos donde las estructuras de las entidades cambian con frecuencia. REST también admite esquemas OpenAPI, incluidos los campos personalizados.
- Soporte de SuiteQL: REST incluye soporte para SuiteQL, que puede simplificar significativamente consultas complejas al permitir consultas similares a SQL a través de la API.
- Limitaciones: REST es relativamente nuevo en NetSuite y muchos registros aún están en versión beta. Las funciones críticas, como las búsquedas guardadas y el acceso a los archivadores, requieren soluciones alternativas, como Restlets personalizados.
1. Para implementaciones más rápidas y de pequeña escala, donde se trabaja principalmente con objetos estándar (como cliente, Orden de venta, factura etcétera).
2. Para los casos en los que OAuth2 es obligatorio según los requisitos de autenticación del cliente
Cómo hacer coincidir una orden de compra con las facturas de proveedores mediante SuiteScript
Para las empresas que requieren una solución altamente personalizada, SuiteScript ofrece una potente plataforma de programación basada en JavaScript para vincular las órdenes de compra con las facturas de varios proveedores. SuiteScript permite un control total sobre los flujos de trabajo y es más útil en los casos en los que la personalización es importante.
Instrucciones paso a paso:
- Cargar la orden de compra:
var poRecord = record.load({
type: record.Type.PURCHASE_ORDER,
id: 'PO_ID'
});
Utilice SuiteScript record.load
Método para acceder a la orden de compra.
2. Crear la factura del proveedor:
define(('N/record', 'N/search'), function(record, search) {
function createVendorBillFromPO(poId) {
try {
// Load the Purchase Order record
var purchaseOrder = record.load({
type: record.Type.PURCHASE_ORDER,
id: poId
});
// Create a new Vendor Bill
var vendorBill = record.create({
type: record.Type.VENDOR_BILL,
isDynamic: true
});
// Set the Vendor and other basic details from the PO
vendorBill.setValue({
fieldId: 'entity',
value: purchaseOrder.getValue('entity') // Vendor from PO
});
// Copy over any other header-level fields from the PO if necessary
// (e.g. terms, subsidiary, etc.)
vendorBill.setValue({
fieldId: 'terms',
value: purchaseOrder.getValue('terms')
});
// Add PO line items to the Vendor Bill
var lineCount = purchaseOrder.getLineCount({ sublistId: 'item' });
for (var i = 0; i < lineCount; i++) {
var orderdoc = purchaseOrder.getSublistValue({
sublistId: 'item',
fieldId: 'orderdoc',
line: i
});
var orderline = purchaseOrder.getSublistValue({
sublistId: 'item',
fieldId: 'orderline',
line: i
});
// Select the current line in the Vendor Bill
vendorBill.selectNewLine({ sublistId: 'item' });
// Set the necessary fields (orderdoc and orderline are important for matching)
vendorBill.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'orderdoc',
value: orderdoc // PO Internal ID
});
vendorBill.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'orderline',
value: orderline // PO line number
});
// Set the item, quantity, and rate (copying from PO)
vendorBill.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'item',
value: purchaseOrder.getSublistValue({
sublistId: 'item',
fieldId: 'item',
line: i
})
});
vendorBill.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity',
value: purchaseOrder.getSublistValue({
sublistId: 'item',
fieldId: 'quantity',
line: i
})
});
vendorBill.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'rate',
value: purchaseOrder.getSublistValue({
sublistId: 'item',
fieldId: 'rate',
line: i
})
});
// Commit the line to the Vendor Bill
vendorBill.commitLine({ sublistId: 'item' });
}
// Save the Vendor Bill
var vendorBillId = vendorBill.save();
log.debug('Vendor Bill created', 'Vendor Bill ID: ' + vendorBillId);
return vendorBillId;
} catch (e) {
log.error('Error creating Vendor Bill', e);
throw e;
}
}
return {
createVendorBillFromPO: createVendorBillFromPO
};
});
Cree un registro de factura de proveedor utilizando record.create
El código anterior copia todas las líneas de la orden de compra a la factura del proveedor. Si es necesario, puede seleccionar las líneas correspondientes de la orden de compra y asignarlas a la factura del proveedor. Esto le permite hacer coincidir cada línea de la orden de compra con la línea de la factura del proveedor.
3. Repita para varias facturas:
Utilice esta lógica para crear facturas de proveedores adicionales seleccionando las líneas de orden de compra restantes en ejecuciones de script posteriores.
Ventajas de SuiteScript:
- Personalización completa: SuiteScript ofrece control total sobre el proceso, lo que lo hace perfecto para flujos de trabajo de facturación únicos.
- Extensibilidad: Puede desarrollar fácilmente el script para gestionar otras necesidades personalizadas, como validación, registro o manejo de errores.
Errores comunes y solución de problemas
- La orden de compra está completamente facturada y recibida, pero aún se muestra Proyecto de ley pendiente
- Es probable que esto se deba a que la factura del proveedor se creó como una factura independiente (es decir, una factura no vinculada a una orden de compra). Puede verificar esto consultando la subpestaña Registros relacionados en la factura para ver si tiene un vínculo con la orden de compra (o verifique la entrada del diario: una factura independiente se etiquetará como Inventario, mientras que una factura vinculada a una orden de compra se etiquetará como Devengos).
- Quiero vincular una factura de proveedor donde la cantidad recibida es mayor que la orden de compra original
- En este caso, generalmente es mejor completar la recepción y la facturación, manteniendo esa información lo más precisa posible y luego ejecutar PVBV (Publicar variaciones en la factura del proveedor) en las líneas de la orden de compra para encontrar y ajustar los errores en las compras acumuladas y su GL.
- Quiero hacer coincidir varias órdenes de compra con una sola factura
- En algunos casos, es posible que desee asociar más de una orden de compra a una sola factura de proveedor (si, por ejemplo, recibió una factura combinada para muchas órdenes de compra del mismo proveedor). Esto se puede solucionar utilizando la API SOAP como se describe anteriormente, utilizando el Inicializar método.
Uso de la automatización del flujo de trabajo de extremo a extremo para la conciliación de órdenes de compra
Si utiliza NetSuite para administrar sus finanzas y operaciones de CRM, es muy probable que ya esté ejecutando una implementación de producción de NetSuite y que todos sus flujos de trabajo estén configurados y se utilicen a diario.
En tal escenario, podría ser más fácil trabajar con un socio de integración que pueda migrar sus procesos y automatizar un entorno de producción, sin que usted tenga que meterse en los detalles confusos de las integraciones de API y las consultas de SuiteQL.
– Más del 80% de ahorro de tiempo en la conciliación de órdenes de compra
– Validación y formato de datos integrados para NetSuite
– IA entrenable y de alta precisión
Así es como se ve la automatización a gran escala de NetSuite en Nanonets:
¿Le interesa obtener más información? Una breve llamada de introducción de 15 minutos con un experto en automatización es la mejor manera de comenzar.
Conclusión
La vinculación de una orden de compra con varias facturas de proveedores en NetSuite se puede realizar de varias maneras, según la configuración de su empresa. Puede optar por algo más manual que le brinde más control, o puede automatizarlo por completo mediante la API (con un esfuerzo significativamente mayor y algo de codificación).
Al combinar lo mejor de ambos mundos utilizando una solución sin código como Nanonets, puede administrar con confianza los códigos de artículos de proveedores, agilizar la entrada de datos y reducir los errores manuales, ahorrando tiempo valioso para sus equipos de adquisiciones y finanzas.
Referencias: