новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Отключение модальных окон в платформе 1С:Предприятие 8.3

  • Добавить свою публикацию
  • для этого требуется регистрация

В свойствах конфигурации на платформе 1С:Предприятие 8.3 есть Режим использования модальности. Если значение этого поля "Не использовать", то при попытке открыть модальное окно платформа выдаст сообщение "Использование модальных окон в данном режиме запрещено". При этом выполнение программного кода прекращается.

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

Периодически, при разработке программного продукта, возникает потребность спросить пользователя о выполняемых дейтсвиях. К примеру, при автоматическом заполнении табличных частей. Когда перед перезаполнением ТЧ необходимо спросить пользователя о необходимости это сделать. И в зависимости от его ответа ТЧ будет очищена и перезаполнена, или нет.

Часть кода с вопросом может выглядеть примерно так:

 

// Необходимо заполнить ТЧ данными

// Проверка ТЧ на заполненность
Если ТЧ.Количество() <> 0 Тогда
	// ТЧ не пустая, необходимо спросить пользователя о перезаполнении
	Ответ = Вопрос("ТЧ будет перезаполнена. Продолжить?", РежимДиалогаВопрос.ДаНет); // В этой строке произойдет вывод модального окна с вопросом и выполнение кода остановится до ответа пользователя
	
	Если Ответ = КодВозвратаДиалога.Нет Тогда
		// Пользователь отказался от продолжения
		Возврат;
	КонецЕсли;
	
	// Пользователь согласился продолжить
	ТЧ.Очистить();
КонецЕсли;

// Выполнение дальнейших действия
// Сюда программа попадет если ТЧ была пустая или пользователь положительно ответил на вопрос о перезаполнении
ВыполнениеДальнейшихДействий();

 

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

В этой ситуации необходимо пользоваться процедура ПоказатьВопрос. При использовании данной процедуры не ожидается завершение ответа пользователя. Но первым параметром данной процедуры является описание оповещения, с помощью которого отслеживается ответ пользователя.

Как изменится раннее написанный код:

 

// Необходимо заполнить ТЧ данными

// Проверка ТЧ на заполненность
Если ТЧ.Количество() <> 0 Тогда
	// ТЧ не пустая, необходимо спросить пользователя о перезаполнении
	ПоказатьВопрос(Новый ОписаниеОповещения("ПерезаполнениеТЧЗавершение", ЭтотОбъект, ДополнительныеПараметры), "ТЧ будет перезаполнена. Продолжить?", РежимДиалогаВопрос.ДаНет); // В этой строке произойдет вывод окна с вопросом, но выполнение кода не остановится
Иначе
	// Выполнение дальнейших дейтсвий
	// Сюда программа попадет если ТЧ была пустой
	ВыполнитьДальнейшиеДействия();
КонецЕсли;

// Сюда программа попадет в любом случае, была ТЧ пустая или нет
// (если, конечно, не произошло ошибки в предыдущем коде)

...

// Экспортная процедура в том же модуле
// Вызывается после ответа пользователя на вопрос
&НаКлиенте
Процедура ПерезаполнениеТЧЗавершение(РезультатОтвета, ДополниетельныеПараметры) Экспорт
	
	Если РезультатОтвета = КодВозвратаДиалога.Нет Тогда
		// Пользователь отказался от продолжения
		Возврат;
	КонецЕсли;
	
	// Выполнение дальнейших дейтсвий
	// Сюда программа попадет если ТЧ была не пустая и пользователь положительно ответил на вопрос о перезаполнении
	ТЧ.Очистить();
	ВыполнитьДальнейшиеДействия();
	
КонецПроцедуры

 

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


И, соответственно, так как программа не останавливается в ожидании ответа пользователя, то и вызов этих событий приходится разносить в разные части кода.
Поэтому, как правило, все выполняесые методы, которые необходимо выполнить после проверки ТЧ на заполненность, помещают в отдельную процедуру.

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

 
0
≡ к списку статей