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








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

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

1. Когда в 1С не было управляемых форм, вывод звука основывался на системных вызовах Windows. Можно было зарегистрировать специальный ActiveX и вызвать его специальную функцию. Например в //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)

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

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

Р.S.

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

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

27 Comments

  1. Franco

    …Надо превратить звук в текст

    в Base64, наверное?

    Reply ↓
  2. postovalov

    Скачал, запустил. Звука нет 🙁

    В чем может быть проблема? — ОС Win Vista

    Reply ↓
  3. sikuda

    (1) Ну да.

    (2) Какой у Вас IE? Здесь работает http://jsfiddle.net/sikuda/gvGY9/ ?

    Reply ↓
  4. DenisKin

    Скачал, запустил, все зависло и вылетело ?!

    Reply ↓
  5. sikuda

    (4) DenisKin,

    Проверил на Windows 7 IE11(реал), Windows 8.1 IE11, Windows Vista IE7, Windows XP IE8(три VirtualBox) если приведете параметры вашей системы — проверю.

    Reply ↓
  6. DenisKin

    (5) Win7 64 bit ie-11

    Reply ↓
  7. sikuda

    (6) DenisKin, Моя основная машина на работе и стационарник дома отлично работают. Не лазили в реестр для улучшения 1С?

    Reply ↓
  8. haggart

    Я не пойму где это применить? Это стартовая площадка для 1Сников которые решат писать игрушки на 1С?

    Reply ↓
  9. sikuda

    (9) Скорее для звукового сопровождения процесса. Справку или демо пример по программе можно начитать. И пользователь будет сидеть и слушать.

    Reply ↓
  10. postovalov

    (3)

    IE 9. Проблема была связана с тем, что в свойствах IE был отключено воспроизведение звука.

    Reply ↓
  11. cool.vlad4

    (10) а какой в этом смысл? эти игрушки и без 1С работают.

    Reply ↓
  12. Gendalf_beliy

    (12) cool.vlad4, ну мало ли. Может у людей на работе в браузере ограничения на некоторые сайты, хотя не уверен точно, не сработают ли эти ограничения в 1с, смотря как их настроили.

    Reply ↓
  13. sikuda

    (13) Gendalf_beliy, Если все скрипты перенести в обработку 1С(моя со счетами), то и интернет не нужен.

    Reply ↓
  14. 2vadmaster

    (5) Да работает не плохо — но не стабильно — кликаю много и в какой то момент вылетает 1С с ошибкой ядра. Как сделать плей-лист из звуков?

    Reply ↓
  15. sikuda

    (15) 2vadmaster,

    Давайте по серьезному, версия Windows, IE, 1C, клиента 1С, обработка «Доступно и всерьез» или Счеты.

    Пока не встречал вылетов, кроме компьютеров в которых залезли в реестр доброжелатели.

    Если все приведете смогу проверить на виртуальной машине.

    Reply ↓
  16. tr75

    Наверно для игр было бы полезно.

    Reply ↓
  17. yura1960

    Ну уж нет. Чтобы я своим юзверям это поставил… Они и так любят радио через Инет слушать. Еще им озвучку ставить…

    Reply ↓
  18. Serge_ASB

    при выполнении ругается на :

    {Документ.ВводОстатков.Форма.ФормаДокумента.Форма(175)}: Ошибка при вызове метода контекста (ПолучитьМакет)

    Данные = ОбъектОбработка.ПолучитьМакет(«sound_ball»);

    по причине:

    Недопустимое значение параметра (параметр номер ‘1’)

    И я бы тоже не понял, чего он меня хотят. Где взять (как сделать) этот макет?

    Reply ↓
  19. sikuda

    (19) Serge_ASB, Сам скачал обработку с Инфостарта. Проверил в УФ и обячных формах 1С 8.3.5.1186. Все работает. Бинарный макет «sound_ball» в обработке есть. Проверьте что за Документ.ВводОстатков?

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

    Reply ↓
  20. Serge_ASB

    Решил другим способом:

    oVoice = Новый COMObject(«SAPI.SpVoice»);
    
    oSpFileStream = Новый COMObject(«SAPI.SpFileStream»);
    oSpFileStream.Open(Файл);
    oVoice.SpeakStream(oSpFileStream);
    oSpFileStream.Close();
    

    Но — звук есть под «обычной» Виндой — Win 7 или Win 8. А будучи запущенной из-под серверной (когда на сервере стоит SQL и база крутится там) — ругается на

    oSpFileStream = Новый COMObject(«SAPI.SpFileStream»);
    Reply ↓
  21. AlexanderKai

    (15) 2vadmaster,

    Предприятие под отладкой из конфигуратора?

    Сейчас внедряю DynamicWrapperX в своем проекте и методом плясок с бубном обнаружил, что если запускать обработку без отладки, то все просто идеально. Если из-под отладчика, то получаем постоянные вылеты 1С (в ntdll.dll). Причем вылетает как захочет, а может и не вылететь.

    Reply ↓
  22. sikuda

    (15) 2vadmaster, Исправил ошибку повторного нажатия кнопки в толстом клиенте. Проверил в новой версии 1С 8.3.6.

    Reply ↓
  23. pri_hod

    Тонкий клиент, база на веб сервере, не работает звук. Если через браузер то работает… Как заставить работать в тонком клиенте? 1С:Предприятие 8.3 (8.3.5.1119)

    Reply ↓
  24. sikuda

    (24) pri_hod, Честно говоря звук для web-клиенте доделан только в счетах(вторая обработка). Работает даже для Linux клиента(Звук работает, градиент цвета нет). Проверяли именно счеты?

    Reply ↓
  25. InformStandart

    Не работает звук под вэб клиентом; подскажите возможные варианты что делать, звук в браузерах включен

    Reply ↓
  26. sikuda

    (26) В вэб-клиенте вывод звука происходит совершенно по другому. Галочка в IE там не важна. Только в вэб работает вторая обработка со счетами. Проверил сейчас IE 11 (Режим документов Edge).

    Reply ↓
  27. sikuda

    В интернете: http://jsfiddle.net/sikuda/eY8Ba/

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *