1с получить форму интерактивные операции недоступны

Обновлено: 08.07.2024

Открытие форм

Область применения: управляемое приложение, мобильное приложение.

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

Рекомендация обусловлена соображениями

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

Кроме того, применение глобального метода ОткрытьФорму гарантирует выполнение инициализации формы на сервере в обработчике ПриСозданииНаСервере . Этот подход помогает сосредоточить весь код инициализации формы в одном месте и исключает "случайное" обращение к серверу, связанное с инициализацией формы, между строками кода

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

Параметры формы из этого набора могут быть указаны в вызывающем коде при открытии формы ( ОткрытьФорму ).

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

следует по той же причине использовать параметры формы:

ОткрытьФорму("ОбщаяФорма.ПутеводительПоСистеме", Новый Структура("РежимОткрытия", "Приветствие"));

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

ФормаВопроса = ПолучитьФорму("ОбщаяФорма.ФормаВопроса");
ФормаВопроса.ОткрытьМодально();
Если ФормаВопроса.БольшеНеПоказыватьНапоминание Тогда
// …

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

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

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

Если БольшеНеПоказыватьНапоминание = Неопределено Тогда
Возврат;
КонецЕсли;

Если БольшеНеПоказыватьНапоминание Тогда
// …

При этом возвращаемое значение формы формируется в коде модуля формы с помощью метода формы Закрыть .

5. Другие ограничения:

  • Обработчик события формы ПриОткрытии не должен содержать код по открытию какой-либо другой формы, так как это может привести к нарушению порядка отображения окон. В этом случае рекомендуется использовать обработчик ожидания на короткий интервал или открывать другие формы интерактивно, например, по нажатию на кнопку.
  • Не рекомендуется выполнять программное открытие и закрытие формы в одном обработчике. Такие действия должны быть разнесены по времени. Например, закрытие формы можно выполнять в обработчике ожидания.
  • При использовании в конфигурации Библиотека стандартных подсистем и разработке форм (рабочих мест), предназначенных только для внешних пользователей, следует явно блокировать открытие таких форм в сеансах "обычных" пользователей. Для этого следует устанавливать параметр Отказ при создании формы на сервере с помощью функции ЭтоСеансВнешнегоПользователя общего модуля Пользователи или ПользователиКлиент :

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Не ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;

КонецПроцедуры

6. Следующие виды форм должны быть всегда доступны пользователю в режиме 1С:Предприятия из меню "Все функции" вне зависимости от того, размещены ли соответствующие объекты в командном интерфейсе приложения или нет:

Получить объект на тонком клиенте
Как правильно получить объект на тонком клиенте? &НаСервере Функция ПолучитьДок(Ссылка) .

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


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

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

Владислаучык, что мешает делать это на Клиенте, и кому вы открываете форму на Сервере?? да ещё и модально, посмотрите справку по Функции ПолучитьФорму Phil, На клиенте другая ошибка, пишет переменная не определена(Обработка), да я и смотрел, функция ПолучитьФорму толко на толстом клиенте доступна, так как можно на тонком форму эту открыть?

Phil, Сейчас пишет неизвестное имя формы

ф = получитьформу("Обработка.СортировкаТабличныхЧастей.Форма.Фор маСортировки");

Добавлено через 1 минуту
Хотя почему оно неизвестное, если я все через . получал, и такая форма там есть в той обработке?

Добавлено через 25 секунд
всё из справки

Тоже-самое, неизвестное имя формы
ф = получитьформу("ВнешняяОбработка.СортировкаТабличныхЧастей.Фо рма.ФормаСортировки"); Владислаучык, У вас ВНЕШНЯЯ обработка. Откуда программа знает где ее искать? Попробуйте так:
Добавлено через 10 минут
Или как сказал Phil, но обратите внимание на ключевую подсказку

Но тут один момент, сама форма на обработке обычная, это что-либо меняет?

Добавлено через 7 минут
polax Вот попробовал создать еще одну форму, управляемую, на обработке, ее открыло, так можно ли обычные формы открывать в управляемом?

Решение

В тонком и веб-клиенте получает только управляемую форму.
Обычные формы внешних обработок не поддерживаются.
Если при получении обычной формы в параметре <ИмяФормы> указано не стандартное имя формы, передаваемые параметры не обрабатываются.
В процессе выполнения может быть несколько обращений к серверу. Часть из них кэшируются. Как минимум одно обращение к серверу есть всегда и оно не кэшируется. Кэширование зависит от версии платформы и версии конфигурации в целом. Если установлена низкая скорость соединения и не указывается текущая строка, то кэшируется форма выбора. Очистка кэша осуществляется с периодичностью в 20 мин. Удаляются формы, которые не использовались в этот период времени.

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

Где в 1С 8.2 в тонком клиенте отобразить итог таблицы?
Здравствуйте. Скажите пожалуйста, где в 1С 8.2 в тонком клиенте отобразить итог таблицы?

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

вплотную начал работать с управляемыми формами, дорабатываю свою консоль запросов для управляемых форм (чтобы была как аналогичная для обычных форм), иначе отладка некоторых кусков УТ 11 превращается в адъ.

а консоль имени нуралиева для управляемых чем не подходит?

Поищи Запросник2_0 он там уже реализовано созранение дампа и его чтение

Хех. Автору обработки решать что "правильно", а что нет. Для этого есть "НаСервере", "НаКлиенте" и им подобные :)

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

нет возможности получить запрос из демонического списка. нет возможности открыть запрос из макета компоновки данных.

сохраняется все. иначе как я писал выше, отладка УТ 11 вызывает неприятные ощущения ниже пояса.

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

запросник дамп делает. запрос послдений + параметры + временные таблицы.

а как ты простыню собираешь? ведь звременные таблицы в других запросах выбираются

первый запрос - ВнешниеОбработки.Создать("Консоль запросов для 8.3.epf", Ложь).ОткрытьДляОтладки(Запрос, Ложь); каждый следующий ВнешниеОбработки.Создать("Консоль запросов для 8.3.epf", Ложь).ОткрытьДляОтладки(Запрос, Истина);

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

Добрый день! Пишу разработку на 8.3, хотя думаю такое может выскочить и на 8.2. Итак, как получить форму новой группы справочника? ФормаНовойГруппы = ПолучитьФорму("Справочник.КошелькиИСчета.ФормаГруппы"); Всё было бы прекрасно, если бы платформа не подсовывала мне в форме группы элемент справочника. Тогда был найден другой, работающий вариант: И несмотря на то, что вызов идет на сервере, это работает. Периодически я обнуляю свою базу, создавая с нуля и загружая в неё конфу. И вот сегодня вдруг этот код перестал работать с ошибкой "Интерактивные операции недоступны". однимаю резервную копию, накатываю на неё эту же конфигурацию - работает. Может быть дело в каких-то уж очень глубинных настройках базы-платформы-совместимости? //Кстати, не могу в синтаксис-помощнике найти описание ПолучитьФормуНовойГруппы и ПолучитьФормуНовогоЭлемента. Подозрительно всё это.

прав на интерактивные действия - просмотр, редактирование и т.д. На все, для чего нужна форма.

Да-да, всё дело оказалось в клиенте. Новая база стала запускаться в режиме тонкого клиента и всё работать перестало. В толстом клиенте норм.

Интересно, говорит ли отсутствие в синтаксис-помощнике для управляемого описание метода ПолучитьФормуНовойГруппы о недокументированной возможности? Похоже нужно просто обратить внимание разработчиков 1С на косяк с методом ПолучитьФорму("Справочник.КошелькиИСчета.ФормаГруппы")

Кстати, не подскажите, где та форма, в которой можно написать разработчикам 1С об ошибке?

вообще-то это ваша недоработка. Элементарно не додумались сначала прочитать документацию, а потом уже программировать. Справочники.КошелькиИСчета.ПолучитьФормуНовойГруппы - это для толстого клиента, на тонком на сервере не будет у вас работать.

Насчет недоработки согласен, но пришлось её использовать только от того, что не отработал метод ПолучитьФорму("Справочник.КошелькиИСчета.ФормаГруппы") Форма получается, но записывает она элемент, а не группу. Вот это неправильно. Поэтому пришлось искать альтернативу. Сможете ли создать группу и открыть форму, не записывая её программно другим способом?

Ну и еще вопрос. Чисто гипотетически: могу ли я в конфигурации задать основной режим запуска для конфигурации (толстый, а не тонкий, например). Или вообще запретить тонкий? Есть такая возможность? Что касается своей программы, разумеется буду переделывать в сторону кошерного "ПолучитьФорму", только с группами пока неясно как быть.

Решил я более менее аккуратно всё: А проблему с группой я обошел с помощью маленькой хитрости в форме самой группы. Оцените ;) &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

Не, показалось. Замена не вышла. нужно давать отказ, но в этом случае не закрывается форма группы :(

Похоже всё же ждать исправления. Инетерсно, в 1Сv82 та же проблема?

А так не пробовал. Мы в параметрах можем задать начальные значения реквизитов?

ТС, а как это у тебя сей кусок &НаСервере может работать?

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

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