Имя: Пароль:
1C
1C 7.7
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
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) да, тупняк