Воспроизведение звука в 1С. Доступно и всерьез. 8.3.14

04.08.20

Разработка - Инструментарий разработчика

Продолжение статьи https://infostart.ru/public/248770/

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
(только для физ. лиц)
Воспроизведение звука в 1С. Доступно и всерьез. 8.3.14:
.epf 1,40Mb
66 1 850 руб. Купить
Бухгалтерские счеты
.epf 10,73Kb
7 1 850 руб. Купить
Элементы управления звуком в 1С.
.epf 730,32Kb
32 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Доброго времени суток!

С момента предыдущей публикации //infostart.ru/public/248770/ прошло много времени. И честно говоря, если вы запустите старую обработку на  Windows 10 и новой платформе  8.3.14, то звук уже не будет воспроизводиться. За это время многие уже перебрались на платформу выше 8.3.14, а значит, и html поле теперь всегда новое и это не зависит от режима совместимости ;) и режима классических форм. Все старое перестало работать! Значит, есть основание сделать мир лучше!

Можно пойти путем использования функций операционной системы (внешняя компонента) или взаимодействия с другой системой, которая сумеет воспроизвести звук.  Это правильный подход и я его рекомендую в сложных проектах. Но если вам дано добавить два, три звукового сопровождения к существующей доработке, то предлагаю действующий метод.

Прежде всего скажем, что будем использовать поле html, интернет стандарты это единственное, на чем можно основываться в нашем проприоритетном мире. И конечно если мы доделываем для Web клиента, то других вариантов у нас просто нет.

Итак начнем с самых основ звука в html5 и тега audio (https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_audio_all):

<!DOCTYPE html>
<html>
<body>

<audio controls>
  <source src="horse.ogg" type="audio/ogg">
  <source src="horse.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>

</body>
</html>

Проблема номер один ссылка на файл в контексте сервера. Где должен быть расположен файл по отношению сервера 1С, локального компьютера ил того подобного.

Ответ 1: полная ссылка на звуковой файл типа - https://blog.sikuda.ru/1c/sound1c.mp3 - ВСЕ ПРЕКРАСНО и для Вэб-клиента это пока единственный вариант.

Ответ 2: Прописывание звука в тело html типа - src='data:audio/mpeg;base64 НЕ ПРОХОДИТ 1С клиент.

Ответ 3: Указание ссылки Адрес во временном хранилище у меня НЕ ЗАРАБОТАЛО.

Ответ 4: Использовать временные локальные файлы на клиенте file:// вместе с ПолучитьИмяВременногоФайла - РАБОТАЕТ даже в тонком клиенте.

 

И вторая проблема с которой я столкнулся, это однократное воспроизведение звука. Я так понял это проблема кэширования самой 1С html поля с этим сложно бороться. Если Вы выведите стандарный элемент управления Аудио в 1С тонкий клиент, то при нажатии второго раза на воспроизведение или прослушать с середины у Вас может не получиться.

Простое решение работает если перезагружать страницу с кодом:

<script>
   var aud = new Audio('"+АдресЗвукаНаСтранице+"');
   aud.play();
</script>

Ну а тем кто хочет использовать элементы управления звуком и не получить в стандартном 1С черный прямоугольник, рекомендую воспользоваться сторонним плеером (мне понравился https://plyr.io/#audio и третья обработка)

Ну вот и все. Тестируем, критикуем, комментируем. Если найдете лучший метод не стесняйтесь рассказывайте.

 

Р.S.

Вторая обработка - Щелкающие счеты - в качестве приятного бонуса ;)

Обязательно расскажите если у кого получится сделать через Поместить во временное хранилище! Скачаю и прорекламирую Вас.

Вступайте в нашу телеграмм-группу Инфостарт

Звук Sound Сказать Сигнал Воспроизведение Beep

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    203202    1119    410    

1023

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    35863    208    104    

197

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

16000 руб.

10.11.2023    16531    71    39    

89

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    24067    63    26    

92

Инструментарий разработчика Программист 1С v8.3 Платные (руб)

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

9360 руб.

17.05.2024    34782    124    53    

165

SALE! 30%

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 12600 руб.

22.11.2024    1826    1    0    

8

Инструментарий разработчика Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

6000 руб.

07.02.2018    107205    249    100    

313
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. uno-c 268 02.08.20 18:24 Сейчас в теме
Я так понял это проблема кэширования самой 1С html поля с этим сложно бороться.

С этим несложно бороться. Работает не только при первом нажатии на кнопку. Работает не только на 8.3.17 (WebKit), но и на и 8.3.13 (IE7):
&НаКлиенте
Процедура ВоспроизвестиЗвукIEилиWebKit(Команда)
	
	мФайл = "file://C:/tmp/snd.mp3";
	Генератор = Новый ГенераторСлучайныхЧисел();
	rnd = XMLСтрока(Генератор.СлучайноеЧисло());
	id="sound_" + rnd;

	ПолеHTML = "
	|<!DO CTYPE html>
	| <ht ml>
	| <body>
	| <BGSOUND id='"+ id + "' balance=0 volume='-1000'></BGSOUND>
	| 
	| <sc ript>
	| function PlaySound() {
	| if (!window.HTMLAudioElement) {
	| document.all."+ id + ".volume=0; 
	| document.all." + id + ".src = '"+мФайл+"';
	| }
	| }
	| window.on load = function(){
	| PlaySound();
	| }
	| </sc ript>
	|
	|<audio autoplay=''>
	|<source src='"+мФайл+"' type='audio/mpeg'>
	|</audio>
	|
	| </body>
	| </html>";
	
КонецПроцедуры
Показать

*пробелы в тэгах (типа "DO CTYPE", "ht ml", "sc ript") - Инфостарт автоматом вставляет, нужно поубирать.
3. sikuda 679 03.08.20 09:14 Сейчас в теме
(1) Совместить WebKit и IE если необходимо это здоровая идея. А проблема кэшировния она другая. Если Вы выведите стандарный элемент управления Аудио в 1С тонкий клиент, то при нажатии второго раза на воспроизведение или прослушать с середины у Вас может не получиться(8.3.15). поэтому и предлагается решение внешного плеера. Для моего случая это сработало.
4. uno-c 268 03.08.20 10:14 Сейчас в теме
(3)Проблема кеширования - она разная. Мне нужно было воспроизвести звук при определенном событии, не нужен не только значок плеера, но даже поле HTML хотелось бы совсем спрятать. И в моей ситуации звук воспроизводился только один раз - если код HTML не менять.
5. sikuda 679 03.08.20 11:43 Сейчас в теме
(4) Есть особенность построения управляемого 1С интерфейса. Флаг видимость = флаг существования на форме!
Поэтому либо маленький прямоугольник, либо типа показать его в недоступной закладке(как в предыдущей публикации)
2. uno-c 268 02.08.20 18:40 Сейчас в теме
В общем, основная идея - в коде HTML сделать что-то меняющееся. Если нужен звук только на WebKit - то можно например покороче:
&НаКлиенте
Процедура ВоспроизвестиЗвукТолькоWebKit(Команда)
	
	мФайл = "file://C:/tmp/snd.mp3";
	
	ПолеHTML = "
	|<!DO CTYPE html>
	| <ht ml>
	| <body>
	| <!-- " + ТекущаяДата() + "  -->
	|<audio autoplay=''>
	|<source src='" + мФайл + "' type='audio/mpeg'>
	|</audio>
	|
	| </body>
	| </html>";

КонецПроцедуры
Показать
user788280; Irwin; blackjack666; ivanleb; +4 Ответить
6. sikuda 679 03.08.20 11:44 Сейчас в теме
(2) Было бы интересно найти работающий вариант из ПоместитьВоВременноеХранилище, а то в Web не понимает file://
13. bloodydiman 2 04.10.22 21:36 Сейчас в теме
(6)
&НаСервереБезКонтекста
Функция ПолучитьАдресФайла()
	 Возврат ПоместитьВоВременноеХранилище(Документы.ОтгрузочныйЛист.ПолучитьМакет("Ошибка"));
КонецФункции
 
&НаКлиенте
Процедура СохранитьФайлОшибки()
	Если ПустаяСтрока(ФайлОшибки) Тогда
		Файл = ПолучитьИзВременногоХранилища(ПолучитьАдресФайла());
		ФайлОшибки = ПолучитьИмяВременногоФайла(".mp3");
		Файл.Записать(ФайлОшибки);
	КонецЕсли;
КонецПроцедуры
Показать
19. Dimel 12.10.24 02:05 Сейчас в теме
(6) Чего то заморочился с задачей и вот какие результаты:

1) Объект Audio в WebKite чувствителен к переносам строк в Base64, поэтому необходимо использовать функцию ПолучитьBase64СтрокуИзДвоичныхДанных() при передаче данных в JS, а не использовать функцию Base64Строка()!
В таком случае код будет по воспроизведению звука такой:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ОбъектОбработка = РеквизитФормыВЗначение("Объект");
Данные = ОбъектОбработка.ПолучитьМакет("sound_ball");

Base64Строка = ПолучитьBase64СтрокуИзДвоичныхДанных(Данные);
АдресВХранилище = ПоместитьВоВременноеХранилище("dat a:audio/mpeg;base64," + Base64Строка, Новый УникальныйИдентификатор);

HTML =
"<!DO CTYPE html>
|<head>
|<met a http-equiv='Cache-Control' content='no-store'>
|</head>
|<ht ml>
| <body>
| <sc ript>
| var myAudio = new Audio();
| </sc ript>
| </body>
|</html>";

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

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

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

ОбъектHTML = Элементы.HTML.Документ.DefaultView;

ОбъектHTML.myAudio.src = Base64Строка;
ОбъектHTML.myAudio.play();

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

Где "АдресВХранилище" - это реквизит формы.

Этот вариант работает и в тонком и в ВебКлиенте.

2) Напрямую установить ссылку на хранилище нельзя из за того, что при получении данных из него возможны только следующие типы:
content-type: application/octet-strem - если помещаешь двоичные данные.
content-type: text/plain - если помещаешь строку.
content-type: image/bmp (и другие форматы картинок) - если помещаешь объект картинку.

А объект Audio требует только свои форматы audio/mpeg и т.п.

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

Но можно сделать вариацию передачи Base64 на JS (конечно ересь, но показываю как можно обойти):

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ОбъектОбработка = РеквизитФормыВЗначение("Объект");
	Данные = ОбъектОбработка.ПолучитьМакет("sound_ball");
		
	Base64Строка = ПолучитьBase64СтрокуИзДвоичныхДанных(Данные);
	
	АдресВХранилище = ПоместитьВоВременноеХранилище("dat a:audio/mpeg;base64," + Base64Строка, Новый УникальныйИдентификатор);
			
	HTML = 
	"<!DO CTYPE html>
	|<head>
	|</head>
	|<ht ml>
	| <body>
	|   <sc ript>
	|	var myAudio = new Audio();
	|
	|	let xhr = new XMLHttpRequest();
	|
	|	xhr.on load = function() {
	|		if (xhr.status != 200) { // анализируем HTTP-статус ответа, если статус не 200, то произошла ошибка
	|    		alert(`Ошибка ${xhr.status}: ${xhr.statusText}`); // Например, 404: Not Found
	|  		} else { // если всё прошло гладко, выводим результат
	|    		let str = xhr.response;
	|		myAudio.src = str;
	|		myAudio.play();
	|  		}
	|	};
	|   </sc ript>
	| </body>
	|</html>";

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

&НаКлиенте
Процедура ПроигратьИзХранилища(Команда)
	
	ОбъектHTML = Элементы.HTML.Документ.DefaultView;
	
	ОбъектHTML.xhr.open("GET", АдресВХранилище);
	ОбъектHTML.xhr.send();

КонецПроцедуры
Показать


Т.е. делаем HTTP запрос сами и подставляем полученный ответ в качестве src. (Там та же Base64 строка). Могу сказать только, что во временном хранилище все и так лежит в этом формате, так что разницы нет.

Этот вариант будет работать в тонком клиенте, но не работает на Web клиенте!.

Оба варианта не нуждаются в переформировании HTML для повторного воспроизведения.
7. ironn 6 16.10.20 13:06 Сейчас в теме
Приветствую!
Скачал третью обработку и столкнулся с проблемой.
Есть обработка на обычных формах, платформа 8.3.16.1063. В обработке список аудио файлов. Из нее вызывается форма воспроизведения с плеером "plyr" в ПолеHTMLДокумента. проигрываемый файл аудио скачивается на локальный виндовый сервер nbgf "file:////DC/Шара/файл.mp3".
На первый взгляд все нормально работает, но после проигрывания нескольких (3-5) файлов, при открытии следующего файла, черный квадрат... Иногда, перед черным квадратом на предыдущем файле, перестают работать элементы управления проигрывателя. Далее, если повезет, то можно закрыть 1С и открыть заново, а если нет, то она вылетает с ошибкой, или окно с 1С становится недоступным и приходится убивать процесс.
Может есть соображения по этому поводу?
8. sikuda 679 16.10.20 22:20 Сейчас в теме
(7) Жаль похоже внутренний урезанный движок V8Webkit тупо теряет ресурсы...
9. ironn 6 20.10.20 01:53 Сейчас в теме
(8) Такое впечатление, что он их не освобождает... Вернее освобождает после закрытия 1С. Сделал чтобы форма воспроизведения не закрывалась, а только обновлялся текст в поле хтмл - не помогло.
А движок в управляемых формах такой-же?
10. unknown181538 163 26.10.21 12:58 Сейчас в теме
(0) После переустановки ОС перестало у меня опять работать.
Выковырял html из вашей обработки.
В хроме корректно открывается с элементами управления.
В IE - пустая страница.
Подскажите, что в настройках IE нужно ставить? не смог подобрать.
Я правильно понимаю, что 1с IE вызывает?
11. sikuda 679 26.10.21 18:19 Сейчас в теме
(10) Нет. Статья как раз о том что 1С сделала по другом доступ в вэб движку.
Раньше это было - https://infostart.ru/public/248770/
А теперь у нас Webkit оригинальной версии в самой платформе...
12. unknown181538 163 26.10.21 18:30 Сейчас в теме
(11) а. точно. а я думал, что у мен уже новая версия... сейчас потестим
да, и он у меня тоже не работает. В чем может быть причина, и что проверять?
14. user1855774 19.04.23 15:35 Сейчас в теме
Привет! Очень благодарен всем причастным за объяснение по этой теме, искал варианты для воспроизведения звука на форме.
Сначала начал пользовать:

spVoice = Новый COMОбъект("SAPI.SpVoice");
spfStream = Новый COMОбъект("SAPI.SpFileStream");

Но при воспроизведении, блокируется форма. А у нас звук может идти каждые 13 секунд из-за этого юзеры жаловались на "глюки и подвисания 1С".

Благодаря этому способу, форма не блокируется при воспроизведении. Единственный минус, это лишнее поле ХТМЛ на форме, но, с учетом альтернативы описанной выше - это ерунда.
15. SaDLiF 01.05.23 22:51 Сейчас в теме
Ребята, кто подскажет. Почему при выводе audio control в html. Сам плеер черный и кнопок не видно, тыкаю наугад на кнопку "Play".
Какие варианты есть?

ПолеHTML = "<!DOCTYPE html>
	|<html>
	|<body>
	|
	|<audio controls>
	|<source src=""horse.ogg"" type=""audio/ogg"">
	|<source src=""horse.mp3"" type=""audio/mpeg"">
	|Your browser does not support the audio element.
	|</audio>
	|
	|</body>
	|</html>";
Показать
Прикрепленные файлы:
16. sikuda 679 02.05.23 09:28 Сейчас в теме
(15) Это в браузере или в тонком клиенте? Как правило внутри 1С тонкого клиента совместимость с вэб-стандартами не прозрачна. Только методом тыка..
17. Dimel 07.10.24 16:53 Сейчас в теме
(0) А в чем сложность с методом из Base64 строки? У меня работает и на клиенте и на web?
ЧЯДНТ?
18. Dimel 07.10.24 19:07 Сейчас в теме
Для потомков:
Прикрепленные файлы:
ВоспроизведениеЗвука.epf
user2080644; Maxx79; mevgenym; GrigoryYanshin; Valador; sikuda; +6 Ответить
20. user2080644 24.06.25 18:22 Сейчас в теме
(18) Респект. Все работает. Причем на всех остальных ресурсах неработающие варианты.
Оставьте свое сообщение