Пару лет назад возникла проблема - термопринтер печатал чеки с задержкой до одной секунды. С учетом нервничающей очереди, это абсолютно недопустимая роскошь. Устроившее всех решение основано на том, что матричные и термопринтеры настраиваются и управляются так называемыми эскейп-последовательностями, т.е. потоком получаемых данных. То есть, я просто записываю чек ф промежуточный файл (включая управляющие коды и команду обрезки чека), а затем копирую этот файл на порт принтера.
/* Конкретную модель принтера уже не помню, по-моему какой-то 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-последовательности для конкретной модели ВСЕГДА имеются в документации на сайте производителя, обычно по-английски, но кого это остановит?