Попередження без режиму модальності. Чому виникає помилка "Використання модальних вікон у цьому режимі заборонено"? Інструкція з виправлення помилки для звичайних користувачів

У статті будуть розглянуті основні причини відмови від модальності у платформі «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С. Ми, за традицією, рекомендуємо звернути вашу увагу на наші курси з програмування

14
Для примусового запуску підприємства у Звичайному або Керованому додатку використовуються такі ключі: /RunModeOrdinaryApplication запуск товстого клієнта у звичайному режимі, незважаючи на налаштування конфігурації та... 3
Потрібно, щоб користувачі не могли змінювати налаштований для них інтерфейс! Рішення: Для відключення потрібно в правах доступу у кореневого конфігураційного елемента прибрати право "Збереження даних користувача". ... 2
У поточній роботі користувач зазвичай відкриває декілька об'єктів. Це може бути документ, довідник, звіт тощо. У попередньому інтерфейсі не було проблем швидко знайти відкритий об'єкт і актуалізувати його для... 2
У минулій статті: Встановлення адресного класифікатора (KLADR) в 1С я розповів Вам, що таке Кладр і як його завантажити в 1С звичайні форми (8.0-8.2). У цій статті я розповім як завантажити Адресний класифікатор (KLADR) у... 2
Часто розробляючи певну конфігурацію, користувачі хочуть прикріплювати до елемента довідника фото і щоб зберігалися у базі даних. У цій статті я розповім як до довідника об'єкти будівництва підключити...

У Синтаксис-Помічнику для цих команд зазначено, що у випадку, якщо для конфігурації властивість РежимВикористання Модальностівстановлено в Не використовувати, слід використовувати в програмному коді інші команди, такі як ПоказатиПитання(), ПоказатиПопередження(), ПоказатиВведенняЧисла():

Для роботи з цими ситуаціями у програмі 1С 8.3 передбачено новий системний об'єкт «Опис Оповіщення», який використовується для опису виклику процедури програмного модуля при настанні будь-якої очікуваної події, як-от закриття форми або немодального діалогу:

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

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

Крок 1. Завершити роботу:

Крок 2. Повертаємось у стартове меню для запуску конфігурації. Вибираємо пункт меню «Конфігурація»:

Крок 3. Відкриваємо «Конфігуратор»: на верхній панелі знаходимо кнопку «Конфігурація», та у запропонованому списку вибираємо меню «Відкрити конфігурацію»:

Крок 4. Встановлюємо курсор на Конфігурацію і правою кнопкою мишки викликаємо контекстне меню, в якому вибираємо пункт «Властивості»:

Крок 5. Відкриваємо форму «Властивості»:

Крок 6. Знаходимо рядок "Режим використання модальності" (внизу списку):

За умовчанням у програмі 1С 8.3 стоїть значення "Не використовувати". Перекладаємо значення «Не використовувати» у значення «Використовувати»:

Результат:

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

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

Як працювати в інтерфейсі "Таксі", як зробити налаштування робочого місця "під себе", налаштування панелі навігації Вибране, як здійснювати повнотекстовий пошук, прийоми роботи з журналами, кнопка "вибору" в документах, передача посилань на документи, верифікація та інші можливості новий інтерфейс – все це можна дізнатися з нашого відео:

Більш детально про те, як правильно та швидко організувати навігацію за програмою 1С 8.3, використовуючи новий інтерфейс ТАКСІ, про нові можливості у використанні звичних інструментів, таких як вбудований калькулятор, календар, порівняння файлів, передача посилань на документи колегам розглянуто на нашому курсі ““


Поставте вашу оцінку цій статті:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Наприклад:

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

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

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

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

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

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

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

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

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

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

У властивостях конфігурації на платформі 1С:Підприємство 8.3 є режим використання модальності. Якщо значення цього поля "Не використовувати", при спробі відкрити модальне вікно платформа видасть повідомлення "Використання модальних вікон у цьому режимі заборонено". При цьому виконання програмного коду припиняється.

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

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

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

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

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

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

Як зміниться раніше написаний код:

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

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

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

Подібний механізм використовується при подібних функціях взаємодії з користувачем (ВибірЗначення, ВибратиСписку і т.п.)

mob_info