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

Problem z obiektem BTowar...
https://forum.mix-soft.pl/viewtopic.php?f=15&t=1421
Strona 1 z 2

Autor:  artur17 [ 2009-11-20, 10:37 ]
Tytuł:  Problem z obiektem BTowar...

Witam,
Problem dotyczy aplikacji HMF 2008.
Otóż korzystam z obiektu BTowar, aby utworzyć nową pozycję towarową w kartotece.
Z dodaniem samego towaru nie mam problemu, jednak cały czas nie wychodzą mi dwie rzeczy.
Mianowicie mój raport nie dodaje mi kodu obcego i katalogu dla nowo utworzonego towaru. Próbuję to realizować tak:

Kod:
(...)
xTowar.UstawKatalog("id='zmienna_id_katalogu_z_tabeli_XT'")
xTowar.UstawKodObcy("kod='id_kontrahenta' kodObcy='moj_kod_obcy'")
(...)


Dodam, iż gdy dla ustawienia katalogu wpiszę jako parametr "na sztywno" np. "id=65000" to wtedy program poprawnie umieszcza mi towar w wybranym katalogu, jednak chciałbym aby to była zmienna...
Natomiast to dodawanie kodu obcego w żaden sposób nie idzie... :/

Proszę więc bardziej doświadczonych o pomoc :)

Autor:  rafal [ 2009-11-20, 11:00 ]
Tytuł: 

Kod:
xTowar.UstawKatalog((using "id=%l",zmienna_id_katalogu_z_tabeli_XT))
xTowar.UstawKodObcy((using "kod='%s' kodObcy='%s'", kod_kontrahenta_a_nie_id, moj_kod_obcy))

Autor:  artur17 [ 2009-11-20, 13:26 ]
Tytuł: 

Dziękuję za szybką odpowiedź.
Co do katalogu - działa :)
Natomiast jeżeli chodzi o dodanie kodu obcego, to niestety dalej bez rezultatów...
Tak to póki co wygląda:
Kod:
xTowar.UstawKod(kod)
xTowar.nazwa=nazwa
xTowar.ustawtyp("0")
xTowar.jm="szt"
xTowar.ustawaktywny("1")
xTowar.ustawrodzaj("3200")
xTowar.UstawKatalog((using "id= %l",id_katalog))
xTowar.UstawKodObcy((using "kod='%s' kodObcy='%s'", kod_kontrahenta, kod_obcy))


Oczywiście zarówno pod zmienną "kod_kontrahenta" i "kod_obcy" jest przesyłana właściwa wartość string.

Autor:  rafal [ 2009-11-20, 14:06 ]
Tytuł: 

może tak?
Kod:
xTowar.UstawKodObcy((using "kod=%s kodObcy=%s", kod_kontrahenta, kod_obcy))

Autor:  artur17 [ 2009-11-20, 14:51 ]
Tytuł: 

Hmmm... próbowałem już na różne warianty to obsłużyć...
A działa w ogóle ta metoda?
W dokumentacji jest tylko tyle:
Cytuj:
UstawKodObcy
Opis metody: Metoda ustawia nowy kod obcy dla danego towaru i wskazanego kontrahenta.
Opis parametru: Parametr postaci: "kod=KOD_KONTRAHENTA kodObcy=NOWY_KOD_OBCY"
Warunki wywołania: Zawsze
Wartość Zwracana: 0 - zakończona pomyślnie lub numer błędu

Jeżeli chodzi o zwracaną wartość błędu, to jest to error: 771.

Autor:  leonek [ 2009-11-22, 22:35 ]
Tytuł: 

Ostatecznie zawsze zadziała "INSERT INTO" lub "UPDATE ... SET"

Autor:  Notos [ 2009-11-23, 14:22 ]
Tytuł: 

Info co się kryje w 771 sprawdzisz tak:
Kod:
string sErr
for i = 1 to i > xFactory.komunikaty.count
   sErr+= using "%s %d - %s\n", iif(xFactory.komunikaty.item(i).status, "ERR", "WRN"),xFactory.komunikaty.item(i).id, xFactory.komunikaty.item(i).tresc
next i
message sErr

Autor:  artur17 [ 2009-11-24, 11:12 ]
Tytuł: 

Udało mi się już uprać z problemem.
Wyjaśnię krótko na czym on polegał:
Otóż okazuje się, że ustawienie kodu obcego musi odbywać się na już zdefiniowanym i wybranym towarze. To znaczy, że metody "UstawKodObcy" nie można uruchamiać podczas tworzenia towaru, ale dopiero PO zdefiniowaniu i zapisaniu go do tabel programu.
Ot co... :))
Dziękuję jeszcze raz za pomoc...

Autor:  artur17 [ 2010-01-08, 15:02 ]
Tytuł: 

Chciałbym odświeżyć temat, albowiem zetknąłem się z problemem dotyczącym obiektów BTowar i BKatalogTw.
Chodzi o metodę "UstawKatalog", która przy tworzeniu nowego towaru przydziela mi dany towar do już wcześniej zdefiniowanego katalogu w swojej hierarchii.

Otóż na początku próbuję załadować dane do obiektu :
Kod:
   Dispatch xKat = xFactory.NewObject("BKatalogTW")
   xKat.Clear()
   Dispatch xParams = xKat.Params()
   xParams.nazwa=katalog
            xKat.Load(xParams1)

Gdzie katalog to podana pod zmienna ścieżka do katalogu docelowego zaczynająca się od znaku "\" np."\katalog1\podkatalog2"
Następnie przy tworzeniu towaru wykorzystuje wspomnianą metodę "UstawKatalog":

Kod:
xTowar.UstawKatalog(xKat)


Niestety nie daje to oczekiwanego rezultatu. Towar nie przydziela się do danego podkatalogu.

Będę bardzo wdzięczny za pomoc...
Próbowałem również bezskutecznie użyć metody Give w obiekcie "BKatalogTw"...

Autor:  rafal [ 2010-01-08, 15:44 ]
Tytuł: 

Kod:
Dispatch xKat = xFactory.NewObject("BKatalogTW")
xKat.Load("nazwa='Towary'")
xTw.UstawKatalog( xKat )

Autor:  artur17 [ 2010-01-08, 16:38 ]
Tytuł: 

Niestety takie rozwiązanie nie działa.

Poniższy kod stanowi odrębną całość. Na jego przykładzie testuję to rozwiązanie:

Kod:
Dispatch xKat = xFactory.NewObject("BKatalogTW")
xKat.Load("nazwa='Katalog1'")

Dispatch xTowar = xFactory.NewObject("BTowar")
      
      xTowar.Clear()
      xTowar.Edit()
      xTowar.UstawKod("Towar")
      xTowar.nazwa="Nazwa_towaru"
      xTowar.ustawtyp("0")
      xTowar.jm="szt"
      xTowar.ustawaktywny("1")
      xTowar.UstawKatalog( xKat )

      If xTowar.Save() then
         xTowar.Undo()
          message using "Utworzenie nowego towaru nie powiodło się!"
          error ""
      Endif


P.S. Oczywiście w Handlu mam katalog o nazwie "Katalog1".

Autor:  wrob [ 2010-01-08, 16:39 ]
Tytuł: 

Hmmm.... a moze zapisac towar do bazy a potem dodawac mu katalog???

Autor:  artur17 [ 2010-01-08, 16:52 ]
Tytuł: 

No nie bardzo... Poza tym metoda "UstawRodzaj" dla towaru działa prawidłowo (metoda użyta przed zapisaniem rekordu do bazy).

Możnaby to zrobić poprzez wywołanie metody tak:
Kod:
xTowar.UstawKatalog((using "id= %l",id_katalog))

Wtedy owszem - działa, lecz bardzo nieefektywne jest wyszukiwanie id danego katalogu z tabli XT.

Autor:  sqza [ 2010-01-08, 23:06 ]
Tytuł: 

Można to zrobić również w poniższy sposób:
Kod:
dispatch xParams
dispatch xKatalogTW = xFactory.NewObject("BKatalogTW")
dispatch xTowar = xFactory.NewObject("BTowar")
xTowar.Load("kod='Towar 3'")

xTowar.Edit()
xKatalogTW.Load()
xParams=xKatalogTW.Params()
xParams.nazwa="\\test"
dispatch xWybKatTw = xKatalogTW.Give(xParams)

xTowar.UstawKatalog(xWybKatTw)
xTowar.Save()

Pytanie czy to szybsze rozwiązanie :?:

Autor:  artur17 [ 2010-01-11, 12:42 ]
Tytuł: 

Idealnie! Bardzo dziękuję za pomoc :)

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