• Cts. Oca 31st, 2026

Fatih ŞAHİN

Not defterim.

Stok yönetimi ve hızlı satış sistemi için eğer Akınsoft Wolvox Erp ,Hızlı Satış ve Restaurant sistemini kullanıyorsanız fiyat geçişleri özellikle çok fazla ürünü olan firmalar için gerçekten uzun süren ve hataya çok açık bir süreç.  Bu işi daha pratik hale getirmek amacıyla excel de hazırladığım bir sistemden bahsedeceğim. Öncelikle kısaca Akınsoft Wolvox  sisteminin fiyat konusu ile alakalı veritabanı yapısından kısaca bahsetmek istiyorum. Yapacağımız işlem aslında doğrudan veritabanına excel üzerinden veri göndermek ve almak olacak.

Bu yöntem sql server kullanan sistemler için geçerlidir. Eğer hala firebird veritabanını kullanıyorsanız onunda çözümü var fakat bu konuda sql server üzerinden yapılacak işlemleri barındırıyor. Veritabanı yapısına bakacak olursak Akınsoft Wolvox yıl geçişlerine göre verileri farklı veritabanlarında tutmaktadır. Siz her yıl devri yaptığınızda bir önceki yıla ait veriler farklı bir veritabanında kayıt edilir.  Örnek :

WOLVOX8_001_2017_WOLVOX
WOLVOX8_001_2018_WOLVOX
WOLVOX8_001_2019_WOLVOX
WOLVOX8_001_2020_WOLVOX
WOLVOX8_001_2021_WOLVOX
WOLVOX8_001_2022_WOLVOX

Buıradaki veritabanı ayrımı tarihe göre değil sizin devir yaptığınız tarihlere göre veritabanlarını ayırmaktadır. Akınsof Wolvox stok fiyatlarını STOK_FIYAT isminde bir tabloda tutar.

STOK_FIYAT tablosunun örnek görünümü yukarıdaki gibidir. Burada;

BLKODU = tablonun benzersiz numaralarıdır.
BLSTKODU = Ürünün stok kodudur. Stok tablosunda bilgi kodu olarak geçer.
FIYATI = Ürünün fiyatı
ALIS_SATIS =  burada 1 alış fiyatını, 2 ise satış fiyatını temsil etmektedir.
FIYAT_NO = Ürün için belirlenen fiyat numarasıdır.

Bu veritabanı kısmı şimdi erp kısmınada bir göz atalım ve daha sonra asıl anlatacaklarıma gelelim.


evet burada erp üzerinden bir ürünün fiyatının satış  ve alış cinsinden değiştirileceği alanı görüyoruz. Burada hem satış hem de alış fiyatlarını ayrı ayrı düzenyebilirsiniz. Burada 10 farklı fiyat tanımı bulunmaktadır. Bu fiyat tanımı yükseltilebilir. Default olarak yanılmıyorsam 5 farklı fiyat numarası gelmektedir.

Şimdi eğer ben 500 farklı kalemde fiyat geçişi yapacak olsam bunu stokların hepsi için ayrı ayrı yapmam gerekiyor. Eğer siz de benim gibi bir den fazla fiyat kategorisini kullanıyorsanız muhtemelen kullanıyorsunuz o zaman iş daha da uzun ve karmaşık hale geliyor.

Bende yaklaşık 500′ e yakın ürün için fiyat geçişleri ve kontrolleri yapıyorum. Excel üzerinde bu işi nasıl yapacağınızı ve ne kadar kolay olduğunu şimdi anlatacağım.

Excel de şöyle bir tablo hazırladım. Ürünlerin bilgilerini ve stok fiyatlarına göre 1’den 10′ a kadar giden fiyatlarını sıraladım.

Daha sonra önce ürünlerin sistemdeki mevcut fiyatlarını çekelim. Ben genelde 2 dosya yaparım önce eski fiyatları çekerim daha sonra güncelleyeceğim fiyatlar için bir tablo hazırlarım. Karşılaştırma yapmam gereken durumlar olabiliyor.

fiyat_cek adında bir modül oluşturdum.

Public Sub fiyat_cek()

Dim baglanti As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sunucu, veritabani, ID, sifre, sorgu As String
Dim sayac As Integer

sunucu = "192.168.1.10"
veritabani = "WOLVOX8_001_2022_WOLVOX"
ID = "sa"
sifre = "123456"
baglanti.Open "Driver={SQL SERVER};Server=" & sunucu & ";Database=" & veritabani & ";Uid=" & ID & ";Pwd=" & sifre & ";"

sonsatir = Range("G" & Rows.Count).End(xlUp).Row 'F sütununun son dolu


For y = 8 To 17
For i = 5 To sonsatir
    
    BLSTKODU = Cells(i, "G").Value
    FIYAT_NO = Cells(4, y)
    sorgu = "SELECT FIYATI FROM STOK_FIYAT WHERE BLSTKODU = " & BLSTKODU & "  AND  ALIS_SATIS = 2 AND FIYAT_NO = " & FIYAT_NO & " "
    rs.Open sorgu, baglanti, adOpenStatic
    ActiveSheet.Cells(i, y).CopyFromRecordset rs
    rs.Close
    
Next i
Next y

baglanti.Close

MsgBox ("Veri çekme işlemi tamamlandı.")

End Sub

Dim ile gerekli tanımlamarl yaptım.

sunucu = "192.168.1.10"
veritabani = "WOLVOX8_001_2022_WOLVOX"
ID = "sa"
sifre = "123456"

Burada sunucuya erişim için gerekli bilgileri yazıyorsunuz. Akınsoft Wolvox veritabanının kurulu oloduğu sunucu ip si yine sql server için veritabanı adı, kullanıcı adı ve şifresini girdikten sonra

baglanti.Open "Driver={SQL SERVER};Server=" & sunucu & ";Database=" & veritabani & ";Uid=" & ID & ";Pwd=" & sifre & ";"

yukarıdaki sql cümleciği ile ADODB bağlantısını gerçekleştiriyoruz.  Tabi bunun çalışması için sisteminizde en güncel olan sürümde “Microsoft Activex Data Objects Library ” kütüphanesini projemize dahil ediyoruz. 

<span style="background-color: inherit; color: inherit; font-family: inherit; font-size: var(--hcb-font-size,14px);">sonsatir = Range("G" & Rows.Count).End(xlUp).Row 'F sütununun son dolu</span>

sonsatir isminde değişken ile excel üzerinde stok kodlarımızın yazılı olduğu sütunun kaç satırdan oluştuğu bilgisini alıyorum. Bunu döngü içerisinde kullanacağım için döngünün nerede sonlanacağını belirmekte kolaylık sağlayacağı için bu şekilde yaptım.

For y = 8 To 17
For i = 5 To sonsatir
    
    BLSTKODU = Cells(i, "G").Value
    FIYAT_NO = Cells(4, y)
    sorgu = "SELECT FIYATI FROM STOK_FIYAT WHERE BLSTKODU = " & BLSTKODU & "  AND  ALIS_SATIS = 2 AND FIYAT_NO = " & FIYAT_NO & " "
    rs.Open sorgu, baglanti, adOpenStatic
    ActiveSheet.Cells(i, y).CopyFromRecordset rs
    rs.Close
    
Next i
Next y

Daha sonra sql server üzerinden sorgu çalıştıracağım için bir döngü aracılığıyla tablodaki ürünlerin stok kodunu ve fiyat numaralarını alıyorum. yukarıda veritabanı yapısından bahsetmiştim bunu veritabanında sorgu da ilgilşi veri çekmek için yapıyorum. Daha sonra modülü çalıştırdığımda sistemdeki fiyat bilgisi benim excel sayfama gelmiş olacak.

Bu işin birinici aşamasıydı. Şimdi yine aynı excel sayfası üzerinden fiyat güncelleme işlemini yapacağız. guncelle isminde bir modül daha oluşturuyoruz. Kodun tamamı aşağıdadır.

Public Sub guncelle()

Dim Conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sunucu, veritabani, ID, sifre, SQLStr As String
Dim sayac As Integer

sunucu = "192.168.1.110" 
veritabani = "WOLVOX8_001_2022_WOLVOX"
ID = "sa"
sifre = "123456"

Conn.Open "Driver={SQL SERVER};Server=" & sunucu & ";Database=" & veritabani & ";Uid=" & ID & ";Pwd=" & sifre & ";"
sonsatir = Range("G" & Rows.Count).End(xlUp).Row 'F sütununun son dolu

For y = 8 To 17
For i = 5 To sonsatir
    
    BLSTKODU = Sayfa4.Cells(i, "G").Value
    EXCEL_FIYAT_NO = Sayfa4.Cells(4, y).Value
    EXCEL_FIYAT = Sayfa4.Cells(i, y).Value

    SQLStr = ""
    SQLStr = SQLStr & "UPDATE STOK_FIYAT SET FIYATI = " & EXCEL_FIYAT & " WHERE BLSTKODU  = " & BLSTKODU & " AND FIYAT_NO = " & EXCEL_FIYAT_NO & " AND ALIS_SATIS = 2"
   
    On Error GoTo hata1
    rs.Open SQLStr, Conn, adOpenStatic
    On Error Resume Next
    
Next i
Next y

rs.Close


GoTo son
hata1:
 hatavar = True
 MsgBox ("Güncelleme tamamlanamadı")
son:
 Call Conn.Close
 MsgBox ("Güncelleme tamamlandı. Güncellenen Kayıt Sayısı")

End Sub

Az önce anlattığım ürün fiyatlarının çekilmesi işlemine benzer bir kod aslında burada sadece select değil update işlemini kullanıyor olacağız. Siz kodları kendi excel sayfanızdaki bilgilerin bulunduğu satır ve sütunlara göre güncelleştirmeniz gerekmektedir.

Bu benim işlerimini daha kontrollü ve hızlı yapmak amacıyla yaptığım bir sistem. Eğer Microsoft Sql Server hakkında bilginiz yoksa ve excel vba bilginiz yoksa lütfen bu işlemleri denemeyin. Aksi takdirde veritabanınız üzerinde bozulmalar ve verikayıpları gerçekleşebilir.

İşlemleri yaparken herhangi bir sorunla karşılaşmanız halinde benimle fatih@sahin.tc mail adresi üzerinden iletişime geçerseniz mümkün olan en kısa sürede dönüş yaparım.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir