Модални прозорци 1c. Какво да направите, ако "използването на модални прозорци в този режим е забранено"

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

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

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

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

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

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

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

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

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

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

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

Резултат:

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

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

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

В нашият курс ““


Моля, оценете тази статия:

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

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

Модалните и изскачащи прозорци, които са признак на лош вкус, отдавна се считат за неприемливи при разработването на софтуер. Необходимостта да се работи „в един прозорец“ е твърдо вкоренена в съзнанието на потребителите.

Разработчиците на платформата 1C се опитаха да включат разработчиците на приложни решения в работа по „нов начин“. С въвеждането на новия интерфейс "такси" те добавиха нова функция към новата платформа - "modality mode".

Бърза поправка

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

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

След това, като щракнете с десния бутон върху корена на конфигурацията, отворете контекстното меню и изберете „Свойства“:


Ориз. 3

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


Ориз. 4

Запазете и приложете промените си, като натиснете клавиша "F7".

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

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

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

&На клиент

StandardProcessing = False;




If Dialog.Edit() Then //Извикване на модалната форма. Изпълнението на кода ще продължи само след затваряне на формата.
Elements.Services.CurrentData.StartDate = Dialog.Period.StartDate;
Elements.Services.CurrentData.EndDate = Dialogue.Period.EndDate;
endIf;

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


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

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

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

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

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

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

&На клиент
Service ProcedureStartDateStartSelection(Element, SelectionData, StandardProcessing)

StandardProcessing = False;

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

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

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

Описание на предупреждение = Ново описание на предупреждение ("Обработка на избор на период", ThisForm);

Dialog.Show(DescriptionAlerts)

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

&На клиент
ProcedurePeriodSelection Обработка (Период, Параметри) Експортиране

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

Elements.Services.CurrentData.StartDate = Период.Начална дата;
Elements.Services.CurrentData.EndDate = Period.EndDate;

endIf;

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


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

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

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

„Използването на модални прозорци в този режим е забранено“ - тази грешка сега започва да притеснява потребителите и програмистите на 1C с пристигането на новия интерфейс на платформата 1C 8.3 - „ “.

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

Модалните и изскачащите прозорци се считат за лоша форма и отдавна са престанали да бъдат нормални при разработването на софтуер. Потребителите са свикнали да работят „в един прозорец“.

Особено често виждаме грешка в модалността в следните 1C методи:

  • въпрос;
  • Внимание;
  • OpenValue.

С пускането на новия интерфейс „такси“ разработчиците на платформата 1C 8 взеха правилното решение - да се опитат да преквалифицират разработчиците на приложни решения по нов начин. Те включиха функция в новата платформа - „режим на модалност“.

Бърза поправка

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

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

В отворена конфигурация извикайте контекстното меню, като щракнете с десния бутон върху корена на конфигурацията и изберете „Свойства“:

Вземете безплатно 267 видео урока за 1C:

Ще се отворят свойствата на конфигурацията, където в долния колонтитул има свойството, което ни интересува - „Режим на използване на модалност“, изберете режим „Използване“:

След това запазете и приложете промените, като натиснете клавиша "F7".

Правилно решение на проблема

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

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

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

Например:

  • Предупреждение - ShowWarning;
  • Въпрос - ShowQuestion (подробности - );
  • — Показване на входни числа.

В същото време се появи специализиран обект - Описание на известието.

Пример за замяна:

Низ = ""; Въведете низ (низ, „Въведете стойност на низ“) Notify("Вие въведохте " + String) ;

Трябва да се замени с:

Низ = ""; DescriptionAlerts = Нови описания Alerts( "TestLineInput", Тази форма) ; ShowLineInput(DescriptionAlerts, String, „Въведете стойност на низ“) ;

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

&На процедурата на клиента TestInputString(ReceivedValue, PassedParameters) Export Notify("Вие въведохте " + String) ; Край на процедурата

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

За да блокирате достъпа до извиканата форма чрез отваряне на формуляр, просто посочете стойността „Блокиране на прозореца на собственика“ в свойството „Режим на отваряне на прозорец“ на формуляра:

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

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

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

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

Превъртете до дъното и намерете там елемента „Режим на модалност“:

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

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

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

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

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

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

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

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

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



Свързани публикации