If Then Else ... :)

Merhabalar ;
Yazıcı şablonunda bazı etiket yada satırların değeri varsa çıksın, yoksa çıkmasın istiyorum.
Mesela adisyon etiketlerinden Ödeme Şekli, Para Üstü, Adisyon Notu gibi her fişte karşılığı olmayan etiketleri seçili olmasa bile BOŞ SATIR bırakarak her fişte 2-3 cm milli servetten zarar ettiriyor.
Aynı durum sipariş etiketlerinde geçerli değil ama, bunu adisyon etiketlerine nasıl uyarlayabilirim ?

Acemi bir cevap vereyim; soyle olabilir;

_IF  (burasi dogruysa)_                 ?
_bunu yap_                              TRUE KISMI
_ELSE_                                  :
_bunu yap_                               False kismi
_ENDIF_

Yukardaki logic normal anlasilir sekilde. Kisaltmali JScript yapisini kullaniyorlar sanirim, yani;

test ? expression1 : expression2

yani “?” soru isareti ve “:” cift nokta üst üste karsiliyor isteidginiz sonucu…

Örn;
[( '{BURASI NEYAPACAKSA }' ) > 1 ? '{BURASI True KISMI}' : '{Buda false kismi}']

  • ? isareti soruyu soruyor
  • Cift noktanin sol tarafi TRUE kismi
  • Cift noktanin sag kismi FALSE kismi

Sol kisim 1 den buyuk ise sol kismi yap,
degilse (?)
sag tarafi yap seklinde düsünebilirsiniz…

Umarim dogru anlatmisimdir :slight_smile:

1 Beğeni

Erkan, yukarıdaki kodlaman doğru ve [ENTITITES] kısmında çalışıyor ama aynı parametreler [LAYOUT] kısmında çalışmıyor. Yani bu mantıkta çalışan {ORDER TAGS} lar var. Sorun [LAYOUT] kısmında işe yaramıyor olması. Yada komut çalışsa bile yazıcıda ilgili satırı boş bırakarak kağıt israfına neden olması.

Bir yerde okumustum ama simdi bulamiyorum. Sanirim Print Tag larda kullanabilmek icin basina bir harf koyun diye tavsiye edilmisti.

Sablonu postalama imkanin varmi test etmek icin?

Tabiki buyrun …

[LAYOUT]
– General layout
<BMP>C:\Users\Public\Pictures\menu\sokakbasi\fislogo2.bmp
<T>HESAP DÖKÜMÜ
<L00>Tarih:{TICKET DATE} - Saat:{TIME}
{ENTITIES}
<L00>Adisyon No:{TICKET NO} -
<L00>Para Üstü :{TICKET TAG:Para Üstü}
<L00>Ödeme: {TICKET TAG:Ödeme Şekli}
<F>-
<L00>{NOTE}
<F>-
{ORDERS}
<F>=
<EB>
{DISCOUNTS}
[<J10>Toplam İkram:|{ORDER STATE TOTAL:İkram}]
{SERVICES}
<J10>Toplam:|{TICKET TOTAL}
{PAYMENTS}
<DB>
<F>=
<C10>A F İ Y E T O L S U N
[DISCOUNTS]
<J00>{CALCULATION NAME} %{CALCULATION AMOUNT}|{CALCULATION TOTAL}
[SERVICES]
<J00>{CALCULATION NAME}|{CALCULATION TOTAL}
[PAYMENTS]
<J00>{PAYMENT NAME}|{PAYMENT AMOUNT}
[ORDERS]
– Default format for orders
<J00>{QUANTITY} {NAME}|{TOTAL PRICE}
{ORDER TAGS}
[ORDERS:İkram]
– Format for gifted orders
<J00>- {QUANTITY} {NAME}|İKRAM
{ORDER TAGS}
[ORDERS:İade]
– Nothing will print for void lines
[ORDER TAGS]
– Format for order tags
<J00>[=TN(’{ORDER TAG QUANTITY}’) > 1 ? ’ {ORDER TAG QUANTITY}x’ : ’ '] {ORDER TAG NAME} {ORDER TAG PRICE}
[ENTITIES:Masa]
– Table entity format
<L00>Masa: {ENTITY NAME}
[ENTITIES:Müşteri]
– Customer entity format
<J00>Müşteri: {ENTITY NAME} - {ENTITY DATA:Telefon}
<J00>Adres:{ENTITY DATA:Adres}

şablon içerisinde bir değerin başına ve sonuna eklerseniz o etiketin bir değeri varsa yazar yoksa yazmaz.
Örn.
[{NOTE}] Bu şekilde yazdığınızda Adisyon Notunun içeriği varsa yazar yoksa yazmaz.

@mehmet hocam doğru evet ama bu kağıt israfını önlemiyor, sadece o satırı boş bırakıyor.

Mesela ;

[<J10>{NOTE}]

Veya Şu şekilde ;
Yani seçili ise OK
Seçili değilse yine yazıyor sadece sonuç boş.

[LAYOUT]
– General layout
<BMP>C:\Users\Public\Pictures\menu\sokakbasi\fislogo2.bmp
<T>HESAP DÖKÜMÜ
<L00>Tarih:{TICKET DATE} - Saat:{TIME}
{ENTITIES}
<L00>Adisyon No:{TICKET NO} -
[<C10>Ödeme Şekli: {TICKET TAG:Ödeme Şekli}]
[<C10>Para Üstü: {TICKET TAG:Para Üstü}]
<F>-
[<L00>{NOTE}]
<F>-

Ayrıca <L00> biçiminde köşeli parantez içinde 2 satır yazdığımda sadece satırın 1 tanesini yazdırıyor.

Mesela ;

[<L00>Ödeme Şekli: {TICKET TAG:Ödeme Şekli}]
[<L00>Para Üstü: {TICKET TAG:Para Üstü}]

olduğunda Para Üstü etiketini yazdırıyor ama Ödeme Şeklini yazdırmıyor.

asagidaki sekilde denersen sanirim olmasi lazim;

Layout bölümünde Kullandigim syntax;

[LAYOUT]
<T>Ticket
<L00>Date:{TICKET DATE}
<L00>Time:{TIME}
<L00>Table:{ENTITY NAME:Table}
<L00>Ticket No:{TICKET NO}
<F>-
{ORDERS}
[='{NOTE}' != '' ?  '<L00>Girilen Note: {NOTE}' : '' ]
<F>-

[ORDERS]
<L00>- {QUANTITY} {NAME}
{ORDER TAGS}

[ORDERS:Void]
<J00>- {QUANTITY} {NAME}|**Void**
{ORDER TAGS}

[ORDER TAGS]
-- Format for order tags
<L00>     * {ORDER TAG NAME}

Yani Girilen Note BOS degilse, yaz diye basit bir sorgulama olmasi lazim. Senin örneginde ise, “Ödeme Şekli:” ve Para Üstü metinlerin her halukarda yazilacak. Dönen degerler ister bos olsun ister dolu olsun fark etmiyor. Yani kontrol mekanizmasi yok. Text herlukarda kagida yazilacak…

Layout bolumunde kullanacagin TICKET TAG larda ayni mantik ile calismasi lazim. Aynen NOTE de oldugu gibi…

Saygilar

Layout bölümünde 1 den fazla sorgulama da yapilabiliyor. Örnegin ben PersonCount (kisi sayisini gir) etiketini kullaniyorum;

[LAYOUT]
<T>Ticket
<L00>Date:{TICKET DATE}
<L00>Time:{TIME}
<L00>Table:{ENTITY NAME:Table}
<L00>Ticket No:{TICKET NO}

<F>-

[='{TICKET TAG:Personenanzahl}'  > 0  ? '<L00>Person Count: {TICKET TAG:Personenanzahl}' : '']

[='{NOTE}' != '' ?  '<L00>Girilen Note: {NOTE}' : '' ]

Dikkat: Ticket Tag numeric secildigi icin >0 kullanabiliyorum…

1 Beğeni

@erkan_kaplan Note kısmı işe yarıyor ama Ticket Tag maalesef çalışmıyor.

Odeme Sekli olarak tanimladigi yer, numeric mi yoksa alpfanumeric mi?

Eger Alpfanumeric ise >0 yerine != ‘’ kullanmaniz gerekli. Yani bos degil ise.
Eger numeric ise >0 kullanabilirsiniz. Yani sifirdan büyük ise.

Ödeme şeklinde sayısal değer giremeyiz zaten, Para Üstü etiketini şimdi Sayısal olarak değiştirdim ve etikerleri de 20-50-100 şeklinde düzenledim ama işe yaramadı. Yaramadı derken kod çalıştı ama etiket seçili olmasına rağmen sonucu yazmadı.

Sorunu @erkan_kaplan sayesinde çözdük, lazım olan arkadaşlara da kaynak olması açısından aşağıya şablonu ekliyorum.
Tabi bu arada etiketlerin sayısal veya alfasayısal olması gerekliliğini de belirtelim. Mesela şablondaki Ödeme Şekli etiketi için kullanılan kodlama alfasayısal olarak seçilmiştir, Para Üstü etiketi sayısal olarak seçilmiş ve etiketlerde sayısal olarak girilmiştir.

[LAYOUT]
– General layout
<T>HESAP DÖKÜMÜ
<L00>Tarih:{TICKET DATE} - Saat:{TIME}
{ENTITIES}
<L00>Adisyon No:{TICKET NO}
[=’{TICKET TAG:Para Üstü}’ > 0 ? ‘<L00>Para Üstü: {TICKET TAG:Para Üstü}’ : ‘’]
[=’{TICKET TAG:Ödeme Şekli} ’ !=’’ ? ‘<L00>Ödeme Şekli: {TICKET TAG:Ödeme Şekli} TL ‘:’’]
[=’{NOTE}’ != ‘’ ? ‘<L00>Not: {NOTE}’ : ‘’ ]
<F>=

1 Beğeni

@erkan_kaplan Aynı kodları HTML şablonunda kullanamıyorum, farklı bir şeymi yapmak gerekiyor ?

Teori olarak ayni kodlari kullanabilmen gerekli, sadece TR /TD ve TABLE icinde nerde kullanacagina bagli olarak syntax degisebilir.

HTML kodu paste edersen, hemen bakabiliriz.