Anda di halaman 1dari 66

FINAL PROJECT DOCUMENT

MATA KULIAH DASAR PEMROGRAMAN

GROSIR SAMARINDA

OLEH:
VIANY RAMADHANY
2018.2010.0107
REGULER D

PROGRAM STUDI SISTEM INFORMASI


STMIK SENTRA PENDIDIKAN BISNIS
2018
KATA PENGANTAR

Dengan menyebut nama Allah SWT yang Maha Pengasih lagi Maha
Panyayang, Kami panjatkan puja dan puji syukur atas kehadirat-Nya, yang
telah melimpahkan rahmat, hidayah, dan inayah-Nya kepada saya, sehingga
saya dapat menyelesaikan laporan tentang program penitipan barang ini
Laporan ini telah saya susun dengan maksimal dan mendapatkan
bantuan dari berbagai pihak sehingga dapat memperlancar pembuatan
makalah ini. Untuk itu saya menyampaikan banyak terima kasih kepada
semua pihak yang telah berkontribusi dalam pembuatan laporan ini.
Terlepas dari semua itu, Saya menyadari sepenuhnya bahwa masih
ada kekurangan baik dari segi susunan kalimat maupun tata bahasanya. Oleh
karena itu dengan tangan terbuka saya menerima segala saran dan kritik dari
pembaca agar saya dapat memperbaiki laporan ini.
Akhir kata saya berharap semoga laporan tentang program penitipan
barang ini dapat memberikan manfaat maupun inpirasi terhadap pembaca.

i
DAFTAR ISI

Bab 1 : Pendahuluan ............................................ 1


A. Latar Belakang ...................................................................... 1
B. Tujuan ................................................................................. 1
C. Manfaat ............................................................................... 1
D. Ruang Lingkup ....................................................................... 1
E. Metode Penelitian ................................................................. 1
F. Perangkat Yang Digunakan ...................................................... 2

Bab 2 : Dokumentasi Teknis ................................... 3


A. Gambaran Teknis ............................................................. 3
B. Database Yang Digunakan ................................................ 3
C. Dokumentasi Program ..................................................... 4

Bab 3 : Hasil Program .............................................. 54


A. Menu Utama ................................................................. 54
B. Entry Data ..................................................................... 56
C. Laporan ......................................................................... 61

ii
BAB I
PENDAHULUAN

A. Latar Belakang
Latar belakang saya membuat program ini adalah karena ketika
saya pergi ke sebuah grosir untuk membeli barang. Mereka masih
menggunakan kertas untuk mencatat persediaan barang pada tempat
tersebut.

B. Tujuan
Tujuan saya membuat program ini adalah untuk memudahkan
karyawan pada tempat tersebut untuk melakukan pendataan stock dan
yang lainnya.

C. Manfaat
Manfaat dari program ini adalah untuk memudahkan karyawan
untuk melakukan pendataan barang yang telah masuk dan keluar

D. Ruang Lingkup
Ruang lingkup dari program ini digunakan untuk Administrasi
pencatatan penjualan, pencatatan barang masuk dan keluar, pencatatan
barang yang rusak dan sebagainya.

E. Metode Penelitian
Metode penelitian yang saya gunakan adalah metode observasi,
saya melakukan penelitian secara langsung di grosir yang biasa saya
kunjungi

1
2

F. Perangkat Yang Digunakan


Laptop Acer Aspire E1-451g, memiliki Processor AMD A8, RAM 4
GB, Harddisk 500 GB, Graphics AMD Radeon HD7640G + HD8600M.
Aplikasi yang digunakan adalah Python, Xampp, dan HeidiSQL.
BAB II
DOKUMENTASI TEKNIS

A. Gambaran Proses
1. Membuat Database
2. Mengisi Field dan data yang diperlukan
3. Melakukan pembuatan kode / script untuk membuat program
4. Mencoba program
5. Ketika terjadi kesalahan, perbaiki hingga benar

B. Database Yang Digunakan


 keluar : terdiri dari “tr_keluar”, ”nota_keluar”, ”tgl_keluar”,
”kode_barang”, ”jumlah”, ”harga_jual”, dan ”total_jual”. Berguna
untuk mendata barang yang telah dijual.
 masuk : terdiri dari “tr_masuk”, ”nota_masuk”, ”tgl_masuk”,
”kode_barang” ,”jumlah”, ”harga_beli, dan ”total_beli”. Beguna
untuk mendata persediaan barang yang telah masuk.
 rusak : terdiri dari “tr_rusak”, “ba_rusak”, “tgl_rusak”,
“kode_barang”, “jumlah”, “harga_barang”, dan “total_rusak”.
Berguna untuk mendata barang yang rusak.
 stock : terdiri dari “kode_barang”, “nama_barang”, “satuan”,
“jumlah”, “harga_satuan”, dan “profit_persen”. Berguna untuk
mendata persediaan barang.

3
4

C. Dokumentasi Program

from tkinter import *

from tkinter import messagebox

from isidatastock import *

from pembelian import *

from penjualan import *

from rusak import *

from stockdisplay import *

from omset import *

from laporan import *

from invsplash import *

def aksi():

messagebox.showinfo(title="Program",message="Programnya belum ada!")

def baru():

root = Tk()

EntryStock(root,":: Isi Data Stock ::")

root.mainloop()

def tampil():

root = tkinter.Tk()

TampilStock(root, ":: Daftar Barang di Stock ::")

root.mainloop()
5

def omset():

root = tkinter.Tk()

omsetjual(root, ":: Pengubah Omset Penjualan ::")

root.mainloop()

def pembelian():

root = Tk()

EntryPembelian(root,":: Transaksi Pembelian Barang ::")

root.mainloop()

def penjualan():

root = Tk()

EntryPenjualan(root,":: Transaksi Penjualan Barang ::")

root.mainloop()

def rusak():

root = Tk()

EntryRusak(root,":: Kerusakan Barang ::")

root.mainloop()

def logo():

root = Tk()

root.overrideredirect(True)

app = SplashScreen(root)
6

root.after(2000, root.destroy)

root.mainloop()

def menu_utama():

root = Tk()

root.title("GROSIR SAMARINDA")

root.geometry('900x500')

root.resizable(False,False)

gambar = PhotoImage(file='D:\DasPro\Project\inv_org\inv_mart\wall2.png')

w1 = Label(root,image=gambar).pack(side='top')

menubar = Menu(root)

file = Menu(menubar,tearoff=0)

menubar.add_cascade(label="File",menu=file)

file.add_command(label="Transaksi Pembelian Barang",command=pembelian)

file.add_command(label="Transaksi Penjualan Barang",command=penjualan)

file.add_command(label="Input Barang Rusak",command=rusak)

file.add_separator()

tstock = Menu(file,tearoff=0)

file.add_cascade(label="Master Data Stock",menu=tstock)

tstock.add_command(label="Isi Data Stock",command=baru)

tstock.add_command(label="Lihat Data Stock",command=tampil)

tstock.add_command(label="Ubah Persentase Profit",command=omset)

file.add_separator()
7

file.add_command(label="Keluar",command=root.destroy)

laporan = Menu(menubar,tearoff=0)

menubar.add_cascade(label="Laporan",menu=laporan)

laporan.add_command(label="Laporan Stock",command=lap_stock)

laporan.add_separator()

laporan.add_command(label="Laporan Pembelian Barang",command=lap_beli)

laporan.add_command(label="Laporan Penjualan Barang",command=lap_jual)

laporan.add_command(label="Laporan Barang Rusak",command=lap_rusak)

laporan.add_separator()

laporan.add_command(label="Laporan Keuntungan Penjualan",command=lap_profit)

root.config(menu=menubar)

root.mainloop()

logo()

menu_utama()
8

from tkinter import *

from PIL import Image, ImageTk

class SplashScreen:

def __init__(self, parent):

self.parent = parent

self.aturSplash()

self.aturWindow()

def aturSplash(self):

self.gambar = Image.open('LOGO2.png')

self.imgSplash = ImageTk.PhotoImage(self.gambar)

def aturWindow(self):

lebar, tinggi = self.gambar.size

setengahLebar = (self.parent.winfo_screenwidth()-lebar)//2

setengahTinggi = (self.parent.winfo_screenheight()-tinggi)//2

self.parent.geometry("%ix%i+%i+%i" %(lebar, tinggi,

setengahLebar,setengahTinggi))

Label(self.parent, image=self.imgSplash).pack()

##root = Tk()

##root.overrideredirect(True)

##app = SplashScreen(root)
9

##root.after(2000, root.destroy)

##root.mainloop()

from tkinter import *

from tkinter import messagebox

from pymysql import *

class EntryStock:

def __init__(self,parent,title):

self.parent = parent

self.parent.title(title)

self.parent.protocol("WM_DELETE_WINDOW",self.keluar)

lebar = 550

tinggi = 290

setTengahX = (self.parent.winfo_screenwidth()-lebar)//2

setTengahY = (self.parent.winfo_screenheight()-tinggi)//2

self.parent.geometry("%ix%i+%i+%i" %(lebar,tinggi,\

setTengahX,setTengahY))

self.parent.resizable(False,False)

self.aturKomponen()
10

def aturKomponen(self):

kodeFrame = Frame(self.parent)

kodeFrame.pack(side=TOP)

mainFrame = Frame(self.parent)

mainFrame.pack(side=TOP)

btnFrame = Frame(self.parent)

btnFrame.pack(side=BOTTOM)

Label(kodeFrame,text=' ').grid(row=0,column=0)

Label(btnFrame,text=' ').grid(row=2,column=0)

Label(kodeFrame,text='Kode Barang').grid(row=1,column=0,padx=2,pady=3,sticky=W)

self.entKode = Entry(kodeFrame,width=38)

self.entKode.grid(row=1,column=1,padx=1)

Label(kodeFrame,text='').grid(row=1,column=2)

self.btnCek = Button(kodeFrame,text='Cek Kode',\

command=self.onCek,width=10)

self.btnCek.grid(row=1,column=3)

Label(mainFrame,text='Nama Barang').grid(row=1,column=0,pady=3,sticky=W)

self.entNama = Entry(mainFrame,width=50)

self.entNama.grid(row=1,column=1)
11

Label(mainFrame,text='Satuan').grid(row=2,column=0,pady=3,sticky=W)

self.entSatuan = Entry(mainFrame,width=50)

self.entSatuan.grid(row=2,column=1)

Label(mainFrame,text='Jumlah').grid(row=3,column=0,pady=3,sticky=W)

self.entJumlah = Entry(mainFrame,width=50)

self.entJumlah.grid(row=3,column=1)

Label(mainFrame,text='Harga Satuan').grid(row=4,column=0,pady=3,sticky=W)

self.entHargaSatuan = Entry(mainFrame,width=50)

self.entHargaSatuan.grid(row=4,column=1)

Label(mainFrame,text='% Profit').grid(row=5,column=0,pady=3,sticky=W)

self.entProfit = Entry(mainFrame,width=50)

self.entProfit.grid(row=5,column=1)

Label(mainFrame,text=' ').grid(row=6,column=0,sticky=W)

self.btnCancel = Button(btnFrame,text='Batal',\

command=self.batal,width=10)

self.btnCancel.grid(row=1,column=1,padx=3)

self.btnSave = Button(btnFrame,text='Simpan',\

command=self.simpan,width=10)
12

self.btnSave.grid(row=1,column=2,padx=3)

self.btnClose = Button(btnFrame,text='Keluar',\

command=self.keluar,width=10)

self.btnClose.grid(row=1,column=3,padx=3)

def keluar(self,event=None):

self.parent.destroy()

def batal(self):

self.entKode.delete(0,END)

self.entNama.delete(0,END)

self.entSatuan.delete(0,END)

self.entJumlah.delete(0,END)

def onCek(self):

con = connect(db='sembako',user='admin',

passwd='admin',host='127.0.0.1',port=3306,autocommit=True)

cur = con.cursor()

cKode = self.entKode.get()

if len(cKode) == 0:

messagebox.showwarning(title="Peringatan",\

message="Kode barang tidak boleh kosong.")

self.entKode.focus_set()

else:
13

sql = "SELECT nama_barang FROM stock WHERE kode_barang = %s"

cur.execute(sql,cKode)

data = cur.fetchall()

pjg = len(data)

if pjg > 0:

curkode = con.cursor()

sqlkode = "SELECT max(kode_barang) FROM stock"

curkode.execute(sqlkode)

maxkode = curkode.fetchone()

messagebox.showwarning(title="Peringatan",\

message="Kode sudah digunakan. Gunakan kode yang lain. "+\

"Kode terakhir yang telah digunakan adalah "+\

str(maxkode[0])+".")

self.entKode.focus_set()

else:

messagebox.showinfo(title="Pemberitahuan",\

message="Kode bisa digunakan")

self.entNama.focus_set()

cur.close()

con.close()

def simpan(self):

con = connect(db='sembako',user='admin',

passwd='admin',host='127.0.0.1',port=3306,autocommit=True)
14

cur = con.cursor()

cKode = self.entKode.get()

cNama = self.entNama.get()

cSatuan = self.entSatuan.get()

nJumlah = int(self.entJumlah.get())

nHarga = int(self.entHargaSatuan.get())

nProfit = int(self.entProfit.get())

sql = "INSERT INTO stock


(kode_barang,nama_barang,satuan,jumlah,harga_satuan,profit_persen) "+\

"VALUES (%s,%s,%s,%s,%s,%s)"

cur.execute(sql,(cKode,cNama,cSatuan,nJumlah,nHarga,nProfit))

cur.close()

con.close()

##root = Tk()

##EntryStock(root,":: Isi Data Stock ::")

##root.mainloop()
15

from reportlab.lib.pagesizes import letter

from reportlab.pdfgen import canvas

from reportlab.lib.colors import pink, black, red, blue, green, gray

from reportlab.platypus import PageBreak

from tkinter import messagebox

from pymysql import *

import datetime

import os

import subprocess

def lap_stock():

con = connect(db="sembako", user="admin",

passwd="admin", host="127.0.0.1", port=3306,autocommit=True)

cur = con.cursor()

cur.execute("SELECT * FROM stock")

data_stock = cur.fetchall()

c = canvas.Canvas("Lap_Stock.pdf", pagesize=letter)

c.setFont("Helvetica-Bold", 12)

c.setFillColor(gray)

c.drawString(72,750,"GROSIR SAMARINDA")

c.drawString(72,735,"LAPORAN STOCK BARANG")

c.setFillColor(blue)

c.drawString(440,750,str(datetime.date.today()))
16

c.setFont("Helvetica-Bold", 10)

c.setFillColor(black)

c.line(72,712,500,712)

c.drawString(72,700,"KODE")

c.drawString(110,700,"NAMA BARANG")

c.drawString(274,700,"SATUAN")

c.drawString(340,700,"JUMLAH")

c.drawString(405,700,"HARGA")

c.drawString(453,700,"%PROFIT")

c.line(72,695,500,695)

c.setFont("Helvetica", 10)

j= 0

t= 0

for i in data_stock:

kode = i[0]

nama = i[1]

satuan = i[2]

jumlah = i[3]

harga = i[4]

profit = i[5]

j+= 1

t+= jumlah

c.drawCentredString(86,695-j*22,kode)

c.drawString(110,695-j*22,nama)

c.drawString(275,695-j*22,satuan)
17

c.drawRightString(370,695-j*22,str(jumlah))

c.drawRightString(442,695-j*22,format(harga,"8,d"))

c.drawRightString(482,695-j*22,str(profit))

c.line(72,701-(j+1)*22,500,701-(j+1)*22)

c.drawString(72,701-(j+2)*22,"Jenis barang = "+str(j)+" buah.")

c.drawRightString(370,701-(j+2)*22,str(t))

c.line(72,707-(j+3)*22,500,707-(j+3)*22)

c.save()

cur.close()

con.close()

subprocess.Popen("Lap_Stock.pdf",shell=True)

def lap_beli():

con = connect(db="sembako", user="admin",

passwd="admin", host="127.0.0.1", port=3306,autocommit=True)

cur = con.cursor()

sql1 = "SELECT a.nota_masuk, a.tgl_masuk, a.kode_barang, "+\

"b.nama_barang, b.satuan, a.jumlah, a.harga_beli"

sql2 = "FROM masuk a, stock b WHERE a.kode_barang = b.kode_barang"

cur.execute(sql1+" "+sql2)

data_masuk = cur.fetchall()

c = canvas.Canvas("Lap_Pembelian.pdf", pagesize=letter)
18

c.setFont("Helvetica-Bold", 12)

c.setFillColor(gray)

c.drawString(72,750,"GROSIR SAMARINDA")

c.drawString(72,735,"LAPORAN PEMBELIAN BARANG")

c.setFillColor(blue)

c.drawString(480,750,str(datetime.date.today()))

c.setFont("Helvetica-Bold", 9)

c.setFillColor(black)

c.line(72,712,550,712)

c.drawString(75,700,"NOTA")

c.drawString(122,700,"TANGGAL")

c.drawString(177,700,"KODE")

c.drawString(210,700,"NAMA BARANG")

c.drawString(350,700,"SATUAN")

c.drawString(405,700,"JUMLAH")

c.drawString(450,700,"HARGA")

c.drawString(513,700,"TOTAL")

c.line(72,695,550,695)

c.setFont("Helvetica", 9)

j=0

tot=0

jb=0

for i in data_masuk:

nota = i[0]

tgl = i[1]
19

kode = i[2]

nama = i[3]

sat = i[4]

jum = i[5]

harga = i[6]

total = jum * harga

j+= 1

jb+= jum

tot+= total

ctgl=tgl.strftime("%d-%m-%Y")

c.drawString(75,695-j*22,nota)

c.drawString(122,695-j*22,ctgl)

c.drawString(177,695-j*22,kode)

c.drawString(210,695-j*22,nama)

c.drawString(350,695-j*22,sat)

c.drawRightString(432,695-j*22,str(jum))

c.drawRightString(486,695-j*22,format(harga,"8,d"))

c.drawRightString(545,695-j*22,format(total,"8,d"))

c.line(72,701-(j+1)*22,550,701-(j+1)*22)

c.drawString(72,701-(j+2)*22,"Jumlah pembelian barang = "+str(j)+" transaksi.")

c.drawRightString(432,701-(j+2)*22,format(jb,"8,d"))

c.drawRightString(545,701-(j+2)*22,format(tot,"8,d"))

c.line(72,707-(j+3)*22,550,707-(j+3)*22)

c.save()
20

cur.close()

con.close()

subprocess.Popen("Lap_Pembelian.pdf",shell=True)

def lap_jual():

con = connect(db="sembako", user="admin",

passwd="admin", host="127.0.0.1", port=3306,autocommit=True)

cur = con.cursor()

sql1 = "SELECT a.nota_keluar, a.tgl_keluar, a.kode_barang, b.nama_barang, b.satuan, a.jumlah, a.harga_jual"

sql2 = "FROM keluar a, stock b WHERE a.kode_barang = b.kode_barang"

cur.execute(sql1+" "+sql2)

data_jual = cur.fetchall()

c = canvas.Canvas("Lap_Penjualan.pdf", pagesize=letter)

c.setFont("Helvetica-Bold", 12)

c.setFillColor(gray)

c.drawString(72,750,"GROSIR SAMARINDA")

c.drawString(72,735,"LAPORAN PENJUALAN BARANG")

c.setFillColor(blue)

c.drawString(480,750,str(datetime.date.today()))

c.setFont("Helvetica-Bold", 9)

c.setFillColor(black)

c.line(72,712,550,712)

c.drawString(75,700,"NOTA")

c.drawString(122,700,"TANGGAL")
21

c.drawString(177,700,"KODE")

c.drawString(210,700,"NAMA BARANG")

c.drawString(350,700,"SATUAN")

c.drawString(405,700,"JUMLAH")

c.drawString(450,700,"HARGA")

c.drawString(513,700,"TOTAL")

c.line(72,695,550,695)

c.setFont("Helvetica", 9)

j=0

tot=0

jb=0

p=0

for i in data_jual:

nota = i[0]

tgl = i[1]

kode = i[2]

nama = i[3]

sat = i[4]

jum = i[5]

harga = i[6]

total = jum * harga

j+= 1

jb+= jum

p+= 1

tot+= total
22

ctgl=tgl.strftime("%d-%m-%Y")

c.drawString(75,695-j*22,nota)

c.drawString(122,695-j*22,ctgl)

c.drawString(177,695-j*22,kode)

c.drawString(210,695-j*22,nama)

c.drawString(350,695-j*22,sat)

c.drawRightString(432,695-j*22,str(jum))

c.drawRightString(486,695-j*22,format(harga,"8,d"))

c.drawRightString(545,695-j*22,format(total,"8,d"))

if p==25:

c.showPage()

c.setFont("Helvetica", 9)

j=0

c.line(72,701-(j+1)*22,550,701-(j+1)*22)

c.drawString(72,701-(j+2)*22,"Jumlah penjualan barang = "+str(j)+" transaksi.")

c.drawRightString(432,701-(j+2)*22,format(jb,"8,d"))

c.drawRightString(545,701-(j+2)*22,format(tot,"8,d"))

c.line(72,707-(j+3)*22,550,707-(j+3)*22)

c.save()

cur.close()

con.close()

subprocess.Popen("Lap_Penjualan.pdf",shell=True)

def lap_rusak():
23

con = connect(db="sembako", user="admin",

passwd="admin", host="127.0.0.1", port=3306,autocommit=True)

cur = con.cursor()

sql1 = "SELECT a.ba_rusak, a.tgl_rusak, a.kode_barang, b.nama_barang, b.satuan, a.jumlah, a.harga_barang"

sql2 = "FROM rusak a, stock b WHERE a.kode_barang = b.kode_barang"

cur.execute(sql1+" "+sql2)

data_rusak = cur.fetchall()

c = canvas.Canvas("Lap_Rusak.pdf", pagesize=letter)

c.setFont("Helvetica-Bold", 12)

c.setFillColor(gray)

c.drawString(72,750,"GROSIR SAMARINDA")

c.drawString(72,735,"LAPORAN BARANG RUSAK")

c.setFillColor(blue)

c.drawString(480,750,str(datetime.date.today()))

c.setFont("Helvetica-Bold", 9)

c.setFillColor(black)

c.line(72,712,550,712)

c.drawString(75,700,"NO.BA")

c.drawString(123,700,"TANGGAL")

c.drawString(177,700,"KODE")

c.drawString(210,700,"NAMA BARANG")

c.drawString(350,700,"SATUAN")

c.drawString(405,700,"JUMLAH")

c.drawString(450,700,"NILAI")
24

c.drawString(513,700,"TOTAL")

c.line(72,695,550,695)

c.setFont("Helvetica", 9)

j=0

tot=0

jb=0

for i in data_rusak:

nota = i[0]

tgl = i[1]

kode = i[2]

nama = i[3]

sat = i[4]

jum = i[5]

harga = i[6]

total = jum * harga

j+= 1

jb+= jum

tot+= total

ctgl=tgl.strftime("%d-%m-%Y")

c.drawString(75,695-j*22,nota)

c.drawString(123,695-j*22,ctgl)

c.drawString(177,695-j*22,kode)

c.drawString(210,695-j*22,nama)

c.drawString(350,695-j*22,sat)

c.drawRightString(432,695-j*22,str(jum))
25

c.drawRightString(486,695-j*22,format(harga,"8,d"))

c.drawRightString(545,695-j*22,format(total,"8,d"))

c.line(72,701-(j+1)*22,550,701-(j+1)*22)

c.drawString(72,701-(j+2)*22,"Jumlah rusak = "+str(j)+" barang.")

c.drawRightString(432,701-(j+2)*22,format(jb,"8,d"))

c.drawRightString(545,701-(j+2)*22,format(tot,"8,d"))

c.line(72,707-(j+3)*22,550,707-(j+3)*22)

c.save()

cur.close()

con.close()

subprocess.Popen("Lap_Rusak.pdf",shell=True)

def lap_profit():

con = connect(db="sembako", user="admin",

passwd="admin", host="127.0.0.1", port=3306,autocommit=True)

cur = con.cursor()

cur.execute("SELECT kode_barang, nama_barang, satuan FROM stock")

data_stock = cur.fetchall()

cur_beli = con.cursor()

cur_jual = con.cursor()

cur_rusak = con.cursor()

c = canvas.Canvas("Lap_Profit.pdf", pagesize=letter)

c.setFont("Helvetica-Bold", 12)
26

c.setFillColor(gray)

c.drawString(72,750,"GROSIR SAMARINDA")

c.drawString(72,735,"LAPORAN OMSET/KEUNTUNGAN PENJUALAN")

c.setFillColor(blue)

c.drawString(480,750,str(datetime.date.today()))

c.setFont("Helvetica-Bold", 9)

c.setFillColor(black)

c.line(72,712,545,712)

c.drawString(72,700,"KODE")

c.drawString(110,700,"NAMA BARANG")

c.drawString(253,700,"SATUAN")

c.drawString(312,700,"PENJUALAN")

c.drawString(373,700,"PEMBELIAN")

c.drawString(438,700,"RUSAK")

c.drawString(494,700,"KAS GROSIR")

c.line(72,695,545,695)

c.setFont("Helvetica", 9)

j= 0

tjual= 0

tbeli= 0

trusak= 0

tprofit= 0

for i in data_stock:

kode = i[0]

nama = i[1]
27

satuan = i[2]

sql_beli = "SELECT sum(total_beli) FROM masuk WHERE kode_barang = %s"

cur_beli.execute(sql_beli,kode)

data_beli = cur_beli.fetchone()

j_beli = data_beli[0]

if j_beli is None:

j_beli = 0

sql_jual = "SELECT sum(total_jual) FROM keluar WHERE kode_barang = %s"

cur_jual.execute(sql_jual,kode)

data_jual = cur_jual.fetchone()

j_jual = data_jual[0]

if j_jual is None:

j_jual = 0

sql_rusak = "SELECT sum(total_rusak) FROM rusak WHERE kode_barang = %s"

cur_rusak.execute(sql_rusak,kode)

data_rusak = cur_rusak.fetchone()

j_rusak = data_rusak[0]

if j_rusak is None:

j_rusak = 0

j_profit = j_jual - j_beli - j_rusak

tjual+= j_jual

tbeli+= j_beli
28

trusak+= j_rusak

tprofit+= j_profit

j+= 1

c.drawCentredString(86,695-j*22,kode)

c.drawString(110,695-j*22,nama)

c.drawString(253,695-j*22,satuan)

c.drawRightString(360,695-j*22,format(int(j_jual),"8,d"))

c.drawRightString(420,695-j*22,format(int(j_beli),"8,d"))

c.drawRightString(470,695-j*22,format(int(j_rusak),"8,d"))

c.drawRightString(540,695-j*22,format(int(j_profit),"8,d"))

c.line(72,701-(j+1)*22,545,701-(j+1)*22)

c.drawString(72,701-(j+2)*22,"Jenis barang = "+str(j)+" buah.")

c.drawRightString(360,701-(j+2)*22,format(int(tjual),"8,d"))

c.drawRightString(420,701-(j+2)*22,format(int(tbeli),"8,d"))

c.drawRightString(470,701-(j+2)*22,format(int(trusak),"8,d"))

c.drawRightString(540,701-(j+2)*22,format(int(tprofit),"8,d"))

c.line(72,707-(j+3)*22,545,707-(j+3)*22)

c.save()

cur.close()

cur_beli.close()

cur_jual.close()

cur_rusak.close()

con.close()

subprocess.Popen("Lap_Profit.pdf",shell=True)
29

##lap_stock()

##lap_beli()

##lap_jual()

##lap_rusak()

##lap_profit()
30

from tkinter import *

from tkinter import messagebox

from pymysql import *

class omsetjual:

def __init__(self,parent,title):

self.parent = parent

self.parent.title(title)

self.parent.protocol("WM_DELETE_WINDOW",self.onClose)

lebar = 400

tinggi = 180

setTengahX = (self.parent.winfo_screenwidth()-lebar)//2

setTengahY = (self.parent.winfo_screenheight()-tinggi)//2

self.parent.geometry("%ix%i+%i+%i" %(lebar,tinggi,\

setTengahX,setTengahY))

self.parent.resizable(False,False)

self.aturKomponen()

def aturKomponen(self):

kodeFrame = Frame(self.parent)

kodeFrame.pack(side=TOP)

mainFrame = Frame(self.parent)

mainFrame.pack(side=TOP)

btnFrame = Frame(self.parent)

btnFrame.pack(side=BOTTOM)
31

Label(kodeFrame,text=' ').grid(row=0,column=0)

Label(btnFrame,text=' ').grid(row=2,column=0)

Label(kodeFrame,text='Kode Barang').grid(row=1,column=0,pady=3,sticky=W)

self.entKode = Entry(kodeFrame,width=50)

self.entKode.grid(row=1,column=1)

Label(kodeFrame,text='').grid(row=1,column=2)

Label(mainFrame,text='Nama Barang').grid(row=1,column=0,pady=3,sticky=W)

self.entNama = Entry(mainFrame,width=50)

self.entNama.grid(row=1,column=1)

Label(mainFrame,text='% Profit').grid(row=5,column=0,pady=3,sticky=W)

self.entProfit = Entry(mainFrame,width=50)

self.entProfit.grid(row=5,column=1)

Label(mainFrame,text=' ').grid(row=6,column=0,sticky=W)

self.btnCancel = Button(btnFrame,text='Cancel',\

command=self.onCancel,width=10)

self.btnCancel.grid(row=1,column=1,padx=3)

self.btnSave = Button(btnFrame,text='Save',\
32

command=self.onSave,width=10)

self.btnSave.grid(row=1,column=2,padx=3)

self.btnClose = Button(btnFrame,text='Close',\

command=self.onClose,width=10)

self.btnClose.grid(row=1,column=3,padx=3)

def onClose(self,event=None):

self.parent.destroy()

def onCancel(self):

self.entKode.delete(0,END)

self.entNama.delete(0,END)

def onSave(self):

con = connect(db='sembako',user='admin',

passwd='admin',host='127.0.0.1',port=3306,autocommit=True)

cur = con.cursor()

cKode = self.entKode.get()

nProfit = int(self.entProfit.get())

sqlstock = "UPDATE stock SET profit_persen = %s WHERE kode_barang = %s"

cur.execute(sqlstock,(nProfit,cKode))

cur.close()

con.close()
33

##root = Tk()

##omsetjual(root,":: Pengubah Omset Penjualan ::")

##root.mainloop()
34

from tkinter import *

from tkinter import messagebox

from pymysql import *

from datetime import *

import time

class EntryPembelian:

def __init__(self,parent,title):

self.parent = parent

self.parent.title(title)

self.parent.protocol("WM_DELETE_WINDOW",self.onClose)

lebar = 450

tinggi = 200

setTengahX = (self.parent.winfo_screenwidth()-lebar)//2

setTengahY = (self.parent.winfo_screenheight()-tinggi)//2

self.parent.geometry("%ix%i+%i+%i" %(lebar,tinggi,setTengahX,setTengahY))

self.parent.resizable(False,False)

self.aturKomponen()

def aturKomponen(self):

mainFrame = Frame(self.parent)

mainFrame.pack(side=TOP)

btnFrame = Frame(self.parent)

btnFrame.pack(side=BOTTOM)
35

Label(mainFrame,text=' ').grid(row=0,column=0)

Label(btnFrame,text=' ').grid(row=1,column=0)

Label(mainFrame,text='Tgl Masuk (dd-mm-yyyy) ').grid(row=1,column=0,pady=3,sticky=W)

self.entTglMasuk = Entry(mainFrame,width=40)

self.entTglMasuk.grid(row=1,column=1)

tgl = time.strftime("%d-%m-%Y")

self.entTglMasuk.insert(0,tgl)

Label(mainFrame,text='Nomor Nota').grid(row=2,column=0,pady=3,sticky=W)

self.entNota = Entry(mainFrame,width=40)

self.entNota.grid(row=2,column=1)

Label(mainFrame,text='Kode Barang').grid(row=3,column=0,pady=3,sticky=W)

self.entKode = Entry(mainFrame,width=40)

self.entKode.grid(row=3,column=1)

Label(mainFrame,text='Jumlah').grid(row=4,column=0,pady=3,sticky=W)

self.entJumlah = Entry(mainFrame,width=40)

self.entJumlah.grid(row=4,column=1)

Label(mainFrame,text='Harga Beli').grid(row=5,column=0,pady=3,sticky=W)

self.entHarga = Entry(mainFrame,width=40)

self.entHarga.grid(row=5,column=1)
36

self.btnBaru = Button(btnFrame,text='Isi Baru',command=self.onNew,width=10)

self.btnBaru.grid(row=0,column=1,padx=3)

self.btnSave = Button(btnFrame,text='Simpan',command=self.onSave,width=10)

self.btnSave.grid(row=0,column=3,padx=3)

self.btnClose = Button(btnFrame,text='Close',command=self.onClose,width=10)

self.btnClose.grid(row=0,column=4,padx=3)

self.entNota.focus_set()

def onClose(self,event=None):

self.parent.destroy()

def onNew(self):

tgl = time.strftime("%d-%m-%Y")

self.entNota.delete(0,END)

self.entKode.delete(0,END)

self.entJumlah.delete(0,END)

self.entHarga.delete(0,END)

self.entNota.focus_set()

def onSave(self):

mainFrame = Frame(self.parent)

mainFrame.pack(side=TOP)
37

con = connect(db='sembako',user='admin',

passwd='admin',host='127.0.0.1',port=3306,autocommit=True)

cur = con.cursor()

cNota = self.entNota.get()

sqlnota = "SELECT * FROM masuk WHERE nota_masuk = %s"

cur.execute(sqlnota,cNota)

if cur.rowcount > 0:

messagebox.showwarning(title="Peringatan",message="Nomor Nota sudah ada!")

self.parent.update()

self.parent.deiconify()

self.entNota.focus_set()

return

cTglMasuk = self.entTglMasuk.get()

slist = cTglMasuk.split("-")

dTglMasuk = date(int(slist[2]),int(slist[1]),int(slist[0]))

cKode = self.entKode.get()

sqlbarang = "SELECT * FROM stock WHERE kode_barang = %s"

cur.execute(sqlbarang,cKode)

if cur.rowcount == 0:

messagebox.showwarning(title="Peringatan",

message="Kode Barang tidak ada di Stock!")

self.parent.update()

self.parent.deiconify()

self.entKode.focus_set()
38

return

nJumlah = int(self.entJumlah.get())

nHarga = int(self.entHarga.get())

nTot = nJumlah * nHarga

sql = "INSERT INTO masuk "+\

"(nota_masuk,tgl_masuk,kode_barang,jumlah,harga_beli,total_beli) "+\

"VALUES (%s,%s,%s,%s,%s,%s)"

cur.execute(sql,(cNota,dTglMasuk,cKode,nJumlah,nHarga,nTot))

sqlstock = "UPDATE stock SET jumlah= jumlah + %s,harga_satuan = %s "+\

"WHERE kode_barang = %s"

cur.execute(sqlstock,(nJumlah,nHarga,cKode))

cur.close()

con.close()

##root = Tk()

##EntryPembelian(root,":: Transaksi Pembelian Barang ::")

##root.mainloop()
39

from tkinter import *

from tkinter import messagebox

from pymysql import *

from datetime import *

import time

class EntryPenjualan:

def __init__(self,parent,title):

self.parent = parent

self.parent.title(title)

self.parent.protocol("WM_DELETE_WINDOW",self.onClose)

lebar = 500

tinggi = 250

setTengahX = (self.parent.winfo_screenwidth()-lebar)//2

setTengahY = (self.parent.winfo_screenheight()-tinggi)//2

self.parent.geometry("%ix%i+%i+%i" %(lebar,tinggi,setTengahX,setTengahY))

self.parent.resizable(False,False)

self.aturKomponen()

def aturKomponen(self):

mainFrame = Frame(self.parent)

mainFrame.pack(side=TOP)

btnFrame = Frame(self.parent)

btnFrame.pack(side=BOTTOM)
40

Label(mainFrame,text=' ').grid(row=0,column=0)

Label(btnFrame,text=' ').grid(row=1,column=0)

Label(mainFrame,text='Tgl Penjualan (dd-mm-yyyy)').grid(row=1,column=0,pady=3,sticky=W)

self.entTglKeluar = Entry(mainFrame,width=40)

self.entTglKeluar.grid(row=1,column=1)

tgl = time.strftime("%d-%m-%Y")

self.entTglKeluar.insert(0,tgl)

Label(mainFrame,text='Nomor Nota').grid(row=2,column=0,pady=3,sticky=W)

self.entNota = Entry(mainFrame,width=40)

self.entNota.grid(row=2,column=1)

Label(mainFrame,text='Kode Barang').grid(row=3,column=0,pady=3,sticky=W)

self.entKode = Entry(mainFrame,width=40)

self.entKode.grid(row=3,column=1)

Label(mainFrame,text='Jumlah').grid(row=4,column=0,pady=3,sticky=W)

self.entJumlah = Entry(mainFrame,width=40)

self.entJumlah.grid(row=4,column=1)

Label(mainFrame,text='Harga Jual').grid(row=5,column=0,pady=3,sticky=W)

self.entHargaJual = Entry(mainFrame,width=40)

self.entHargaJual.grid(row=5,column=1)
41

Label(mainFrame,text='Total').grid(row=6,column=0,pady=3,sticky=W)

self.entTotal = Entry(mainFrame,width=40)

self.entTotal.grid(row=6,column=1)

self.btnBaru = Button(btnFrame,text='Isi Baru',command=self.onNew,width=10)

self.btnBaru.grid(row=0,column=1,padx=3)

self.btnSave = Button(btnFrame,text='Proses',command=self.onProcess,width=10)

self.btnSave.grid(row=0,column=2,padx=3)

self.btnSave = Button(btnFrame,text='Simpan',command=self.onSave,width=10)

self.btnSave.grid(row=0,column=3,padx=3)

self.btnClose = Button(btnFrame,text='Close',command=self.onClose,width=10)

self.btnClose.grid(row=0,column=4,padx=3)

self.entNota.focus_set()

def onClose(self,event=None):

self.parent.destroy()

def onNew(self):

self.entNota.delete(0,END)

self.entKode.delete(0,END)

self.entJumlah.delete(0,END)
42

self.entHargaJual.delete(0,END)

self.entTotal.delete(0,END)

self.entNota.focus_set()

def onProcess(self):

con = connect(db='sembako',user='admin',

passwd='admin',host='127.0.0.1',port=3306,autocommit=True)

cur = con.cursor()

cKode = self.entKode.get()

sqlbarang = "SELECT harga_satuan, profit_persen FROM stock WHERE kode_barang = %s"

cur.execute(sqlbarang,cKode)

data = cur.fetchone()

nHarga = data[0]

nProfit = data[1]

nHarga = int(nHarga + nHarga * nProfit/100)

self.entHargaJual.insert(0,str(nHarga))

nJumlah = self.entJumlah.get()

nTotal = int(nJumlah) * nHarga

self.entTotal.insert(0,nTotal)

cur.close()

con.close()

def onSave(self):

mainFrame = Frame(self.parent)

mainFrame.pack(side=TOP)
43

con = connect(db='sembako',user='admin',

passwd='admin',host='127.0.0.1',port=3306,autocommit=True)

cur = con.cursor()

cNota = self.entNota.get()

sqlnota = "SELECT * FROM keluar WHERE nota_keluar = %s"

cur.execute(sqlnota,cNota)

if cur.rowcount > 0:

messagebox.showinfo(title="Peringatan",message="Nomor Nota sudah ada!")

self.parent.update()

self.parent.deiconify()

self.entNota.focus_set()

return

cTglKeluar = self.entTglKeluar.get()

slist = cTglKeluar.split("-")

dTglKeluar = date(int(slist[2]),int(slist[1]),int(slist[0]))

cKode = self.entKode.get()

sqlbarang = "SELECT * FROM stock WHERE kode_barang = %s"

cur.execute(sqlbarang,cKode)

if cur.rowcount == 0:

messagebox.showinfo(title="Peringatan",message="Kode Barang tidak ada di Stock!")

self.parent.update()

self.parent.deiconify()

self.entKode.focus_set()

return
44

nJumlah = int(self.entJumlah.get())

nHarga = int(self.entHargaJual.get())

nTot = nJumlah * nHarga


sql = "INSERT INTO keluar (nota_keluar,tgl_keluar,kode_barang,jumlah,harga_jual,total_jual) VALUES (%s,%s,%s,%s,%s,%s)"

cur.execute(sql,(cNota,dTglKeluar,cKode,nJumlah,nHarga,nTot))

sqlstock = "UPDATE stock SET jumlah = jumlah - %s WHERE kode_barang = %s"

cur.execute(sqlstock,(nJumlah,cKode))

cur.close()

con.close()

##root = Tk()

##EntryPenjualan(root,":: Transaksi Penjualan Barang ::")

##root.mainloop()
45

from tkinter import *

from tkinter import messagebox

from pymysql import *

from datetime import *

import time

class EntryRusak:

def __init__(self,parent,title):

self.parent = parent

self.parent.title(title)

self.parent.protocol("WM_DELETE_WINDOW",self.keluar)

lebar = 500

tinggi = 250

setTengahX = (self.parent.winfo_screenwidth()-lebar)//2

setTengahY = (self.parent.winfo_screenheight()-tinggi)//2

self.parent.geometry("%ix%i+%i+%i" %(lebar,tinggi,setTengahX,setTengahY))

self.parent.resizable(False,False)

self.aturKomponen()

def aturKomponen(self):

mainFrame = Frame(self.parent)

mainFrame.pack(side=TOP)

btnFrame = Frame(self.parent)

btnFrame.pack(side=BOTTOM)
46

Label(mainFrame,text=' ').grid(row=0,column=0)

Label(btnFrame,text=' ').grid(row=1,column=0)

Label(mainFrame,text='Tgl BA (dd-mm-yyyy)').grid(row=1,column=0,pady=3,sticky=W)

self.entTglRusak = Entry(mainFrame,width=40)

self.entTglRusak.grid(row=1,column=1)

tgl = time.strftime("%d-%m-%Y")

self.entTglRusak.insert(0,tgl)

Label(mainFrame,text='Nomor BA').grid(row=2,column=0,pady=3,sticky=W)

self.entBA = Entry(mainFrame,width=40)

self.entBA.grid(row=2,column=1)

Label(mainFrame,text='Kode Barang').grid(row=3,column=0,pady=3,sticky=W)

self.entKode = Entry(mainFrame,width=40)

self.entKode.grid(row=3,column=1)

Label(mainFrame,text='Jumlah').grid(row=4,column=0,pady=3,sticky=W)

self.entJumlah = Entry(mainFrame,width=40)

self.entJumlah.grid(row=4,column=1)

Label(mainFrame,text='Harga Barang').grid(row=5,column=0,pady=3,sticky=W)

self.entHargaBarang = Entry(mainFrame,width=40)

self.entHargaBarang.grid(row=5,column=1)
47

Label(mainFrame,text='Total').grid(row=6,column=0,pady=3,sticky=W)

self.entTotal = Entry(mainFrame,width=40)

self.entTotal.grid(row=6,column=1)

self.btnBaru = Button(btnFrame,text='Isi Baru',command=self.baru,width=10)

self.btnBaru.grid(row=0,column=1,padx=3)

self.btnSave = Button(btnFrame,text='Proses',command=self.proses,width=10)

self.btnSave.grid(row=0,column=2,padx=3)

self.btnSave = Button(btnFrame,text='Simpan',command=self.simpan,width=10)

self.btnSave.grid(row=0,column=3,padx=3)

self.btnClose = Button(btnFrame,text='Close',command=self.keluar,width=10)

self.btnClose.grid(row=0,column=4,padx=3)

self.entBA.focus_set()

def keluar(self,event=None):

self.parent.destroy()

def baru(self):

self.entBA.delete(0,END)

self.entKode.delete(0,END)

self.entJumlah.delete(0,END)
48

self.entHargaBarang.delete(0,END)

self.entTotal.delete(0,END)

self.entBA.focus_set()

def proses(self):

con = connect(db='sembako',user='admin',

passwd='admin',host='127.0.0.1',port=3306,autocommit=True)

cur = con.cursor()

cKode = self.entKode.get()

sqlbarang = "SELECT harga_satuan FROM stock WHERE kode_barang = %s"

cur.execute(sqlbarang,cKode)

data = cur.fetchone()

nHarga = data[0]

self.entHargaBarang.insert(0,str(nHarga))

nJumlah = self.entJumlah.get()

nTotal = int(nJumlah) * nHarga

self.entTotal.insert(0,nTotal)

cur.close()

con.close()

def simpan(self):

mainFrame = Frame(self.parent)

mainFrame.pack(side=TOP)

con = connect(db='sembako',user='admin',

passwd='admin',host='127.0.0.1',port=3306,autocommit=True)
49

cur = con.cursor()

cBA = self.entBA.get()

sqlBA = "SELECT * FROM rusak WHERE ba_rusak = %s"

cur.execute(sqlBA,cBA)

if cur.rowcount > 0:

messagebox.showinfo(title="Peringatan",message="Nomor Berita Acara sudah ada!")

self.parent.update()

self.parent.deiconify()

self.entBA.focus_set()

return

cTglRusak = self.entTglRusak.get()

slist = cTglRusak.split("-")

dTglRusak = date(int(slist[2]),int(slist[1]),int(slist[0]))

cKode = self.entKode.get()

sqlbarang = "SELECT * FROM stock WHERE kode_barang = %s"

cur.execute(sqlbarang,cKode)

if cur.rowcount == 0:

messagebox.showinfo(title="Peringatan",message="Kode Barang tidak ada di Stock!")

self.parent.update()

self.parent.deiconify()

self.entKode.focus_set()

return

nJumlah = int(self.entJumlah.get())
50

nHarga = int(self.entHargaBarang.get())

nTot = nJumlah * nHarga


sql = "INSERT INTO rusak (ba_rusak,tgl_rusak,kode_barang,jumlah,harga_barang,total_rusak) VALUES (%s,%s,%s,%s,%s,%s)"

cur.execute(sql,(cBA,dTglRusak,cKode,nJumlah,nHarga,nTot))

sqlstock = "UPDATE stock SET jumlah = jumlah - %s WHERE kode_barang = %s"

cur.execute(sqlstock,(nJumlah,cKode))

cur.close()

con.close()

##root = Tk()

##EntryRusak(root,":: Kerusakan Barang ::")

##root.mainloop()
51

import tkinter.ttk

from tkinter import *

import pymysql

judul_kolom = ("KODE","NAMA BARANG","SATUAN","JUMLAH","HARGA SATUAN","% PROFIT")

class TampilStock:

def __init__(self,parent,judul):

self.parent = parent

self.parent.title(judul)

lebar = 710

tinggi = 300

setTengahX = (self.parent.winfo_screenwidth()-lebar)//2

setTengahY = (self.parent.winfo_screenheight()-tinggi)//2

self.parent.geometry("%ix%i+%i+%i" %(lebar, tinggi, setTengahX, setTengahY))

self.parent.protocol("WM_DELETE_WINDOW", self.Tutup)

self.parent.resizable(False, False)

self.aturKomponen()

self.isiTabel()

def aturKomponen(self):

mainFrame = Frame(self.parent)

mainFrame.pack(fill=BOTH, expand=YES)

fr_data = Frame(mainFrame, bd=10)

fr_data.pack(fill=BOTH, expand=YES)
52

self.trvTabel = ttk.Treeview(fr_data, columns=judul_kolom,

show='headings')

sbVer = Scrollbar(fr_data, orient='vertical',

command=self.trvTabel.yview)

sbHor = Scrollbar(fr_data, orient='horizontal',

command=self.trvTabel.xview)

sbVer.pack(side=RIGHT, fill=Y)

sbHor.pack(side=BOTTOM, fill=X)

self.trvTabel.pack(side=LEFT, fill=BOTH)

def isiTabel(self):

con = pymysql.connect(db='sembako', user='admin',

passwd='admin', host='127.0.0.1', port=3306,autocommit=True)

cur = con.cursor()

cur.execute("SELECT * FROM stock")

data_stock = cur.fetchall()

for kolom in judul_kolom:

self.trvTabel.heading(kolom, text=kolom)

self.trvTabel.column("KODE",width=60,anchor="center")

self.trvTabel.column("NAMA BARANG",width=220,anchor="w")

self.trvTabel.column("SATUAN",width=110,anchor="w")

self.trvTabel.column("JUMLAH",width=70,anchor="e")

self.trvTabel.column("HARGA SATUAN",width=130,anchor="e")
53

self.trvTabel.column("% PROFIT",width=70,anchor="center")

for dat in data_stock:

self.trvTabel.insert('', 'end', values=dat)

cur.close()

con.close()

def Tutup(self, event=None):

self.parent.destroy()

##root = tkinter.Tk()

##TampilStock(root, ":: Daftar Barang di Stock ::")

##root.mainloop()
BAB III
HASIL PROGRAM
A. Menu Utama

 Menu utama terdiri dari File dan Laporan.

 File = terdiri dari Transaksi Pembelian barang, Transaksi Penjualan


Barang, Input Barang Rusak, Master Data Stock, dan Keluar.

54
55

 Master Data Stock = terdiri dari Isi Data Stock, Lihat Data Stock, Ubah
Persentase Profit.

 Laporan = tediri dari Laporan Stock, Laporan Pembelian Barang,


Laporan Penjualan Barang, Laporan Barang Rusak, dan Laporan
Keuntungan Penjualan.
56

B. Entry Data

 Transaksi Pembelian Barang = Berguna untuk mencatat pembelian


barang yang telah dilakukan.
o Tgl Masuk (dd-mm-yyy) = Digunakan untuk mencatat waktu
pembelian barang.
o Nomor Nota = Digunakan untuk mendata nomor transaksi
setelah pembelian.
o Kode Barang = Digunakan untuk stock barang yang telah dibeli.
o Jumlah = Digunakan untuk mendata jumlah barang yang telah
dibeli.
o Harga Beli = Digunakan untuk mencatat biaya yang diperlukan
saat melakukan pembelian.
57

 Transaksi Penjualan Barang = Digunakan untuk mencatat transaksi


barang yang telah terjual.
o Tgl Penjualan (dd-mm-yyyy) = Digunakan untuk mencatat waktu
transaksi dilakukan.
o Nomor Nota = Digunakan untuk mendata nomor data setelah
Penjualan.
o Kode Barang = Digunakan untuk mendata stock barang yang
akan dijual.
o Jumlah = Digunakan untuk mencatat barang atau stock yang
telah terjual.
o Harga jual = Digunakan untuk mendata harga barang yang
akan dijual.
o Total = Digunakan untuk mendata total harga hasil penjualan.
58

 Kerusakan Barang = Berguna untuk mendata detail barang yang


rusak.
o Tgl BA (dd-mm-yyyy) = untuk mencatat tanggal kerusakan barang.
o Nomor BA = Digunakan untuk mendata barang yang rusak agar
tidak tercampur dengan yang tidak rusak.
o Kode Barang = kode yang digunakan untuk mengetahui barang
yang rusak.
o Jumlah = Diisi dengan format angka, digunakan untuk mencatat
jumlah barang yang rusak.
o Total = digunakan untuk mengetahui total kerugian karena barang
yang rusak.
o Tombol (Proses) = Digunakan untuk memudahkan penghitungan
Harga Barang dan Total
59

o Isi Data Stock = Berguna untuk menambah barang baru yang


belum pernah ditambahkan.
o Kode Barang = Digunakan untuk memudahkan pencarian
barang.
o Nama Barang = Digunakan untuk memasukkan nama
barang.
o Satuan = Berguna untuk membedakan jenis barang seperti
Pcs dan Botol.
o Jumlah = Berfungsi untuk mengetahui berapa banyak
barang yang ada.
o Harga Satuan = Digunakan untuk menentukan harga barang
yang akan dijual.
o % Profit = Berfungsi untuk menentukan keuntungan yang
diperoleh.
60

 Pengubah Omset Penjualan = Berguna untuk mengubah persentase


keuntungan barang.
o Kode Barang = Kode yang digunakan untuk menemukan stock
barang agar mudah ditemukan.
o Nama Barang = Digunakan untuk mengindikasikan stock
barang yang akan diubah persentasenya.
o % Profit = Diisi dengan format angka antara 1 – 100 sesuai
dengan keuntungan yang diinginkan.
61

C. Laporan

 Laporan Stock Barang, yaitu laporan tentang persediaan barang pada


grosir tersebut yang terdiri dari Kode, Nama Barang, Satuan, Jumlah,
Harga, dan Profit.

 Laporan Pembelian Barang merupakan laporan tentang transaksi


pembelian persediaan barang yang telah dibeli.
62

 Laporan Penjualan Barang, laporan tentang transaksi barang yang


telah dijual.

 Laporan Kerusakan Barang, yaitu laporan tentang persediaan barang


yang mengalami kerusakan.
63

 Laporan Omset / Keuntungan Penjualan, merupakan laporan tentang


keuuntungan pada transaksi penjualan barang.

Anda mungkin juga menyukai