Способ передачи данных между групповыми контекстами форм или как забыть про "глРасшифровка" и "глФлагРасшифровки"

09.11.07

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

Используем штатные возможности, - объект "Форма" имеет их в своем арсенале.
С посылкой данных от вызывающего контекста формы открываемому проблем никаких нет, -  используем передаваемый параметр процедуры ОткрытьФорму(). А обратно?

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

Между тем, объект "Форма" имеет в своем составе ту же структуру - список значений, правда, используется он для закладок... Ну ладно, закладки чуть-чуть "подвинем". Их можно использовать как "натурально", так и для хранения других списков значений, создавать как в текущей форме, так и в "чужой":
// вызывающая форма:
ОткрытьФорму("ЧтоОткрываемСмСинтаксис",Контекст);
ПолученныйСписок = Форма.Закладки.ПолучитьЗначение(1);
Если Форма.Закладки.РазмерСписка() = 1 Тогда
     // на форме не было закладок, удаляем их
     Форма.ИспользоватьЗакладки(0);
Иначе
     // были закладки, удаляем только первую
     Форма.Закладки.УдалитьЗначение(1,1);
КонецЕсли;
// Используем ПолученныйСписок!


// Открываемая форма
// ПриОткрытии()
Если ТипЗначенияСтр(Форма.Параметр) = "ГрупповойКонтекст" Тогда
    Если Форма.Параметр.Форма.ИспользоватьЗакладки() = 0 Тогда
        Форма.Параметр.Форма.ИспользоватьЗакладки(1);
    КонецЕсли;
    СписокДляПередачи = СоздатьОбъект("СписокЗначений");
    // заполняем его
    Форма.Параметр.Форма.Закладки.ВставитьЗначение(1,СписокДляПередачи,"",1);
КонецЕсли;
// Сделали "закладку" в независимой от здешних событий вызывающей форме.

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

См. также

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

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

28.11.2021    1831    user707242_Gold_karas    18    

5

Механизмы платформы 1С Программист Платформа 1С v7.7 Абонемент ($m)

Пример построения программного кода для достижения функционала обратных вызовов (call back) во внешних обработках исключительно штатными средствами. Тестировалось на платформе 1с77 релиз 027. Конфигурация значения не имеет.

1 стартмани

06.10.2018    7783    Vortigaunt    5    

11

Механизмы платформы 1С Программист Оперативный учет 7.7 Абонемент ($m)

Когда занимаешься разработкой в среде 1С, редко задумываешься о том, что программным кодом ты работаешь с объектной моделью базы данных, а не с самой базой данных. И что это вообще разные вещи. Ты создаешь объекты: документы и справочники, записываешь их - и в базе данных появляются соответствующие записи. Это настолько привычно, что когда сталкиваешься с нетипичным поведением платформы, первым делом думаешь: надо протестировать базу, она битая. В этой статье я хочу разобрать одну интересную ситуацию, которая как раз демонстрирует такое поведение. Описанная ниже ситуация воспроизводится как в файловом, так и в клиент-серверном (SQL) варианте. Тестировалось на версии платформы 1с77 релиз 027.

1 стартмани

16.05.2018    10458    Vortigaunt    26    

5

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

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    95876    Serginio    116    

188

Механизмы платформы 1С Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

В 1С 8 наличие картинок товаров предусмотрено изначально, а в 7.7 такого нет. Проблема существует и ее исправляют, но это, как правило, частные случаи, касающиеся, например, печати прайса http://infostart.ru/public/289876/ , показу картинок в справочнике номенклатура http://infostart.ru/public/17125/, файловый менеджер картинок товара http://infostart.ru/public/15239/ или просто конфигурации работы с картинками http://infostart.ru/public/21142/ (не стремился дать полный обзор, поэтому не попавшие не обижайтесь :). Что не устроило – информация разбросана по статьям, необходимость дополнительно напрягаться, чтобы это заработало. Здесь я попытался собрать все «до кучи», а так же дать необходимые ссылки для желающих «копнуть вглубь».

1 стартмани

18.11.2014    44809    95    kitminsk    18    

20

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

Если вы используете в работе 1С:Предприятие 8.х, то наверняка знакомы и с замечательной системной процедурой, как ЗаполнитьЗначенияСвойств(). Ее использование помогает значительно упростить написание программного кода в ряде случае, делает его (код) более наглядным и простым. Но что же делать тем, кто до сих пор использует (постоянно или иногда) 1С:Предприятие 7.7?

24.07.2014    24219    tomvlad    5    

14

Механизмы платформы 1С Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

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

02.07.2012    18942    maxpiter    62    

15
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ssp_ 155 09.11.07 10:23 Сейчас в теме
Согласен, что использование глобальных переменных оправдано далеко не всегда.
Но почему именно закладки? Можно же в вызывающем модуле создать список значений и передать его в качестве параметра.
2. Shaman100M 1151 09.11.07 10:42 Сейчас в теме
(1) Туда - да. А обратно?
Код
   Список1   = СоздатьОбъект("СписокЗначений");
   ОткрытьФорму("Обработка.Новый1",Список1);
   Сообщить(ТипЗначенияСтр(Список1)); 
Показать полностью

вернет "ГрупповойКонтекст". Или имелось ввиду что-то другое?
3. tarasenkov 341 09.11.07 19:45 Сейчас в теме
А обратно тоже вернет списко значений или что там передали, если использовать ОткрытьФормуМодально
4. Shaman100M 1151 12.11.07 08:36 Сейчас в теме
(3) Ну, значит, эта статья подойдет для случаев, когда необходим немодальный режим.
5. Shaman100M 1151 12.11.07 08:49 Сейчас в теме
+ (4) И по идее, если передать список контекстов форм, в каждую из них благодаря этому механизму можно что-то передать, а не только вызывающей форме. И даже для модального режима значение передается "до закрытия" модальной формы (правда, как это использовать, непонятно)
6. ssp_ 155 12.11.07 08:50 Сейчас в теме
А если так:
Код
Список1   = СоздатьОбъект("СписокЗначений");
Передать=Список1;
ОткрытьФорму("Обработка.Новый1",Передать);
// теперь Передать=Контекст открытой формы
//            Список1 остался списком
Показать полностью

а главное, что вызванная форма может добавлять значения в Список1 не только в ПриОткрытии(), а в любом другом месте, например в ПриЗакрытии(). И вызвавшая форма все это увидит при желании.
tarasenkov; Shaman100M; +2 Ответить
7. Shaman100M 1151 12.11.07 09:05 Сейчас в теме
работает. Кто ищет, тот всегда найдет. ;)
Оставьте свое сообщение