1с блокироватьвесьинтерфейс не работает

Обновлено: 04.07.2024

Массив в тонком клиенте
Добрый день всем. Подскажите каким образом и где объявить массив, чтобы "&НаКлиенте" к нему можно.

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

ОткрытьМодально в тонком клиенте, возможно?
Создал внешнюю обработку, и прицепил ее к документу, и в модуле объекта обработки написал такой.

Развернул IIS, опубликовал 1с, могу на него попасть, вижу окно с логином 1с, захожу, но внутри пустой интерфейс, через тонкий клиент тоже самое.
Я нагуглил по данной проблеме, что дело скорее всего в пустой конфигурации 1с, но, в своей 1с я шаблонов конфигураций не нашел, что бы их подгрузить как то и посмотреть что будет, да и не до конца уверен что дело именно в этом.

Если бы вы сказали, какую именно 1С вы опубликовали, то можно было бы сказать что-то определенное. Например, если была опубликована конфигурация "Бухгалтерия предприятия" редакции 2.0 или "Управление торговлей" редакции 10.3, то у вас и должен быть пустой интерфейс, а так я тоже не уверен, что дело именно в этом. Могу только посоветовать почитать Решение проблемы с пустым интерфейсом при запуске "1С:Предприятие 8"

может из соображений безопасности\надежности\стабильности лучше оставить все через rdp\remoteapp? Какое отношение может иметь RDP к соображениям безопасности?!
Файловая база по RDP - это самый НЕбезопасный вариант из всех возможных. Одно неловкое движение и база тю-тю. Прошу прощения:
1С:Предприятие 8.3 (8.3.18.1208)
Бухгалтерия, редакция 1.2. (1.2.48.1)
Открывается именно так как в ссылке. Эту статью видел, но как решить вопрос так и остается неясным.
Про безопасность пожалуй да, я больше переживал за вредоносные действия со стороны, хотя всеравно резервные копии регулярно делаются

это для какой страны?
если конфигурация на обычных формах, то в веб у нее и не должно быть никакого интерфейса

если конфигурация на обычных формах, то никак

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

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

В плане безопасности понял, если публиковать в веб то либо изолировать базу локально либо впн

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


(1)Не совсем понятно, что такое форма оповещения. Может быть из обработки этого оповещения открывается форма? Может следует использовать БлокироватОкноВладельца? Не совсем понятно, что такое форма оповещения. Может быть из обработки этого оповещения открывается форма? Может следует использовать БлокироватОкноВладельца?

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

(3)Оповещение появляется внизу экрана справа, я так понимаю. Вот по клику на это всплывающее оповещение и надо открывать форму, правильно?

(4) Нет. Типовое оповещение не особо информативно, поэтому есть обработчик ожидания, который запускается ПередНачаломРаботыСистемы.

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

(1) Попробуй передавать в форму нового документа владельцем форму клиентского приложения. По умолчанию предполагаю, владельцем является твоя форма, которая блокирует весь интерфейс. Не совсем понятна фраза "цеплялась к списку открытых документов". Я правильно понял - у вас общая форма, которая ждёт от пользователя действие после выполнения которого должна открыться форма списка документов с определенным отбором?

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

(8) Сначала подумал, раз у меня открывается форма в отдельном окне, то вернуться в основное окно возможности уже нет, но стандартными средствами (Ctrl+Shift+F4) документ из отдельного окна открывается в основном. Значит, все таки, возможность есть. Смотрю на владельца уже открытых форм - везде Неопределено. CrazyFace
Если в качестве владельца передать основное окно, то форма нового документа открывается в отдельном окне.
Если в качестве владельца передать элемент формы, которая открыта в основном окне результат тот же.

(9) посмотрите в сторону режима открытия окна формы нового документа

(10) Перепробовал четыре варианта, но нужного результата не добился.

(11) Сначала пользователю необходимо ввести число - номер заявки. Это реализовано так:


Далее появляется стандартное окно для ввода числа. Пользователь его вводит, нажимает "Ок" и мы переходим к процедуре "СозданиеЗаявки_ПослеВводаЧисла".

Результат одинаковый, за исключением того, что форма нового документа либо блокирует интерфейс, либо нет. Но открывается в отдельном окне. ОО = Новый ОписаниеОповещения("СозданиеЗаявки_ПослеСозданияЗаявки",ЭтаФорма);
ОткрытьФорму("Документ.Заявки.Форма.ФормаДокумента", СтруктураЗаявки. ОО);
Судя по тому, что передается оповещение ПослеСозданияЗаявки, после документа что то происходит?
А если не происходит то можно так попробовать
У меня общая форма, которая открывается в режиме блокировки всего интерфейса.
Далее из этой общей формы по кнопке открывается новый документ, которого в 1С еще нет. По умолчанию он открывается не в окне клиентского приложения, а отдельно и в панель открытых не попадает. Мне же нужно, чтобы форма нового документа открывалась в том же окне (основном) и отображалась в панели открытых.
А сам код открытия/Создания документа какой? может есть смысл перед созданием документа закрыть текущую форму, что то типа
открывай свою форму также, как вводишь число (с описанием оповещения при закрытии)
и при необходимости создания новой заявки возвращай нужные данные для её создания
а далее просто создаешь и открываешь, должно работать

Вместо ПоказатьВводЧисла() нарисовал свою форму, которая служит для ввода числа.

Если эту форму открыть в режиме РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс, тогда следующее окно открывается отдельно.
Если эту форму открыть в режиме РежимОткрытияОкнаФормы.БлокироватьОкноВладельца, тогда следующее окно открывается в основном.

Не исключаю, что это проблема платформы 8.3.15.1534, а может так и задумано.

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

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

Свойство формы 1С режим открытия окна

Если у формы 1С установлен Независимый режим открытия окна, то форма откроется в отдельном окне, как на рисунке ниже.

Независимый режим открытия окна

Здесь и далее приведена конфигурация из книги «Основы разработки в 1С: Такси».

В том случае если установлен режим Блокировать окно владельца или Блокировать весь интерфейс, то форма откроется по верх всех окон.

Форма 1С открыта по верх всех окон

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

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

У этого метода есть последний седьмой параметр, который называется РежимОткрытияОкна, этот параметр имеет тип системное перечисление РежимОткрытияОкнаФормы, которое содержит в себе уже знакомые нам режимы: Независимый, Блокировать окно владельца и Блокировать весь интерфейс.

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

Ниже приведены все три варианта открытия окна формы с использованием параметра РежимОткрытияОкна:

Изучайте управляемые формы 1С с моими статьями:

Открытие управляемой формы существующего объекта

Открытие управляемой формы 1С на основании другого объекта

Открытие обычной формы в управляемом приложении 1С

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


  1. Без сложных технических терминов;
  2. Более 600 страниц практического материала;
  3. Каждый пример сопровождается рисунком (скриншот);
  4. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!

Промо-код на скидку в 16%: vCph8bW3rE


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

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

Отказ от использования модальных окон

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

Развитие продуктов «1С» и платформы «1С:Предприятие»

Одним из основных векторов развития платформы «1С:Предприятие» является возможность ее успешного использования в среде Интернет.

Эта среда имеет ряд ограничений, которые отсутствуют в среде настольных приложений:

  • Ограничения программ, используемых для работы в Интернете (браузеров),
  • Ограничения, связанные с качеством связи между клиентским приложением и сервером.

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

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

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

Проблемы поддержки модальных окон в среде Интернет

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

Такие окна не входят в стандарт веб-разработки, поэтому не поддерживаются всеми браузерами, при помощи которых пользователь получает доступ к приложениям «1С».

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

Такие средства были добавлены в платформу «1С:Предприятие» в версии 8.3.3.

Несколько терминов и определений

Далее в статье будут использоваться следующие термины:

  • Модальное окно – окно, блокирующее весь интерфейс приложения, при этом исполнение кода останавливается до момента получения ответа пользователя. Например, окно модальной формы.
  • Модальный метод – метод глобального контекста или объекта платформы, при выполнении которого происходит открытие модального окна. Например, методы Вопрос() , ОткрытьМодально() .
  • Блокирующее окно – окно, блокирующее весь интерфейс или его часть, но при этом исполнение кода не останавливается. Например, форма, блокирующая владельца.

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

В синхронной модели код, зависящий от выбора пользователя, выполняется последовательно.

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

Таким образом, получается, что такой код разбивается на две процедуры:

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

Новые асинхронные средства платформы для взаимодействия с пользователем

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

Для этого в платформу был добавлен новый тип объектов - ОписаниеОповещения .

Этот объект имеет конструктор со следующими параметрами:

  • ИмяПроцедуры - Указывает имя процедуры-обработчика оповещения, которая будет выполнена после получения ответа пользователя,
  • Модуль -Указывает в каком модуле расположена эта процедура. Этот параметр может иметь следующие типы:
    • УправляемаяФорма - процедура расположена в модуле управляемой формы,
    • ОбщийМодуль - процедура расположена в общем неглобальном клиентском модуле,
    • КомандаКомандногоИнтерфейса - процедура расположена в модуле команды.

    Для получения значения модуля у вышеперечисленных объектов добавлено общее свойство ЭтотОбъект.

    • ДополнительныеПараметры - значение любого типа, которое будет передано в процедуру-обработчик оповещения при ее вызове.

    При вызове указанной процедуры системой ей через параметры передается результат выбора пользователя и значение ДополнительныеПараметры . В некоторых случаях результат выбора может отсутствовать (метод ПоказатьПредупреждение() ) или передаваться несколькими параметрами (метод НачатьПомещениеФайла() ).

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

    Группа этих методов отличается следующим:

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

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

    • Добавлено свойство формы ОписаниеОповещенияОЗакрытии , которое указывает на процедуру модуля, которая будет вызвана при ее закрытии. Также это значение можно установить при помощи нового параметра метода ОткрытьФорму() ,
    • Добавлен вариант режима открытия окна формы - БлокироватьВеcьИнтерфейс , при использовании которого открываемая форма заблокирует все окна, а не только окно родителя.

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

    Особенности реализации асинхронной бизнес-логики

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

    Это подтверждается тем фактом, что все современные веб-приложения построены именно с использованием асинхронной модели и их количество постоянно растет.

    Типовые сценарии при переходе на асинхронную модель

    Вопрос пользователю в команде формы

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

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

    Процедура ДобавитьХарактеристику ( Команда )
    //Выберем вид характеристики
    Оповещение = Новый ОписаниеОповещения (
    "ДобавитьХарактеристикуЗавершение" ,
    ЭтотОбъект ) ;
    ОткрытьФорму ( "ПланВидовХарактеристик.ВидыХарактеристик.ФормаВыбора" ,
    , , , , , Оповещение , РежимОткрытияОкнаФормы . БлокироватьВеcьИнтерфейс ) ;
    КонецПроцедуры

    Процедура ДобавитьХарактеристикуЗавершение ( ВидХарактеристики , Параметры ) Экспорт
    Если ВидХарактеристики = Неопределено Тогда
    Возврат ;
    КонецЕсли ;

    //Проверим наличие
    Если ОписаниеХарактеристик . НайтиСтроки (
    Новый Структура ( "ВидХарактеристики" , ВидХарактеристики ) ) . Количество ( ) > 0 Тогда
    ПоказатьПредупреждение ( , НСтр ( "ru = 'Характеристика уже существует!'" , "ru" ) ) ;
    Возврат ;
    КонецЕсли ;


    //Добавим вид характеристики на форму
    ДобавитьХарактеристикуНаСервере ( ВидХарактеристики ) ;
    КонецПроцедуры

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

    Вопрос пользователю при закрытии формы

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

    В таких случаях доступен следующий алгоритм:

    1. Создать в форме переменную, которая будет хранить ответ пользователя при ее закрытии,
    2. Если ответа получено еще не было (переменная содержит Неопределено ), то в обработчике ПередЗакрытием нужно показать окно выбора пользователю, например, при помощи метода ПоказатьВопрос() и прервать закрытие формы, установив Отказ=Истина ,
    3. В процедуре-обработчике выбора следует установить переменной результат выбора и вызвать метод Закрыть() формы,
    4. Если переменная содержит какое-либо значение, то это значит, что идет процесс закрытия, инициированный на предыдущем шаге, результат выбора от пользователя уже получен и обработчик ПередЗакрытием может использовать его значение.

    Ниже приведен пример кода, реализующего этот алгоритм:

    Вопрос пользователю во вложенных процедурах

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

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

    В асинхронной модели эту функцию и ее вызовы следует реализовывать следующим образом:

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

    Заключение

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

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

    В 1С:Предприятии доступна работа с модальными окнами. Данный режим позволяет блокировать работу с другими окнами пока не будет закрыто модальное окно. Этот механизм необходим когда для продолжения работы обязательно требуется ввести какие либо данные. Для открытия форм в модальном режиме существует специальный метод Форма.ОткрытьМодально() или глобальный метод ОткрытьФормуМодально(). Данные методы доступны в обычном и управляемом приложениях.

    Управление режимом модальности

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

    Проблемы при открытии модальных форм на веб-клиенте

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

    Имитация модальной формы методом ОткрытьФорму()

    Для решения данных проблем в платформе был разработан новый механизм открытия модальных окон. Если в конфигурации стоит запрет на использование модальных окон, то нельзя использовать методы модального открытия окон. Однако, есть возможность сделать окно модальным с помощью метода ОткрытьФорму(). В этом методе появились новые параметры "РежимОткрытияОкна" и "ОписаниеОповещенияОЗакрытии".

    Парметр "РежимОткрытияОкна" - позволяет установить блокировку всех открытых окон 1С:Предприятия, кроме открываемого.
    Параметр "ОписаниеОповещенияОЗакрытии" - позволяет определить процедуру вызываемую при закрытии формы.

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

    Открытие модальной формы по умолчанию


    В управляемых формах, свойство "РежимОткрытияОкна" также доступно в палитре свойств. Это свойство может иметь одно из следующих значений: Независимый, блокировать окно владельца, Блокировать весь интерфейс. Если установить данное свойство, то при открытии формы "РежимОткрытияОкна" устанавливать не нужно.

    Комментарии (0)

    Читайте также: