Application ASP.NET : Datagrid vers Export crystal report puis vers Word automat

satanik_mike Messages postés 28 Date d'inscription mercredi 6 juin 2001 Statut Membre Dernière intervention 3 mars 2009 - 26 avril 2005 à 19:42
satanik_mike Messages postés 28 Date d'inscription mercredi 6 juin 2001 Statut Membre Dernière intervention 3 mars 2009 - 27 avril 2005 à 14:57
Bonjour tout le monde !!

Je viens vous demander un coup de main car je ne me sors pas du problème que j'essaye de résoudre.

J'ai fait une appli en ASP.NET (VB.NET behind) qui gère des données provenant d'une base SQLServer 2000.

Elle fonctionne sans problème, visualisation, saisie, modification, etats CrystalReport et exports Excel, Word, PDF.

Cependant, mon client me demande une subtilité dans les éditions.

Je dispose d'une page aspx contenant une datagrid me donnant une liste de bons de commande suivant une requete exécutée à la volée. Pour cela pas de soucis. Ensuite, j'ai une page impressions.aspx qui contient un crystalviewer dont la source dépend d'un paramètre dans la chaine request. Si je désire le bon seul, j'envoie 'impression.aspx?doc=BonCommande&numBon=' & DBG_LSTBONS.selectedItem.cells(1).text, sinon si je souhaite les lignes du bon de commande, j'envoie 'impression.aspx?doc=LignesBon&numBon=' & DBG_LSTBONS.selectedItem.cells(1).text.

Ces instructions sont mise dans un HyperLink serveur de manière à pouvoir ouvrir une popup et surtout définir la cible dynamiquement.

Mon problème est maintenant le suivant :
A partir de la liste, mon client me demande de faire en sorte que lorsqu'il demande l'impression d'un bon, les lignes du bon sont également imprimées. Je ne vois donc qu'une seule manière de faire cela qui serait d'ouvrir deux popups dont chacune pointerait sur la page impressions.aspx mais avec le paramètre qu'il faut.

Seulement je ne vois pas comment faire.

Si quelqu'un pouvait m'aider, ca me dépannerais grandement.

Merci d'avance.

10 réponses

cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
26 avril 2005 à 20:13
re,


je pense que cela dépend beaucoup de ta page impression.aspx.


D'après ce que je peux voir elle permet d'imprimer le bon ou les lignes du bon.


Ne peut tu pas envoyer doc=BonEtLignes&numBon=' & DBG_LSTBONS.selectedItem.cells(1).text

et imprimer le tout ?


yopyop
0
satanik_mike Messages postés 28 Date d'inscription mercredi 6 juin 2001 Statut Membre Dernière intervention 3 mars 2009
27 avril 2005 à 07:54
Salut,

Si, cela serait une solution, seulement il faudrait donc pour cela que j'ai deux cristal viewer pour pour monter 2 etats. Cela risque d'être assez génant pour les utilisateurs.

Merci pour ta réponse
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
27 avril 2005 à 09:25
pourquoi ne pas créer un nouveau rapport (crystal report) qui incorpore les deux déjà existants?

yopyop
0
satanik_mike Messages postés 28 Date d'inscription mercredi 6 juin 2001 Statut Membre Dernière intervention 3 mars 2009
27 avril 2005 à 11:10
Salut,

Bonne idée, mais les deux rapports doivent être ensuite exportable dans deux fichiers différents (normalement le bon en word car modifiable et les lignes en pdf car non modifiables)

Je sais, j'suis ch****t mais bon ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
27 avril 2005 à 11:21
et alors ?

tu forward la request sur ta page d'impression et ensuite sur ta page
qui génère les fichiers...

voit pas le problème ?

yopyop
0
satanik_mike Messages postés 28 Date d'inscription mercredi 6 juin 2001 Statut Membre Dernière intervention 3 mars 2009
27 avril 2005 à 11:32
Re ...

Le problème est simplement que la page qui contient le CRV et qui génère les doc sont une seule et même page.

Voici le code de ma page impression.aspx si cela peut aider.

Mais donne moi un peu plus de précisions sur ta drnière réponse, je suis pas sûr d'avoir bine saisi.

Merci

'Pour info : l'objet boncde est en fait une classe qui stocke les informations du bon, ainsi que 2 datatables qui contiennent les infos des lignes de bons et des lignes facture(sans importance).

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Public Class Impression
Inherits System.Web.UI.Page


#Region " Code gnr par le Concepteur Web Form "


'Cet appel est requis par le Concepteur Web Form.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()


End Sub
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents BT_ENVOI As System.Web.UI.WebControls.Button
Protected WithEvents CRViewer As CrystalDecisions.Web.CrystalReportViewer
Protected WithEvents RD_DESTINATION As System.Web.UI.WebControls.RadioButtonList


'REMARQUE: la dclaration d'espace rserv suivante est requise par le Concepteur Web Form.
'Ne pas supprimer ou dplacer.
Private designerPlaceholderDeclaration As System.Object


Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: cet appel de mthode est requis par le Concepteur Web Form
'Ne le modifiez pas en utilisant l'diteur de code.
InitializeComponent()
End Sub


#End Region
Public doc As String
Public numbon As Integer


Private Function RemplitEtat() As ReportDocument
Dim temprep As New ReportDocument
doc = Request.QueryString.Item("doc")
numbon = Convert.ToInt32(Request.QueryString.Item("numbon"))
'Selon les paramtres, je slectionne la source de CRViewer
Dim logonInfo As New TableLogOnInfo
Dim tbReport As Table
Dim selFormule As String


Try
temprep.Load(Server.MapPath(doc & ".rpt"))


'Mise en page de l'tat
temprep.PrintOptions.PaperSize = PaperSize.PaperA4
temprep.PrintOptions.PaperOrientation = PaperOrientation.Portrait


If doc <> "BonCommande" Then
'Impression d'une fiche Sigef ou Factures
'Je dispose donc des infos contenues dans lesobjets de traitements des bons selFormule "{BonCde.An_BonCde} """ & bonCde.Exercice & """ and {BonCde.Ordonnateur} = """ & _
bonCde.Ordonnateur & """ and {BonCde.N_Cde} = " & bonCde.numBon


temprep.RecordSelectionFormula = selFormule
Else
'Passage des paramtres de la procdure stocke
temprep.SetParameterValue("@Ordo", Request.QueryString.Item("Ordonnateur"))
temprep.SetParameterValue("@Annee", Request.QueryString.Item("Annee"))
temprep.SetParameterValue("@Bon", Convert.ToInt32(Request.QueryString.Item("NumBon")))
End If


' Dfinir les informations de connexion pour chaque table de l'tat
For Each tbReport In temprep.Database.Tables
' Extraire l'objet TableLogonInfo.
logonInfo = tbReport.LogOnInfo
' Dfinir le serveur ou le nom de la source de donnes ODBC, le nom de la base de donnes,
' l'ID utilisateur et le mot de passe.
logonInfo.ConnectionInfo.ServerName = ConfigurationSettings.AppSettings("serverSql")
logonInfo.ConnectionInfo.DatabaseName = ConfigurationSettings.AppSettings("database")
logonInfo.ConnectionInfo.UserID = ConfigurationSettings.AppSettings("userSqlServer")
logonInfo.ConnectionInfo.Password = ConfigurationSettings.AppSettings("passSqlServer")
' Appliquer les informations de connexion la table.
tbReport.ApplyLogOnInfo(logonInfo)
Next tbReport


Return temprep
Catch ex As Exception
HttpContext.Current.Response.Write("Erreur lors de l'ouverture de l'tat :

" & Server.MapPath(doc & ".rpt"))
Exit Function
End Try
End Function
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack() Or report Is Nothing Then
report = RemplitEtat()
End If
CRViewer.ReportSource = report
End Sub


Private Sub BT_ENVOI_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_ENVOI.Click
Dim fic As String, path As String
path = Server.MapPath(".") & ""


'Attention, si l'etat est dj charg je ne le regnre pas
If Not report.IsLoaded Then report = RemplitEtat()
Try
Select Case RD_DESTINATION.SelectedIndex
Case 0 'PDF
fic = Request.QueryString.Item("doc") & "_" & gh_Utilisateur & ".pdf"
report.ExportToDisk(ExportFormatType.PortableDocFormat, path & fic)
Case 1 'word
fic = Request.QueryString.Item("doc") & "_" & gh_Utilisateur & ".doc"
report.ExportToDisk(ExportFormatType.WordForWindows, path & fic)
Case 2 'excel
fic = Request.QueryString.Item("doc") & "_" & gh_Utilisateur & ".xls"
report.ExportToDisk(ExportFormatType.Excel, path & fic)
End Select
Catch ex As Exception
Response.Write("Erreur lors de l'exportation de l'tat :

" & ex.Message)
Exit Sub
End Try
report.Close()
report.Dispose()
report = Nothing
CRViewer.Dispose()
Response.Redirect(fic)
End Sub
End Class
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
27 avril 2005 à 11:53
oki,

le problème (si j'ai bien compris), c'est que ton code n'imprime pas les documents automatiquement, mais il les génère et ensuite les ouvre pour que l'utilisateur puisse
les imprimer ... c'est ca ?
En fait ta page impression n'imprime rien, mais elle génère des documents
c'est bien ca ?

Maintenant ton user ne veux pas l'un ou l'autre des documents, mais les deux->
génération des 2 rapports->2 fenêtres avec chacune 1 rapport à imprimer...

Si c'est bien le ca, tu vas être obligé d'ouvrir 2 fenêtres car tu doit générer un
pdf et un word dans ce cas (j'ai bien compris?).

L'idée serait donc d'ouvrir une seule fenêtre avec les deux docuements...

Est-ce que tu as pensé a utiliser des frames ?
Une fenêtre en trois parties:
1. Le document Word
2. Le document PDF
3. Le bouton print qui fait un print des 2 documents...

Ca irait ca ?

je vais manger miam:)

yopyop
0
satanik_mike Messages postés 28 Date d'inscription mercredi 6 juin 2001 Statut Membre Dernière intervention 3 mars 2009
27 avril 2005 à 14:06
Re,

En effet, c'est bien le fonctionnement actuel mais qui est voué a changer. Mais ca on verra plus tard.

En plus, les utilisateurs utilisent plusieurs navigateurs différents et certains n'acceptent pas les frames, ce qui m'obligerait à rajouter un traitement (que je ne connais pas encore) qui ferait un chargement différent selon le type de navigateur.

Ta solution serait effectivement envisageable, seulement j'ai peur de ne pas avoir le temps nécessaire pour la développer. En fait, je pense que le plus simple serait que le bouton qui demande l'ouverture de la page impressions.aspx puisse ouvrir 2 fenêtres chargeant la page impression.aspx avec chacune des paramètres différents.
J'ai fait une ébauche avec un script javascript sur le bouton appelant, mais je ne parviens pas à récupérer le numéro du bon sélectionné dans la datagrid d'origine.

Merci de ton interêt,
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
27 avril 2005 à 14:49
re,

si tu te bases sur une id de base de données tu peux utiliser Datakeys dans ta
datagrid et la passer en paramètre à ta page.

ou si tu as déjà l'id

tu mets un itemtemplate avec
[impression.aspx?doc=BonCommande&numBon=

<%#Convert.ToString(DataBinder.Eval(Container.DataItem,
imprimer bon]

ou si tu passes par un javascript
[# );">print both documents]

et maFonctionJavascript(iId) recoit l'id et fait 2 window.open.

<%# Convert.ToString(DataBinder.Eval(Container.DataItem,"Id")) %>
yopyop
0
satanik_mike Messages postés 28 Date d'inscription mercredi 6 juin 2001 Statut Membre Dernière intervention 3 mars 2009
27 avril 2005 à 14:57
Merci,

Ca correspond plus à ce que je recherche. Je fais l'essai et je te tiens au courant de ce que ca donne.

Merci encore de m'avoir accordé du temps.
0
Rejoignez-nous