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

[HMF] Rezerwacja
https://forum.mix-soft.pl/viewtopic.php?f=15&t=1277
Strona 1 z 1

Autor:  sqza [ 2009-10-12, 19:06 ]
Tytuł:  [HMF] Rezerwacja

Niestety mam problem z tymi nieszczęsnymi Rezerwacjami w Forte.

Chodzi o modyfikację rezerwacji na dokumencie sprzedaży - zamiana (usunięcie i założenie nowej) rezerwacji ilościowej na rezerwację ze wskazaniem dostaw.

Udało mi się dokopać do obiektów BRezerwacja(przechowującego informacje o rezerwacjach) i BPwDostawRz odpowiedzialnego za wiązanie rezerwacji na danej pozycji dokumentu handlowego (sprzedaży) z konkretnymi rekordami dostaw (rekordy z bazy DW). Niestety nie mam pojęcia jak przy pomocy tego obiektu utworzyć nowe powiązania ze wskazanymi przeze mnie dostawami.

To co w Premium robiło się przy pomocy funkcji:
int RezerwacjaAutomatyczna(int baza, long Id, string() nazwyDostaw, float() ilosci )
w Forte jest - przynajmniej dla mnie - nieosiągalne.

Będę wdzięczny za pomoc w rozwiązaniu.

Autor:  barnie [ 2009-10-12, 20:55 ]
Tytuł: 

Wywalamy dostawy z dokumentu
Kod:
   dispatch xRz
   dispatch xDok = xFactory.NewObject("BDokumentXX")
   
      for iDokPoz = 1 to iDokPoz > xDok.pozycje.Count

         xRz=xDok.pozycje.item(iDokPoz).wlasciwosci.rezerwacje

         for iRz = 1 to irz > xRz.Count   
            xRezerwacja.Load((using "id=%l",xRz.item(iRz).id))
            if xRezerwacja.Delete()   != 0 then
               message "Nie można usunąć rezerwacji."
            endif
         next iRz
         

      next iDokPoz



Robimy rezerwację ze wskazaniem dostaw
Kod:
dispatch xTw = xFactory.NewObject("BTw")
dispatch xRezerwacja = xFactory.NewObject("BRezerwacja")
xRezerwacja.Edit()
xRezerwacja.typ = 1 
xRezerwacja.typrzrw = 2 // ze wskazaniem dostaw
xRezerwacja.towar = xTw.Give("kod='kod_rezerwowanego towaru'")
xRezerwacja.kontrahent = xKh.Give("kod='kod_kontrahenta'")
xRezerwacja.ilosc = 1
// wskazanie dostawy
dispatch xDostawy = xRezerwacja.powiazania
long i = xDostawy.find("dostawa = 'towar_dostawa_01'")
xDostawy.item(1).ilosc = 1.0
xRezerwacja.Save()

Autor:  sqza [ 2009-10-14, 11:41 ]
Tytuł: 

Poniższy przykład generuje rezerwację na kontrahenta czyli odpowiednik RezerwacjiRęcznej z HMP.

barnie pisze:
Wywalamy dostawy z dokumentu
Robimy rezerwację ze wskazaniem dostaw
Kod:
dispatch xTw = xFactory.NewObject("BTw")
dispatch xRezerwacja = xFactory.NewObject("BRezerwacja")
xRezerwacja.Edit()
xRezerwacja.typ = 1 
xRezerwacja.typrzrw = 2 // ze wskazaniem dostaw
xRezerwacja.towar = xTw.Give("kod='kod_rezerwowanego towaru'")
xRezerwacja.kontrahent = xKh.Give("kod='kod_kontrahenta'")
xRezerwacja.ilosc = 1
// wskazanie dostawy
dispatch xDostawy = xRezerwacja.powiazania
long i = xDostawy.find("dostawa = 'towar_dostawa_01'")
xDostawy.item(1).ilosc = 1.0
xRezerwacja.Save()


Mnie interesuje jak tworzyć (zmienić) rezerwację ze wskazaniem dostaw do pozycji konkretnego dokumentu np. dokumentu sprzedaży - jest to RezerwacjaAutomatyczna z HMP.

Linia
Kod:
long i = xDostawy.find("dostawa = 'towar_dostawa_01'")

zwraca wartość "-1", próbowałem stosować zamiast "dostawa" pole "iddw" aby wskazywać konkretną interesującą mnie dostawę mimo wszystko funkcja Find zwraca "-1".

Próbowałem modyfikować zaproponowany przez Berniego kod ustawiając pola:
- bazadokrz
- iddokrz
- bazapozrz
- idpozrz
Ale niestety nic to nie daje - niby wszystko zapisuje się bez błędu (funkcja Save nie zwraca błędnej wratości) a mimo wszystko rezerwacja ze wskazaniem dostaw nie tworzy się na wybranej pozycji dokumentu.

Autor:  barnie [ 2009-10-14, 15:06 ]
Tytuł: 

zmień w tym kodzie
Kod:
xRezerwacja.typrzrw = 1

Autor:  sqza [ 2009-10-14, 21:18 ]
Tytuł: 

Gdyby to było takie proste ;P

Z tego co wyczytałem w dokumentacji to 2 oznacza rezerwację ze wskazaniem dostaw.
Więc powinno być :
Kod:
xRezerwacja.typrzrw = 2


Zauważyłem ze rezerwacja sama w sobie zakłada się odpowiednia - problem jest z właściwością pozycji (pole typ w bazie ma wartość błędną) - niestety nie wiem jak zmienić ją z poziomu obiektów - oczywiście mógłbym ten parametr zmieniać przy pomocy bezpośredniego zapisu do bazy (jest to jednak mało "eleganckie" rozwiązanie).

Co ciekawe kod:
Kod:
if xRezerwacja.Delete()    != 0 then
   message "Nie można usunąć rezerwacji."
endif

zwraca wartość "-1" - pytanie czemu.

Problem jest tez z przypadkiem jeżeli na pozycji jest już założona rezerwacja ilościowa. W tym przypadku HMF a bazie RZ ma założone dodatkowe rekordy używane do rezerwacji ilościowej z którymi tworzone są powiązania z pozycji dokumentów. Jeżeli próbuję usunąć rezerwację i zakładam nową to nie wiem skąd się bierze ten rekord ilościowy.

Zapewne wszystkie problemy rozwiąże zmiana parametru typrzrw ale we właściwościach pozycji - niestety nie mam zielonego pojęcia jak to zrobić Save zwraca dziwne wartości.

Autor:  barnie [ 2009-10-15, 08:45 ]
Tytuł: 

sqza pisze:
Gdyby to było takie proste ;P

Z tego co wyczytałem w dokumentacji to 2 oznacza rezerwację ze wskazaniem dostaw.
Więc powinno być :
Kod:
xRezerwacja.typrzrw = 2


jak zmienisz na 1 to utworzy Ci najpierw rezerwację ilościową co spowoduje, że xDostawy.find("dostawa = ''") nie będzie Ci zwracało -1

Autor:  sqza [ 2009-10-15, 10:21 ]
Tytuł: 

barnie pisze:
sqza pisze:
Gdyby to było takie proste ;P

Z tego co wyczytałem w dokumentacji to 2 oznacza rezerwację ze wskazaniem dostaw.
Więc powinno być :
Kod:
xRezerwacja.typrzrw = 2


jak zmienisz na 1 to utworzy Ci najpierw rezerwację ilościową co spowoduje, że xDostawy.find("dostawa = ''") nie będzie Ci zwracało -1


Obecnie xDostawy.find zwraca mi wartość "1" mimo istniejącej na pozycji rezerwacji ilościowej.
Wartość "-1" zwracana jest również podczas użycia funkcji Delete:
sqza pisze:
Co ciekawe kod:
Kod:
bernie pisze:
if xRezerwacja.Delete() != 0 then
message "Nie można usunąć rezerwacji."
endif

zwraca wartość "-1" - pytanie czemu.


Co ciekawe wszystko testowałem właśnie dla pozycji na których rezerwacja ilościowa była założona.

Autor:  zz [ 2014-05-16, 11:37 ]
Tytuł:  Re: [HMF] Rezerwacja

'Odświeżam' temat.
Przy próbie utworzenia rezerwacji mam błąd
"Wykonanie 'PropertyPut' nie powiodło się " w linii
Kod:
xRezerwacja.ilosc = fIlosc //1


HMF 2013

Autor:  rafal [ 2014-05-16, 12:13 ]
Tytuł:  Re: [HMF] Rezerwacja

Pokaż więcej kodu do przetestowania.

Autor:  zz [ 2014-05-16, 14:44 ]
Tytuł:  Re: [HMF] Rezerwacja

Kod:
dispatch xRezerwacja = xFactory.NewObject("BRezerwacja")
dispatch xTw= xFactory.NewObject("BTw")
....
xRezerwacja.Edit()
xRezerwacja.typ = 1
xRezerwacja.typrzrw = 2
xRezerwacja.towar = xTw.Give("kod='KodTowaru'")
xRezerwacja.ilosc = fIlosc //tu błąd
xRezerwacja.Save()
...


No i nie wiem jak podłożyć zmienną pod 'KodTowaru'

Autor:  rafal [ 2014-05-16, 15:23 ]
Tytuł:  Re: [HMF] Rezerwacja

Działający przykład dostępny u Eksperta.

Skontaktuj się z Ekspertem.

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