Если вы работаете с платформой 1С:Предприятие, то рано или поздно столкнётесь с аббревиатурой ПВХ. Этот термин часто вызывает вопросы у новичков, но при этом активно используется в документации, конфигурациях и обмене данными. В отличие от распространённых понятий вроде "справочников" или "документов", ПВХ не имеет прямого аналога в бизнес-логике, что делает его менее очевидным.
На практике ПВХ (Поле Внешней Компоненты) — это механизм, который позволяет расширять функциональность 1С за счёт подключения внешних библиотек, ActiveX-объектов или COM-компонент. Он используется для интеграции с оборудованием (сканеры штрихкодов, фискальные регистраторы), работы с API сторонних сервисов (банки, госуслуги, маркетплейсы) и даже для создания пользовательских интерфейсов с элементами, недоступными в стандартной конфигурации. Без ПВХ многие задачи автоматизации были бы невозможны или требовали бы сложных обходных решений.
В этой статье мы разберём, что такое ПВХ в 1С на уровне платформы, как оно работает "под капотом", где применяется на практике, и какие нюансы нужно учитывать при настройке. Материал будет полезен как программистам 1С, так и администраторам, которые сталкиваются с интеграционными задачами.
Что такое ПВХ в 1С: определение и назначение
ПВХ (Поле Внешней Компоненты) — это объект платформы 1С:Предприятие, который служит "мостом" между внутренней логикой системы и внешними компонентами. Внешние компоненты, в свою очередь, представляют собой динамические библиотеки (.dll), ActiveX-объекты или COM-серверы, написанные на других языках программирования (C++, C#, Delphi и др.).
Основное назначение ПВХ — расширение возможностей 1С там, где встроенные средства платформы недостаточны. Например:
- 🔌 Работа с оборудованием: подключение сканеров штрихкодов, терминалов сбора данных, весов, принтеров этикеток.
- 🌐 Интеграция с веб-сервисами: обмен данными с банками (СБП, эквайринг), госорганами (ФНС, ПФР), маркетплейсами (Ozon, Wildberries).
- 🖥️ Реализация сложных алгоритмов: шифрование, работа с графикой, обработка больших данных (если встроенные средства 1С слишком медленные).
- 📊 Создание нестандартных элементов интерфейса: кастомные таблицы, графики, диаграммы.
С технической точки зрения, ПВХ — это объект конфигурации, который привязывается к конкретной внешней библиотеке. В коде 1С он выглядит как обычная переменная, но его методы и свойства определяются не в конфигураторе, а во внешнем коде. Например, если вы подключили компоненту для работы с ЭЦП, то в 1С сможете вызывать методы вроде ПодписатьДокумент() или ПроверитьПодпись(), хотя сами эти методы реализованы в .dll-файле.
⚠️ Внимание: ПВХ работает только в толстом клиенте и веб-клиенте (с ограничениями). В тонком клиенте и мобильном приложении большинство внешних компонент недоступны из-за ограничений безопасности.
Как устроено ПВХ: архитектура и принципы работы
Чтобы понять, как работает ПВХ, разберём его архитектуру на примере типичного сценария. Допустим, вам нужно подключить к 1С сканер штрихкодов:
- Внешняя компонента: разработчик пишет на C++ библиотеку
BarcodeScanner.dll, которая умеет общаться со сканером по COM-порту. В этой библиотеке реализованы методыScan(),GetLastBarcode()и т.д. - Регистрация в 1С: в конфигураторе создаётся объект ПВХ с указанием пути к
BarcodeScanner.dllи её уникального идентификатора (CLSID). - Использование в коде: в модуле 1С создаётся экземпляр ПВХ, и вызываются его методы, например:
Сканер = Новый ПолеВнешнейКомпоненты.БиблиотекаСканера();Баркод = Сканер.Scan();
- Выполнение: платформа 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. По типу подключения
- 📎 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: Создание объекта ПВХ в конфигураторе
Откройте конфигуратор и выполните следующие действия:
- Перейдите в дерево объектов конфигурации:
Общие → Поля внешних компонент. - Создайте новый объект (например,
ФискальныйРегистраторАтол). - В свойствах объекта укажите:
- Имя внешней компоненты:
AddIn.Fptr10t(для Atol). - CLSID: уникальный идентификатор компоненты (можно найти в документации).
- Тип внешней компоненты:
InProcилиOutProc.
- Имя внешней компоненты:
Шаг 3: Использование ПВХ в коде
Теперь можно работать с компонентой из встроенного языка. Пример кода для печати чека:
ФР = Новый ПолеВнешнейКомпоненты.ФискальныйРегистраторАтол();
ФР.ОткрытьСмену();
ФР.НапечататьТекст("Тестовый чек");
ФР.ПробитьЧек(100, 0, "наличные");
ФР.ЗакрытьСмену();
☑️ Проверка перед подключением ПВХ
⚠️ Внимание: Если при создании объекта ПВХ вы видите ошибку"Не найдена внешняя компонента", проверьте:
- Правильность указанного
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С в режиме отладки и проверьте, возвращает ли метод ожидаемый результат.
- Используйте
Сообщить()для вывода промежуточных данных.
Если метод возвращает ошибку, проверьте:
- Правильность подключения компоненты.
- Наличие лицензии.
- Права доступа.
Что делать, если после обновления 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для принтеров этикеток).
Однако ПВХ остаётся самым надёжным и быстрым способом для большинства сценариев.