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

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

Как воспроизвести аудио в 1С: рабочие способы и примеры кода

Как воспроизвести аудио в 1С: методы ОповеститьОператору, COM-объекты, внешние компоненты и HTML. Примеры кода, ограничения платформы и типичные ошибки.

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

Выбор способа зависит от контекста: толстый или тонкий клиент, Windows или Linux, нужно ли воспроизводить произвольный файл или достаточно системного сигнала. Ниже разобраны все практически применимые варианты с примерами кода, их ограничения и типичные ошибки.

Ограничения платформы: что 1С умеет из коробки

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

Это означает: если задача сводится к «пикнуть» при ошибке сканирования или привлечь внимание оператора, штатных средств достаточно. Если нужно проиграть конкретный MP3- или WAV-файл — например, голосовое объявление — потребуется один из обходных механизмов: COM, внешний процесс, HTML-поле или внешняя компонента.

Важно учитывать, где исполняется код. Звук физически может воспроизводиться только на той машине, где работает клиентское приложение. Серверный вызов не «прозвучит» на компьютере пользователя — звук нужно запускать строго на клиенте.

Способ 1. Системный сигнал через ОповеститьОператору()

Самый простой вариант — вызвать системный звук без привязки к файлу. Метод доступен в толстом и тонком клиенте под Windows и не требует никаких дополнительных настроек.

&НаКлиенте

Процедура ОшибкаСканирования()

ОповеститьОператору();

ПоказатьПредупреждение(, "Штрихкод не найден в базе!");

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

Метод воспроизводит звук, назначенный в Windows событию «Восклицание» или аналогичному. Какой именно это будет звук, зависит от звуковой схемы ОС пользователя — управлять файлом из 1С нельзя. Если на компьютере отключены системные звуки или нет звукового устройства, метод отработает молча, без ошибки.

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

Способ 2. Проигрывание файла через Windows Media Player (COM)

На клиентских машинах под Windows самый гибкий способ без сторонних разработок — COM-объект WMPlayer.OCX. Он позволяет указать путь к файлу, управлять громкостью и остановкой.

&НаКлиенте

Процедура ВоспроизвестиФайл(ПутьКФайлу)

Попытка

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

Плеер.URL = ПутьКФайлу;

Плеер.settings.volume = 100;

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

Исключение

Сообщить("Не удалось воспроизвести: " + ОписаниеОшибки());

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

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

Есть нюансы. COM-объекты доступны только в толстом клиенте и в тонком клиенте под Windows (в веб-клиенте и на Linux/macOS этот путь закрыт). Объект плеера нужно хранить в переменной формы или модуля — если переменная выйдет из области видимости сразу после запуска, воспроизведение может прерваться сборкой мусора.

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

Способ 3. Запуск внешнего плеера через ЗапуститьПриложение()

Альтернатива COM — поручить воспроизведение операционной системе. Метод ЗапуститьПриложение() открывает файл программой, ассоциированной с его расширением, или запускает указанный плеер.

&НаКлиенте

Процедура ОткрытьЗвук(ПутьКФайлу)

// Вариант 1: программа по умолчанию

ЗапуститьПриложение(ПутьКФайлу);

// Вариант 2: скрытое проигрывание через командную строку

// ЗапуститьПриложение("cmd /c start /min """" """ + ПутьКФайлу + """");

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

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

Способ оправдан, когда нужно дать пользователю прослушать запись разговора, голосовое сообщение из CRM или аудиовложение — здесь открытое окно плеера с элементами управления как раз уместно.

Способ 4. Воспроизведение через поле HTML-документа

Для тонкого и веб-клиента рабочий вариант — реквизит формы типа «Поле HTML-документа», в который программно помещается страница с тегом <audio> и атрибутом autoplay.

&НаКлиенте

Процедура ПроигратьЧерезHTML(ПутьКФайлу)

ТекстHTML = "<html><body>

|<audio autoplay>

|<source src='file:///" + СтрЗаменить(ПутьКФайлу, "\", "/") + "'>

|</audio></body></html>";

ПолеHTML = ТекстHTML;

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

Ограничения существенные. Современные браузерные движки блокируют автовоспроизведение звука без действия пользователя — в веб-клиенте autoplay может молча не сработать. Доступ к локальным файлам через file:// в веб-клиенте обычно запрещён политиками безопасности браузера. Поэтому способ надёжен в основном в тонком клиенте под Windows и требует тестирования на целевом окружении.

Способ 5. Внешние компоненты и готовые решения

Когда требуется кроссплатформенность, управление громкостью, очередями и форматами без привязки к Windows Media Player, применяют внешние компоненты по технологии Native API или COM. Существуют как платные, так и бесплатные разработки сообщества, добавляющие во встроенный язык методы вида Проиграть(ПутьКФайлу).

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

Для типовых сценариев вроде «сканер + звуковое подтверждение» часто достаточно связки ОповеститьОператору() и COM — внешняя компонента оправдана при массовом внедрении на разнородных рабочих местах.

Сравнение вариантов

ОповеститьОператору()

Только системный сигнал, без выбора файла. Зато работает везде на Windows-клиентах без настройки.

COM WMPlayer.OCX

Произвольные файлы и управление воспроизведением, но только Windows и только толстый/тонкий клиент.

ЗапуститьПриложение()

Просто и кроссплатформенно, но открывает окно плеера — не подходит для фоновых сигналов.

HTML-поле с audio

Единственный путь для веб-клиента, но упирается в политики автовоспроизведения браузеров.

Внешняя компонента

Полный контроль и кроссплатформенность ценой развёртывания и поддержки стороннего решения.

Передача файла с сервера на клиент

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

&НаСервере

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

Данные = Запись.АудиоФайл.Получить();

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

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

&НаКлиенте

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

Адрес = ПолучитьАдресЗвука(ТекущаяЗапись);

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

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

Данные.Записать(ВремФайл);

// далее воспроизведение любым способом

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

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

Типичные ошибки и диагностика

Большинство проблем с воспроизведением звука в 1С сводится к нескольким повторяющимся причинам. Ниже — контрольные точки для диагностики.

Типичные ошибки
01
Вызов воспроизведения в серверном контексте — звук физически не может прозвучать на клиенте, код отрабатывает впустую
02
Локальная переменная COM-плеера уничтожается сразу после запуска — воспроизведение обрывается; храните объект в реквизите формы
03
Путь к файлу недоступен с клиентской машины (файл лежит на сервере) — проверяйте доступность пути именно с рабочего места пользователя
04
Ожидание автовоспроизведения в веб-клиенте — браузер блокирует звук без действия пользователя
05
Неправильное расширение временного файла — плеер не определяет формат и молчит
Контрольные точки

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

Откуда выполняется код
Норма

Директива &НаКлиенте, звук слышен на рабочем месте пользователя

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

Код в серверной процедуре — звука нет и ошибок нет

Доступность файла
Норма

Файл открывается с клиентской машины в проводнике

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

Путь указывает на диск сервера, недоступный пользователю

Системный звук
Норма

ОповеститьОператору() даёт сигнал при включённых звуках Windows

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

Тишина — проверьте звуковую схему ОС и громкость

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

Маршрут решения

Как выбрать действие

Нужен просто сигнал при событии на Windows-клиентеИспользуйте ОповеститьОператору() — этого достаточно
Нужно проиграть конкретный файл, тонкий/толстый клиент на WindowsПрименяйте COM-объект WMPlayer.OCX с хранением объекта в реквизите формы
Работаете в веб-клиентеТестируйте HTML-поле с тегом audio либо рассмотрите внешнюю компоненту
Нужно дать пользователю прослушать запись с управлениемОткройте файл через ЗапуститьПриложение() в плеере по умолчанию

Частые вопросы

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

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

Работает ли COM-способ в веб-клиенте?

Нет. COM-объекты доступны только в толстом клиенте и тонком клиенте под Windows. В веб-клиенте и на Linux/macOS используйте HTML-поле с тегом audio или внешние компоненты.

Почему ОповеститьОператору() не издаёт звука?

Метод воспроизводит системный звук Windows. Если в звуковой схеме ОС соответствующему событию назначено «нет звука», отключён звук или отсутствует аудиоустройство, сигнала не будет. Проверьте настройки звука Windows и громкость на конкретном рабочем месте.

Как проиграть разные звуки при успехе и ошибке сканирования?

Штатный метод этого не умеет — он играет один системный сигнал. Подготовьте два файла (например, ok.wav и error.wav), разместите их в общедоступной сетевой папке или поставляйте в макете конфигурации и воспроизводите через COM-объект WMPlayer.OCX, выбирая файл по результату операции.

Почему воспроизведение обрывается сразу после запуска?

Наиболее вероятная причина — COM-объект плеера создан в локальной переменной процедуры и уничтожается при её завершении. Вынесите объект в реквизит формы или переменную модуля, чтобы он жил до окончания воспроизведения.

Какие форматы аудио лучше использовать в 1С?

Самые беспроблемные — WAV и MP3: они проигрываются Windows Media Player без дополнительных кодеков и поддерживаются HTML-тегом audio. Экзотические форматы требуют установки кодеков на каждое рабочее место, что усложняет сопровождение.

Итог

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

Звук в 1С воспроизводится только на клиенте. Для сигнала достаточно ОповеститьОператору(), для файлов на Windows — COM-объект WMPlayer.OCX, для веб-клиента — HTML-поле или внешняя компонента. Файл из базы передавайте на клиента через временное хранилище, а COM-объект плеера храните в реквизите формы, чтобы воспроизведение не обрывалось.