Каталог решений - Альтернативная печать чеков для термопринтеров. Хозяйке на заметку.

Альтернативная печать чеков для термопринтеров. Хозяйке на заметку.

Альтернативная печать чеков для термопринтеров. Хозяйке на заметку.

В наличии

Простой способ побороть медленную печать коротких документов на термопринтерах при кривых драйверах.

Категория:

Описание

Пару лет назад возникла проблема — термопринтер печатал чеки с задержкой до одной секунды. С учетом нервничающей очереди, это абсолютно недопустимая роскошь. Устроившее всех решение основано на том, что матричные и термопринтеры настраиваются и управляются так называемыми эскейп-последовательностями, т.е. потоком получаемых данных. То есть, я просто записываю чек  ф промежуточный файл (включая управляющие коды и команду обрезки чека), а затем копирую этот файл на порт принтера.

/* Конкретную модель принтера уже не помню, по-моему какой-то CITIZEN, просто вчера жаловался коллега на аналогичную проблему, так что решил вот написать заметку о том. что не обязательно мучаться и искать дрова, если можно «написать» их самому */

 Вот пример процедуры печати:

//******************************************************************************
// Печать(Докум)
//
// Параметры:
//  Нет
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//
Процедура Печать(Докум, Устройство=1, КолвоКопий=2)
 Перем НачПовт, КонПовт;
 Текст=СоздатьОбъект("Текст"); 
 Текст.КодоваяСтраница(1); 
 Текст.ДобавитьСтроку(симв(27)+"@"); //
 номердок=число(докум.номердок);  
 датадок=строка(докум.датадок);
 стр="";
 Текст.ДобавитьСтроку(СТр);
 Текст.ДобавитьСтроку(СТр);
 Стр=ФиксШаблон("Чек [номердок] от [датадок] ");
 Текст.ДобавитьСтроку(СТр);
 //Текст.ДобавитьСтроку("                Чек                  ");           
 Текст.ДобавитьСтроку(" №           Наименование                  ");    
 Текст.ДобавитьСтроку("  Код        количество     цена       сумма");
 Если Докум.Скидка.Выбран()=1 Тогда
  Врстр="Общ";     
  процент=Докум.Скидка.Процент*0.01;
 иначе
  Врстр="Сумма";
  процент=0;
 КонецЕсли;
 СчетчикЦикла = 0;
 // выводим табличную часть
 Н = 0;
 Докум.ВыбратьСтроки();
 ИтогоСкидка=0;
 Пока Докум.ПолучитьСтроку() = 1 Цикл
  Н = Н + 1;
  скидка=Окр(Докум.Цена*Докум.Количество*процент,2,0);
  ИтогоСкидка=ИтогоСкидка+скидка;
  Печкол=Докум.Количество;
  ПечНаим=СокрЛП(Докум.Номенклатура.Наименование);
  Печкод= СокрЛП(Докум.Номенклатура.Код);
  ПечЦена=Докум.Цена;
  ПечСумма=Докум.Сумма;
  Если Окр(Печкол)=Печкол тогда
   Печкол=Окр(Печкол);
  конецесли;          
  Стр=ФиксШаблон("[Н ] [ПечНаим                                 ] ");
  Текст.ДобавитьСтроку(СТр);
  Стр=ФиксШаблон("[ Печкод ]   [Печкол]    [ПечЦена]   [ПечСумма] ");
  Текст.ДобавитьСтроку(СТр);
 КонецЦикла;
 СуммаИтог = Докум.Итог("Сумма");
 Стр=ФиксШаблон(" Итого: [     СуммаИтог           ] руб.");
 Текст.ДобавитьСтроку(СТр);                           
 Стр=ФиксШаблон(" Итого скидка: [ ИтогоСкидка ] р.    ");
 Текст.ДобавитьСтроку(СТр);                           
 Стр="";
 Текст.ДобавитьСтроку(СТр);                           
 Текст.ДобавитьСтроку(симв(29)+симв(86)+симв(66)+симв(1));//Обрезать чек!!!
 ИмяФ=КаталогИб()+"Врем";
 Текст.Записать(имяФ);
 ФС.КопироватьФайл(ИмяФ+".txt","com1",1)  ; 
 ФС.КопироватьФайл(ИмяФ+".txt","com1",1)  ; 
КонецПроцедуры // Печать()

Сами ESC-последовательности для конкретной модели ВСЕГДА имеются в документации на сайте производителя, обычно по-английски, но кого это остановит? 

 

 

has been added to your cart:
Оформление заказа