К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как воспроизвести звук в 1С

Как воспроизвести звук в 1С:Предприятии 8.3: функция ВоспроизвестиЗвук, СредстваМультимедиа в мобильном клиенте, проигрывание WAV-файлов, ограничения и ошибки.

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

Ключевой момент, который нужно понимать сразу: звук воспроизводится только на клиенте. Серверный вызов не может проиграть файл на компьютере пользователя, поэтому весь код работы со звуком размещается в клиентских процедурах модуля формы, общего модуля с признаком «Клиент» или модуля приложения.

Ниже разобраны рабочие способы: штатная функция ВоспроизвестиЗвук(), объект СредстваМультимедиа для мобильного клиента, вариант через COM-объект Windows и обходные пути для ситуаций, где штатные средства недоступны.

Функция ВоспроизвестиЗвук — основной способ

Глобальный метод ВоспроизвестиЗвук(ИмяФайла) доступен в тонком и толстом клиенте. Он принимает один параметр — полный путь к звуковому файлу на диске клиентского компьютера. Вызов неблокирующий: звук запускается в фоне, а выполнение кода продолжается дальше, останавливать или дожидаться окончания воспроизведения штатными средствами нельзя.

&НаКлиенте

Процедура СигналОшибки(Команда)

ВоспроизвестиЗвук("C:\Sounds\error.wav");

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

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

Ограничение по формату: гарантированно воспроизводятся WAV-файлы. Поддержка MP3 зависит от установленных в системе кодеков и версии платформы, поэтому для критичных оповещений надёжнее конвертировать звук в WAV.

Откуда брать файл: диск, макет, временное хранилище

Хранить звук в виде файла на диске каждого клиента — плохая идея: пути различаются, файл могут удалить. Правильный подход — поместить WAV-файл в макет конфигурации (тип «Двоичные данные») и при необходимости извлекать его во временный файл на клиенте.

&НаКлиенте

Процедура ПроигратьИзМакета(Команда)

Адрес = ПолучитьАдресМакетаНаСервере();

ИмяВременного = ПолучитьИмяВременногоФайла("wav");

Данные = ПолучитьИзВременногоХранилища(Адрес);

Данные.Записать(ИмяВременного);

ВоспроизвестиЗвук(ИмяВременного);

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

&НаСервере

Функция ПолучитьАдресМакетаНаСервере()

Данные = ПолучитьОбщийМакет("ЗвукОповещения");

Возврат ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор);

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

Обратите внимание на разделение контекстов: макет читается на сервере, передаётся на клиент через временное хранилище, а воспроизводится уже на клиенте. Это типовой шаблон для любых бинарных ресурсов в управляемом приложении.

Для часто используемого звука имеет смысл извлекать файл один раз при запуске (например, в модуле управляемого приложения при начале работы системы) и запоминать путь в клиентской переменной, чтобы не гонять данные через хранилище при каждом событии.

Порядок действий для звука из макета
  1. 1
    Добавьте WAV-файл в общий макет конфигурации с типом «Двоичные данные»
  2. 2
    На сервере получите макет и поместите его во временное хранилище с привязкой к УникальныйИдентификатор формы
  3. 3
    На клиенте извлеките данные и запишите во временный файл с расширением wav
  4. 4
    Вызовите ВоспроизвестиЗвук() с путём к временному файлу
  5. 5
    Проверьте звук на реальном рабочем месте пользователя, а не только у разработчика

Звук в мобильном клиенте и мобильной платформе

На мобильной платформе 1С функция ВоспроизвестиЗвук() недоступна. Вместо неё используется объект СредстваМультимедиа с методом ВоспроизвестиАудио(), который принимает путь к файлу в файловой системе мобильного устройства.

&НаКлиенте

Процедура СигналНаМобильном(Команда)

СредстваМультимедиа.ВоспроизвестиАудио(ПутьКФайлу);

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

Файл предварительно нужно доставить на устройство — например, получить с сервера через веб-сервис или HTTP-запрос и сохранить в каталог данных приложения. Метод также неблокирующий; для управления воспроизведением (пауза, остановка) в мобильной платформе есть отдельные средства мультимедиа, но для коротких сигналов они обычно не требуются.

Веб-клиент и его ограничения

В веб-клиенте ни ВоспроизвестиЗвук(), ни прямой доступ к файловой системе недоступны — это принципиальное ограничение браузерной песочницы. Штатного способа проиграть звук в веб-клиенте платформа не предоставляет.

Обходные варианты: расширение для браузера, отдельное локальное приложение-агент, которое опрашивает 1С и проигрывает звук, либо переход критичных рабочих мест на тонкий клиент. Для рабочих мест кладовщика или кассира, где звуковой сигнал обязателен, тонкий клиент — самый простое и надёжное решение.

Сравнение вариантов воспроизведения

ВоспроизвестиЗвук()

Тонкий и толстый клиент на Windows. Простой вызов, только WAV, без управления воспроизведением

СредстваМультимедиа.ВоспроизвестиАудио()

Мобильная платформа и мобильный клиент. Требует доставки файла на устройство

COM-объект WMPlayer.OCX

Толстый клиент Windows, управляемое воспроизведение и MP3. Не работает в тонком клиенте и требует прав на создание COM

Внешний проигрыватель через ЗапуститьПриложение()

Универсальный обходной путь, но открывает окно плеера и зависит от установленного ПО

Альтернатива: проигрывание через COM и внешние программы

В толстом клиенте (обычное приложение) можно использовать COM-объект Windows Media Player, который даёт контроль над воспроизведением и поддерживает MP3:

// Только толстый клиент, только Windows

Плеер = Новый COMОбъект("WMPlayer.OCX");

Плеер.URL = "C:\Sounds\signal.mp3";

Плеер.controls.play();

Другой вариант — ЗапуститьПриложение() или НачатьЗапускПриложения() с вызовом системного проигрывателя. Минус очевиден: у пользователя открывается окно плеера, что неприемлемо для коротких уведомлений. Такой способ оправдан только для прослушивания длинных записей, например аудиовложений из документов.

Типичный сценарий: звуковое оповещение о событии

Частая задача — сигнал при появлении новых данных: новом заказе, сообщении в обсуждениях, ошибке обмена. Реализуется это через подключение обработчика ожидания на клиенте, который периодически опрашивает сервер.

&НаКлиенте

Процедура ПроверитьНовыеЗаказы()

Количество = ПолучитьКоличествоНовыхЗаказовНаСервере();

Если Количество > 0 Тогда

ВоспроизвестиЗвук(ПутьКЗвуку);

ПоказатьОповещениеПользователя("Новые заказы: " + Количество);

КонецЕсли;

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

Подключается обработчик вызовом ПодключитьОбработчикОжидания("ПроверитьНовыеЗаказы", 60) — например, раз в минуту. Не ставьте слишком маленький интервал: каждый вызов — это обращение к серверу, и при десятках пользователей частые опросы создадут лишнюю нагрузку.

Типичные ошибки
01
Вызов ВоспроизвестиЗвук() в серверной процедуре — звука нет, причина не видна
02
Путь к файлу на диске разработчика, которого нет у пользователей — молчаливая неудача
03
MP3-файл без гарантии поддержки кодека — на части машин звук не играет, лучше WAV
04
Слишком частый обработчик ожидания с серверным вызовом — лишняя нагрузка на сервер
05
Отсутствие проверки существования файла — невозможно отличить ошибку пути от проблем со звуковой картой

Проверка результата и диагностика

Если код выполняется, но звука нет, проверяйте по цепочке: существует ли файл в указанном пути именно на клиентском компьютере; открывается ли он штатным проигрывателем Windows; не отключён ли звук в системе и не выбрано ли другое устройство вывода. Убедитесь также, что процедура действительно клиентская — директива &НаКлиенте или соответствующий флажок общего модуля.

Для отладки временно добавьте Сообщить(ИмяФайла) перед вызовом и проверку Файл.Существует() с выводом результата. Это отсекает две самые частые причины: неверный путь и серверный контекст.

Контрольные точки

Как проверить результат

Контекст выполнения
Норма

Процедура с директивой &НаКлиенте

Тревожный признак

Код в серверной процедуре или фоновом задании

Файл на клиенте
Норма

Файл.Существует() возвращает Истина, файл открывается проигрывателем

Тревожный признак

Файл отсутствует или лежит только на сервере

Формат
Норма

WAV-файл воспроизводится системой

Тревожный признак

Экзотический формат без установленного кодека

Звук в системе
Норма

Другие приложения воспроизводят звук на этом ПК

Тревожный признак

Звук отключён или выбрано не то устройство вывода

FAQ

Можно ли проиграть звук из фонового задания или регламентной операции?

Нет. Фоновые задания выполняются на сервере и не имеют доступа к клиентскому оборудованию. Чтобы сигналить о результате фоновой операции, доведите её до конца, а на клиенте через обработчик ожидания проверьте состояние задания и проиграйте звук уже в клиентском контексте.

Почему ВоспроизвестиЗвук() не выдаёт ошибку, но звука нет?

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

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

Штатная функция ВоспроизвестиЗвук() таких возможностей не даёт — звук играет до конца с системной громкостью. Для управления воспроизведением в толстом клиенте Windows используйте COM-объект WMPlayer.OCX, а на мобильной платформе — расширенные средства мультимедиа.

Как проиграть звук всем пользователям одновременно, например при срочном оповещении?

Платформа не умеет рассылать звук принудительно. Практичный вариант: запись флага оповещения в базу (регистр сведений или константа), а у клиентов — обработчик ожидания, который проверяет флаг и проигрывает звук локально, после чего отмечает оповещение как обработанное.

Работает ли ВоспроизвестиЗвук() в 1С на Linux?

Метод доступен в клиенте под Linux, но фактическое воспроизведение зависит от настроенной звуковой подсистемы. Перед внедрением обязательно протестируйте на целевом рабочем месте; для критичных сценариев предусмотрите визуальное оповещение как запасной канал.

Какой размер WAV-файла допустим для хранения в макете?

Жёсткого ограничения для коротких сигналов нет, но разумно держать файл компактным: секундный моно-сигнал с низкой частотой дискретизации занимает десятки килобайт и не раздувает конфигурацию. Длинные записи лучше хранить внешне и доставлять по требованию.

Итог

Что важно запомнить

Звук в 1С воспроизводится только на клиенте: на десктопе — функцией ВоспроизвестиЗвук() с WAV-файлом, на мобильной платформе — через СредстваМультимедиа, в веб-клиенте штатного способа нет. Файл надёжнее хранить в макете и извлекать во временный файл, а перед вызовом проверять его существование и клиентский контекст выполнения.