Skocz do zawartości

Wzorce wydruków - tabela z własnym zapytaniem SQL

Polecane posty

Mam problem z głębszą edycją wzorca wydruku.

 

Chciałbym pod wcześniej generowaną oryginalną tabelą dołączyć własną tabelkę.

Mam dodane Connection do MSSQL przygotowane zapytanie, i dochodzę do fragmentu gdzie w żaden sposób nie mogę zmusić programu do umieszczenia danych na wydruku.

 

Sprawdzałem już najróżniejsze kombinacje:

  1. Sam DataBand z podpięciem zapytania
  2. HeaderBand + DataBand z podpiętym zapytaniem
  3. HeaderBand + DataBand + FooterBand z podpiętym zapytaniem
  4. Oraz wariacje powyższych oraz inne których nie jestem w stanie już nawet powtórzyć.

Jedyną opcją jaką udało mi się umieścić to DataBand bez podpiętego zapytania z wymuszoną liczbą powtórzeń (Count Data).

Więc czy znajduje się na forum ktoś na tyle obyty z programem od wydruków, kto pomoże z rozwiązaniem tego problemu, bądź też nakieruje na rozwiązanie.

 

PS: Próbowałem również podmienić podłączenie domyślnej tabeli na swoją, niestety z identycznym efektem.

Link to postu

Ciężko jest mi powiedzieć jaki jest problem dopóki nie zobaczę co Pan chce osiągnąć, jaka jest struktura tej dodatkowej tabeli i gdzie Pan ją chce umieścić. Chciałem wygenerować u siebie jakiś prosty przypadek zastosowania własnego źródła danych więc utworzyłem dodatkową tabelę o nazwie DodatkoweDaneDokumentow, która wprowadza jakiś dodatkowy opis do dokumentu i uzupełniłem ją przykładowymi danymi. Wygląda to tak:

CREATE TABLE DodatkoweDaneDokumentow
(
	IdDokumentu int NOT NULL,
	Informacje VARCHAR(MAX) NOT NULL DEFAULT(''),
	PRIMARY KEY (IdDokumentu),
	FOREIGN KEY (IdDokumentu) REFERENCES ModelDanychContainer.Dokumenty(Id)
);
INSERT INTO DodatkoweDaneDokumentow (IdDokumentu, Informacje)
VALUES ((SELECT TOP 1 Id FROM ModelDanychContainer.Dokumenty WHERE NumerWewnetrzny_PelnaSygnatura = 'FS 1/MAG/2018'), 'Dodatkowe dane dla dokumentu FS 1/MAG/2018');
INSERT INTO DodatkoweDaneDokumentow (IdDokumentu, Informacje)
VALUES ((SELECT TOP 1 Id FROM ModelDanychContainer.Dokumenty WHERE NumerWewnetrzny_PelnaSygnatura = 'FS 2/MAG/2018'), 'Dodatkowe dane dla dokumentu FS 2/MAG/2018');
INSERT INTO DodatkoweDaneDokumentow (IdDokumentu, Informacje)
VALUES ((SELECT TOP 1 Id FROM ModelDanychContainer.Dokumenty WHERE NumerWewnetrzny_PelnaSygnatura = 'FS 3/MAG/2018'), 'Dodatkowe dane dla dokumentu FS 3/MAG/2018');

We wzorcu wydruku stworzyłem sobie źródło danych do swojej bazy i wpisałem tam takie zapytanie:

select TOP 1 Informacje
from DodatkoweDaneDokumentow
WHERE IdDokumentu = @IdDokumentu;

Konfiguracja źródła danych wygląda tak jak na załączniku.

Jako Expression we własnościach parametru @IdDokumentu wpisałem

Dokument.encjaDokumentu.Id

tak, aby zapytanie zawsze było uruchamiane w kontekście drukowanego dokumentu.

Na wzorcu dodałem zwykły DataBand z podłączonym źródłem danych i jakby to napisać - "u mnie działa". Dla dokumentów, które posiadają powiązanie z "dodatkowymi danymi" wyświetla się dodatkowa sekcja.

Podejrzewam, że problem jest nie z samym umiejscowieniem databanda, a bardziej z tym, że Pana zapytanie nie zwraca żadnych wyników bądź nie wykonuje się w odpowiednim kontekście (może brakuje właśnie jakiegoś parametru, który wskazywałby odpowiednie przefiltrowanie wyników). Potrzebowałbym więcej szczegółów żebym mógł Panu coś więcej pomóc. Może proszę spróbować najpierw z jakimś prostym przykładem (tak jak to opisałem w tym poście) i dopiero potem iść dalej w las.

data_source.png

Link to postu

Pytanie nawiązuje poniekąd do tego wątku.

 

Co mam w planach zrobić, mam własne zapytanie które wyrzuca wszystkie nieopłacone faktury sprzedaży bez tych które znajdują się już na dokumentach windykacyjnych(tak wiem przy każdym wydruku będzie to inna lista)

SELECT
	ROW_NUMBER() OVER (ORDER BY DATEDIFF(DAY, rozrachunki.TerminPlatnosci, GETDATE()) DESC) AS Id
	,podmioty.NazwaSkrocona
	,rozrachunki.DataDokumentuZrodlowego
	,rozrachunki.DokumentZrodlowy
	,rozrachunki.Kwota
	,rozrachunki.KwotaPozostala
	,rozrachunki.TerminPlatnosci
	,DATEDIFF(DAY, rozrachunki.TerminPlatnosci, GETDATE()) AS [DniSpoznienia]
	,rozrachunki.KwotaNierozliczona

FROM ModelDanychContainer.Podmioty AS podmioty
LEFT JOIN ModelDanychContainer.Rozrachunki AS rozrachunki ON rozrachunki.Podmiot_Id = podmioty.Id
LEFT JOIN ModelDanychContainer.PozycjeDokumentowWindykacyjnych AS pozycjeWindykacyjne ON pozycjeWindykacyjne.DokumentZrodlowy = rozrachunki.DokumentZrodlowy

WHERE podmioty.Id = @dluznikId AND rozrachunki.Typ = 1 AND rozrachunki.KwotaPozostala != 0 AND podmioty.Typ = 2 AND (rozrachunki.Zrodlo = 4 OR rozrachunki.Zrodlo = 5) AND pozycjeWindykacyjne.DokumentZrodlowy IS NULL
ORDER BY (DATEDIFF(DAY, rozrachunki.TerminPlatnosci, GETDATE())) DESC

dla jasności

@dluznikId = Dluznik.Podmiot.Id

 

No i taką oto tabelę chciałbym wstawić jako drugą tabelę pod dolnym tekstem na wezwaniu do zapłaty.

Link to postu
×
×
  • Dodaj nową pozycję...