Взаимодействие окон в системе 1С:Предприятие

07.06.21

Разработка - Механизмы платформы 1С

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

Рассмотрим пример кода:

ТаблицаТоваров = ВыбратьТоварыАвтоматически(Склад);

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

Для того, чтобы обойти это ограничение, нужно выполнить функцию асинхронно:

&НаКлиенте
Процедура ВыбратьТовары(Команда)
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораТоваров", ЭтаФорма);
	ВыбратьТоварыАвтоматически(ОписаниеОповещения, Склад);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораТоваров(ТаблицаТоваров) Экспорт
		
КонецПроцедуры

 Приведенный пример будет работать так:

  1. Начать выполнять "Выбрать товары"
    (при этом дальнейшее выполнение кода не блокируется и наша система может работать дальше).
  2. Когда функция "Выбрать товары" завершит свою работу, будет вызвана процедура "ПослеВыбораТоваров"

Функция "ВыбратьТоварыАвтоматически" выполняет какие-то вычисления и возвращает результат.  Но что, если для получения результата необходимы действия пользователя. В этом случае необходимо разработать окно, в котором пользователь сможет "поработать" и вернуть результат.

Ниже приведено сравнение описания функции и окна:

 

 

В обоих случаях соблюдаются правила:

  1. Описываются параметры и результат.
  2. Вызывающая сторона не знает, как устроена функция (окно), которое вызывается.
  3. Функция (окно) не знают, кто их вызывает и как будет использован результат.

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


 

Кратко и понятно, но, к сожалению, работать не будет.

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

Таблица товаров - это таблица значений и она не может существовать на клиенте (тонкий клиент и веб-клиент не поддерживают таблицы значений).

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


 

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

 

 

Вот и все.

 

Итого:

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

окна ВременноеХранилище ДополнительныеПараметры

См. также

Сервисы интеграции без Шины и интеграции

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    2692    dsdred    16    

59

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Перенос данных 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    6219    dsdred    59    

86

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    6103    YA_418728146    25    

68

Планы обмена VS История данных

Перенос данных 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    7166    dsdred    36    

114

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    19280    SeiOkami    46    

119

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12997    human_new    27    

76

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    9598    YA_418728146    6    

143

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6595    sebekerga    54    

95
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 1801 07.06.21 11:44 Сейчас в теме
Функция (окно) не знают, кто их вызывает и как будет использован результат.
Правда только частично. На клиенте есть свойство ВладелецФормы, так что окно знает, кто его вызвал.
2. Gladkov_Anton 332 07.06.21 14:13 Сейчас в теме
(1)
результат


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

Правильным все таки является проектирование взаимодействия при которых известны только параметры и результат.

Есть еще "Оповещения", но работа с ними находятся за пределами этой статьи.
3. ixijixi 1801 07.06.21 14:25 Сейчас в теме
(2)
делать так не следует
С этим согласен, но бывают ситуации, когда без этого не обойтись. Например, создание внешней обработки заполнения объекта. Без обращения к ВладелецФормы.Объект ничего не сделаешь.
Оставьте свое сообщение