Асинхронні методи 1с. Чому виникає помилка "Використання синхронних методів на клієнті заборонено"? Швидке виправлення проблеми

25.10.2019 Безпека

У статті будуть розглянуті основні причини відмови від модальності у платформі «1С:Підприємство» та основні методи перетворення ділянок коду на нову асинхронну модель.

Застосовність

У статті розглядаються асинхронна модель побудови бізнес-логіки, додана платформа «1С:Підприємство» редакції 8.3. Подана інформація є актуальною для поточних релізів платформи.

Відмова від використання модальних вікон у платформі 1С:Підприємство 8.3

При розробці конфігурації на платформі 1С:Підприємство 8 періодично виникає потреба призупинити роботу програми до того моменту, коли користувач прийме якесь рішення або виконає будь-які дії.

Наприклад, при натисканні на кнопку заповнення табличної частини у користувача слід запитати, чи потрібно очистити табличну частину, щоб не відбулося втрати раніше введених даних.

Така поведінка може забезпечити, наприклад, наступний код:

&На Клієнті
Процедура Заповнити Товари(Команда)
Відповідь = Питання ("Таблична частина буде очищена. Продовжити?", РежимДіалогаПитання.);
Якщо Відповідь = КодПоверненняДіалога.ТакТоді
// Алгоритм заповнення
КінецьЯкщо ;
КінецьПроцедури

В результаті роботи цього фрагмента коду відбудеться призупинення виконання програмного коду, на екрані відображається питання, інтерфейс програми крім діалогу з питанням стає недоступним, система очікує на прийняття рішення користувачем, виконання коду продовжиться тільки після відповіді на запитання.

Також до призупинення виконання коду та блокування інтерфейсу призводить відкриття модальних вікон за допомогою виклику методу Відкрити Модально ().

При роботі з конфігурацією в режимі веб-клієнта через браузер у цьому випадку буде відкрито нове вікно - вікно, що спливає, яке заблокує не тільки поточну вкладку, але і весь інтерфейс браузера, включаючи інші відкриті вікната вкладки.

Спливаючі вікна в Інтернеті найчастіше використовуються для зловмисного розповсюдження небажаної реклами, тому браузери містять функції блокування спливаючих вікон.

У такому випадку для роботи з конфігураціями 1С:Підприємство 8 через браузер необхідно заборонити блокування спливаючих вікон.

Проблеми також виникають під час роботи на мобільних пристроях. Так наприклад, модальні вікнане підтримуються на iPad.

Для вирішення зазначених проблем слід використовувати блокуючі вікна замість модальних. Для користувача все виглядає візуально так само: вікно блокує інтерфейс веб-клієнта.

Однак блокуюче вікно як би "малюється" поверх головного вікна, і блокується тільки поточна вкладка браузера, в якій відкрита конфігурація, дозволяючи перемикатися на інші вкладки, оскільки модальні вікна браузера при цьому не використовуються.

Таким чином, спливаючі вікна в браузері не відкриваються і забезпечується робота через веб-клієнт на мобільних пристроях.

Кореневий елемент конфігурації має властивість “Режим використання модальності”, який визначає, чи можна в конфігурації відкривати модальні вікна.

Якщо вибрано варіант "Використовувати", модальні вікна можна відкривати. Якщо вибрано варіант "Не використовувати", то модальні вікна неприпустимі. При спробі викликати метод, який відкриває модальне вікно, система виводить повідомлення про помилку:

За такого значення властивості “Режим використання модальності” допустимі лише блокуючі вікна.

Якщо вибрано варіант “Використовувати з попередженнями”, під час відкриття модальних вікон у вікно повідомлень виводиться текст:

Такий варіант роботи може використовуватися як проміжний під час переробки конфігурації з метою відмови від використання модальних вікон.

Основна відмінність блокуючих вікон від модальних полягає в тому, що відкриття вікна, що блокує, не робить припинення виконання коду.

Тому розробникам доведеться переписати програмний код, який використовує модальні вікна з урахуванням цієї особливості.

Код потрібно розділити на дві частини:

  • відкриття блокуючого вікна;
  • обробка вибору користувача.

Фрагмент коду, наведений на початку статті, потрібно переписати так:

&На Клієнті
Процедура Заповнити Товари(Команда)
Оповіщення = Новий Опис Оповіщення(, Цей об'єкт);

РежимДіалогаПитання.);
КінецьПроцедури
&На Клієнті
Процедура (Результат, Додаткові параметри) Експорт
Якщо результат = КодПоверненняДіалога.ТакТоді
// Алгоритм заповнення
КінецьЯкщо ;
КінецьПроцедури

Після виконання процедури ПоказатиПитання() система не зупиняється, очікуючи на відповідь користувача, виконання коду триває.

Користувач зможе зробити вибір лише після завершення роботи всієї процедури. При цьому буде викликано експортну процедуру Заповнити ТовариПитання Завершення(). Її назву ми передали до конструктора об'єкта ОписОповіщення.

Процедура, яка буде викликана після здійснення вибору, може бути розташована в модулі форми, модулі команди, загальному не глобальному модулі.

У розглянутому прикладі процедура, що викликається, розташована в модулі керованої форми, тому ми передали до параметра ЦейОб'єкт.

Розглянемо виклик процедури, що у загальному модулі. Для цього додамо новий загальний модуль Обробка Оповіщень, встановимо для нього прапор "Клієнт (керований додаток)", а ознаку "Глобальний" не встановлюємо. Розташуємо в цьому модулі процедуру Заповнити Запитання Завершення().

Тоді обробник команди заповнення виглядатиме так:

&На Клієнті
Процедура Заповнити Товари(Команда)
Оповіщення = Новий Опис Оповіщення(“ЗаповнитиТовариПитанняЗавершення”,
Обробка Оповіщень);
ТекстВопроса = “Таблична частина буде очищена. Продовжити? ;
ПоказатиПитання (Оповідання, Текст Питання, РежимДіалогаПитання.);
КінецьПроцедури

Після виклику будь-якого методу, що відкриває блокуюче вікно, процедура повинна завершуватися, а код, що виконується далі, слід розташовувати в процедурі, яка буде викликана після закриття вікна.

Для передачі контексту (допоміжних даних, деяких параметрів, значень змінних) з процедури, що відкриває модальне вікно, в процедуру, що викликається під час його закриття, передбачено третій необов'язковий параметр конструктора об'єкта Опис Оповіщення – ДодатковіПараметри.

Цей об'єкт (будь-якого типу) буде передано в процедуру, описану в Опис Оповіщення, останнім параметром.

На прикладі розглянутої вище ділянки коду це можна зробити так:

&На Клієнті
Процедура Заповнити Товари(Команда)
Параметр1 = 0;
Параметр2 = 0;
СписокПараметрів= Новий Структура ("Параметр1, Параметр2", Параметр1, Параметр2);
Оповіщення = Новий Опис Оповіщення(“ЗаповнитиТовариПитанняЗавершення”, Цей об'єкт ,
СписокПараметрів);
ПоказатиПитання (Повідомлення , “Таблична частина буде очищена. Продовжити?” ,
РежимДіалогаПитання.);
КінецьПроцедури
&На Клієнті
Процедура ЗаповнитиТовариПитанняЗавершення(Результат, Додаткові параметри) Експорт
Якщо результат = КодПоверненняДіалога.ТакТоді
//Аналізуємо ДодатковіПараметри.Параметр1
/ / Аналізуємо Додаткові параметри. Параметр 2
КінецьЯкщо ;
КінецьПроцедури

Якщо потрібно передати лише одне значення, то структуру можна не використовувати, а привласнити це значення параметру Додаткові параметри конструктора об'єкта Опис Оповіщення.

Розглянемо кілька прикладів роботи із блокуючими вікнами.

Завдання 1. Відкриття іншої форми

З форми документа, натиснувши кнопку “Відкрити параметри”, потрібно відкрити форму, на якій розташовані два прапорці Параметр1 і Параметр2, які повинен встановити користувач. Після закриття форми виведіть у рядок повідомлень значення параметрів.

Створюємо загальну форму “ФормаПараметрів”, на якій розміщуємо реквізити Параметр1 та Параметр2, а також команду ЗакритиФорму:

Обробник команди виглядає так:

Обробник команди виглядає наступним чином: &На Клієнті
Процедура ЗакритиФорму (Команда)
СписокПараметрів= Новий Структура ( "Параметр1, Параметр2", Параметр1, Параметр2);
Закрити ( СписокПараметрів); КінецьПроцедури

Для форми властивість РежимВідкриттяВікна встановлюємо в "Блокувати весь інтерфейс":

На формі документа маємо команду ВідкритиПараметри, обробник якої описуємо наступним чином:

&На Клієнті
Процедура ВідкритиПараметри(Команда)
Оповіщення = Новий Опис Оповіщення(“ВідкритиПараметриЗавершення”, Цей об'єкт);
ВідкритиФорму ( "ЗагальнаФорма.ФормаПараметрів", , , , , , Оповіщення );
КінецьПроцедури
&На Клієнті
Процедура ВідкритиПараметриЗавершення(Результат, Додаткові параметри) Експорт
Якщо ТипЗнч (Результат) = Тип (“Структура”) Тоді
Для кожного КлючЗначення З Результат Цикл
Повідомлення = Новий ПовідомленняКористувачу;
Повідомлення.Текст = "Ключ: "" ” + КлючЗначення.Ключ + “””значення = ”
+ КлючЗначення.;
Повідомлення.Повідомити();
Кінець циклу;
КінецьЯкщо ;
КінецьПроцедури

У режимі користувача, запускаючи конфігурацію під веб-клієнтом, отримуємо такі результати роботи:

Щоб збільшити, натисніть на зображення.

Режим відкриття вікна можна також вказувати в останньому параметрі процедури Відкрити Форму.

&На Клієнті
Процедура ВідкритиПараметри(Команда)
Оповіщення = Новий Опис Оповіщення(“ВідкритиПараметриЗавершення”, Цей об'єкт);
ВідкритиФорму ( "ЗагальнаФорма.ФормаПараметрів", , , , , , Оповіщення ,
РежимВідкриттяВікнаФорми.БлокуватиВесьІнтерфейс
);
КінецьПроцедури

Завдання 2. Питання при закритті форми

При закритті вікна обробки запитувати користувача, чи дійсно він хоче закрити вікно.

Це завдання можна вирішити за допомогою наступного коду, розташованого в модулі форми обробки:

&На Клієнті
Перем Потрібно закривати форму;
&На Клієнті
Процедура ПередЗакриттям (Відмова, СтандартнаОбробка)
Якщо не Потрібно закривати форму= Істина Тоді
Відмова = Істина;
Оповіщення = Новий Опис Оповіщення("ПередЗакриттямЗавершення", Цей об'єкт);
ПоказатиПитання (Оповідання , “Ви дійсно хочете закрити вікно?” ,
РежимДіалогаПитання.
);
КінецьЯкщо ;
КінецьПроцедури
&На Клієнті
Процедура ПередЗакриттямЗавершення(Результат, Додаткові параметри) Експорт
Якщо результат = КодПоверненняДіалога.ТакТоді
Потрібно закривати форму= Істина;
Закрити ();
Інакше
Потрібно закривати форму= Невизначено;
КінецьЯкщо ;
КінецьПроцедури

У процедурі ПередЗакриттям форми користувачеві ставиться питання, прапор Відмова виставляється в Істина, закриття форми скасовується.

Після ствердної відповіді на запитання змінна ПотрібноЗакриватиФорму встановлюється в Істина, форма закривається повторно.

Завдання 3. Введення числового значення

При натисканні кнопки на формі обробки відкривати стандартний діалог введення числа.

Для цього необхідно скористатися методом ПоказатиВведенняЧисла() замість ВвестиЧисло(), який відкриває блокуюче вікно замість модального.

&На Клієнті
Процедура ВведенняЧисла (Команда)
Оповіщення = Новий Опис Оповіщення("ВведенняЧислаЗавершення", Цей об'єкт);
ПоказатиВведенняЧисла(Оповіщення , 0 , "Введіть кількість" , 15, 3);
КінецьПроцедури
&На Клієнті
Процедура ВведенняЧислаЗавершення(Результат, Додаткові параметри) Експорт

Повідомлення = Новий ПовідомленняКористувачу;
Повідомлення.Текст = "Ви ввели кількість" + Результат;
Повідомлення.Повідомити();
КінецьЯкщо ;
КінецьПроцедури

Після закриття вікна введення числа буде викликана процедура, в перший параметр якої буде передано введене число або значення Невизначено, якщо користувач відмовився від введення.

Завдання 4. Вибір кольору

При натисканні на кнопку на формі обробки за допомогою стандартного діалогу вибору кольору, користувач вказує необхідний колір. Цей колір встановити для фону кнопки.

Додамо на форму команду ВибірКольори з наступним обробником:

&На Клієнті
Процедура ВибірКвіту (Команда)
ДіалогВиборуКольори= Новий ДіалогВиборуКольори;
Оповіщення = Новий Опис Оповіщення("ВибірКвітуЗавершення", Цей об'єкт);
ДіалогВиборуКольори.Показати (Оповідання);
КінецьПроцедури
&На Клієнті
Процедура ВибірКвітуЗавершення(Результат, Додаткові параметри) Експорт
Якщо НЕ Результат = Невизначено Тоді
Елементи.ВибірКвіту.КолірФона= Результат;
КінецьЯкщо ;
КінецьПроцедури

Для об'єктів ДіалогВиборуКольори (а також ДіалогРедагуванняСтандартногоПеріоду, КонструкторФорматноїРядки, ДіалогРозкладиРегламентногоЗавдання, ДіалогВиборуШрифту) метод Показати() відкриває блокуюче вікно.

Після закриття вікна буде викликана процедура, в перший параметр якої буде передано вибране значення (колір, шрифт тощо) або Невизначено, якщо користувач відмовився від вибору.

Слід звернути увагу, що об'єкт ДіалогВиборуФайлу не має методу Показати() на відміну від діалогів вибору кольору або шрифту, оскільки реалізація цих діалогів суттєво різна.

Для використання діалогу вибору файлу на веб-клієнті необхідно підключити розширення роботи з файлами.

Діалоги, що реалізуються через розширення роботи з файлами, не створюють таких проблем у роботі, як модальні вікна браузерів, тому не було реалізовано відкриття вікон, що блокують, для об'єкта ДіалогВиборуФайлу.

На закінчення відзначимо, що починаючи з релізу 8.3.10 у веб-клієнті припинено підтримку модальних вікон. У цьому випадку, якщо в конфігурації відбувається виклик модального методу, відбувається генерація винятку. Також у веб-клієнті припинено підтримку режиму інтерфейсу В окремих вікнах. Крім того, і в тонкому, і веб-клієнті тепер не можна відкривати форму в окремому вікні (при роботі в режимі інтерфейсу В Закладках). Такі кардинальні кроки дозволили відмовитися від режиму інтерфейсу, який не підтримується всіма сучасними браузерами.

Який практичний висновок можна зробити із цієї інформації? А висновок досить простий - якщо з якоїсь причини у вашій конфігурації досі існують модальні виклики, то в цих місцях у веб-клієнті буде видаватися вікно з повідомленням про помилку. Хочеться застерегти від спроб “нагуглити” якесь швидке рішенняцієї проблеми, т.к. Переважна більшість порад зводиться до такого рецепту: у конфігураторі лише на рівні зміни у якості «Режим використання модальності» поставити значення «Використовувати». Звичайно, в Наразі, це працювати не буде лише через те, що самі сучасні браузеривже не підтримують модальні дзвінки.

І у вас є всього два шляхи, як вирішити описану вище проблему:

  1. Оновити платформу до релізу 8.3.10+ (8.3.11), встановити властивість конфігурації «Режим сумісності» у «Не використовувати» та переписати фрагменти коду, які використовують модальні методи на асинхронну модель побудови бізнес-логіки
  2. Рекомендувати вашим клієнтам користуватися застарілими браузерамиде модальні виклики ще підтримувалися ( Mozilla Firefoxверсії 37 та нижче, Chrоme нижче 37 версії і т.д.).

До речі, починаючи з релізу 8.3.11 більше не підтримуються веб-браузери Microsoft Internet Explorerверсій 8 та 9.

З веб-браузерами у світлі модальності ми розібралися, тепер настав час прояснити ситуацію і з рештою клієнтів.

Починаючи з версії 8.3.5, властивість «Режим використання модальності» в тонкому та товстому клієнтах враховується, лише якщо вказано параметр командного рядка /EnableCheckModal. Цей параметр автоматично підставляється в командний рядоктільки під час запуску програми з конфігуратора. Якщо цей параметр не вказано, то генерація винятків немає і відповідні попередження не показуються. Тобто. на практиці у разі використання товстого та тонкого клієнта жодної кардинальної зміни в роботі під час використання режиму модальності не спостерігається – модальні виклики працюватимуть так само, як і працювали раніше, при цьому не надаючи жодних попереджень, як у веб-клієнті.

Щоб розставити всі крапки над “i”, зауважимо, що починаючи з редакції 8.3.9, у товстому клієнті ігнорується властивість конфігурації «Режим використання синхронних викликів розширень платформи та зовнішніх компонентів», при цьому відповідні синхронні методи працюють без генерації винятків та виведення попереджень. Вказана ігнорована властивість була додана в редакції 8.3.5 з метою підтримки асинхронної роботи із зовнішніми компонентами, криптографією та розширеннями для роботи з файлами у веб-браузері Google Chrome. Зрозуміло, що до товстого клієнта це не має жодного стосунку, і тому “тихе” ігнорування даної властивостіпросто виключило зайві перевірки використання синхронних методів під час використання конфігурації.

До речі! Через те, що платформа впевнено рухається у бік вебу, з версії 8.3.8 розробники ввели певні обмеження на програмний код, який пов'язаний з логікою закриття форми або програми, що виконується в товстому та тонким клієнтам. Обов'язково прочитайте нашу статтю, яка детально висвітлює цей нюанс. Крім того, в курсі «Професійна розробка інтерфейсів та форм в 1С:Підприємство 8.3» є розділ, присвячений відмові від модальності, і ви можете почерпнути масу корисної та актуальної інформації з цієї теми.

Колеги, існують дві речі які можна читати нескінченно: стрічку вконтакті та список змін у черговому релізі платформі, тому, давайте підбивати остаточні підсумки;)

У процесі розгляду прикладів, що дозволяють перейти від елементів синхронної моделі до асинхронної, ви, напевно, вже помітили, що в загальному випадку програмного коду побільшало. Чим більше коду, тим більше підвищується складність його подальшого супроводу та налагодження.

Крім того, кількість коду ще більше збільшиться, якщо ми в процесі розробки використовуватимемо Велика кількістьдіалогів. Тому в процесі розробки прикладних рішень, орієнтованих на роботу у веб-клієнті, потрібно пам'ятати про ту парадигму роботи, яка використовується в даний момент у сучасних веб-додатках. Тому якщо у вашій конфігурації багато інтерактивних діалогів з користувачем, що видаються попереджень, то є сенс переглянути цю функціональність на користь інших підходів в організації взаємодії з користувачем.

Замість ув'язнення

Ось і добіг кінця наш цикл «Перші кроки в розробці на 1С». Якщо ви прочитали його цілком, то, швидше за все, вже помітили, якими семимильними кроками розвивається платформа останнім часом. Матеріал цього циклу було написано відносно недавно, але ми були змушені його серйозно актуалізувати, т.к. навіть за такий короткий термін з'явилася маса нових важливих функціональних можливостейта змін. Такі великі зміни можуть трохи спантеличити програміста 1С, якщо він не ріс і не розвивався у професійному плані з платформою весь цей час.

На спеціалізованих інтернет-ресурсах часто можна прочитати прохання від програмістів-початківців і їх більш зрілих колег порадити їм матеріали, які допомогли б їм розібратися в великих і часом здається нескінченними, можливостях платформи 1С. Ми, за традицією, рекомендуємо звернути вашу увагу на наші курси з програмування

Чому виникає помилка "Використання синхронних методів на клієнті заборонено"?

Якщо в процесі виконання уроків у вас виникла така помилка - виправити її дуже просто.

Поверніться до конфігуратора та виберіть пункт меню "Конфігурація" -> "Відкрити конфігурацію":

У вікні, натисніть правою кнопкою на пункті "Конфігурація" і виберіть з меню "Властивості":

Відкриється вікно з властивостями конфігурації (праворуч):

Прогортайте його в самий низ і знайдіть там пункт "Режим використання модальності":

Встановіть його значення в "Використовувати":

Увага!Зверніть увагу, що якщо ви використовуєте платформу 1С, відмінну від тієї, що ми завантажували в першому уроці (пізнішої версії), то у вас також буде присутній поле "Режим використання синхронних викликів...". Його також потрібно встановити у "Використовувати".

Нарешті виберіть пункт меню "Конфігурація" -> "Зберегти конфігурацію":

Готово! Тепер помилок більше не виникне.

Пояснення нижче – для тих, кому цікаво, що ми зробили.

Ми включили режим використання модальності у нашій конфігурації. За замовчуванням цей режим вимкнено і це не дозволяє нам використовувати такі команди як ВвестиКількість, ВвестиРядок, ВвестиДату, ВідкритиЗначення.

Справа в тому, що ці команди належать до модальних. Їх виклик призводить до того, що перед користувачем з'являється вікно (наприклад, для введення інформації), яке блокує можливість роботи з програмою, доки вікно не закриється.

Оскільки наявність таких вікон вкрай небажано при роботі з 1С через веб-браузер, то при розробці нових конфігурацій режим модальності за замовчуванням вимкнений.

Друк (Ctrl+P)

Робота з файлами в асинхронному режимі є лише на стороні клієнтської програми. У загальному випадку рекомендується використовувати синхронні методи для роботи на стороні сервера та асинхронні для роботи на стороні клієнтської програми.
Розглянемо приклад роботи з файлами асинхронної техніці: видалення всіх файлів у каталозі тимчасових файлів. Для синхронної техніки така дія буде виглядати так:

&На Клієнті
Процедура Видалити(Команда)
ВидалитиФайли(КаталогТимчасовихФайлів(), ОтриматиМаскуВсіФайлиКлієнта());

КінецьПроцедури
Асинхронна техніка виглядатиме інакше:

&На Клієнті
Процедура Видалити(Команда)
Зворотній Виклик = Новий ОписПовідомлення(“ОтриматиКаталогТимчасовихФайлівЗавершення”, ЦейОб'єкт, “ВидалитиПомилка”, ЦейОб'єкт);
ПочатиОтриманняКаталогуТимчасовихФайлів(ЗворотнийВиклик);
КінецьПроцедури
&На Клієнті
Процедура ОтриматиКаталогТимчасовихФайлівЗавершення(Ім'яКаталогуТимчасовихФайлів, ДодатковіПараметри)Експорт
Зворотній Виклик = Новий Опис Оповіщення (“Видалити Завершення”, Цей Об'єкт, “Файлова Помилка”, Цей Об'єкт);
ПочатиВидаленняФайлів(ЗворотнийВиклик, Ім'яКаталогуТимчасовихФайлів, ОтриматиМаскуВсіФайлиКлієнта());
КінецьПроцедури
&На Клієнті
Процедура ВидалитиЗавершення(Додаткові параметри) Експорт
Повідомити(“Видалення успішно завершено”);
КінецьПроцедури
&На Клієнті
Процедура ФайловаПомилка (ІнформаціяПро помилку, СтандартнаОбробка, ДодатковіПараметри)Експорт
Повідомити(“Під час виконання файлової операції виявлено помилку: ” + КороткеПоданняПомилки(ІнформаціяПроПомилки));
КінецьПроцедури

По першеслід звернути увагу, що практично всі файлові операції стали асинхронними. Навіть такі прості діїяк отримання каталогу тимчасових файлів. І необхідність одержання такого каталогу призводить до першого асинхронного виклику. Потім відбувається виклик власне видалення всіх файлів. І обробка завершення видалення вимагає другий обробник, у якому повинні розташовуватися дії, які мають відбуватися після видалення всіх файлів у каталозі тимчасових файлів. У даному прикладіце видача повідомлення про завершення операції.
Якщо при виконанні файлових операцій станеться помилка – керування буде передано обробнику ФайловіПомилка(). У ньому можна коректно обробити ситуацію, що склалася.

Робота з файлами у веб-клієнті

Робота з файлами у веб-клієнті має низку особливостей:
1. Без встановлення розширень, у будь-якому веб-браузері, доступні лише методи ОтриматиФайл() та ПочатиПриміщенняФайлу(). Метод ПоміститиФайл() не підтримується при роботі з веб-браузером Google Chrome і в тому випадку, якщо для конфігурації заборонено використання модальних методів (властивість конфігурації Режим використання модальності див. тут).
2. Під час встановлення розширення роботи з файлами у всіх веб-браузерах, окрім Google Chrome, доступи як синхронні, так і асинхронні методи роботи з файлами (синхронність або асинхронність залежить від властивості конфігурації Режим використання модальності),
3. Для веб-браузера Google Chrome є лише асинхронне розширення роботи з файлами. Синхронна робота не підтримується.
4. Розширення роботи з файлами не підтримує роботу за протоколом HTTPS з використанням сертифіката клієнта.
Примітка 1. Для коректної роботи розширення роботи з файлами у веб-браузері Microsoft Internet Explorer рекомендується використання
бібліотеки Microsoft Core XML Services (MSXML) версій 4.0 чи 6.0.
Примітка 2. Розширення роботи з файлами для браузера Microsoft Internet Explorer встановлюється в каталог %APPDATA%\1C\1СEWebExt\FileSystemExtIE

«Використання модальних вікон у даному режимізаборонено» — така помилка зараз починає турбувати користувачів та програмістів 1С із приходом нового інтерфейсу платформи 1С 8.3 — ««.

Розробники технологічної платформи 1С йдуть у ногу з часом, стандартизуючи своє рішення під світові стандарти розробки програмного забезпечення. Всі стандарти так чи інакше зводяться до єдиного інтерфейсу, близького до веб-сторінок.

Модальні та спливаючі (pop-up) вікна вважаються поганим тоном і вже давно перестали бути нормальним під час розробки софту. Користувачі звикли до роботи "в одному вікні".

Особливо часто ми бачимо помилку модальності у наступних методів 1С:

  • питання;
  • Попередження;
  • ВідкритиЗначення.

Розробники платформи 1С 8 з виходом нового інтерфейсу «таксі» прийняли правильне рішення - спробувати перевчити розробників прикладних рішень на новий лад. Вони включили до нову платформуможливість – «режим використання модальності».

Швидке виправлення проблеми

Якщо немає часу розбиратися і потрібно швидко розв'язати задачу, пропонуємо просте, але не зовсім правильне рішення. Для швидкого виправлення помилки достатньо змінити режим модальності у властивостях конфігурації.

Для цього зайдіть у систему в режимі , відкрийте конфігурацію:

У відкритій конфігурації викличте контекстне меню, натиснувши на корінь конфігурації правою кнопкою, вибравши «Властивості»:

Отримайте 267 відеоуроків з 1С безкоштовно:

Відкриються властивості конфігурації, де в підвалі є цікава для нас властивість — «Режим використання модальності», виберіть режим «Використовувати»:

Після цього збережіть та застосовуйте зміни, натиснувши клавішу F7.

Правильне вирішення задачі

Правильний спосіб вирішення цієї проблеми - доопрацювати конфігурацію або зовнішню обробкупід нові вимоги

Попередження, питання, діалогові вікната інші модальні вікна – все це необхідно переписувати на новий лад.

Вбудовані оператори, що викликали модальні вікна, необхідно замінити на дублюючі функції.

Наприклад:

  • Попередження — ПоказатиПопередження;
  • Питання - ПоказатиПитання (докладно - );
  • - ПоказатиВведенняЧисла.

При цьому з'явився спеціалізований об'єкт - Опис Сповіщення.

Приклад заміни:

Рядок = ""; Строк (Рядок, "Введіть строкове значення") Повідомити("Ви ввели" + Рядок) ;

Необхідно замінити на:

Рядок = ""; Опис Оповіщення = Новий ОписОповіді( "ТестовийВведенняРядки", ЕтаФорма) ; ПоказатиВведенняРядки(ОписОповідання, Рядок, "Введіть строкове значення") ;

При цьому додати подібну процедуру на клієнта, яка відпрацює, коли значення буде введено користувачем:

&НаКлієнті Процедура ТестовийВведенняРядки(ОтриманеЗначення, ПереданіПараметри) Експорт Повідомити("Ви ввели " + Рядок) ; КінецьПроцедури

Форми, які розробляються всередині конфігурації, відкриваються так само. Достатньо замінити метод «ВідкритиФормуМодально» на «ВідкритиФорму», прописавши опис оповіщення та потрібну для нього нову процедуру.

Щоб формою, що відкривається, закрити доступ до форми, що викликається, достатньо у властивості форми вказати у властивості «РежимВідкриттяВікна» значення «Блокувати вікно власника»:

Якщо ви активний користувач програмного продукту 1С, це чудово. Програма дійсно хороша, дозволяє виконувати швидко і максимально якісно множинні завдання. Все б нічого, якщо вона зрідка не шокувала страшними повідомленнями про помилки. Добре, якщо такі помилки зустрічалися раніше особисто вами або тими, хто поряд з вами працює і може наочно на пальцях пояснити, як усунути проблему, а також пояснити, чому вона виникла.

Виправлення проблеми відбувається після зміни налаштувань або коду 1С.

Така інформативність дозволить повернути працездатність програмі 1С, а також надалі уникнути серйозних помилок, що провокують виникнення проблем.

Алгоритм виправлення помилки у 1С

Виникає в 1С і така помилка "Використання синхронних методів на клієнті заборонено". Не слід панікувати і за її виникненні, достатньо зорієнтуватися у послідовності ваших дій, вивчивши цінні рекомендації досвідчених користувачів.

Внесення змін до налаштувань програми

Якщо ви спробували в програмі 1С викликати метод контексту, але замість очікуваних подальших дій, до яких ви вже звикли, раптово вискочило повідомлення про те, що використання синхронних методів на клієнті заборонено, не слід панікувати, спробуємо розібратися в цьому програмному збої.

Спочатку клацніть по рядку «Конфігуратор». Після цього у відкритому контекстному менюперейдіть на останній рядок «Властивості», клацніть по ньому. Тепер відкриється вікно, в якому можна самостійно вносити деякі зміни в налаштування, включаючи коригування та режим роботи програми.

Серед запропонованих режимів знайдіть рядок «Режим використання синхронних викликів розширень та зовнішніх компонентів». Зауважте, яке значення встановлено для цього режиму. Важливо, щоб встановити параметр «Використовувати». Якщо ви бачите щось інше, натисніть у вікні вибору і виберіть цей параметр.

Тепер закрийте всі відкриті вікна та спробуйте виконати всі бажані дії знову. Імовірність того, що у вас все вийде висока.

Зміна коду

На жаль, не завжди вдається виправити помилку "Використання синхронних методів на клієнті заборонено" після внесення змін до налаштувань програми. Іноді доводиться здійснювати відповідальніші заходи. Зокрема, вносити зміни до коду програми. Досвідчені користувачірекомендують скористатися асинхронним методом входу, якщо синхронний раптом став забороненим.

Відкрийте програмний код. Назву процедури (Процедура ВідкритиЛіФайл1()) та її кінець (КінецьПроцедури) залиште без зміни, а саме тіло процедури зміните кардинально.

Прописати доведеться лише три рядки:

Оповіщення = Новий ОписОповіщення («ЗаписатиЛіЩе»,ЦейОб'єкт);
ТекстПитання = «Записати?»;
ПоказатиПитання(Оповідання, ТекстПитання, РежимДіалогаПитання.ДаНет);

Якщо ви абсолютно в цьому нічого не розумієте, не біда, просто скопіюйте та вставте між назвою процедури та її завершальним рядком. Дуже віримо в те, що при виконанні вами таких дій все стане на свої місця і програма знову запрацює, дозволяючи вам виконувати всі дії на професійно високому рівні.