mojaSymfonia FORUM
https://forum.mix-soft.pl/

Co to za czcionka EFN KK 128 stosowana do druku kodów kresk.
https://forum.mix-soft.pl/viewtopic.php?f=5&t=1781
Strona 1 z 2

Autor:  quariq9 [ 2010-02-24, 12:05 ]
Tytuł:  Co to za czcionka EFN KK 128 stosowana do druku kodów kresk.

Standardowo po instalacji Symfonii Premium 2009 Środki Trwałe ->Ustawienia ->Drukarki Graficzne standardową czcionką pod pozycją "kodKreskowy" widnieje czcionka EFN KK 128.

Dosłownie co to jest ta czcionka? Przeszukałem google i nie znalazłem takiego tworu. Jakiego standardu kodowania używa ta czcionka czy może to jest sam w sobie standard?

Czy jest to może to samo co EAN-128 albo code 128?

Autor:  Misiek [ 2010-02-24, 13:58 ]
Tytuł: 

To są czcionki do wydruku Etykiet Środków Trwałych z graficznym kodem kreskowym/paskowym. Producentem jest firma Fonty.pl, link do czcionek http://fonty.pl/sklep,10,kody_kreskowe_barcodes.htm

Czcionka ma za zadanie zamienić tekst na kod paskowy/graficzny kod kreskowy który później czyta kolektor/inwentaryzator danych wspomagając inwentaryzację Środków Trwałych. Standardowo obsługuje i drukuje podstawowy zestaw 128 pierwszych kodów ASCI, prawidłowo je przetwarza i drukuje - nie są obsługiwane POLSKIE znaki, więc pojawią się "krzaki" jeżeli coś takiego byśmy drukowali.

Czcionka drukuje dane w systemie CODE128 inaczej określanym jako EAN128, szczegółowe informacje można znaleźć na podanej stronie fonty.pl lub na Wikipedii, tam bardziej szczegółowo z podanymi algorytmami http://pl.wikipedia.org/wiki/Kod_128

Jeżeli potrzebujesz jakiś dodatkowych informacji to pytaj, może coś jeszcze będę mógł napisać w tym temacie :-)

Autor:  quariq9 [ 2010-02-24, 14:44 ]
Tytuł: 

Dzięki za szczegółowe informacje. Rzeczywiście po Twoim poście potwierdziłem doświadczalnie, że oba te kody to te same :). Mam problem, ponieważ kolektor nie czyta kodów drukowanych przez raport - odkryłem, że problemem jest chyba albo 1) szerokością białych czarnych pasków, lub 2) odstępu pomiędzy nimi ale to chyba już w innym dziale mogę liczyć na pomoc. Nie wiem gdzie mogę ustawić stosunek pasków i wyżej wymienione parametry drukowanego kodu.

Autor:  quariq9 [ 2010-02-24, 14:55 ]
Tytuł: 

OK - problem nie jest z drukarką a narzuconą rozdzielczością. Jak drukuję etykietę w ZebraDesigner - wszystko jest w porządku - wszystkie kreski wyrysowane.

Jak drukuje w symfonii to część kresek kodu jest pochłonięta przez sąsiadujące kreski ...

Autor:  Misiek [ 2010-02-24, 15:06 ]
Tytuł: 

Nie wiem czy napisałeś prawidłowo algorytm, ale do tej czcionki czcionki dostarczany jest dodatkowo programik do generowania kodów kreskowych, który podaje prawidłowy zestaw znaków jaki później będzie obsłużony przez tą czcionkę, np.:

treść do przedstawienia w formie kodu paskowego: forum.mojasymfonia.pl
treść jaką przekazać należy do tekstu objętego czcionką: {forum.mojasymfonia.pli~
efekt finalny:

{tu był kiedyś link do screena}

Firma dostarcza również algorytm i kod źródłowy do generowania znaków specjalnych i pełnej treści tekstu pod czcionkę.

Autor:  quariq9 [ 2010-02-24, 15:21 ]
Tytuł: 

Nie pisałem algorytmu w raporcie - korzystam z gotowego raportu Etykiety środków trwałych - graficzny gdzie za translacje ASCII na odpowiada ta linijka

SetStyl(Styl(KK, 0))
print (using "%c%s%c%c", C128_ASCII_START, strNumerEwid, SumaKontrolna(strNumerEwid), C128_ASCII_STOP); LF

gdzie:

#define C128_START 104
#define C128_ASCII_START 204
#define C128_ASCII_STOP 206

//--------------------------------------------
int sub SumaKontrolna(string tekst)
//--------------------------------------------
int i, kod, suma
for i = 1 to i > len(tekst)
kod = tekst(i)
suma += (kod - 32) * i
next i
suma += C128_START
SumaKontrolna = suma % 103
if SumaKontrolna > 94 then
SumaKontrolna += 100
else
SumaKontrolna += 32
endif
endsub


Czy ten kod jest w porządku? Dodam, że drukuje kody bezpośrednio z Symfonii za pomocą raportu.

Dodatkowo jeżeli chcę wydrukować kod ADAM w standardowym rozmiarze to linie się zlewają ale jeżeli wydrukuję znacznie powiększony KOD "aż do przesady" to dzięki temu widoczne są te brakujące linie.
Czy ten opis sytuacji ma dla Ciebie sens? :D

Autor:  Misiek [ 2010-02-25, 23:04 ]
Tytuł: 

quariq9 pisze:
Mam problem, ponieważ kolektor nie czyta kodów drukowanych przez raport - odkryłem, że problemem jest chyba albo 1) szerokością białych czarnych pasków, lub 2) odstępu pomiędzy nimi ale to chyba już w innym dziale mogę liczyć na pomoc. Nie wiem gdzie mogę ustawić stosunek pasków i wyżej wymienione parametry drukowanego kodu.

Nie ma czegoś takiego jak ustawianie szerokości białych i czarnych linii w kodzie kreskowym lub odstępów - to po prostu obsługuje sama czcionka i kody sterujące do niej, czyli działanie algorytmu generującego, to co podawałem wcześniej z przykładem słowa forum.mojasymfonia.pl

A czy możesz zrobić prosty test - zapisz w swoim raporcie jakoś prosty kod kreskowy EAN/CODE-128 i wklej na forum, jakie to kod oraz jakie dane przekazujesz do wydruku kodu, czyli to co otrzymałeś po przepuszczeniu kodu przez algorytm wyliczający sumę kontrolną, zobaczymy czy masz takie same wyniki jak ja - na tym etapie widzę takie właśnie rozwiązanie. Proponuję jakiś prosty kod, czy to tekstowy z cyframi czy same cyfry, zarobaczymy co z tego wyjdzie :-)

Autor:  Misiek [ 2010-02-25, 23:11 ]
Tytuł: 

quariq9 pisze:
OK - problem nie jest z drukarką a narzuconą rozdzielczością. Jak drukuję etykietę w ZebraDesigner - wszystko jest w porządku - wszystkie kreski wyrysowane.

Jak drukuje w symfonii to część kresek kodu jest pochłonięta przez sąsiadujące kreski ...

My sprzedajemy raporty do wydruku etykiet właśnie z takimi kodami paskowymi/kreskowymi, czy to EAN8/EAN13 czy też EAN-128/CODE-128, nie zdarzyło się aby jakiś taki efekt występował, nikt nam takiego przypadku nie zgłaszał. Raport drukuje etykiety na zwykłym papierze A4 (drukarka laserowa lub "plujka"), najlepiej jeżeli posiadasz papier A4 samoprzylepny, podzielony już fabrycznie na etykiety - zwykła laserówka może tutaj zastąpić specjalną drukarkę do kodów/etykiet.
Naturalnie obsługujemy również drukarki Zebra i innych producentów, w sumie bez znaczenia model i firma - ważne aby Symfonia widziała sterownik tej drukarki i już można przekazać etykiety do wydruku - taka drukarka jest znacznym ułatwieniem pracy, lepsze rozwiązanie niż kartka A4.

Wracając do meritum - przypadek bardzo dziwny, możesz tutaj podłączyć PDF'a z wydruku takiego kodu ?, zobaczymy jak to wygląda...

Autor:  Misiek [ 2010-02-26, 10:25 ]
Tytuł: 

quariq9 pisze:
Nie pisałem algorytmu w raporcie - korzystam z gotowego raportu Etykiety środków trwałych - graficzny gdzie za translacje ASCII na odpowiada ta linijka

Czy ten kod jest w porządku? Dodam, że drukuje kody bezpośrednio z Symfonii za pomocą raportu.

Dodatkowo jeżeli chcę wydrukować kod ADAM w standardowym rozmiarze to linie się zlewają ale jeżeli wydrukuję znacznie powiększony KOD "aż do przesady" to dzięki temu widoczne są te brakujące linie.
Czy ten opis sytuacji ma dla Ciebie sens? :D

Jak dla mnie wyniki działania tego kodu są dość dziwne, przykład z naszego podwórka:
- tekst przedstawienia w postaci kodu kreskowego/paskowego CODE-128/EAN-128: 000ABC123DEF456GHI789
- aplikacja EFN dostarczona przez producenta generuje kod: {000ABC123DEF456GHI789I~ lub |000ABC123DEF456GHI789J~ (w zależności od subsetu A lub B)
- Twój kod generuje treść:
Obrazek
- algorytm z naszego raportu do wydruku etykiet daje treść: {000ABC123DEF456GHI789I~ czyli identyczną jak aplikacja producenta,

Zamień np. w Wordzie lub Wordpadzie tekst generowany przez nasz raport lub któryś z kodów generowanych przez producenta na kod paskowy 128, wydrukuj, sprawdź czy czytnik/kolektor prawidłowo odczytuje ten kod i jaką wartość zapisuje, czy jest poprawna z tą zapisaną - ja mogę jedynie przypuszczać że kod wyliczania sum kontrolnych jest nie prawidłowy dla tej czcionki lub coś pominąłeś w algorytmie...

Autor:  quariq9 [ 2010-03-01, 10:17 ]
Tytuł: 

Witam,

Problem z drukowaniem jest taki, że mogę wydrukować tylko etykiety 3x5cm.
Mogę wydrukować A4 na zwykłej laserówce ale będzie to już inna drukarka co ma wpływ na rozwiązanie problemu.


Stworzyłem dokument word gdzie zapisałem kod forum.mojasymfonia.pl (bez spacji na końcu) w postaci kodu za pomocą czcionki EFN KK 128.
Potem to samo zrobiłem z {forum.mojasymfonia.pli~

Wynik:
Obrazek


Wygenerowałem kod przez raport i wydrukowałem jako PDF:

Poniżej w normalnym rozmiarze.

Obrazek
Jak widać pierwsze dwie kreski gruba i cienka prawie zlewają się i możliwe, że podobny efekt powstaje na wydruku na etykiecie. Tyle że kod wydrukowany przez drukarkę jest czysty i klarowny nie dający możliwości podejrzeń, że gdzieś zlewają się kreski (moja teoria)

Tutaj to samo tylko powiększony

Obrazek
Tu jak widać kod jest czysty i wyraźny bez zlewających się kresek.



Tekst zakodowany przez ZebraDesigner:
Obrazek

Wydruk tego kodu przez program ZebraDesigner na drukarce jest identyczny jak w projekcie, ten sam jak PDF.
Czemu WORD generuje inny kod?


Na deser kod wygenerowany przez raport i wydrukowany na drukarce:
Obrazek

Jak widać kod różni się od tych powyższych. Ten kod został zakodowany poprzez raport z użyciem czcionki EFN KK 128.

Kod wygląda bardzo podobnie z tym, że brakuje części wąskich kresek.
Czytnik nie czyta ostatniego kodu ale nie ma problemów z rozpoznaniem kodu z ZebraDesigner.
Tak samo kod generowany przez raport ALE wysłany do PDF i wydrukowany na zwykłej laserówce jest czytelny przez czytnik.
Czytnik nie czyta jedynie kod wygenerowanego przez raport i wydrukowanego przez drukarkę etykiet Zebra.

Poniżej zamieszczam pełen raport.

//1,"etykiety.sc","Etykiety środków trwałych - graficzny","Środki trwałe",0,3.0.4,SYSTEM,11
// Symfonia Środki Trwałe
// Etykiety środków trwałych
// (C) 2001 MATRIX.PL

#define COLS_DEF 3
#define ROWS_DEF 10

#define DOD_YMIN 165
#define DOD_XMIN 265

#define EN_KILLFOCUS 0x200

#define KK_DEF_FONT_SIZE 25.0 //było 52
#define SZER_DO_WYS 12.5
#define SZER_DO_ROZMIAR 0.083
#define MAX_SZER_KODU_DO_SZER_ET 0.99 //było 0.9
#define MAX_WYS_KODU_DO_WYS_ET 0.80 //bylo 0.18

#define TEST 3
#define OK 2

#define C128_START 104
#define C128_ASCII_START 204 //135
#define C128_ASCII_STOP 206 //137

long idgrupy = val(Arg0)
int typ = val(Arg1)

int iOrientacja = 0, iNieCalaStrona = 0, iRamki = 1, iKodKreskowy = 1, iZCzesciami = 1, iSTZCzesciami = 0, iZNazwaFirmy = 0
string strMLewy, strMPrawy, strMDolny, strMGorny, strRamki, strKodKreskowy, strSTZCzesciami, strZCzesciami, strZNazwaFirmy
string strCols, strRows

iOrientacja = VAL(GetIni("Etykiety środków trwałych", "Orientacja"))
strCols = GetIni("Etykiety środków trwałych", "Kolumny")
strRows = GetIni("Etykiety środków trwałych", "Wiersze")
strMLewy = GetIni("Etykiety środków trwałych", "Lewy")
strMPrawy = GetIni("Etykiety środków trwałych", "Prawy")
strMGorny = GetIni("Etykiety środków trwałych", "Gorny")
strMDolny = GetIni("Etykiety środków trwałych", "Dolny")
strRamki = GetIni("Etykiety środków trwałych", "Ramki")
strKodKreskowy = GetIni("Etykiety środków trwałych", "KodKreskowy")
strZCzesciami = GetIni("Etykiety środków trwałych", "ZCzesciami")
strSTZCzesciami = GetIni("Etykiety środków trwałych", "STZCzesciami")
strZNazwaFirmy = GetIni("Etykiety środków trwałych", "ZNazwaFirmy")

if strRamki != "" then iRamki = val(strRamki)
if strKodKreskowy != "" then iKodKreskowy = val(strKodKreskowy)
if strZCzesciami != "" then iZCzesciami = val(strZCzesciami)
if iZCzesciami then
if strSTZCzesciami != "" then iSTZCzesciami = val(strSTZCzesciami)
endif
if strZNazwaFirmy != "" then iZNazwaFirmy = val(strZNazwaFirmy)
if strCols == "" then strCols = using "%d", COLS_DEF
if strRows == "" then strRows = using "%d", ROWS_DEF
if strMLewy == "" then strMLewy = "0"
if strMPrawy == "" then strMPrawy = "0"
if strMGorny == "" then strMGorny = "0"
if strMDolny == "" then strMDolny = "0"

int idRadio1, idRadio2, idBut1, idCols, idRows, idFill, idClear, idChk1, idChk2
int idLewy, idPrawy, idGorny, idDolny
int idEtykiety(1)
int Etykiety(1)
int l, iNiePropaguj = 0

int iLiczbaEtykiet = val(strCols) * val(strRows)
if iLiczbaEtykiet > 0 then
grow idEtykiety, iLiczbaEtykiet - 1
grow Etykiety, iLiczbaEtykiet - 1
endif

for l = 1 to l > iLiczbaEtykiet
Etykiety(l) = 1
next l

//--------------------------------------------
int sub OnCommand_1(int id, int msg)
//--------------------------------------------
int i

select case id
case idFill
for i = 1 to i > (val(strCols) * val(strRows))
SetVal(idEtykiety(i), 1)
next i
case idClear
for i = 1 to i > (val(strCols) * val(strRows))
SetVal(idEtykiety(i), 0)
next i
endselect
Save
endsub

//--------------------------------------------
int sub OknoDodatkowe(int iDrukujWszystkie, int iNumerStrony)
//--------------------------------------------
int i, j, n, iCols, iRows, iRetVal, size_x, size_y
iRows = val(strRows)
iCols = val(strCols)

size_x = iCols * 15 + 185
size_y = iRows * 15 + 80

if size_x < DOD_XMIN then size_x = DOD_XMIN
if size_y < DOD_YMIN then size_y = DOD_YMIN

Form (using "Wybierz etykiety... (strona %d)", iNumerStrony), size_x, size_y + 40
Group (using " Strona %d ", iNumerStrony), 10, 5, iCols * 15 + 55, iRows * 15 + 45
Button "&OK", size_x - 100, 15, 80, 24, 2
idFill = Button "&Wypełnij", size_x - 100, 75, 80, 24, 1
idClear = Button "&Zeruj", size_x - 100, 105, 80, 24, 1
for j = 1 to j > iCols
Text (using "%d", j), j * 15 + 30, 20, 15, 15
next j
n = 1
for i = 1 to i > iRows
for j = 1 to j > iCols
if iDrukujWszystkie then
Etykiety(n) = 1
endif
idEtykiety(n) = ChkBox "", Etykiety(n), j * 15 + 30, 15 * i + 20, 15, 15
n += 1
next j
Text (using "%d", i), 25, 15 * i + 20, 15, 15
next i
ChkBox " Pokaż ten dialog przy drukowaniu nast. strony", iNiePropaguj, 10, size_y - 20, 240, 24
iRetVal = ExecForm OnCommand_1
endsub

//--------------------------------------------
int sub OnCommand(int id, int msg)
//--------------------------------------------
int i, marg

select case id
case 0
if msg == 0 then
Load
Enable(idBut1, 0)
if iZCzesciami == 0 then
iSTZCzesciami = 0
Enable(idChk2, 0)
endif
endif
case idBut1
Save
OknoDodatkowe(1, 1)
case idRows
if msg == EN_KILLFOCUS then
if val(GetVal(idRows)) > 0 then
iLiczbaEtykiet = val(GetVal(idCols)) * val(GetVal(idRows))
if iLiczbaEtykiet > 0 then
shrink idEtykiety, -1
shrink Etykiety, -1
grow idEtykiety, iLiczbaEtykiet - 1
grow Etykiety, iLiczbaEtykiet - 1
endif
for i = 1 to i > iLiczbaEtykiet
Etykiety(i) = 1
next i
Save
else
message "Liczba wierszy musi być większa od zera!"
SetVal(idRows, using "%d", ROWS_DEF)
endif
endif
case idCols
if msg == EN_KILLFOCUS then
if val(GetVal(idCols)) > 0 then
iLiczbaEtykiet = val(GetVal(idCols)) * val(GetVal(idRows))
if iLiczbaEtykiet > 0 then
shrink idEtykiety, -1
shrink Etykiety, -1
grow idEtykiety, iLiczbaEtykiet - 1
grow Etykiety, iLiczbaEtykiet - 1
endif
for i = 1 to i > iLiczbaEtykiet
Etykiety(i) = 1
next i
Save
else
message "Liczba kolumn musi być większa od zera!"
SetVal(idCols, using "%d", COLS_DEF)
endif
endif
case idRadio1
Enable(idBut1, 0)
case idRadio2
Enable(idBut1, 1)
case idLewy, idPrawy, idDolny, idGorny
if msg == EN_KILLFOCUS then
marg = val(GetVal(id))
SetVal(id, (using "%d", marg))
endif
case idChk1
if iZCzesciami then
iZCzesciami = 0
iSTZCzesciami = 0
Enable(idChk2, 0)
else
iZCzesciami = 1
Enable(idChk2, 1)
endif
endselect
endsub

//--------------------------------------------
int sub opis(int a)
//--------------------------------------------
endsub

//--------------------------------------------
int sub SumaKontrolna(string tekst)
//--------------------------------------------
int i, kod, suma
for i = 1 to i > len(tekst)
kod = tekst(i)
suma += (kod - 32) * i
next i
suma += C128_START
SumaKontrolna = suma % 103
if SumaKontrolna > 94 then
SumaKontrolna += 100
else
SumaKontrolna += 32
endif
endsub

//********************************************
FORM " Etykiety środków trwałych", 360, 435
//********************************************

Group " Orientacja strony ", 25, 10, 220, 50
RadioBtn " Pio&nowa", iOrientacja, 55, 30, 75, 20
RadioBtn " Po&zioma", iOrientacja, 155, 30, 75, 20
idCols = Edit "Liczba &kolumn:", strCols, 120, 75, 20, 18
idRows = Edit "Liczba wie&rszy:", strRows, 120, 95, 20, 18
Group " Drukuj etykiety ", 25, 125, 220, 70
idRadio1 = RadioBtn " Wszy&stkie na stronie", iNieCalaStrona, 40, 145, 120, 17
idRadio2 = RadioBtn " Wy&brane", iNieCalaStrona, 40, 170, 75, 17
idBut1 = Button "&Wybierz..." , 168, 165, 70, 24, 1

Group " Marginesy (x 0.1 mm) ", 25, 200, 220, 70
idLewy = Edit "&Lewy:", strMLewy, 95, 220, 30, 18
idGorny = Edit "&Górny:", strMGorny, 185, 220, 30, 18
idPrawy = Edit "&Prawy:", strMPrawy, 95, 240, 30, 18
idDolny = Edit "&Dolny:", strMDolny, 185, 240, 30, 18

ChkBox " Drukuj obramowania wokół &etykiet", iRamki, 25, 280, 200, 24
ChkBox " Drukuj nr ewidencyjny w postaci kodu kre&skowego", iKodKreskowy, 25,300, 270, 24
idChk1 = ChkBox " Drukuj etykiety dla &części składowych", iZCzesciami, 25, 320, 270, 24
idChk2 = ChkBox " Drukuj również etykietę dla samego środka", iSTZCzesciami, 40, 340, 270, 24
ChkBox " Drukuj nazwę skróconą firmy", iZNazwaFirmy, 25, 360, 270, 24

Button "&OK", 260, 15, 80, 24, 2
Button "&Anuluj" , 260, 45, 80, 24, -1
Button "&Test" , 260, 100, 80, 24, 3

int iReturn = ExecForm OnCommand

if (iReturn != 2 && iReturn != 3) then error ""

PutIni("Etykiety środków trwałych", "Orientacja", (using "%d", iOrientacja))
PutIni("Etykiety środków trwałych", "Kolumny", strCols)
PutIni("Etykiety środków trwałych", "Wiersze", strRows)
PutIni("Etykiety środków trwałych", "Lewy", strMLewy)
PutIni("Etykiety środków trwałych", "Prawy", strMPrawy)
PutIni("Etykiety środków trwałych", "Gorny", strMGorny)
PutIni("Etykiety środków trwałych", "Dolny", strMDolny)
PutIni("Etykiety środków trwałych", "Ramki", (using "%d", iRamki))
PutIni("Etykiety środków trwałych", "KodKreskowy", (using "%d", iKodKreskowy))
PutIni("Etykiety środków trwałych", "ZCzesciami", (using "%d", iZCzesciami))
if iZCzesciami then
PutIni("Etykiety środków trwałych", "STZCzesciami", (using "%d", iSTZCzesciami))
else
PutIni("Etykiety środków trwałych", "STZCzesciami", (using "%d", 0))
endif
PutIni("Etykiety środków trwałych", "ZNazwaFirmy", (using "%d", iZNazwaFirmy))

#include "rp_const_sci"
#include "hf_all_sci"

string nazwaRaportu = ""
string podtytulRaportu = ""

if iOrientacja == 0 then
SetStrona(300,0,0)
else
SetStrona(300,0,0)
endif

strona val(strMLewy), val(strMGorny), val(strMPrawy), val(strMDolny) //buduje strone o podanych marginesach w 0,1mm

int iSzerEtykiety, iWysEtykiety
iSzerEtykiety = (str.szer) / val(strCols) - 1
iWysEtykiety = (str.wys) / val(strRows) - 1
int i, j, k

//message using "szer: %d, wys: %d", str.Szer, str.Wys
//message using "szer: %d, wys: %d", iSzerEtykiety, iWysEtykiety

int iSzerKoduWedlugWysEt, iSzerKoduWedlugSzerEt, iRozmiarFontu

iSzerKoduWedlugSzerEt = iSzerEtykiety * MAX_SZER_KODU_DO_SZER_ET
iSzerKoduWedlugWysEt = iWysEtykiety * MAX_WYS_KODU_DO_WYS_ET * SZER_DO_WYS

//message using "%d, %d", iSzerKoduWedlugSzerEt, iSzerKoduWedlugWysEt

if iSzerKoduWedlugSzerEt > iSzerKoduWedlugWysEt then
iRozmiarFontu = SZER_DO_ROZMIAR * iSzerKoduWedlugWysEt
else
iRozmiarFontu = SZER_DO_ROZMIAR * iSzerKoduWedlugSzerEt
endif

int aNazwaB = CopyFont("arialDEF", 1, iRozmiarFontu * (40 / KK_DEF_FONT_SIZE))
int aNrP = CopyFont("arialDEF", 0, iRozmiarFontu * (30 / KK_DEF_FONT_SIZE))
int aNrE = CopyFont("arialDEF", 0, iRozmiarFontu * (25 / KK_DEF_FONT_SIZE))
int aNrEBig = CopyFont("arialDEF", 1, iRozmiarFontu * 1.2) //było 1.2

// - sekcja odpowiedzialna za wielkosc fontu do wypisania kodu kreskowego
// było int KK = CopyFont("kodKreskowy", 0, iRozmiarFontu)

int KK = CopyFont("kodKreskowy", 1, 30) //wartosc 200 spowodowała podzielenie kodu na dwie czesci - czyli jest ograniczenie szerokosci
int tOdstep = CopyFont("timesDEF", 0, 5)

string strNumerEwid = ""
if iReturn == TEST then
k = 1
for i = 1 to i > val(strRows)
for j = 1 to j > val(strCols)
if Etykiety(k) then
Ramka at ((j - 1) * iSzerEtykiety), ((i - 1) * iWysEtykiety), iSzerEtykiety - 1, iWysEtykiety - 1, iRamki, 0
if iZNazwaFirmy then
SetStyl(Styl(aNrE, 1))
print LF; Firma.Nazwa; " "; LF
SetStyl(Styl(tOdstep, 0))
endif
print LF
SetStyl(Styl(aNazwaB, 0))
print (using "Środek testowy\nnr %d", k); LF
SetStyl(Styl(aNrP, 0))
print (using "Numer porządkowy: %d", k); LF; LF
strNumerEwid = using "STmx %d/368/XI/00", k
if iKodKreskowy then
SetStyl(Styl(KK, 0))
print (using "%c%s%c%c", C128_ASCII_START, strNumerEwid, SumaKontrolna(strNumerEwid), C128_ASCII_STOP); LF
SetStyl(Styl(aNrE, 0))
print "Numer ewidencyjny: "; strNumerEwid
else
SetStyl(Styl(aNrEBig, 0))
print strNumerEwid; LF
SetStyl(Styl(aNrE, 0))
print "Numer ewidencyjny"
endif
koniec
endif
k += 1
next j
next i
goto wyjdz
endif

long idSrodka // long idSrodka Identyfikator środka trwałego.
InfoSrodek ISSrodek // obiekt predefiniowany Jest to definicja obiektu przechowującego informację o środku trwałym. CZYLI ISSrodek to obiekt majacy info o srodku trwałym
int iNrStrony = 1
int iCzesci = 0
int iBylyCzesci = 0
InfoWynik CzescSkl //Jest to definicja obiektu zawierającego zestaw atrybutów, stosowanych do przechowywania informacji o wynikach niektórych obliczeń wykonywanych w raportach.


string strNrEwidSr, strNrPorz
string tabZamiana(2) = (using "%c", 32), (using "%c", 159)
i = 1
j = 1
k = 1

if iReturn == OK then
if !WybierzSrodki(idgrupy, typ, 0) then message "sErrBlednaGrupa" : error ""
idSrodka = GetFirst() // GetFirst pobiera pierwszy sodek z grupy
//idSrodka Identyfikator środka trwałego.

while idSrodka

if !iCzesci then
if !Srodek(ISSrodek, idSrodka) then message "Brak danych środka" : error ""
if iZCzesciami && SrodekPosiadaCzesciSkl(idSrodka) && !iBylyCzesci then
KolejnaCzescSkladowa(CzescSkl)
strNrEwidSr = ISSrodek.NumerEwid
iCzesci = 1
endif
endif

strNrPorz = using "%d", ISSrodek.Numer

if iCzesci then
ISSrodek.Nazwa = CzescSkl.Opis1
if strNrEwidSr != "" then ISSrodek.NumerEwid = using "%s~%d", strNrEwidSr, CzescSkl.Wartosc2
strNrPorz += using "(%d)", CzescSkl.Wartosc2
endif

if Etykiety(k) then
Ramka at ((j - 1) * iSzerEtykiety), ((i - 1) * iWysEtykiety), iSzerEtykiety - 1, iWysEtykiety - 1, iRamki, 0
if iZNazwaFirmy then
SetStyl(Styl(aNrE, 1))
print LF; Firma.Nazwa; " "; LF
SetStyl(Styl(tOdstep, 0))
endif
print LF

//drukowanie nazwy srodka
// SetStyl(Styl(aNazwaB, 0))
// print ISSrodek.Nazwa; LF

//drukowanie numeru poradkowego
// SetStyl(Styl(aNrP, 0))
// print "Numer porządkowy: "; strNrPorz; LF; LF
if ISSrodek.NumerEwid != "" then
buf = ISSrodek.NumerEwid
replace "ą", "a"
replace "Ą", "A"
replace "ć", "c"
replace "Ć", "C"
replace "ę", "e"
replace "Ę", "E"
replace "ł", "l"
replace "Ł", "L"
replace "ń", "n"
replace "Ń", "N"
replace "ó", "o"
replace "Ó", "O"
replace "ś", "s"
replace "Ś", "S"
replace "ź", "z"
replace "Ź", "Z"
replace "ż", "z"
replace "Ż", "Z"
if iKodKreskowy then
//ta czesc odpowiada za konwersje numeru ewidencyjnego ..PUP-011-4/3123468hÎ w kod kreskowy
SetStyl(Styl(KK, 0)) // po wycieciu tego wyszlo ..PUP-011-4/3123468hÎ
print (using "%c%s%c%c", C128_ASCII_START, Translate(buf, tabZamiana), SumaKontrolna(buf), C128_ASCII_STOP); LF
print (using "%c%s%c%c", C128_ASCII_START, Translate(buf, tabZamiana), SumaKontrolna(buf), C128_ASCII_STOP); LF
print (using "%c%s%c%c", C128_ASCII_START, Translate(buf, tabZamiana), SumaKontrolna(buf), C128_ASCII_STOP); LF
print (using "%c%s%c%c", C128_ASCII_START, Translate(buf, tabZamiana), SumaKontrolna(buf), C128_ASCII_STOP); LF
print (using "%c%s%c%c", C128_ASCII_START, Translate(buf, tabZamiana), SumaKontrolna(buf), C128_ASCII_STOP); LF
print (using "%c%s%c%c", C128_ASCII_START, Translate(buf, tabZamiana), SumaKontrolna(buf), C128_ASCII_STOP); LF
SetStyl(Styl(aNrE, 0))
print ""; buf //było Numer ewidencyjny: "
else
SetStyl(Styl(aNrEBig, 0))
print buf; LF
SetStyl(Styl(aNrE, 0))
print "" //było Numer ewidencyjny: "
endif
endif
koniec

if iCzesci then
if !KolejnaCzescSkladowa(CzescSkl) then
iCzesci = 0
if !iSTZCzesciami then
idSrodka = GetNext()
iBylyCzesci = 0
else
iBylyCzesci = 1
endif
endif
else
idSrodka = GetNext()
iBylyCzesci = 0
endif
endif

if idSrodka then
j += 1
if j > val(strCols) then
j = 1
i += 1
endif

k += 1
if k > iLiczbaEtykiet then
i = 1
j = 1
k = 1
str.Nowa()
iNrStrony += 1
if iNiePropaguj then
OknoDodatkowe(0, iNrStrony)
endif
endif
endif

wend
endif

wyjdz:

Autor:  Misiek [ 2010-03-02, 08:04 ]
Tytuł: 

Na tym etapie ciężko jest mi coś więcej powiedzieć - to wymaga już sporego nakładu czasu i weryfikacji, napisania innego algorytmu i np. zakupu czcionek które będą z tym algorytmem działać. My kupiliśmy czcionki w firmie fonty.pl, do tego dorobiliśmy algorytm generujący - drukuje się poprawnie, nie ma kłopotu.

Może Sage nabywając czcionki do dystrybucji z ŚT otrzymał jakąś specyficzną ich wersję ?, pod to napisał wg wytycznych producenta czcionek właściwy algorytm. Nie mam pojęcia, ale czas jaki można jeszcze poświęcić na szukanie błędu/rozwiązania jest raczej nie do oszacowania, chyba prościej będzie kupić zestaw czcionek bezpośrednio u ich producenta, z algorytmem w postaci kodu VBA - masz 100% pewność że te czcionki są OK.

A co do generowania i drukowania etykiet przez drukarki kodów/etykiet z zastosowaniem oprogramowania tych urządzeń to niestety nie posiadamy na wyposażeniu i nie ma możliwości sprawdzenia, co i jak działa - mieliśmy kilka takich urządzeń ale tylko przelotem, na kilka dni przed dostarczeniem Klientowi.

Autor:  quariq9 [ 2010-03-04, 10:15 ]
Tytuł: 

Jak mogę zamówić działający raport ŚT u Pana do wydruku na drukarce Zebra TLP 2844? Proszę o kontakt.

Autor:  skoczek [ 2010-03-04, 17:48 ]
Tytuł: 

Witam.
Mam w sumie podobny problem. Drukuję etykiety na foli w wymiarze 50x30mm, na drukarce Citizen CLP-621, bezpośrednio z programu Symfonia - Etykiety środków trwałych - graficzny. Efekt jest taki, że żaden czytnik nie chce tego zczytywać.
Jeśli to samo wydrukuję na papierze, bądź na tej samej folii tylko na drukarce laserowej zczytuje bez zarzutu. Również jak wrzucę wartość kodu do programiku etiLabel kod zostaje zczytany.
Problem jest tylko przy wydruku na CLP-621 spod Symfonii.
Proszę o pomoc bo mam do wydrukowania tysiące kodów i trudno by mi było każdy robić ręcznie w tym ułomnym programiku.
Nadmienię, że już sporą partię wydrukowałem - jak je zczytać? I jak pracować dalej?
HELP:((

Autor:  quariq9 [ 2010-03-04, 21:00 ]
Tytuł: 

Mógłbyś wkleić kod :
1) drukowany na etykiecie
2) drukowany na drukarce laserowej - ten odczytywany przez czytnik
3) wygenerowany przez etiLabel

Jakiej czcionki uzywasz do druku kodu kreskowego?

Dzięki temu będziemy mieli punkt zaczepienia

Autor:  skoczek [ 2010-03-05, 10:31 ]
Tytuł: 

W załączeniu kody, włóaśnie w takiej kolejności:

1) drukowany na etykiecie
2) drukowany na drukarce laserowej - ten odczytywany przez czytnik (ten pochodzi z wydruku na drukarce laserowej na zwykłym papierze, jak na papier przykleję etykietę foliową i wtedy wydrukuję, to również jest ok.)
3) wygenerowany przez etiLabel.

Jeśli chodzi o czcionkę spod Symfonii jest to właśnie EFN KK 128.

Strona 1 z 2 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/