Makro do autoaktualizacji stanów magazynowych

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
shivetay
Posty: 8
Rejestracja: pn gru 06, 2010 7:22 pm

Makro do autoaktualizacji stanów magazynowych

Post autor: shivetay »

Witam.

Poszukuję makra, które automatycznie będzie automatycznie aktualizowało ilość produktów na magazynie.
Mam w osobnym arkuszu kilka tabel, w których mam podane nazwy produktów oraz ich ilości. Chciałbym, aby po wyborze z listy rozwijanej, w dowolnym arkuszu, stan wybranego produktu sam sie aktualizował. Dodam, iż na chwilę obecną są tylko 3 tabele o różnych ilościach kolumn. W przyszłości będzie ich więcej, więc zależy mi na łatwej edycji(dodawaniu kolejnych tabel z produktami oczywiście ręcznie), oczywiście ilość towaru też będzie uzupełniana ręcznie.

Na zdjęciu widać część, która mnie interesuje. Po lewej lista rozwijana, po prawej jedna z tabel znajdująca się na innym arkuszu, tu podane są ilości.
Obrazek


Po wybraniu pozycji, w tabeli z ilościami następuje aktualizacja.
Obrazek

Tak jak pisałem wcześniej, ponieważ stany magazynowe będą się zmieniać zależy mi, by ewentualne makro, było łatwe w edycji w razie konieczności.
Przyznam się też, iż makra to dla mnie czarna magia i an tyle na ile udało mi sie samemu stworzyć arkusz, na tyle dałem radę niestety to już jest ponad moje siły :)
OpenOffice 3.1 na Windows Vista
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Makro do autoaktualizacji stanów magazynowych

Post autor: Jan_J »

Ja bym zrobił tak:
  1. za pomocą narzędzi Calca (Narzędzia/Makra/Zarządzaj oknami dialogowymi) zaprojektował formularz dialogowy, który służyłby do wyboru towaru.
  2. napisał makro, które wywoływałoby ten dialog, po czym wpisywałoby do bieżącej tabeli dane o wybranym towarze i jednocześnie zdejmowałoby go ze stanu w magazynie (szkic załączam niżej).
  3. przypisał skrót klawiszowy do wywołania formularza.
Punkty 1 i 3 da się zrealizować bez programowania.
Punkt 2 wymaga napisania jednej procedury. Niżej bardzo zgrubny szkic. Zakładam istnienie dialogu o nazwie MojDialog, w którym jest pole kombi o nazwie MokaListaCombo oraz pycisk zatwierdzający formularz.

Kod: Zaznacz cały

Sub Test()
	d = thisComponent ' operujemny na bieżącym arkuszu
	src = d.Sheets.getByIndex(0) ' pierwszy arkusz zawiera listę towarów
	n = 100 ' tyle towarów
	trg = d.currentController.getActiveSheet() ' wybrany kowar dopsiujemny do listy w bieżącym arkuszu
	if src.Name <> trg.Name then ' jeżeli bieżący jest inny niż lista bazowa
          rem tworzymy listę elementów dla pola kombi
	  dim zakres(n) as string
	  for i = 0 to n
	    zakres(i) = src.getCellByPosition(0,i+1).getString()
	  next i
          rem x będzie wybranym elementem z listy
	  x = wybor(zakres)
	  if x <> "" then ' dokonano wyboru
	    rem wpisz X do listy trg
	    rem zmniejsz licznik odpowiadający X w liście src
	  endif
	endif
End Sub

function Wybor(zakres as array) as variant
	libStd = DialogLibraries.getByName("Standard")
	libDlg = libStd.getByName("MojDialog")
	dlg = CreateUnoDialog(libDlg)
	combo = dlg.getcontrol("MojaListaCombo")
	combo.text = "<wybierz>"
	combo.additems(zakres,0)
	if dlg.execute() then
	  ok = combo.text
	else
	  ok = ""
	endif 
	dlg.dispose()
	Wybor = ok
End function
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
kturendyk
Posty: 30
Rejestracja: pt sty 22, 2016 4:59 pm

Re: Makro do autoaktualizacji stanów magazynowych

Post autor: kturendyk »

Odświeżam.
Próbuję dopasować to makro do swoich potrzeb ale mi nie wychodzi. Wogóle nie mam pomysłu jak zmniejszać ilość produktów w magazynie.
Jest trzy listy, czy jest możliwość żeby wybierać z jednej z nich?
Dodatkowo chciałbym zrobić tak że jak stan magazynowy równy jest zero ( tło jest na czerwono)to żeby towar wpisał się na początku arkusza u góry do zamówienia.
Może ktoś podpowie jak to uruchomić
W załączniku próbny magazyn
Pozdrawiam
Załączniki
magazyn.ods
(26.2 KiB) Pobrany 216 razy
Apache OpenOffice 4.1.4, Windows 8.1
ODPOWIEDZ