Компютри Windows интернет

Chrome използването на модални прозорци в този режим е забранено. Какво да направите, ако "използването на модални прозорци в този режим е забранено." Правилно решение на проблема

Синтаксисният помощник за тези команди показва, че ако конфигурационното свойство Начин на използванеинсталиран в Не използвай, тогава трябва да използвате други команди в програмния код, като напр ShowQuestion (), Покажи предупреждение (), ShowEnterNumbers ():

За да работи с тези ситуации, програмата 1C 8.3 предоставя нов системен обект "Описание на сигнала", който се използва за описание на извикване към процедура на програмен модул, когато настъпи очаквано събитие, като например затваряне на формуляр или диалогов прозорец без режим:

Това е поглед върху проблема "отвътре" за тези, които искат да се справят с първопричината. Основно за 1С програмисти. Как в тази ситуация обикновените потребители могат да поправят грешката без уточняване програмен код? Има много прост метод.

Инструкции за коригиране на грешки за обикновени потребители

Стъпка 1. Завършете работата:

Стъпка 2. Върнете се в стартовото меню, за да стартирате конфигурацията. Избираме елемента от менюто "Конфигурация":

Стъпка 3. Отворете "Конфигуратор": в горния панел намираме бутона "Конфигурация" и в предложения списък изберете менюто "Отвори конфигурация":

Стъпка 4. Поставете курсора върху Конфигурацията и щракнете с десния бутон, за да се обадите контекстно меню, в който избираме елемента "Свойства":

Стъпка 5. Отворете формуляра "Свойства":

Стъпка 6. Намерете реда "Режим на използване на модалност" (в долната част на списъка):

По подразбиране програмата 1C 8.3 е настроена на "Да не се използва". Превеждаме стойността "Не използвай" в стойността "Използвай":

Резултат:

Ако грешката "Използването на модални прозорци в този режим е забранено" в 1C 8.3 изчезна, тогава можете да работите по-нататък. Това обикновено се случва.

Но ако грешката в модалността в 1C остане след извършване на всички тези действия, тогава трябва да се свържете с програмистите, които обслужват и поддържат вашата 1C програма.

Как да работите в интерфейса „Такси“, как да персонализирате работното място „за себе си“, да персонализирате лентата за навигация „Предпочитани“, как да извършвате пълнотекстово търсене, техники за работа със списания, бутон „избор“ в документи, прехвърляне на връзки към документи, проверка и други функции в новия интерфейс - можете да научите всичко това от нашето видео:

По-подробно за това как правилно и бързо да организирате навигацията през програмата 1C 8.3 с помощта на новия интерфейс TAXI, за новите възможности за използване на познати инструменти като вграден калкулатор, календар, сравнение на файлове, прехвърляне на връзки към документи към колеги, вижте нашия курс ““


Оценете тази статия:

Ако в процеса на завършване на уроците имате такава грешка, е много лесно да я поправите.

Върнете се в конфигуратора и изберете елемента от менюто "Конфигурация" -> "Отваряне на конфигурация":

В прозореца, който се отваря, щракнете Кликнете с десния бутонв елемента "Конфигурация" и изберете елемента "Свойства" от падащото меню:

Ще се отвори прозорец с конфигурационни свойства (вдясно):

Превъртете до най-долу и намерете там елемента „Режим на използване на модалност“:

Задайте стойността му на "Използвай":

Внимание!Моля, имайте предвид, че ако използвате платформа 1C, която е различна от тази, която изтеглихме в първия урок (по-късна версия), тогава ще имате и полето „Режим на използване на синхронни повиквания ...“. Той също трябва да бъде настроен на „Използване“.

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

Готов! Сега грешката вече няма да се появява.

Обясненията по-долу са за тези, които се интересуват от това, което направихме.

Активирахме режима на използване на модалността в нашата конфигурация. По подразбиране този режим е деактивиран и не ни позволява да използваме такива команди като EnterNumber, EnterString, EnterDate, OpenValue.

Въпросът е, че тези команди са модални. Извикването им води до факта, че пред потребителя се появява прозорец (например за въвеждане на информация), който блокира възможността за работа с програмата, докато прозорецът не бъде затворен.

И тъй като наличието на такива прозорци е изключително нежелателно при работа с 1C през уеб браузър, при разработване на нови конфигурации режимът на модалност е деактивиран по подразбиране.

Спокойно можем да го включим, тъй като пишем образователни примери, които не са предназначени за работа в интернет.

Статията ще разгледа основните причини за изоставяне на модалността в платформата 1C: Enterprise и основните методи за преобразуване на кодови секции в нов асинхронен модел.

Приложимост

Статията разглежда асинхронния модел на изграждане на бизнес логика, добавената платформа "1C: Enterprise" версия 8.3. Предоставената информация е от значение за текущите версии на платформата.

Отказ от използване на модални прозорци в платформата 1C: Enterprise 8.3

При разработване на конфигурация на платформата 1C: Enterprise 8 е необходимо от време на време да преустановява работата на програмата, докато потребителят вземе решение или не извърши каквото и да е действие.

Например, когато щракнете върху бутона за попълване на табличния раздел, потребителят трябва да бъде попитан дали е необходимо да изчистите табличния раздел, за да не бъдат загубени по-рано въведените данни.

Това поведение може да се осигури например от следния код:

& OnClient
Процедура FillProducts(Команда)
Отговор = Въпрос („Секцията на таблицата ще бъде изчистена. Продължете?“, Въпрос в режим на диалог Да Не);
Ако отговор = Диалогов код за връщане. ДаТогава
// алгоритъм за запълване
EndIf;
Край на процедурата

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

Също така, отварянето на модални прозорци чрез извикване на метода OpenModal () води до спиране на изпълнението на код и блокиране на интерфейса.

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

Изскачащите прозорци в интернет често се използват за злонамерено разпространение на нежелани реклами, поради което браузърите включват функции за блокиране на изскачащи прозорци.

В този случай, за да работите с конфигурации на 1C: Enterprise 8 през браузър, е необходимо да деактивирате блокирането на изскачащи прозорци.

Проблеми възникват и при работа мобилни устройства... Например, модалите не се поддържат на iPad.

За да разрешите тези проблеми, трябва да използвате блокиращи прозорци вместо модални. За потребителя визуално всичко изглежда по същия начин: прозорецът блокира интерфейса на уеб клиента.

Въпреки това, блокиращият прозорец се „начертава“ над главния прозорец и само текущият раздел на браузъра, в който е отворена конфигурацията, е блокиран, което ви позволява да превключвате към други раздели, тъй като модалните прозорци на браузъра не се използват в този случай .

По този начин изскачащите прозорци в браузъра не се отварят и работата през уеб клиента на мобилни устройства е осигурена.

Основният конфигурационен елемент има свойство “Modality use mode”, което определя дали модалните прозорци могат да бъдат отворени в конфигурацията.

Ако е избрана опцията "Използване", тогава могат да се отварят модални прозорци. Ако изберете опцията „Не използвай“, тогава модалите са невалидни. Когато се опитвате да извикате метод, който отваря модален прозорец, системата показва съобщение за грешка:

С тази стойност на свойството "Modality use mode" са разрешени само блокиращи прозорци.

Ако е избрана опцията „Използване с предупреждения“, тогава когато се отворят модални прозорци, в прозореца на съобщението се показва следният текст:

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

Основната разлика между блокиращите и модалните прозорци е, че отварянето на блокиращ прозорец не поставя на пауза изпълнението на кода.

Следователно, разработчиците ще трябва да пренапишат кода, който използва модали, като имат предвид тази функция.

Кодът трябва да бъде разделен на две части:

  • отваряне на блокиращ прозорец;
  • обработка на избора на потребител.

Кодовият фрагмент в началото на статията трябва да бъде пренаписан, както следва:

& OnClient
Процедура FillProducts(Команда)
Сигнал = Ново Описание Сигнали(, този обект);

Въпрос в режим на диалог Да Не);
Край на процедурата
& OnClient
Процедура (Резултат, Допълнителни опции) Експорт
Ако резултат = Диалогов код за връщане. ДаТогава
// алгоритъм за запълване
EndIf;
Край на процедурата

След изпълнение на процедурата ShowQuestion (), системата не спира, чака потребителят да отговори, кодът продължава да се изпълнява.

Потребителят ще може да направи избор само след приключване на цялата процедура. Това ще извика процедурата за експортиране FillProductsQuestionCompletion (). Предадохме името му на конструктора на обект Описание на предупреждението.

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

В горния пример извиканата процедура се намира в модул за управлявана форма, така че предадохме thisObject в параметъра.

Помислете за извикване на процедура, разположена в общ модул. За да направите това, добавете нов общ модул ProcessingNotifications, задайте флага „Клиент (управлявано приложение)“ за него и не задавайте флага „Global“. Поставете процедурата FillProductsQuestionCompletion () в този модул.

Тогава манипулаторът на командата за попълване ще изглежда така:

& OnClient
Процедура FillProducts(Команда)
Сигнал = Ново Описание Сигнали("FillProductsQuestionFinishing",
Обработка на известия);
QuestionText = „Секцията на таблицата ще бъде изчистена. Продължете?" ;
Показване на въпрос (сигнал, текст на въпрос, Въпрос в режим на диалог Да Не);
Край на процедурата

След извикване на всеки метод, който отваря блокиращия прозорец, процедурата трябва да завърши, а кодът, изпълняван по-нататък, трябва да се намира в процедурата, която ще бъде извикана след затваряне на прозореца.

За прехвърляне на контекста (спомагателни данни, някои параметри, стойности на променливи) от процедурата, която отваря модалния прозорец, към процедурата, която се извиква, когато е затворена, се предоставя третият незадължителен параметър на конструктора на обект DescriptionNotifications - AdditionalParameters.

Този обект (от всякакъв тип) ще бъде предаден на процедурата, описана в AlertDescription като последен параметър.

Използвайки примера на горната секция с код, това може да се направи по следния начин:

& OnClient
Процедура FillProducts(Команда)
Параметър1 = 0;
Параметър 2 = 0;
Списък с параметри= Нова структура (“Параметър1, Параметър2 ″, Параметър1, Параметър2);
Сигнал = Ново Описание Сигнали("FillProductsQuestionFinishing", този обект,
Списък с параметри);
ShowQuestion (Сигнал, „Секцията на таблицата ще бъде изчистена. Продължаване?“,
Въпрос в режим на диалог Да Не);
Край на процедурата
& OnClient
Процедура FillProductsQuestionFinishing(Резултат, Допълнителни опции) Експорт
Ако резултат = Диалогов код за връщане. ДаТогава
// анализираме AdditionalParameters.Parameter1
// анализираме AdditionalParameters.Parameter2
EndIf;
Край на процедурата

Ако трябва да предадете само една стойност, тогава структурата не може да се използва, а да присвоите тази стойност на параметъра AdditionalParameters на конструктора на обект DescriptionAlerts.

Нека разгледаме някои примери за работа с блокиране на прозорци.

Задача 1. Отваряне на друг формуляр

От формуляра на документа, като щракнете върху бутона „Отваряне на параметри“, трябва да отворите формуляра, в който има две отметки Параметър1 и Параметър2, които трябва да бъдат зададени от потребителя. След като формулярът бъде затворен, изведете стойностите на параметрите в реда за съобщение.

Създайте общ формуляр „Формуляр за параметри“, в който поставяме параметрите Parameter1 и Parameter2, както и командата CloseForm:

Манипулаторът на команди изглежда така:

Манипулаторът на команди изглежда така: & OnClient
Процедура CloseForm (команда)
Списък с параметри= Нова структура ( "Параметър1, Параметър2", Параметър1, Параметър2);
Близо ( Списък с параметри); Край на процедурата

За формуляра задайте свойството WindowOpening Mode на „Заключване на целия интерфейс“:

Във формуляра на документа поставете командата OpenParameters, чийто манипулатор е описан по следния начин:

& OnClient
Процедура OpenParameters(Команда)
Сигнал = Ново Описание Сигнали("OpenParametersCompletion", Този обект);
OpenForm ( "GeneralForm.ParameterForm",,,,,, Уведомление);
Край на процедурата
& OnClient
Процедура OpenParametersCompletion(Резултат, Допълнителни опции) Експорт
Ако TypeZnch (Резултат) = Тип ("Структура") Тогава
За всяка ключова стойност от цикъла на резултата
Съобщение = Ново Съобщение до потребителя;
Message.Text = „Ключ:“ „ "+ KeyValue.Key +" "", стойност = "
+ Ключова стойност. Стойност;
Съобщение.Информ();
Край на цикъла;
EndIf;
Край на процедурата

В потребителски режим, изпълнявайки конфигурацията под уеб клиента, получаваме следните работни резултати:

Кликнете върху изображението, за да го увеличите.

Режимът на отваряне на прозореца може да бъде определен и в последния параметър на процедурата OpenForm.

& OnClient
Процедура OpenParameters(Команда)
Сигнал = Ново Описание Сигнали("OpenParametersCompletion", Този обект);
OpenForm ( "GeneralForm.ParameterForm",,,,,, Тревога,
ModeOpenWindowForms.LockAllInterface
);
Край на процедурата

Задача 2. Въпрос при затваряне на формата

Когато затваряте прозореца за обработка, попитайте потребителя дали наистина иска да затвори прозореца.

Тази задача може да бъде решена с помощта на следния код, намиращ се в модула за обработка:

& OnClient
Промяна NeedCloseForm;
& OnClient
Преди затваряне на процедурата (Отказ от отговорност, Стандартна обработка)
Ако не NeedCloseForm= Вярно Тогава
Отказ = Вярно;
Сигнал = Ново Описание Сигнали(„Преди завършване на затваряне“, Този обект);
ShowQuestion (Предупреждение, „Сигурни ли сте, че искате да затворите прозореца?“,
Въпрос в режим на диалог Да Не
);
EndIf;
Край на процедурата
& OnClient
Процедура Преди CloseCompletion(Резултат, Допълнителни опции) Експорт
Ако резултат = Диалогов код за връщане. ДаТогава
NeedCloseForm= Вярно;
Близо ();
В противен случай
NeedCloseForm= Недефиниран;
EndIf;
Край на процедурата

В процедурата Преди затваряне на формуляра на потребителя се задава въпрос, флагът Refuse е зададен на True и формулярът се затваря.

След утвърдителен отговор на въпроса, променливата MustCloseForm се задава на True, формулярът отново се затваря.

Задача 3. Въвеждане на числова стойност

Когато щракнете върху бутона на формуляра за обработка, отворете стандартния диалогов прозорец за въвеждане на число.

За да направите това, използвайте метода ShowNumberEnter () вместоNumberEnter (), който отваря блокиращ прозорец вместо модален.

& OnClient
Процедура за въвеждане на номера (команда)
Сигнал = Ново Описание Сигнали("EnterNumberCompletion", Този обект);
ShowEnterNumbers(Обявление, 0, „Въведете сумата“, 15, 3);
Край на процедурата
& OnClient
Процедура EnterNumbersCompletion(Резултат, Допълнителни опции) Експорт

Съобщение = Ново Съобщение до потребителя;
Message.Text = “Въведете количеството” + Резултат;
Съобщение.Информ();
EndIf;
Край на процедурата

След затваряне на прозореца за въвеждане на номер ще бъде извикана процедура, чийто първи параметър ще бъде предадено въведения номер или стойността Undefined, ако потребителят откаже да влезе.

Задача 4. Избор на цвят

При щракване върху бутона на формуляра за обработка с помощта на стандартния диалогов прозорец за избор на цвят, потребителят посочва желания цвят. Задайте този цвят на фона на бутона, който натиснете.

Добавете командата SelectColor към формуляра със следния манипулатор:

& OnClient
Процедура за избор на цвят (команда)
DialogueSelectColors= Ново DialogueSelectColors;
Сигнал = Ново Описание Сигнали("SelectColorCompletion", Този обект);
DialogueSelect Colors.Покажи (Уведомление);
Край на процедурата
& OnClient
Процедура ChoiceColorsCompletion(Резултат, Допълнителни опции) Експорт
Ако НЕ Резултат = Недефиниран Тогава
Елементи.Цвят.Цвят на фона= Резултат;
EndIf;
Край на процедурата

За обекти ColorSelectDialogue (както и StandardPeriodEdit Dialogue, FormatString Constructor, RegularJobScheduleDialogue, FontSelection Dialogue) методът Show () отваря блокиращ прозорец.

След затваряне на прозореца ще бъде извикана процедура, на първия параметър на която ще бъде подадена избраната стойност (цвят, шрифт и т.н.) или стойността Undefined, ако потребителят е отменил избора.

Обърнете внимание, че обектът FileSelectDialog няма метод Show (), за разлика от диалоговите прозорци за избор на цвят или шрифт, тъй като изпълнението на тези диалози е значително различно.

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

Диалозите, реализирани чрез разширението на файла, не създават такива проблеми при работа като модални прозорци на браузъри, следователно отварянето на блокиращи прозорци за обекта FileChoiceDialog не беше реализирано.

В заключение отбелязваме, че след версия 8.3.10 поддръжката за модални прозорци е преустановена в уеб клиента. В този случай, ако модален метод бъде извикан в конфигурацията, се хвърля изключение. Също така в уеб клиента поддръжката на интерфейсния режим е прекратена. В отделни прозорци... Освен това вече не е възможно да отворите формуляр в отделен прозорец както в тънкия, така и в уеб клиента (при работа в режим на интерфейса на Bookmarks). Такива драстични стъпки позволиха да се изостави режимът на интерфейса, който вече не се поддържа от всички съвременни браузъри.

Какъв практически извод може да се направи от тази информация? И изводът е съвсем прост - ако по някаква причина във вашата конфигурация все още съществуват модални повиквания, тогава на тези места в уеб клиента ще се покаже прозорец със съобщение за грешка. Бих искал да предупредя срещу опитите за „гугъл“ всяко бързо решение на този проблем, т.к по-голямата част от съветите се свеждат до следната рецепта: в конфигуратора на ниво конфигурация задайте свойството "Modality use mode" на стойността "Use". Естествено, в този момент, няма да работи само защото съвременни браузъривече не поддържа модални повиквания.

И имате само два начина как да разрешите проблема, описан по-горе:

  1. Надстройте платформата до версия 8.3.10+ (8.3.11), задайте свойството на конфигурация „Режим на съвместимост“ на „Не използвай“ и пренапишете фрагменти от код, които използват модални методи, до асинхронен модел за изграждане на бизнес логика
  2. Препоръчайте на клиентите си да използват остарели браузъри, където все още се поддържат модални повиквания ( Mozilla Firefoxверсия 37 и по-долу, Chrome под версия 37 и др.).

Между другото, започвайки с версия 8.3.11, уеб браузърите на Microsoft вече не се поддържат Internet Explorerверсии 8 и 9.

С уеб браузърите в светлината на модалността, разбрахме, сега е време да изясним ситуацията с останалите клиенти.

Започвайки от версия 8.3.5, свойството "Modality usage mode" в тънки и дебели клиенти се взема предвид само ако е посочен параметърът на командния ред / EnableCheckModal. Този параметър автоматично се заменя с командна линиясамо при стартиране на приложението от конфигуратора. Ако този параметър не е посочен, тогава не се генерират изключения и съответните предупреждения не се показват. Тези. на практика, в случай на използване на дебел и тънък клиент, не се наблюдава радикална промяна в работата при използване на режим на модалност - модалните извиквания ще работят по същия начин, както преди, без да дават никакви предупреждения, както в уеб клиента.

За да поставите точки на „i“, обърнете внимание, че започвайки с версия 8.3.9, дебелият клиент игнорира свойството на конфигурацията „Режим на използване на синхронни повиквания към разширения на платформата и външни компоненти“, докато съответните синхронни методи работят без хвърляне на изключения и показване на предупреждения . Посоченото игнорирано свойство беше добавено в ревизия 8.3.5, за да поддържа асинхронна работа с външни компоненти, криптография и разширения за работа с файлове в уеб браузър Google Chrome... Ясно е, че това няма нищо общо с дебелия клиент и следователно „тихото“ игнориране на това свойство просто елиминира ненужните проверки за използването на синхронни методи при използване на конфигурация.

Между другото! Поради факта, че платформата уверено се движи към мрежата, от версия 8.3.8, разработчиците въведоха определени ограничения върху програмния код, който е свързан с логиката на затваряне на формуляр или приложение, изпълнявани в дебели и тънки клиенти. Не забравяйте да прочетете нашата статия, която обхваща подробно този нюанс. Освен това в курса „Професионално развитие на интерфейси и форми в 1C: Enterprise 8.3“ има глава, посветена на отхвърлянето на модалността, и можете да получите много полезна и подходяща информация по тази тема.

Колеги, има две неща, които могат да се четат безкрайно: емисията на VKontakte и списъкът с промените в следващото издание на платформата, така че нека обобщим;)

В процеса на разглеждане на примери, които ви позволяват да преминете от елементите на синхронен модел към асинхронен модел, вероятно вече сте забелязали, че в общия случай има повече код. Колкото повече код, толкова повече се увеличава сложността на по-нататъшната му поддръжка и отстраняване на грешки.

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

Вместо заключение

Така нашият цикъл „Първи стъпки в развитието на 1C“ приключи. Ако сте го прочели изцяло, най-вероятно вече сте забелязали с какви скокове и граници се развива платформата напоследък. Материалът на този цикъл е написан сравнително наскоро, но трябваше сериозно да го актуализираме, т.к дори за толкова кратко време, много нови важни функционалности промени. Такива големи промени могат донякъде да объркат програмиста на 1C, ако той не е израснал и се е развивал професионално с платформата през цялото това време.

В специализирани интернет ресурси често можете да прочетете заявки от начинаещи програмисти и техните по-зрели колеги да ги посъветват относно материали, които биха им помогнали да разберат огромните и понякога привидно безкрайни възможности на платформата 1C. По традиция препоръчваме да обърнете внимание на нашите курсове по програмиране

14
За да се принуди предприятието да стартира в нормално или управлявано приложение, се използват следните клавиши: / RunModeOrdinaryApplication стартира дебелия клиент в нормален режим, въпреки настройките за конфигурация и ... 3
Необходимо е потребителите да не могат да променят конфигурирания за тях интерфейс! Решение: За да го деактивирате, трябва да премахнете правото на „Запазване на потребителски данни“ в правата за достъп на основния конфигурационен елемент. ... 2
В текущата работа потребителят обикновено отваря няколко обекта. Това може да бъде документ, справочник, отчет и др. В предишния интерфейс нямаше проблем бързо да се намери отворен обект и да се актуализира за ... 2
В последната статия: Инсталиране на класификатор на адреси (KLADR) в 1C, ви казах какво представлява Kladr и как да го заредите в 1C обикновени форми (8.0-8.2). В тази статия ще ви покажа как да заредите класификатора на адреси (KLADR) в ... 2
Често, когато разработват определена конфигурация, потребителите искат да прикачат снимки към елемент от директорията и да ги съхраняват в базата данни. В тази статия ще ви кажа как да свържете строителни обекти към справочника ...

В платформата 1C се появи версия 8.3 нов режимработа на програмата - без използване на модалност. По-точно се появиха 2 нови режима: без използване на модалност и използване на модалност, но с предупреждение. И старият режим на работа е обозначен как се използва модалността.

Какво означава всичко това?В ранните версии на платформата използвахме различни модални прозорци и всъщност не мислехме за това. Например, трябва да покажете предупреждение на потребителя, или трябва да зададете въпрос, или да въведете някаква стойност, или да изберете файл. Това са всички модални прозорци.

Какво означава модално?Това означава, че когато този прозорец се извика, той припокрива всички други прозорци, тоест се извежда до самия връх и блокира работата с други прозорци до края на работата с този прозорец. В допълнение към блокирането на прозорци, изпълнението на кода спира точно на мястото, където е извикан този прозорец и продължаването на изпълнението на кода се извършва само след затваряне на такъв прозорец. Откъдето спря екзекуцията. Ще илюстрирам извикването на модалния прозорец с примера за извикване на формата за избор на период:

& OnClient

Стандартна обработка = False;




Ако Dialog.Edit () Тогава // Извикване на модалната форма. Продължаването на изпълнението на кода ще се случи само след затваряне на формата.
Elements.Services.CurrentData.StartDate = Dialog.Period.StartDate;
Elements.Services.CurrentData.EndDate = Dialogue.Period.EndDate;
EndIf;

Край на процедурата


Както виждаме, една процедура е достатъчна за обработка на извикването на модалния прозорец за избор на период.

Защо модалните са лоши?Сега нека да разберем защо 1C реши да се откаже от използването на модални прозорци. Е, на първо място, това е следствие от факта, че платформата 1C може да се използва не само в обичайната си форма - под формата на настолно приложение, но може да се стартира и в браузър и може да се стартира във формата на мобилно приложение.

Проблемът с браузърите е следният. Модалността на прозорците в тях е реализирана с помощта на изскачащи отделни прозорци на браузъра. Те се поддържат от почти всички браузъри, но поради честото използване на такива прозорци за реклама, почти всички разработчици на браузъри се борят с тях и деактивират използването на такива прозорци по подразбиране. В резултат на това, за да осигурите възможността на потребителя на 1c да работи в браузъра, трябва да го принудите да разреши тези прозорци, да се посвети на всички тънкости на 1c и браузърите и като цяло да претоварите с ненужна информация.

Отделен нюанс с браузърите за таблетни компютрии браузъри за телефони. В повечето случаи тези браузъри не поддържат изскачащи прозорци. Интерфейсите (монитори и входни устройства) на такива устройства с изскачащи прозорци не са съвместими.

И накрая мобилно приложение 1C също не е съвсем в приятелски отношения с модалните прозорци.

Оттук и заключението:не използвайте модали. И какво да използваме вместо тях? Вместо това трябва да използвате същите прозорци, но без режима на модалност. В новата платформа 1C също разработи такъв режим за всеки прозорец. Реализира се като отделен метод за всеки диалог. Този режим ви позволява да извикате прозореца, но не и да спрете изпълнението на програмния код. Технически в браузърите това се реализира като псевдопрозорец, който се появява вътре в родителския прозорец, но го припокрива. Фактът, че кодът продължава да се изпълнява след отваряне на прозореца, означава, че не можете да получите стойностите, избрани в него, веднага след кода за извикване на прозореца. Все още не са избрани. Следователно получаването и обработката на тези стойности се извършва в отделна процедура, която се извиква при затваряне на такъв прозорец и тази процедура се посочва при извикване на метода за отваряне на прозореца. Нека разгледаме примера на същия прозорец за избор на период.

& OnClient
Service ProcedureStartDateSelectionStart (Елемент, SelectionData, StandardProcessing)

Стандартна обработка = False;

Диалог = Нов диалог на EditStandardPiod ();
StandardPeriod = Нов стандартен период ();

Дата на начало = Items.Services.CurrentData.StartDate;
Крайна дата = Items.Services.CurrentData.EndDate;

StandardPeriod.StartDate = Начална дата;
StandardPeriod.EndDate = Крайна дата;
Dialogue.Period = Стандартен период;

AlertDescription = Нов AlertDescription ("PeriodSelectionProcessing", ThisForm);

Dialogue.Show (описание на сигнала)

Край на процедурата

& OnClient
Процедура за обработкаИзбор на период (период, параметри) за експортиране

Ако Период<>Недефинирано Тогава

Items.Services.CurrentData.StartDate = Период.Начална дата;
Items.Services.CurrentData.EndDate = Период.Крайна дата;

EndIf;

Край на процедурата


Както виждаме, вместо Edit (), се извиква Show (). А обработката на събитието за подбор вече е в друга процедура.

И така, разбрахме как да направим без модалност. Сега нека разберем за какво е режимът на използване на модалността с предупреждение. Всъщност това е такъв преходен режим. Когато все още не сте имали време да преработите цялата си конфигурация за режим, без да използвате модалност, но вече се стремите към това. И всеки път, когато бъде извикан модален прозорец, програмата ще ви предупреди, че не е желателно да се извикват модални прозорци в този режим.

Е, ние изоставяме модалността и овладяваме нови технологии за работа на 1C в браузъри и мобилни компютри.