8.х Как форме определить откуда она вызвана

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Ivlenov, 27 мар 2008.

  1. TopicStarter Overlay
    Ivlenov
    Offline

    Ivlenov

    Регистрация:
    26 мар 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Условия задачи: имеется форма ВыборТовараНаДоставку. К этой форме приводят два пути - либо через интерфейс продавца, который оформляет доставку при продаже, либо через интерфейс офис-менеджера, который может оформить доставку после продажи. Форма при этом должна себя вести по-разному в зависимости от того, кто ее вызвал. Следовательно в обработчик ПриОткрытии мне необходимо повесить проверку - откуда открыта форма, и после этого выполнить необходимые действия. Посоветуйте, как лучше всего это реализовать? Что проверять, какой синтаксис у такой проверки. Спасибо.
  2. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Ну я бы сделал или так:
    1. В форму добавить реквизит-признак
    2. При вызове формы перед открытием заполнять этот реквизит (из места откуда форма вызывается)
    3. При открытии или Перед открытием анализировать реквизит и делать то, что требуется

    Или второй вариант - посмотреть владельца формы (Форма.Владелец) теоретически там должно быть нужное вам значение.
  3. TopicStarter Overlay
    Ivlenov
    Offline

    Ivlenov

    Регистрация:
    26 мар 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    пытаюсь через владельца формы но что-то не могу уловить как правильно синтаксис описать.
    Форма владелец расположена в Обработки \ РабочееМестоМенеджераПоПродажам \ Формы \ Форма
    и имеет заголовок "Рабочее место продавца консультанта"
    Открываемая форма расположена в Обработки \ ОформлениеКредита \ Формы \ ФормаВыборатовараДляДоставки
    и имеет заголовок Выбор товара на доставку

    В родительской форме пишу:
    ФормаВыбораДоставляемогоТовара = ОформлениеКредита.ПолучитьФорму("ФормаВыборатовараДляДоставки",ЭтаФорма)
    .......
    ФормаВыбораДоставляемогоТовара.ОткрытьМодально();

    В дочерней форме пишу в обработчике ПриОткрытии:
    Если ЭтаФорма.ВладелецФормы = Обработки.РабочееМестоМенеджераПоПродажам Тогда ......(моя обработка)

    так не срабатывает. Как нужно правильно в таком случае?
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Создай экспортную переменную в форме и назначай ей значение перед открытием.
  5. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Или в отладчике посмотри какое значение имеет:
    ЭтаФорма.ВладелецФормы - а там найдешь и строковое представление и все остальное.
  6. TopicStarter Overlay
    Ivlenov
    Offline

    Ivlenov

    Регистрация:
    26 мар 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Выполнил через реквизиты в итоге. Оказалось проще всего )
    Всем спасибо большое за ответы и за мысль про реквизиты.

    Кстати, через реквизиты гораздо более гибкая система получается. Мне не обязательно знать дословно как называется форма, вызвавшая меня, один и тот же обработчик можно будет вешать как реакцию на разных "родителей", лишь бы они передавали именно это значение реквизита.
  7. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Именно поэтому вариант с реквизитом и был у меня первым!
  8. TopicStarter Overlay
    Ivlenov
    Offline

    Ivlenov

    Регистрация:
    26 мар 2008
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Столкнулся с проблемой - реквизит можно назначить только после открытия формы, поэтому обработчик ПриОткрытии не может обрабатывать такое событие. В прошлый раз мне этот метод подошел, так как я обрабатывал событие ПередЗакрытием. Сейчас же мне нужно менять доступность элементов формы при открытии в зависимости от значения реквизита.
  9. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Используй свойство "ВладельцаФормы" Вот пример.
    Код:
    мФормаВводСерийныхНомеров = Обработки.ВводСерийныхНомеров.ПолучитьФорму("ОсновнаяФорма", ЭтаФорма, ЭтаФорма);
    мФормаВводСерийныхНомеров.СтруктураИсходныхПараметров = СтруктураПараметров;
    мФормаВводСерийныхНомеров.Открыть();
    
    И в открытой форме доступен владелец

Поделиться этой страницей