|
v7: Подключение термопринтера MITSU RP-809 к 1с 7.7 | ☑ | ||
---|---|---|---|---|
0
кассир
09.03.23
✎
15:13
|
Добрый день. Скажите кто-нибудь подключал принтер чеков MITSU RP-809 к 1с 7/7?
Есть драйвера и описание принтера https://vial.by/torgovoe-oborudovanie/chekovye-printery/chekovyj-printer-mitsu-rp-809 В описании нашел файл ESC_SDK.dll понимаю что через него нужно подключаться с принтеру. Но зарегистрировать эту библиотеку не получается не через regsvr32, не через regasme.exe. В 1с 7.7 я понимаю нужно ее подключить эту библиотеку и создать объект через который можно отравлять Пишу код: // connect to print file = IBDir()+"ESC_SDK.dll"; message(file); if FS.ExistFile(file) = 0 then message("don't exit file " + file); else message("file exist " + file); endif; if ЗагрузитьВнешнююКомпоненту(file) = 0 then message("don't load dll"); return 0; else message("load dll"); endif; Результат: file exist C:\Base\!Last\ESC_SDK.dll Ошибка при создании объекта из компоненты C:\Base\!Last\ESC_SDK.dll (отсутствует CLSID) don't load dll Подскажите идеи как к ниму можно полючиться? Есть ли другие способы. Там универсальные dll для печати информации на термопринтер? |
|||
1
Builder
09.03.23
✎
15:57
|
(0) Подключить как обычный принтер и печатать не вариант?
|
|||
2
кассир
09.03.23
✎
16:13
|
Не понятно как печатать Qr коды если он подключен как обычный принтер. И настройки его производить...
|
|||
3
кассир
09.03.23
✎
16:17
|
запустил пример на C# который там приложен в SDK он работает, но как в 1с 7.7 это перенести. В C# написано
я понимаю что они сразу директивой [DllImport(DLLDIR, CharSet = charSet)] подключают и грузят d:\\ESC_SDK.dll как тоже самое сделать в 1с 7.7? public class DllAPI { public const string DLLDIR = "d:\\ESC_SDK.dll"; public const CharSet charSet = CharSet.Unicode; [DllImport(DLLDIR, CharSet = charSet)] public static extern int FormatError(int error_no, int langid, byte[] buf, int pos, int bufSize); [DllImport(DLLDIR, CharSet = charSet)] public static extern int PrinterCreator(ref IntPtr printer, string model); [DllImport(DLLDIR)] public static extern int PrinterDestroy(IntPtr printer); [DllImport(DLLDIR, CharSet = charSet)] public static extern int PortOpen(IntPtr printer, string portSetting); [DllImport(DLLDIR)] public static extern int PortClose(IntPtr printer); [DllImport(DLLDIR)] public static extern int PrinterInitialize(IntPtr printer); [DllImport(DLLDIR)] public static extern int FeedLine(IntPtr printer, int nFeed); [DllImport(DLLDIR)] public static extern int SetAlign(IntPtr printer, int align); [DllImport(DLLDIR, CharSet = charSet)] public static extern int PrintText(IntPtr printer, byte[] text, int alignment, int attribute, int textSize); [DllImport(DLLDIR, CharSet = charSet)] public static extern int PrintText(IntPtr printer, string text, int alignment, int attribute, int textSize); [DllImport(DLLDIR, CharSet = charSet)] public static extern int PrintBarCode(IntPtr printer, int bcType, string bcData, int width, int height, int alignment, int hriPosition); [DllImport(DLLDIR, CharSet = charSet)] public static extern int PrintSymbol(IntPtr printer, int type, string bcData, int errLevel, int width, int height, int alignment); [DllImport(DLLDIR, CharSet = charSet)] public static extern int DefineDownloadedImage(IntPtr printer, string imagePath, byte kc1, byte kc2); [DllImport(DLLDIR, CharSet = charSet)] public static extern int PrintDownloadedImage(IntPtr printer, byte kc1, byte kc2); [DllImport(DLLDIR, CharSet = charSet)] public static extern int DefineBufferedImage(IntPtr printer, string imagePath); [DllImport(DLLDIR, CharSet = charSet)] public static extern int PrintBufferedImage(IntPtr printer); [DllImport(DLLDIR, CharSet = charSet)] public static extern int DefineNVImage(IntPtr printer, string imagePath, byte kc1, byte kc2); [DllImport(DLLDIR, CharSet = charSet)] public static extern int PrintNVImage(IntPtr printer, byte kc1, byte kc2); [DllImport(DLLDIR, CharSet = charSet)] public static extern int PrintImage(IntPtr printer, string filePath, int scaleMode); [DllImport(DLLDIR)] public static extern int CutPaper(IntPtr printer, int cutMode, int distance); [DllImport(DLLDIR)] public static extern int OpenCashDrawer(IntPtr printer, int pinMode, int onTime, int offTime); [DllImport(DLLDIR)] public static extern int SelectStandardMode(IntPtr printer); [DllImport(DLLDIR)] public static extern int SetTextLineSpace(IntPtr printer, int lineSpace); [DllImport(DLLDIR)] public static extern int SetTextFont(IntPtr printer, int font); [DllImport(DLLDIR)] public static extern int SetAbsolutePrintPosition(IntPtr printer, int position); [DllImport(DLLDIR)] public static extern int SelectPageMode(IntPtr printer); [DllImport(DLLDIR)] public static extern int SetPrintAreaInPageMode(IntPtr printer, int horizontal , int vertical, int width, int height); [DllImport(DLLDIR)] public static extern int CancelPrintDataInPageMode(IntPtr printer); [DllImport(DLLDIR)] public static extern int SelectPrintDirectionInPageMode(IntPtr printer, int direction); [DllImport(DLLDIR)] public static extern int SetAbsoluteVerticalPrintPositionInPageMode(IntPtr printer, int position); [DllImport(DLLDIR)] public static extern int PrintAndReturnStandardMode(IntPtr printer); [DllImport(DLLDIR)] public static extern int PrintDataInPageMode(IntPtr printer); [DllImport(DLLDIR)] public static extern int GetPrinterState(IntPtr printer, ref uint printerState); [DllImport(DLLDIR)] public static extern int DirectIO(IntPtr printer, byte[] writeData, int writenum, byte[] readData, int readNum, ref int readedNum); [DllImport(DLLDIR)] public static extern int WriteData(IntPtr printer, string writeData, int writeNum); [DllImport(DLLDIR)] public static extern int GetFirmwareVersion(IntPtr printer, int[] version, int versionLen); [DllImport(DLLDIR)] public static extern int PositionNextLabel(IntPtr printer); [DllImport(DLLDIR)] public static extern int SetCodePage(IntPtr printer, int codePage, int Type); public string FormatError(int error_no) { int langid = 0; byte[] temp = new byte[512]; FormatError(error_no, langid, temp, 0, 512); return System.Text.Encoding.Default.GetString(temp,0,512); } } } |
|||
4
uno-group
09.03.23
✎
16:21
|
(2) както так https://skill-blog.ru/no-rubrick/qr-kod-na-v-1s-7-7/
|
|||
5
кассир
09.03.23
✎
16:28
|
а программно точно никак к нему нельзя подключиться?
|
|||
6
uno-group
09.03.23
✎
16:34
|
Можно наверное, но оно тебе надо? Завтра вин 10 поменяют на вин 11 и оно слетит. Было у меня программное подключение на вин 7 с переездом на вин 10 загнулось. ладно тогда принтеры были медленными и это хоть какой то выигрыш давало, а сейчас зачем.
|
|||
7
uno-group
09.03.23
✎
16:35
|
опять же принтер накрылся купили новый и опять колдуй, нафик это никому не надо.
|
|||
8
Злопчинский
09.03.23
✎
16:42
|
Поставить как виндявый принтер (скорее всекго так можно) и печатать как на виндявый принтер.
Опять же это принтер чеков - то есть просто печатная машинка, без фискализации? или это все-таки фискальный аппарат? . а дальше - берешь типовую 77 ТИС берешь обработку обслуживания для 77 какого-нить фискальника Штрих/Атол - и по образу и подобию айстрячишь обработку обслуживания для своего дивайса. Конечно, надо иметь описание методов, доступных через длл/драйвер - иначе тяжело будет разбираться. |
|||
9
кассир
09.03.23
✎
16:47
|
Он печатает но ширина строки 10 символов. Я вставил бумагу шириной 80 мм. Но печатается 10мм. Это просто печатная машинка. Только я печатаю на ней информацию. Фискальной памяти там нет.
|
|||
10
uno-group
09.03.23
✎
16:50
|
в параметрах принтера правильный размер бумаги задал
|
|||
11
кассир
09.03.23
✎
17:22
|
да если задать бумагу из 1с печатает.
|
|||
12
Злопчинский
09.03.23
✎
17:34
|
(11) печатает ЧТО?
печатает всехорошо или печтаета "10мм" ? |
|||
13
кассир
10.03.23
✎
08:30
|
Получается по ширине я выставил 80мм, но не понятно какую длину нужно указать? И как получается включить отрез бумаги?
|
|||
14
Builder
10.03.23
✎
09:20
|
(13) Это все в драйвере настраивается, ищи форматы бумаги, разделители, отрезку.
|
|||
15
uno-group
10.03.23
✎
09:20
|
В настройках драйвера принтера обрезка включается. если этикетка пишешь ее длину, если бесконечный рулон так и выбираешь. он после последней строки выводит какой то промежуток и останавливается или обрезаешь.
|
|||
16
ЯнСмит
10.03.23
✎
10:35
|
я бы посмотрел в сторону универсального драйвера для принтеров этикеток от Seagull
https://www.seagullscientific.com/support/downloads/drivers/ выручал не один раз с разной экзотикой |
|||
17
кассир
10.03.23
✎
11:47
|
а в принтерах может быть такое что нужно передавать "спец символ" в тексте чтобы "отрезчик" срабатывал?
|
|||
18
кассир
10.03.23
✎
12:39
|
из 1с печатает хорошо
вот код простой Function PrintText(TextString) table = CreateObject("Table"); table.SourceTable("cheque"); table.PutSection("data"); table.ReadOnly(0); table.Options(0,0,0,0); table.PageSetup(1,100,,0,0,0,0,0,0,1,1,"MITSU"); table.Print(0); EndFunction в табличной части просто одна секция со строкой. Отрезчик не пойму как работает. Если делаю тест он работает, если "self test" через утилиту тоже работает. Галочка AutoCutter=Enable, но при отправке текста из 1с, текст печатается, но отрезчик не работает. |
|||
19
кассир
10.03.23
✎
13:49
|
https://qna.habr.com/q/888679
вот здесь получается есть описание этой же проблемы. Только не понятно что это за последовательность символов. Как ее передать на принтер? GS;V;0 ESC;i ESC;d;0 ESC;m |
|||
20
кассир
10.03.23
✎
14:25
|
все отрезчик заработал. Проблема была в выборе драйвера. Нужен HPRT TP809 в нем есть настройка где включается отрезчик.
|
|||
21
Arbuz
10.03.23
✎
14:26
|
(5) Если действительно хочется работать с его SDK дллкой напрямую, то надо копать в сторону DynamicWrapperX (dynwrapx.dll), т.к. принтерная библиотека это просто набор экспортируемых функций. В принципе ничего сложного, но возможно дополнительно придётся обернуть в vbs, хотя я смотрю там есть ANSI'шная версия библиотеки.
|
|||
22
кассир
10.03.23
✎
14:28
|
я и подумал, что нужно наверное свою dll написать для 1с, а внутрь вложить их ESC_SDK.dll на основании примера на C#
|
|||
23
uno-group
10.03.23
✎
14:54
|
(19) ту нужно смотреть как он у тебя подключен если по ком то просто шлешь их ком порт той же vk_rs232.dll. Если по юсб то отправляешь файл с ними на юсб. если по сети то телнетом в сеть шлешь. куча лишнего никому не нужного гимороя. А там окажется, что винда порт заняла монопольно и или вообще не дает в него ничего напрямую отправлять или нужно юзеру права до админа поднимать. со своей длл на новых ОС та же самая фигня может быть что без админских прав у юзера винда не даст ничего переслать на принтер
|
|||
24
Злопчинский
10.03.23
✎
15:12
|
(22) тут найди Сергиус - он теюе все что надо на раз обернет для вызова в 1С..
|
|||
25
uno-group
10.03.23
✎
15:18
|
(24) я так понял с установкой правильного драйвера вопросы ушли. Кроме ускорения вывода работа напрямую ему мало что даст. Если критично, что метр чека печатается 5 секунд, а не 3 то можно заморочится иначе зачем?
|
|||
26
кассир
10.03.23
✎
15:30
|
да с правильным драйвером печатает и отрезат. Счас еще вывод QR кода проверю.
|
|||
27
кассир
10.03.23
✎
16:40
|
А есть пример чтобы QR не на форму выводился, а сразу на печать?
|
|||
28
кассир
10.03.23
✎
17:37
|
Все QR тоже печатается. Оставлю тогда печать через windows принтер.
|
|||
29
Злопчинский
10.03.23
✎
22:03
|
(28) Победа разума над бездушной техникой
|
|||
30
Сергиус
11.03.23
✎
03:03
|
(24)Путаете меня с Serginio1 :)
|
|||
31
Злопчинский
11.03.23
✎
09:03
|
(30) да, тупняк
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |