Avatar billede jesperthomsen1980 Nybegynder
17. februar 2005 - 18:29 Der er 22 kommentarer og
1 løsning

Hvordan opretter man en faktura?

Hej Eksperter.

Jeg vil gerne have muligheden for at lave en faktura i mit program, men er lidt i tvivl om fremgangsmåden.

Problemet ligger i de varer som skal tilføjes til fakturaen. Hvad gør man ved dem?

Skal man oprette et datagrid hvori man én efter én skal indsætte de forskellige varer, og så i et felt skrive pris og antal, eller skal man lave et almindelig form med Labels, som hvor teksten så blive sat til de varer som bliver tilføjet?

Hvordan gør man i "Reallife"

På forhånd tak

VH Jesper
Avatar billede burningice Nybegynder
17. februar 2005 - 19:26 #1
"hvad jeg vil gøre?... jeg vil" *nynner lidt*

1) Oprette et et sæt af klasser som repræsenterer dine data

  - En vare-klasse som indeholder information om din vare, pris, farve, størrelse, vægt og alt det gejl
  - En ordrelinje-klasse som indeholder et vareobject, antal, tidspunkt m.m.
  - En fakturaklasse som indeholder x ordre-objecter, navn, adresse, m.m. Evt. et kundeobject hvis du har et kunde kartotek.

På din form skal der være være en "ny faktura"-knap som åbner et nyt vindue. I dette vindue har du en nogle textbokse du kan udfylde med information omkring kunden. Disse skal informationer skal gemmes i dit Fakturaobject som oprettes samtidig med at vinduet åbnes.

Nedenunder har du en form før søgemulighed for at søge efter en vare i dit lager, og ved siden af nogle teksboxe til antal, evt. rabat m.m. og en "tilføj"-knap. Når du trykker på den skal der oprettes et ordrelinje-object med de information om varen og antal og det skal tilføjes til faktura-objectet.

Nedunder igen kan du så så have en form for liste, måske et datagid eller en listbox der representærer de ordrelinjer der er i fakturaobjectet. Ud for hver kan der være en rediger og slet-knap.

Til aller sidst skal du have en anuller og udfør knap. Annuller knappen lukker vinduet og sletter faktura-objectet, mens udfør sørger for at gemme det i en form for database eller lign, og skrive en faktura ud til kunden.
Avatar billede jesperthomsen1980 Nybegynder
17. februar 2005 - 19:43 #2
Mange tak for din grundige beskrivelse. Den bekræfter lidt hvordan jeg vil have gjort det!!!
Beklager at jeg ikke har gjort opmærksom på at jeg har lavet min database. Den bestå af mange tabeller, men i forbindelse med faktura skal der bruge fire som udgangspunkt: Ordre, ordrelinie samt varer og kunder.
Det vil sige, at når man kommer på siden "opret faktura" eksempelvis, vil der allerede i ordre tabellen være oprettet en faktura?
Er det sådan man gør, for som du selv nævner, kan man annullere faktura, hvor den så bliver slettet, og det vil give nogle spring i Id'erne mellem de fakturaer der bliver oprettet rigtigt....hvis du forstår?
Selvfølgelig kan dette være ligemeget, men hvis det er en "tosse" der skal benytte systemet, vil dette ikke blive så "pænt" i ordreoversigten...
Håber du vil give en kommentar til dette...
Avatar billede burningice Nybegynder
17. februar 2005 - 20:22 #3
jeg ville nok vente til rent fysisk at oprette ordren i tabellen til når man trykker udfør i programmet.
Avatar billede jesperthomsen1980 Nybegynder
17. februar 2005 - 20:24 #4
Ja det er nok det nemmeste.

Smid du lige et svar - du har fortjent pointene....
Avatar billede burningice Nybegynder
17. februar 2005 - 20:25 #5
:) svar
Avatar billede jesperthomsen1980 Nybegynder
18. februar 2005 - 08:13 #6
Har lige et enkelt spørgsmål mere efter at have læst dit svar:

Er det muligt at tilføje varer til et datagrid uden at de er gemt i databasen, og så på et senere tidspunkt løbe datagrittet igennem, hvor den gemmer dem alle i databasen?

På forhånd tak
Avatar billede burningice Nybegynder
18. februar 2005 - 09:36 #7
ja... lad os sige at du har du faktura-object, og inde i den har du en OrdrelinjeCollection. Det er så den collection du skal binde til dit datagrid.

Dim faktura As Faktura = New Faktura()

Dim ol As Ordrelinje = New Ordrelinje()
ol.Vare = New Vare("Gummestøvler");
ol.Antal = 4;

faktura.Ordrelinjer.Add(ol)

ditDataGrid.DataSource = faktura.Odrelinjer


Når du skal loade en faktura fra databasen skal du have noget kode der genskaber nøjagtig samme objectmodel som du havde da du oprettede fakturaen i første omgang. F.eks:

Dim faktura as Fakura = Faktura.HentFraDatabase(40) //40 er dit fakturanr
ditDataGrid.DataSource = faktura.Ordrelinjer;

Håber du kan se ideen i det.

En anden mulighed er at bruge en O/R-mapper til at gemme og hente fra databasen med.
Avatar billede jesperthomsen1980 Nybegynder
18. februar 2005 - 13:01 #8
Takker -det vil jeg lige prøve - kan være jeg vender tilbage hvis det går helt galt...

Tak for hjælpen
Avatar billede jesperthomsen1980 Nybegynder
18. februar 2005 - 13:43 #9
Hvis du eventuelt ligger inde med et eksempel på ovenstående vil det være helt super.
Tror ikke det kommer til at ligne det jeg umiddelbart har lavet til administration af kunder, leverandører mv...Det er vist lidt en anden fremgangsmåde...
Avatar billede burningice Nybegynder
18. februar 2005 - 14:06 #10
nu ved ikke hvordan din database ser ud, men en fremgangsmåde kunne være (er ikke så stiv i vb.net syntaksen)

public static Faktura HentFraDatabase(int id) {

  OleDbConnection conn = // din connection;
  OleDbCommand command = new OleDbCommand("SELECT * FROM tblFaktura WHERE id = "+ id, conn);
 
  conn.Open();
  OleDbDataReader reader = command.ExecuteReader();
  reader.Read();

  Faktura fakt = new Faktura();
  fakt.Id = id;
  fakt.Kunde = (string)reader["kunde"];
  fakt.Dato = (DateTime)reader["tid"];

  conn.Close();
  command = new OleDbCommand("SELECT id FROM tblOrdreLinjer WHERE orderId = "+ id, conn);
  conn.Open();
  reader = command.ExecuteReader();
 
  while (reader.Read()) {
      fakt.Ordrelinjer.Add(Ordrelinje.HentFraDatabase((int)reader("id"));
  }

  conn.Close();

  return fakt; 
}

håber du ser idéen :)
Avatar billede jesperthomsen1980 Nybegynder
18. februar 2005 - 14:50 #11
Fino - mange tak
Avatar billede jesperthomsen1980 Nybegynder
21. februar 2005 - 15:04 #12
Nu har jeg forgæves forsøgt at lave ovenstående, men kan du sige hvad faktura skal indeholde?

Synes ikke helt jeg kan få det til at spille som jeg gerne vil det! Har du eventuelt noget information du kan henvise til, skal jeg nok selv forsøge at sætte mig ind i det. Sidder her med en VB .net bog, men jeg synes ikke lige den er til så stor hjælp.
Skal faktura ikke være en klasse som indeholde det information man har brug for at genne i forbindelse med en faktura?
Den skal vel også indeholde en form for collection?

På forhånd tak
Avatar billede burningice Nybegynder
21. februar 2005 - 15:21 #13
Selve faktura-klassen indeholder en OrdreLinjeCollection og evt. en kundereference, dato for oprettelse o.lign.

Er det ObjectModellen du ikke kan få lavet, eller er det samspillet med databasen der driller?
Avatar billede jesperthomsen1980 Nybegynder
21. februar 2005 - 15:26 #14
Jeg tror jeg har lavet en faktura klasse, indeholdende en kundereferance samt en collection!

Derefter har jeg lavet en ordrelinieklasse, som indeholder fakturaId, VareId, antal, Stykpris.

Når jeg så benytter disse, og tiløjer (add'er) ordrevarelinier til mit fakturaobjekt, virker det fint, men jeg kan ikke tilfæje fakturaen til mit datagrid...
Avatar billede jesperthomsen1980 Nybegynder
21. februar 2005 - 15:27 #15
Jeg har ikke forsøgt med databasen endnu, da jeg ikke tror det er problemet. Hvis jeg først kan få ordrevarelinierne vist i mit datagrid, tror jeg godt jeg kan finde ud af at løbe fakturaen igennem, og så der opdatere min database.
Avatar billede jesperthomsen1980 Nybegynder
21. februar 2005 - 17:37 #16
Public Class Faktura

    Dim kundeId As Integer
    Dim fakturacollection As New Collection

    Public Sub add(ByVal Ordre As Ordrelinie)
        fakturacollection.Add(Ordre)
    End Sub


End Class
Avatar billede jesperthomsen1980 Nybegynder
21. februar 2005 - 17:37 #17
Er dette helt galt?
Avatar billede burningice Nybegynder
21. februar 2005 - 21:28 #18
jeg ville nok lave det sådan her:

*roder med vb*... hmm, nej... det vil vist ikke som jeg vil... laver det lige i c#
Avatar billede jesperthomsen1980 Nybegynder
21. februar 2005 - 21:34 #19
Du skal ikke bruge mere tid på det, da jeg synes du har hjulpet mig mere en rigeligt...

Jeg vil prøve at lede videre, da jeg ikke regner med det er så indviklet som jeg lige gør det til...
Avatar billede burningice Nybegynder
21. februar 2005 - 21:43 #20
Form1:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace _592013
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.DataGrid dataGrid1;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.dataGrid1 = new System.Windows.Forms.DataGrid();
            ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
            this.SuspendLayout();
            //
            // dataGrid1
            //
            this.dataGrid1.DataMember = "";
            this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
            this.dataGrid1.Location = new System.Drawing.Point(64, 64);
            this.dataGrid1.Name = "dataGrid1";
            this.dataGrid1.Size = new System.Drawing.Size(424, 232);
            this.dataGrid1.TabIndex = 0;
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(616, 357);
            this.Controls.Add(this.dataGrid1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
            this.ResumeLayout(false);

        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
            Faktura fakt = new Faktura();

            fakt.Ordrelinjer.Add(new Ordrelinje(1234, "Tandpasta", 10, 10));
            fakt.Ordrelinjer.Add(new Ordrelinje(122214, "Badebold", 2, 50));
            fakt.Ordrelinjer.Add(new Ordrelinje(1453, "Lys", 2, 100));

            this.dataGrid1.DataSource = fakt.Ordrelinjer;
        }
    }
}

Faktura:

using System;

namespace _592013
{
    /// <summary>
    /// Summary description for Faktura.
    /// </summary>
    public class Faktura
    {
        private OrdrelinjeCollection olColl;
        public OrdrelinjeCollection Ordrelinjer
        {
            get { return this.olColl; }
        }

        private int kundeId;
        public int KundeId
        {
            get { return this.kundeId; }
            set { this.kundeId = value; }
        }

        public Faktura()
        {
            this.olColl = new OrdrelinjeCollection(this);
        }
    }
}

Ordrelinje:

using System;

namespace _592013
{
    /// <summary>
    /// Summary description for Ordrelinje.
    /// </summary>
    public class Ordrelinje
    {
        private string vareNavn;
        public string Navn
        {
            get { return this.vareNavn; }
            set { this.vareNavn = value; }
        }

        private int vareId;
        public int Id
        {
            get { return this.vareId; }
            set { this.vareId = value; }
        }

        private int antal;
        public int Antal
        {
            get { return this.antal; }
            set { this.antal = value; }
        }

        private decimal varePris;
        public decimal Pris
        {
            get { return this.varePris; }
            set { this.varePris = value; }
        }

        public Ordrelinje()
        {
           
        }

        public Ordrelinje(int id, string navn, int antal, decimal pris)
        {
            this.vareId = id;
            this.vareNavn = navn;
            this.antal = antal;
            this.varePris = pris;
        }
    }
}

OrdrelinjeCollection:

using System;
using System.Collections;

namespace _592013
{
    /// <summary>
    /// Summary description for OrdrelinjeCollection.
    /// </summary>
    public class OrdrelinjeCollection : System.Collections.CollectionBase
    {
        private Faktura faktura;
        public Faktura Faktura
        {
            get { return this.faktura; }
        }

        public OrdrelinjeCollection(Faktura faktura)
        {
            this.faktura = faktura;
        }

        public void Add(Ordrelinje ol)
        {
            this.InnerList.Add(ol);
        }

        public Ordrelinje this[int index]
        {
            get { return (Ordrelinje)this.InnerList[index]; }
        }

        public void Remove(Ordrelinje ol)
        {
            this.InnerList.Remove(ol);
        }
    }
}
Avatar billede jesperthomsen1980 Nybegynder
21. februar 2005 - 21:48 #21
Endnu engang tak - Det vil jeg lige kigge meget mere på...

Takker
Avatar billede jesperthomsen1980 Nybegynder
22. februar 2005 - 15:52 #22
Hej igen - har kigget dit eksempel igennem, og der er nogle konkrete ting jeg ikke helt er med på oversættelsen af, selvom jeg dog har fået det meste af overstående eksempel lavet om til Vb.net. Jeg opretter det som et nyt spørgsmål, da jeg ikke synes du skal bruge mere tid på det.
Ville bare lige skrive, så du ikke skulle tro det var din besvarelse det var galt med. Tværtimod

VH Jesper
Avatar billede jesperthomsen1980 Nybegynder
22. februar 2005 - 16:05 #23
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester