Печать на мобильных принтерах TSC и Zebra по сети

Публикация № 1207163

Разработка - Печать - Пакетная печать

массовая печать мобильные принтеры интеграция приложений.

Описан метод печати на мобильных принтерах марок TSC и Zebra, подключенных к корпоративной сети по Wi-Fi, без необходимости устанавливать драйверы на сервере и/или клиенте.

Поставлена задача - организовать печать по сети на мобильных принтерах производства компаний TSC и Zebra без необходимости установки на серверах драйверов принтеров, регистрации и СМС. В эксплуатации находятся несколько десятков принтеров. Подключение к общей сети выполнено по Wi-Fi. Печать необходимо производить из трех видов приложений: "1С-Управление торговлей", приложения для ТСД, мобильного приложения для обычных смартфонов/планшетов (при этом мобильное приложение непосредственного доступа в корпоративную сеть не имеет). Печатные формы генерируются обработкой в 1С в виде скриптов на языках разметки TSPL/ZPL.

Решение: поскольку в сети уже есть Web-сервер под IIS, где подняты Web-сервисы и HTTP-сервисы для мобильных приложений, то на сервере дополнительно запускаем скрипт на PHP, на вход принимающий пакет данных, где содержится IP принтера и скрипт на TSPL/ZPL, и отправляющий данные по IP-адресу принтера.

Пакет формируется в JSON, выглядит следующим образом:
Шаблон кодируется в base64, поскольку в командах TSPL/ZPL могут быть символы, невалидные для JSON.

{
 "printer_ip":"192.168.X.XXX",
 "template":"Здесь должен быть шаблон этикетки, закодированный в base64"
}

 

Схема работы для печати ценника, например, следующая - в мобильном приложении сканируется ШК товара, на сервер уходит пакет данных с этим ШК, кодом пользователя/магазина/отдела, в 1С по ним формируется вышеприведенный пакет, и из 1С же методом POST передается по URL на Web-сервере в скрипт на PHP. Результат выполнения скрипта анализируется, и передается мобильному приложению.

Собственно, базовый функционал скрипта выглядит следующим образом:
 

<?php

class M_Response {
    public $success;
    public $reason;
}
error_reporting(E_ALL);
ob_implicit_flush(1);

$mresponse = new M_Response();
$entityBody = file_get_contents('php://input');
// получили на входе пакет в JSON
if ($entityBody === false || $entityBody === null || $entityBody === "") {
// Что-то пошло не так, вернем статус и причину ошибки
    $mresponse->success = false;
    $mresponse->reason = "Ошибка при получении исходных данных";
    http_response_code(400);
    $respJSON = json_encode($mresponse , JSON_UNESCAPED_UNICODE);
    echo $respJSON;
    exit();
}
$obj = json_decode($entityBody);
if ($obj === false || $obj === null) {
    $mresponse->success = false;
    $mresponse->reason = "Ошибка декодирования входных данных";
    http_response_code(400);
    $respJSON = json_encode($mresponse , JSON_UNESCAPED_UNICODE);
    echo $respJSON ;
    exit();
}

$template = $obj->template;

$decoded_template = base64_decode($template);
if ($decoded_template === false || $decoded_template === null) {
    $mresponse->success = false;
    $mresponse->reason = "Ошибка декодирования шаблона печати";
    http_response_code(400);
    $respJSON = json_encode($mresponse , JSON_UNESCAPED_UNICODE);
    echo $respJSON ;
    exit();
}

$service_port = 9100;
$address = $obj->printer_ip;

// Данные передаем через TCP-socket (описание этого метода есть на сайтах производителей принтеров)
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    $reason = socket_strerror(socket_last_error());
// IIS на сервере отдает сообщения в Win-1251, потому перекодируем
// для других серверов, возможно, это и не понадобится
    $reason2 = iconv("Windows-1251", "UTF-8", $reason);
    $mresponse->success = false;
    $mresponse->reason = $reason2;
    http_response_code(400);
} else {
    $result = socket_connect($socket, $address, $service_port);
    if ($result === false) {
        $reason = socket_strerror(socket_last_error());
        $reason2 = iconv("Windows-1251", "UTF-8", $reason);
        $mresponse->success = false;
        $mresponse->reason = $reason2;
        http_response_code(400);
    } else {
        $result = socket_write($socket, $decoded_template, strlen($decoded_template));
        if ($result === false) {
            $reason = socket_strerror(socket_last_error());
            $reason2 = iconv("Windows-1251", "UTF-8", $reason);
            $mresponse->success = false;
            $mresponse->reason = $reason2;
            http_response_code(400);
        }
        else {
            $mresponse->success = true;
            $mresponse->reason = "";
            http_response_code(200);
        }
        socket_close($socket);
    }
}
$respJSON = json_encode($mresponse, JSON_UNESCAPED_UNICODE);
echo $respJSON ;

?>

 

Специальные предложения

Оставьте свое сообщение

См. также

Пакетная печать в строго заданном порядке

Пакетная печать v8 1cv8.cf Бесплатно (free)

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

19.09.2018    8443    0    crazycat    20    

Внешняя печатная форма "Пакетная печать документов"

Пакетная печать v8 1cv8.cf БП2.0 УТ10 УПП1 Россия Бесплатно (free)

Внешняя печатная форма для пакетной печати докуменов

14.03.2011    21917    0    Bazil    24    

[* ЗУП 2.5 *] Групповая печать регламентированных форм (ОПС, ЕСН, 1-НДФЛ)

Пакетная печать Регламентированная отчетность Зарплата Зарплата v8 ЗУП2.5 Россия БУ ФОМС, ПФ, ФСС Бесплатно (free)

Групповая печать регламентированных форм (карточка ОПС, Карточка ЕСН, Форма 1-НДФЛ).

21.09.2009    15828    0    WiseSnake    8    

Пакетная печать документов "Реализация товаров и услуг"

Пакетная печать Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v8 БП2.0 УТ10 Россия БУ УУ НДС Бесплатно (free)

Обработка позволяет распечатать пакет отгрузочных документов для конфигураций УТ и БП, должна выдерживать обновления конфигураций. Что она позволяет распечатать 2 торг12, 2 счет фактуры , 2 ттн за два нажатия кнопки. + Встроен универсальный отбор по документам реализации товаров и услуг (н-р можно распечатать все документы за опред период по опред. контрагенту) + Возможность отсылки сразу на принтер и распределения по копиям + все общие модули вынесены в модуль обработки) + Печатает пакетно также и внешние печатные формы для документов реализация товаров и услуг и счетов фактур + при печати использует типовые модули печати документов в конфигурации (как будто вы сами отправляете на печать из формы документов) проверялась УТ 10.3.3.3 и БП 1.6.10.6

02.09.2009    24060    0    y22-k    33    

Универсальная настраиваемая печать документов

Пакетная печать v8 1cv8.cf Россия Бесплатно (free)

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

05.07.2009    16224    0    Magister    39    

Групповая печать карточек 1-НДФЛ

Пакетная печать Зарплата Зарплата v8 ЗУП2.5 Россия БУ НДФЛ Бесплатно (free)

В 2009 не нашла в типовой печати 1-НДФЛ по всем сотрудникам. Сделала групповую печать карточек 1-НДФЛ по документу "Сведения о доходах физлиц", подготовленному для передачи в ИФНС. Может быть кому-нибудь пригодится. В 2010 году обработку посчитала уже неактуальной, так как в типовой появилась возможность групповой печати в стандартном отчете. Но расчетчица попросила и на последнем релизе (2.5.20) сделать печать по документу "Сведения о доходах физлиц". Поэтому выкладываю обновленную обработку, так как предыдущая версия не работает на более ранних релизах.

06.02.2009    14254    0    Ирка    12    

Обработка для печати регистра налоговых накладных

Пакетная печать Оптовая торговля Оптовая торговля v8 1cv8.cf Украина НУ Бесплатно (free)

Обработка сама выводит на печать налоговые накладные (за укр. законодательством - неплательщик НДС (два экземпляра) и плательщик НДС(вариант организации)...

04.06.2008    7898    0    mut_mut    1    

Помощник печати

Пакетная печать v8 1cv8.cf Россия Бесплатно (free)

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

21.12.2007    12376    0    Legavaz    1    

Универсальный редактор реквизитов документов и справочников из УПП 8.0

Обработка документов Пакетная печать Обработка справочников v8 УПП1 Бесплатно (free)

Обработка не моя. Добавил пару строк и процедур. Но чтоб никто больше не пыхтел зря, рекомендую воспользоваться. Если бы кто-нибудь написал DLL-ку, которая вытаскивала бы из 8.0 тексты процедур во внешние текстовые файлы, тогда и групповую печать для встроенных печатных форм можно было бы сделать универсальной. Потому что макет-то доступен, а вот процедура печати должна быть только в модуле объекта, да еще и с директивой "Экспорт". Конечно можно все документы конфигурации снабдить такими процедурами, но увы, это будет уже не универсально... Призываю крутых помочь! См. идею в дополнительно.

13.08.2007    11994    0    ge_ni    3    

Пакетная печать РКО, ПКО для 1С 8.0 Бухгалтерия

Пакетная печать Кассовые операции Кассовые операции v8 БП2.0 Россия БУ Бесплатно (free)

Пакетная печать РКО, ПКО для 1С 8.0 Бухгалтерия

09.08.2007    9609    0    vitkovsky    2    

Групповая печать документов

Пакетная печать v8 1cv8.cf Бесплатно (free)

"Множественная" печать документов из любой типовой конфигурации. "Сканирует" виды документов конфигурации, общие макеты и макеты документов. Выбираете вид документов и макет на основании которого будет формироваться печатная форма. К примеру: документы - "Перемещение товаров", макет - "ТОРГ13". Можно настроить непосредственную печать на принтер без предварительного просмотра, количество копий и др. Если для выбранных документа и макета не существует печатных форм, то выдаётся сообщение при попытки печати. Обработка писалась "на скорую руку", поэтому не судите строго. Рабочая, быстронастраиваемая программулина.

11.05.2007    9566    0    yalex9    14    

Пакетная печать документов

Пакетная печать v8 1cv8.cf Россия Бесплатно (free)

Пакетная печать документов

27.07.2006    19043    0    acsent    16