Если вы работаете с платформой 1С:Предприятие, то рано или поздно столкнётесь с аббревиатурой ПВХ. Этот термин часто вызывает вопросы у новичков, но при этом активно используется в документации, конфигурациях и обмене данными. В отличие от распространённых понятий вроде "справочников" или "документов", ПВХ не имеет прямого аналога в бизнес-логике, что делает его менее очевидным.

На практике ПВХ (Поле Внешней Компоненты) — это механизм, который позволяет расширять функциональность 1С за счёт подключения внешних библиотек, ActiveX-объектов или COM-компонент. Он используется для интеграции с оборудованием (сканеры штрихкодов, фискальные регистраторы), работы с API сторонних сервисов (банки, госуслуги, маркетплейсы) и даже для создания пользовательских интерфейсов с элементами, недоступными в стандартной конфигурации. Без ПВХ многие задачи автоматизации были бы невозможны или требовали бы сложных обходных решений.

В этой статье мы разберём, что такое ПВХ в 1С на уровне платформы, как оно работает "под капотом", где применяется на практике, и какие нюансы нужно учитывать при настройке. Материал будет полезен как программистам 1С, так и администраторам, которые сталкиваются с интеграционными задачами.

Что такое ПВХ в 1С: определение и назначение

ПВХ (Поле Внешней Компоненты) — это объект платформы 1С:Предприятие, который служит "мостом" между внутренней логикой системы и внешними компонентами. Внешние компоненты, в свою очередь, представляют собой динамические библиотеки (.dll), ActiveX-объекты или COM-серверы, написанные на других языках программирования (C++, C#, Delphi и др.).

Основное назначение ПВХ — расширение возможностей 1С там, где встроенные средства платформы недостаточны. Например:

  • 🔌 Работа с оборудованием: подключение сканеров штрихкодов, терминалов сбора данных, весов, принтеров этикеток.
  • 🌐 Интеграция с веб-сервисами: обмен данными с банками (СБП, эквайринг), госорганами (ФНС, ПФР), маркетплейсами (Ozon, Wildberries).
  • 🖥️ Реализация сложных алгоритмов: шифрование, работа с графикой, обработка больших данных (если встроенные средства 1С слишком медленные).
  • 📊 Создание нестандартных элементов интерфейса: кастомные таблицы, графики, диаграммы.

С технической точки зрения, ПВХ — это объект конфигурации, который привязывается к конкретной внешней библиотеке. В коде 1С он выглядит как обычная переменная, но его методы и свойства определяются не в конфигураторе, а во внешнем коде. Например, если вы подключили компоненту для работы с ЭЦП, то в 1С сможете вызывать методы вроде ПодписатьДокумент() или ПроверитьПодпись(), хотя сами эти методы реализованы в .dll-файле.

⚠️ Внимание: ПВХ работает только в толстом клиенте и веб-клиенте (с ограничениями). В тонком клиенте и мобильном приложении большинство внешних компонент недоступны из-за ограничений безопасности.

Как устроено ПВХ: архитектура и принципы работы

Чтобы понять, как работает ПВХ, разберём его архитектуру на примере типичного сценария. Допустим, вам нужно подключить к 1С сканер штрихкодов:

  1. Внешняя компонента: разработчик пишет на C++ библиотеку BarcodeScanner.dll, которая умеет общаться со сканером по COM-порту. В этой библиотеке реализованы методы Scan(), GetLastBarcode() и т.д.
  2. Регистрация в 1С: в конфигураторе создаётся объект ПВХ с указанием пути к BarcodeScanner.dll и её уникального идентификатора (CLSID).
  3. Использование в коде: в модуле 1С создаётся экземпляр ПВХ, и вызываются его методы, например:
    Сканер = Новый ПолеВнешнейКомпоненты.БиблиотекаСканера();
    

    Баркод = Сканер.Scan();

  4. Выполнение: платформа 1С передаёт вызов в BarcodeScanner.dll, та общается со сканером и возвращает результат обратно в 1С.

Важные нюансы архитектуры:

  • 🔗 ПВХ работает через COM-интерфейс (для Windows) или Native API (для Linux). Это означает, что компонента должна быть правильно зарегистрирована в системе.
  • 🛡️ Безопасность: 1С проверяет цифровую подпись внешней компоненты перед загрузкой. Неподписанные библиотеки могут блокироваться.
  • 📦 Разрядность: если 1С работает в 64-битном режиме, то и компонента должна быть 64-битной (и наоборот).

Компонент системы Роль в работе ПВХ Примеры
Внешняя библиотека Реализует логику работы с оборудованием или сервисом AtolFptr10.dll (фискальные регистраторы), CryptoPro.dll (ЭЦП)
Объект ПВХ в 1С Связывает библиотеку с конфигурацией, хранит настройки подключения Поле внешней компоненты "СканерШтрихкодов" с привязкой к BarcodeScanner.dll
Код 1С Вызывает методы ПВХ для выполнения задач Сканер.ПрочитатьШтрихкод(), ЭЦП.ПодписатьФайл()
Операционная система Обеспечивает загрузку и выполнение внешнего кода Регистрация CLSID в реестре Windows, права доступа к /usr/lib в Linux
⚠️ Внимание: Если внешняя компонента требует административных прав (например, для работы с USB-портами), то 1С также должна запускаться с правами администратора. В противном случае методы ПВХ будут возвращать ошибки доступа.
📊 С какой целью вы используете ПВХ в 1С?
Для работы с оборудованием
Для интеграции с веб-сервисами
Для реализации сложных алгоритмов
Ещё не использовал

Виды внешних компонент в 1С: какие бывают и где применяются

Внешние компоненты, с которыми работает ПВХ, можно классифицировать по нескольким критериям. Рассмотрим основные виды и сферы их применения.

1. По типу подключения

  • 📎 InProc (внутрипроцессные): загружаются в адресное пространство 1С. Быстрее работают, но менее стабильны (падение компоненты ведёт к падению 1С). Пример: NativeAPI для Linux.
  • 🖥️ OutProc (внепроцессные): выполняются в отдельном процессе. Медленнее, но безопаснее. Пример: COM-серверы в Windows.

2. По назначению

Тип компоненты Примеры задач Популярные библиотеки
Оборудование Сканеры, принтеры, терминалы сбора данных Atol Fptr, DataLogic, Zebra
Криптография ЭЦП, шифрование, работа с сертификатами CryptoPro, ViPNet, Лисси-CSP
Веб-сервисы Обмен с банками, госорганами, API маркетплейсов SBP Plugin, Клиент ФНС, Ozon API
Графика и отчёты Построение графиков, экспорт в PDF, работа с изображениями GdPicture, FastReport

3. По способу разработки

  • 🛠️ Стандартные: поставляются вместе с 1С или типовой конфигурацией (например, компонента для работы с 1С:Документооборот).
  • 👨‍💻 Кастомные: разрабатываются под конкретные задачи заказчика (например, интеграция с уникальным оборудованием).
  • 📦 Сторонние: покупаются у вендоров (например, Atol для фискальных регистраторов).

Критичный нюанс: если вы используете стороннюю компоненту, убедитесь, что она сертифицирована для работы с вашей версией 1С. Например, компоненты для фискальных регистраторов должны соответствовать требованиям ФНС (приказ № 54-ФЗ).

💡

Перед покупкой внешней компоненты проверьте её совместимость не только с версией 1С, но и с разрядностью ОС (32/64 бит). Некоторые вендоры продают отдельные лицензии для разных архитектур.

Как подключить ПВХ в 1С: пошаговая инструкция

Рассмотрим процесс подключения внешней компоненты на примере Atol Fptr10 (для работы с фискальными регистраторами). Инструкция актуальна для 1С:Предприятие 8.3.

Шаг 1: Установка внешней компоненты

Скачайте дистрибутив компоненты с сайта производителя (например, Atol_Fptr10_Setup.exe) и установите её на компьютер. Обратите внимание:

  • Для 32-битной 1С нужна 32-битная версия компоненты (даже если ОС 64-битная).
  • Для 64-битной 1С — соответственно, 64-битная.
  • После установки компонента должна быть зарегистрирована в системе (для COM-объектов).

Шаг 2: Создание объекта ПВХ в конфигураторе

Откройте конфигуратор и выполните следующие действия:

  1. Перейдите в дерево объектов конфигурации: Общие → Поля внешних компонент.
  2. Создайте новый объект (например, ФискальныйРегистраторАтол).
  3. В свойствах объекта укажите:
    • Имя внешней компоненты: AddIn.Fptr10t (для Atol).
    • CLSID: уникальный идентификатор компоненты (можно найти в документации).
    • Тип внешней компоненты: InProc или OutProc.

Шаг 3: Использование ПВХ в коде

Теперь можно работать с компонентой из встроенного языка. Пример кода для печати чека:

ФР = Новый ПолеВнешнейКомпоненты.ФискальныйРегистраторАтол();

ФР.ОткрытьСмену();

ФР.НапечататьТекст("Тестовый чек");

ФР.ПробитьЧек(100, 0, "наличные");

ФР.ЗакрытьСмену();

☑️ Проверка перед подключением ПВХ

Выполнено: 0 / 4
⚠️ Внимание: Если при создании объекта ПВХ вы видите ошибку "Не найдена внешняя компонента", проверьте:
  • Правильность указанного CLSID.
  • Соответствие разрядности 1С и компоненты.
  • Наличие компоненты в реестре Windows (для COM-объектов).

Типичные ошибки при работе с ПВХ и как их исправить

Работа с внешними компонентами часто сопровождается ошибками, особенно если настройка выполняется впервые. Рассмотрим самые распространённые проблемы и способы их решения.

1. Ошибка "Не найдена внешняя компонента"

Причина: 1С не может найти или загрузить библиотеку. Это может происходить из-за:

  • 🔹 Неправильного CLSID или имени компоненты.
  • 🔹 Отсутствия файла .dll в указанном пути.
  • 🔹 Несоответствия разрядности (32/64 бит).
  • 🔹 Отсутствия прав на доступ к библиотеке.

Решение:

  • Проверьте CLSID в документации к компоненте.
  • Убедитесь, что файл .dll находится в папке, доступной для 1С (например, C:\Program Files\1C\v8\bin).
  • Запустите 1С от имени администратора.
  • Для COM-объектов выполните регистрацию командой:
    regsvr32 "C:\Путь\К\Файлу.dll"

2. Ошибка "Компонента не лицензирована"

Причина: Многие внешние компоненты требуют лицензионного ключа или активации. Например, Atol Fptr или CryptoPro не будут работать без действующей лицензии.

Решение:

  • Проверьте срок действия лицензии в личном кабинете производителя.
  • Убедитесь, что лицензионный ключ правильно указан в настройках компоненты.
  • Для некоторых компонент (например, КриптоПро) требуется установка сертификата в хранилище Windows.

3. Ошибки доступа к оборудованию

Причина: Если компонента взаимодействует с USB-портами, COM-портами или сетевыми устройствами, могут возникать ошибки вида "Отказано в доступе" или "Устройство не найдено".

Решение:

  • Запустите 1С от имени администратора.
  • Проверьте, что устройство правильно подключено и определяется в системе (например, через Диспетчер устройств в Windows).
  • Для сетевых устройств (например, фискальных регистраторов) проверьте настройки брандмауэра.

Что делать, если компонента работает в конфигураторе, но не работает в пользовательском режиме?

Это типичная проблема, связанная с правами доступа. В конфигураторе 1С запускается с правами разработчика, а в пользовательском режиме — с правами текущего пользователя. Решение:

1. Настройте права на папку с компонентой (например, дайте права на чтение/запуск для группы "Пользователи").

2. Проверьте, что компонента зарегистрирована для всех пользователей (а не только для текущего).

3. В некоторых случаях помогает установка компоненты в папку C:\Program Files\Common Files.

Примеры использования ПВХ в реальных задачах

Чтобы лучше понять, как применяется ПВХ на практике, разберём несколько реальных кейсов.

1. Интеграция с фискальным регистратором (Атол)

Задача: Автоматизировать печать чеков в розничном магазине с передачей данных в ОФД.

Решение:

  • Подключаем компоненту Atol Fptr10 через ПВХ.
  • В модуле документа ЧекККМ пишем код для отправки данных на регистратор:
    ФР = Новый ПолеВнешнейКомпоненты.ФискальныйРегистраторАтол();
    

    ФР.ОткрытьСмену();

    ФР.НапечататьТекст("ООО Ромашка, ИНН 1234567890");

    ФР.ПробитьЧек(Сумма, НДС, ТипОплаты);

    ФР.ЗакрытьЧек();

  • Настраиваем обработку ошибок (например, если регистратор не отвечает).

2. Работа с электронной подписью (КриптоПро)

Задача: Подписывать электронные документы для отправки в ФНС или контрагентам.

Решение:

  • Подключаем компоненту CryptoPro.
  • В модуле обработки формируем код для подписи файла:
    ЭЦП = Новый ПолеВнешнейКомпоненты.КриптоПро();
    

    ЭЦП.УстановитьСертификат("ИмяСертификата");

    Подпись = ЭЦП.ПодписатьФайл("C:\Документ.xml");

    ЭЦП.СохранитьПодпись("C:\Подпись.sig");

  • Настраиваем проверку подписи на стороне получателя.

3. Обмен данными с банком (СБП)

Задача: Автоматически формировать платежные поручения и отправлять их в банк через систему быстрых платежей (СБП).

Решение:

  • Подключаем компоненту банка (например, Сбербанк Бизнес Онлайн).
  • В модуле документа ПлатежноеПоручение пишем код для отправки:
    Банк = Новый ПолеВнешнейКомпоненты.СбербанкАПИ();
    

    Банк.Авторизоваться("Логин", "Пароль");

    Статус = Банк.ОтправитьПлатеж(Документ.ЭкспортВСтроку());

    Если Статус <> "Успех" Тогда

    Сообщить("Ошибка: " + Банк.ПолучитьОшибку());

    КонецЕсли;

💡

ПВХ позволяет автоматизировать рутинные операции (печать чеков, подпись документов, обмен с банками), сокращая время обработки и уменьшая риск ошибок.

Безопасность и оптимизация работы с ПВХ

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

1. Безопасность

  • 🔒 Цифровая подпись: используйте только компоненты с действующей электронной подписью. Неподписанные библиотеки могут содержать вредоносный код.
  • 🛡️ Обновления: регулярно обновляйте внешние компоненты, особенно если они работают с платежами или персональными данными.
  • 👤 Права доступа: ограничьте права на папки с компонентами. Например, пользователи не должны иметь права на изменение .dll-файлов.
  • 🔍 Логирование: ведите журнал вызовов внешних компонент (например, через РегистраторЖурнала в 1С). Это поможет отследить подозрительную активность.

2. Производительность

  • Кэширование: если компонента часто используется, создавайте её экземпляр один раз (например, в глобальном модуле) и переиспользуйте.
  • 🗑️ Очистка ресурсов: всегда освобождайте ресурсы после работы с компонентой (например, вызывайте ЗакрытьСоединение()).
  • 📊 Тестирование: перед внедрением в боевую базу проверьте компоненту на тестовом стенде под нагрузкой.

Пример оптимизированного кода:

// Создаём экземпляр один раз при старте сеанса

Перем ФР;

Процедура ПриНачалеРаботыСистемы()

ФР = Новый ПолеВнешнейКомпоненты.ФискальныйРегистраторАтол();

КонецПроцедуры

Функция ПробитьЧек(Сумма)

Попытка

ФР.ПробитьЧек(Сумма);

Возврат Истина;

Исключение

ЗаписатьЖурналРегистрации("Ошибка ФР: " + ОписаниеОшибки());

Возврат Ложь;

КонецПопытки;

КонецФункции

⚠️ Внимание: Если внешняя компонента работает с сетевыми ресурсами (например, обмен с банком), настройте тайм-ауты для предотвращения "зависаний" 1С. Например, в CryptoPro можно ограничить время ожидания ответа сервера.

FAQ: Частые вопросы о ПВХ в 1С

Можно ли использовать ПВХ в тонком клиенте или веб-клиенте?

В тонком клиенте большинство внешних компонент недоступны из-за ограничений безопасности. В веб-клиенте работа с ПВХ возможна только для компонент, поддерживающих ActiveX или Java-апплеты, но это устаревшие технологии. Для современных веб-решений лучше использовать HTTP-сервисы или REST API.

Как проверить, что внешняя компонента работает корректно?

Создайте тестовый сценарий:

  1. В конфигураторе напишите простой код для вызова метода компоненты (например, ПолучитьВерсию()).
  2. Запустите 1С в режиме отладки и проверьте, возвращает ли метод ожидаемый результат.
  3. Используйте Сообщить() для вывода промежуточных данных.

Если метод возвращает ошибку, проверьте:

  • Правильность подключения компоненты.
  • Наличие лицензии.
  • Права доступа.

Что делать, если после обновления 1С перестала работать внешняя компонента?

Это типичная проблема, связанная с изменением архитектуры платформы. Проверьте:

  • 🔹 Совместимость компоненты с новой версией 1С (на сайте производителя).
  • 🔹 Разрядность: если вы обновили 1С с 32-битной на 64-битную, нужна соответствующая версия компоненты.
  • 🔹 Настройки безопасности: в новых версиях 1С могут ужесточаться требования к подписи внешних библиотек.

Если компонента устарела, обратитесь к производителю за обновлённой версией.

Можно ли разрабатывать свои внешние компоненты для 1С?

Да, это возможно. Для разработки внешней компоненты вам потребуется:

  • 🛠️ Знание C++, C# или Delphi (в зависимости от платформы).
  • 📖 Документация по 1С:Предприятие 8. Компонента интеграции (доступна на сайте 1С).
  • 🔑 SDK от 1С для работы с COM-интерфейсами.

Простейшая компонента на C# может выглядеть так:

[ComVisible(true)]

[Guid("YOUR-GUID-HERE")]

public class MyAddIn : IAddInComponent

{

public string TestMethod()

{

return "Hello from external component!";

}

}

После компиляции библиотеку нужно зарегистрировать в системе и подключить в 1С через ПВХ.

Какие есть альтернативы ПВХ для интеграции с оборудованием?

Если по каким-то причинам использовать ПВХ невозможно, рассмотрите альтернативы:

  • 🌐 HTTP/API: многие современные устройства (например, фискальные регистраторы) поддерживают обмен по HTTP. Можно отправлять команды через HTTPСоединение.
  • 📡 RDP/Terminal: для некоторых задач подходит удалённое управление оборудованием через терминальный сервер.
  • 📥 Файловый обмен: некоторые устройства умеют читать команды из файлов (например, print.txt для принтеров этикеток).

Однако ПВХ остаётся самым надёжным и быстрым способом для большинства сценариев.