|
HM wyciągnięcie z bazy nagłowek ransakcji i jej pozycji
Autor |
Wiadomość |
lechu
Rejestracja: 2009-06-22, 14:08 Posty: 11
|
HM wyciągnięcie z bazy nagłowek ransakcji i jej pozycji
Witam!
Mam taki problem, dopiero zapoznaję się z językiem raportów.
Opiszę co chcę zrobić:
Mam w Handlu zaznaczony dokument MM (dowolnie - czy +), chcę napisać raport, który wyśle do jednego pliku txt podstawowe dane nagłówka, a do drugiego pliku txt w poszczególnych wierszach pozycje tej MM-ki.
Udało mi się ustalić potrzebne dane do pliku nagłówka, które chcę wyeksportować z pliku mg.
To samo z dla pozycji z pliku mz (nie mogę tylko znaleźć gdzie jest rodzaj do którego jest przypisany towar).
Raport pobiera mi dane nagłówka dowolnej zaznaczonej MM-ki, ale nie chce pobrać jej elementów pozycji, próbowałem na różne sposoby i nie wiem gdzie tkwi błąd!?
Oto urywek raportu:
Kod: //Otwarcie bazy i czytanie danych. String sciezka1=KatalogFirmy() + "51mg.dat" Int baza_mg=Open sciezka1 For Base "mg" baseError (baza_mg, 4)
//Otwarcie bazy i czytanie danych. String sciezka2=KatalogFirmy() + "51mz.dat" Int baza_mz=Open sciezka2 For Base "mz" baseError (baza_mz, 4)
long czy_zaz_dok = settaggedpos(fs)
//Ustawienie rekordu bazy do odczytu SetKey (baza_mg, "ID") SetKeySeg (baza_mg, "ID", getlineid())
SetKey ( baza_mz,"super" ) SetKeySeg( baza_mz,"super",getlineid() ) SetKeySeg( baza_mz,"lp",0)
//Odczytanie rekordu bazy GetRec (baza_mg, EQ) baseError (baza_mg, 4)
//Sprawdzenie zapisanych w rekordzie informacji pid=getfield(baza_mg,"id")
//Odczytanie rekordu bazy GetRec (baza_mz, EQ) baseError (baza_mz, 4)
//Sprawdzenie zapisanych w rekordzie informacji
p4a=getfield (baza_mg, "kod")
ep2=getfield (baza_mz, "lp") ep3=getfield (baza_mz, "kod") ep5=getfield (baza_mz, "opis") ep8=getfield (baza_mz, "ilosc") ep9=getfield (baza_mz, "jm") ep10=getfield (baza_mz, "iloscjedn") ep12=getfield (baza_mz, "cena")
Print # Numer_pliku1; pid;p4a;"a" Print # Numer_pliku2; nr_id;",";ep2;",";ep3;",";"rodzaj towaru";",";ep5;","; Print # Numer_pliku2; "\"\",\"\",";ep8;",";ep9;",";ep10;","; Print # Numer_pliku2; "0.00,";ep12
Proszę o pomoc jak to rozwiącać!!!
Ostatnio zmieniony 2009-06-30, 12:52 przez lechu, łącznie zmieniany 1 raz
|
2009-06-30, 12:42 |
|
|
Autor |
Wiadomość |
Mix-soft.pl
|
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Kod: // Odczytanie pozycji dokumentu magazynowego
SetKey ( baza_mz,"super" ) SetKeySeg( baza_mz,"super",getlineid() ) SetKeySeg( baza_mz,"lp",0)
int errMG = GetRec( baza_mz, GE )
while errMG != 0 if GetField( baza_mz, "super") != getlineid() then exit // tu odczytujemy poszczególne pozycje i np:. zapisujemy do pliku poleceniem print
errMG = GetRec( baza_mz, NX ) wend
|
2009-06-30, 13:03 |
|
|
lechu
Rejestracja: 2009-06-22, 14:08 Posty: 11
|
Raport omija pętlę
nie pobiera pozycji, wnioskuję, że nie spełnione jest to wyrażenie
Ostatnio zmieniony 2009-07-01, 07:31 przez lechu, łącznie zmieniany 1 raz
|
2009-06-30, 14:02 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
w takim razie pomyliłem się
|
2009-06-30, 14:53 |
|
|
lechu
Rejestracja: 2009-06-22, 14:08 Posty: 11
|
SUPER DZIAŁA !!!
DZIĘKI!!!
Mam jeszcze pytanie jak zrobić:
dla pozycji z pliku mz (nie mogę tylko znaleźć gdzie jest rodzaj do którego jest przypisany towar).
chcę podać rodzaj towaru, do którego jest on przypisany, a w bazie mz nie mogę tego znaleźć, czy jest on w innym pliku ... towary??
|
2009-06-30, 15:30 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
pobieranie id_rodzaju
Kod: basetw tw tw.GetRecById(id_towaru) id_rodzaju = tw.GetField("rodzaj") pobieranie nazwa_rodzaju Kod: basext xt xt.GetRecById(id_rodzaju) nazwa_rodzaju = xt.GetField("kod")
|
2009-06-30, 15:55 |
|
|
lechu
Rejestracja: 2009-06-22, 14:08 Posty: 11
|
Po wpisaniu tego do raportu, zamyka Handel z błędem.
Jak modyfikuję to mam zapytanie co to jest
GetRecById ???
nie mogę znaleźć tego polecenia w języku raportów systemu Symfonia
|
2009-07-01, 09:25 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
lechu pisze: Po wpisaniu tego do raportu, zamyka Handel z błędem. Jak modyfikuję to mam zapytanie co to jest
GetRecById ???
nie mogę znaleźć tego polecenia w języku raportów systemu Symfonia
a czy przypadkiem nie wklejasz tego do pętli "while"?
|
2009-07-01, 11:11 |
|
|
lechu
Rejestracja: 2009-06-22, 14:08 Posty: 11
|
Wklejam do pętli, bo pętlą pobieram poszczególne pozycje transakcji. Do poszczególnej pozycji transakcji (bo tam jest podany towar), chcę dodać rodaj tego towaru. Spróbowałem jako podprogram, ale wtedy wywala błąd.
Kod: p4a=GetField (baza_mg, "kod")
String pocz1 = p4a Buf = pocz1 <---------- Delete "/09/MM-" p4 = Buf return
Jak zaczyna już działać, to wywala komunikat:
niemożliwa konwersja z record na string
(wskazując wiersz, tam gdzie zaznaczyłem strzałkę)
i wywala mi te komunikat na wszystkich podprogramach, a jest ich kilka
Ostatnio zmieniony 2009-07-02, 11:59 przez lechu, łącznie zmieniany 1 raz
|
2009-07-02, 09:29 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
No właśnie. Przyjżyj się dokładnie. Jest tam deklaracja zmiennej xt i tw.
Nie można robić deklaracji w pętlach :)
Najlepiej deklaracje przenieść na początek raportu
Kod: basetw tw basext xt .... a w pętli Kod: tw.GetRecById(id_towaru) id_rodzaju = tw.GetField("rodzaj") ... xt.GetRecById(id_rodzaju) nazwa_rodzaju = xt.GetField("kod")
Cytuj: String pocz1 = p4a Buf = pocz1 <---------- Delete "/09/MM-" p4 = Buf return
a z tym to zupełnie nie wiem o co Ci chodzi
|
2009-07-02, 11:57 |
|
|
lechu
Rejestracja: 2009-06-22, 14:08 Posty: 11
|
zdefiniowałem bazy przed pętlą
Kod: String sciezka3=KatalogFirmy() + "51tw.dat" Int baza_tw=Open sciezka3 For Base "tw" baseError (baza_tw, 4) mam komunikat nie znana zmienna GetRecById Starałem się te podpowiedzi jakoś przerobić: Pobieram z bazy mz pole idtw potem muszę ustawić bazę Kod: SetKey ( baza_tw,"id" ) SetKeySeg( baza_tw,"id",getlineid() ) SetKeySeg( baza_tw, "rodzaj" ,0)
id_rodzaju = getfield(baza_tw, "rodzaj") potem ustawiam bazę xt Kod: SetKey ( baza_xt,"id" ) SetKeySeg( baza_xt,"id",getlineid() ) SetKeySeg( baza_mz,"kod",0 )
ep4 = GetField(baza_xt, "kod") ten kod powinien być moją nazwą rodzaju towaru. Ale dostaję komunikat podczas wykonywania raportu Klucz 'id' w bazie 'TW' nie ma pola 'rodzaj' Coś musiałem źle napisać w tym raporcie Mam jeszcze jedno pytanie. Pobieram zaznaczony dokument i potem jego pozycje towarowe -> to działa Teraz chcę pobierać naraz kilka dokumentów z ich pozycjami. Robię to tak: dane pobieranego nagłówka Kod: p4a=GetField(baza_mg, "kod") p5=GetField(baza_mg, "seria") p6a=GetField(baza_mg, "datasp") p7a=getfield(baza_mg, "khkod") p1618=GetField(baza_mg, "netto") p22=GetField(baza_mg, "osoba") i wpisuję do pliku ALE raport wpisuje mi poprawne pozycje wszystkich zaznaczonych dokumentów, ale nagłówki dokumentu od kodu do khkod pozostawia z poprzedniego dokumentu, a od netto i osoba już podaje prawidłowo nagłówek następnego dokumentu. Odczytuję nagłówki dokumentów: Kod: long czy_zaz_dok = settaggedpos(fs) while czy_zaz_dok ... tu ustawiam bazy, pobieram dane, gosuby, ... czy_zaz_dok = settaggedpos(nx) wend
Cały przyszły tydzień nie będę miał chyba dostępu do internetu, to ewentualnie odezwię się jak będę już go miał.
Dziękuję za obecną pomoc.
Ostatnio zmieniony 2009-07-03, 22:44 przez lechu, łącznie zmieniany 1 raz
|
2009-07-03, 14:46 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
lechu pisze: zdefiniowałem bazy przed pętlą Kod: String sciezka3=KatalogFirmy() + "51tw.dat" Int baza_tw=Open sciezka3 For Base "tw" baseError (baza_tw, 4) mam komunikat nie znana zmienna GetRecById zadziała dopiero jak będziesz otwierał bazy za pomocą a nie Kod: String sciezka3=KatalogFirmy() + "51tw.dat" Int baza_tw=Open sciezka3 For Base "tw"
|
2009-07-03, 22:53 |
|
|
lechu
Rejestracja: 2009-06-22, 14:08 Posty: 11
|
Zrobiłem tę zamianę z mojej definicji bazy na basetw tw.
Raport wtedy idzie, ale podaje jakieś rodzaje dla transakcji wz WZ, dla pz WZ, dla mm MM-, to wszystko jako rodaj każdego towaru na poszczególnych pozycjach transakcji, a nie rodzaje towaru.
Mam pytanie: otwieram konkretną bazę danych zgodnie z pomocą do języka raportów
//Określenie położenia pliku bazy
String sciezka=KatalogFirmy() + "TW.DAT"
//Otworzenie bazy danych
Int nrBazy=Open sciezka For Base "TW"
BaseError (sciezka, 4)
i to mi działa.
Dlaczego podałeś, że mam dokonać tej zamiany na basetw tw
//Uworzenia struktury definicji bazy danych
BaseDef bDef
chyba to dobrze rozumię? Czy nie wystarczy tylko otworzyć bazę, żeby pobrać z niej dane?
Jak dokonałem tej zamiany to polecenie
tw.GetRecById(id_towaru)
zadziałało, co to za polecenie, bo nie ma go w tej pomocy do języka raportów.
Znalazłem, że to polecenie VB, czy w raportach można używać również polecenia z VB? Jak tak, to czy wszystkich, czy tylko poszczególne.
Jak pobrać kolejną zaznaczoną transakcję z pozycjami, bo to co ja próbuję użyć daje część danych z pierwszej transakcji (nagłówek), a część z drugiej transakcji (te mają być).
Tak to robię:
long czy_zaz_dok = settaggedpos(fs)
while czy_zaz_dok
... tu ustawiam bazy, pobieram dane, gosuby, ...
czy_zaz_dok = settaggedpos(nx)
wend
|
2009-07-14, 12:32 |
|
|
lechu
Rejestracja: 2009-06-22, 14:08 Posty: 11
|
Rozwiązałem już ten problem.
Dziękuję za pomoc!
|
2009-08-26, 09:40 |
|
|
tomas
Rejestracja: 2007-11-15, 15:22 Posty: 55
|
TEŻ MAM TAKI PROBLEM. NAPISZ JAK TO ROZWIĄZAŁEŚ.
|
2009-08-27, 20:57 |
|
|
Kto jest online |
Użytkownicy przeglądający to forum: Bing [Bot] i 25 gości |
|
Nie możesz tworzyć 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 dodawać załączników
|
|
|
|