Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Crystal reports + C# -> Fakura?

30 Gru 2009 15:47 4336 8
  • Poziom 21  
    Witam!

    Piszę program w C#, praktycznie już jest ukończony ale potrzebuję zrobić drukowanie faktur.
    Dane pobieram z bazy, nie mam problemu z ich wyświetleniem w formatkach.
    Problem zaczyna się w crystal reports, nigdy wcześniej nie miałem z nim styczności.
    Potrzebuję do formatki raportu dodać źródło danych dataset które sobie wcześniej tworzę i wypełniam przy pomocy data adapter danymi faktury.
    W fakturze mam dwa typy danych.

    Pierwsze: nazwa sprzedawcy, klienta, daty itp. (pojedyńcze zmienne)
    Drugie: asortyment który znajduje się na fakturze (dataset)

    Jak zrobić aby każdy wiersz dataset wyświetlał się w raporcie tak jak na fakturze?
    Potrzebuję również robić podsumowanie tabelki, będzie to pewnie jakiś subraport (nie wiem jak to się nazywa), chciałbym przesłać w to miejsce drugiego dataset który ma w swoich rekordach stawkę vat i wartosc ktora jest wzięta z faktury.


    Proszę o pomoc!
  • Poziom 42  
    Nie pamiętam, jak to w CR było, ale generalnie robisz bandę szczegółów, która będzie wyświetlała dane; do kolejnych rekordów przechodzisz w zdarzeniu NeedData lub jakoś podobnie. Podsumowanie jest specjalnym typem bandy, ale o wartości musisz zadbać sam.
  • Poziom 21  
    Dzięki za zainteresowanie moim problemem.

    Dane mam przygotowane:

    1. DataSet, trzymam tutaj wiersze z pozycjami faktury
    2. DataSet, ten przechowuje wiersze z podliczeniem stawek VAT i ich wartości
    3. zmienne pojedyńcze, tutaj mam nazwę klienta, daty itp.

    Jak to można połączyć z CR?
  • Poziom 42  
    w zdarzeniu OnPrint (czy czyms w tym rodzaju) po prostu wybierasz dane z rekordu (Fields[]). Gdzieś tam w zdarzeniu zapotrzebowania na dane dla formularza będzie też wskazanie, czy są następne (równoważnik EOF). Nie ma żadnego przypisania (a przynajmniej nie pamiętam niczego takiego) - musisz ręcznie przyporządkowywać wartości.
  • Poziom 21  
    A skąd CR wie że dana którą przekazuję jest w relacji z innymi danymi (np nazwa towaru, cena itd) i że ma to potraktować jako rekord?
    Możesz mi wytłumaczyć która sekcja w CR co robi?
  • Poziom 42  
    Żadna. Musisz sam wyciągać dane i przypisywać wartości odpowiednim elementom na raporcie.

    1. Tworzysz zapytanie
    2. Wykonujesz je i rozpoczynasz generowanie raportu (Begin lub BeforePrint)
    3. Przypisujesz labelom wartości pól aktualnego rekordu.
    4. Raport prosi o dane (DataNeed)
    5. Przechodzisz do następnego rekordu i wskazujesz, czy są kolejne dane.
    6. Kończysz wydruk i zamykasz wyniki zapytania (AfterPrint).

    Dane i raport nie są w żaden sposób powiązane jako komponenty. Przekazujesz wartości poprzez zmienne.
  • Poziom 21  
    A jak w raporcie ustawić te pola do rekordów?
  • Poziom 16  
    W crystal reports nie trzeba podpinać żadnych procedur, ani ręcznie przeskakiwać między rekordami. Jeśli masz silnie typowany DataSet to dodajesz go w edytorze jako źródło danych dla tego raportu. Chodzi tu tylko o to żeby Crystal wiedział jakie dane będą dostępne do generowania raportu (nazwy pól, typy). Gdy to zrobisz możesz przeciągnąć pola na formatkę do odpowiedniej sekcji. Sekcja details to sekcja która iteruje wszystkie rekordy z DataSeta, czyli do niej wstaw pozycje faktury. Sekcja header wyświetla tylko jeden rekord, który najlepiej przekazać przez osobną tabelę w datasecie. Jeśli danych do nagłówka jest mało to można je też przekazać jako parametry raportu. W edytorze definiujesz parametr (nazwa, typ) i przeciągasz go na raport tak jak zwykłe pole z DataSeta. Jeśli w podsumowaniu chcesz wyświetlić tylko jeden rekord (może być z innej tabeli), to raczej nie potrzeba podraportów.

    Żeby wygenerować raport tworzysz jego instancję, przypisujesz mu instancję Dataseta z rekordami faktury, ustawiasz opcjonalnie wartości parametrów (jeśli wcześniej zdefiniowałeś jakieś na raporcie). Teraz w zależności od tego czy chcesz raport wyświetlić czy zapisać wywołujesz albo DataBind() na viewerze do którego podpiąłeś raport albo raport.ExportToStream(...).

    Generalnie crystal reports to jedno wielkie nieintuicyjne, pełne bugów g*. Ciężko go zmusić żeby działał tak jak się tego chce.