Details lassen sich per Kopfrechnung weniger gut überschlagen.
Dafür hat man ev. eine SQL samt Tools.
z.B.

--> /frepjs2000/Fr_Artikel_Pflege?submitaction=%2F%3D%2F&datatable_primarykey=127
Eine SQL kann auch helfen mit rekursiven Strukturen umzugehen.
z.B.:
WITH RECURSIVE included_parts( t_nr, apart_artikelnr, artikelnr, par_menge, t1_x_menge) AS (
SELECT 1 as t_nr, apart_artikelnr, artikelnr, 1::numeric as par_menge, menge::numeric as t1_x_menge
FROM frepjs2000.Artikel_AParts WHERE artikelnr like '%Pal%'
UNION ALL
SELECT (t_nr + 1) as t_nr, p.apart_artikelnr, p.artikelnr, (par_menge * 1)::numeric as par_menge, (p.menge * pr.t1_x_menge)::numeric as t1_x_menge
FROM included_parts pr
join frepjs2000.Artikel_AParts p on pr.apart_artikelnr = p.artikelnr
)
SELECT
string_agg( inc_pr.t_nr::varchar, ' ') as t_nrs,
--
inc_pr.artikelnr,
round( SUM( inc_pr.par_menge), 4) as menge,
string_agg( distinct art.mengen_einheit, ' ') as mengen_einheit,
--
inc_pr.apart_artikelnr as t_artikelnr,
round( SUM( inc_pr.t1_x_menge), 4) as t1_x_menge,
string_agg( distinct ap_art.mengen_einheit, ' ') as t_meh,
string_agg( concat( f_n(inc_pr.t1_x_menge), f_meh( ' ', ap_art.mengen_einheit) ), ' + ') as t1_x_menge_dets,
string_agg( concat( inc_pr.apart_artikelnr, ' ', f_n(inc_pr.t1_x_menge), f_meh( ' ', ap_art.mengen_einheit) ), ' + ') as t1_x_menge_dets_ex
FROM included_parts inc_pr
join frepjs2000.artikel art on inc_pr.artikelnr = art.artikelnr
join frepjs2000.artikel ap_art on inc_pr.apart_artikelnr = ap_art.artikelnr
GROUP BY
inc_pr.artikelnr, inc_pr.apart_artikelnr
;
Kein EAN-, BAR-Code, ... möglich,
Maschinen-, Auftrags-, Artikelnummer
sind jedoch notwendig !?
Ev.
- mit einem Schreiber zur Beschriftung von Regalen, Behältern, ...
- kurzer Text drauf (z.B. "TX6" --> Artikelnummer: 22415)
- und eine manuelle Eingabe auf einem Mobilgerät kann rationell funktionieren
Kann sich ausgehen, wenn man < 30000 Dinge unterscheiden möchte
create view frepjs2000.short_ids as
SELECT
date_ser0.ser_nr as ser_nr0,
date_ser1.ser_nr as ser_nr1,
date_ser2.ser_nr as ser_nr2,
--
( (date_ser0.ser_nr * 30 * 30)
+ (date_ser1.ser_nr * 30)
+ (date_ser2.ser_nr)
) as long_id,
--
concat( case when date_ser0.ser_nr <> 0 then substring( '123456789ABCEFGHJKLMNPRSTUWXYZ', date_ser0.ser_nr + 1, 1) end,
substring( '123456789ABCEFGHJKLMNPRSTUWXYZ', date_ser1.ser_nr + 1, 1),
substring( '123456789ABCEFGHJKLMNPRSTUWXYZ', date_ser2.ser_nr + 1, 1)
) as short_id
FROM
generate_series( 0, 29, 1) AS date_ser0(ser_nr),
generate_series( 0, 29, 1) AS date_ser1(ser_nr),
generate_series( 0, 29, 1) AS date_ser2(ser_nr)
order by
1, 2, 3
;
- 1 - (TxtDoc-kore--logistik2026-07-17.html)