Дозволити модальні вікна в 1с. Що робити, якщо "використання модальних вікон у цьому режимі заборонено"

У статті будуть розглянуті основні причини відмови від модальності у платформі «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С:Підприємство 8.3 є режим використання модальності. Якщо значення цього поля "Не використовувати", то при спробі відкрити модальне вікно платформа видасть повідомлення "Використання модальних вікон у даному режимізаборонено". При цьому виконання програмного коду припиняється.

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

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

Частина коду із запитанням може виглядати приблизно так:

Якщо ТЧ. Кількість()< >0 Тоді Відповідь = Питання(" // У цьому рядку відбудеться виведення модального вікна із запитанням і виконання коду зупиниться до відповіді користувачаЯкщо Відповідь = КодПоверненняДіалогу. Ні Тоді Повернення; КінецьЯкщо ;// Користувач погодився продовжити ТЧ. Очистити(); КінецьЯкщо ;// Виконання подальших дій

// Сюди програма потрапить, якщо ТЧ була порожня або користувач позитивно відповів на питання про перезаповнення

Виконання Подальших Дій ();

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

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

ТЧ. Очистити();
Виконати ПодальшіДії() ;
КінецьПроцедури
Таким чином, оскільки програма не зупиниться під час виконання процедури ПоказатиПитання, необхідно обережно обробити всі події

При вирішенні цього завдання виконання подальших дій може статися за двох подій:
1. Якщо ТЧ була порожня

2. Якщо ТЧ була не порожньою та позитивною відповіддю користувача на питання перезаповнення

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

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

Подібний механізм використовується при подібних функціях взаємодії з користувачем (ВибірЗначення, ВибратиСписку і т.п.) Діалогові вікна, до яких ми цілком звикли при роботі з всілякими системами і, зокрема, в 1С, можуть з'являтися при виконанні різноманітних дій, вимагають від користувача введення будь-яких даних, наприклад певного значення, вибору файлу, відповіді на запитання, або просто видають попередження. Вони також називаються модальними.Без відповіді на запит такого вікна продовжувати роботу у програмі неможливо. Вікно блокує інтерфейс, перекриває роботу інших вікон, і при цьому виконання кодів програми теж зупиниться на тому місці, де стався виклик діалогу – програма чекає на завершення дії з ним.

Як усунути помилку в 1С: «Використання модальних вікон у цьому режимі заборонено»

Така помилка почала з'являтися після переходу 1С на новий інтерфейсплатформи 1С 8.3 - "Таксі". Це з тим, що у ній розробниками було включено роботу з вікнами, але не матимуть режиму модальності.

Рис.1

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



Рис.2

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

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



Рис.3

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

Відмова від модальності

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Наприклад:

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

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

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

Рядок = ""; Строк (Рядок,) Повідомити("Ви ввели" + Рядок) ;

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

Рядок = ""; ОписОповіщення = Новий ОписОповідання("ТестовийВведенняРядки" Строк (Рядок,) ;

, Ця форма) ;

ПоказатиВведенняРядки(ОписОповідання, Рядок,

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

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

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

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

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

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

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

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

новою функцією

- "Режим використання модальності".


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

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


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

Мал. 3