mojaSymfonia FORUM
https://forum.mix-soft.pl/

HM wyciągnięcie z bazy nagłowek ransakcji i jej pozycji
https://forum.mix-soft.pl/viewtopic.php?f=15&t=963
Strona 1 z 2

Autor:  lechu [ 2009-06-30, 12:42 ]
Tytuł:  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ć!!! :cry:

Autor:  rafal [ 2009-06-30, 13:03 ]
Tytuł: 

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

Autor:  lechu [ 2009-06-30, 14:02 ]
Tytuł: 

Raport omija pętlę

Kod:
while errMG != 0


nie pobiera pozycji, wnioskuję, że nie spełnione jest to wyrażenie

Autor:  rafal [ 2009-06-30, 14:53 ]
Tytuł: 

w takim razie pomyliłem się
Kod:
while errMG == 0

Autor:  lechu [ 2009-06-30, 15:30 ]
Tytuł: 

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??

Autor:  rafal [ 2009-06-30, 15:55 ]
Tytuł: 

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")

Autor:  lechu [ 2009-07-01, 09:25 ]
Tytuł: 

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

Autor:  rafal [ 2009-07-01, 11:11 ]
Tytuł: 

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"?

Autor:  lechu [ 2009-07-02, 09:29 ]
Tytuł: 

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

Autor:  rafal [ 2009-07-02, 11:57 ]
Tytuł: 

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

Autor:  lechu [ 2009-07-03, 14:46 ]
Tytuł: 

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.

Autor:  rafal [ 2009-07-03, 22:53 ]
Tytuł: 

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ą
Kod:
baseTw tw


a nie
Kod:
String sciezka3=KatalogFirmy() + "51tw.dat"
Int baza_tw=Open sciezka3 For Base "tw"

Autor:  lechu [ 2009-07-14, 12:32 ]
Tytuł: 

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

Autor:  lechu [ 2009-08-26, 09:40 ]
Tytuł: 

Rozwiązałem już ten problem.
Dziękuję za pomoc! ;-)

Autor:  tomas [ 2009-08-27, 20:57 ]
Tytuł: 

TEŻ MAM TAKI PROBLEM. NAPISZ JAK TO ROZWIĄZAŁEŚ.

Strona 1 z 2 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/