Ok, prije svega hvala Vam sto ste se ukljucili da mi pomognete... Prvu verziju programa sam prebacio sefu i on je zadovoljan, jer radi ono sto treba, medjutim sada bi trebalo ove stvari srediti da ne bude onako kako sam ja to pokrpio..
Prije svega kod aplikacije koja nije isporucena sefu i koju zelim da sredim... Potrudio sam da sto bolje dokumentujem i objasnim dijelove koda.
Code:
Public Class Form1
Dim materijalkg As Double
Dim KMmaterijal As Double
Dim KMukupno As Double
Dim sjec As Double
Dim brus As Double
Dim kon As Double
Dim var As Double
Dim eroz As Double
Dim pak As Double
Dim glodvm10 As Double
Dim glodvm42 As Double
Dim glodvm84 As Double
Dim glodborv As Double
Dim glodhele As Double
Dim glod5osn As Double
Dim termobr As Double
Dim brun As Double
Dim cin As Double
Dim farb As Double
Dim strhur As Double
Dim strmon As Double
Dim ost As Double
Dim mRow As Integer = 0
Dim newpage As Boolean = True
Dim pi As Double
Dim prec As Double
Dim h As Double
Dim zap As Double
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'DatabaseDataSet2.lista' table. You can move, or remove it, as needed.
Me.ListaTableAdapter.Fill(Me.DatabaseDataSet2.lista)
ListaBindingSource.AddNew() ' Ovaj dio koda automatski nakon startanja programa omogucuje unos nove pozicije
End Sub
Private Sub ZatvoriProgramToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ZatvoriProgramToolStripMenuItem.Click
End ' Klikom na opciju #Zatvori program, u meniju program se zatvara
End Sub
Private Sub btnKalkulacija_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnKalkulacija.Click
' Kod koji izracunava ukupnu tezinu i cijenu neobradjenog materijala pozicije
If valjak.Checked = True And listamaterijala.Text = "Plastika" Then
' Ako se radi o valjkastoj poziciji, nakon cekiranja polja ispred rubrika za precnik i visinu, program ce koristiti sljedecu formulu ukoliko je iz liste materijala odabrana #Plastika
pi = 3.14
h = visina.Text
prec = precnik.Text
zap = ((prec * prec) * pi / 4) * h
' Ovaj dio koda ce zapreminu pomnoziti sa specificnom gustocom #Plastike, sa cime dobijamo ukupnu tezinu potrebnog sirovog materijala za izradu pozicije. Nakon toga potrebni materijal mnozi sa cijenom #Plastike po kg
materijalkg = zap * 0.0000014
KMmaterijal = materijalkg * 12
' Dobijeni rezultati se prikazuju u poljima #Ukupno materijala (kg) i #Ukupna cijena materijala (EUR)
ukmatkg.Text = materijalkg
cijenamaterijala.Text = KMmaterijal
ElseIf valjak.Checked = False And listamaterijala.Text = "Plastika" Then
' Ako se ne radi o valjkastim pozicijama tada se u rubrike #Visina, #Sirina i #Duzina upisuju dimenzije pozicije, a u rubrike #Precnik i #Visina se ne upisuje nista i ne cekira se polje ispred tih rubrika, kako bi ih program izostavio iz obracuna
materijalkg = (dimenzije1.Text * dimenzije2.Text * dimenzije3.Text) * 0.0000014 ' Formula za ukupnu kilazu potrebnog materijala
ukmatkg.Text = materijalkg 'Prikazivanje ukupno potrebnog materijala u polju #Ukupno materijala (kg)
' Kod koji ce potrebni materijal pomnoziti sa cijenom materijala po kg i prikazati u polju #Cijena materijala (EUR)
KMmaterijal = materijalkg * 12
cijenamaterijala.Text = KMmaterijal
End If
If valjak.Checked = True And listamaterijala.Text = "ST-37/52 željezo" Then
' Ako se radi o valjkastoj poziciji, nakon cekiranja polja ispred rubrika za precnik i visinu, program ce koristiti sljedecu formulu ukoliko je iz liste materijala odabrana #ST-37/52 željezo
pi = 3.14
h = visina.Text
prec = precnik.Text
zap = ((prec * prec) * pi / 4) * h
' Ovaj dio koda ce zapreminu pomnoziti sa specificnom gustocom #Zeljeza, sa cime dobijamo ukupnu tezinu potrebnog sirovog materijala za izradu pozicije. Nakon toga potrebni materijal mnozi sa cijenom #ST-37/52 željezo po kg
materijalkg = zap * 0.00000787
KMmaterijal = materijalkg * 1
' Dobijeni rezultati se prikazuju u poljima #Ukupno materijala (kg) i #Ukupna cijena materijala (EUR)
ukmatkg.Text = materijalkg
cijenamaterijala.Text = KMmaterijal
ElseIf valjak.Checked = False And listamaterijala.Text = "ST-37/52 željezo" Then
' Ako se ne radi o valjkastim pozicijama tada se u rubrike #Visina, #Sirina i #Duzina upisuju dimenzije pozicije, a u rubrike #Precnik i #Visina se ne upisuje nista i ne cekira se polje ispred tih rubrika, kako bi ih program izostavio iz obracuna
materijalkg = (dimenzije1.Text * dimenzije2.Text * dimenzije3.Text) * 0.00000787 ' Formula za ukupnu kilazu potrebnog materijala
ukmatkg.Text = materijalkg 'Prikazivanje ukupno potrebnog materijala u polju #Ukupno materijala (kg)
' Kod koji ce potrebni materijal pomnoziti sa cijenom materijala po kg i prikazati u polju #Cijena materijala (EUR)
KMmaterijal = materijalkg * 1
cijenamaterijala.Text = KMmaterijal
End If
If valjak.Checked = True And listamaterijala.Text = "16 Mn CR5 željezo" Then
' Ako se radi o valjkastoj poziciji, nakon cekiranja polja ispred rubrika za precnik i visinu, program ce koristiti sljedecu formulu ukoliko je iz liste materijala odabrana #16 Mn CR5 željezo
pi = 3.14
h = visina.Text
prec = precnik.Text
zap = ((prec * prec) * pi / 4) * h
' Ovaj dio koda ce zapreminu pomnoziti sa specificnom gustocom #Zeljeza, sa cime dobijamo ukupnu tezinu potrebnog sirovog materijala za izradu pozicije. Nakon toga potrebni materijal mnozi sa cijenom #16 Mn CR5 željezo po kg
materijalkg = zap * 0.00000787
KMmaterijal = materijalkg * 3
' Dobijeni rezultati se prikazuju u poljima #Ukupno materijala (kg) i #Ukupna cijena materijala (EUR)
ukmatkg.Text = materijalkg
cijenamaterijala.Text = KMmaterijal
ElseIf valjak.Checked = False And listamaterijala.Text = "16 Mn CR5 željezo" Then
' Ako se ne radi o valjkastim pozicijama tada se u rubrike #Visina, #Sirina i #Duzina upisuju dimenzije pozicije, a u rubrike #Precnik i #Visina se ne upisuje nista i ne cekira se polje ispred tih rubrika, kako bi ih program izostavio iz obracuna
materijalkg = (dimenzije1.Text * dimenzije2.Text * dimenzije3.Text) * 0.00000787 ' Formula za ukupnu kilazu potrebnog materijala
ukmatkg.Text = materijalkg 'Prikazivanje ukupno potrebnog materijala u polju #Ukupno materijala (kg)
' Kod koji ce potrebni materijal pomnoziti sa cijenom materijala po kg i prikazati u polju #Cijena materijala (EUR)
KMmaterijal = materijalkg * 3
cijenamaterijala.Text = KMmaterijal
End If
If valjak.Checked = True And listamaterijala.Text = "Aluminij" Then
' Ako se radi o valjkastoj poziciji, nakon cekiranja polja ispred rubrika za precnik i visinu, program ce koristiti sljedecu formulu ukoliko je iz liste materijala odabrana #Aluminij
pi = 3.14
h = visina.Text
prec = precnik.Text
zap = ((prec * prec) * pi / 4) * h
' Ovaj dio koda ce zapreminu pomnoziti sa specificnom gustocom #Aluminija, sa cime dobijamo ukupnu tezinu potrebnog sirovog materijala za izradu pozicije. Nakon toga potrebni materijal mnozi sa cijenom #Aluminij po kg
materijalkg = zap * 0.0000027
KMmaterijal = materijalkg * 6
' Dobijeni rezultati se prikazuju u poljima #Ukupno materijala (kg) i #Ukupna cijena materijala (EUR)
ukmatkg.Text = materijalkg
cijenamaterijala.Text = KMmaterijal
ElseIf valjak.Checked = False And listamaterijala.Text = "Aluminij" Then
' Ako se ne radi o valjkastim pozicijama tada se u rubrike #Visina, #Sirina i #Duzina upisuju dimenzije pozicije, a u rubrike #Precnik i #Visina se ne upisuje nista i ne cekira se polje ispred tih rubrika, kako bi ih program izostavio iz obracuna
materijalkg = (dimenzije1.Text * dimenzije2.Text * dimenzije3.Text) * 0.0000027 ' Formula za ukupnu kilazu potrebnog materijala
ukmatkg.Text = materijalkg 'Prikazivanje ukupno potrebnog materijala u polju #Ukupno materijala (kg)
' Kod koji ce potrebni materijal pomnoziti sa cijenom materijala po kg i prikazati u polju #Cijena materijala (EUR)
KMmaterijal = materijalkg * 6
cijenamaterijala.Text = KMmaterijal
' Kraj koda koji izracunava ukupnu tezinu i cijenu neobradjenog materijala pozicije
End If
' Pocetak koda koji prazna polja definise kao 0 vrijednost
If sjecenje.Text = "" Then
sjecenje.Text = "0"
End If
If glodanjevm10.Text = "" Then
glodanjevm10.Text = "0"
End If
If glodanjevm42.Text = "" Then
glodanjevm42.Text = "0"
End If
If glodanjevm84.Text = "" Then
glodanjevm84.Text = "0"
End If
If glodanjeborver.Text = "" Then
glodanjeborver.Text = "0"
End If
If glodanje5osne.Text = "" Then
glodanje5osne.Text = "0"
End If
If glodanjeheler.Text = "" Then
glodanjeheler.Text = "0"
End If
If struganjehurco.Text = "" Then
struganjehurco.Text = "0"
End If
If struganjemonfors.Text = "" Then
struganjemonfors.Text = "0"
End If
If varenje.Text = "" Then
varenje.Text = "0"
End If
If erozimat.Text = "" Then
erozimat.Text = "0"
End If
If brusenje.Text = "" Then
brusenje.Text = "0"
End If
If termobrada.Text = "" Then
termobrada.Text = "0"
End If
If brunir.Text = "" Then
brunir.Text = "0"
End If
If cink.Text = "" Then
cink.Text = "0"
End If
If farbanje.Text = "" Then
farbanje.Text = "0"
End If
If kontrola.Text = "" Then
kontrola.Text = "0"
End If
If pakiranje.Text = "" Then
pakiranje.Text = "0"
End If
If ostalo.Text = "" Then
ostalo.Text = "0"
End If
' Kraj koda koji prazna polja definise kao 0 vrijednost
' Pocetak koda koji uracunava rad u ukupnu cijenu pozicije
sjec = sjecenje.Text * 0.25
brus = brusenje.Text * 1
kon = kontrola.Text * 0.33
var = varenje.Text * 0.5
eroz = erozimat.Text * 0.41
pak = pakiranje.Text * 0.25
glodvm10 = glodanjevm10.Text * 0.41
glodvm42 = glodanjevm42.Text * 0.83
glodvm84 = glodanjevm84.Text * 0.66
glodborv = glodanjeborver.Text * 1
glodhele = glodanjeheler.Text * 1
glod5osn = glodanje5osne.Text * 0.5
strhur = struganjehurco.Text * 0.41
strmon = struganjemonfors.Text * 0.5
termobr = termobrada.Text * 4
brun = brunir.Text * 1.5
cin = cink.Text * 0.8
farb = farbanje.Text * 1.5
ost = ostalo.Text
KMukupno = KMmaterijal + sjec + brus + kon + var + eroz + pak + ost + glodvm10 + glodvm42 + glodvm84 + glodborv + glodhele + glod5osn + strhur + strmon + termobr + brun + cin + farb
ukupnacijena.Text = KMukupno
' Kraj koda koji uracunava rad u ukupnu cijenu pozicije
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Dodavanje pozicije u listu i priprema za unos nove pozicije
ListaBindingSource.AddNew()
dimenzije1.Text = "0"
dimenzije2.Text = "0"
dimenzije3.Text = "0"
precnik.Text = "0"
visina.Text = "0"
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
ListaBindingSource.RemoveCurrent() ' Brisanje odabrane pozicije iz liste
End Sub
Private Sub OProgramuToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OProgramuToolStripMenuItem.Click
Form2.Show() ' Odabirom iz menija opcije #O programu, prilazuje se Form-a 2
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
' Pocetak koda koji vrsi stampanje podataka prikazanih u datagridu
'Formatiranje datagrida
With DataGridView1
Dim fmt As StringFormat = New StringFormat(StringFormatFlags.LineLimit)
fmt.LineAlignment = StringAlignment.Center
fmt.Trimming = StringTrimming.EllipsisCharacter
'Format Headera
Dim prFont As New Font("Verdana", 22, GraphicsUnit.Point)
Dim siFont As New Font("Verdana", 9, GraphicsUnit.Point)
Dim hdrFont As New Font("Verdana", 10, FontStyle.Bold)
Dim y As Single = e.MarginBounds.Top
Dim strInfo As String
'uslovna promenjiva
If PrintDocument1.DefaultPageSettings.Landscape Then
strInfo = "Kupac: " & kupaclista.Text & " // Datum dolaska upita: " & DateTimePicker1.Text & " // Broj upita: " & brojupita.Text ' Podaci koji se povlace u header dokumenta
e.Graphics.DrawString(vbTab & "" & "", prFont, Brushes.Black, 60, 40)
e.Graphics.DrawString(strInfo, siFont, Brushes.Black, 110, 80)
PrintPreviewDialog1.Document = PrintDocument1
PrintDocument1.DefaultPageSettings.Margins.Left = 20
PrintDocument1.DefaultPageSettings.Margins.Right = 20
PrintDocument1.DefaultPageSettings.Margins.Top = 40
PrintDocument1.DefaultPageSettings.Margins.Bottom = 20
y = 120
ElseIf PrintDocument1.DefaultPageSettings.Landscape = False Then ' Ukoliko nije u opcijama podesen Landscape, prikazuje se poruka
Dim titleP = "Prekid štampanja"
MsgBox("Ovaj prozor se pojavljuje u slučaju da niste u opcijama čekirali 'Landscape'. U lijevom dijelu ekrana zaustavite štampanje klikom na 'Cancel', a zatim u ovom prozoru potvrdite klikom na 'OK'. Prilikom novog pokušaja štampanja potrebno je da u opcijama čekirate 'Landscape'.", , titleP)
End If
'format hedera datagrida
Do While mRow < .RowCount
Dim row As DataGridViewRow = .Rows(mRow)
Dim x As Single = e.MarginBounds.Left
Dim h As Single = 0
For Each cell As DataGridViewCell In row.Cells
Dim rc As RectangleF = New RectangleF(x, y, cell.Size.Width, cell.Size.Height)
'Format pravougaonika
e.Graphics.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width, rc.Height)
If (newpage) Then
'Format headera
e.Graphics.DrawString(DataGridView1.Columns(cell.ColumnIndex).HeaderText, .Font, Brushes.Red, rc, fmt)
Else
'Format Tabele
e.Graphics.DrawString(DataGridView1.Rows(cell.RowIndex).Cells(cell.ColumnIndex).FormattedValue.ToString(), .Font, Brushes.Blue, rc, fmt)
End If
'Brojanje redova
x += rc.Width
h = Math.Max(h, rc.Height)
Next
newpage = False
y += h
mRow += 1
If y + h > e.MarginBounds.Bottom Then
e.HasMorePages = True
mRow -= 1
newpage = True
Exit Sub
End If
Loop
mRow = 0
End With
End Sub ' Kraj koda koji vrsi stampanje podataka prikazanih u datagridu
Private Sub ŠtampanjeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ŠtampanjeToolStripMenuItem.Click
' Opcija za stampanje dokumenta, koja se nalazi u meniju
mRow = 0
newpage = True
DataGridView1.Update()
PrintPreviewDialog1.Update()
PrintDocument1.DefaultPageSettings.Landscape = True
PrintDialog1.Document = PrintDocument1
PrintDialog1.ShowDialog()
PrintDocument1.Print()
End Sub
Private Sub NovaListaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NovaListaToolStripMenuItem.Click
' Pokretanje novog upita, opcija smjestena u meniju
' Prikaz sigurnosne poruke
Dim title = "Otvaranje novog upita"
Dim msg = "Dali želite otvoriti novi upit? Nakon otvaranja novog upita nećete biti u mogućnosti izvršiti naknadno štampanje trenutnog upita!"
Dim style = MsgBoxStyle.YesNo Or MsgBoxStyle.DefaultButton2 Or _
MsgBoxStyle.Question
Dim response = MsgBox(msg, style, title)
If response = MsgBoxResult.Yes Then ' Nastavak pokretanja novog upita poslije potvrde
DatabaseDataSet2.Clear()
kupaclista.Text = ""
brojupita.Text = ""
DateTimePicker1.Text = ""
dimenzije1.Text = "0"
dimenzije2.Text = "0"
dimenzije3.Text = "0"
precnik.Text = "0"
visina.Text = "0"
ListaBindingSource.AddNew()
Else
MsgBox("Uspješno ste odustali od otvaranja novog upita.", , title) ' Prikaz poruke u slucaju odbijanja potvrde
End If
End Sub
Private Sub PregledPrijeŠtampanjaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PregledPrijeŠtampanjaToolStripMenuItem.Click
' Pregled dokumenta prije stampanja
mRow = 0
newpage = True
PrintPreviewDialog1.Document = PrintDocument1
DataGridView1.Update()
PrintPreviewDialog1.Update()
PrintDocument1.DefaultPageSettings.Landscape = True
PrintPreviewDialog1.ShowDialog()
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
' Vracanje na prethodnu poziciju
ListaBindingSource.MovePrevious()
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
' Prelazak na sljedecu poziciju
ListaBindingSource.MoveNext()
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
' Vracanje na prvu poziciju
ListaBindingSource.MoveFirst()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' Prelazak na zadnju poziciju
ListaBindingSource.MoveLast()
End Sub
End Class
Evo kako to izgleda.
Dakle ovdje nisam ubacio kod koji ce odmah krenuti upisivati rezultat u drugi red kako bi prvi propustio, i sada u stampi nema prvog rezultata. Takodje ovdje kolone nisu pisane skraceno i suzavano kako bi sve stalo na jedan A4 list (zelim da u programu izgleda ovako, a na listu papira da bude prilagodjeno i nazivi upisani skraceno).
Sav kod sam licno napisao osim dijela za printanje, zato ne mogu da ga pohvatam i uredim...
Problem je kada recimo otvorim opciju print i zelim odustati od printanja, kliknem na cancel, ali ono opet odstampa, jedino ce stampanje zaustaviti ako podeim da nije landscape.
Od opcije save sam odusta, nije potrebna, jedino je ostalo ovo printanje, trebao bi ove kolone da pikazem uvijek isto, (sada prilikom prvog printa sve ode udesno, dok kod ostalih pokusaja bude centrirano na sredini lista).
Kada su u pitanju ovi reporti, nasao sam ovo:
https://www.youtube.com/watch?v=l1k37cfdd8w
Medjutim kada skinem dodatak sa microsoftove stranice i instaliram, u opcijama za dodavanje dodataka udjem chose items.. ali aga tu nema i ne mogu da pokusam napraviti kao u videu jer nemam te opcije....
sada cu procitati sta sam sve naveo pa ako budem sta izostavio javicu :) hehe tesko je sve objasniti ali mislim da sam uspjeo...