1с параметры при повторном открытии
Очень часто при 1С разработке возникает необходимость программным способом открыть форму какого-нибудь существующего объекта. Например, нужно открыть какой-нибудь документ, или какой-нибудь справочник.
Для того чтобы открыть управляемую форму какого-то уже существующего объекта используется параметр формы Ключ.
О простом открытии формы, и об открытии формы с передачей параметров, читайте в моей статье:
Открыть форму имеющегося объекта с использованием параметра формы Ключ достаточно просто: создаем структуру, у которой будет связка КлючИЗначение с названием ключа «Ключ», а со значением – ссылкой на открываемый объект. И эту структуру в качестве параметра указываем в методе ОткрытьФорму.
Пример кода с открытием формы документа:
Открытие формы элемента справочника аналогично:
Причем, заметьте, непосредственно не на форме справочника, и не на форме документа нет такого параметра как Ключ.
Параметр Ключ является параметром расширения управляемой формы 1С для документа или справочника и существует всегда у формы справочника или документа. Причем этот параметр не заполнен, если мы открыли форму нового документа или справочника, что очень отлично может помочь, когда нужно проверить создаем мы новый документ или редактируем имеющийся.
Например, вот как можно проверить в обработчике формы ПриОткрытии, открываем форму существующего документа или нового.
Подробно вопросы работы с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Итак, что же такое параметр?
Параметр – это значение, передаваемое в форму при открытии. Параметр может иметь любой тип и принимать любое значение.
Зачем нужен параметр?
Параметр нужен для передачи в форму дополнительных значений. Например: откуда открыта форма.
Как передать параметр?
Параметр передается в форму при открытии. Например:
Как получить параметр в открывшейся форме?
Получить параметр, переданный в форму, мы можем таким образом:
Как передать несколько значений?
Поскольку параметр может принимать любое значение, он может принимать значение типа Список. Пример
Пример обработки его в открывшейся форме:
Что такое контекст формы?
Контекст – это идентификатор формы, что-то вроде ее имени. Он используется для того, чтобы точно указать программе, к какой форме вы обращаетесь. То есть с помощью контекста можно обращаться к одной форме из другой.
Как работать с контекстом?
Все довольно просто. Для того, чтобы с контекстом работать, его надо сначала передать.
Передается он с помощью параметра. Например:
Но правильнее будет воспользоваться такой процедурой в глобально модуле:
использовать ее нужно так:
Для закрепления полученных знаний приведем практический пример.
Создадим тестовую обработку, и назовем ее Пример. Добави на нее кнопку Закрыть для закрытия формы. Теперь добавим на нее Текстовый реквизит и пропишем ему в поле Формула ТР. Также в модуле формы пропишем:
Теперь откроем форму списка справочника Номенклатура и добавим туда кнопку. В формуле кнопки напишем
Запустите 1С, откройте справочник номенклатуры, нажмите кнопку. Откроется форма и там будет наименование выбранной номенклатуры. Мы передали параметр.
Теперь передадим несколько значений. У кнопки поменяем формулу на ОткрытьПример(). Опишем процедуру:
В обработке перепишем:
Пробуем. В зависимости от того, группа или нет, текущий элемент, в обработке пишется полное наименование или обычное.
Теперь поработаем с контекстом. Перепишем процедуру ОткрытьПример:
Изменим и обработку:
В текстовом реквизите на обработке в формулу пропишем Надпись() и приделаем туда еще одну кнопку Обновить у которой в формулу пропишем Форма.Обновить()
Запускаем. При открытии в текстовом реквизите высвечивается текущий элемент справочника, но при его смене надпись не меняется, а меняется она только после нажатия кнопки Обновить. То есть текстовый реквизит на форме не обновляется. Незадача? Давайте решим и ее. Оказывается, при открытии формы можно получить и ее контекст из места открытия. В форме списка справочника объявим переменную ПримерКонт. Перепишем процедуру ОткрытьПример:
Теперь в функции какого-нить текстового реквизита (например ИнформационнаяНадпись()), пропишем такие строки:
У многих начинающих программистов, особенно у тех, кто впервые сталкивается с управляемым приложением в 1С, возникает вопрос: как программным способом открыть управляемую форму. Еще больше вопросов возникает с передачей данных, когда одна форма открывается с другой формы. Многих этот момент ставит в тупик.
В этой статье я разберу оба этих момента.
Открытие управляемой формы
Для тренировки создадим в конфигураторе 1С внешнюю обработку, в которой сделаем две формы. Назовем их: Данные и Расчёт. Причем форма Данные это основная форма обработки, т.е. будет открываться при запуске обработки.
В этой тренировке в форме Данные будем вводить некоторые числовые значения, которые потом используем в форме Расчёт. Сделаем простой пример: решим линейное уравнение тип ax + b = c. Для этого на форме Данные зададим величины a,b и с соответственно, а при открытии формы Расчёт вычислим значение x. Пример больше учебный, нужный для того, чтобы показать, как передавать данные с одной формы на другую. a, b и с – это реквизиты управляемой формы Данные с типом число (10,2). Создадим эти реквизиты и перетащим их на форму.
Следующим шагом создадим команду на форме Данные, при выполнении которой откроется форма Расчёт, где мы увидим решение линейного уравнения. Назовем команду«Решить уравнение» и поместим её на форму в виде простой кнопки.
Открывать управляемые формы следует в клиентском контексте. Причем не важно, какой это будет клиент: тонкий, толстый или веб-клиент.
Подробно о клиентском и серверном контексте управляемой формы читайте в статье:
Поэтому создадим обработчик команды «Решить уравнение» на клиенте.
В процедуре-обработчике этой команды откроем форму Расчёт, для этого необходимо использовать метод глобального контекста ОткрытьФорму.
Синтаксис этого метода имеет много параметров, но обязательным является только один – первый, в котором задается путь к управляемой форме.
При работе с этим методом, можно воспользоваться контекстными подсказками: достаточно написать после открывающей скобки параметров кавычки, и выйдут различные варианты, по которым можно получить нужную форму.
Причем в контекстной подсказке можно выбрать, как конкретную форму, так и какую-то основную форму нужного объекта.
В нашем случае мы выбираем форму Расчет обработки.
Подготовим форму Расчёт – создадим у этой формы реквизит x, который поместим на форму.
А так же установим у формы в свойство Режим открытия окна значение Блокировать окно владельца. Тогда форма Расчёт будет открываться в отдельном окне.
Всё! Если мы сейчас сохраним обработку, запустим её и выполним команду «Решить уравнение» формы Данные, то откроется форма Расчёт. На которой, естественно, ни чего пока ещё не рассчитано.
И первое что нам бросается в глаза, это заголовок в названии управляемой формы. Переименуем. Для этого в палитре свойств формы нужно снять флаг у свойства Автозаголовок и написать какой-то заголовок в свойстве Заголовок.
Параметры управляемой формы
С открытием форм все просто и понятно. Но как передать данные с одной формы на другую? Для этого у управляемой формы 1С есть закладка Параметры. В этой закладке перечисляются данные, которые будут использоваться при создании управляемой формы на сервере.
Создадим у управляемой формы Расчёт параметры a,b,c.
Замечу, что к параметрам можно обращаться только в событии управляемой формы ПриСозданииНаСервере. Это событие возникает тогда, когда форма была создана на сервере, но еще не была передана в клиентский контекст.
Если Вы хотите, чтобы параметр был доступен все время существования формы, то у него необходимо установить свойство Ключевой параметр.
У формы Расчёт создадим событие формы ПриСозданиеНаСервере. Для этого в палитре свойств формы нужно найти это событие и кликнуть на кнопку «Лупа».
Решим в этом событие линейное уравнение. Для того, чтобы обратиться к нужному параметру формы, необходимо использовать коллекцию Параметры. И через точку получать значение интересующего нас параметра.
Посмотрим, как будет работать этот код.
Как видите, в управляемом приложении 1С нет ничего сложного в передачи данных с одной формы на другую. Для этого просто необходимо использовать параметры управляемой формы.
Подробно вопросы работы с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.
- Без сложных технических терминов;
- Более 600 страниц практического материала;
- Каждый пример сопровождается рисунком (скриншот);
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей
2 thoughts on “ Открытие управляемой формы в 1С 8.3 с передачей параметров ”
twilight_dream --> twilight_dreamЕсть отчет.
Он открывается из документа, частично играет роль обработки.
Если форма отчета открыта (пользователь забыл закрыть, этого не избежать), то при открытии его из другого документа должны перезаполниться реквизиты.
Но если форма уже открыта, не могу отловить событие повторного открытия.
Глобальная переменная которая будет хранить значение - открыта форма или нет
twilight_dream --> twilight_dreamНашел таки что дергается. Предопределенная процедура в модуле формы "ПриПовторномОткрытии()"
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
| Текстовая версия | Сейчас: 24.11.21, 9:50 |
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!
Читайте также: