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

Kod Kontrahenta
https://forum.mix-soft.pl/viewtopic.php?f=2&t=4257
Strona 1 z 2

Autor:  rrafal [ 2012-10-23, 10:27 ]
Tytuł:  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 ?

Autor:  rafal [ 2012-10-23, 12:24 ]
Tytuł:  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.

Autor:  rrafal [ 2012-10-24, 20:31 ]
Tytuł:  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 ?

Autor:  wrob [ 2012-10-25, 23:50 ]
Tytuł:  Re: Kod Kontrahenta

Takiej dokumentacji nie ma raczej.

Autor:  rafal [ 2012-10-26, 13:52 ]
Tytuł:  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.

Autor:  rrafal [ 2012-10-30, 14:32 ]
Tytuł:  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 ?

Autor:  rafal [ 2012-10-30, 15:20 ]
Tytuł:  Re: Kod Kontrahenta

Podany przyklad uzywa obiektu biznesowego Kontrahenta do zmiany kodu.
Ufam ze zmienia w bazie co trzeba.

Autor:  rrafal [ 2012-12-06, 10:13 ]
Tytuł:  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
Błąd.jpg [ 26.95 KiB | Przeglądany 7417 razy ]

Autor:  rafal [ 2012-12-06, 11:59 ]
Tytuł:  Re: Kod Kontrahenta

a standardowym raportem zmienia?

Autor:  rrafal [ 2012-12-06, 14:21 ]
Tytuł:  Re: Kod Kontrahenta

Tak standardowy zmienia.

Autor:  rafal [ 2012-12-06, 14:51 ]
Tytuł:  Re: Kod Kontrahenta

Załącz tu treść standardowego raportu.
Bo ten jest od wersji 2011 i może coś tu nie gra.

Autor:  rrafal [ 2012-12-06, 16:02 ]
Tytuł:  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]

Autor:  rafal [ 2012-12-06, 17:40 ]
Tytuł:  Re: Kod Kontrahenta

Z tego co widze obiekt biznesowy BKontrahent w wersji 2007 nie byl jeszcze tak madry jak w obecnych wersjach.

Autor:  rrafal [ 2012-12-06, 21:34 ]
Tytuł:  Re: Kod Kontrahenta

Czyli nie da rady zrobić aktualizacji z pliku txt za pomocą twojego skryptu ?

Autor:  rafal [ 2012-12-06, 21:51 ]
Tytuł:  Re: Kod Kontrahenta

tylko w najnowszych wersjach programu.
Do Twojej wersji trzeba dostosować skrypt od początku.

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