показатьвводстроки 1с управляемая форма

Программирование в 1С для всех

Кто программировал в версиях 1С 8.1 и 8.2 помнят различные процедуры, вызывающие модальные окна: Предупреждение, Вопрос и т.п. С появлением платформы 8.3. все немного изменилось, и в полнее возможно, что код, написанный для конфигураций на платформе 1С 8.2, не будет работать на платформе 1С 8.3. При использовании вышеперечисленных процедур вызова модальных окон могут появляться ошибки подобного рода: «Использование модальных окон в данном режиме запрещено!».

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Всему виной свойство конфигурации «Режим использования модальности»

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

У этого свойства может быть три значения:
• Использовать – тогда процедуры типа Предупреждение, Вопрос и тп будут работать;
• Использовать с предупреждениями – процедуры типа Предупреждение, Вопрос и тп будут работать, но будет выходить сообщение;
• Не использовать — процедуры типа Предупреждение, Вопрос и тп работать не будут.

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Поэтому если возникла такая ошибка, то есть два варианта решения проблемы. Первый вариант – топорный, изменить свойство конфигурации «Режим использования модальности». Этот вариант в некоторых случаях может иметь место. Но имейте в виду, что он не применим, если конфигурация планируется запускаться под web-клиентом.

Второй вариант – переписать все имеющиеся процедуры вызова модальных окон на процедуры, использующие немодальные окна. Процедур, которые потребуется заменить в случае перехода с платформы 8.2 на 8.3, довольно таки много, я приведу только некоторые из них:

• Предупреждение – ПоказатьПредупреждение
• Вопрос – ПоказатьВопрос
• ВвестиЧисло – ПоказатьВводЧисла
• ВвестиСтроку- ПоказатьВводСтроки
• ВвестиДату – ПоказатьВводДаты
• ВвестиЗначение — ПоказатьВвводЗначения

Основное отличие всех вышеперечисленных новых процедуры, то, что ввод-вывод информации осуществляется асинхронно. Что это значит? Пока Вы решаете нажать или не нажать кнопку «ОК», как ответить на вопрос, или какое число ввести, идет выполнение кода программы. Для этого в метод необходимо передать название процедуры, которая будет обработчиком ожидания. И сработает, когда вы нажмете кнопку «ОК».

В тоже время не стоит путать асинхронность с параллельностью. Код, который у Вас сработает в процедуре обработчике ожидания, не будет выполняться параллельно основному коду. Он сработает после выполнения этого кода.
Рассмотрим эту особенность более подробно. Для этого я создал простую обработку, в которой будет выполняться следующий код:

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Поясню написанный выше код: мы создали обработчик ожидания с помощью объекта «ОписаниеОповещения», где в качестве первого параметра указали название процедуры, которая должна сработать после нажатия кнопки «ОК» окна предупреждения. В следующей строке мы применили процедуру «ПоказатьПредупреждение», где в качестве первого параметра указали написанный выше обработчик ожидания. Именно после нажатия кнопки «ОК» сработает процедура «ПослеЗакрытияПредупреждения». А в конце мы написали простой цикл.

Обратите внимание на рисунок, цикл сработал до того, как мы нажали на кнопку «ОК» окна предупреждении. Это и есть, по сути, асинхронное выполнение кода.
Теперь попробуем применить вызов предупреждения внутри цикла

И всё равно, выполнение цикла произойдет до того как будет нажата кнопка «ОК». Точно так же будет работать метод, если мы уберем оповещение.

В связи с переходом на немодальные окна потребуется пересмотреть принципы работы диалогов пользователя, где нужно ответить, как вариант, да-нет.
Если в модальных окнах можно было использовать такой код:

То при использовании немодальных окон, код будет следующим:

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

Рассмотрим еще один вариант, если нам нужно что-то сделать в обработчике события в зависимости от той или иной ситуации в цикле. Допустим, мы записываем документы, и нужно задать какой-то вопрос, от которого будет зависеть запись документа (допустим сменить склад). Понятно что таких документов может быть много и их нужно как-то накопить. Для этого можно использовать параметр, который мы передаем в обработчик ожидания (третий параметр конструктора объекта ОписаниеОповещения).

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

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

И при вызове обработчика события, буду рекурсивно прибавлять этот реквизит. Тем самым мы будем знать, для какого по индексу события вызван наш обработчик.

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

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

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Источник

1С 8.3 ВыбратьИзСписка(): Использование модальных окон запрещено

1С 8.3 ВыбратьИзСписка(): Использование модальных окон запрещено

Необходимо использовать функцию ПоказатьВыборИзСписка()

От чего зависит

В свойствах Метаданных конфигурации есть свойство «Режим использование модальности»

При установленном первом или втором режиме возникает подобная ошибка.

Решения:

1. Изменить свойство конфигурации

2. Отказаться от использования таких окон/меню/Предупреждений

3. Переписать на другие функции, например для ошибки из топика использовать функцию ПоказатьВыборИзСписка():

Пример кода:

В новых платформах код сообщения об ошибке может быть вот таким «Использование синхронных методов на клиенте запрещено» (в примере: для диалога Выбор файла)

Полный список проблемных методов

Модальный методНемодальный метод
Глобальный контекст
ВопросПоказатьВопрос
ПредупреждениеПоказатьПредупреждение
ОткрытьЗначениеПоказатьЗначение
ВвестиДатуПоказатьВводДаты
ВвестиЗначениеПоказатьВводЗначения
ВвестиСтрокуПоказатьВводСтроки
ВвестиЧислоПоказатьВводЧисла
УстановитьВнешнююКомпонентуНачатьУстановкуВнешнейКомпоненты
УстановитьРасширениеРаботыСФайламиНачатьУстановкуРасширенияРаботыСФайлами
УстановитьРасширениеРаботыСКриптографиейНачатьУстановкуРасширенияРаботыСКриптографией
ПоместитьФайлНачатьПомещениеФайла
ОткрытьФормуМодальноОткрытьФорму
ДиалогРедактированияСтандартногоПериода
РедактироватьПоказать
КонструкторФорматнойСтроки
ОткрытьМодальноПоказать
ДиалогРасписанияРегламентногоЗадания
ОткрытьМодальноПоказать
ДиалогВыбораШрифта
ВыбратьПоказать
ДиалогВыбораЦвета
ВыбратьПоказать
ОбработкаРасшифровкиКомпоновкиДанных
ВыбратьДействиеПоказатьВыборДействия
СписокЗначений
ОтметитьЭлементыПоказатьОтметкуЭлементов
ВыбратьЭлементПоказатьВыборЭлемента
УправляемаяФорма
ВыбратьИзМенюПоказатьВыборИзМеню
ВыбратьИзСпискаПоказатьВыборИзСписка
ОткрытьМодальноОткрыть

Женщина побеждает как реклама: повторяя одно и то же.

Источник

Расшифровка СКД. Управляемые формы

Платформа 1С предоставляет возможность расшифровки из коробки, но только в том случае, если мы используем объект “Отчет” и его форму. Если мы выводим отчет на форме обработки – нам придется добавить немного кода.

Для начала создадим обработку, форму обработки и создадим реквизиты формы:

На форме сделаем два элемента:

Пойдем от очень простого к простому.

Код кнопки “Обновить” будет таким:

И добавим процедуру:

Это минимум кода, который нам необходим, чтобы вывести отчет.

Тут-то и появляется вопрос “Куда делась расшифровка?”.

Для того, чтобы появилась расшифровка нам надо изменить нашу процедуру ОбновитьОтчетНаСервере:

Теперь мы добавили данные расшифровки в наш отчет.

Но и это еще не все. Если мы сформируем отчет у нас будет расшифровка. но вместо нее мы будем видеть цифры, как на скриншоте

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Эту проблему я встречал достаточно часто на различных форумах. Но и это не проблема.

Достаточно создать событие “ОбработкаРасшифровки” для поля табличного документа со следующим кодом:

И передать данные расшифровки с сервера на клиент. Кстати именно для этого мы сделали два реквизита “АдресРасшифровки” и “АдресХранилищаСКД”.

Для этого опять изменим процедуру ОбновитьОтчетНаСервере и приведем ее вот к такому виду:

Теперь добавим процедуру для обработки вышеуказанного оповещения:

Видим, что мы уже почти все сделали. Отчет работает, выводит меню расшифровки и даже открывает ссылки справочников и документов. Осталось два вопроса:

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

Эти настройки нам нужно получить и вывести отчет уже с новыми настройками.

Конечный результат модуля формы

Для этого приведем процедуру ОбновитьОтчетНаСервере к такому виду:

А процедуру РезультатОбработкаРасшифровки_Продолжение к такому:

Подставляем параметры в отчет СКД

Если выводимый отчет имеет параметры – нам надо об этом тоже позаботиться.

Впрочем ничего сложно тут нет.

Предположим, что нам нужно установить параметр “Период” для отчета.

Перед тем как скомпановать результат нужно добавить одну строку:

Таким образом наша процедура примет следующий вид:

Все что я хотел рассказать и чем поделиться – подробно изложено в этой статье. Если у вас остались вопросы – добро пожаловать в комментарии.

Источник

Программирование в 1С для всех

В этой статье мы познакомимся с основными аспектам работы с управляемой формой в 1С 8.3. Что такое форма и для чего она нужна? Форма это основной объект, посредством которого осуществляется взаимодействие пользователя с программой. То есть с помощью формы пользователь осуществляет ввод информации в программу, а так же на форму выводиться нужная для пользователя информация.

Основная задача разработчика любой формы (управляемой или обычной) это предоставить пользователю удобный механизм взаимодействия с программой.

Платформа 1С имеет возможность сгенерировать любую форму объекта, но обычно при разработке прикладных решений программисты самостоятельно конфигурируют формы.

В конфигураторе 1С разработчик работает с конструктором управляемой формы. Посмотрим, как выглядит управляемая форма в конструкторе

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

У конструктора управляемой формы 7 закладок:

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Рассмотрим основные принципы работы управляемой формы.

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

Для этого рассмотрим классическую трехзвенную архитектуру 1С: Предприятия. У вас есть клиентские компьютеры, где работают все пользователи, есть кластер серверов 1С: Предприятия, где выполняются все вычисления, и есть SQL-база (СУБД), где хранятся все данные.

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Кластер серверов 1С не является чем-то единым целым, а представляет собой несколько запущенных процессов, каждый из которых является сервером 1С. Сервер 1С осуществляет взаимосвязь клиентского приложения с системой управления базы данных (СУБД). Так же север 1С может исполнять определенный код, тогда говорят, что код выполняется «на сервере», а контекст выполнения этого кода – серверный. В случае выполнения кода на сервере все вычисления будут происходить на той машине, где в этот момент запущен соответствующий экземпляр сервера 1С. Как правило, это мощный и производительный компьютер.

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

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

В управляемом приложении все кардинально поменялось. Теперь на стороне клиентского компьютера форма должна только прорисовывается. Связано это с возникновением тонкого и веб-клиента, которые осуществляют взаимодействие с серверной частью по средством сети Internet. Этот канал связи накладывает существенные ограничения на широту передаваемых данных. И если раньше мы могли на форме делать практически всё: обращаться к базе данных, создавать документы, справочники и т.п., то теперь это стало слишком дорогим удовольствием. Поэтому для нормального функционирования тонкого клиента и веб-клиента был существенно переделан механизм работы форм. Форма только прорисовывается на клиенте, а все обработки данных, вычисления и т.п. должны выполняться на сервере.

Что же из себя представляет форма? Форма это программный объект, который создается на сервере согласно настройкам сделанными в конфигураторе (если формы нет в конфигураторе, то она генерируется автоматически платформой), а потом выводится в клиентском приложении. Таким образом, форма одновременно существует и на сервере и на клиенте! А как следствие у формы есть и серверный и клиентский контекст выполнения кода.

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

Директиву компиляции следует указывать перед каждой функцией или процедурой в модуле формы, в общем модуле или в модуле команды. Все директивы компиляции начинаются с символа амперсанд — &. И от них зависит, в каком контексте будет выполняться код в процедуре или функции. Всего их пять:

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

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

&НаСервереБезКонтекста — код процедуры или функции под этой директивой как и в случае с директивой &НаСервере будет выполняться в серверном контексте, т.е. на машине, где запущен сервер 1С. Но в отличие от серверного вызова методов, при внеконтекстном серверном вызове, данные формы не будут передаваться на сервер.

Это три частоприменяемые директивы компиляции.

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

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Подробно вопросы работы с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С

Промо-код на скидку в 15% — 48PVXHeYu

Иногда кажется, что изучить язык программирование в 1С сложно и трудно. В действительности программировать в 1С — легко. Помогут Вам легко и быстро освоить программирование в 1С мои книги: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Изучите программирование в 1С с помощью моей книги «Программировать в 1С за 11 шагов»


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Источник

Отказ от использования модальных окон в платформе 1С:Предприятие 8.3 (бесплатная статья по Программированию в 1С) из цикла статей «Первые шаги в разработке на 1С»

О чем эта статья

В статье будут рассмотрены основные причины отказа от модальности в платформе «1С:Предприятие» и основные методы преобразования участков кода на новую асинхронную модель.

Применимость

В статье рассматриваются асинхронная модель построения бизнес-логики, добавленная платформу «1С:Предприятие» редакции 8.3. Представленная информация актуальна для текущих релизов платформы.

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

При разработке конфигурации на платформе 1С:Предприятие 8 периодически возникает потребность приостановить работу программы до того момента, когда пользователь примет какое-либо решение или выполнит какие-либо действия.

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

Такое поведение может обеспечить, например, следующий код:

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

Также к приостановке выполнения кода и блокировке интерфейса приводит открытие модальных окон при помощи вызова метода ОткрытьМодально().

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

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

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

В таком случае для работы с конфигурациями 1С:Предприятие 8 через браузер необходимо запретить блокирование всплывающих окон.

Проблемы также возникают при работе на мобильных устройствах. Так, например, модальные окна не поддерживаются на iPad.

Для решения указанных проблем следует использовать блокирующие окна вместо модальных. Для пользователя визуально все выглядит так же: окно блокирует интерфейс веб-клиента.

Однако блокирующее окно как бы “рисуется” поверх главного окна, и блокируется только текущая вкладка браузера, в которой открыта конфигурация, позволяя переключаться на другие вкладки, поскольку модальные окна браузера при этом не используются.

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Таким образом, всплывающие окна в браузере не открываются и обеспечивается работа через веб-клиент на мобильных устройствах.

У корневого элемента конфигурации существует свойство “Режим использования модальности”, которое определяет, можно ли в конфигурации открывать модальные окна.

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Если выбран вариант “Использовать”, то модальные окна можно открывать. Если выбран вариант “Не использовать”, то модальные окна недопустимы. При попытке вызвать метод, открывающий модальное окно, система выводит сообщение об ошибке:

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

При таком значении свойства “Режим использования модальности” допустимы только блокирующие окна.

Если выбран вариант “Использовать с предупреждениями”, то при открытии модальных окон в окно сообщений выводится текст:

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

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

Основное отличие блокирующих окон от модальных заключается в том, что открытие блокирующего окна не производит приостановки выполнения кода.

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

Код нужно разделить на две части:

Фрагмент кода, приведенный в начале статьи, нужно переписать следующим образом:

После выполнения процедуры ПоказатьВопрос() система не останавливается, ожидая ответ пользователя, исполнение кода продолжается.

Пользователь сможет сделать выбор только после завершения работы всей процедуры. При этом будет вызвана экспортная процедура ЗаполнитьТоварыВопросЗавершение(). Ее название мы передали в конструктор объекта ОписаниеОповещения.

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

В рассмотренном примере вызываемая процедура расположена в модуле управляемой формы, поэтому мы передали в параметр ЭтотОбъект.

Рассмотрим вызов процедуры, расположенной в общем модуле. Для этого добавим новый общий модуль ОбработкаОповещений, установим для него флаг “Клиент (управляемое приложение)”, а признак “Глобальный” не устанавливаем. Расположим в этом модуле процедуру ЗаполнитьТоварыВопросЗавершение().

Тогда обработчик команды заполнения будет выглядеть так:

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

Для передачи контекста (вспомогательных данных, неких параметров, значений переменных) из процедуры, открывающей модальное окно, в процедуру, вызывающуюся при его закрытии, предусмотрен третий необязательный параметр конструктора объекта ОписаниеОповещения – ДополнительныеПараметры.

Этот объект (любого типа) будет передан в процедуру, описанную в ОписаниеОповещения, последним параметром.

На примере рассмотренного выше участка кода это можно сделать так:

Если нужно передать только одно значение, то структуру можно не использовать, а присвоить это значение параметру ДополнительныеПараметры конструктора объекта ОписаниеОповещения.

Рассмотрим несколько примеров работы с блокирующими окнами.

Задача 1. Открытие другой формы

Из формы документа по нажатию на кнопку “Открыть параметры” нужно открыть форму, на которой расположены два флажка Параметр1 и Параметр2, которые должен установить пользователь. После закрытия формы вывести в строку сообщений значения параметров.

Создаем общую форму “ФормаПараметров”, на которой размещаем реквизиты Параметр1 и Параметр2, а также команду ЗакрытьФорму:

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Обработчик команды выглядит следующим образом:

Для формы свойство РежимОткрытияОкна устанавливаем в “Блокировать весь интерфейс”:

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

На форме документа располагаем команду ОткрытьПараметры, обработчик которой описываем следующим образом:

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

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Для увеличения нажмите на изображение.

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Режим открытия окна можно также указывать в последнем параметре процедуры ОткрытьФорму.

Задача 2. Вопрос при закрытии формы

При закрытии окна обработки задавать пользователю вопрос, действительно ли он хочет закрыть окно.

Эту задачу можно решить при помощи следующего кода, расположенного в модуле формы обработки:

В процедуре ПередЗакрытием формы пользователю задается вопрос, флаг Отказ выставляется в Истина, закрытие формы отменяется.

После утвердительного ответа на вопрос переменная НужноЗакрыватьФорму устанавливается в Истина, форма закрывается повторно.

Задача 3. Ввод числового значения

При нажатии на кнопку на форме обработки открывать стандартный диалог ввода числа.

Для этого необходимо воспользоваться методом ПоказатьВводЧисла() вместо ВвестиЧисло(), который открывает блокирующее окно вместо модального.

После закрытия окна ввода числа будет вызвана процедура, в первый параметр которой будет передано введенное число или значение Неопределено, если пользователь отказался от ввода.

Задача 4. Выбор цвета

При нажатии на кнопку на форме обработки при помощи стандартного диалога выбора цвета пользователь указывает необходимый цвет. Этот цвет установить для фона нажимаемой кнопки.

Добавим на форму команду ВыборЦвета со следующим обработчиком:

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Для объектов ДиалогВыбораЦвета (а также ДиалогРедактированияСтандартногоПериода, КонструкторФорматнойСтроки, ДиалогРасписанияРегламентногоЗадания, ДиалогВыбораШрифта) метод Показать() открывает блокирующее окно.

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

Следует обратить внимание, что объект ДиалогВыбораФайла не имеет метода Показать() в отличие от диалогов выбора цвета или шрифта, поскольку реализация этих диалогов существенно разная.

Для использования диалога выбора файла на веб-клиенте необходимо предварительно подключить расширение работы с файлами.

Диалоги, реализуемые через расширение работы с файлами, не создают таких проблем в работе, как модальные окна браузеров, поэтому не было реализовано открытие блокирующих окон для объекта ДиалогВыбораФайла.

В заключение отметим, что начиная с релиза 8.3.10 в веб-клиенте прекращена поддержка модальных окон. В этом случае, если в конфигурации происходит вызов модального метода, то происходит генерация исключения. Также в в веб-клиенте прекращена поддержка режима интерфейса В отдельных окнах. Кроме того, и в тонком, и в веб-клиенте теперь нельзя открывать форму в отдельном окне (при работе в режиме интерфейса В Закладках). Такие кардинальные шаги позволили отказаться от режима интерфейса, который уже не поддерживается всеми современными браузерами.

Какой практический вывод можно сделать из этой информации? А вывод довольно простой – если по какой-то причине в вашей конфигурации до сих пор существуют модальные вызовы, то в этих местах в в веб-клиенте будет выдаваться окно с сообщением об ошибке. Хочется предостеречь от попыток “нагуглить” какое-то быстрое решение данной проблемы, т.к. основная масса советов сводится к такому рецепту: в конфигураторе на уровне конфигурации в свойстве «Режим использования модальности» поставить значение «Использовать». Естественно, в данный момент, это работать не будет только из-за того, что сами современные браузеры уже не поддерживают модальные вызовы.

И у вас есть всего два пути, каким образом решить описанную выше проблему:

Кстати, начиная с релиза 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с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

PDF-версия статьи для участников группы ВКонтакте

Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Статья в PDF-формате

Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)

Комментарии / обсуждение (54):

Добрый день!
Столкнулся с проблемой (в конфигурации в которой не разрешены синхронные методы работы) – нужно записать файл на локальный диск, в каталог, которого не существует. Не могу найти информацию о том, как это можно / нужно реализовать асинхронно? Т.е. нужно либо создать каталог – до начала выполнения “ПолучитьФайл(Адрес, УникальноеПутьИИмяСохраняемогоФайла, НЕ Интерактивно)”, либо как то “уговорить” метод глобального контекста “ПолучитьФайл()” при записи в несуществующий каталог одновременно и каталог создать… Либо необходимо использовать что то другое… В общем не нашел решения… Не понимаю, как используя асинхронные методы “породить” на локальном диске каталог… Можете помочь советом?

показатьвводстроки 1с управляемая форма. Смотреть фото показатьвводстроки 1с управляемая форма. Смотреть картинку показатьвводстроки 1с управляемая форма. Картинка про показатьвводстроки 1с управляемая форма. Фото показатьвводстроки 1с управляемая форма

Добрый день!
Можно воспользоваться методом глобального контекста НачатьПолучениеФайлов:

&НаКлиенте
Процедура ПолучитьКартинку(Команда)

ОписаниеФайлов = Новый Массив;
ОписаниеФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(«C:\Downloads\Картинки\1.png», АдресКартинки));//такого файла и каталога на диске не существует!

&НаКлиенте
Процедура ПолучитьКартинкуЗавершение(ПолученныеФайлы, ДополнительныеПараметры) Экспорт

Если ПолученныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;

Если ТипЗнч(ПолученныеФайлы) = Тип(«Массив») Тогда

Для каждого ПолученныйФайл Из ПолученныеФайлы Цикл
Сообщить(ПолученныйФайл.Имя);
КонецЦикла;

В переменной АдресКартинки находится адрес во временном хранилище, где размещается файл. Для помещения во временное хранилище можно использовать методы ПоместитьВоВременноеХранилище, НачатьПомещениеФайла.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *