{"id":21309,"date":"2023-10-27T16:25:57","date_gmt":"2023-10-27T14:25:57","guid":{"rendered":"https:\/\/help.openbee.com\/open-bee-scan-capture\/knowledge-base\/how-to-guides\/scripts-in-capture\/case-studies\/writing\/export-entries-write-file-using-vataccountassociated\/"},"modified":"2026-05-13T09:36:48","modified_gmt":"2026-05-13T07:36:48","slug":"export-entries-write-file-using-vataccountassociated","status":"publish","type":"page","link":"https:\/\/help.openbee.com\/en\/open-bee-scan-capture\/knowledge-base\/how-to-guides\/scripts-in-capture\/case-studies\/writing\/export-entries-write-file-using-vataccountassociated\/","title":{"rendered":"Export Entries: Write file using vatAccountAssociated"},"content":{"rendered":"\n<p>Items to be replaced:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Portal Address<\/li>\n\n\n\n<li>Capture Address<\/li>\n<\/ul>\n\n<pre class=\"wp-block-code\"><code>\/*===================================================================================*\/\r\n\/*=========================== FUNCTIONS =============================================*\/\r\n\/*===================================================================================*\/\r\n\r\n\/**\r\n * Function to now date with special string format\r\n * @return : formatted date in string\r\n**\/\r\nvar getFormattedDate = function () {\r\n  var now = new Date();\r\n  \r\n  var year = now.getFullYear();\r\n  var month = (now.getMonth() + 1).toString().padStart(2, '0'); \/\/ Mois commence \u00e0 0, donc +1\r\n  var day = now.getDate().toString().padStart(2, '0');\r\n  var hour = now.getHours().toString().padStart(2, '0');\r\n  var minute = now.getMinutes().toString().padStart(2, '0');\r\n  \/\/var seconde = maintenant.getSeconds().toString().padStart(2, '0');\r\n  \r\n  return year + month + day +hour + minute;\/\/ + seconde;\r\n};\r\n\r\n\r\n\/**\r\n * Function to get VAT account associated with current line handled\r\n * @parameters : pLine : current account entry line handled\r\n * @parameters : associatedTVAWithCharge : object containing account number in key and vat account in relation to in value\r\n * @parameters : listTVAAccountInAccountEntry : array of vat account used in current account entry\r\n * @return : VAT account in relation to current line given in parameter\r\n**\/\r\nvar getVATAccountFromLine = function(pLine, associatedTVAWithCharge, listTVAAccountInAccountEntry){\r\n\tif(pLine == null || pLine.accountNumber == null || associatedTVAWithCharge == null)\r\n\t\treturn null;\r\n\r\n\t\/\/Handle case of juste one VAT on accountEntry\r\n\tif(listTVAAccountInAccountEntry != null &amp;&amp; listTVAAccountInAccountEntry.length == 1)\r\n\t\treturn listTVAAccountInAccountEntry&#91;0];\r\n\r\n\t\/\/Handle case of matching charge and tva amount\r\n\tif(associatedTVAWithCharge&#91;pLine.accountNumber] != undefined)\r\n\t\treturn associatedTVAWithCharge&#91;pLine.accountNumber];\r\n\r\n\treturn null;\r\n};\r\n\r\n\r\n\/**\r\n * Function to get all VATAccount in Capture filtered by buyer owners of current accountEntry\r\n * @parameters : pParameters : object with all informations to get needed values\r\n * @parameters : ws : Webservice object already initialized to be used to get informations from Capture webservice\r\n * @return : array of all VATAccount object\r\n**\/\r\nvar getAllVATAccounts = function(pParameters, ws){\r\n\tvar resA = ws.send(\"\/ws\/account\/list\/\"+FOLDER.id+\"\/VATAccount\/_\/_\/_\/_\/_\", \"GET\", {\"Authorization\" : \"Bearer \"+ CAPTURE_WS_TOKEN});\r\n\tresA = JSON.parse(resA.StringResponse);\r\n\treturn resA != null &amp;&amp; resA.items != null &amp;&amp; resA.items.length > 0 ? resA.items : &#91;];\r\n};\r\n\r\n\r\n\/**\r\n * Function to get index value from id and idUnit\r\n * @parameters : pParameters : object with all informations to get needed values\r\n * @parameters : idIndex : string id of index\r\n * @parameters : idUnit : id unit\r\n * @return : value of index found by id and idunit\r\n**\/\r\nvar getIndexFromIDAndIDUnit = function(pParameters, idIndex, idUnit){\r\n\tvar listIndex = getIndexesFromID(pParameters, idIndex);\r\n\tif(listIndex != null){\r\n\t\tfor(var i=0;i&lt;listIndex.length;i++){\r\n\t\t\tif(listIndex&#91;i].idUnit == idUnit)\r\n\t\t\t\treturn getTextFromIndexInfo(listIndex&#91;i]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n};\r\n\r\n\r\n\/**\r\n * Function to get amount ex vat(HT) id unit from charge amount line\r\n * @parameters : pParameters : object with all informations to get needed values\r\n * @parameters : pChargeAmount : amount of current charge line\r\n * @return : amount ex vat(HT) id unit\r\n**\/\r\nvar getHTIDUnit = function(pParameters, pChargeAmount){\r\n\tvar listHT = getIndexesFromID(pParameters, \"AMOUNT_EX_VAT_INDEX\");\r\n\tif(listHT == null)\r\n\t\treturn null;\r\n\r\n\tfor(var lh=0;lh&lt;listHT.length;lh++){\r\n\t\tvar textAmount = getTextFromIndexInfo(listHT&#91;lh]);\r\n\t\tif(textAmount != null){\r\n\t\t\tvar parseValue = parseFloat(textAmount.replace(',', '.'));\r\n\t\t\tif(parseValue == pChargeAmount)\r\n\t\t\t\treturn listHT&#91;lh].idUnit;\r\n\t\t}\r\n\t}\r\n\r\n\treturn -1;\r\n}\r\n\r\n\r\n\/**\r\n * Function to get vat account number if corresponding with chargeAmount spent in parameter\r\n * step 1 : getIDUnit from chargeAmount\r\n * step 2 : find vatIndexInfo with the same idUnit\r\n * step 3 : find line matching with vatIndexInfo amount\r\n * @parameters : pParameters : object with all informations to get needed values\r\n * @parameters : pLines : lines of current account entry\r\n * @parameters : pChargeAmount : amount of current charge line\r\n * @return : VAT account number in relation with current charge amount\r\n**\/\r\nvar getVATAccountNumberFromCharge = function(pParameters, pLines, pChargeAmount){\r\n\tvar idUnitHT = getHTIDUnit(pParameters, pChargeAmount);\r\n\tif(idUnitHT == -1)\r\n\t\treturn null;\r\n\r\n\tvar vatInfoValue = getIndexFromIDAndIDUnit(pParameters, \"VAT_AMOUNT_INDEX\", idUnitHT);\r\n\tif(vatInfoValue != null){\r\n\t\tvar vatValue = parseFloat(vatInfoValue.replace(',', '.'));\r\n\t\t\r\n\t\tfor(var ll=0;ll&lt;pLines.length;ll++){\r\n\t\t\tif(pLines&#91;ll].amount == vatValue)\r\n\t\t\t\treturn pLines&#91;ll].accountNumber;\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\n\r\n\/**\r\n * Function to get VATAccount if account number spend in parameters is matching with one element of list\r\n * @parameters : pList : array of all VATAccount\r\n * @parameters : pAccountNumber : account number\r\n * @return : VAT account matching with account number or null\r\n**\/\r\nvar getAccountFromList = function(pList, pAccountNumber){\r\n\tif(pAccountNumber == null || pAccountNumber == \"\")\r\n\t\treturn null;\r\n\t\r\n\tfor(var va=0;va&lt;pList.length;va++){\r\n\t\tif(pList&#91;va].accountNumber == pAccountNumber)\r\n\t\t\treturn pList&#91;va];\r\n\t}\r\n\r\n\treturn null;\r\n};\r\n\r\n\r\n\/**\r\n * Function to get VATAccount in relation with currentLine handled\r\n * @parameters : pLine : current line handled\r\n * @parameters : pLines : lines of current account entry\r\n * @parameters : pParameters : object with all informations to get needed values\r\n * @parameters : pVATAccounts : array of all VATAccount\r\n * @return : VAT account found or null\r\n**\/\r\nvar tryToGetVATAccount = function(pLine, pLines, pParameters, pVATAccounts){\r\n\tif(pVATAccounts.length == 0)\r\n\t\treturn null;\r\n\r\n\t\/\/ Handle VATLine case\r\n\tvar result = getAccountFromList(pVATAccounts, pLine.accountNumber);\r\n\tif(result != null)\r\n\t\treturn result;\r\n\r\n\t\/\/Handle ChargeLine case\r\n\tvar vatAccountNumber = getVATAccountNumberFromCharge(pParameters, pLines, pLine.amount);\r\n\treturn getAccountFromList(pVATAccounts, vatAccountNumber);\r\n};\r\n\r\n\r\n\/**\r\n * Function to get an object account number -> VATAccount in relation ex &#91;\"665450\"] -> {type : \"VATAccount\", \"accountNumber\": \"445650\", ...}\r\n * @parameters : pLines : lines of current account entry\r\n * @parameters : pParameters : object with all informations to get needed values\r\n * @parameters : ws : Webservice object already initialized to be used to get informations from Capture webservice\r\n * @return : object containing key (account number), value(VAT account in relation) \r\n**\/\r\nvar getAssociatedTVAAccount = function(pLines, pParameters, ws){\r\n\tif(pLines == null || pLines.length == 0)\r\n\t\treturn {};\r\n\r\n\tvar result = {};\r\n\tvar accounts = getAllVATAccounts(pParameters, ws);\r\n\tfor(var l = 0;l&lt;pLines.length;l++){\r\n\t\tif(!pLines&#91;l].genericAccountNumber)\r\n\t\t\tresult&#91;pLines&#91;l].accountNumber] = tryToGetVATAccount(pLines&#91;l], pLines, pParameters, accounts);\r\n\t}\r\n\r\n\treturn result;\r\n};\r\n\r\n\r\n\/**\r\n * Function to get only VAT account used on current account entry.\r\n * This function use object associatedAccount because it already filtered, so we save time on loop\r\n * @parameters : pAssociatedAccount : object containing account number in key and vat account in relation to in value\r\n * @return : array of VAT account used on current accountr entry\r\n**\/\r\nvar getTVAAccountFromAccountEntry = function(pAssociatedAccount){\r\n\tvar result = &#91;];\r\n\tfor(var key in pAssociatedAccount){\r\n\t\tif(pAssociatedAccount&#91;key] != null &amp;&amp; pAssociatedAccount&#91;key].type == \"VATAccount\")\r\n\t\t\tresult.push(pAssociatedAccount&#91;key]);\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\n\r\n\/**\r\n * Function to get value of additional info from list and code\r\n * @parameters : pInfos : array with additionals infos\r\n * @parameters : pCode : code of additional info needed\r\n * @return : value of additional info\r\n**\/\r\nvar getAdditionalInfosValue = function(pInfos, pCode){\r\n\tif(pInfos == null || pCode == null || pInfos.length == 0)\r\n\t\treturn \"\";\r\n\r\n\tfor(var ii=0;ii&lt;pInfos.length;ii++){\r\n\t\tif(pInfos&#91;ii].id == pCode)\r\n\t\t\treturn pInfos&#91;ii].value;\r\n\t}\r\n\r\n\treturn \"\";\r\n};\r\n\r\n\r\n\/**\r\n * Function to get code tva information in relation with current line\r\n * option 1 : if line has vatAccountAssociated get it\r\n * option 2 : try to get vat account in deduction with amount or number of vat account in current account entry\r\n * @parameters : pLine : current account entry line handled\r\n * @parameters : associatedTVAWithCharge : object containing account number in key and vat account in relation to in value\r\n * @parameters : listTVAAccountInAccountEntry : array of vat account used in current account entry\r\n * @return : TVA code associated with current line\r\n**\/\r\nvar getCodeTVAValue = function(pLine, associatedTVAWithCharge, listTVAAccountInAccountEntry){\r\n\tif(!pLine.genericAccountNumber){\r\n\t\t\r\n\t\tvar vatAccount = null;\r\n\t\tif(pLine.vatAccountAssociated)\r\n\t\t\tvatAccount = pLine.vatAccountAssociated;\r\n\t\telse\r\n\t\t\tvatAccount = getVATAccountFromLine(pLine, associatedTVAWithCharge, listTVAAccountInAccountEntry);\r\n\r\n\t\tif(vatAccount != null)\r\n\t\t\treturn getAdditionalInfosValue(vatAccount.additionnalInfos, \"TVACODE\");\r\n\t\treturn '00';\r\n\t}\r\n\r\n\treturn '';\r\n};\r\n\r\n\r\n\/**\r\n * Get details for an account entry\r\n * @parameters : pParameters : object with all informations to get needed values\r\n * @parameters : ws : Webservice object already initialized to be used to get informations from Capture webservice\r\n * @return : string which is account entries formatted \r\n**\/\r\nvar getAccountEntryDetails = function(pParameters, ws){\r\n\tvar res = ws.send(\"\/ws\/document\/\"+INTERNAL_DOCUMENT_ID, \"GET\", {\"Authorization\" : \"Bearer \"+ CAPTURE_WS_TOKEN});\r\n\tres = JSON.parse(res.StringResponse);\r\n\t\/\/ Pour d\u00e9boguage au besoin\r\n\t\/\/JSE_File.writeFile(\"C:\\\\ExportTest\\\\FichierComplet.json\",res.StringResponse); \r\n\r\n\tvar lignesCompta = res.accountEntries&#91;0].lineAccountEntries;\r\n\tvar associatedTVAWithCharge = getAssociatedTVAAccount(lignesCompta, pParameters, ws);\r\n\tvar listTVAAccountInAccountEntry = getTVAAccountFromAccountEntry(associatedTVAWithCharge);\r\n\tvar ledgerCode = ACCOUNT_ENTRY.ledger.code;\r\n\tvar idDms = ID_DMS;\r\n\tvar url = \"https:\/\/*******.com\/previewDocument\/idDocument\/\"+idDms;\r\n\tvar documentDate = getTextFromIndexInfo(getFirstIndexFromID(pParameters,\"DATE_INDEX\"));\r\n\tvar invoiceNumber = getTextFromIndexInfo(getFirstIndexFromID(pParameters,\"INVOICE_NUMBER_INDEX\"));\r\n\tvar typeFacture = getTextFromIndexInfo(getFirstIndexFromID(pParameters,\"TYPEDOC_INDEX\"));\r\n\tvar dueDate = getTextFromIndexInfo(getFirstIndexFromID(pParameters,\"DUE_DATE_INDEX\"));\r\n\r\n\tvar result = \"\";\r\n\r\n\tfor(var i = 0; i &lt; lignesCompta.length; i++){\r\n\t\tvar codeTVAInfo = getCodeTVAValue(lignesCompta&#91;i], associatedTVAWithCharge, listTVAAccountInAccountEntry);\r\n\t\tvar compteTiersGen = lignesCompta&#91;i].accountNumber;\r\n\t\tvar meaningTest = (lignesCompta&#91;i].meaning == 'DEBIT') ? 'D' : 'C';\r\n\r\n\t\tresult += \"BEGIN\\t\"\r\n\t\t\t+ledgerCode+\"\\t\"\r\n\t\t\t+documentDate+\"\\t\"\r\n\t\t\t+invoiceNumber+\"\\t\"\r\n\t\t\t+documentDate+\"\\t\"\r\n\t\t\t+compteTiersGen+\"\\t\"\r\n\t\t\t+typeFacture+\"\\t\"\r\n\t\t\t+\"\"+\"\\t\"\r\n\t\t\t+lignesCompta&#91;i].labelLine+\"\\t\"\r\n\t\t\t+\"\" +\"\\t\"\r\n\t\t\t+dueDate+'\\t'\r\n\t\t\t+meaningTest+'\\t'\r\n\t\t\t+lignesCompta&#91;i].amount.toFixed(2).replace('.',',')+'\\t'\r\n\t\t\t+codeTVAInfo+\"\\t\"\r\n\t\t\t+idDms+'\\t'\r\n\t\t\t+url+'\\t'\r\n\t\t\t+\"\"+'\\r\\n';\r\n\t}\r\n\r\n\treturn result;\r\n};\r\n\r\n\r\n\/*===================================================================================*\/\r\n\/*=========================== MAIN CODE =============================================*\/\r\n\/*===================================================================================*\/\r\n\r\n\r\nvar finalPathFile = \"C:\\\\Export\\\\ExportFile_\"+getFormattedDate()+\".csv\";\r\nvar ws = new JSE_WebService(\"******.smartcapture.*****.com\", \"https\", 443);\r\n\r\nvar result = \"\";\r\n\r\nif(ACCOUNT_ENTRY_NUMBER == 1)\r\n\tresult = \"COMPTA\tCJO\tDATE_ECRIT\tPIECE\tDATE_PIECE\tCOMPTE\tDOC\tINFO1\tLIBELLE\tINFO2\tDATE_ECH\tSENS\tMONTANT\tTVA\tID_ECRITURE_EXT\tURL\tINFO3\\r\\n\";\r\nelse\r\n\tresult = JSE_File.readFile(finalPathFile)\r\n\r\nresult += getAccountEntryDetails(pParameters, ws);\r\nJSE_File.writeFile(finalPathFile, result);\r\n\r\nreturn true;<\/code><\/pre>\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-e6a65b17-ad27-4133-8f5f-e296727fd520\" href=\"https:\/\/help.openbee.com\/wp-content\/uploads\/2023\/10\/exportJsVatAccountAssociatedFix.txt\">exportJsVatAccountAssociatedFix<\/a><a href=\"https:\/\/help.openbee.com\/wp-content\/uploads\/2023\/10\/exportJsVatAccountAssociatedFix.txt\" class=\"wp-block-file__button wp-element-button\" download=\"\" aria-describedby=\"wp-block-file--media-e6a65b17-ad27-4133-8f5f-e296727fd520\">Download<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Items to be replaced:<\/p>\n","protected":false},"author":97,"featured_media":0,"parent":21274,"menu_order":2,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-21309","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/help.openbee.com\/en\/wp-json\/wp\/v2\/pages\/21309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/help.openbee.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/help.openbee.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/help.openbee.com\/en\/wp-json\/wp\/v2\/users\/97"}],"replies":[{"embeddable":true,"href":"https:\/\/help.openbee.com\/en\/wp-json\/wp\/v2\/comments?post=21309"}],"version-history":[{"count":1,"href":"https:\/\/help.openbee.com\/en\/wp-json\/wp\/v2\/pages\/21309\/revisions"}],"predecessor-version":[{"id":21310,"href":"https:\/\/help.openbee.com\/en\/wp-json\/wp\/v2\/pages\/21309\/revisions\/21310"}],"up":[{"embeddable":true,"href":"https:\/\/help.openbee.com\/en\/wp-json\/wp\/v2\/pages\/21274"}],"wp:attachment":[{"href":"https:\/\/help.openbee.com\/en\/wp-json\/wp\/v2\/media?parent=21309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}