Разработка и Конфигурация · 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-клиентах без настройки.
Произвольные файлы и управление воспроизведением, но только Windows и только толстый/тонкий клиент.
Просто и кроссплатформенно, но открывает окно плеера — не подходит для фоновых сигналов.
Единственный путь для веб-клиента, но упирается в политики автовоспроизведения браузеров.
Полный контроль и кроссплатформенность ценой развёртывания и поддержки стороннего решения.
Передача файла с сервера на клиент
Частая ситуация: аудиофайл хранится в базе (в хранилище значений или как присоединенный файл), а воспроизвести его нужно на клиенте. Порядок действий стандартный: на сервере поместить двоичные данные во временное хранилище, на клиенте получить и сохранить во временный файл, затем воспроизвести.
&НаСервере
Функция ПолучитьАдресЗвука(Запись)
Данные = Запись.АудиоФайл.Получить();
Возврат ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор);
КонецФункции
&НаКлиенте
Процедура Проиграть(Команда)
Адрес = ПолучитьАдресЗвука(ТекущаяЗапись);
ВремФайл = ПолучитьИмяВременногоФайла("mp3");
Данные = ПолучитьИзВременногоХранилища(Адрес);
Данные.Записать(ВремФайл);
// далее воспроизведение любым способом
КонецПроцедуры
Для асинхронной модели (тонкий и веб-клиент без модальности) используйте НачатьПолучениеФайлаССервера() или методы работы с файлами с описанием оповещения — синхронные вызовы могут быть недоступны в зависимости от режима конфигурации.
Типичные ошибки и диагностика
Большинство проблем с воспроизведением звука в 1С сводится к нескольким повторяющимся причинам. Ниже — контрольные точки для диагностики.
Как проверить результат
Директива &НаКлиенте, звук слышен на рабочем месте пользователя
Код в серверной процедуре — звука нет и ошибок нет
Файл открывается с клиентской машины в проводнике
Путь указывает на диск сервера, недоступный пользователю
ОповеститьОператору() даёт сигнал при включённых звуках Windows
Тишина — проверьте звуковую схему ОС и громкость
Если ничего не помогает, локализуйте проблему: сначала проверьте, проигрывается ли файл вообще на этом компьютере штатным плеером, затем — доступен ли путь, и только потом разбирайтесь с кодом. Так вы отделите проблемы окружения от ошибок в конфигурации.
Как выбрать действие
Частые вопросы
Можно ли воспроизвести звук из серверного кода 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-объект плеера храните в реквизите формы, чтобы воспроизведение не обрывалось.