Интеграция с маркетплейсами — одна из самых актуальных задач для современного разработчика 1С. При работе с Wildberries по схеме FBS или при оформлении поставок часто возникает необходимость программно получать и печатать этикетки с QR-кодами. API Wildberries обычно возвращает данные в формате 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-документ, который можно открыть любым просмотрщиком.
Иногда стандартный PDF от Wildberries не подходит: например, если вам нужно добавить на этикетку дополнительную информацию (внутренний артикул, наименование склада или цвет), которую маркетплейс не выводит. В этом случае вместо готового PDF-файла следует запрашивать у API идентификаторы заказов или поставок.
Рассмотрим, как реализовать собственную генерацию QR-кода внутри 1С:
ТипШтрихкода.QR.Выясним причину, почему это часто удобнее: при собственной генерации вы полностью контролируете качество картинки. 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С без лишних кликов.
Часто возникает вопрос: можно ли "склеить" несколько строк Base64 в один большой PDF? Важно понимать: простое сложение строк (конкатенация) не сработает. Структура PDF-файла содержит заголовки и таблицы смещений, которые разрушатся при обычном слиянии данных.
Как же поступить, если нужно напечатать все QR-коды одним заданием? Проанализируем два подхода:
При печати этикеток Wildberries (обычный размер 58х40 мм) крайне важно соблюдать следующие правила, чтобы избежать проблем на приемке склада:
Масштабирование: В настройках драйвера принтера этикеток обязательно установите "Реальный размер" (Actual Size). Если драйвер или программа печати попытается "вписать" PDF в область печати, пропорции QR-кода могут измениться, и он станет нечитаемым для складских сканеров.
Качество термопечати: Убедитесь, что плотность печати в настройках принтера достаточна для четких границ квадратов в QR-коде. Слишком бледная печать или "залитые" краской мелкие детали — частая причина возвратов товара.
Использование BinaryData: Для повышения производительности при работе с большим количеством файлов, старайтесь минимизировать операции записи на жесткий диск. Если вы используете PNG-формат (который также может отдавать API), вы можете преобразовывать Base64 сразу в объект Картинка и выводить в табличный документ без создания промежуточных файлов на диске.
Рассмотрим подробнее работу с картинкой:
// Если API вернуло PNG вместо PDF
ДвоичныеДанныеКартинки = Base64Значение(СтрокаBase64);
КартинкаДляЭтикетки = Новый Картинка(ДвоичныеДанныеКартинки);
// Теперь эту картинку можно вставить в область макета:
// Область.Рисунки.QR_Код.Картинка = КартинкаДляЭтикетки;
Таким образом, мы изучили полный цикл работы с QR-кодами Wildberries: от декодирования сырых данных из API до автоматизированной отправки на печать. Выбор конкретного метода (сохранение PDF или генерация внутри 1С) зависит от ваших требований к кастомизации этикетки.