Как распечатать QR-код Wildberries из 1С: от получения данных до вывода на термопринтер

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

Интеграция с маркетплейсами — одна из самых актуальных задач для современного разработчика 1С. При работе с Wildberries по схеме FBS или при оформлении поставок часто возникает необходимость программно получать и печатать этикетки с QR-кодами. API Wildberries обычно возвращает данные в формате Base64, который представляет собой закодированный PDF-файл. В этой статье мы разберем, как правильно обработать эти данные, превратить их в файл и организовать эффективную печать.

Преобразование Base64 в PDF-файл

Рассмотрим ситуацию: вы выполнили HTTP-запрос к API Wildberries (метод получения стикеров) и получили ответ, содержащий длинную строку символов вида JVBERi0xLjMKMyAwI.... Это двоичные данные файла PDF, упакованные в текстовую строку Base64. Чтобы превратить их в реальный файл на диске, который можно отправить на печать, воспользуемся встроенными средствами платформы 1С.

Разберем программный код для решения этой задачи:


// Предположим, что ОтветОтСервера - это структура, полученная после разбора JSON-ответа API
ДанныеФайла = ОтветОтСервера.data; // Получаем структуру с данными
СтрокаСФайломPDF = ДанныеФайла.file; // Извлекаем саму Base64 строку

// Преобразуем строку в объект ДвоичныеДанные
ФайлPDF_вДвоичныхДанных = Base64Значение(СтрокаСФайломPDF);

// Определяем путь для сохранения. Важно иметь права доступа на запись в эту папку.
ПутьКФайлу = "C:\Temp\wb_sticker_" + Формат(ТекущаяДата(), "ДФ=yyyyMMddHHmmss") + ".pdf";

// Записываем данные на диск
ФайлPDF_вДвоичныхДанных.Записать(ПутьКФайлу);

Проанализируем этот фрагмент. Функция Base64Значение является ключевой: она декодирует текстовый поток обратно в бинарный формат. Метод Записать() объекта ДвоичныеДанные сохраняет результат физически на диск. Теперь у нас есть готовый PDF-документ, который можно открыть любым просмотрщиком.

Генерация собственного QR-кода на основе данных API

Иногда стандартный PDF от Wildberries не подходит: например, если вам нужно добавить на этикетку дополнительную информацию (внутренний артикул, наименование склада или цвет), которую маркетплейс не выводит. В этом случае вместо готового PDF-файла следует запрашивать у API идентификаторы заказов или поставок.

Рассмотрим, как реализовать собственную генерацию QR-кода внутри 1С:

  1. Получение идентификатора: Из ответа API мы берем строку, которая должна быть закодирована в QR. Обычно это уникальный номер поставки или заказа.
  2. Использование компоненты печати штрихкодов: Начиная с версии платформы 8.3.16, 1С умеет генерировать штрихкоды (включая QR) встроенными средствами через объект ТипШтрихкода.QR.
  3. Создание макета: Создаем макет табличного документа с областью, в которую помещаем объект "Рисунок" типа "Штрихкод".

Выясним причину, почему это часто удобнее: при собственной генерации вы полностью контролируете качество картинки. QR-коды из PDF иногда могут "размываться" при масштабировании под разные размеры термоэтикеток, а векторный или правильно сформированный растровый код из 1С будет считываться сканерами WB без ошибок.

Автоматизация массовой печати

Если у вас сотни заказов, открывать каждый сохраненный PDF вручную невозможно. Разберем, как организовать "тихую" печать (Silent Print). В среде 1С это чаще всего реализуется через запуск внешних приложений командной строки.

Одним из самых надежных инструментов для этой задачи является SumatraPDF. Это бесплатная и легкая программа. Посмотрим на пример кода, который отправляет файл сразу на принтер этикеток:


// Путь к исполняемому файлу SumatraPDF и путь к нашему PDF
ПутьКПрограмме = """C:\Program Files\SumatraPDF\SumatraPDF.exe""";
ПараметрыПечати = " -print-to-default -exit-on-print ";
ПолнаяКоманда = ПутьКПрограмме + ПараметрыПечати + """" + ПутьКФайлу + """";

// Запуск приложения без открытия окна
ЗапуститьПриложение(ПолнаяКоманда, , Истина);

В этом примере параметр -print-to-default отправляет документ на принтер по умолчанию, а -exit-on-print закрывает программу сразу после передачи данных в очередь печати. Это позволяет пользователю продолжать работу в 1С без лишних кликов.

Проблема объединения нескольких PDF-файлов

Часто возникает вопрос: можно ли "склеить" несколько строк Base64 в один большой PDF? Важно понимать: простое сложение строк (конкатенация) не сработает. Структура PDF-файла содержит заголовки и таблицы смещений, которые разрушатся при обычном слиянии данных.

Как же поступить, если нужно напечатать все QR-коды одним заданием? Проанализируем два подхода:

  1. Циклическая печать: Мы перебираем массив полученных Base64-строк, каждую сохраняем во временный файл и отправляем на принтер по очереди (как показано в примере выше). Это самый простой и надежный способ для 1С.
  2. Использование внешних библиотек: Если все же нужно создать один файл, придется использовать COM-объекты (например, компоненты от Adobe или PDF-XChange) или консольные утилиты типа PDFTk, которые умеют мержить (склеивать) готовые PDF-файлы в один.

Важные технические нюансы и настройки

При печати этикеток Wildberries (обычный размер 58х40 мм) крайне важно соблюдать следующие правила, чтобы избежать проблем на приемке склада:

Масштабирование: В настройках драйвера принтера этикеток обязательно установите "Реальный размер" (Actual Size). Если драйвер или программа печати попытается "вписать" PDF в область печати, пропорции QR-кода могут измениться, и он станет нечитаемым для складских сканеров.

Качество термопечати: Убедитесь, что плотность печати в настройках принтера достаточна для четких границ квадратов в QR-коде. Слишком бледная печать или "залитые" краской мелкие детали — частая причина возвратов товара.

Использование BinaryData: Для повышения производительности при работе с большим количеством файлов, старайтесь минимизировать операции записи на жесткий диск. Если вы используете PNG-формат (который также может отдавать API), вы можете преобразовывать Base64 сразу в объект Картинка и выводить в табличный документ без создания промежуточных файлов на диске.

Рассмотрим подробнее работу с картинкой:


// Если API вернуло PNG вместо PDF
ДвоичныеДанныеКартинки = Base64Значение(СтрокаBase64);
КартинкаДляЭтикетки = Новый Картинка(ДвоичныеДанныеКартинки);
// Теперь эту картинку можно вставить в область макета:
// Область.Рисунки.QR_Код.Картинка = КартинкаДляЭтикетки;

Таким образом, мы изучили полный цикл работы с QR-кодами Wildberries: от декодирования сырых данных из API до автоматизированной отправки на печать. Выбор конкретного метода (сохранение PDF или генерация внутри 1С) зависит от ваших требований к кастомизации этикетки.

← На главную