При работе с облачными сервисами автоматизации розничной торговли, такими как «МойСклад», пользователи часто сталкиваются с жестко заданными форматами печатных форм. Стандартное приложение «Касса МойСклад» ориентировано на печать товарных чеков в формате А4 или А5 через PDF, что совершенно не подходит для компактных термопринтеров с шириной ленты 80 мм. В этой статье мы разберем технические способы решения этой проблемы, начиная от использования виртуальных портов и заканчивая автоматизацией через API.
Проанализируем наиболее гибкое решение, предложенное техническими специалистами. Проблема стандартной печати заключается в том, что приложение формирует готовый документ и отправляет его на системный принтер без возможности изменения макета. Мы можем перехватить этот поток данных с помощью специального инструмента — mfilemon (Multi-File Port Monitor).
Разберем алгоритм работы этого метода по шагам:
mfilemon, который создает виртуальный порт в системе Windows..exe), который будет запускаться каждый раз, когда на этот принтер приходит задание.Проанализируем пример логики, которую должен выполнять ваш скрипт-обработчик. Допустим, мы используем Python или любой другой язык для обработки входящего файла:
// Псевдокод логики обработки чека
ПутьКФайлу = ПолучитьАргументКоманднойСтроки(); // Получаем путь к PDF
КартинкаЧека = КонвертироватьPDFвИзображение(ПутьКФайлу);
ОбрезаннаяКартинка = ОбрезатьПоля(КартинкаЧека, Ширина80мм);
ОтправитьНаПринтер(ОбрезаннаяКартинка, "Название_Термопринтера");
Этот метод позволяет полностью игнорировать стандартные настройки «МойСклад» и формировать чек так, как вам удобно.
Другой продвинутый способ — заставить систему думать, что она печатает на сетевой принтер, в то время как данные перехватываются специальным сервером. Разберем проект rsvp (Remote Spooler Virtual Printer). Это решение позволяет создать виртуальный принтер, который принимает данные по сети и сохраняет их или обрабатывает.
Рассмотрим преимущества этого подхода:
ESC/POS, которые «понимают» почти все чековые принтеры.Если мы не хотим использовать сложные программные «костыли», стоит проверить возможности самой системы «МойСклад». Хотя приложение «Касса» ограничено, основной веб-интерфейс позволяет создавать свои шаблоны печатных форм. Рассмотрим, как это применить для узкой ленты.
Выясним причину, по которой стандартный шаблон не подходит: он имеет фиксированные поля для формата А5. Однако в редакторе шаблонов «МойСклад» (доступном через браузер в разделе «Настройки» -> «Печать») можно создать новый шаблон документа «Продажа».
Разберем настройку по шагам:
Важный момент: Если печатать такой документ через браузер на чековый принтер, он подтянется корректно. Однако приложение «Касса» может продолжать навязывать свой стандартный формат. В этом случае печать придется выполнять не из интерфейса кассира, а из раздела «Продажи» основного аккаунта.
Для компаний, имеющих в штате программиста, самым надежным решением будет использование API. Рассмотрим ситуацию, когда нам нужно полностью автоматизировать процесс без участия стандартного диалога печати.
Посмотрим на алгоритм реализации:
C# или Node.js).retailstore/v1/retaildemand (Розничные продажи).ESC/POS и отправляются напрямую в порт принтера (например, COM или USB через Generic/Text Only драйвер).Пример структуры данных, которую мы получаем из API для формирования своего чека:
{
"name": "00001",
"moment": "2023-10-27 12:00:00",
"positions": [
{
"quantity": 2,
"price": 15000,
"assortment": { "name": "Ручка шариковая Синяя" }
}
],
"sum": 30000
}
Приложение «Касса МойСклад» отлично умеет печатать чеки, если оно «думает», что подключено к фискальному регистратору (ФР). Мы можем воспользоваться этим, установив программный эмулятор ФР (например, эмулятор протокола АТОЛ).
Проанализируем ситуацию: приложение отправляет данные на виртуальный COM-порт, где их «слушает» эмулятор. Эмулятор, вместо фискализации данных, просто перенаправляет текстовую информацию на обычный принтер чеков. Это позволяет сохранить привычный интерфейс работы кассира, при этом получая корректно отформатированный узкий чек со списком товаров.
В ходе обсуждения часто возникает вопрос: а не проще ли перейти на 1С:Розница? Разберем этот вариант подробнее. В 1С механизмы печати чеков и товарных чеков изначально крайне гибкие. Вы можете использовать объект Макет, настроить его под любой размер бумаги и программно управлять каждой строкой.
Если ваши бизнес-процессы требуют сложной кастомизации печатных форм, 1С действительно выглядит выигрышнее. В 1С для вывода на печать используется знакомый многим код:
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("ТоварныйЧек");
Область = Макет.ПолучитьОбласть("Строка");
// Заполнение параметров области
ТабДок.Вывести(Область);
ТабДок.ИмяПринтера = "ЧековыйПринтер80мм";
ТабДок.Напечатать(РежимИспользованияПринтера.БезПредварительногоПросмотра);
Однако, если вы уже настроили учет в «МойСклад», использование одного из вышеописанных методов с виртуальными принтерами или API позволит сэкономить значительные ресурсы на миграции системы учета.
Подведем итоги нашего анализа. Выбор метода зависит от ваших технических ресурсов:
mfilemon для перехвата PDF и его автоматической обрезки/печати.Каждый из этих способов позволяет обойти ограничение «МойСклад» и обеспечить покупателей красивыми и читаемыми товарными чеками на стандартной 80-мм ленте.