Jak namnožit potřebné množství cenovek v sestavě

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

geniusz
nováček
Příspěvky: 18
Registrován: březen 13
Pohlaví: Muž
Stav:
Offline

Jak namnožit potřebné množství cenovek v sestavě

Příspěvekod geniusz » 17 led 2016 21:53

Dobrý večer,
Potřebuji namnožit potřebné množství cenovek v sestavě podle pole [Mnozstvi] v tabulce [tblRozpisNakupu] a filtrované polem [IdNakupu].
Mám formulář [frmNakupy], v něm eviduji fakturační údaje a podformulář [frmRozpisNakupu], kde eviduji nakoupené zboží, které se ukládá do [tblRozpisNakupu]. Táto tabulka má pole [Id], [IdNakupu], [NazevZbozi], [KodPLU], [Cena] a [Mnozstvi].
Na hlavním formuláři chci mít tlačítko [cmdTiskCenovek], po jehož stisku by se každý řádek namnožil podle množství cyklem For 1 To [Mnozstvi] a uložil do připravené prázdné tabulky [tblTMPCenovky].
Následně už klasicky: DoCmd.OpenReport "tiskCenovek", acViewPreview, , , acWindowNormal nebo acViewNormal.
Trochu už toho sice o VBA vím, ale „ RecordSet“ mi moc ještě nejde. Nějak mi nejde pochopit, kde se v něm co skrývá, kde bych měl vložit ten cyklus a kdy vložit Insert.
Děkuji za odpověď.

Reklama
geniusz
nováček
Příspěvky: 18
Registrován: březen 13
Pohlaví: Muž
Stav:
Offline

Re: Jak namnožit potřebné množství cenovek v sestavě

Příspěvekod geniusz » 09 kvě 2016 21:59

Jelikož nikdo neodpověděl, tak jsem zkoušel sám, až něco začalo fungovat.
Neurazím se a ba naopak uvítám odbornou opravu

  1. Private Sub cmdTiskCenovek_Click()
  2. Dim db As DAO.Database
  3. Dim obj As AccessObject
  4. Dim rstCenovky As DAO.Recordset
  5. Dim strSQL As String
  6. Dim myCreateSQL As String
  7. Dim myInsertSQL As String
  8. Dim intPocetA As Integer
  9. Dim intPocetZ As Integer
  10. Dim varEANKod As Variant
  11. Dim varCenaMOC As Variant
  12. Dim varNazev As Variant
  13.  
  14.         ' Načíst všechny tabulky v databázi
  15.  
  16.   For Each obj In Application.CurrentData.AllTables
  17.         ' Když pomocná tabulka existuje, pokračujeme v kontrole
  18.     If obj.Name = "tblTMP_ProTiskCenovek" Then
  19.         ' je-li pomocná tabulka otevřena
  20.       If obj.IsLoaded Then
  21.         '...zavřeme ji
  22.         DoCmd.Close acTable, "tblTMP_ProTiskCenovek", acSaveNo
  23.        End If
  24.         'Nyní pomocnou tabulku odstraníme.
  25.     DoCmd.DeleteObject acTable, "tblTMP_ProTiskCenovek"
  26.      End If
  27.   Next obj
  28.  ' Když tabulka není, tak ji vytvoříme, včetně potřebných polí.
  29.    myCreateSQL = "CREATE TABLE tblTMP_ProTiskCenovek"
  30.     myCreateSQL = myCreateSQL & " ([KodEAN] Char,"
  31.     myCreateSQL = myCreateSQL & " [CenaMOC]Char,"
  32.     myCreateSQL = myCreateSQL & " [Nazev]Char)"
  33.   DoCmd.RunSQL myCreateSQL
  34.  
  35. ' vytvoříme potřebný SQL dotaz pro nachystaní potřebných záznamů
  36.  
  37.     strSQL = "SELECT ZboziIdProduktu.NazevProduktu AS Nazev, SkladNakupyRozpisy.Mnozstvi AS Mnozstvi, ZboziCenyProduktu.KoncovaCenaMOC AS Cena, ZboziIdProduktu.VlastniKodProduktu AS EanKod"
  38.     strSQL = strSQL & " FROM (ZboziIdProduktu INNER JOIN SkladNakupyRozpisy ON ZboziIdProduktu.Id_Produktu = SkladNakupyRozpisy.Produkt)"
  39.     strSQL = strSQL & " INNER JOIN ZboziCenyProduktu ON ZboziIdProduktu.Id_Produktu = ZboziCenyProduktu.Id_ProduktuProCeny"
  40.     strSQL = strSQL & " WHERE (((SkladNakupyRozpisy.Id_Nakupu)= " & Id_Nakupu & "))"
  41.  
  42.  
  43.   Set db = CurrentDb
  44. ' Vytvoříme sadu záznamů, které budeme tisknout
  45.    Set rstCenovky = db.OpenRecordset(strSQL)
  46.  
  47.       If rstCenovky.EOF Then Exit Sub
  48.       ' Nastavíme na první záznam
  49.        rstCenovky.MoveFirst
  50.       Do Until rstCenovky.EOF
  51.       ' Po jednom vkládáme do pomocné tabulky
  52.        intPocetZ = rstCenovky.Fields("Mnozstvi")
  53.        ' Každý záznam zopakujeme podle počtu položek
  54.          For intPocetA = 1 To intPocetZ
  55.              ' Nachystaní cenovky (řádku v tabulce)
  56.              varEANKod = rstCenovky.Fields("EanKod")
  57.               varCenaMOC = rstCenovky.Fields("Cena")
  58.               varNazev = rstCenovky.Fields("Nazev")
  59.            '  Vytvoření SQL pro vložení nového řádku do tabulky
  60.              myInsertSQL = "INSERT INTO tblTMP_ProTiskCenovek "
  61.               myInsertSQL = myInsertSQL & "( KodEAN, CenaMOC, Nazev) "
  62.               myInsertSQL = myInsertSQL & " VALUES ( '" & varEANKod & "', '" & varCenaMOC & "', '" & varNazev & "')"
  63.            ' Vypnutí upozorňující hlášky na přidáni nového záznamu (neoznámí ale žádnou chybu)
  64.            DoCmd.SetWarnings False
  65.             ' Vložení nového řádku do tabulky
  66.            DoCmd.RunSQL myInsertSQL
  67.            ' Znovu zapnout chybové hlášky
  68.            DoCmd.SetWarnings True
  69.           Next
  70.        ' Přejdeme na další položku a opakujeme násobeni cenovek dalšího zboží  
  71.        rstCenovky.MoveNext
  72.       Loop
  73. ' Zrušíme sadu záznamů
  74.    Set rstCenovky = Nothing
  75.   Set db = Nothing
  76. ' Spustíme připravenou sestavu na datech pomocné tabulky v náhledovém zobrazeni
  77.  DoCmd.OpenReport "sesCenovkyRayFilm0527", acViewPreview, , , acWindowNormal
  78.  
  79. End Sub


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů