[Résolu] Création d'un rapport à partir d'une requête sur PostgreSQL

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
jbo
Fraîchement OOthentifié
Messages : 3
Inscription : 22 janv. 2024 09:10

[Résolu] Création d'un rapport à partir d'une requête sur PostgreSQL

Message par jbo »

Bonjour,

J'ai créé une requête sur une base de données externe qui tourne sous PostgreSQL et qui fonctionne bien.
Cette requête (reproduite ci-dessous) produit un simple tableau de 6 colonnes (Code, Libelle, Fns, Achat, Ventettc, Reliquat).
Je dois imprimer ce tableau.
Il semble que je ne puisse pas imprimer directement le tableau produit par la requête et donc j'essaie de créer un rapport dans le but de l'imprimer.

Quand j'essaie de créer le rapport avec l'assistant (menu Edition, Assistant rapport), j'obtiens le message d'erreur :
Les noms de champs de « Query1 » n'ont pas pu être extraits.
Je me dis que LibreOffice ne parvient pas à analyser ma requête, peut-être parce que sa syntaxe, bien que correcte pour PostgreSQL, n'est pas celle attendue par LibreOffice ?
Voici la requête :

Code : Tout sélectionner

select t1.code as "Code", t1.nom as "Libelle", t2.code as "Fns", t3.prixachat as "Achat", t1.prixttc as "Ventettc", (select ((select coalesce(sum(t12.quantite), 0) from glfbdc00001 t12, gfbdco00001 t10 where t12.id_piece = t10.id and t10.id_gclien= t2.id and t12.id_gprodu = t1.id) - (select coalesce(sum(t13.quantite), 0) from glfbdr00001 t13, gfbdre00001 t11 where t13.id_piece = t11.id and t11.id_gclien= t2.id and t13.id_gprodu = t1.id))) as "Reliquat" from gfprod00001 t3, gprodu00001 t1, gfourn00001 t2 where t1.id = t3.id_gprodu and t2.id = t3.id_gfourn order by t2.code, t1.code
Je connais bien la syntaxe PostgreSQL mais pas celle qui est attendue par LibreOffice.
Ma question :
Que faudrait-il modifier dans cette requête pour qu'elle soit analysable par LibreOffice dans le but de créer un rapport ?

En vous remerciant pour votre expertise
Dernière modification par jbo le 22 janv. 2024 11:00, modifié 2 fois.
LibreOffice 7.5.9.2 (AARCH64)
MacOS Sonoma 14.2.1 (23C71)
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9258
Inscription : 28 août 2010 08:45

Re: Création d'un rapport à partir d'une requête sur une base PostgreSQL

Message par micmac »

Bonjour et bienvenue,

Cette information pouvant s'avérer essentielle, j'ai rattaché votre signature qui n'apparaissait pas.
jbo a écrit : 22 janv. 2024 10:27 Question secondaire :
La règle n° 7 stipule qu'il ne faut mettre qu'une question par fil.

Poser plusieurs questions complique la compréhension et n'encourage pas les réponses : il vaut donc mieux découper votre problème. Le titre de votre question ne peut pas refléter l'ensemble des problèmes exposés.

Afin que nous puissions avoir une base de connaissance efficace lors d'une recherche sur un seul de vos problèmes, nous vous prions de créer autant de fils que de questions.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
jbo
Fraîchement OOthentifié
Messages : 3
Inscription : 22 janv. 2024 09:10

Re: Création d'un rapport à partir d'une requête sur une base PostgreSQL

Message par jbo »

Je suis désolé, j'ai peur d'avoir confondu LibreOffice et OpenOffice. Ma question concerne bien LibreOffice (et pas OpenOffice)
LibreOffice 7.5.9.2 (AARCH64)
MacOS Sonoma 14.2.1 (23C71)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: Création d'un rapport à partir d'une requête sur une base PostgreSQL

Message par Dude »

Salut,

Commence déjà par décomposer ta requête qui comporte plusieurs SELECT imbriqués.
Et vois si chaque morceau s'exécute correctement.
Anakin
NéOOphyte
NéOOphyte
Messages : 145
Inscription : 08 nov. 2023 11:40

Re: Création d'un rapport à partir d'une requête sur une base PostgreSQL

Message par Anakin »

Bonjour jbo,

Comme vous avez pu constater en parcourant les discussions du forum base, afin d'obtenir un rapport sur fichier PDF, que ce soit avec LO ou avec AOO, à partir d'une table aussi bien que d'une recherche, il est préférable de joindre à votre courrier l'objet de la discussion. Ceci afin d'éviter tout enchevêtrement.

Vous savez aussi bien que moi, qu'une requête peut être rédigée d'une manière différente- expérience faite avec MySql.

Bien à vous

Anakin
Libre Office 6.0.7 sous Ubuntu 18.04.6
jbo
Fraîchement OOthentifié
Messages : 3
Inscription : 22 janv. 2024 09:10

Re: Création d'un rapport à partir d'une requête sur une base PostgreSQL

Message par jbo »

Bonjour,

Après investigation, le problème est lié à la syntaxe de l'écriture d'une requête qui comporte des requêtes imbriquées.
Prenons l'exemple d'une requête sur une table qui retourne un montant1 et une autre requête sur une autre table qui retourne un montant2.
Pour afficher la différence des deux résultats dans une requête, PostgreSQL permet d'écrire une requête dont la structure ressemble à ceci :

Code : Tout sélectionner

select ((select montant1 from table1) - (select montant2 from table2)) as difference
Ce type de requête est envoyé sans problème par LibreOffice à la base PostgreSQL et celle-ci retourne le bon résultat.
Donc la requête elle-même fonctionne bien.
La difficulté apparaît uniquement au moment où on essaie de bâtir un rapport à partir de cette requête :
Pour bâtir le rapport, LibreOffice doit être capable d'analyser la requête pour détecter les champs qu'elle va retourner.
Mais LibreOffice ne sait apparemment pas analyser cette syntaxe ce qui interdit la création du rapport.

Finalement nous avons abandonné la piste LibreOffice pour répondre à ce besoin mais je consigne le résultat de notre investigation pour aider d'autres utilisateurs qui pourraient être confrontés à la même difficulté. Il est probable qu'en modifiant la syntaxe de l'écriture de ce type de requête, on arrive à trouver une solution.

Merci à tous ceux qui ont contribué à ce sujet
LibreOffice 7.5.9.2 (AARCH64)
MacOS Sonoma 14.2.1 (23C71)
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Création d'un rapport à partir d'une requête sur une base PostgreSQL

Message par jeanmimi »

Bonjour,
Le code en HSQL de LibreOffice serait plutôt :

Code : Tout sélectionner

select ((select "montant1" from "table1") - (select "montant2" from "table2")) as 'difference'
Peux-tu regarder si ta requête actuelle peut devenir une Vue qui serait utilisable par le Rapport ?
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox