IE 2016

Включаем звук в 1С. Доступно и всерьез.

Опубликовал Кудашкин Сергей (sikuda) в раздел Программирование - Теория программирования

Как сделать воспроизведение звука в 1С без внешних компонентов? Решаем средствами интернета. Для тонкого, толстого и web-клиента.

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

1. Когда в 1С не было управляемых форм, вывод звука основывался на системных вызовах Windows. Можно было зарегистрировать специальный ActiveX и вызвать его специальную функцию. Например в http://infostart.ru/public/85155/используется DynamicWrapperX и следующий код:

Попытка
  DynamicWrapper =Новый COMОбъект("DynamicWrapperX"); 
Исключение
  Объект=ПолучитьМакет("dynwrapx");
  Объект.Записать(КаталогВременныхФайлов() +"dynwrapx.dll");
  КомандаСистемы("regsvr32 dynwrapx.dll",КаталогВременныхФайлов() );
  Предупреждение("Поздравляю теперь и тебя появился звук в 1С"+ Символы.ПС +"Запустите обработку заново", 5);
  Закрыть();
КонецПопытки; 	                                               
DynamicWrapper.Register("winmm.dll", "sndPlaySoundA", "i=su");

Легко заметить, что данная библиотека может зарегистрировать функции не только работы со звуком. И возникает большая опасность, что это может использоваться не только в благих целях. С другой стороны в тонком клиенте или web клиенте доступ к таким компонентам нету. И пользоваться системным вызовом Windows из браузера неполучиться.

2. Поэтому, вооружившись только средствами интернета, будем воспроизводить звуки в 1С. Начнем работать с тэгом audio в html5 http://w3schools.com/html/html5_audio.asp. В интернете у всех уже имеются современные браузеры, и все прекрасно работает. Но мы же будем звучать из 1С. Значит первое что нам надо - это воспроизвести звук в тонком клиенте. Так как поле HTML в 1С работает в режиме совместимости IE7, то мы воспользуемся старый тэгом для IE bgsound. Мы можем хранить звук в виде макетов двоичных данных. И использовать их внутри HTML поля:

//Код для 1С Данные = ОбъектОбработка.ПолучитьМакет("sound_ball"); АдресЗвука = ПоместитьВоВременноеХранилище(Данные); url = '"+АдресЗвука+"' 

/* страница HTML */
BGSOUND id='sound_think' balance=0 volume='-5000'
/* И добавить скрипт в страницу */
document.all.sound_think.volume=0;
document.all.sound_think.src = url;



Проверяем работу в тонком и толстом клиенте.
- Windows 7 IE11 (компьютер)
- Windows Vista IE7 (VirtualBox)
- Windows XP IE8 (VirtualBox)
(Проверка на виратуальной машине VirtualBox со звуком, картинки прилагаются, спасибо Microsoft http://loc.modern.ie/ru/virtualization-tools#downloads)

Для понятности сделаем простую внешную обработку для вывод звука(см. ниже). Работает в тонком и толстом клиенте.

Но интересной особенностью этого метода, является то что IE и соответственно 1С не воспроизводит wav файлы, а mp3 легко. Вот вам и собственный формат (http://w3schools.com/html/html5_audio.asp)

3. А как нам работать в web клиенте? Правильно, в web клиенте 1С работает все по другому, ближе к современным стандартам. Возьмем в руки тэг audio, попробуем сделать данные во временном хранилище и получим полным облом. Так сделать звук в тонком клиенте не удалось. Но мы используем другой метод, не столь распостраненный. Надо превратить звук в текст. Скажете сказки? Нет читаем спецификации и доделываем (тип данных data:audio/mpeg;base64)

Дополнительная обработка -  бухгалтерские счеты http://infostart.ru/public/85155/ Уж больно они мне понравились. Там полностью делаем для всех видов клиентов 1С.

Попробовать их в интернете - пожалуйста http://jsfiddle.net/sikuda/eY8Ba/

В 2015 году поздравим нас с проверкой работоспособности в версии 8.3 (8.3.6.1760)!


Р.S.

И самое главное не забудьте включить звук в Internet Explorer!

Свойство обозревателя - Дополнительно - Мультимедиа - Воспроизводить звуки на вэб-страницах.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Простой вывод звука
.epf 39,25Kb
27.02.15
121
.epf 39,25Kb 121 Скачать
Счеты для 1С
.epf 55,50Kb
05.01.14
56
.epf 55,50Kb 56 Скачать

См. также

Лучшие комментарии

21. Serge_ASB 12.11.2014 12:49
Решил другим способом:
oVoice = Новый COMObject("SAPI.SpVoice");

oSpFileStream = Новый COMObject("SAPI.SpFileStream");
oSpFileStream.Open(Файл);
oVoice.SpeakStream(oSpFileStream);
oSpFileStream.Close();	
...Показать Скрыть
Но - звук есть под "обычной" Виндой - Win 7 или Win 8. А будучи запущенной из-под серверной (когда на сервере стоит SQL и база крутится там) - ругается на
oSpFileStream = Новый COMObject("SAPI.SpFileStream");
+ 1 [ anton.fly7; ]
# Ответить
11. postovalov (файл скачал) 14.01.2014 10:53
(3) sikuda,

IE 9. Проблема была связана с тем, что в свойствах IE был отключено воспроизведение звука.
+ 1 [ sikuda; ]
# Ответить

Комментарии

1. Деллиани Франко (Franco) 31.12.2013 10:32
...Надо превратить звук в текст
в Base64, наверное?
Ответили: (3)
# Ответить
2. Постовалов Сергей (postovalov) (файл скачал) 31.12.2013 11:03
Скачал, запустил. Звука нет :(
В чем может быть проблема? - ОС Win Vista
Ответили: (3)
# Ответить
3. Кудашкин Сергей (sikuda) 31.12.2013 11:44
(1) Ну да.
(2) Какой у Вас IE? Здесь работает http://jsfiddle.net/sikuda/gvGY9/ ?
Ответили: (11)
# Ответить
4. Денис (DenisKin) (файл скачал) 01.01.2014 14:17
Скачал, запустил, все зависло и вылетело ?!
Ответили: (5)
# Ответить
5. Кудашкин Сергей (sikuda) 03.01.2014 15:11
(4) DenisKin,
Проверил на Windows 7 IE11(реал), Windows 8.1 IE11, Windows Vista IE7, Windows XP IE8(три VirtualBox) если приведете параметры вашей системы - проверю.
Ответили: (6) (15)
# Ответить
6. Денис (DenisKin) (файл скачал) 03.01.2014 20:58
(5) sikuda, Win7 64 bit ie-11
Ответили: (7)
# Ответить
7. Кудашкин Сергей (sikuda) 04.01.2014 08:31
(6) DenisKin, Моя основная машина на работе и стационарник дома отлично работают. Не лазили в реестр для улучшения 1С?
# Ответить
9. Дуденков Александр (haggart) 13.01.2014 15:25
Я не пойму где это применить? Это стартовая площадка для 1Сников которые решат писать игрушки на 1С?
Ответили: (10)
# Ответить
10. Кудашкин Сергей (sikuda) 13.01.2014 17:12
(9) Скорее для звукового сопровождения процесса. Справку или демо пример по программе можно начитать. И пользователь будет сидеть и слушать.
Ответили: (12)
# Ответить
11. Постовалов Сергей (postovalov) (файл скачал) 14.01.2014 10:53
(3) sikuda,

IE 9. Проблема была связана с тем, что в свойствах IE был отключено воспроизведение звука.
+ 1 [ sikuda; ]
# Ответить
12. Тихий Ийон (cool.vlad4) 14.01.2014 11:35
(10) sikuda, а какой в этом смысл? эти игрушки и без 1С работают.
Ответили: (13)
# Ответить
13. Bilous Viacheslav (Gendalf_beliy) 14.01.2014 11:49
(12) cool.vlad4, ну мало ли. Может у людей на работе в браузере ограничения на некоторые сайты, хотя не уверен точно, не сработают ли эти ограничения в 1с, смотря как их настроили.
Ответили: (14)
# Ответить
14. Кудашкин Сергей (sikuda) 15.01.2014 14:52
(13) Gendalf_beliy, Если все скрипты перенести в обработку 1С(моя со счетами), то и интернет не нужен.
# Ответить
15. Карасев Вадим (2vadmaster) (файл скачал) 21.01.2014 15:34
(5) sikuda, Да работает не плохо - но не стабильно - кликаю много и в какой то момент вылетает 1С с ошибкой ядра. Как сделать плей-лист из звуков?
Ответили: (16) (22) (23)
# Ответить
16. Кудашкин Сергей (sikuda) 21.01.2014 16:12
(15) 2vadmaster,
Давайте по серьезному, версия Windows, IE, 1C, клиента 1С, обработка "Доступно и всерьез" или Счеты.
Пока не встречал вылетов, кроме компьютеров в которых залезли в реестр доброжелатели.
Если все приведете смогу проверить на виртуальной машине.
# Ответить
17. ya tr75 (tr75) 24.05.2014 06:08
Наверно для игр было бы полезно.
# Ответить
18. Лу Юрий (yura1960) 22.06.2014 13:05
Ну уж нет. Чтобы я своим юзверям это поставил... Они и так любят радио через Инет слушать. Еще им озвучку ставить...
# Ответить
19. Племянников Сергей (Serge_ASB) 25.10.2014 11:58
при выполнении ругается на :
{Документ.ВводОстатков.Форма.ФормаДокумента.Форма(175)}: Ошибка при вызове метода контекста (ПолучитьМакет)
Данные = ОбъектОбработка.ПолучитьМакет("sound_ball");
по причине:
Недопустимое значение параметра (параметр номер '1')

И я бы тоже не понял, чего он меня хотят. Где взять (как сделать) этот макет?
Ответили: (20)
# Ответить
20. Кудашкин Сергей (sikuda) 06.11.2014 09:46
(19) Serge_ASB, Сам скачал обработку с Инфостарта. Проверил в УФ и обячных формах 1С 8.3.5.1186. Все работает. Бинарный макет "sound_ball" в обработке есть. Проверьте что за Документ.ВводОстатков?
И самое главное не забудьте включить звук в Internet Explorer!
# Ответить
21. Племянников Сергей (Serge_ASB) 12.11.2014 12:49
Решил другим способом:
oVoice = Новый COMObject("SAPI.SpVoice");

oSpFileStream = Новый COMObject("SAPI.SpFileStream");
oSpFileStream.Open(Файл);
oVoice.SpeakStream(oSpFileStream);
oSpFileStream.Close();	
...Показать Скрыть
Но - звук есть под "обычной" Виндой - Win 7 или Win 8. А будучи запущенной из-под серверной (когда на сервере стоит SQL и база крутится там) - ругается на
oSpFileStream = Новый COMObject("SAPI.SpFileStream");
+ 1 [ anton.fly7; ]
# Ответить
22. Топольский Александр (AlexanderKai) 27.02.2015 13:10
(15) 2vadmaster,
Предприятие под отладкой из конфигуратора?
Сейчас внедряю DynamicWrapperX в своем проекте и методом плясок с бубном обнаружил, что если запускать обработку без отладки, то все просто идеально. Если из-под отладчика, то получаем постоянные вылеты 1С (в ntdll.dll). Причем вылетает как захочет, а может и не вылететь.
# Ответить
23. Кудашкин Сергей (sikuda) 27.02.2015 16:41
(15) 2vadmaster, Исправил ошибку повторного нажатия кнопки в толстом клиенте. Проверил в новой версии 1С 8.3.6.
# Ответить
24. Приходько Михаил (pri_hod) (файл скачал) 14.03.2015 16:06
Тонкий клиент, база на веб сервере, не работает звук. Если через браузер то работает... Как заставить работать в тонком клиенте? 1С:Предприятие 8.3 (8.3.5.1119)
Ответили: (25)
# Ответить
25. Кудашкин Сергей (sikuda) 14.03.2015 20:51
(24) pri_hod, Честно говоря звук для web-клиенте доделан только в счетах(вторая обработка). Работает даже для Linux клиента(Звук работает, градиент цвета нет). Проверяли именно счеты?
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл