Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
Przesunięty przez: Artik
14-03-2020, 11:44
Łączenie 2 plików PDF w 1 za pomocą VBA
Autor Wiadomość
stingtanner
Stały bywalec Excelforum


Wersja: Win Office 2019
Pomógł: 2 razy
Posty: 353
Wysłany: 12-03-2020, 08:31   Łączenie 2 plików PDF w 1 za pomocą VBA

Witajcie

Spotkaliście się kiedyś lub może jesteście w posiadaniu kodu, który w "najprostszy" sposób połączy ze sobą 2 pliki PDF w 1? Najprostszy mam na myśli bez użycia zewnętrznych programów.

Wybieram 1 plik, wybieram 2 plik, przycisk połącz i w takiej kolejności je łączy :)
1 plik to stworzona lista za pomocą Excela i wyeksportowana do PDF, 2 plik to skany rysunków.

Zasada niby prosta w działaniu, ale przeszukałem już google oraz forum, i niestety prawie wszystko opiera się na pełnej wersji Adobe Acrobat.
W pracy mam Adobe Readera, PDF Architect 5 (wersja darmowa) oraz PDFCreator.
ID posta: 383579 Skopiuj do schowka
 
 
stingtanner
Stały bywalec Excelforum


Wersja: Win Office 2019
Pomógł: 2 razy
Posty: 353
Wysłany: 12-03-2020, 11:35   

Udało mi się posklejać kilka wątków z neta i w sumie coś działa :)
Oparte o program PDFCreator (testowane na wersji 3.5.1)

Jak zacząłem temat to zostawię dla potomnych.

Kod:
Const sMergedPDFname = "sciezka do katalogu w ktorym bedzie gotowy plik"

Dim objPdf As PDFCreator_COM.PdfCreatorObj
Dim objQue As PDFCreator_COM.Queue
Dim objPjb As PDFCreator_COM.PrintJob
Dim filename As String
Dim pelnanazwa As String

Sub PDFCreatorCombine()
    On Error GoTo ErrPdf
    Set objQue = New PDFCreator_COM.Queue
    With objQue
        Set objPdf = New PDFCreator_COM.PdfCreatorObj
        .Initialize
        'objPdf.AddFileToQueue "sciezka do pliku + nazwa_pliku.pdf"
        'objPdf.AddFileToQueue "sciezka do pliku + nazwa_pliku.pdf"
        'objPdf.AddFileToQueue "sciezka do pliku + nazwa_pliku.pdf"

        ChDir "domyslna sciezka do katalogu"
        objPdf.AddFileToQueue Application.GetOpenFilename("PDF (*.pdf), *.pdf")
        objPdf.AddFileToQueue Application.GetOpenFilename("PDF (*.pdf), *.pdf")
       
        .WaitForJobs 2, 1 ' dac "3, 2" aby dodac 3 pliki do kolejki
        'Debug.Print "Queue.Count after send " & .Count
        ListJobs
       
        .MergeAllJobs
        Set objPjb = .NextJob
        pelnanazwa = sMergedPDFname & filename
        'If Len(Dir(pelnanazwa)) > 0 Then Kill pelnanazwa
        objPjb.ConvertTo pelnanazwa
        .Clear
    End With
ExitPdf:
    If Not objQue Is Nothing Then objQue.ReleaseCom
   
    Set objPdf = Nothing
    Set objQue = Nothing
    Set objPjb = Nothing
    Exit Sub

ErrPdf:
    MsgBox Error, vbExclamation
    GoTo ExitPdf
End Sub

Sub ListJobs()
    Dim i As Integer
    For i = 0 To objQue.Count - 1
        Set objPjb = objQue.GetJobByIndex(i)
        'Debug.Print "- " & objPjb.PrintJobInfo.PrintJobName
    Next i
        filename = InputBox("Podaj nazwe pliku", "Podaj nazwe pliku", objPjb.PrintJobInfo.PrintJobName)
    Set objPjb = Nothing
End Sub


Mam do Was jednak 2 pytania.
1.
Wybieram sobie 2 pliki, które chcę połączyć.
1 ma nazwę 50012345_30_Stückliste
2 ma nazwę 50012345_30

W Sub Listjobs objPjb.PrintJobInfo.PrintJobName wskakuje mi nazwa najpierw 1 pliku, później 2.

Jak wykonuję cały kod, to najpierw nazwa pliku "filename" jest nr. 1, kolejny raz wykonuje kod, te same pliki to nazwa jest z nr.2.

Podpowiedzcie jak zrobić, aby nazwa zawsze była z 2 pliku. Nie musiał bym usuwać co drugi raz tekstu "_Stückliste".

2.
Kod:
If Len(Dir(pelnanazwa)) > 0 Then Kill pelnanazwa

Ma za zadanie usunąć plik jeśli istnieje. Nie wiem dlaczego nie robi tego. jak macie pomysł co może być przyczyną, lub jak ewentualnie nadpisywać istniejący już plik, to będzie miło :)
Aktualnie jeśli plik istnieje, to na końcu nazwy dodane kolejny numer "_1" => "_2" itd.
ID posta: 383588 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2888 razy
Posty: 9578
Wysłany: 12-03-2020, 11:46   

Po bardzo pobieżnym zapoznaniu się z dokumentacją PDFCreator-a wygląda na to, że mógłbyś to zadanie zrealizować z poziomu Excela. PDFCreator umożliwia łączenie dokumentów w jeden plik PDF. Mówi o tym instrukcja tutaj. Program ten udostępnia także interface COM, za pomocą którego można Twoje zadanie zrealizować z poziomu Excela. Tutaj jest mowa o kodowaniu scalania zadań do wydruku. To oczywiście tylko istotny fragment, ale kodu musi być znacznie więcej.
Poszperaj w necie, może znajdziesz gotowy kod.

Edit:
Eee, widzę że nie leżałeś. :-)

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 383590 Skopiuj do schowka
 
 
stingtanner
Stały bywalec Excelforum


Wersja: Win Office 2019
Pomógł: 2 razy
Posty: 353
Wysłany: 12-03-2020, 12:17   

Ale coś jest nie tak jednak z tym kodem, bo działa co drugi raz poprawnie.

Wykonuje kod 1 raz, wybieram pliki, to nie dokłada mi 2 wybranego pliku.
Wykonuję 2 raz kod, i już jest poprawnie. 2 pliki scalone w kolejności z jaką wybierałem pliki.
ID posta: 383592 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2888 razy
Posty: 9578
Wysłany: 12-03-2020, 12:25   

Nie mam na razie zainstalowanego PDFCreator-a, więc nie bardzo mam jak sprawdzić. Ale już z pobieżnej analizy kodu widać, że zakłada on wariant optymistyczny, że wszystko pójdzie OK. Jak zainstaluję, to postaram się sprawdzić. Może wieczorem.

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 383593 Skopiuj do schowka
 
 
stingtanner
Stały bywalec Excelforum


Wersja: Win Office 2019
Pomógł: 2 razy
Posty: 353
Wysłany: 12-03-2020, 14:26   

Póki co zrobiłem tak:

Kod:
        .WaitForJobs 1, 1 'int, czas | int - ilosc drukarek, czas - czas oczekiwania na kolejna drukarke
        'Debug.Print "Queue.Count after send " & .Count
        If .Count = 1 Then
            MsgBox "Nie udalo sie"
            GoTo ExitPdf
        End If
        ListJobs
        .MergeAllJobs
        Set objPjb = .NextJob
        pelnanazwa = sMergedPDFname & filename
        'If Len(Dir(pelnanazwa)) > 0 Then Kill pelnanazwa
        objPjb.ConvertTo pelnanazwa
        .Clear
        MsgBox "Stücklista zostala polaczona z rysunkami"
    End With


Przynajmniej nie tworzę zepsutych plików.
ID posta: 383609 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2888 razy
Posty: 9578
Wysłany: 14-03-2020, 11:17   

Trochę to trwało, bo okazało się, że problem nie należy do trywialnych.
Zanim zagłębiłem się w internety próbowałem kod przerabiać na własną rękę. I ciągle odnosiłem wrażenie, że coś z nim musi być nie tak. Nie dopuszczałem w ogóle błędu po stronie programu. A jednak. Po paru postach przeczytanych na innych forach można wyciągnąć wniosek, że jednak interfejs COM nie jest dobrze opracowany, a naprzemienne działanie kodu jest "standardem". Problem znany jest od wielu lat i dotąd nie został usunięty.
Myślę sobie, skoro kod działa jak kierunkowskaz (działa, nie działa, działa, nie działa... ;-) ) to należy go po prostu wywoływać dwukrotnie w przypadku błędu.
Poniższy kod jest paskudnie napisany, ale nie mam już czasu na jego wyszlifowanie (spędziłem nad tym problemem ponad dniówkę). Z założenia ma działać w ten sposób, że w przypadku prawidłowego scalania kod kończy działanie komunikatem o sukcesie. W przypadku, gdy trzykrotnie nie udało się dodać drugiego pliku do kolejki (bo to tu jest problem z interfejsem COM), generowany jest błąd 5000. Zostaje obsłużony w ten sposób, że jeżeli jest to pierwsze wystąpienie błędu (lCount=1), to prawie cała procedura jest powtarzana (Resume Combine). Gdyby, choć mi nie udało się uzyskać takiego przypadku, w drugim i kolejnych uruchomieniach nadal nie dochodziło do dodania drugiego pliku do kolejki, użytkownik będzie pytany czy nadal próbować.
Nazwą pliku scalonego jest nazwa drugiego w kolejności wybranego pliku. Założyłem też, że pierwszy wybierany plik musi zawierać przyrostek '_Stückliste'.
Kod:
Sub PDFCreatorCombine_2()
    Dim vInputFile1 As Variant
    Dim vInputFile2 As Variant
    Dim lCounter    As Long
    Dim lCount      As Long
    Dim objPdf      As PDFCreator_COM.PdfCreatorObj
    Dim objQue      As PDFCreator_COM.Queue
    Dim objPjb      As PDFCreator_COM.PrintJob
    Dim filename    As String
    Dim pelnanazwa  As String

    Const sMergedPDFname = "E:\Test\"    '"sciezka do katalogu w ktorym bedzie gotowy plik"

    'ChDir "domyslna sciezka do katalogu"

    Set objPdf = New PDFCreator_COM.PdfCreatorObj

    If objPdf.IsInstanceRunning Then
        MsgBox "PDFCreator jest obecnie otwarty!" & vbLf & _
               "Zamknij go przed ponownym uruchomieniem scalania.", _
               vbExclamation
        Set objPdf = Nothing
        Exit Sub
    End If


    Do
        vInputFile1 = Application.GetOpenFilename("PDF (*.pdf), *.pdf", , "Wskaz BOM")
        If TypeName(vInputFile1) = "Boolean" Then GoTo ExitPdf

        If Not LCase(vInputFile1) Like LCase("*#_Stückliste.pdf") Then
            MsgBox "Nie wybrano własciwego pliku (musi zawierac '_Stückliste.pdf')", vbExclamation
        End If
    Loop Until LCase(vInputFile1) Like LCase("*#_Stückliste.pdf")

    vInputFile2 = Application.GetOpenFilename("PDF (*.pdf), *.pdf", , "Wskaz rysunki")
    If TypeName(vInputFile2) = "Boolean" Then GoTo ExitPdf


Combine:
    lCount = lCount + 1

    On Error GoTo ErrPdf

    If objPdf Is Nothing Then
        Set objPdf = New PDFCreator_COM.PdfCreatorObj
    End If

    Set objQue = New PDFCreator_COM.Queue

    With objQue
        .Initialize

        lCounter = 0

        Do
            lCounter = lCounter + 1

            If lCounter > 3 Then
                Err.Raise _
                        Number:=5000, _
                        Description:="Nie udalo się przygotować zadania." & _
                                     String(2, vbLf) & _
                                     "Czy chcesz sprobowac ponownie scalic wskazane pliki?"
            End If

            Debug.Print "INI: " & .Count

            objPdf.AddFileToQueue vInputFile1
            Debug.Print "After1: " & .Count & " | lCounter: " & lCounter; " | " & .GetJobByIndex(0).PrintJobInfo.PrintJobName

            objPdf.AddFileToQueue vInputFile2

            If .Count > 1 Then
                Debug.Print "After2: " & .Count & " | lCounter: " & lCounter & " | " & .GetJobByIndex(1).PrintJobInfo.PrintJobName
            Else
                Debug.Print "After2: " & .Count & " | lCounter: " & lCounter & " | ---"
            End If
        Loop Until .Count = 2

        .WaitForJobs 2, 5

        filename = .GetJobByIndex(1).PrintJobInfo.PrintJobName & ".pdf"

        .MergeAllJobs
        pelnanazwa = sMergedPDFname & filename

        If Len(Dir(pelnanazwa)) > 0 Then
            Kill pelnanazwa
        End If

        Set objPjb = .NextJob

        With objPjb
            .SetProfileByGuid "DefaultGuid"
            .SetProfileSetting "Printing.PrinterName", "PDFCreator"
            .SetProfileSetting "Printing.SelectPrinter", "SelectedPrinter"
            .ConvertTo pelnanazwa
        End With

        .Clear
    End With

ExitPdf:

    If Not objPjb Is Nothing Then
        If (Not objPjb.IsFinished Or Not objPjb.IsSuccessful) Then
            MsgBox "Nie mozna przekonwertowac do pliku: " & filename, vbExclamation
        Else
            Debug.Print "Combine to: " & filename
            MsgBox "Scalanie plikow zakonczone sukcesem", vbInformation
            Err.Clear
        End If
    End If

    If Not objQue Is Nothing Then objQue.ReleaseCom

    Set objPdf = Nothing
    Set objQue = Nothing
    Set objPjb = Nothing
    Debug.Print String(20, "=")

    If Err.Number = 5000 Then
        Resume Combine
    End If

    Exit Sub

ErrPdf:
    If Err.Number = 5000 Then
        If lCount > 1 Then
            'drugie i kolejne wystąpienie błędu - pytaj użytkownika
            If MsgBox(Err.Description, vbExclamation + vbYesNo) = vbYes Then
                GoTo ExitPdf
            Else
                Resume ExitPdf
            End If
        Else
            'pierwsze wystąpienie błędu - spróbuj ponownie bez pytania
            GoTo ExitPdf
        End If
    Else
        MsgBox Err.Description, vbExclamation
        Resume ExitPdf
    End If
End Sub

Paskudztwo. Ale przynajmniej u mnie działa.
Aha, testowane na najnowszej dostępnej wersji 4.0.3.

Tyle, że nie podniecać się za bardzo tym rozwiązaniem. Po wielokrotnym uruchomieniu kodu, przeszedłem do programu PDFCreator. A tam całe stado osieroconych zadań. COM albo nie udostępnia możliwości ich usunięcia, albo nie działa prawidłowo. Nie badałem, bo dokumentacja techniczna nie zachęca do zgłębiania tematu.
Mówię o tym, bo przy masowym generowaniu scalonych plików nie należy wykluczyć, że te sieroty staną się źródłem problemów. Nie badałem np. czy zostaną automatycznie usunięte po restarcie systemu (a w Twoim przypadku, restart chyba zdarza się rzadko). Być może należałoby czyścić listę ręcznie co jakiś czas. Albo... skorzystać z innych rozwiązań (innego programu).

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 383693 Skopiuj do schowka
 
 
stingtanner
Stały bywalec Excelforum


Wersja: Win Office 2019
Pomógł: 2 razy
Posty: 353
Wysłany: 14-03-2020, 12:17   

Dziękuję Artik za poświęcony czas.
W poniedziałek sprawdzę na żywym organizmie. Pliki do testów już czekają w dużej ilości :)
ID posta: 383703 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2888 razy
Posty: 9578
Wysłany: 15-03-2020, 12:25   

Przedstawiony wcześniej kod edytowałem, poprawiając obsługę błędów, bo była napisana wadliwie.

Ale temat nie daje mi spokoju, więc go jeszcze nieco zgłębiłem.
Zastanawiałem się gdzie PDFCreator przechowuje informacje o kolejce wydruku. Przeszukałem folder AppData - nic, zajrzałem do Rejestru - nic. Wreszcie znalazłem:
Kod:
Environ("Temp") & "\PDFCreator\Spool
Po dodaniu do kolejki dwóch plików, np. 50018186_Stückliste.pdf i 50018186.pdf, w folderze Spool tworzone są puste podfoldery o nazwach tych plików. Po scaleniu (objPjb.ConvertTo pelnanazwa) zakończonym sukcesem, oba podfoldery są usuwane.
Z niewyjaśnionych przyczyn, gdy dwukrotnie próbujemy tę samą parę plików scalić (być może, że chodzi szczególnie o drugi z dodawanych plików, że jest ten sam co wcześniej) dochodzi do błędu w interfejsie COM. Wówczas powstają osierocone zadania do drukowania, które pozostają w kolejce. W Spool pozostają podfoldery o nazwach scalanych plików (z inkrementowanym przyrostkiem liczbowym). Myślę sobie, jeżeli przed uruchomieniem makra (a w zasadzie programowo przed wskazaniem nowej pary plików) usunę podfoldery w Spool, to powinno być cacy. Niestety nie jest. Każdorazowe czyszczenie Spool powodowało jeszcze większą niestabilność działania kodu. Nie zrozumiałem niestety całego mechanizmu działania PDFCreatora. :-(
Z obserwacji wynika, że problem pojawia się w momencie, gdy próbujemy dwukrotnie scalić tę samą parę plików. Można też zauważyć, że główny problem jest związany z drugim plikiem. Wykonywałem wiele testów, w których wskazywałem jako pierwszy ciągle ten sam plik (50018186_Stückliste.pdf). Dopóki, jako drugi, wskazywałem za każdym razem inny - błąd nie powstawał.
Reasumując. Ponieważ będziesz tworzył różne pary plików do scalenia, nie powinieneś napotkać na większe problemy. Pewnikiem warto co jakiś czas zaglądać do folderu Spool i go oczyścić. Można to robić programowo, ale czyszczenie nie może być elementem kodu, który wykonuje główne zadanie.
Kod:
Sub CzyscSpool()
    Call Delete_All_Files_and_Subfolders(Environ("Temp") & "\PDFCreator\Spool")
End Sub


Sub Delete_All_Files_and_Subfolders(strParentFolder As String, Optional FSO As Object)
    Dim IsNotFSO    As Boolean
    Dim objFSO      As Object

    Set objFSO = FSO

    If objFSO Is Nothing Then
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        IsNotFSO = True
    End If

    'Check if slash is added
    If Right(strParentFolder, 1) = "\" Then
        'If added remove it from the specified path
        strParentFolder = Left(strParentFolder, Len(strParentFolder) - 1)
    End If

    'Check Specified Folder exists or not
    If objFSO.FolderExists(strParentFolder) Then
        'Delete All Files
        objFSO.DeleteFile strParentFolder & "\*.*", True
        'Delete All Subfolders
        objFSO.DeleteFolder strParentFolder & "\*.*", True
    End If

    If IsNotFSO Then
        Set objFSO = Nothing
    End If

End Sub

Zastanowiłbym się jednak nad wykorzystaniem innego narzędzia do scalania, bo wszystko powyższe pachnie partyzantką.

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 383724 Skopiuj do schowka
 
 
stingtanner
Stały bywalec Excelforum


Wersja: Win Office 2019
Pomógł: 2 razy
Posty: 353
Wysłany: 16-03-2020, 07:42   

Artik, niezłe rozłożenie problemu na czynniki pierwsze :)

Jak pisałem w 1 poście, prócz PDFCreatora mam jeszcze (wykorzystując darmową wersję) możliwość użycia PDF Architect 5. Ma on tez możliwość w wersji darmowej, łączenia plików. Używając go jednak w sposób normalny, to łączenie 2 plików trwa o wiele dłużej niż używając PDFCreatora.

Jeśli natomiast żadna z tych opcji nie zda egzaminu no to udam się do szefa z prośbą o kupienie Adobe Acrobat i wtedy (teoretycznie) nie będzie problemu :)
ID posta: 383753 Skopiuj do schowka
 
 
Tajan


Pomógł: 4630 razy
Posty: 10245
Wysłany: 16-03-2020, 08:25   

Ja do obróbki plików pdf używam darmowego programu pdftk.exe. Nie wymaga instalacji i jest sterowany z linii komend więc w VBA można bez problemu wykorzystać polecenie Shell przez co cały program,w porównaniu do użycia PDFCreatora, jest dość prosty.
ID posta: 383755 Skopiuj do schowka
 
 
stingtanner
Stały bywalec Excelforum


Wersja: Win Office 2019
Pomógł: 2 razy
Posty: 353
Wysłany: 16-03-2020, 09:00   

Tajan,
Możesz podesłać jakaś próbkę wraz z tym programikiem.
Kiedyś Marecki robił coś z PDF'ami dla mnie, też używał jakiegoś zewnętrznego programu, ale niestety tamten program w tamtym czasie był blokowany u mnie w Firmie. teraz się troszkę zmieniło i może to co ty proponujesz zadziała.

Ale to była by tylko kilku razowa próba pewnie, bo za chwile bym dostał wiadomość od Admina o używaniu szkodliwego oprogramowania ;/
ID posta: 383758 Skopiuj do schowka
 
 
J_B 
Excel Expert


Wersja: Win Office 2016
Pomógł: 416 razy
Posty: 1088
Wysłany: 16-03-2020, 09:14   

Cytat:
Możesz podesłać jakaś próbkę wraz z tym programikiem
Jeden z przykładów
Janusz
ID posta: 383761 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2888 razy
Posty: 9578
Wysłany: 16-03-2020, 09:55   

stingtanner napisał/a:
Kiedyś Marecki robił coś z PDF'ami
To było czytanie tekstu z PDF-a. Nie nada się do scalania.

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 383765 Skopiuj do schowka
 
 
stingtanner
Stały bywalec Excelforum


Wersja: Win Office 2019
Pomógł: 2 razy
Posty: 353
Wysłany: 16-03-2020, 10:13   

Trochę testów zrobione. Partyzantka działa ale jak to na partyzantkę przystało czasami coś się wydarzy.

Po wklejeniu "na bezczelnego" kodu i zmienieniu tylko ścieżki do zapisanych plików wszystko było okej.
Pierwsze uruchomienie kodu poszło dobrze pliki się połączyły.
Jedziemy z testem dalej. Nowe pliki, nowe nazwy, idzie dobrze.

Nagle BOM. Obrazek poniżej.

I teraz tak, co zauważyłem.
Nie udało mi się wywołać tego błędu samemu, pojawia się dopiero przy którymś z kolei uruchomieniu kodu.
Jak już się pojawił, to wtedy udało mi się go wywołać za każdym razem kiedy tego chciałem.

Przykład:
Pojawia się błąd po wybraniu Plik1, Plik2
Wybieram kolejne pliki Plik3, Plik4, i wtedy mam błąd
Wybieram 2 inne Plik5, Plik6, błąd.

Jak zlikwidować błąd:
Muszę wybrać znowu Plik1, Plik2. Błąd znika
Plik3, Plik4 błędu brak
Itd.

I tak co jakiś czas w obojętnie jakiej kolejności.

Rozwiązanie takie jest w jakimś stopniu do zaakceptowania, bo i tak sprawdzamy pliki czy wszystko poszło dobrze. Z czasem pewnie będzie to irytujące, i pojawi się pytanie "Czy nie można zlikwidować jakoś tego błędu?" Wtedy to pewnie zacznę upychać gdzie się da: Application.DisplayAlerts

Tak to wstępnie wygląda.

Przechwytywanie1111.JPG
Plik ściągnięto 180 raz(y) 14.67 KB

ID posta: 383766 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe