На одном из обслуживаемых мной предприятий решили ввести маркировку продукции. Для этого приобрели wifi принтер этикеток и планшет с android. Опубликовали базу на apache, установили клиента 1с android. 1с прекрасно видела принтеры и печатала, но на принтеры HP, Canon, Samsung, а это китайское чудо в упор видеть не хотело. Разрабатывать под android я не умею, поэтому пошёл другим путём.
Принтер мог печатать с помощью языка разметки ZPL. Поэтому первым делом формирую этикетку. Это можно сделать и онлайн например на сайте Labelary Online ZPL Viewer http://labelary.com/.
&НаСервере
Функция СформироватьСтроку(ВыбраннаяСтрока)
Стр = Объект.ГотоваяПродукция[ВыбраннаяСтрока];
ТекстСсылки = Стр.АналитикаВыпуска.Код+";"+
Стр.Продукция.Наименование+";"+
Объект.Дата+";"+
Стр.Вес+";"+
Стр.Количество+";";
СтрокаЭтикетки= "
|^XA
|^FO30,25
|^ADN,26,10
|^FDCode: "+Стр.АналитикаВыпуска.Код+";
|^FS
|^FO30,50
|^ADN,26,10
|^FD"+(Стр.Продукция.Наименование)+";
|^FS
|^FO30,75
|^ADN,26,10
|^FDData: "+(Объект.Дата)+";
|^FS
|^FO30,100
|^ADN,26,10
|^FDWeight: "+(Стр.Вес)+" kg.;
|^FS
|^FO20,125
|^GB420,0,2
|^FS
|^FO100,140
|^BQN,2,8
|^FDMM,A"+(ТекстСсылки)+";
|^FS
|^XZ";
Возврат СтрокаЭтикетки;
КонецФункции
2. Т.к. 1с была уже опубликована на веб сервере, решил установить на apache интерпретатор php и с его помощью отправлять этикетку на принтер.
&НаСервере
Функция ЗапросХТТП(СтрокаЭтикетки)
Соединение = Новый HTTPСоединение("192.168.34.4",8881);
Запрос = Новый HTTPЗапрос("/print.php?label="+СтрокаЭтикетки);
Результат = Соединение.Получить(Запрос);
//В запросе можно обратиться к нужному ресурсу и с нужными параметрами
Если Результат.КодСостояния = 200 Тогда
Возврат Результат.ПолучитьТелоКакСтроку(); //получим HTML-код страницы
Иначе
Возврат "Код ответа: "+Результат.КодСостояния; //анализируем код состояния и делаем выводы
КонецЕсли;
КонецФункции
В php есть функция, которой мне не хватило в 1с - это работа с сокетом
<?php
error_reporting(E_ALL);
/* Get the port for the service. */
$port = "9100";
/* Get the IP address for the target host. */
$host = "192.168.57.113";
$label = $_GET['label'];
//$label = iconv(mb_detect_encoding($text), "UTF-8", $text);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false)
{
echo "Не возможно создать соединение: " . socket_strerror(socket_last_error ()) . "\n";
} else
{
//echo "Attempting to connect to '$host' on port '$port'...";
$result = socket_connect($socket, $host, $port);
if ($result === false) //die('Не возможно соединится с принтером. Ошибка:' . socket_strerror (socket_last_error($socket)) . '\n';
{
echo "Не возможно соединится с принтером. Ошибка:.\nReason: ($result) " . socket_strerror (socket_last_error($socket)) . "\n";
} else
{
//echo $label."\n";
echo 'Напечатана этикетка:';
socket_write($socket, $label, strlen($label));
socket_close($socket);
}
}
?>