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.