FilemakerTurk, AYS Bilişim ve Beyaz Net tarafından desteklenmektedir.
Filemaker Danışmanınız
AYS Bilişim
Mehmet KAYA
 0532 231 07 27
 0216 318 55 80
 mkaya@aysbilisim.net
						

Karekod içinden Tarih bilgisi çekmek.

+2 oy
961 kez görüntülendi

Merhaba Arkadaşlar;

Eczanede sayım yaparken ilaçların barkodu değil de karekodlarını kullandığımızda Miadlarını da oto. olarak kaydetmiş oluyoruz. Miad takibi yapmak ta çok kolay oluyor, File Makerla.

İlaç karekodu oluştururken mantık şu.

0108699517150302216000000222322117151231102ZV0008A

0108699517150302 -->ilaç barkodu 14 haneli

2160000002223221---> seri no 6-16 haneli.std bir değer yok.(Sorun da burdan oluyor zaten)

17151231--> Miadı

102ZV0008A--> LOT no

0108699517150302216000000222322117151231102ZV0008A...       2 17 var. 2. si gerekli

010869951601315821739000094089401718043010DJ6288...    .      2 17 var. 2. si gerekli

01086996930101172114014012914594639433-1716073110305203     2 17 var. 2. si gerekli

0108680881090493217075287-171702281000551                           3   17 var. 2. si gerekli

01086995160941712173900007947568-1717103110EV7345             4  17 var. 3. si gerekli

Burada Tarih alanının başındaki 17 yi buldurup arkasındaki 6 haneyi tarihe çevirip MİADI alanına yazdırıyorum.

Fakat seri nosu uzunluğu firmalar arası 6-16 haneye kadar değişiyor. İlk 17 yi bul dediğimde barkod içinde geçen bir 17 yi bulup işlem yapınca geçersiz bir tarih çıkıyor, bazan da tarih rakamlarına uyuyor ama olması gereken değil.

Ben kendimce şöyle bir çözüm yaptım. Daha iyisini tavsiye eden olursa öyle yapayım.

Minimum seri no sayısını esas alarak dedim ki 23. karakterden sonraki 17 yi bul tarihi hesapla.

Çıkan tarih alanı geçerli ise. Yeni kayıt aç.

Çıkan tarih alanı geçersiz ise 23. karakterden sonraki İKİNCİ 17 yi bul tarihi hesapla.

Çıkan tarih alanı geçerli ise. Yeni kayıt aç.

Çıkan tarih alanı geçersiz ise 23. karakterden sonraki ÜÇÜNCÜ  17 yi bul tarihi hesapla.

Çıkan tarih alanı geçerli ise. Yeni kayıt aç.

Çıkan tarih alanı geçersiz ise "İLAÇ FİRMASINI ARA. SİZİN YAPTIĞINIZ KAREKODUN..."

+++++

Bu işi yapanlar içinde o kadar cahiller var ki. Adam tarihi 170300 diye yazmış. Filemaker diyor ki böyle tarih olmaz. Adamlar yazmış ama. Koca ilaç firması. Onu da şöyle çözdüm. Tarih alanı içindeki güne denk gelen son 2 haneyi hep 28 e çeviriyorum. :)

+++++

Bu işlemler çok vaktimi aldı.% 90 ın üzerinde doğrulukta çalışıyor.

Ama problemliler için çözüm öneriniz var mı?

 

 

27, Haziran, 2016 Filemaker Advanced kategorisinde Optisyen (56,470 puan) tarafından soruldu
Tarih kısmını verince : 240213 bu şekilde veriyor, olması gereken 13.02.2024
Yıl-Ay-Gün şeklinde veriyor.bunu nasıl çevirdiniz? varsa bir örnekle memnun olurum, iyi çalışmalar
Right ( QR; 2) & "/"

Middle ( QR; 3; 2) & "/20"

Left ( QR; 2)
Elinize sağlık, oldu
Teşekkürler.

2 Cevaplar

+3 oy
 
En İyi Cevap

Merhaba,

Farklı bir yaklaşım olarak 17 değilde en son 10'u bulup ondan önceki 6 karaketer tarih mi diye bakabilabilir.Eğer son bulduğumuz karakter dizisi tarihse al, değilse bir önceki 10'a bak diyebiliriz.

Bu mantıkta küçük bir risk var, lot numarasında bir şekilde tarihe benzeyen değer içerebilir, mesela 1019120310 gibi. Bir kontrol daha olarak tarih için bulduğumuz data 17'yi takip edip etmediğini değerlendirirsek sonucun doğruluğunu artırabiliriz.

 

Şu şekilde özel fonksiyon bu hesaplamayı yapıyor:

Let ( 
[
uzunluk = Length ( KareKod ) ;
son10bul = Position ( KareKod ; 10 ; uzunluk ; -1 ) ;
tarih_text = Middle ( KareKod ; son10bul - 6 ; 6 ) ;
onyedimi = Middle ( KareKod ; son10bul - 8 ; 2 ) = 17  ;
tarih_date = Right ( tarih_text ; 2 ) & "." & Middle ( tarih_text ; 3 ; 2 ) & ".20" & Left ( tarih_text ; 2 ) 
] ;

Case (
      uzunluk < 10 ; "" ;
      IsValid ( GetAsDate ( tarih_date ) ) and onyedimi ; tarih_date ; 
      IlacTarihiBul ( Left ( KareKod ; son10bul - 1  ) ) 

)

 

Ekteki örnek dosyada örnek değerlerde test ettim, daha aykırı bir örnek yoksa %100 çalışır.

Ek: İlaç SKT Hesapla

 

 

27, Haziran, 2016 F. Osman Cabi (197,900 puan) tarafından cevaplandı
27, Haziran, 2016 Optisyen tarafından seçilmiş
Osman Bey, bu yöntem hiç aklıma gelmemişti. Hep 17 ile yatıp kalkıyoruz ya.!
Sizin gördüğünüz, bizim gözümüzden kaçmış.
Sanki buradan çözülür gibime geliyor. İlk fırsatta deneyip sonucu bildireceğim. İlginize teşekkürler.
Osman Bey; mevcuttaki 4000e yakın karekodu sizin dosyaya yükledim. 75 hatalı çıktı. Onlarda ilaç firmasının 180300 gibi tarihin Gün kısmına 00 yazdığı kayıtlar.
%99.99 oranında doğru çalıştı bence. Geri kalan % 0,1 de hiç önemli değil.
İlginize teşekkür ederim.
Osman hocam ben bunu atlamışım.
Çok güzel, "Tail Recursion" değil mi?
aynen öyle, Recursion severim :))
+1 oy
Barkod ile Karekod .stok kartında eşleştirilebiliyormu ? Eşleşme imkanı varsa kartlar açılırken tüm bilgiler girilir. Karekoduda barkod gibi alır. Barkod yerine karekoddan arama yapar.
27, Haziran, 2016 Goksel_Gokce (96,900 puan) tarafından cevaplandı
Stok kartında barkod, ilaç adı, firması, fiyat bilgisi var ama miadı yok.
karekod içinde ilk 01 den sonraki 14 rakam EAN 13 mantığında Stok kartında barkod ile eşleşip ilaç adını çektiriyoruz.
Burada miad bilgisi olmadığı için bu yoldan gidemeyiz.
Substitute ile yıl yerine boşluk koyun örn : 2016 Tekrar 2017 ... bu şekilde yılı tespit etmiş olursunuz ve barkodu ikiye bölmüş olursunuz. ilk parçanın son 4 rakamıda ay ve yıl olur :) Bunun için liste vardı bir ara custom function olarak ama çok önemli değil bir kaç yıl için uygulanabilir.
...