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

WYMIARY Towarów, nazwa na dokumentach WartosciWymiarow
https://forum.mix-soft.pl/viewtopic.php?f=15&t=9333
Strona 1 z 1

Autor:  sniez [ 2019-11-26, 17:09 ]
Tytuł:  WYMIARY Towarów, nazwa na dokumentach WartosciWymiarow

Kod:
dispatch xGetParams=xFactory.NewObject("XParams")
string sGetError
Dispatch xTw
xTw = xFactory.NewObject("BTowar")

string sub Wymiary( string sKod)
int iWym
xTw.Load(sKod)
xGetParams.Clear()
xGetParams.kod=sKod
xTw=xFactory.GetObject("BTw",xGetParams)
Wymiary = xTw.nazwa

   for iWym = 1 to iWym > xTw.WartosciWymiarow.Count()
      Wymiary += xTw.WartosciWymiarow.Item(iWym).wymiar.definicja.nazwa+ ": " + xTw.WartosciWymiarow.Item(iWym).wartosc + lf
   next iWym

endsub

Message Wymiary("504343")



Pogrzebałem na forum i mam powyższy kod. Dostaję informację Obiekt nie obsługuje właściwości lub metody o nazwie: "WartosciWymiarow"

Gdy najzwyczajniej pobieram np. nazwę towaru xTw.nazwa to oczywiście działa.


Dodatkowo - posłużyłem się kodem zaproponowanym przez eksperta Rafała
http://www.forum.mojasymfonia.pl/viewtopic.php?f=2&t=5080&hilit=wymiary+na+wz

Na niektórych stanowiskach pojawia się komunikat
Kod:
Problem pojawia się taki:

Błąd wykonania
Obiekt OLE nie został zainicjowany


Wersja SymfoniaERP 2020.1

Autor:  Zenek N [ 2019-12-02, 14:56 ]
Tytuł:  Re: WYMIARY Towarów, nazwa na dokumentach WartosciWymiarow

jaki to program ?

Autor:  sniez [ 2019-12-03, 00:44 ]
Tytuł:  Re: WYMIARY Towarów, nazwa na dokumentach WartosciWymiarow

Sage Symfonia ERP 2020.1. Jest to moduł Handel i kod z ambasic'a.

Nie dostałem odpowiedzi, dałem sobie spokój z dostępem do wymiarów przez obiekty i napisałem sobie takiego inklud'a

Kod:
dispatch xConn=GetAdoConnection()
dispatch xConnTmp=GetAdoConnection()
dispatch xConnTemp=GetAdoConnection()
dispatch xRec="ADODB.Recordset"
dispatch xRTmp="ADODB.Recordset"
dispatch xRTemp="ADODB.Recordset"
dispatch cmdAdo = "ADODB.Command"
cmdAdo.ActiveConnection = xConnTemp
cmdAdo.CommandTimeout = 50000


xRec.CursorType=1
xRec.LockType=3

xRTmp.CursorType=1
xRTmp.LockType=3

string sSQL
long lCount

//-------------------------------------------------------------------------------------------------------------
int sub funWymiarylist()
   
string sKodTowaru
int dIdElementu
string sMiejsceMag

   sSQL="SELECT kod FROM TW "
   sSQL+="WHERE typ = 0 "

   xRec.Open(sSQL,xConn)
   While !xRec.EOF()
      lCount+=1
      sKodTowaru = xRec.Fields("kod").value

      print xRec.Fields("kod").value
      print LF;
      print using "%d",lCount;
      print LF;

         xRtmp.Open("SELECT ElementId From SSCommon.STElements WHERE SSCommon.STElements.Title='"+sKodTowaru+"'",xConnTmp)
         While !xRtmp.EOF()
               dIdElementu = xRtmp.Fields("ElementId").value
               xRtmp.MoveNext()
         wend
         xRtmp.Close()

         xRtmp.Open("SELECT CDim_Miejsce#składowaniaHM_6780_1 FROM SSCommon.ProductClassification WHERE SSCommon.ProductClassification.ElementId ="+(using "%d",dIdElementu),xConnTmp)
         While !xRtmp.EOF()
               if xRtmp.Fields("CDim_Miejsce#składowaniaHM_6780_1").value then // to jest potrzebne, bo jak pusta komórka, to element jest int (chyba 0 albo null), jak pełna - to string
                  sMiejsceMag = xRtmp.Fields("CDim_Miejsce#składowaniaHM_6780_1").value
            endif

               xRtmp.MoveNext()
         wend
         xRtmp.Close()
   
         print sMiejsceMag
         print LF;
         xRec.MoveNext()
   wend
   xRec.Close() : lCount=0

Endsub

string sub funDajTwWymiar(string sKodTowaru)
   int dIdElementu
   string sMiejsceMag

   xRtmp.Open("SELECT ElementId From SSCommon.STElements WHERE SSCommon.STElements.Title='"+sKodTowaru+"'",xConnTmp)
   While !xRtmp.EOF()
         dIdElementu = xRtmp.Fields("ElementId").value
         xRtmp.MoveNext()
   wend
   xRtmp.Close()

   xRtmp.Open("SELECT CDim_Miejsce#składowaniaHM_6780_1 FROM SSCommon.ProductClassification WHERE SSCommon.ProductClassification.ElementId ="+(using "%d",dIdElementu),xConnTmp)
   While !xRtmp.EOF()
      if xRtmp.Fields("CDim_Miejsce#składowaniaHM_6780_1").value then // to jest potrzebne, bo jak pusta komórka, to element jest int (chyba 0 albo null), jak pełna - to string
         funDajTwWymiar = xRtmp.Fields("CDim_Miejsce#składowaniaHM_6780_1").value
      ELSE
         funDajTwWymiar = ""
      endif
      xRtmp.MoveNext()
   wend
   xRtmp.Close()
Endsub



int sub funZmienTwWymiar(string sKodTowaru, string sNoweMiejsce)
   int dIdElementu
   string sMiejsceMag

   print sKodTowaru;
   print " nowe miejsce: ";
   print sNoweMiejsce;
   print " ";

   
   xRtmp.Open("SELECT ElementId From SSCommon.STElements WHERE SSCommon.STElements.Title='"+sKodTowaru+"'",xConnTmp)
   While !xRtmp.EOF()
         dIdElementu = xRtmp.Fields("ElementId").value
         xRtmp.MoveNext()
   wend
   xRtmp.Close()
   if dIdElementu then
      xRtmp.Open("SELECT CDim_Miejsce#składowaniaHM_6780_1 FROM SSCommon.ProductClassification WHERE SSCommon.ProductClassification.ElementId ="+(using "%d",dIdElementu),xConnTmp)
      While !xRtmp.EOF()
         if xRtmp.Fields("CDim_Miejsce#składowaniaHM_6780_1").value then // to jest potrzebne, bo jak pusta komórka, to element jest int (chyba 0 albo null), jak pełna - to string
            print "znalazłem stare miejsce ";
            sMiejsceMag = xRtmp.Fields("CDim_Miejsce#składowaniaHM_6780_1").value
            print sMiejsceMag;
            cmdAdo.CommandText = "UPDATE SSCommon.ProductClassification SET CDim_Miejsce#składowaniaHM_6780_1 = '"+sNoweMiejsce+"' WHERE SSCommon.ProductClassification.ElementId="+(using "%d",dIdElementu)
            cmdAdo.Execute()
            print " zmienione";
            //print xRtmp.Fields("CDim_Miejsce#składowaniaHM_6780_1").value
         ELSE
            print "nie znalazłem rekordu miejsca"
            print LF
         endif
         xRtmp.MoveNext()
      wend
      xRtmp.Close()
   else
      print " nie znalazłem kartoteki"
   endif



   print LF;
Endsub



int sub funImportMiejscatxt()

      int id, idWyst
      String Plik_w ="C:\\MIEJSCA\\MIEJSCA.txt"
      Int Numer_plik = Open Plik_w For input
      Int tw2, err
      String strLine, strKod, strMiejsce, konc
      Float cena, ilosc

      buf = ""
      Input # Numer_plik, strLine
      
      Do
         buf = strLine
         konc = Find Regular "{;*}\{;*}\{;*}"
         
         strKod = Regular 1
         strMiejsce = Regular 2
         buf = strKod
         delete ";"
         strKod = buf
         
         buf = strMiejsce
         delete ";"
         strMiejsce = buf
         
         funZmienTwWymiar(strKod,strMiejsce)
         Input # Numer_plik, strLine
      Loop Until strLine=="EOF"
endsub


Moja baza ma wymiar, który mnie interesuje tutaj: CDim_Miejsce#składowaniaHM_6780_1 - trzeba sobie zmienić.

int sub funWymiarylist() - listuje nam co mamy wpisane przy kodzie towarowym
funDajTwWymiar(string sKodTowaru) - daje nam element wymiaru na podstawie kodu towarowego (ta funkcja wkleja mi wymiar na dokumenty magazynowe)
funZmienTwWymiar(string sKodTowaru, string sNoweMiejsce) - wprowadza zmianę do wymiaru dla zadanego towaru

Ostatnia funkcja to bonus - potrzebowałem zaimportować wymiary do towarów z excela/pliku tekstowego - musi wyglądać jak poniżej.

;KODTOWARU1;ELEMENTWYMIARU1;
;KODTOWARU2;ELEMENTWYMIARU2;
;KODTOWARU3;ELEMENTWYMIARU3;
;KODTOWARU4;ELEMENTWYMIARU4;
EOF

To moje kodowanie jest brzydkie i paździeżowe, ale działa lepiej niż obiekty biznesowe BY SAGE.

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