QR-код в 1С 8.3 на Linux: счета без QR после переезда и как это исправить
QR-код в 1С 8.3 не строится на Linux-сервере, потому что COMОбъект работает только в Windows. Чтобы вернуть код в счета и печатные формы, вызывайте генератор по HTTP через HTTPСоединение, получите картинку как двоичные данные и покажите её через временное хранилище. Сервис генерации держите внутри своей сети.
Почему QR-код в 1С пропадает после переезда на Linux 🐧
Пятница, база переехала на Linux-сервер. Документы проводятся, отчёты строятся, все довольны. В понедельник в 9:00 менеджер оптовой компании формирует счёт на оплату: вместо QR-кода пустое место, а в журнале регистрации ошибка на строке «Новый COMОбъект».
Причина простая. QR-код когда-то рисовали через COM-компоненту, зарегистрированную на Windows-сервере. COM — технология Windows, и у сервера 1С на Linux её нет. Но разработчик проверял обработку на своём Windows-компьютере в файловой базе, где компонента стояла, поэтому на тесте всё работало. Так ошибка попадает в рабочую базу, и первыми её видят клиенты.
Ставка здесь не абстрактная. Если печатная форма падает целиком, менеджер не может выставить счёт, и отгрузка стоит, пока администратор разбирается. Если форма открывается без кода, клиент вводит реквизиты вручную, ошибается в расчётном счёте, и платёж возвращается. На закрытии месяца бухгалтерия собирает такие счета в PDF руками.
Сам QR-код только самый заметный симптом. Любая обработка с COMОбъект, будь то Excel, Word или обмен с оборудованием, на Linux-сервере упадёт точно так же.
Как исправить: HTTPСоединение и временное хранилище вместо COM 🔧
Схема такая: небольшой сервис превращает строку в PNG, сервер 1С вызывает его по HTTP, картинка попадает в форму или в печатную форму. Сначала проверьте встроенную генерацию QR в БСП вашей конфигурации: в свежих релизах COM для неё не нужен, и иногда хватает обновления. Если QR делает самописная обработка, идите дальше.
Сервис генерации внутри вашей сети
Сервис принимает POST со строкой и отдаёт PNG. Написать его можно на любом языке: нужна библиотека QR и короткая обвязка. Держите его рядом с сервером 1С. Платёжный QR по ГОСТ Р 56042-2014 содержит реквизиты получателя, а иногда ФИО и адрес плательщика. Это персональные данные, и отправка на чужой публичный генератор означает передачу их третьей стороне, а значит вопросы к 152-ФЗ.
Вызов из серверного кода 1С
Выполняйте вызов на сервере. Если создать HTTPСоединение на клиенте, запрос уйдёт с рабочей станции пользователя, и доступ к сервису придётся открывать для всех компьютеров офиса.
- ✓Создайте HTTPСоединение к адресу сервиса и задайте таймаут в секундах. Нулевой таймаут означает «ждать бесконечно», и зависший сервис повесит печать.
- ✓Соберите HTTPЗапрос с путём к методу сервиса. Строку QR положите в тело через УстановитьТелоИзСтроки с кодировкой UTF-8.
- ✓Отправьте запрос методом ОтправитьДляОбработки и проверьте КодСостояния. Ответ 200 с пустым телом тоже случается.
- ✓Заберите картинку через ПолучитьТелоКакДвоичныеДанные.
Картинка в форме и в печатной форме
В управляемой форме двоичные данные кладут функцией ПоместитьВоВременноеХранилище. Вторым параметром передайте УникальныйИдентификатор формы: тогда адрес очистится при закрытии формы. Полученный адрес присвойте реквизиту формы с типом «Картинка», и поле картинки покажет QR.
В печатной форме временное хранилище не нужно. Двоичные данные превращают в Новый Картинка и кладут в рисунок табличного документа, размер и положение берут по области, где раньше стоял код.
Адрес временного хранилища не переживает сеанс, поэтому для хранения в базе берите сами двоичные данные. Кэшируйте их по хэшу строки: один и тот же счёт не должен ходить за картинкой при каждой печати.
Какой способ выбрать: четыре варианта в одной таблице
Кроме HTTP, у задачи есть ещё три решения. Сравнение по тому, что важно на Linux-сервере с рабочей базой:
| Способ | Работает на Linux | Данные остаются в контуре | Что нужно сделать | Когда брать |
|---|---|---|---|---|
| COMОбъект | Нет | Да | Ничего не сделать, объекта нет | Только пока сервер на Windows |
| Внешняя компонента (Native API) | Да, если есть сборка под Linux | Да | Найти сборку под вашу ОС и разрядность, подключить | Когда поставщик отдаёт готовую сборку |
| HTTP-сервис в своём контуре | Да | Да | Поднять сервис, переписать вызов в 1С | Основной вариант для счетов, УПД и актов |
| Публичный онлайн-генератор | Да | Нет | Только переписать вызов в 1С | Для строк без персональных и платёжных данных |
Внешняя компонента привязана к ОС и разрядности сервера: сменили дистрибутив Linux, значит, ищите новую сборку. HTTP-сервис от платформы и дистрибутива не зависит, поэтому для печатных форм с платёжными реквизитами мы берём его.
Что делать, если ошибка повторяется 🔍
Код написан, а QR всё равно не появляется. Проверяйте по порядку, от частого к редкому.
- ✓Сервис недоступен с сервера 1С. Запустите curl с той машины, где работает рабочий процесс, а не с вашего ноутбука. Файервол часто открыт только для офисной сети.
- ✓Прокси. Сервер 1С ходит в сеть от своего пользователя, обычно usr1cv8, и настройки браузера ему недоступны. Прокси задают явно через ИнтернетПрокси.
- ✓Сертификат HTTPS. Если сервис отвечает по сертификату внутреннего УЦ, добавьте корневой сертификат в системное хранилище Linux-сервера. Иначе соединение оборвётся с ошибкой проверки.
- ✓Кириллица. В платёжном QR первая строка ST00012 означает UTF-8, а ST00011 означает Windows-1251. Если сервис читает тело в другой кодировке, банковское приложение покажет иероглифы или откажется читать код.
- ✓Ответ 200, но картинки нет. Прокси или балансировщик может вернуть HTML-страницу ошибки с кодом 200. Проверяйте заголовок Content-Type и размер тела.
- ✓Таймаут. Если сервис отвечает дольше таймаута, печать виснет. Поставьте несколько секунд и пишите превышения в журнал.
Отдельно закройте падение печати. Оберните вызов в Попытку, ошибку запишите через ЗаписьЖурналаРегистрации, а форму всё равно покажите, с пометкой «QR недоступен». Менеджер выставит счёт, администратор разберётся с сервисом позже.
Как предотвратить: проверка до переезда ✅
Искать COM лучше до того, как пользователи сели на Linux, а не после первых жалоб.
- ✓Запустите глобальный поиск по модулям конфигурации на слова COMОбъект, Excel.Application, Word.Application, WScript.Shell. Каждая находка потенциально падает на Linux.
- ✓Разверните копию базы на Linux-стенде и пройдите все печатные формы: счета, УПД, акты, ценники. Заодно сверьте версию платформы и дистрибутив с системными требованиями 1С.
- ✓Добавьте проверку QR-сервиса в мониторинг: простой запрос раз в минуту и уведомление в Telegram, если ответа нет.
- ✓Обновите конфигурацию и БСП до свежего релиза: часть старых обработок с COM после этого просто не нужна. Это отдельная работа, обновление 1С, но делать её лучше до переезда.
Сколько стоит исправить и как это делаем мы 💼
Работа делится на три части: найти все места с COM, переписать печатные формы под HTTP, поднять сервис генерации. Мы считаем по часам: сопровождение 1С и работа системного администратора стоят 3800 руб/час. Число часов зависит от того, сколько обработок обращается к COM, и мы называем его после просмотра конфигурации, а не наугад.
Порядок у нас такой. Сначала разворачиваем копию вашей базы на Linux и ищем падения до переключения пользователей, а не по звонкам бухгалтерии. QR-сервис ставим в вашем контуре, платёжные данные наружу не уходят. Печатные формы переписываем так, чтобы при сбое сервиса документ всё равно открывался. Переезд базы на новый сервер входит во внедрение 1С, а если нужно поправить только печатные формы в рабочей базе, это доработка 1С.
Своего Linux-сервера нет? Сервер 1С в аренду стоит от 1 100 ₽/мес за пользователя. Настраиваем его сразу без COM-зависимостей, чтобы к первому рабочему понедельнику счета уходили с QR.
❓ Частые вопросы
Почему в 1С на Linux не работает COMОбъект?
COM — технология Windows, на Linux её нет, поэтому сервер 1С не может создать COM-объект. Любая обработка, которая строит QR через COM-компоненту, на Linux-сервере упадёт на строке создания объекта. Решение: заменить COM на внешнюю компоненту под Linux или на вызов HTTP-сервиса генерации.
Можно ли использовать публичный онлайн-сервис для QR-кодов в счетах?
Для счетов не рекомендуем. В платёжном QR есть реквизиты получателя, а иногда ФИО и адрес плательщика. Эти данные уходят третьей стороне, и по ним возникают вопросы к 152-ФЗ. Безопаснее поднять небольшой генератор в своей сети рядом с сервером 1С.
Зачем временное хранилище, если можно сохранить картинку в файл?
Файл на сервере нужно создавать, чистить и защищать от чужого доступа, а у пользователя тонкого клиента прямого доступа к нему нет. Временное хранилище живёт в сеансе, адрес передаётся в форму, картинка исчезает при закрытии формы. В печатной форме хранилище не нужно: картинку кладут прямо в рисунок.
Сколько стоит заменить COM на HTTP в наших печатных формах?
Работы считаем по часам: сопровождение 1С и работа системного администратора стоят 3800 руб/час. Число часов зависит от количества печатных форм и обработок с COM, его называем после просмотра конфигурации. Если нужен сервер под Linux, аренда сервера 1С начинается от 1 100 ₽/мес за пользователя.
Что проверить, если QR не появляется после настройки HTTP-запроса?
Идите от простого: доступен ли сервис с самого сервера 1С, настроен ли прокси для пользователя usr1cv8, добавлен ли сертификат УЦ в системное хранилище Linux, совпадает ли кодировка UTF-8 с первой строкой ST00012 и не вернул ли сервис страницу ошибки с кодом 200.
Или позвоните: +7 906 045-28-27 — в рабочее время с 9:00 до 19:00
Остались вопросы? Нужна помощь?
Менеджеры компании с радостью ответят на ваши вопросы, произведут расчет стоимости услуг и подготовят индивидуальное коммерческое предложение.
Бесплатная консультация

