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

С недавнего времени появилась проблема с модальными окнами в web-клиенте 1С. У некоторых пользователей стала выскакивать ошибка: "Использование модальных окон в данном режиме запрещено!". Причем интересная особенность, что у других пользователей все продолжает нормально работать. С теми же самыми правами, в том же самом браузере, той же версии!
Конфигурация: 1C:CRM, редакция 2.0 (2.0.11.5)
Платформа: 1С:Предприятие 8.3 (8.3.8.2197)
Работают пользователи через веб-клиент.
Запускаются все в браузере Mozilla Firefox (версия 51.0.1 32-bit).
В свойствах конфигурации установлено: Режим использования модальности = Использовать.

Поделитесь опытом, может, кто сталкивался с такой проблемой. Пыталась погуглить, но везде пишут только про "Режим использования модальности" и что не стоит использовать браузер Гугл Хром, так как с определенной версии он полностью перестал поддерживать модальные окна.
---
Я решила проблему! Без переписывания конфигурации и отката к старой версии браузера!!!)
Поделюсь, может, кому будет полезно.

Я нарыла, что проблему модальных окон при использовании веб-клиента 1С решает некое расширение для браузера 1C:Enterprise 8 Extension (почитать про него можно, например, здесь: https://1c.link/article/ff-addon-installation). Но! Главный вопрос был, как его установить??? И это оказалось не так очевидно, как хотелось бы;). Итак, заходим в меню "Общие настройки" -> "Персональные настройки", переходим на вкладку "Работа с файлами", там есть волшебная кнопка "Установить расширение работы с файлами", нажимаем ее.

И тут появляется гнусное сообщение об ошибке: "Использование синхронных методов на клиенте запрещено!". Вот те на!((( Снова засада....Читаем про асинхронность тут - http://v8.1c.ru/o7/201412async/index.htm. Все становится понятно).

Осталось найти процедуру, которая запускается при нажатии на вышеупомянутую кнопку "Установить расширение работы с файлами", и заменить в ней синхронный метод на новый асинхронный аналог. В моем случае нужно было заменить УстановитьРасширениеРаботыСФайлами() на НачатьУстановкуРасширенияРаботыСФайлами().

```1c
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    &НаКлиенте
    Процедура УстановитьРасширениеРаботыСФайламиНаКлиенте(Команда)

    //УстановитьРасширениеРаботыСФайлами();

    НачатьУстановкуРасширенияРаботыСФайлами();

    КонецПроцедуры
    ////////////////////////////////////////////////////////////­////////////////////////////////////////////////////////////­/////////
```

После этого все работает! Ура!!! Устанавливаем вышеупомянутое Расширение, и продолжаем наслаждаться работой веб-клиента в последней версии Firefox без каких-либо проблем с модальными окнами!

P.S.: мне было нежелательно править конфу, поэтому я сделала немного по-другому. Создала внешнюю обработку, которая запускает данный метод глобального контекста - НачатьУстановкуРасширенияРаботыСФайлами(). Запустила ее на веб-клиенте у каждого проблемного пользователя, расширение установилось, и жизнь снова заиграла яркими красками;))

Собственно, всё!
---
Я решила проблему! Без переписывания конфигурации и отката к старой версии браузера!!!)
Поделюсь, может, кому будет полезно.

Я нарыла, что проблему модальных окон при использовании веб-клиента 1С решает некое расширение для браузера 1C:Enterprise 8 Extension (почитать про него можно, например, здесь: https://1c.link/article/ff-addon-installation). Но! Главный вопрос был, как его установить??? И это оказалось не так очевидно, как хотелось бы;). Итак, заходим в меню "Общие настройки" -> "Персональные настройки", переходим на вкладку "Работа с файлами", там есть волшебная кнопка "Установить расширение работы с файлами", нажимаем ее.

И тут появляется гнусное сообщение об ошибке: "Использование синхронных методов на клиенте запрещено!". Вот те на!((( Снова засада....Читаем про асинхронность тут - http://v8.1c.ru/o7/201412async/index.htm. Все становится понятно).

Осталось найти процедуру, которая запускается при нажатии на вышеупомянутую кнопку "Установить расширение работы с файлами", и заменить в ней синхронный метод на новый асинхронный аналог. В моем случае нужно было заменить УстановитьРасширениеРаботыСФайлами() на НачатьУстановкуРасширенияРаботыСФайлами().

```1c
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    &НаКлиенте
    Процедура УстановитьРасширениеРаботыСФайламиНаКлиенте(Команда)

    //УстановитьРасширениеРаботыСФайлами();

    НачатьУстановкуРасширенияРаботыСФайлами();

    КонецПроцедуры
    ////////////////////////////////////////////////////////////­////////////////////////////////////////////////////////////­/////////
```

После этого все работает! Ура!!! Устанавливаем вышеупомянутое Расширение, и продолжаем наслаждаться работой веб-клиента в последней версии Firefox без каких-либо проблем с модальными окнами!

P.S.: мне было нежелательно править конфу, поэтому я сделала немного по-другому. Создала внешнюю обработку, которая запускает данный метод глобального контекста - НачатьУстановкуРасширенияРаботыСФайлами(). Запустила ее на веб-клиенте у каждого проблемного пользователя, расширение установилось, и жизнь снова заиграла яркими красками;))

Собственно, всё!
---
Столкнулся с подобной проблемой в веб клиентах FF, Chrom, расширение работы с файлами устанавливается, но при команде открыть получаю "Использование синхронных методов на клиенте запрещено!", в тонком и толстом клиенте все работает. При открытии через тонкий клиент отрабатывает вот этот код
```1c
    &НаКлиенте
    Процедура РасположениеНаПланеРасширениеПредложено(РасширениеРаботыСФайламиПодключено, ДополнительныеПараметры) Экспорт
    Перем ПолноеИмяФайла;

    ДанныеФайла = ДополнительныеПараметры.ДанныеФайла;
    ИмяФайла = ДополнительныеПараметры.ИмяФайла;
    СохранятьКак = ДополнительныеПараметры.СохранятьКак;

    Если РасширениеРаботыСФайламиПодключено Тогда
    РабочийКаталогПользователя = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя();
    Если ПустаяСтрока(РабочийКаталогПользователя) Тогда
    ПоказатьПредупреждение(, НСтр("ru = 'Не задан рабочий каталог'"));
    Возврат;
    КонецЕсли;

    ПолныйПуть = ";
    ФайлМожноОткрывать = ПрисоединенныеФайлыСлужебныйКлиент.ПолучитьФайлВРабочийКаталог(
    ДанныеФайла.СсылкаНаДвоичныеДанныеФайла,
    ",
    ТекущаяДата(),
    ИмяФайла,
    КаталогВременныхФайлов(),
    ПолныйПуть
    );

    Если ФайлМожноОткрывать Тогда
    ЗапуститьПриложение(ПолныйПуть);
    КонецЕсли;

    Иначе
    ПолучитьФайл(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, СохранятьКак, Истина);
    КонецЕсли;

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

А вот проверку типа клиента нашел ниже по коду, уже вот в этом учвстке:

```1c
    &НаКлиенте
    Процедура РасположениеНаПланеОткрытие(Элемент, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    Если Не АР_ОбщиеПроцедурыКлиент.ДоступнаРаботаMSOffice(2) Тогда
    Возврат;
    КонецЕсли;

    ДанныеПланировки = АР_ОбщиеПроцедуры.ЗначенияРеквизитовОбъекта(Объект.РасположениеНаПлане, "ФайлПланировки, Лист, ГрОбъект, ОбластьТекста");
    ДанныеПланировки.Вставить("Наименование", Объект.Наименование);

    ЭтоВебКлиент = Ложь;

    #Если ВебКлиент Тогда
    СохранятьКак = АР_ОбщиеПроцедурыКлиентСервер.ПолучитьИмяФайлаПланировки(ДанныеПланировки.ФайлПланировки, "Расположение объекта");
    ИмяФайла = ";
    ЭтоВебКлиент = Истина;
    #Иначе
    СохранятьКак = АР_ОбщиеПроцедурыКлиентСервер.ПолучитьИмяФайлаПланировки(ДанныеПланировки.ФайлПланировки, "Расположение объекта");
    Файл = Новый Файл(СохранятьКак);
    ИмяФайла = Файл.Имя;
    #КонецЕсли

    ОбрабатыватьШаблоныИПланировкиНаКлиенте = НЕ ЭтоВебКлиент И АР_ОбщиеПроцедуры.ПолучитьЗначениеКонстанты("АР_ОбрабатыватьШаблоныИПланировкиНаКлиенте");

    Если ОбрабатыватьШаблоныИПланировкиНаКлиенте Тогда
    АдресХранилища = АР_ОбщиеПроцедурыКлиентСервер.ОтобразитьНаПланировкеОбъект(ДанныеПланировки);
    Если НЕ АдресХранилища = Неопределено Тогда
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
    ДвоичныеДанные.Записать(СохранятьКак);
    ЗапуститьПриложение(СохранятьКак);
    КонецЕсли;
    Иначе
    ДанныеФайла = АР_ОбщиеПроцедуры.ПолучитьГрафическийОбъект(ДанныеПланировки, СохранятьКак);
    Если НЕ ДанныеФайла = Неопределено Тогда

    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ДанныеФайла", ДанныеФайла);
    ДополнительныеПараметры.Вставить("СохранятьКак", СохранятьКак);
    ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла);

    ОписаниеОповещения = Новый ОписаниеОповещения("РасположениеНаПланеРасширениеПредложено", ЭтотОбъект, ДополнительныеПараметры);
    ОбщегоНазначенияКлиент.ПоказатьВопросОбУстановкеРасширенияРаботыСФайлами(ОписаниеОповещения);

    КонецЕсли;
    КонецЕсли;

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

Уже всю голову изломал где может быть затык(
---
ПолучитьФайл замените на НачатьПолучениеФайлов (http://v8.1c.ru/o7/201412async/index.htm).
---
НачатьПолучениеФайлов
Не задан рабочий каталог
---
справку по функции посмотрите =)
---
Теперь получаю останов на блоке

```1c
    ФайлМожноОткрывать = ПрисоединенныеФайлыСлужебныйКлиент.ПолучитьФайлВРабочийКаталог(
    ДанныеФайла.СсылкаНаДвоичныеДанныеФайла,
    ",
    ТекущаяДата(),
    ИмяФайла,
    КаталогВременныхФайлов(),
    ПолныйПуть
    );
```
---
потому что вызываемой функции общего модуля выполняется синхронный вызов ПолучитьФайлы(ПолучаемыеФайлы, ПолученныеФайлы, , Ложь):

```1c
    Функция ПолучитьФайлВРабочийКаталог(Знач АдресДвоичныхДанныхФайла,
    Знач ОтносительныйПуть,
    Знач ДатаМодификацииУниверсальная,
    Знач ИмяФайла,
    Знач РабочийКаталогПользователя,
    ПолноеИмяФайлаНаКлиенте)

    Если РабочийКаталогПользователя = Неопределено
    ИЛИ ПустаяСтрока(РабочийКаталогПользователя) Тогда

    Возврат Ложь;
    КонецЕсли;

    КаталогСохранения = РабочийКаталогПользователя + ОтносительныйПуть;

    Попытка
    СоздатьКаталог(КаталогСохранения);
    Исключение
    СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
    СообщениеОбОшибке = НСтр("ru = 'Ошибка создания каталога на диске:'") + " " + СообщениеОбОшибке;
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке);
    Возврат Ложь;
    КонецПопытки;

    Файл = Новый Файл(КаталогСохранения + ИмяФайла);
    Если Файл.Существует() Тогда
    Файл.УстановитьТолькоЧтение(Ложь);
    УдалитьФайлы(КаталогСохранения + ИмяФайла);
    КонецЕсли;

    ПолучаемыйФайл = Новый ОписаниеПередаваемогоФайла(КаталогСохранения + ИмяФайла, АдресДвоичныхДанныхФайла);
    ПолучаемыеФайлы = Новый Массив;
    ПолучаемыеФайлы.Добавить(ПолучаемыйФайл);

    ПолученныеФайлы = Новый Массив;

    Если ПолучитьФайлы(ПолучаемыеФайлы, ПолученныеФайлы, , Ложь) Тогда
    ПолноеИмяФайлаНаКлиенте = ПолученныеФайлы[0].Имя;
    Файл = Новый Файл(ПолноеИмяФайлаНаКлиенте);
    Файл.УстановитьУниверсальноеВремяИзменения(ДатаМодификацииУниверсальная);
    Возврат Истина;
    КонецЕсли;

    Возврат Ложь;

    КонецФункции
```

Также вызывается СоздатьКаталог() вместо НачатьСозданиеКаталога().