powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Опять Zebra и язык ZPLII
22 сообщений из 22, страница 1 из 1
Опять Zebra и язык ZPLII
    #34644635
mr.Gandalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть проблема связанная с большим объемом печати бирок на принтере Zebra Z4MPlus. Т.е. если печатать одну бирку , то проблем нет.

А вот допустим есть файл в котором скажем 100 записей, и затем запустить процедуру на выполнение (чтобы не каждый раз нажимать на кнопку в программе, а нажать один раз и получить 100 разных бирок со штрих кодом).

Почему-то, если запускать 5 или 10 то проблем нет! А если скажем 30 или более, то возникает проблема - печать останавливается на строчке

SET TEXTMERGE TO (LPRINTER) NOSHOW

где :

LPRINTER='LPT1'


В чем проблема ? И как обойти эту неприятность ?


Всем удачи.
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #34646179
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо использовать тот варант который используешь. Я от него отказался.
Используй встроенный язык и програмируй форму типа этого:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
	.MSComm1.PortOpen = .T.	
	.MSComm1.Output ='N'+CHR(10)
	.MSComm1.Output ='OD'+CHR(10)
	.MSComm1.Output ='D10'+CHR(10)		
	.MSComm1.Output ='S4'+CHR(10)
	.MSComm1.Output ='Q200,27'+CHR(10)
	.MSComm1.Output ='q320'+CHR(10) 	
	.MSComm1.Output ='I8,C,001'+CHR(10) 
	.MSComm1.Output ='A25,5,0,1,1,2,N,"ООО Пылесос"'+CHR(10)
	.MSComm1.Output ='A170,10,0,1,1,1,N," тел. 727-81-03 "'+CHR(10)
	.MSComm1.Output ='A21,45,0,1,0,1,N,"'+Alltrim(TextItems1)+'"'+CHR(10)
	.MSComm1.Output ='A21,65,0,1,0,1,N,"'+Alltrim(TextItems2)+'"'+CHR(10)
	.MSComm1.Output ='A21,85,0,1,0,1,N,"'+Alltrim(TextItems3)+'"'+CHR(10)
	************  Печать штрих кода - EAN13  ************************
	.MSComm1.Output ='B110,110,0,E30,2,2,55,B,'+xEan13+CHR(10)
	*--------------------------------------------------------
	.MSComm1.Output ='A10,114,0,1,2,2,N," '+Alltrim(ThisForm.Articul)+' "'+CHR(10)

	.MSComm1.Output ='P'+ALLTRIM(STR(xQuqntity))+CHR(10)
	.MSComm1.PortOpen = .F.


TextItemsХ... это переменные или данные из таблиц. Работает прекрасно. Правда до 100 этикеток только печатал. Можно в цикле запускать, можно задавать количество
Код: plaintext
.MSComm1.Output ='P'+ALLTRIM(STR(xQuqntity))+CHR(10)
Пробуй - если что спрашивай. Первые комманды - настройка ширины и высоты этикеткипиши, насыщенности. Читай док по принтеру.
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #34646209
mr.Gandalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер Valerii .
Спасибо, за присланный вариант.
Если я правильно понял, то Ваш пример для работы с Com портом. У меня на нем Весы Sartorius висят. Поэтому я печатаю через LPT.
Понимаю, что идет переполнение потока данных и поэтому печать забивается. Пытаюсь с помощю ZPL II языка, либо притормозить поток либо обнулять буффер обмена на принтере.

Если, есть у кого еще какие-нибудь мысли на сей счет, просьба поделиться.

Всем удачи. mr.Gandalf
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #34646544
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для вывода нескольких копий одной и той же бирки я использую команду языка ZPL ^PQ
Например, пусть в переменной m.prNCopy - число копий этикетки, а prNamePrinter - название порта (COM1, COM2, LPT1 и пр...)
Тогда я делаю так:
SET TEXTMERGE TO (prNamePrinter) NOSHOW
SET TEXTMERGE DELIMITERS TO
SET TEXTMERGE ON
*-- Формат этикетки
\\^XA
...
...
\\^LH0,0
\\^FO410,5
...
\\^PQ<<m.prNCopy>>
\\^XZ

С уважением, Алексей
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #34646545
DmGr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот мой метод PrintLabel
В системе нужно поставить принтер Generic Text Only. Настроить на нужный порт lpt,com и все.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
LPARAMETERS tcFullNumber, tcSize, tnDensity, tnHarshness, tnSheetAmount, ;
	tcComment, tcQuality, tnCopyNumber, tcTextString

LOCAL lcBarCode, lcString, lcPrinterString, lcSTType

lcBarCode = THISFORM.Recode( tcFullNumber )
lcBarCode = lcBarCode + EAN13ControlCode( lcBarCode )

SET PRINTER TO NAME (THIS.PrinterName)
SET PRINTER ON

lcPrinterString = THISFORM.laLabels[ THISFORM.cboLabel.ListIndex,  2  ]

lcPrinterString = STRTRAN( lcPrinterString, "%COPYNUMBER%", ALLTRIM( STR( tnCopyNumber ) ) )
lcPrinterString = STRTRAN( lcPrinterString, "%BARCODE%", lcBarCode )
lcPrinterString = STRTRAN( lcPrinterString, "%NUMBER%", PADL( tcFullNumber,  19  ) )
lcPrinterString = STRTRAN( lcPrinterString, "%SIZE%", PADL( ALLTRIM( tcSize ),  19  ) )
IF EMPTY( tnDensity ) AND EMPTY( tnHarshness )
	lcPrinterString = STRTRAN( lcPrinterString, "%TYPE%", "               Р.Т." )
ELSE
	IF EMPTY( tcTextString )
		lcPrinterString = STRTRAN( lcPrinterString, "%TYPE%", PADL( ALLTRIM( STR( tnDensity ) ) + "/" + ;
			ALLTRIM( STR( tnHarshness ) ),  19  ) )
	ELSE
		lcPrinterString = STRTRAN( lcPrinterString, "%TYPE%", PADL( ALLTRIM( STR( tnDensity ) ) + "/" + ;
			ALLTRIM( STR( tnHarshness ) ) + ALLTRIM( tcTextString ),  19  ) )
	ENDIF
ENDIF
IF EMPTY( tnDensity ) AND EMPTY( tnHarshness )
	lcPrinterString = STRTRAN( lcPrinterString, "%ST-TYPE%", "               Р.Т." )
ELSE
	lcSTType = "ST" + ALLTRIM( STR( tnDensity ) )
	DO CASE
	CASE tnHarshness =  100 
		IF tnDensity =  25 
			lcSTType = "SM2525"
		ELSE
			lcSTType = lcSTType + "25"
		ENDIF
	CASE tnHarshness =  130 
		lcSTType = lcSTType + "32"
	CASE tnHarshness =  140 
		lcSTType = lcSTType + "35"
	CASE tnHarshness =  145 
		lcSTType = lcSTType + "36"
	CASE tnHarshness =  160 
		lcSTType = lcSTType + "40"
	CASE tnHarshness =  170 
		lcSTType = lcSTType + "43"
	CASE tnHarshness =  180 
		lcSTType = lcSTType + "45"
	OTHERWISE
		lcSTType = lcSTType + "XX"
	ENDCASE
	lcSTType = PADL( "(" + lcSTType + ") " + ALLTRIM( STR( tnDensity ) ) + "/" + ;
		ALLTRIM( STR( tnHarshness ) ),  19  )
	lcPrinterString = STRTRAN( lcPrinterString, "%ST-TYPE%", lcSTType )
ENDIF

lcPrinterString = STRTRAN( lcPrinterString, "%AMOUNT%", PADL( tnSheetAmount,  5  ) )
lcPrinterString = STRTRAN( lcPrinterString, "%COMMENT%", ALLTRIM( tcComment ) )
lcPrinterString = STRTRAN( lcPrinterString, "%QUALITY%", ALLTRIM( tcQuality ) )

lcPrinterString = CPCONVERT(  1251 ,  866 , lcPrinterString )
DO while ! EMPTY( lcPrinterString )
	lcString = LEFT( lcPrinterString,  100  )
	lcPrinterString = SUBSTR( lcPrinterString,  101 , LEN( lcPrinterString ) )
	??? lcString
ENDDO

SET PRINTER OFF
SET PRINTER TO
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #34647684
mr.Gandalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День Добрый Алексей и DmGr .

Я наверное не совсем понятно описал ситуацию.
1. У меня вернулся товар из торговли и мне надо обновить бирки (придать им былой блеск ,так сказать)
2. Каждая бирка (это своего рода уникальный ключ, со своей информацией и со своим штрих-кодом). Одинаковых бирок нет и никогда не будет. Поэтому речь о копиях одной и той же бирке речь не идет!
Речь идет о скорости печати и пропускной способности печати.
Прежде всего давайте определять различие между "Скоростью Печати", и "Пропускной способностью печати".
- "Скорость Печати" является нормой движения ярлыка, когда принтер печатает ярлык.. Скорость Печати "принтера Зебры" определены ZPL, командуют ^PR. Минимальная скорость печати - типично 2" в секунду и может быть столь же высокой как 12" в секунду в зависимости от модели принтера, которую Вы используете.
- "Пропускная способность Печати" полное время, требуемое для печати данного числа ярлыков. Это измерение времени, которое требуется, чтобы передать данные на принтер, создания битового массива изображения и печати ярлыка. Чаще всего это и есть тема обсуждения.

Есть несколько способов увеличить пропускную способность принтера. Ваш выбор (ы) зависит от модели принтера, заявления, доступной памяти DRAM принтера и вашей способности изменить язык программирования ZPL.
Одна или более проблем может затрагивать вашу прикладную пропускную способность:


Есть Вариант использовать команды (^IS, ^IL) .

Часть статической информации, которая используется от бирки к бирке одна и таже - ее можно загнать (с помощью ^IS )в память принтера и использовать каждый раз при печати (используя ^IL). Таким образом пропускная способность увеличится.

Но у меня похоже другой вариант, просто ПК слишком быстро отсылает задания на принтер и таким образом забивает LPT -порт. Я сделал задержку через определенный интервал и все нормализовалось. ЕЕ можно сделать двумя способами, один средствами фокса - это мы знаем, а второй средствами ZPL II (^PP , ^PS).


Всем спасибо и удачи.
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #34647796
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем отсылать на принтер много раз ОДНУ и ТУЖЕ этикетку ?
Можно просто указать кол-во копий (^PQn) !
Вот и не будет перегрузки канала LPT (COM).
Я может не правильно вас понял, но вот ваша фраза : "...а нажать один раз и получить 100 разных бирок со штрих кодом...", вроде как раз предполагает, что надо одну этикетку напечатать много раз (100). Тогда зачем загружать канал ? Используйте ^PQn.

С уважением, Алексей
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #34647818
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если надо напечать много РАЗНЫХ бирок, то я делаю так:
1. Через SET TEXTMERGE TO myTextFile.txt NOSHOW с последующими \\.... формировал большой файл.
2. Через COPY FILE ... выводил это файл в COM1, LPT1 и т.п.

С уважением, Алексей
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #34647923
mr.Gandalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз день добрый Алексей.

Фраза "один раз нажать и получить 100 разных" - означает , что информация в каждой бирке уникальна и не похоже ни на одну из напечатанных (или которая будет отпечатана). Т.е. файл DBF уже сформирован (каждая строка уникальна).При запуске цикла на печать - получается формируем на каждой строке этикетку которая отправляется на печать и.т.д. Но на определенном этапе печать зависает.

Последнее Ваше сообщение - очень даже интересное, не могли бы прислать кусочек текста, так нагляднее , чтобы не мучать излишними вопросами." Хотя по жизни даже очевидное, не всегда видишь явно !"

Всем Удачи.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Опять Zebra и язык ZPLII
    #35663296
mr.Gandalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mr.Gandalf,

Добрый день Алексей.
Я по теме Zebra принтера. Поскольку Вы дока в этом деле. У меня задача такого плана. Есть документ в нем товарные строки на продукцию. К каждой товарной строке нужно отпечатать ценник на Zebre, но я не хочу чтобы после каждой отпечатанной этикетки срабатывал ножик (на обрез ленты). Мне нужно, чтобы принтер печатал все этикетки из данной накладной на ленточке и только после того как все эткетки отпечатаны происходило отрезание. Я использую ^MM команду ( с доп опциями), и у меня происходит следующая картина. Либо все печатает как мне надо, но не отрезает в конце задания, либо после каждой этикетки нарезает(шинкует) все как колбасу.
Есть ли у Вас на этот счет решения из практики.
С уважением. mr.Gandalf
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #35664559
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, mr.Gandalf!
Я решаю проблемы по мере возникновения. Такой проблемы у меня не было (т.к. не было такой задачи). И даже принтер у меня теперь отсутствует для пробы на рабочем месте.

С уважением, Алексей
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #35664801
Александр Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хоть топик старый, а вдруг кому-то пригодиться :)

а я не так делаю, когда нужно сделать 1000 этикеток одинаковой длины, то я одкрываю отчет как файл и в нем пишу копий 1000, и печать, она как с пулемета лента вылетает.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
	cNameReport='r'+SUBSTR(SYS( 2015 ), 3 , 10 )
	= strtofile(filetostr(cNameReportX+'.frx'),fpathtemp+cNameReport +'.frx') 
	= strtofile(filetostr(cNameReportX+'.frt'),fpathtemp+cNameReport +'.frt') 
	USE (fpathtemp+cNameReport +'.frx') IN  0 
	SELECT (cNameReport)
	IF ATC(expr,'COPIES')> 0 
		REPLACE Expr with STRTRAN(expr, 'COPIES=1','COPIES='+ALLTRIM(STR(m.lnkolet, 10 , 0 )))
	ELSE
		REPLACE Expr with Expr+CHR( 13 )+'COPIES='+ALLTRIM(STR(m.lnkolet, 10 , 0 ))
	endif	
	USE 
	SELECT (thisform.filed)
	REPORT FORM (fpathtemp+cNameReport) NOCONSOLE TO PRINTER NODIALOG 

	DELETE FILE (fpathtemp+cNameReport +'.frx')
	DELETE FILE (fpathtemp+cNameReport +'.frt')
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #35665385
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня принтер без ножика - отрезание происходит руками. Все печатается на непрерывной ленте, а затем снимаются с ленты вручную. Попробуйте так:
1. Поставить режим непрерывной бумаги - ^MNN.
2. Сформировать файл из всех этикеток накладной.
3. Если у вас принтер с управляемым ножом (S-500 и подобный), то в конец файла добавьте команду отрезания бумаги (^MMС кажется).
Затем весь файл отправьте на принтер.
С уважением, Алексей
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #35666772
mr.Gandalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер Алексей.

авторУ меня принтер без ножика - отрезание происходит руками. Все печатается на непрерывной ленте, а затем снимаются с ленты вручную. Попробуйте так:
1. Поставить режим непрерывной бумаги - ^MNN.
2. Сформировать файл из всех этикеток накладной.
3. Если у вас принтер с управляемым ножом (S-500 и подобный), то в конец файла добавьте команду отрезания бумаги (^MMС кажется).
Затем весь файл отправьте на принтер.
С уважением, Алексей

Я все сделал как Вы и излагаете. Но происходит следующее, созданный файл в котором в конце указана команда на отрезание бумаги (^MMC - это та команда которая отрезает!) после печати останавливается и не происходит отрезание этикетки. Но вот как только нажмешь на принтере кнопку Feed, происходит протяжка на одну этикетку и после этого происходит отрез автоматически. В принципе такой вариант тоже не плохой, но почему не происходит выполнение последней команды?
Красота решения, чуть чуть страдает (Потому, как выполняется, не так как задумано).

Всем кто откликнулся, большое спасибо.
Если, что-то у кого появится, просьба поделится мыслями.
С уважением mr.Gandalf
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #35667064
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что надо перед добавлением кода последней этикетки добавить команду ^MMC
Тогда отрезание произойдет при печати последней этикетки. Ведь команда ^MMC определяет, как будет напечатана следующая Label. Но тогда надо и в начале всего файла вставлять перевод печати без отрезания.
С уважением, Алексей
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #35669155
mr.Gandalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер Алексей.

Спасибо, за вариант. Мне кажется он очень логичным. В понедельник попробую его реализовать.
О результатах сообщу.

Удачи. mr.Gandalf
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #35684188
mr.Gandalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый вечер.

Алексей спасибо, все получилось. Следуя Вашей логике, все прошло как по маслу.
Извините, что не сразу сообщил. Немного закрутился.

Удачи.
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #35903631
mr.Gandalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-K,

Алексей добрый день.

Вопрос к Вам.
Не использовали Вы в своей работе, вариант когда нужно было слить в файл - конфигурацию уже настроенного принтера (со своими параметрами) ?
Для того, чтобы в критический момент не выставлять все руками, а снова залить из файла нужную Вам конфигурацию!

Удачи. mr.Gandalf
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #35903639
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr.GandalfAleksey-K,

Алексей добрый день.

Вопрос к Вам.
Не использовали Вы в своей работе, вариант когда нужно было слить в файл - конфигурацию уже настроенного принтера (со своими параметрами) ?
Для того, чтобы в критический момент не выставлять все руками, а снова залить из файла нужную Вам конфигурацию!

Удачи. mr.Gandalf
Нет, не приходилось.. Принтерами я не управляю.. Тут админов хватает...:)
Мое дело этикетку напечатать.
С уважением, Алексей.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Опять Zebra и язык ZPLII
    #37670321
dogalevs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помогите! у нас такой же принтер Zebra 4MPlus. как его откалибровать? ну чтоб пробная даже страница печаталась строго на 1 листке.. и каждый раз в одном и том же месте, а не сьезжала каждый раз. Не можем настроить принтер как бы чтоб он распознавал зазор между этикеток. Измучались.
Спасибо
...
Рейтинг: 0 / 0
Опять Zebra и язык ZPLII
    #37690099
Александр Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в настройках принтера, методом научного тыка и ПРАВИЛЬНЫХ драйверов.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Опять Zebra и язык ZPLII
    #38399027
Фотография Алкобобёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, а как на языке ZPL подать команду, чтобы Зебра затянула напечатанную этикетку назад?
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Опять Zebra и язык ZPLII
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]