App-Link #994 Ad hoc Reports aufbauend auf bestehenden Views in App-Schemen als Text oder CSV -- {0r}

Voraussetzungen für einen AReport:
- Schemen sind zulässig
- Angemeldeter Benutzer ist berechtigt
- View endet mit dem Namen "_qry"


Vorteile:
- Wenn bereits passende Views vorhanden sind,
kann man diese ohne Programmänderung verfügbar machen. ( Berechtigung prüfen )

- Man kann nach einem beliebigen Text in den Zeilen filtern. (z.B. Erfolg)

- Die Ausgabe ist als Text(html) oder csv möglich.

- Neben "download" steht auch die Funktion "als eMail senden" zur Verfügung.
(auch bei verwalteten Gastsitzungen möglich -- https://support.google.com/chrome/a/answer/3017014)



Nachteil:
- z.B. keine Summen -- also eher CSV nutzen und per Tabellenkalkulation nutzen.

--> /frepjs2000/AReport?nur_AREPORT=Stueckliste&report_search_text=O-W&format=html


/public/js_es6_adhoc_report_auswahl.png


- 1 -    (TxtDoc-areport2026-07-17.html)


AReport #1071 Anl_AFA

{
"SELECT_FDNAMES": "artikelnr, art_bezeichnung, JAHR, AK__AFA_Ant, MEH, EUR",
"FROM_SCHEMA": "frepjs2000",
"FROM_QRY": "Artikel_Anl_qry"
}

/public/Artikel_Gruppe_Anl_Afa.png


--> /frepjs2000/AReport?nur_AREPORT=Anl_AFA&report_search_text=%25&format=html


- 2 -    (TxtDoc-areport2026-07-17.html)


AReport #1000 FSammlung_qry

{
"SELECT_FDNAMES": "inv_bew_am, adresse, kategorie, bezeichnung, ek",
"FROM_SCHEMA": "a_todo4",
"FROM_QRY": "FSammlung_qry"
}

/public/js_es6_adhoc_fsammlung.png


--> /frepjs2000/AReport?nur_AREPORT=FSammlung_qry&report_search_text=%25&format=html


- 3 -    (TxtDoc-areport2026-07-17.html)


AReport #1066 Stueckliste

{
"SELECT_FDNAMES": "artikelnr, p_artikels, t_artikelnr, t_menge, t_mehs, t1_x_menge, t1_x_menge_dets",
"FROM_SCHEMA": "frepjs2000",
"FROM_QRY": "Artikel_AParts_t1_x_t_artikelnr_sum_qry"
}

- 4 -    (TxtDoc-areport2026-07-17.html)


AReport #990 Saldenliste

{
"SELECT_FDNAMES": "cos_id, vorgang_knz, adressnr, konto, konto_text, s_betrag, h_betrag",
"FROM_SCHEMA": "aea_cos",
"FROM_QRY": "buchhaltung_saldenliste_vorgang_qry"
}

--> https://jobst-software.net/frepjs2000/AReport?nur_AREPORT=Saldenliste&report_search_text=%25&format=html


- 5 -    (TxtDoc-areport2026-07-17.html)


AReport #993 Bestandsliste

{
"SELECT_FDNAMES": "vorgang_knz, adressnr, beldatum, artikelnr, lagerort, bewegungs_menge",
"FROM_SCHEMA": "al_storage",
"FROM_QRY": "l_storage_bestandsliste_qry"
}

--> https://jobst-software.net/frepjs2000/AReport?nur_AREPORT=Bestandsliste&report_search_text=%25&format=csv


- 6 -    (TxtDoc-areport2026-07-17.html)


AReport #1087 TOUR_Platz_Check

{
"SELECT_FDNAMES": "lieferdatum, tourname, anr, von, nach, max_plaetze, bemerkung, pl_01, pl_02, pl_03, pl_04, pl_05, pl_06, pl_07, pl_08, pl_09, pl_10, pl_11, pl_12, pl_13, pl_14, pl_15, pl_16, pl_17, pl_18, pl_19, pl_20",
"FROM_SCHEMA": "frepjs2000",
"FROM_QRY": "a_tour_platz_pivot_qry"
}

/public/a_tour_platz_check.png


--> /frepjs2000/AReport?nur_AREPORT=TOUR_Platz_Check&report_search_text=%25&format=html


- 7 -    (TxtDoc-areport2026-07-17.html)


AReport_Web #1080 Office-Datennutzung mit Webservice als Datenquelle

z.B. für Datenquellen, 
für die man eine URL hat
und als Abfrage oder im Tabellenkalkulationsprogramm nutzen möchte.

Die Arbeit übernimmt hier die SQL
und das Tabellenkalkulationsprogramm braucht nativen Zugriff auf die SQL-Datenbank (z.B. per SDBC auf PostgreSQL).



z.B. "Tabelle"

--> http://kantn.jobst-software.net:8080/aussendienst4/preferences.html


/public/einstellungen_tabelle_office.png

CREATE FUNCTION frepjs2000.ws_preferences() RETURNS TABLE ( PREFERENCE_KEY text, PREFERENCE_VALUE text) SECURITY DEFINER AS $$

BEGIN
create TEMPORARY table temp_tab ( f1 text) on commit drop;

COPY temp_tab
FROM PROGRAM 'curl "http://kantn.jobst-software.net:8080/MywebDb3Servlet?sql=select%20_id%2C%20PREFERENCE_KEY%2C%20PREFERENCE_VALUE%20from%20Preferences%20order%20by%20_id&parameters=%5B%5D" '
;

return QUERY
select
json_array_elements(f1::json)->>'PREFERENCE_KEY' as PREFERENCE_KEY,
json_array_elements(f1::json)->>'PREFERENCE_VALUE' as PREFERENCE_VALUE
from temp_tab
;
END;
$$ LANGUAGE plpgsql;
- 8 -    (TxtDoc-areport2026-07-17.html)


AReport_Web #1034 HTML-Ansicht mit Webservice als Datenquelle

z.B. für Datenquellen, 
für die man eine URL hat
und als Tabelle anzeigen möchte.
( Cross-Origin ist hier zu beachten )

KI-Lookups werden auch über diesen Weg genutzt.



z.B. "Tabelle"

--> http://kantn.jobst-software.net:8080/aussendienst4/preferences.html


/public/einstellungen_tabelle_html.png

man kann mit wenig HTML / TypeScript/JavaScript auskommen,

wenn Cross-Origin und Authentifizierung bereits gelöst sind.



<html>
<head>
<title>Einstellungen - Tabelle</title>

<style>
td {
border: solid 1px darkGray; min-width: 2rem; padding: 0.2rem;
}
</style>

<script type="module" >
"use strict";

window.addEventListener( "load", function() {
const select_url = getEinstellungen_Tabelle_Select_url();
fetch( select_url, { credentials: 'include' })
.then( (response) => response.text() )
.then( (text) => {
const table_ele = document.getElementById("d-print-table");
const json_doc = JSON.parse( text);
fill_table( document, table_ele, json_doc);
})
.catch( function( exc) {
alert( "fetch failed (" + exc + ")");
});
});


function fill_table( html_doc, table_ele, json_doc) {
const tag_names = [ "th", "td" ];
for( let tag_name_i=0; tag_name_i < tag_names.length; tag_name_i++ ) {
let tag_name = tag_names[ tag_name_i];
let trs = json_doc;
for( let tr_i=0; tr_i < ( tag_name == "th" && trs.length >= 1 ? 1 : trs.length ); tr_i++ ) {
let tr = trs[ tr_i];

let tr_ele = html_doc.createElement( "tr");
table_ele.appendChild( tr_ele);

let tds = tr;
Object.entries( tds).forEach( ( [fdName, fdValue]) => {
let td_ele = html_doc.createElement( tag_name);
tr_ele.appendChild( td_ele);

td_ele.innerText = ( tag_name == "th" ? fdName : fdValue );
});
}
}
}


function getEinstellungen_Tabelle_Select_url() {
const select = getEinstellungen_Tabelle_Select();
const select_sql = select[ "sql"];
const json_parameters = JSON.stringify( select[ "param"]);

const select_url = "/MywebDb3Servlet" + "?sql=" + encodeURIComponent( select_sql) + "&parameters=" + encodeURIComponent( json_parameters);
return select_url;
}


function getEinstellungen_Tabelle_Select() {
const select_sql = "select _id, PREFERENCE_KEY, PREFERENCE_VALUE from Preferences order by _id";
return { sql: select_sql, param: [] };
}
</script>
</head>

<body>



<h1>Einstellungen - Tabelle</h1>


<table id="d-print-table" >


</table>


</body>
</html>
- 9 -    (TxtDoc-areport2026-07-17.html)

INTRANET