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

04.08.20

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

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

Скачать файл

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

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

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

С момента предыдущей публикации //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С.

12000 руб.

02.09.2020    169304    937    403    

905

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

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

8400 руб.

20.08.2024    12616    99    42    

101

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

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

9360 руб.

17.05.2024    26539    90    48    

134

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

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    16831    41    15    

75

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

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

15000 руб.

10.11.2023    11398    40    27    

66

SALE! %

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

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    190552    1150    0    

918

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    781    2    0    

4

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

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

5000 руб.

07.02.2018    103934    244    100    

306
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. uno-c 267 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 678 03.08.20 09:14 Сейчас в теме
(1) Совместить WebKit и IE если необходимо это здоровая идея. А проблема кэшировния она другая. Если Вы выведите стандарный элемент управления Аудио в 1С тонкий клиент, то при нажатии второго раза на воспроизведение или прослушать с середины у Вас может не получиться(8.3.15). поэтому и предлагается решение внешного плеера. Для моего случая это сработало.
4. uno-c 267 03.08.20 10:14 Сейчас в теме
(3)Проблема кеширования - она разная. Мне нужно было воспроизвести звук при определенном событии, не нужен не только значок плеера, но даже поле HTML хотелось бы совсем спрятать. И в моей ситуации звук воспроизводился только один раз - если код HTML не менять.
5. sikuda 678 03.08.20 11:43 Сейчас в теме
(4) Есть особенность построения управляемого 1С интерфейса. Флаг видимость = флаг существования на форме!
Поэтому либо маленький прямоугольник, либо типа показать его в недоступной закладке(как в предыдущей публикации)
2. uno-c 267 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 678 03.08.20 11:44 Сейчас в теме
(2) Было бы интересно найти работающий вариант из ПоместитьВоВременноеХранилище, а то в Web не понимает file://
13. bloodydiman 1 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 5 16.10.20 13:06 Сейчас в теме
Приветствую!
Скачал третью обработку и столкнулся с проблемой.
Есть обработка на обычных формах, платформа 8.3.16.1063. В обработке список аудио файлов. Из нее вызывается форма воспроизведения с плеером "plyr" в ПолеHTMLДокумента. проигрываемый файл аудио скачивается на локальный виндовый сервер nbgf "file:////DC/Шара/файл.mp3".
На первый взгляд все нормально работает, но после проигрывания нескольких (3-5) файлов, при открытии следующего файла, черный квадрат... Иногда, перед черным квадратом на предыдущем файле, перестают работать элементы управления проигрывателя. Далее, если повезет, то можно закрыть 1С и открыть заново, а если нет, то она вылетает с ошибкой, или окно с 1С становится недоступным и приходится убивать процесс.
Может есть соображения по этому поводу?
8. sikuda 678 16.10.20 22:20 Сейчас в теме
(7) Жаль похоже внутренний урезанный движок V8Webkit тупо теряет ресурсы...
9. ironn 5 20.10.20 01:53 Сейчас в теме
(8) Такое впечатление, что он их не освобождает... Вернее освобождает после закрытия 1С. Сделал чтобы форма воспроизведения не закрывалась, а только обновлялся текст в поле хтмл - не помогло.
А движок в управляемых формах такой-же?
10. unknown181538 159 26.10.21 12:58 Сейчас в теме
(0) После переустановки ОС перестало у меня опять работать.
Выковырял html из вашей обработки.
В хроме корректно открывается с элементами управления.
В IE - пустая страница.
Подскажите, что в настройках IE нужно ставить? не смог подобрать.
Я правильно понимаю, что 1с IE вызывает?
11. sikuda 678 26.10.21 18:19 Сейчас в теме
(10) Нет. Статья как раз о том что 1С сделала по другом доступ в вэб движку.
Раньше это было - https://infostart.ru/public/248770/
А теперь у нас Webkit оригинальной версии в самой платформе...
12. unknown181538 159 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 678 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
Valador; sikuda; +2 Ответить
Оставьте свое сообщение