|
Autor |
Wiadomość |
rrafal
Rejestracja: 2011-12-28, 22:36 Posty: 42
|
Kod Kontrahenta
Witam,
chciałbym w Symfonii Forte 2007c dokonać zmiany kodów kontrahentów na bardziej przystępne niż obecne. Z tego co wiem nie ma możliwości automatycznej zmiany z poziomu programu, dlatego chcę to zrobić od strony bazy SQL. Chciałbym tylko zapytać czy można taki "Update" zrobić, czy nie będzie to miało jakiś negatywnych konsekwencji ?
|
2012-10-23, 10:27 |
|
|
Autor |
Wiadomość |
Mix-soft.pl
|
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: Kod Kontrahenta
W programie powinien być raport Raporty -> Pomocnicze -> Zmiana kodu kontrahenta
Można pokusić się o taka modyfikację że zadziałałby np na podstawie Excela (kolumna A stary kod, kolumna B nowy kod) i zmienił hurtowo wiele kodów.
W bazie bym tego nie robił bo nie jest to jedna tabela gdzie należy wprowadzić zmiany.
|
2012-10-23, 12:24 |
|
|
rrafal
Rejestracja: 2011-12-28, 22:36 Posty: 42
|
Re: Kod Kontrahenta
rafal pisze: W programie powinien być raport Raporty -> Pomocnicze -> Zmiana kodu kontrahenta
Można pokusić się o taka modyfikację że zadziałałby np na podstawie Excela (kolumna A stary kod, kolumna B nowy kod) i zmienił hurtowo wiele kodów.
W bazie bym tego nie robił bo nie jest to jedna tabela gdzie należy wprowadzić zmiany. Szkoda, że zmiana z poziomu bazy odpada, myślałem że to tylko jedna tabela. Raport faktycznie jest jednak aby działał z excelem trzeba go modyfikować. Niestety to dla mnie dużo zabawy ponieważ nigdy nie przerabiałem tych raportów, myślałem że zrobię to spokojnie z bazy u temat będzie załatwiony Jednak już widzę, ze oprócz tabeli DH, w tabeli DK również są kody kontrahentów. Jak można uzyskać dokumentację do raportów ? jest coś takiego ?
|
2012-10-24, 20:31 |
|
|
wrob
Ekspert
Rejestracja: 2008-04-18, 18:52 Posty: 5169 Pomógł: 59
|
Re: Kod Kontrahenta
Takiej dokumentacji nie ma raczej.
|
2012-10-25, 23:50 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: Kod Kontrahenta
Hurtowa zmiana kodów kontrahentów. Dane do zmiany mają znajdować się w pliku tekstowym c:\temp\kody.txt Kod: KODSTARY1 KODNOWY1 KODSTARY1 KODNOWY1 KODSTARY1 KODNOWY1 KODSTARY1 KODNOWY1
Kod stary oddzielony tabulacją od kodu nowego Kod: #include "Wydruki - include" #include "Wybór obiektu - include"
String sub sStndError(int nErr) int i if nErr == 771 then for i=1 to i>xFactory.komunikaty.count if xFactory.komunikaty.item(i).status then sStndError = "\nBłąd nr "+(using "%d", xFactory.komunikaty.item(i).id)+": "+xFactory.komunikaty.item(i).tresc+"\n" else sStndError = "\nOSTRZEŻENIE !! "+xFactory.komunikaty.item(i).tresc+"\n" endif next i else if nErr then Select case nErr case -4101 sStndError = using "\nBłąd nr %d: Nie odnaleziono rekordu w bazie XT.\n", nErr case -4010 sStndError = using "\nBłąd nr %d: Nieunikalny kod towaru.\n", nErr case -4013 sStndError = using "\nBłąd nr %d: Nie podano nazwy obiektu.\n", nErr case 4 sStndError = using "\nBłąd nr %d: Nie odnaleziono obiektu.\n", nErr case -4201 sStndError = using "\nBłąd nr %d: Nie można zapisac obiektu, w bazie danych istnieje już obiekt posiadający ten sam skrót i charakter.\n", nErr case 275 sSTndError = using "\nBłąd nr %d: Nie odnaleziono elementu w kolekcji.\n", nErr case else sStndError = using "\nNieznany błąd nr %d.\n", nErr endselect endif endif endsub
dispatch xKH, xKontrahent int nErr
string sKH_before, sKH_after, sLinia
int f = open "c:\\temp\\kody.txt" for input
While (input #f, sLinia) != 0 buf = sLinia find regular "^{*}\t{*}$"
sKH_before = regular 1
sKH_after = regular 2
if !(xKH=GetObjByKod("BKh",sKH_before)) then print using "Kontrahent %s nie istnieje"+lf, sKH_before: goto wypad
nErr = 0
xKontrahent = xKh.LoadFullObject() nErr = xKontrahent.Edit() if nErr then error sStndError(nErr) nErr = xKontrahent.UstawKod(sKH_after) if nErr then xKontrahent.Undo() error sStndError(nErr) EndIf nErr = xKontrahent.Save() if nErr then error sStndError(nErr) else print using "Zmieniono kod %s na %s"+lf ,sKH_before,sKH_after endif
wypad:
wend Raport w wersji poglądowej. Zrób kopie bezpieczeństwa przed jego użyciem.
|
2012-10-26, 13:52 |
|
|
rrafal
Rejestracja: 2011-12-28, 22:36 Posty: 42
|
Re: Kod Kontrahenta
rafal pisze: Hurtowa zmiana kodów kontrahentów. Dane do zmiany mają znajdować się w pliku tekstowym c:\temp\kody.txt Kod: KODSTARY1 KODNOWY1 KODSTARY1 KODNOWY1 KODSTARY1 KODNOWY1 KODSTARY1 KODNOWY1
Kod stary oddzielony tabulacją od kodu nowego Kod: #include "Wydruki - include" #include "Wybór obiektu - include"
String sub sStndError(int nErr) int i if nErr == 771 then for i=1 to i>xFactory.komunikaty.count if xFactory.komunikaty.item(i).status then sStndError = "\nBłąd nr "+(using "%d", xFactory.komunikaty.item(i).id)+": "+xFactory.komunikaty.item(i).tresc+"\n" else sStndError = "\nOSTRZEŻENIE !! "+xFactory.komunikaty.item(i).tresc+"\n" endif next i else if nErr then Select case nErr case -4101 sStndError = using "\nBłąd nr %d: Nie odnaleziono rekordu w bazie XT.\n", nErr case -4010 sStndError = using "\nBłąd nr %d: Nieunikalny kod towaru.\n", nErr case -4013 sStndError = using "\nBłąd nr %d: Nie podano nazwy obiektu.\n", nErr case 4 sStndError = using "\nBłąd nr %d: Nie odnaleziono obiektu.\n", nErr case -4201 sStndError = using "\nBłąd nr %d: Nie można zapisac obiektu, w bazie danych istnieje już obiekt posiadający ten sam skrót i charakter.\n", nErr case 275 sSTndError = using "\nBłąd nr %d: Nie odnaleziono elementu w kolekcji.\n", nErr case else sStndError = using "\nNieznany błąd nr %d.\n", nErr endselect endif endif endsub
dispatch xKH, xKontrahent int nErr
string sKH_before, sKH_after, sLinia
int f = open "c:\\temp\\kody.txt" for input
While (input #f, sLinia) != 0 buf = sLinia find regular "^{*}\t{*}$"
sKH_before = regular 1
sKH_after = regular 2
if !(xKH=GetObjByKod("BKh",sKH_before)) then print using "Kontrahent %s nie istnieje"+lf, sKH_before: goto wypad
nErr = 0
xKontrahent = xKh.LoadFullObject() nErr = xKontrahent.Edit() if nErr then error sStndError(nErr) nErr = xKontrahent.UstawKod(sKH_after) if nErr then xKontrahent.Undo() error sStndError(nErr) EndIf nErr = xKontrahent.Save() if nErr then error sStndError(nErr) else print using "Zmieniono kod %s na %s"+lf ,sKH_before,sKH_after endif
wypad:
wend Raport w wersji poglądowej. Zrób kopie bezpieczeństwa przed jego użyciem. Dziękuję. Rozumiem że ten raport zmieni kod we wszystkich wymaganych tabelach ? tj. dokumenty magazynowe, zamówienia, rezerwacje, płatności, dokumenty handlowe ?
|
2012-10-30, 14:32 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: Kod Kontrahenta
Podany przyklad uzywa obiektu biznesowego Kontrahenta do zmiany kodu. Ufam ze zmienia w bazie co trzeba.
|
2012-10-30, 15:20 |
|
|
rrafal
Rejestracja: 2011-12-28, 22:36 Posty: 42
|
Re: Kod Kontrahenta
Witam, niestety mam problem ze zmianą kodów kontrahentów za pomocą tego skryptu. Otrzymuję błąd Załącznik:
Błąd.jpg [ 26.95 KiB | Przeglądany 7554 razy ]
|
2012-12-06, 10:13 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: Kod Kontrahenta
a standardowym raportem zmienia?
|
2012-12-06, 11:59 |
|
|
rrafal
Rejestracja: 2011-12-28, 22:36 Posty: 42
|
Re: Kod Kontrahenta
Tak standardowy zmienia.
|
2012-12-06, 14:21 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: Kod Kontrahenta
Załącz tu treść standardowego raportu. Bo ten jest od wersji 2011 i może coś tu nie gra.
|
2012-12-06, 14:51 |
|
|
rrafal
Rejestracja: 2011-12-28, 22:36 Posty: 42
|
Re: Kod Kontrahenta
Poniżej treść standardowego raportu.
//"zmkod_kh.sc","Zmiana kodu kontrahenta","\System\Pomocnicze\",0,1.0.1,SYSTEM ////////////////////////////////////////////////////////////////////// // Zmiana kodu kontrahenta // zmkod_kh.sc
#define BEZ_KODOW 1 dispatch xPr=xFactory.GetObject("BProgram") if xPr.liczbaUzytkownikow>1 then error "Nie można wykonać raportu.Przed wykonaniem raportu prosimy wylogować pozostałych użytkowników programu." #include "Wydruki - include"
string sUPDATE="UPDATE %s SET %s='%s' WHERE %s" string sKH_before,sKH_after,sKH_beforeOrg,sKH_afterOrg long lKH_id dispatch xKh int btn_choose,i string sWARUNEK dispatch cmdUpdate="ADODB.Command" dispatch connUpdate=GetAdoConnection()
cmdUpdate.ActiveConnection=connUpdate
int sub UpdateTabeli(string sTabela,string sPole,string sWarunek) cmdUpdate.CommandText=using sUPDATE,sTabela,sPole,sKH_after,sWarunek cmdUpdate.Execute() endsub
#include "Wybór obiektu - include"
int sub WyborKontrahenta() Enable(btn_choose,0) save string kod = ChooseObject(sKH_before,"BKh","BKartParamsKh","kontrahenta") if kod != "" then sKH_before = kod :load Enable(btn_choose,1) endsub
int sub CheckData() CheckData=1 Save sKH_before=NormalizeStr(sKH_before) sKH_after=NormalizeStr(sKH_after) if Len(sKH_before)>40 then sKH_before=mid(sKH_before,1,40) if Len(sKH_after)>40 then sKH_after=mid(sKH_after,40) Load if !sKh_before || !sKH_after then Message "Nie podano kodu kontrahenta" : exit if sKH_before==sKH_after then message "Nowy kod jest taki sam jak aktualny." : exit if !(xKH=GetObjByKod("BKh",sKH_before)) then Message "Kontrahent o kodzie '"+sKH_before+"' nie istnieje." : exit if GetObjByKod("BKh",sKH_after) then Message "Kontrahent o kodzie '"+sKH_after+"' już istnieje." : exit CheckData=2 endsub form " " +GetReportName(),300,170
Group "Stary &kod kontrahenta",10,10,275,50 Edit "",sKH_before,20,30,180,18
Group "&Nowy kod kontrahenta",10,60,275,50 Edit "",sKH_after,20,80,255,18
button "&OK",130,114,70,23,CheckData() button "&Anuluj",210,114,70,23,-1 btn_choose = Button "&Wybierz...",210,28,60,22,WyborKontrahenta()
if execform==-1 then Error "" Arg "'","''" buf=sKH_after Replace Arg sKH_afterOrg=buf buf=sKH_before Replace Arg sKH_beforeOrg=buf Delete Arg swap sKH_after,sKH_afterOrg swap sKH_before,sKH_beforeOrg lKH_id = xKh.id connUpdate.BeginTrans() //dokumenty PopUp(1,"Zmiana kodów w dokumentach handlowych") sWARUNEK="(khid=%l"+IIF(BEZ_KODOW,"%s)"," AND khkod='%s')") sWARUNEK=using sWARUNEK,lKH_id,IIF(BEZ_KODOW,"",sKH_before) UpdateTabeli("DK","khkod",sWARUNEK)
PopUp(1,"Zmiana kodów w dokumentach zamówień") UpdateTabeli("ZO","khkod",sWARUNEK)
PopUp(1,"Zmiana kodów w dokumentach magazynowych") UpdateTabeli("MG","khkod",sWARUNEK)
PopUp(1,"Zmiana kodów w dokumentach płatności") sWARUNEK=sWARUNEK+" AND (flag & 0x4000) = 0" UpdateTabeli("PN","khkod",sWARUNEK)
PopUp(1,"Zmiana kodów w dokumentach handlowych") sWARUNEK="(odid=%l"+IIF(BEZ_KODOW,"%s)"," AND odkod='%s')") sWARUNEK=using sWARUNEK,lKH_id,IIF(BEZ_KODOW,"",sKH_before) UpdateTabeli("DK","odkod",sWARUNEK)
PopUp(1,"Zmiana kodów w dokumentach zamówień") UpdateTabeli("ZO","odkod",sWARUNEK) /* //baza zz PopUp(1,"Zmiana kodów w bazie związków") sWARUNEK="(baza1=20 AND id1=%l"+IIF(BEZ_KODOW,"%s)"," AND kod1='%s')") sWARUNEK=using sWARUNEK,lKH_id,IIF(BEZ_KODOW,"",sKH_before) UpdateTabeli("ZZ","kod1",sWARUNEK) sWARUNEK="(baza2=20 AND id2=%l"+IIF(BEZ_KODOW,"%s)"," AND kod2='%s')") sWARUNEK=using sWARUNEK,lKH_id,IIF(BEZ_KODOW,"",sKH_before) UpdateTabeli("ZZ","kod2",sWARUNEK) */ //zmiana w bazie RZ PopUp(1,"Zmiana kodu w bazie rezerwacji") sWARUNEK="idkh=%l" sWARUNEK=using sWARUNEK,lKH_id UpdateTabeli("RZ","kodkh",sWARUNEK)
//zmiana kodu w bazie adresowej PopUp(1,"Zmiana kodu w bazie adresowej") UpdateTabeli("AD","kod",sWARUNEK)
// rekord w bazie KH sWARUNEK="id=%l" sWARUNEK=using sWARUNEK,lKH_id UpdateTabeli("KH","kod",sWARUNEK)
connUpdate.CommitTrans()
message "Kod kontrahenta '"+sKH_beforeOrg+"' został zmieniony na '"+sKH_afterOrg+"'.\nAby zaktualizować dane należy zakończyć pracę z Firmą i otworzyć ją ponownie."
NoOutput()[/size][/size][/size][/size][/i][/i]
|
2012-12-06, 16:02 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: Kod Kontrahenta
Z tego co widze obiekt biznesowy BKontrahent w wersji 2007 nie byl jeszcze tak madry jak w obecnych wersjach.
|
2012-12-06, 17:40 |
|
|
rrafal
Rejestracja: 2011-12-28, 22:36 Posty: 42
|
Re: Kod Kontrahenta
Czyli nie da rady zrobić aktualizacji z pliku txt za pomocą twojego skryptu ?
|
2012-12-06, 21:34 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: Kod Kontrahenta
tylko w najnowszych wersjach programu. Do Twojej wersji trzeba dostosować skrypt od początku.
|
2012-12-06, 21:51 |
|
|
Kto jest online |
Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 41 gości |
|
Nie możesz tworzyć nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników
|
|
|
|