Situatie
Firmele care sunt obligate acum sa lucreze cu sistemul electronic eFactura intampina o problema. Facturile emise catre firma respectiva trebuie descarcate din eFactura si pastrate in arhiva.
Problema este data de faptul ca fiecare factura primita, si la multe firme sunt sute de facturi lunar, se pot descarca doar individual.Aceasta se rezolva insa cu ajutorul unui addon de descarcare care se poate instala cu usurinta in Chrome, si care ne va permite sa descarcam bulk toate fisierele tip XML o singura data.
O alta prolema este data de faptul ca acele fisiere XML nu au un nume care sa aiba o indicatie vis-a-vis de numele firmei emitente si numarul facturii, lucru ce face ca identificarea ulterioara sa fie dificila.Pentru aceasta am dezvoltat un script Powershell, care redenumeste fisierele XML dintr-un folder prestabilit, dupa doua linii de cod din interiorul fiecarui XML, una contine numele firmei emitente si cealalta numarul facturii.
Aceste linii sunt:
camp numar si serie factura: “<cbc:ID>AB/117</cbc:ID>”
camp firma emitenta: “<cbc:RegistrationName>Orange Romania S.A.</cbc:RegistrationName>”
Scriptul 1 este un script powershell:
$folder = “cale folder de forma D:\xmlredenumire”
Set-Location $folder
Get-ChildItem -Filter *.xml | ForEach-Object {
try {
[xml]$xml = Get-Content $_.FullName
$nsmgr = New-Object System.Xml.XmlNamespaceManager($xml.NameTable)
$nsmgr.AddNamespace(‘cbc’, ‘urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2’)
$invoiceNode = $xml.SelectSingleNode(‘//cbc:ID’, $nsmgr)
$companyNode = $xml.SelectSingleNode(‘//cbc:RegistrationName’, $nsmgr)
if (-not $invoiceNode) { $invoiceNode = $xml.SelectSingleNode(‘//ID’) }
if (-not $companyNode) { $companyNode = $xml.SelectSingleNode(‘//RegistrationName’) }
if ($invoiceNode -and $companyNode) {
$invoice = $invoiceNode.InnerText -replace ‘[\\/:”*?<>|]’, ‘-‘
$company = $companyNode.InnerText -replace ‘[\\/:”*?<>|]’, ” -replace ‘\s+’, ‘_’
$newName = “$company-$invoice.xml”
if ($_.Name -ne $newName) {
Rename-Item $_.FullName -NewName $newName
Write-Host “Renamed ‘$($_.Name)’ to ‘$newName'”
} else {
Write-Host “File ‘$($_.Name)’ already named correctly.”
}
} else {
Write-Warning “Could not find invoice or company name in ‘$($_.Name)’. Skipped.”
}
} catch {
Write-Warning “Error processing ‘$($_.Name)’: $_”
}
}
In cazul in care apar fisiere xml cu nume diferite (am mentionat ca numele fisierului XML este unul generic de forma download01.xml, downloa02.xml, download27062025.xml), ceea ce inseamna ca o firma furnizoare a incarcat de doua ori aceeasi factura, scriptul nu modifica al doilea fisier xml, asa ca rezultatul final este lista corecta de xml.
separat, am conceput un script bat, care poate fi rulat prin dublu click.
Continut fisier bat:
@echo off
powershell.exe -NoProfile -ExecutionPolicy Bypass -File “calea unde se afla fisierul cu scriptul poweshell – exemplu D:\xmlredenumire\rename_xmls.ps1”
pause
La rularea scriptului BAT, tuturor fisierelor xml din folderul – exemplu D:\xmlredenumire, li se va schimba numele dupa model:
furnizor _ numar serie factura .xml
Leave A Comment?