Mostrando entradas con la etiqueta Service Layer. Mostrar todas las entradas
Mostrando entradas con la etiqueta Service Layer. Mostrar todas las entradas

jueves, 23 de mayo de 2024

Withholding tax code '1I' not allowed for this business partner; [WithholdingTaxDataCollection.WTCode]

Desarrollando para Service Layer en SAP B1, me devolvió el error siguiente trabajando con los impuestos retenidos de una factura de deudor:

 {
    "details""{\n   \"error\" : {\n      \"code\" : -5002,\n      \"message\" : {\n         \"lang\" : \"en-us\",
                        \n         \"value\" : \"1250000075 - Withholding tax code '1I' not allowed for this business partner; specify a withholding tax code that has been assigned in the business partner master data [WithholdingTaxDataCollection.WTCode][line: 1]\"\n      }\n   }\n}\n",
    "isSuccess"false,
    "data"""
}

En el json que enviaba para crear la factura iba el arreglo de los impuestos retenidos, los datos existían en los catálogos de SAP B1, todo parecía estar bien, ¿entonces donde estaba el problema?, después de revisar me di cuenta que el error se genera por que además de tener en orden todo lo anterior comentado, se debe poner poner el atributo de la cabecera SubjectToWithholdingTax en "boYES", con esto el error desapareció, espero les sirva.

Saludos.

domingo, 21 de enero de 2024

Actualización (Update) de direcciones Ship to y Bill to con Service Layer

Les dejo algo que es simple pero muy importante para poder actualizar las direcciones fiscales y de entrega por medio de Service Layer sin que les marque errores como por ejemplo "This entry already exists in the following tables (ODBC -2035)", al utilizar el endpoint PATCH: https://tudominio:50000/b1s/v1/BusinessPartners('C010').

Para que Service Layer pueda identificar que dirección es la que queremos modificar debemos agregar el atributo Row en el Json a enviar como se muestra abajo:

"BPAddresses": [
    {
        "AddressName": "Billing Address",
        "Street": "Marine Drive",
        "Block": null,
        "ZipCode": "12345",
        "City": "NEWPORT",
        "Country": "US",
        "State": "OR",
        "BuildingFloorRoom": "",
        "AddressType": "bo_BillTo",
        "StreetNo": null,
        "BPCode": "T10360",
        "RowNum": 0,
        "GlobalLocationNumber": null,
        "Nationality": null,
        "TaxOffice": null,
        "GSTIN": null,
        "GstType": null,
        "U_WBCUSTADDID": null,
        "U_TelNo": null
    },
El valor de este atributo, lo encuentran en la tabla CRD1 en su campo llamado LineNum con ayuda de está consulta:

SELECT "LineNum" FROM CRD1 WHERE "AdresType" = 'B' AND address = 'Nombre Dirección' AND CardCode = 'C010'esType" = 'B' AND address = 'Nombre Dirección' AND CardCode = 'C010'.

¡Saludos!

"value": "Table 'CRD4' not accessible"

¿Qué tal?, ¿Cómo están?, espero que después del Guadalupe - Reyes como le decimos aquí en México, estén de lo mejor, en está primera publicación del 2024 les traigo la solución al error que surge al consumir el endpoint de service layer para crear querys personalizadas: https://TUSERVER:50000/b1s/v1/SQLQueries


Resulta que service layer no puede consultar todas la tablas de SAP desde este endpoint por seguridad según su documentación, en mi caso no tiene permitido consultar la tabla CRD4 (Impuesto de retención), arrojando el error en su respuesta: "value": "Table 'CRD4' not accessible", esto se soluciona yendo a la carpeta de instalación de service layer en mi caso fue en el servidor de SUSE ya que es un base de datos en HANA, el archivo se llama b1s_sqltable.conf y la ruta por defecto en SUSE es /usr/sap/SAPBusinessOne/ServiceLayer/conf, lo único que tiene que hacer es agregar al listado la tabla a consultar para que se le permita ser consultada:


Espero con esto una consulta no les impida continuar con su desarrollo. ¡Saludos!