Zapis faktury z DaneBinarne do PDF.

Problemy i pomysły związane z innymi modułami czyli np. środki trwałe, import, zamówienia ...

Moderator: mikey

3wojtek3
Posty: 5
Rejestracja: 06 maja 2014, 15:39
Rola: Inny

Zapis faktury z DaneBinarne do PDF.

Post autor: 3wojtek3 »

Cześć,
Potrzebuję szybkiej pomocy. Próbuję zapisać fakturę z tabeli cdn.DaneBinarne we wskazanym miejscu na dysku do pliku PDF.
Komenda:
EXEC xp_cmdshell 'bcp "SELECT DAB_DANE FROM ERPXL_PREZ14.cdn.danebinarne where DAB_ID=2520" queryout c:\faktura.pdf -T -c -C RAW -S WOJTEK-DATASOFT\SQL2008 -T -N'

Zapisuje plik lecz nie da się go potem otworzyć.
Bardzo zależy mi na takiej lub innej sql'owej formie ponieważ chciałbym użyć polecenia w triggerze lub w modelowaniu procesów.

Pozdrawiam
Wojtek

elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: Zapis faktury z DaneBinarne do PDF.

Post autor: elmiq »

Stwórz sobie plik format.fmt o zawartości np. takiej:

Kod: Zaznacz cały

10.0
1
1 SQLBINARY 0 2 "" 1 DepartmentID ""
a następnie wykonaj:

Kod: Zaznacz cały

DECLARE @SQLcommand NVARCHAR(4000) 
SET @SQLcommand = 'bcp "SELECT BIN FROM x.dbo.x where id=1" queryout "c:\2.jpg" -T -S NB41\SQL2008 -fc:\1\format.fmt'
EXEC xp_cmdshell @SQLcommand 
Oczywiście odpowiednio zmodyfikuj to co napisałem, ale ogólnie mówiąc plik się nie otwiera po eksporcie ze względu na ostanie X bitów zależnych od formatowania wykorzystanego przy eksporcie.

Pozdrawiam,
Mateusz
Mateusz Świerkosz

http://elmiq.blogspot.com/

3wojtek3
Posty: 5
Rejestracja: 06 maja 2014, 15:39
Rola: Inny

Re: Zapis faktury z DaneBinarne do PDF.

Post autor: 3wojtek3 »

Cześć,
Dzięki za zainteresowanie wątkiem.

Przetestowałem, niestety używając takiego formatu tworzony jest plik bez zawartości (0 bytes)

Pozdrawiam Wojtek

3wojtek3
Posty: 5
Rejestracja: 06 maja 2014, 15:39
Rola: Inny

Re: Zapis faktury z DaneBinarne do PDF.

Post autor: 3wojtek3 »

To mój fmt:

Kod: Zaznacz cały

10.0
1
1 SQLBINARY 0 2 "" 1 DAB_DANE ""
A to zapytanie które każdy może sobie przetestować na bazie XL'a:

Kod: Zaznacz cały

DECLARE @SQLcommand NVARCHAR(4000)
SET @SQLcommand = 'bcp "SELECT max(DAB_DANE) FROM ERPXL_PREZ14.cdn.danebinarne where DAB_Rozszerzenie=''PDF'' and DAB_DANE is not null" queryout "D:\wydruk.pdf" -T -S serwer\SQL2008 -f D:\format.fmt'
EXEC xp_cmdshell @SQLcommand 
Niestety niedziałające.

Help

Pozdrawiam Wojtek

elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: Zapis faktury z DaneBinarne do PDF.

Post autor: elmiq »

To czy podany plik "działa" po eksporcie, czy też nie, zależy również od wersji bcp i kilku innych kwestii. Przeczytaj proszę ten artykuł:
http://technet.microsoft.com/en-us/libr ... l.80).aspx


Pozdrawiam,
Mateusz
Mateusz Świerkosz

http://elmiq.blogspot.com/

Awatar użytkownika
wacek
Posty: 709
Rejestracja: 27 paź 2008, 18:04
Rola: Administrator CDN XL
Lokalizacja: Łódzkie

Re: Zapis faktury z DaneBinarne do PDF.

Post autor: wacek »

Pozdrawiam,
Robert

select convert(varchar(100),0x637a6173616d69207069737aea2074752067b375706f7479203a29)

3wojtek3
Posty: 5
Rejestracja: 06 maja 2014, 15:39
Rola: Inny

Re: Zapis faktury z DaneBinarne do PDF.

Post autor: 3wojtek3 »

Cześć,
Dzięki za podpowiedzi. Niestety nawet import na podstawie stworzonego przez procedurę pliku formatu nie daje poprawnego rezultatu.
mój bcp jest w wersji 10.50.2500.0
plik formatu:

Kod: Zaznacz cały

10.5
1
1      SQLBINARY           8       0       ""   35    DAB_DANE                                         ""
polecenia:

Kod: Zaznacz cały

EXEC xp_cmdshell 'BCP "SELECT DAB_DANE FROM ERPXL_PREZ14.cdn.danebinarne where DAB_ID=2521" queryout "D:\weefwed.pdf" -f d:\format.fmt -S WOJTEK\DATASOFT\SQL2008 -T -N'

EXEC xp_cmdshell 'bcp "SELECT DAB_DANE FROM ERPXL_PREZ14.cdn.danebinarne where DAB_ID=2521" queryout D:\tmp\pdf\dobry.pdf -T -f d:\format.fmt -c -C RAW -S WOJTEK\SQL2008 -T -N'
Jeśłi komuś to zadziałało to bardzo proszę o info co robię nie tak.
aha wyłączyłem także kompresję tych załączników robioną przez XL'a

Kod: Zaznacz cały

select SLW_WartoscN1 /*to pole ma mieć wartosc 0 */,
* from CDN.Slowniki where SLW_WartoscS = 'Archiwum wydruków' or SLW_WartoscS = 'Plik PDF'
Pozdrawiam Wojtek

Monster
Posty: 180
Rejestracja: 20 mar 2012, 09:04
Rola: Konsultant CDN XL
Wersja: 2016
Lokalizacja: Wrocław

Re: Zapis faktury z DaneBinarne do PDF.

Post autor: Monster »

Wyłączyłeś kompresję, ale czy plik który chcesz wyciągnąć z bazy nie jest już skompresowany przez XLa (wcześniejszy)?

3wojtek3
Posty: 5
Rejestracja: 06 maja 2014, 15:39
Rola: Inny

Re: Zapis faktury z DaneBinarne do PDF.

Post autor: 3wojtek3 »

Cześć,
Nie, po wyłączeniu kompresji utworzyłem nowy załącznik i nadal jest taka sama sytuacja.
Nawet plik tekstowy ma zakodowaną zawartość.

Awatar użytkownika
viesiek1
Posty: 416
Rejestracja: 03 maja 2011, 18:40
Rola: Administrator CDN XL
Wersja: 2023
Lokalizacja: Bielsko-Biała
Kontakt:

Re: Zapis faktury z DaneBinarne do PDF.

Post autor: viesiek1 »

U mnie dane binarne nie są skompresowane więc działa taki kod w C# ;)

Kod: Zaznacz cały

        private void button1_Click(object sender, EventArgs e)
        {
            string lConnStr = "Data Source=server;Initial Catalog=CDNXL_DataBase;Persist Security Info=True;User ID=sa;Password=pass";
            StringBuilder lSb = new StringBuilder();

            try
            {
                using (SqlConnection lConnection = new SqlConnection(lConnStr))
                {
                    using (SqlCommand lCommand = new SqlCommand())
                    {
                        lCommand.Connection = lConnection;
                        if (lCommand.Connection.State != ConnectionState.Open)
                            lConnection.Open();
                        lSb.AppendLine("SELECT DAB_Dane FROM CDN.DaneBinarne");
                        lSb.AppendLine("WHERE DAB_ID = 38");
                        lCommand.CommandText = lSb.ToString();
                        
                        using(SqlDataReader lReader = lCommand.ExecuteReader())
                        {                       
                            if (lReader.HasRows)
                            {
                                while (lReader.Read())
                                {
                                    byte[] lByte = new byte[0];
                                  
                                    try
                                    {
                                        lByte = (Byte[])(lReader["DAB_Dane"]);

                                        using (FileStream lFs = new FileStream("C:\\Temp\\file.pdf", FileMode.Create, FileAccess.ReadWrite))
                                        {
                                            using (System.IO.BinaryWriter lBw = new System.IO.BinaryWriter(lFs))
                                            {
                                                lBw.Write(lByte);
                                                lBw.Close();
                                            }

                                            lFs.Close();
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show("Wystąpił błąd: " + ex.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    }
                                }
                            }

                            if (!lReader.IsClosed)
                                lReader.Close();
                        }

                        if (lCommand.Connection.State != ConnectionState.Closed)
                            lConnection.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Wystąpił błąd: " + ex.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Wiesław Świergała

tel: +48 33 829 54 50
e-mail: wieslaw.swiergala@hydro.com.pl

http://www.hydro.com.pl

ODPOWIEDZ