1 Son düzenleyen, aydinufuk (02.10.2014 13:32:13)

Konu: stok kodlama

Selam dostlar,

Programıma bir stok müdülü eklentisi yapıyorum. Bir kaç sorum var . Deneyimli arkadaşların görüşlerine ihtiyacım var.

1. stok kartında   GUID kullanmak avantajlı mıdır? Yoksa başka bir numaralandırma mı yapmalı?

2. Örneğin bir mamül ürün var. RAF diyelim.. Bu rafın farklı rengi ve malzemesi ve tipi olabilir . 
Stok kodu üretirken bu bilgileri içiren tek bir kod mu üretmeli ( örneğin :" RAF-AHŞAP-BEYAZ- A TİPİ)

yoksa
bu özellikler ayrı field'lerde mi tutulup, malın özelliğini içermeyen bir stok kodu mu verilmeli (örneğin :"st00001")

En az baş ağrıtacak yöntem nedir sizce.

anlatabildiysem ne mutlu bana..

Şimdiden teşekkürler..

2 Son düzenleyen, konuka (02.10.2014 16:00:11)

Re: stok kodlama

benim tecrübem:
Stoklar için hiç bir anlamı olmayan kod ver
diğer özellikleri ayrı alanlarda derlersin. İleride illa ki yeni bir şey çıkacaktır, kolay halledersin.

GUID kullanmadım, bana nedense sıcak durmadı.
Yerine örneğin aşağıdaki gibi bir barkod kodu üretiyorum.

Visual Fox Pro
m.lnh=SQLSTRINGCONNECT(Fon.sqlbağ)

SQLEXEC(m.lnh, "SELECT max(paketid) AS mid FROM irs..paket", "curYenid")
m.paketid=NVL(curYenid.mid,0)+1

Unik olsun diye belki çok çok fazla kullanıcılı ortamda bir SP ile hem yeni noyu üretip hemen kaydı tamamlarsın.
sana benim kullandığım bir SP örneği yollayayım, aşağıda yenid ile hemen id oluşturup kaydı tamamlıyor. (yenid + - kafanı karıştırmasın, datafield Integer kullanıyorum, kiralık tekstiller -, normal tekstiller  + diye bir ayrım var)

SQL
USE [irs]

GO
/****** Object:  StoredProcedure [dbo].[sayimkaydet]    Script Date: 02.10.2014 15:15:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
 
-- =============================================
-- Author:        <KonukA>
-- Create date: <8.03.2010>
-- Description:    <sayım sonuçları - kirli kayıt>
-- =============================================
ALTER PROCEDURE [dbo].[sayimkaydet]
    -- Add the parameters for the stored procedure here
        @kirno INT ,
    @tarihx CHAR(10) ,
    @teksid INT ,
    @beyan SMALLINT ,
    @gelen SMALLINT ,
    @iade SMALLINT ,
    @sayimid TINYINT ,  -- operatör id
    @paketnot VARCHAR(100) ,
    @ant1hen2 TINYINT
 
AS
BEGIN
    SET NOCOUNT ON; -- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
    -- komutlar
    DECLARE @tarih DATE
        SET @tarih = CONVERT(DATE,@tarihx,4)
    DECLARE @lteksid SMALLINT
        SET @lteksid = ABS(@teksid)%100000
    DECLARE    @müşterid SMALLINT
        SET @müşterid = ABS(@teksid)/100000
    DECLARE @kirliadeneden VARCHAR(50)
        SET @kirliadeneden ='iade stoktan düşüldü'+STR(@kirno)+' - '+CONVERT(CHAR(10),@tarih,4)
    DECLARE @yenid INT
 
    SET @paketnot = ltrim(str(@kirno%100000000))+' - '+LEFT(@paketnot,85) --STR(@kirno,10)+' - '+LEFT(@paketnot,85)
 
    INSERT INTO [irs].[dbo].[af]
            ([afno],[teksid],[beyan], [adet], devir)
    VALUES ( @kirno,  @teksid, @beyan, @gelen, @gelen)
 
    UPDATE [irs].[dbo].[tekstil]
    SET [gelen] = [gelen]+ @gelen ,
        [iadgelen] = [iadgelen]+ @iade
     WHERE [teksid] = @teksid
 
    IF @iade > 0
    BEGIN
      IF @teksid < 0
      BEGIN
        SET @yenid= ISNULL((SELECT MIN(paketid) FROM irs..paket),0)-1
      END
      ELSE
      BEGIN
        SET @yenid= ISNULL((SELECT MAX(paketid) FROM irs..paket),0)+1
      END
 
       INSERT INTO [irs].[dbo].[paket]
           ([paketid] ,[paketarih] ,[paketnot] ,[kkid] , [st])
       VALUES
           (@yenid, @tarih, @paketnot, @sayimid, @ant1hen2*10+8)
 
       INSERT INTO [irs].[dbo].[paket_]
           ([paketid] ,[teksid] ,[adet])
       VALUES
           (@yenid, @teksid, @iade)
    END
 
     IF @teksid < 0
     BEGIN
         UPDATE [irs].[dbo].[ltekstil_]
        SET [lgelen] = [lgelen]+ @gelen ,
            [liadgelen] = [liadgelen]+ @iade
        WHERE [lteksid] = @lteksid
     END   
 
    IF @iade > 0 AND @teksid < 0
     BEGIN
            INSERT INTO [irs].[dbo].[ltekaydet]
                 ([lteksid],[ladet],[lnot],[lfiyat],[lgram],[tarih],[opid],[müşterid],[ant1hen2])
           VALUES (@lteksid,@iade,@kirliadeneden,
                  (SELECT [lmaliyet] FROM [irs].[dbo].[ltekstil] WHERE [lteksid] = @lteksid) ,
                  (SELECT [lgram] FROM [irs].[dbo].[ltekstil] WHERE [lteksid] = @lteksid) ,
                  @tarih, @sayimid, @müşterid, @ant1hen2)
     END
END

Çetin'den bir sihirbazlık çıkmazsa idare edersin artık, elimi çabuk tuttum smile

VFP9 SP2

3 Son düzenleyen, konuka (02.10.2014 16:00:40)

Re: stok kodlama

Bir de kullanmadığım NEWID() fonksiyornu var ,aşağıdakileri yaptım.
hakikaten konya ovasında kutup ayısına rastlamak gibi

SQL
DECLARE @myid uniqueidentifier

SET @myid = NEWID()
PRINT 'Value of @myid is:  '+ CONVERT(varchar(255), @myid)
DECLARE @myid1 uniqueidentifier
SET @myid1 = NEWID()
PRINT 'Value of @myid1 is: '+ CONVERT(varchar(255), @myid1)
DECLARE @myid2 uniqueidentifier
SET @myid2 = NEWID()
PRINT 'Value of @myid2 is: '+ CONVERT(varchar(255), @myid2)


Value of @myid is:  B1B7F411-A514-47D7-871F-007A5A61BEE2
Value of @myid1 is: 10632656-F739-434D-8F2D-61F74360D8E9
Value of @myid2 is: 14C10A85-F032-4200-82F1-39FD9376E157

VFP9 SP2

4

Re: stok kodlama

teşekkürler smile  inceleyeyim..

5

Re: stok kodlama

1-GUID kullanmak avantajlidir hele farkli noktalarda kayit aciliyor ve daha sonra bir noktada birlestiriliyor ise (sync)

2-kod anlamli tutulabilir min C(16) olmasini oneririm orn. Raf icin R-00000001 yada mamul anlamina geldigi icin MR-0000001
gibi

3-GUID i her halukarda gizli anahtar olarak kullannak gerek orn. bazi updatelerde bu anahar uzerinden islem yaparsin

4-stok kartinda grpkod1 c(2),grpkod2 c(2) ,grpkod3 c(2) gibi alanlarin olsun boylelikle stoklari gruplara
ayirabilme sansin ve gerektiginde istedigin grup-alt gruba gore sorgulama listeleme sansin olur
orn. raf mamul grubundadir , civi yari mamul yada aksesuar gibi

GUID ile ilgili aciklama ve ornek kodlar http://www.fox4um.com/post/14900/#p14900

6

Re: stok kodlama

teşekkürler soykan..