Как подключить веб-камеру к 1С для фотографирования товаров?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

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

Метод 1: Использование библиотеки WIA (Windows Image Acquisition)

Рассмотрим классический способ, который исторически применялся в среде 1С:Предприятие 7.7 и ранних версиях 8-ки. Этот метод основан на использовании стандартной библиотеки Windows. Проанализируем программный код, который позволяет инициализировать устройство и сохранить снимок в файл.

Для начала определим переменные и подготовим путь к файлу. Логика заключается в создании COM-объекта WIA.DeviceManager, поиске подключенных устройств и выполнении команды на создание снимка.


Перем ИмяФайла;
Перем oDevice[5];

Процедура Фото()
    // Формируем путь к файлу, используя код элемента справочника
    ИмяФайла = КаталогИБ() + "Foto\" + СокрЛП(Код) + ".jpg";
    
    Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда
        ФС.УдалитьФайл(ИмяФайла);
    КонецЕсли;

    // Создаем объект менеджера устройств
    Device = CreateObject("WIA.DeviceManager");
    Количество = Device.DeviceInfos.Count;

    // Ищем видеоустройство (тип 3 соответствует видеокамерам)
    Для К = 1 По Количество Цикл
        Если Device.DeviceInfos(к).Type = 3 Тогда
            Попытка
                oDevice[к] = Device.DeviceInfos(к).Connect;
            Исключение
                oDevice[к] = 0;
            КонецПопытки;
        Иначе
            oDevice[к] = 0;
        КонецЕсли;
    КонецЦикла;

    // Делаем снимок и сохраняем
    Для К = 1 По Количество Цикл
        Если oDevice[к] <> 0 Тогда
            // Выполняем команду получения кадра
            Item = oDevice[к].ExecuteCommand("{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}");
            // Конвертируем в формат JPEG
            Image = Item.Transfer("{557CF401-1A04-11D3-9A73-0000F81EF32E}");
            Image.SaveFile(ИмяФайла);
            
            Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда
                // Загружаем полученное фото на форму для просмотра
                Просмотр.Загрузить(ИмяФайла); 
            Иначе
                Предупреждение("Не удалось сделать снимок!");
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Важное ограничение: Выясним причину, по которой этот метод может не работать на современных ОС. Технология WIA для видеоустройств полноценно поддерживалась в Windows XP. Начиная с Windows Vista и выше, архитектура работы с потоковым видео изменилась в сторону DirectShow, и WIA зачастую "видит" только сканеры. Если вы работаете на Windows 10 или 11, данный код может вызывать ошибку подключения к устройству.

Метод 2: Использование HTML5 и JavaScript в управляемых формах

Разберем современный подход для 1С 8.3. В управляемых формах мы можем использовать элемент Поле HTML-документа. Это позволяет задействовать возможности современных браузеров и API navigator.mediaDevices.getUserMedia.

Проанализируем алгоритм реализации:

  1. Создадим обработку с полем HTML-документа.
  2. Загрузим в поле HTML-код, который выводит видеопоток с веб-камеры.
  3. При нажатии кнопки "Сделать фото" в HTML, скрипт отрисовывает текущий кадр на canvas, переводит его в строку Base64 и передает обратно в 1С.

В 1С мы ловим событие изменения текста или используем механизм ОписаниеОповещения для получения двоичных данных. Это наиболее кроссплатформенный метод, который не требует регистрации DLL-файлов в системе.

Метод 3: Внешние компоненты (Native API)

Посмотрим на профессиональный способ решения задачи — использование внешних компонент. Если требуется высокая скорость работы, управление фокусом, зумом или разрешением, стандартных средств Windows может быть недостаточно. Программисты часто используют библиотеки, написанные на C++ или C#, которые взаимодействуют с DirectShow или OpenCV.

Преимущества этого метода:

Метод 4: Использование консольных утилит (CLI)

Выясним, как упростить себе задачу, если не хочется погружаться в написание сложных компонент. Мы можем использовать внешние утилиты, такие как CommandCam или FFmpeg. Разберем по шагам, как это работает в коде 1С:


ПутьКПрограмме = "C:\Tools\CommandCam.exe";
ПутьКФайлу = "C:\Temp\photo.jpg";
КомандаЗапуска = ПутьКПрограмме + " /filename " + ПутьКФайлу;

// Запускаем внешнюю утилиту
ЗапуститьПриложение(КомандаЗапуска, , Истина);

// Проверяем результат
Если ФайлСуществует(ПутьКФайлу) Тогда
    ФотоОбъект = Новый ДвоичныеДанные(ПутьКФайлу);
    // Далее записываем данные в реквизит справочника
КонецЕсли;

Такой подход удобен тем, что утилита берет на себя все нюансы взаимодействия с драйверами камеры, а 1С просто получает готовый файл.

Метод 5: Мобильная платформа 1С

Если ваши сотрудники используют мобильные терминалы или смартфоны, задача упрощается максимально. В мобильной платформе 1С предусмотрен встроенный объект СредстваМультимедиа. Рассмотрим пример кода:


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

&НаКлиенте
Процедура ОбработатьСнимок(Результат, ДополнительныеПараметры) Экспорт
    Если Результат <> Неопределено Тогда
        // Сохраняем фото в базу
        ДанныеФото = Результат.ПолучитьДанные();
    КонецЕсли;
КонецПроцедуры

Здесь платформа сама обращается к стандартному приложению камеры устройства, что гарантирует работу на любом современном смартфоне.

Рекомендации по хранению изображений

Проанализируем важный аспект: объем базы данных. Современные камеры делают снимки высокого разрешения, которые могут весить по 5–10 Мб. При массовом фотографировании товаров база быстро вырастет до огромных размеров. Рекомендуем перед сохранением в 1С выполнять программное сжатие или ресайз (изменение размера) до разрешения 800x600 или 1024x768 пикселей. Этого вполне достаточно для карточки товара, но сэкономит гигабайты дискового пространства.

Подводя итог, выбор метода зависит от вашей версии платформы и операционной системы. Для старых конфигураций 7.7 подойдет WIA, для современных тонких клиентов лучше использовать HTML5 или готовые внешние компоненты Native API.

← На главную