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ść: - 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: Wygenerowałem kod przez raport i wydrukowałem jako PDF: Poniżej w normalnym rozmiarze. 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 Tu jak widać kod jest czysty i wyraźny bez zlewających się kresek. Tekst zakodowany przez ZebraDesigner: 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: 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/ |