Перейти к содержимому

Как передать значение из одной формы в другую 1с

  • автор:

Передать значение из одной формы в другую в 1С:Предприятии

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

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

Необходимо модально открыть произвольную форму с помощью функции ОткрытьФормуМодально().

Закрытие формы с возвратом значения

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

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

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

Передача данных между управляемыми формами

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

Изображение

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

Реализация

Для демонстрации двух вариантов передачи данных между управляемыми формами реализуем оба варианта в подборе.

Без обращения к серверу

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

Создадим форму списка у справочника «Товары». При этом не назначим ее основной. В реквизиты формы добавим таблицу «ПодобранныеТовары» и разместим соответствующий элемент формы. При этом для полей динамического списка «ЭтоГруппа» и «Ссылка» установим флаг «Использовать всегда». Далее Вы увидите для чего.

Изображение

Теперь нам нужно написать программный код обработки выбора в динамическом списке. Все действия выбора будут сводитсья к добавлению строки в таблицу «Подобранные товары» элементов справочника. Если элемент уже был добавлен в таблицу, то увеличиваем его количество. Программный код обработки выбора (событие «Выбор») списка номенклатуры приведен на следующем листинге:

Форма подбора товаров вызывается из формы документа по команде «Подбор».

Изображение

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

Когда в форме выбора необходимые товары подобраны выполняется команда «ПеренестиВДокументКлиент». Обработчик события очень простой:

После выполнения метода «ОповеститьОВыборе» данные передаются в обработчик «ОбработкаВыбора» элемента формы документа «Товары», и далее обрабатывается:

В результате таблица товаров документа будет заполнена. При использвовании этого варианта передачи данных между формами не было произведено вызовов к серверу. Однако у подобного подхода есть несколько больших минусов:

  1. Большие объемы данных могут передаваться некорректно. По опыту работы с управляемыми формами скажу, что очень часто возникали ошибки типа «Ошибка передачи данных», если размер таблицы был больше мегабайта.
  2. Если передаваемые данные требуют обработки (получение остатков товара, цен и т.д.), то все эти действия необходимо выполнять на серверной стороне. Поэтому было бы правильней в форме подбора поместить их на серверную сторону, а уже на стороне документа обработать и и поместить в объект документа.

С обращением к серверу

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

Теперь алгоритм обработки выбора элемента формы документа «Товары» изменится следующим образом:

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

Вместо выводов

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

По ссылке Вы можете скачать тестовую конфигурацию с примером из статьи.

Как передать значение из одной формы в другую 1с

Как из одной формы открыть другую, передав параметры, и получить обратно результат?

1. ОткрытьМодально, параметр закрытия, метод Закрыть

2. Реквизиты формы (или свойства расширения формы)

Реквизиты формы видимы снаружи как свойства объекта Форма. Их можно создать столько сколько нужно и присвоить им нужный тип.

3. Через ЭлементыФормы (не очень красиво)

5. Экспортные переменные модулей форм

Они становятся видимы снаружи, примерно как реквизиты форм:

6. Экспортные переменные модуля объекта, если он является основным реквизитом формы

Например, есть форма элемента справочника, т.е. ее основной реквизит имеет тип «СправочникОбъект.Номенклатура». Тогда экспортная переменная в модуле объекта расширяет контекст модуля формы и становится видна снаружи.

7. Глобальные переменные (экспортные переменные модуля приложения)

9. СохранитьЗначение, ВосстановитьЗначение

10. Параметры сеанса

Обратите внимание! Попытка прочитать неинициализированный параметр сеанса приводит к ошибке! Поэтому нужно инициализировать все параметры сеанса раньше, например, еще в процедуре ПриНачалеРаботыСистемы.

11. Объекты базы данных (справочники, константы, регистры сведений и т.д.)

Передача данных между обычными формами 1С

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

Метод Оповестить() второго способа

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

  • Передавать сообщение всем созданным и открытым формам («широковещательное» оповещение) с подключенным событием ОбработкаОповещения
  • Передавать данные условно произвольного типа
  • Позволяет идентифицировать получателя и источника, но не ограничивает по ним
  • Работает и в формах управляемого приложения

Обмен через объекты-посредники:

  • Требует наличия объекта, доступа к нему
  • Не вызывает события изменения как и в первом случае
  • Требует периодического считывания данных для проверки
  • Позволяет передавать известные заранее типы значений

Используется, например, при организации чатов, оповещениях пользователей об обновлениях

Остальные методы:

ОповеститьОбАктивизации, ОповеститьОбАктивизацииОбъекта, ОповеститьОбИзменении, ОповеститьОВыборе, ОповеститьОЗаписиНового, ОповеститьОЗаписиНовогоОбъекта являются узкоспециализированными и односторонними (владельцу формы, подчиненным формам)

Реклама — двигатель торговли, но тормоз просмотра фильмов по телевизору.

— Игорь Сиволоб

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

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