Rozdzielenie towaru pomiędzy paletami

Rozdzielenie towaru pomiędzy paletami

Wątek przeniesiony 2021-08-27 22:23 z Bazy danych przez cerrato.

BL
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 3 lata
  • Postów:95
0

Witam.

Mam taką zagwozdkę. Mam zapytanie które zwraca mi ilość towaru do pobrania z magazynu. Jednak na magazynie towaru rozłożony jest na kilku paletach i możliwe są również niepełne opakowania z tzw "resztówką". Chciałbym w pierwszej kolejności zabrać towar z całą resztówką później w miarę możliwości brać towar nie otwarty lub otwierać następny. Jeżeli nie ma resztówek to brać towar nie otwarty.

Mam tabelę Materiał :

Kopiuj
MATERIAL ILOSC_DO_POBRANIA
A         20
B         30    
C         55

Oraz tabelę resztówka

Kopiuj
MATERIAL RESZTOWKA  PALETA
A         1,5       50
A         0         50
A         5,5       100
B         3,5       30
A         20        50
B         0         30
C         0         125

Wynik jaki chciałbym otrzymać to mogą być powielone materiały (czyli rozbite np materiały na 1-2-3 pozycje) z ilościami do pobrania. Najważniejsze aby ILOSC_DO_POBRANIA się zgadzała.

DR
Zły dział. To powinno być w "Ogłoszenia drobne", albo dodasz co już zrobiłeś.
BL
@Dregorio: Zrobiłem zapytanie na około 300 liniii więc słabo tu wszystko wklejać i wszytko wyjaśniać... prośbę kieruję bo nie potrafię zrobić jednego elementu z całej układanki bo wydaje mi się, że tutaj już wchodzi PL/SQL ale może się mylę i dlatego się pytam.
CH
NIE z przymiotnikami piszemy razem np: jaki? nieotwarty. p.s. jak 300 linii przeciez to jest na max 100 znakow hehee
UglyMan
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Postów:2206
1

A co gdy dodanie kolejnej resztówki przepełni ilość do pobrania ? Masz mieć równo tylko i le zamówili?

AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:dzień
  • Postów:3561
1

Proponowana struktura bazy jest mało perspektywiczna, tylko pod jedno zagadnienie.

Bardziej perspektywiczne by było N wierszy np. dwa z różnymi jednostkami.


Bo C to najlepszy język, każdy uczeń ci to powie
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:dzień
  • Postów:3277
1

Samym zapytaniem tego nie zrobisz (ewentualnie zrobisz potworka). Rozumiem, że masz tabelę z kluczem artykułu, pozostałą ilością w opakowaniu i wielkością opakowania, chcesz w pierwszej kolejności wydać już otwarte. Pytanie co w przypadku kiedy jest "resztówka", ale zapotrzebowanie pasuje akurat do jakiegoś pełnego opakowania?
Samo rozwiązanie to pobrać towary, posortować po stopniu napoczęcia, a później jechać po tak stworzonym kursorze tak długo jak suma narastająca będzie mniejsza od zapotrzebowania.
Pierwsza część to zwykłe select * from stany where material = 'A' order by (resztowka/paleta)
Drugą część można pewnie złożyć jakimiś sporymi zapytaniami operującymi na powyższym wyniku, ale znacznie lepiej użyć procedury, która weźmie sobie odpowiednią liczbę wierszy z początku wyniku.

AK
posortować po stopniu napoczęcia, a później jechać - może się okazać, że załoga własnego magazynu zaj...bie programistę łopatami albo gołymi ręcyma
AK
Generalnie temat jest DO APLIKACJI
AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:dzień
  • Postów:3561
3
piotrpo napisał(a):

Samym zapytaniem tego nie zrobisz (ewentualnie zrobisz potworka).

W ogóle temat jest wybitnie dla warstwy aplikacji, i robienie tego w SQL jest (mówiąc dyplomatycznie) "nieco dziwne".


Bo C to najlepszy język, każdy uczeń ci to powie
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 7 godzin
  • Postów:3866
3

Zakladajac, że jeżeli resztówka=0 to biorę ilość z palety, to nie jest to jakieś mega skomplikowane:

Kopiuj
with RPT AS (
select  
  "MATERIAL"
  , "RESZTOWKA"
  , "PALETA"
  , SUM(CASE WHEN P.resztowka = 0 THEN paleta ELSE resztowka END) OVER (PARTITION BY MATERIAL ORDER BY RESZTOWKA DESC) as "RS" 
  , ROW_NUMBER() over (partition by MATERIAL order by resztowka desc) as id
  , CASE WHEN P.resztowka = 0 THEN paleta ELSE resztowka END il
from p
)
, result as (
SELECT
  ID
  ,M.MATERIAL
  ,ILOSC_DO_POBRANIA
  ,RESZTOWKA
  ,PALETA
  ,RS
  ,case when rs >= ilosc_do_pobrania then 1 else 0 end as e
  ,il
FROM
  m
  left JOIN RPT ON RPT.MATERIAL = M.MATERIAL 
)

select
  result.MATERIAL
  ,ILOSC_DO_POBRANIA
  ,RESZTOWKA
  ,PALETA
  ,case when e=0 then il else il - (rs - ilosc_do_Pobrania) end as Wynik
from 
  result
  inner join (select 
                material
                , min(id) i 
              from 
                result 
              where 
                 e = 1 
              group by material) l on l.material = result.material and result.id <= l.i

http://sqlfiddle.com/#!4/2793a1/12

YourFrog2
  • Rejestracja:prawie 4 lata
  • Ostatnio:około 2 lata
  • Postów:100
0

@BLAZO:
Czym jest resztówka? Bo nie bardzo rozumiem. Jeśli paleta ma 50 i resztówkę 1.5 to znaczy że na palecie jest 51.5? W ogole jak ktoś chce 20 sztuk to 0.5 powinniśmy brać? Zbyt mało danych by napisać Ci zapytanie.

To co chcesz uzyskać nie jest takie trudne. Napisz o jakiej bazie mówimy bo to kluczowe dla zapytania.

.andy
Wyobraź sobie że na palecie mieści się 50 zgrzewek mleka. W zgrzewce jest np. 16 butelek. Możesz mieć paletę gdzie masz np. równo 40 zgrzewek a i możesz mieć taką gdzie jest 40 pełnych zgrzewek i jedna niepełna np. zostało 3 butelki z 12. Z tego co rozumiem, to chodzi o to aby najpierw kierowało do takiej palety?
AK
  • Rejestracja:ponad 6 lat
  • Ostatnio:dzień
  • Postów:3561
1

Kopnijcie mnie w kostkę, albo dowolną inną część ciała, że to projekt studencki, a nie fundamenty siedemset dwunastego w Polsce tzw "ERP", który z klienta wydrąży tym więcej, im będzie to gorzej zrobione.

Wyobraź sobie że na palecie mieści się 50 zgrzewek mleka. W zgrzewce jest np. 16 butelek. Możesz mieć paletę gdzie masz np. równo 40 zgrzewek a i możesz mieć taką gdzie jest 40 pełnych zgrzewek i jedna niepełna np. zostało 3 butelki z 12. Z tego co rozumiem, to chodzi o to aby najpierw kierowało do takiej palety? — .andy 12 minut temu

jedno z pytań. Ja postawię następne.
Producent paletuje po 96 jednostek. Ale za pól roku zacznie po 92 (powód? dowolny, np eko, unia, SARS-23, firmę ktoś przejął)
Na składzie mamy z obu dostaw.

wg @KamilAdam pojutrze dam bardziej wredne uwagi, obecnie jestem zaspany


Bo C to najlepszy język, każdy uczeń ci to powie
KamilAdam
Ale dla mnie nie musisz się starać bo ja w ogóle nie rozumiem co się dzieje w tym wątku
KamilAdam
@AnyKtokolwiek: Chyba przesadziłeś :(
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)