Wyciąganie pliku JPK w XML z baz Optimy
Uruchamiamy w PowerShell z konta które ma połączenie autentykacją windows do bazy danych:
$server = "NazwaSerwera"
$db = "NazwaBazy"
$nazwa = "NazwaPlikuDocelowego"
$out = "C:\SciezkaDocelowa\$nazwa.xml"
$tabela = "[NazwaBazy].[NazwaTabeli]" #Zwykle [NazwaBazy].[CDN].[PlikiJPK]
$conn = New-Object System.Data.SqlClient.SqlConnection("Server=$server;Database=$db;Integrated Security=True")
$conn.Open()
$cmd = $conn.CreateCommand()
$cmd.CommandText = "SELECT JPK_XML FROM $tabela WHERE JPK_Nazwa = @n"
$null = $cmd.Parameters.AddWithValue("@n", $nazwa)
$bytes = [byte[]]$cmd.ExecuteScalar()
$conn.Close()
[IO.File]::WriteAllBytes($out, $bytes)
Write-Host "Zapisano $($bytes.Length) bajtów do $out"
Zbieranie danych:
Pobieranie danych o JPK by wiedzieć jak wygląda tabela:
SELECT TOP (10) [JPK_JPKID]
,[JPK_KodOsoby]
,[JPK_Typ]
,[JPK_Nazwa]
,[JPK_DataUtworzenia]
,[JPK_CelZlozenia]
,[JPK_WariantFormularza]
,[JPK_XML]
,[JPK_RefNr]
,[JPK_Path]
,[JPK_Status]
,[JPK_StatusCode]
,[JPK_StatusOpis]
,[JPK_KodUrzedu]
,[JPK_DataWyslania]
,[JPK_DataWplyniecia]
,[JPK_KodOsobyOdbierajacej]
,[JPK_DataOdebrania]
,[JPK_SkrotDokumentu]
,[JPK_SkrotStruktury]
,[JPK_StrukturaLogiczna]
,[JPK_StempelCzasu]
,[JPK_SigningTime]
,[JPK_NazwaPodmiotu]
,[JPK_NIP1]
,[JPK_OkresOd]
,[JPK_OkresDo]
FROM [NazwaBazy].[CDN].[PlikiJPK]
Weryfikacja w SSMS które kolumny są varbinary (zawierają pliki)
SELECT t.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS c
JOIN INFORMATION_SCHEMA.TABLES t ON t.TABLE_NAME = c.TABLE_NAME
WHERE c.DATA_TYPE IN ('varbinary','image','xml')
AND (t.TABLE_NAME LIKE '%JPK%' OR c.COLUMN_NAME LIKE '%JPK%');