Как загрузить и напечатать логотип на чеке в 1С 7.7 на аппаратах ШТРИХ-М

Программист 1С v7.7 Торговля и дистрибуция
← На главную

Работа с торговым оборудованием в среде 1С 7.7 часто требует прямого взаимодействия с драйверами устройств. Одной из популярных задач является брендирование чеков — вывод графического логотипа компании. Рассмотрим подробно, как реализовать смену логотипа на аппаратах серии ШТРИХ (например, ШТРИХ-LIGHT), проанализируем структуру данных для передачи изображения и разберем типичные ошибки программной реализации.

Понимание механизма печати графики

Прежде всего, разберем, как физически кассовый аппарат (ККТ) обрабатывает картинку. Изображение не передается в момент печати каждой строки чека целиком. Процесс разделен на два этапа: сначала мы должны загрузить данные в память устройства, а затем отправить команду на печать загруженной области. Для этого в драйвере ШТРИХ-М существуют специализированные методы и свойства.

Проанализируем два основных способа решения задачи: ручное формирование строк через LineData и использование автоматизированной загрузки из файла через LoadImage.

Способ 1: Использование свойства LineData для прямой загрузки

Этот метод считается более «низкоуровневым» и требует понимания того, как упакованы пиксели. Разберем структуру данных. Свойство LineData представляет собой строку символов, где каждый символ (байт) кодирует 8 горизонтальных точек изображения.

Выясним технические параметры для модели ШТРИХ-LIGHT. Ширина термоголовки этого аппарата составляет 384 точки. Математика проста: 384 / 8 = 48. Следовательно, для передачи одной горизонтальной линии изображения нам нужно сформировать строку ровно из 48 байт. Каждый бит в байте отвечает за конкретную точку: 1 — точка печатается (черный цвет), 0 — точка пропускается (белый цвет). Старший бит байта соответствует самой левой точке в группе.

Рассмотрим алгоритм работы с LoadLineData:

  1. Устанавливаем пароль администратора (обычно 30) в свойство Password.
  2. В цикле для каждой строки нашего изображения формируем строку из 48 байт.
  3. Присваиваем сформированную строку свойству LineData.
  4. Вызываем метод LoadLineData(). Драйвер последовательно записывает эти строки во внутренний буфер ККТ.

Способ 2: Загрузка через LoadImage (рекомендуемый)

Если нет необходимости вручную генерировать изображение попиксельно в коде 1С, проще и надежнее использовать метод LoadImage. Он позволяет загрузить готовый файл формата BMP. Однако здесь существуют жесткие требования к файлу, несоблюдение которых приводит к тому, что метод отрабатывает без ошибок, но на чеке ничего не печатается.

Проанализируем требования к BMP-файлу:

Посмотрим на пример правильной реализации загрузки и печати в коде 1С 7.7:


// Создаем объект драйвера (предположим, он уже инициализирован как ФР)
ФР.Password = 30; // Пароль системного администратора
ФР.FileName = "C:\pic\logo.bmp";
ФР.CenterImage = 1; // Центрировать изображение
ФР.FirstLineNumber = 1;
// Загружаем картинку в память ККТ
Результат = ФР.LoadImage();

Если Результат <> 0 Тогда
    Сообщить("Ошибка загрузки: " + ФР.ResultCodeDescription);
    Возврат;
КонецЕсли;

// Теперь нужно напечатать то, что загрузили
// Номер последней строки драйвер вычислил сам при загрузке
ФР.FirstLineNumber = 1;
// Допустим, мы знаем, что высота картинки 70 строк
ФР.LastLineNumber = 70; 
ФР.Draw();

Почему метод Draw() может не работать

Часто программисты сталкиваются с ситуацией, когда код выполняется, но принтер молчит. Разберем основные причины:

  1. Режим чека: В большинстве версий прошивок печать графики (метод Draw) запрещена, если открыт фискальный чек. Команду печати логотипа нужно подавать либо до вызова OpenCheck, либо после CloseCheck.
  2. Пароль: Для операций с графикой часто недостаточно пароля кассира. Всегда проверяйте работу под паролем системного администратора (свойство Password = 30).
  3. Свойства строк: Обратите внимание на FirstLineNumber и LastLineNumber. Если вы пытаетесь напечатать диапазон строк, который не был загружен (например, загрузили 50 строк, а печатаете до 100-й), устройство может выдать ошибку.

Альтернативный и современный подход

Для современных онлайн-касс (Ф-серия) рекомендуется использовать метод PrintBitmap, если он поддерживается вашей версией драйвера (обычно начиная с 4.13). Он объединяет загрузку и печать в одну операцию и более лоялен к форматам файлов.

Также рассмотрим наиболее стабильный способ для розничной торговли: хранение логотипа в таблицах ККТ. С помощью утилиты «Тест драйвера» можно один раз загрузить картинку в память аппарата и в таблице настроек (Таблица 1, параметры текста) указать автоматическую печать логотипа при открытии или закрытии каждого чека. В этом случае в коде 1С вообще не нужно будет прописывать команды Draw, что существенно повышает надежность системы.

Выясним, как это сделать программно через таблицы, если все же нужно управлять этим из 1С:


// Установка параметра "Печать рекламного текста" в таблицах
ФР.TableNumber = 1;
ФР.RowNumber = 1;
ФР.FieldNumber = 17; // Номер поля может меняться в зависимости от модели
ФР.ValueOfFieldInteger = 1; // 1 - печатать логотип в начале чека
ФР.WriteTable();

Подводя итог, отметим: если вам необходимо динамически менять логотипы, используйте связку LoadImage и Draw с обязательным контролем ResultCode после каждого шага. Если логотип статичен — лучше один раз настроить его в таблицах ККТ, чтобы не нагружать канал связи с кассой лишними данными при каждом пробитии чека.

← На главную