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

blokada wystawiania MM w określonych przypadkach
https://forum.mix-soft.pl/viewtopic.php?f=15&t=7825
Strona 1 z 1

Autor:  _michal [ 2017-03-17, 15:39 ]
Tytuł:  blokada wystawiania MM w określonych przypadkach

Cześć,

potrzebuje małej pomocy. Program Handel ERP 2017.b.

Mam dwa rodzaje dokumentów przesunięć międzymagazonowych MM (MM- i MM+) oraz MMo (MMo- i MMo+).

1) Chciałbym aby wystawianie MM- (MM+) było możliwe tylko dla zadeklarowanych użytkowników.

Czy wstawienie poniższego kodu do procedur dok. magazynowego powinno załatwić sprawę?

Kod:

int Sub OnBeforeBuforEdit(long lId)

    Dispatch xMg
    int nErr
    int edytuj=0

    xMg = xFactory.NewObject("BDokumentMg")
    nErr = xMg.Load("id="+(using "%d",lId))
    if nErr then error Using "\nBłąd ładowania dokumentu magazynowego nr %l\n", nErr

    if xMg.typDk=="MM-" then   
        if ucase(xFactory.uzytkownik.kod)!="admin" && ucase(xFactory.uzytkownik.kod)!="user" then
            message "Nie masz uprawnień do wykonywania przesunięć MM"
            edytuj=-6000
        endif
    endif
       
    OnBeforeBuforEdit = edytuj
EndSub


2). Chiciałbym aby przesunięcia dok. MMo można było wykonywać tylko na magazynach rozróżnionych konkretnym parametrem.

W tym przypadku mógłoby to być wypełnione Konto FK dla magazynu (najlepiej) - nie wiem jak się odwołać do tego
lub cokolwiek innego np. wypełniony adres email dla magazynu.



Kod:

int Sub OnBeforeInsert(long lId)

    Dispatch xMg
    int nErr
    int edytuj=0

    xMg = xFactory.NewObject("BDokumentMg")
    nErr = xMg.Load("id="+(using "%d",lId))
    if nErr then error Using "\nBłąd ładowania dokumentu magazynowego nr %l\n", nErr

    if xMg.typDk=="MMo-" then   
       if ucase(xMg.dzial.khfk)!=0 && xMg.magazyn_przesuniecia.khfk!=0 then
          message "Dok. MMo nie można wykonywać przesunięć na tych magazynach\nWykonaj przesunięcie dokumentem MM"
          edytuj=-6000
       endif
    endif
    OnBeforeInsert = edytuj
EndSub



Pozdr.
M.

Autor:  rafal [ 2017-03-17, 16:57 ]
Tytuł:  Re: blokada wystawiania MM w określonych przypadkach

Masz kompletny kod. To ja się zapytam. Czy On działa zgodnie z Twoimi założeniami? Jak nie to pomożemy.

Autor:  _michal [ 2017-03-17, 22:08 ]
Tytuł:  Re: blokada wystawiania MM w określonych przypadkach

Wybacz, ale brakuje mi dokumentacji do ambasica. Nie mam pewności co do kodu i momentu wywołania procedury. Proszę o małą podpowiedź.

Wydaje mi się, że w drugim przykładzie mam błąd, bo odwołuje się to działu, nie magazynu. Powinno być chyba:

Kod:
if xMg.typDk=="MMo-" then   
       if xMg.magazyn.khfk>0 && xMg.magazyn_przesuniecia.khfk>0 then


Chce porównać wartość parametru khfk z tabeli HM.KH na dwóch magazynach (między, którymi jest przesunięcie) i jeśli w jednym z nich jest wpisana wartość w tabeli to zablokować przesunięcie.

Czy w przypadku gdybym chciał zablokować przesunięcie między magazynami w obrębie tego samego działu to powinno być:

Kod:
if xMg.typDk=="MMo-" then   
       if xMg.dzial.kod==xMg.dzial_przesuniecia.kod then


M.

Autor:  _michal [ 2017-08-23, 10:30 ]
Tytuł:  Re: blokada wystawiania MM w określonych przypadkach

Rafał,

chciałbym wrócić do tego.

Nie działa mi kod w miejscu, gdzie próbuje się odwołać parametru khfk - (xMg.dzial.khfk)

Podczas wystawienia dokumentu magazynowego (onbeforeinsert), chcę wywołać weryfikację tego paramertru.

Chodzi i o kod magazynu w FK (tak jak w dołączonym pliku graficznym).

M.

Załączniki:
1.png
1.png [ 2.28 KiB | Przeglądany 4036 razy ]

Autor:  rafal [ 2017-08-23, 11:09 ]
Tytuł:  Re: blokada wystawiania MM w określonych przypadkach

zobacz
Kod:
xMg.dzial.kontoFK

Autor:  _michal [ 2017-08-23, 18:16 ]
Tytuł:  Re: blokada wystawiania MM w określonych przypadkach

Spróbowałem tak ja napisałeś z kontoFK, ale też mam taką samą informację przy próbie wystawienia dokumentu :(

Załączniki:
1.png
1.png [ 7.1 KiB | Przeglądany 4033 razy ]

Autor:  _michal [ 2017-09-13, 11:41 ]
Tytuł:  Re: blokada wystawiania MM w określonych przypadkach

Rafał,

próbwałem podebrać konto fk mag przez Selecta, ale też mi nie chce to działać.

Kod:
   string typ_mag="105"
   
   string qZap1
   DISPATCH rs1, con1
   con1 = GetAdoConnection()
   rs1= "ADODB.Recordset"

          qZap1="SELECT khfk FROM HM.KH where nazwa ="+(using "%s", xMg.dzial.kod)+" and typ="+typ_mag

            rs1.Open(qZap1, con1)

      if rs1.EOF!="" then

....

tutaj to co ma się stać
      


Jeśli kod magazynu zawiera spację to kod się wykrzacza.
Jeśli nie ma spacji pojawia się błąd jak w załączniku.

Załączniki:
Nowy obraz mapy bitowej.jpg
Nowy obraz mapy bitowej.jpg [ 39.95 KiB | Przeglądany 3973 razy ]

Autor:  rafal [ 2017-09-13, 11:49 ]
Tytuł:  Re: blokada wystawiania MM w określonych przypadkach

Kod:
qZap1="SELECT khfk FROM HM.KH where nazwa ='"+(using "%s", xMg.dzial.kod)+"' and typ="+typ_mag

Autor:  _michal [ 2017-09-15, 01:27 ]
Tytuł:  Re: blokada wystawiania MM w określonych przypadkach

Dzięki Rafał, wszystko teraz pięknie działa!

Autor:  _michal [ 2017-09-17, 14:49 ]
Tytuł:  Re: blokada wystawiania MM w określonych przypadkach

Zamieszczam kod, gdyby kogoś interesowało.

Cel:
-ograniczenie przesunięć pomiedzy magazynami księgowymi dla jednej osoby.
-zablokowanie przesunięć miedzy mag księgowymi (konta zespołu 3*), a magazynami, gdzie nie jest prowadzona ewid ksiegowa.
-powiązanie dok. typu MM z magazynami księgowymi, dok. typu MMo z mag. 'nieksięgowymi'

Kod:
int Sub OnBeforeInsert(long lId)

   long nCount, i
   Dispatch xMg, xPoz
   int nErr
   int edytuj=0


   string typ_mag="105"
   string kontofk=""

   string qZap2
   DISPATCH rs2, con2
   con2 = GetAdoConnection()
   rs2= "ADODB.Recordset"

   string qZap3
   DISPATCH rs3, con3
   con3 = GetAdoConnection()
   rs3= "ADODB.Recordset"

   xMg = xFactory.NewObject("BDokumentMg")
   nErr = xMg.Load("id="+(using "%d",lId))
   if nErr then error Using "\nBłąd ładowania dokumentu magazynowego nr %l\n", nErr

   

   if xMg.typDk=="MMo-" then

      if xMg.dzial.kod==xMg.magazyn_przesuniecia.kod then

         message "Nie możesz wykonać przesuniecia pomiedzy tymi samymi magazynami {Ico:!}"
         edytuj=-6000

      else
         qZap2="SELECT khfk FROM HM.KH where kod ='"+(using "%s", xMg.dzial.kod)+"' and khfk!='"+kontofk+"' and typ="+typ_mag
         qZap3="SELECT khfk FROM HM.KH where kod ='"+(using "%s", xMg.magazyn_przesuniecia.kod)+"' and khfk!='"+kontofk+"' and typ="+typ_mag
         rs2.Open(qZap2, con2)
         rs3.Open(qZap3, con3)
      
         if !rs2.EOF || !rs3.EOF then
         
          rs2.Close()
         rs3.Close()
            message "Dokumentem MMo można przesuwać towary tylko na magazynach nieposiadająych ewidencji księgowej  {Ico:!}"
            edytuj=-6000
         else
         rs2.Close()
         rs3.Close()
            message "Towar zostanie przesunięty !!   {Ico:!}"
         
         endif


      endif
   endif

   if xMg.typDk=="MMo+" then

      if xMg.dzial.kod==xMg.magazyn_przesuniecia.kod then

         message "Nie możesz wykonać przesuniecia pomiedzy tymi samymi magazynami {Ico:!}"
         edytuj=-6000

      else
         qZap2="SELECT khfk FROM HM.KH where kod ='"+(using "%s", xMg.dzial.kod)+"' and khfk!='"+kontofk+"' and typ="+typ_mag
         qZap3="SELECT khfk FROM HM.KH where kod ='"+(using "%s", xMg.magazyn_przesuniecia.kod)+"' and khfk!='"+kontofk+"' and typ="+typ_mag
         rs2.Open(qZap2, con2)
         rs3.Open(qZap3, con3)
      
         if !rs2.EOF || !rs3.EOF then
         
          rs2.Close()
         rs3.Close()
            message "Dokumentem MMo można przesuwać towary tylko na magazynach nieposiadająych ewidencji księgowej   {Ico:!}"
            edytuj=-6000
         else
         rs2.Close()
         rs3.Close()
            message "Towar zostanie przesunięty !!  {Ico:!}"
         
         endif


      endif
   endif

   if xMg.typDk=="MKo-" then

      if xMg.dzial.kod==xMg.magazyn_przesuniecia.kod then

         message "Nie możesz wykonać przesuniecia pomiedzy tymi samymi magazynami {Ico:!}"
         edytuj=-6000

      else
         qZap2="SELECT khfk FROM HM.KH where kod ='"+(using "%s", xMg.dzial.kod)+"' and khfk!='"+kontofk+"' and typ="+typ_mag
         qZap3="SELECT khfk FROM HM.KH where kod ='"+(using "%s", xMg.magazyn_przesuniecia.kod)+"' and khfk!='"+kontofk+"' and typ="+typ_mag
         rs2.Open(qZap2, con2)
         rs3.Open(qZap3, con3)
      
         if !rs2.EOF || !rs3.EOF then
         
          rs2.Close()
         rs3.Close()
            message "Dokumentem MMo można przesuwać towary tylko na magazynach nieposiadająych ewidencji księgowej   {Ico:!}"
            edytuj=-6000
         else
         rs2.Close()
         rs3.Close()
            message "Towar zostanie przesunięty !!  {Ico:!}"
         
         endif


      endif
   endif

   if xMg.typDk=="MKo+" then

      if xMg.dzial.kod==xMg.magazyn_przesuniecia.kod then

         message "Nie możesz wykonać przesuniecia pomiedzy tymi samymi magazynami {Ico:!}"
         edytuj=-6000

      else
         qZap2="SELECT khfk FROM HM.KH where kod ='"+(using "%s", xMg.dzial.kod)+"' and khfk!='"+kontofk+"' and typ="+typ_mag
         qZap3="SELECT khfk FROM HM.KH where kod ='"+(using "%s", xMg.magazyn_przesuniecia.kod)+"' and khfk!='"+kontofk+"' and typ="+typ_mag
         rs2.Open(qZap2, con2)
         rs3.Open(qZap3, con3)
      
         if !rs2.EOF || !rs3.EOF then
         
          rs2.Close()
         rs3.Close()
            message "Dokumentem MMo można przesuwać towary tylko na magazynach nieposiadająych ewidencji księgowej   {Ico:!}"
            edytuj=-6000
         else
         rs2.Close()
         rs3.Close()
            message "Towar zostanie przesunięty !!  {Ico:!}"
         
         endif


      endif
   endif

    if xMg.typDk=="MM-" then   
      if ucase(xFactory.uzytkownik.kod)!="ADMIN" then
           message "Nie masz uprawnień do wykonywania przesunięć MM na magazynach księgowych\nZwróć sie do osob które mają takie uprawnienia {Ico:!}"
            edytuj=-6000
        endif
    endif

    if xMg.typDk=="MM+" then   
      if ucase(xFactory.uzytkownik.kod)!="ADMIN" then
           message "Nie masz uprawnień do wykonywania przesunięć MM na magazynach księgowych\nZwróć sie do osob które mają takie uprawnienia {Ico:!}"
            edytuj=-6000
        endif
    endif

    if xMg.typDk=="MK-" then   
      if ucase(xFactory.uzytkownik.kod)!="ADMIN" then
           message "Nie masz uprawnień do wykonywania przesunięć MM na magazynach księgowych\nZwróć sie do osob które mają takie uprawnienia {Ico:!}"
            edytuj=-6000
        endif
    endif

    if xMg.typDk=="MK+" then   
      if ucase(xFactory.uzytkownik.kod)!="ADMIN" then
           message "Nie masz uprawnień do wykonywania przesunięć MM na magazynach księgowych\nZwróć sie do osob które mają takie uprawnienia {Ico:!}"
            edytuj=-6000
        endif
    endif

   OnBeforeInsert = edytuj
EndSub

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