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"

image.png

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] 

image.png

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%');

image.png


Revision #2
Created 11 June 2026 10:13:58 by Tomasz Konieczny
Updated 11 June 2026 10:25:14 by Tomasz Konieczny