Как обновить Библиотеку подключаемого оборудования (БПО) в самописной конфигурации 1С?

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

Интеграция и последующее обновление стандартных библиотек от фирмы «1С» в полностью самописные конфигурации — это задача, с которой рано или поздно сталкивается любой разработчик. Одной из самых востребованных библиотек является Библиотека подключаемого оборудования (БПО). Она отвечает за взаимодействие 1С с кассами (ККТ), сканерами штрихкодов, терминалами эквайринга и другими устройствами.

Сложность обновления БПО в «самописке» заключается в том, что в такой базе отсутствует Библиотека стандартных подсистем (БСП), на которую глубоко завязаны современные релизы БПО. В этой статье мы подробно разберем, как правильно перенести новую версию БПО в вашу уникальную конфигурацию, не сломав существующие механизмы работы с торговым оборудованием.

Зачем нужно обновлять БПО?

Основная причина обновления — это изменение законодательства и требований к фискальным данным (например, поддержка новых форматов фискальных документов ФФД 1.2, маркировка товаров, новые ставки НДС). Производители кассового оборудования выпускают новые драйверы, которые старая БПО просто не в состоянии инициализировать и использовать. Обновляя БПО, мы получаем поддержку актуального серверного и локального торгового оборудования.

---

Шаг 1. Анализ и подготовка конфигурации

Перед тем как приступать к каким-либо действиям в Конфигураторе, необходимо выполнить подготовку. Ни в коем случае не проводите эти работы сразу на рабочей базе данных.

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

Рассмотрим популярный совет с форума: «полностью снести старую БПО и накатить новую». Мы настоятельно не рекомендуем так делать! Полное удаление объектов БПО (справочников, регистров сведений) приведет к тому, что в пользовательском режиме удалятся все уже настроенные рабочие места, карточки касс ККТ и настройки драйверов. Нам нужно выполнить именно контролируемое обновление.

---

Шаг 2. Сравнение и объединение с новым релизом БПО

Для обновления нам понадобится файл поставки новой версии БПО (файл 1Cv8.cf), который идет в комплекте дистрибутива библиотеки, скачанного с портала ИТС.

Разберем по шагам процесс слияния конфигураций:

  1. Откройте вашу конфигурацию в режиме «Конфигуратор».
  2. Если объекты старой БПО стоят на поддержке (возле них отображается значок «замочка»), перейдите в меню Конфигурация — Поддержка — Настройка поддержки. Найдите подсистему ПодключаемоеОборудование и временно разрешите изменения для объектов этой подсистемы (переведите в режим «Объект поставщика редактируется с сохранением поддержки»).
  3. Перейдите в меню Конфигурация — Сравнить, объединить с конфигурацией из файла... и выберите файл 1Cv8.cf новой БПО.
  4. В открывшемся окне сравнения первым делом снимите абсолютно все флажки. Нам нужно переносить объекты точечно и осознанно.
  5. Нажмите кнопку Действия — Отметить по подсистемам из файла.
  6. В списке подсистем выберите подсистему ПодключаемоеОборудование. Если в вашей конфигурации используются только фискальные регистраторы и ККТ с передачей данных, вы можете снять флажки с ненужных дочерних подсистем (например, ВесыСПечатьюЭтикеток или ДисплеиПокупателя). Однако общие модули и базовые механизмы БПО должны быть выбраны полностью.
  7. Критически важный нюанс: Обратите внимание на подсистему БазоваяФункциональность. БПО использует её функции для общих нужд (работа со строками, структурами, XML). Если в вашей самописной конфигурации нет БСП, обязательно отметьте галочкой подсистему БазоваяФункциональность из файла БПО! Без нее новая библиотека просто не скомпилируется.
  8. Нажмите кнопку Выполнить. В появившемся окне настройки правил поддержки для новых объектов выберите «Установить поддержку».

---

Шаг 3. Внедрение кода в модуль управляемого приложения

После того как метаданные объединились, нам необходимо связать новую библиотеку с жизненным циклом нашего приложения. Откройте Модуль управляемого приложения вашей конфигурации. Проанализируем, какие обработчики событий должны содержать вызовы БПО.

В событии ПередНачаломРаботыСистемы обязательно должна происходить предварительная инициализация параметров оборудования:


Процедура ПередНачаломРаботыСистемы(Отказ)
    
    // Инициализация параметров работы торгового оборудования
    МенеджерОборудованияКлиент.ПередНачаломРаботыСистемы();
    
КонецПроцедуры

В событии ПриНачалеРаботыСистемы инициализируются обработчики ожидания, которые проверяют состояние подключенных устройств (например, доступность ККТ или терминала):


Процедура ПриНачалеРаботыСистемы()
    
    // Подключение обработчиков ожидания оборудования
    МенеджерОборудованияКлиент.ПриНачалеРаботыСистемы();
    
КонецПроцедуры

В событии ПередЗавершениемРаботыСистемы необходимо гарантировать корректное отключение активных сессий оборудования, чтобы порты не оставались занятыми в операционной системе:


Процедура ПередЗавершениемРаботыСистемы(Отказ)
    
    // Отключение оборудования перед выходом из программы
    МенеджерОборудованияКлиент.ПередЗавершениемРаботыСистемы();
    
КонецПроцедуры

Также важно обрабатывать внешние события, поступающие от торгового оборудования (например, сканирование штрихкода или успешное проведение транзакции эквайринга):


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    
    // Передаем событие на обработку в БПО
    Если МенеджерОборудованияКлиент.ОбработатьВнешнееСобытие(Источник, Событие, Данные) Тогда
        Возврат; // Событие успешно обработано библиотекой
    КонецЕсли;
    
    // Далее идет ваш собственный код обработки внешних событий
    
КонецПроцедуры

---

Шаг 4. Настройка переопределяемых модулей

В БПО интеграция с конкретной бизнес-логикой конфигурации происходит через специализированные модули с постфиксом Переопределяемый. Нам нужно проверить и настроить следующие общие модули:

Проанализируем функцию ИспользоватьПодключаемоеОборудование() в модуле МенеджерОборудованияВызовСервераПереопределяемый. По умолчанию она может возвращать Ложь. Нам необходимо принудительно вернуть Истина, чтобы подсистема активировалась:


Функция ИспользоватьПодключаемоеОборудование() Экспорт
    
    Возврат Истина;
    
КонецФункции

Если в вашей конфигурации используются кассовые смены (справочник или документы), вам также потребуется настроить модуль КассовыеСменыПереопределяемый, указав в нем связи с вашими объектами метаданных для хранения статусов смен.

---

Шаг 5. Адаптация вызовов API ККТ и фискальных регистраторов

При переходе со старых версий БПО (например, с версии 2.0 на 2.1 или 3.x) существенно меняется программный интерфейс (API) функций. Многие параметры, которые раньше передавались отдельными переменными, теперь упакованы в структуры параметров операции.

Рассмотрим пример того, как изменился вызов фискализации чека. Выясним причину возможных ошибок компиляции в вашем коде.

Раньше в старых версиях БПО печать чека могла выглядеть упрощенно:


// Устаревший метод вызова
Результат = МенеджерОборудованияКлиент.НапечататьФискальныйЧек(ИдентификаторУстройства, ТаблицаТоваров, ТаблицаОплат, СуммаЧека);

В современных версиях БПО используется единая структура параметров операции, которая содержит все метаданные (ИНН кассира, систему налогообложения, признак способа расчета и т.д.). Посмотрим на пример современного вызова фискализации чека:


// Формируем параметры фискальной операции по новым стандартам
ПараметрыОперации = Новый Структура;
ПараметрыОперации.Вставить("Электронно", Ложь);
ПараметрыОперации.Вставить("Кассир", "Иванов И.И.");
ПараметрыОперации.Вставить("КассирИНН", "123456789012");
ПараметрыОперации.Вставить("СистемаНалогообложения", ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложения.Общая"));

// Подготавливаем пакет данных чека в формате XML
ОбъектДрайвера = "";
ДанныеЧекаXML = МенеджерОборудованияВызовСервера.СформироватьПакетЧекаДляККТ(ДокументСсылка, ПараметрыОперации);

// Вызываем печать чека через актуальное API БПО
ПараметрыВывода = Новый Структура;
Результат = МенеджерОборудованияКлиент.ВыполнитьОперациюФискализацииЧека(
    ИдентификаторУстройства, 
    ДанныеЧекаXML, 
    ПараметрыОперации, 
    ПараметрыВывода
);

Если Не Результат.Результат Тогда
    ВызватьИсключение "Ошибка печати чека: " + Результат.ОписаниеОшибки;
КонецЕсли;

Вам необходимо найти в своей конфигурации все места, где вызываются методы старой БПО (поиском по слову МенеджерОборудованияКлиент), и переписать их под новые сигнатуры функций, используя поставляемую с БПО документацию.

---

Шаг 6. Запуск обновления данных в режиме «1С:Предприятие»

Объединить конфигурацию и исправить ошибки в коде — это только половина дела. БПО хранит информацию о зарегистрированных драйверах в справочниках и регистрах сведений базы данных. Если эти справочники не заполнятся новыми значениями, в режиме пользователя вы не увидите новых драйверов.

Если бы в нашей конфигурации использовалась БСП, то при первом запуске сработал бы механизм обновления конфигурации, который автоматически заполнил бы все справочники БПО. В самописной конфигурации без БСП нам придется принудительно вызвать процедуры обновления данных вручную.

Для этого создайте внешнюю или внутреннюю обработку, в модуле которой напишите следующий код:


Процедура ВыполнитьРучноеОбновлениеБПО() Экспорт
    
    // Устанавливаем параметры обновления
    ПараметрыОбновления = Новый Структура;
    ПараметрыОбновления.Вставить("ВыполнитьРегистрациюОбъектов", Истина;);
    
    // Вызываем процедуры заполнения справочников драйверов из состава БПО
    ОбновлениеИнформационнойБазыБПО.ВыполнитьОбновлениеИнформационнойБазы(ПараметрыОбновления);
    
    Сообщить("Справочники подключаемого оборудования успешно заполнены актуальными драйверами!");
    
КонецПроцедуры

Запустите эту обработку в режиме «1С:Предприятие» под правами Администратора сразу после обновления конфигурации базы данных. Это принудительно заполнит справочник ДрайверыОборудования бинарными макетами и зарегистрирует типы оборудования в системе.

---

Шаг 7. Понимание новой концепции хранения драйверов

При обновлении со старых релизов (линейки 2.0) на актуальные версии вы заметите важное архитектурное изменение. Фирма «1С» убрала большинство «тяжелых» бинарных файлов драйверов непосредственно из макетов конфигурации, чтобы уменьшить размер самой базы данных.

Теперь в БПО используется концепция динамической загрузки драйверов:

---

Альтернативный вариант: Работа напрямую без БПО

В сообщениях на форуме прозвучала идея: «выкинуть БПО и использовать нативный драйвер». Рассмотрим целесообразность этого подхода.

Если в вашей самописной конфигурации используется ровно одна конкретная касса и вы точно знаете, что модель кассы меняться не будет, вы можете отказаться от БПО. Вместо этого можно подключить внешнюю компоненту производителя ККТ (например, драйвер АТОЛ10 или Штрих-М) напрямую через платформенный механизм работы с внешними компонентами:


// Пример прямого подключения драйвера АТОЛ без БПО
РезультатПодключения = ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверАТОЛ10", "AtolDrivers10", ТипВнешнейКомпоненты.Native);
Если РезультатПодключения Тогда
    ДрайверККТ = Новый ("AddIn.AtolDrivers10.Fptr");
    // Далее идет прямая работа со свойствами и методами драйвера по документации АТОЛ
КонецЕсли;

Преимущества прямого подключения:

Недостатки прямого подключения:

---

Резюме и рекомендации

Мы проанализировали процесс обновления БПО в самописной конфигурации 1С. Подведем итоги:

  1. Обновление выполняйте через сравнение и объединение по подсистемам, обязательно захватывая подсистему БазоваяФункциональность.
  2. Ни в коем случае не удаляйте старые объекты БПО полностью, чтобы сохранить настройки пользователей в БД.
  3. Пропишите точки сопряжения в событиях Модуля управляемого приложения.
  4. Перепишите вызовы методов печати чеков под новые требования сигнатур API БПО.
  5. После обновления конфигурации обязательно запустите процедуру принудительного заполнения справочников через обработку.
  6. Для детальной информации всегда используйте файлы Порядок внедрения БПО.htm и Применение функционала БПО в конфигурациях.htm из папки шаблона конкретного релиза библиотеки.
← На главную