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

03.05.09

Интеграция - Периферийные устройства

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

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

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

 

 

См. также

Распознавание номеров автомашин с ip - камер, видео, фото

Распознавание документов и образов Периферийные устройства Автомобили, автосервисы Россия Платные (руб)

Программа считывает кадры с ip-камер (http - запрос к камере), видео, фото (источники кадров (нет ограничения на их количество) настраивается в конфигурационном файле), находит и распознает номера автомашин и сохраняет в базу db, с сохранением фото номера и автомашины, а также времени детекции.

20400 руб.

31.05.2023    3981    3    2    

5

Тернистый путь к физической клавиатуре для программиста 1С

Периферийные устройства Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время я активно пользовался различными хоткеерами, шаблонами текста, специальными раскладками клавиатуры. Я из тех, кто очень долго верил в Снегопат... Так сложилось, что на моем текущем месте работы довольно строгая политика информационной безопасности, а потому со всем привычным софтом, который делал жизнь проще, мне пришлось расстаться. И даже шаблоны кода при каждом терминальном подключении требуется настраивать в конфигураторе заново. Как известно, если какую-то задачу нельзя решить на стороне софта, то стоит поискать железное решение.

1 стартмани

15.04.2024    5183    madonov    46    

32

[История разработки] Управляем промышленным принтером EBS-1500 из 1С

Периферийные устройства Платформа 1С v8.3 Бесплатно (free)

«У нас было два контроллера Huidu, семьдесят две китайские монохромные панели на светоизлучающих диодах, они же LED, четыре мегабайта flash памяти, 1С и целое море поддерживаемых форматов вывода информации - текстов, картинок, анимаций, а так же литр промывочной жидкости, литр разбавителя, ящик черных чернил, и 12 патч-кордов и различных удлинителей. Не то, чтобы всё это было категорически необходимо в маркировке, но если уж начал собирать маркиратор на 1С, то к делу надо подходить серьёзно.» - Страх и ненависть в Маркировке, 2019 г.

01.04.2024    1352    Interrupted    14    

34

Получение изображения с веб-камеры с возможностью его кадрирования по произвольной области

Инструментарий разработчика Периферийные устройства Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Внешняя обработка получения изображения с веб-камеры с возможностью его кадрирования по произвольно выделенной области. Использует собственную внешнюю компоненту на основе библиотеки AForge. Содержит примеры интерактивного взаимодействия с полем HTML.

20.03.2024    415    1    AndSem    1    

4

Прямая печать на принтерах TSC из 1С

Периферийные устройства Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Прямая печать на принтерах TSC из 1С при вызове с сервера позволяет печатать из тонкого клиента, мобильного клиента и веб-клиента. Потребуется установка драйвера и библиотеки для отправки команд на этот драйвер.

1 стартмани

19.02.2024    666    6    realslavyan    2    

5

HotKeys на Python для 1С

Периферийные устройства Конфигурации 1cv8 Бесплатно (free)

Недавно прочитал статью на Инфостарте о KeyPad и вначале захотел себе такой, но через какое-то время я понял, что дополнительная даже маленькая клавиатура занимает место, и нужно все время держать ее под рукой. Это все создает дополнительные неудобства.

20.12.2023    5485    John_d    26    

75

Очистка очереди печати конкретного принтера

Периферийные устройства Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Очистка очереди печати выбранного принтера, перезапуск службы печати, вывод списка системных принтеров, открытие свойств принтера из 1С.

1 стартмани

07.11.2023    1318    2    vsnazarov    1    

26

Печать этикеток на DYMO LabelManager 280 через DYMO Connect Web Service

Периферийные устройства WEB-интеграция Этикетки, ценники Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

На сайте производителя принтера DYMO LabelManager 280 вместе с драйвером поставляется пакет DYMO Connect, который предлагает функционал вёрстки этикеток в фирменном формате и отправки их напрямую на принтер. Так же в этом пакете есть веб-сервис для взаимодействия с принтером через HTTP-запросы, о котором и пойдет речь в этой статье.

29.08.2023    1555    GeraltSnow    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Tiger77 69 03.05.09 14:38 Сейчас в теме
Есть же компонента ExtPrint, нафиг ж так мучиться ?
2. dav405 103 03.05.09 14:53 Сейчас в теме
Ключевое слово - "скорость".
(1) Про компоненту не знал, можно (было бы) потестить скорость, весьма
сомневаюсь, что не тормозит на те же 0.5-1 секунду.

(1) А как в ней чеки обрезать? Штрих-коды печатать?
4. CheBurator 3119 03.05.09 18:56 Сейчас в теме
(1) ExtPrint - а поподробнее?
3. biv75 03.05.09 16:06 Сейчас в теме
Очень полезные знания, при работе из под виндов с матричным принтером лучше варианта не найти, сам постоянно использую, зная ESC команды можно и шрифтами управлять и межстрочными интервалами.. да всё можно делать и скорость конечно тут не маловажный фактор.
5. ACE$ 47 01.07.10 11:44 Сейчас в теме
(0) а зачем 2 раза копировать в порт?
(4) На проклабе
6. dav405 103 03.07.10 11:16 Сейчас в теме
(5) Дык две копии чека, однако. Это из электротехнического магазину. Второй оставляли складским при отпуске товаров. //Каменный век :).
7. ACE$ 47 04.07.10 21:51 Сейчас в теме
вообще, сугубо полезную идею кинули ;) безо всяких ВК почти на любом принтере! Я сие приспособил для печати предварительных чеков в кафе под УТ
8. kozorez 8 24.06.13 04:04 Сейчас в теме
Еще бы кто сказал как просто послать Симв(0) ? для многих команд очень нужно. И зачем писать в файл когда можно сразу в порт принтера?
Попытка 
    Драйвер=СоздатьОбъект("MSCOMMLib.MSComm.1"); 
Исключение 
    Предупреждение("Не могу создать объект");    
    Возврат; 
КонецПопытки; 
Драйвер.Settings ="115200,N,8,1";

Драйвер.CommPort =2;
//сообщить("драйвер "+ драйвер+"  порт "+Драйвер.CommPort+"  настройки "+ Драйвер.Settings);
Попытка   
    Драйвер.PortOpen=1; 
Исключение  
    Предупреждение("Не могу открыть порт");    
    Возврат; 
КонецПопытки; 
Если Драйвер.PortOpen=0 Тогда 
    Предупреждение("Не открыт порт");    
    Возврат; 
КонецЕсли;  
Драйвер.Output=(Симв(27)+"@"); // инициализация 
Драйвер.Output=(Симв(27)+"!"Симв(0));// выбрать шрифт1  
Драйвер.Output=
AnsiToOem("12345678901234567890123456789012345678901234567890123456789­0")+Симв(13)+Симв(10));  
Драйвер.Output=(Симв(27)+"!"+Симв(1)); // выбрать шрифт 2
Драйвер.Output=(AnsiToOem("12345678901234567890123456789012345678901234567890123456789­0")+Симв(13)+Симв(10)); 
Драйвер.Output=(Симв(27)+"!"+Симв(2)); // выбрать шрифт0
Драйвер.Output=(AnsiToOem("12345678901234567890123456789012345678901234567890123456789­0")+Симв(13)+Симв(10));
Драйвер.Output=(Симв(12)+Симв(13)+Симв(10));
Драйвер.Output=(AnsiToOem("1234567890")+Симв(13)+Симв(10)); 
Драйвер.Output=(Симв(27)+Симв(77)); //  
Драйвер.Output=(AnsiToOem("1234567890")+Симв(13)+Симв(10)); 
Драйвер.Output=(Симв(27)+Симв(71)); // 
Драйвер.Output=(AnsiToOem("1234567890")+Симв(13)+Симв(10)); 
Драйвер.Output=(Симв(27)+"a"+Симв(2)); // прижать вправо  
Драйвер.Output=(AnsiToOem("0987654321абвгдеёжзийклмнопрстуфхцчшщъьэюя")+Симв(13)+Симв(10));   
Драйвер.Output=(Симв(27)+"!"+Симв(1)); // выбрать шрифт 2  
Драйвер.Output=(AnsiToOem("   "));
Драйвер.Output=(Симв(27)+"a"+Симв(1)); // центр
Драйвер.Output=(AnsiToOem("0987654321абвгдеёжзийклмнопрстуфхцчшщъьэюя")+Симв(13)+Симв(10));
//Драйвер.Output=Симв(12); //конец страницы
Драйвер.Output=AnsiToOem(Симв(27)+"d"+Симв(2)); // прогнать две строчки 
Драйвер.Output=AnsiToOem(Симв(27)+"i"); // обрезка 

Драйвер.PortOpen=0; 
Драйвер=0;
Показать
9. kozorez 8 24.06.13 04:05 Сейчас в теме
Шрифт 1 не выбирается потому что Симв(0) в семерке не работает
Оставьте свое сообщение