8.х Программно открыть нужную ФормуЭлемента для справочника

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем rockedit, 11 апр 2012.

  1. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Всем здрасте!
    Вопрос в следующем.
    Для справочника у меня создано несколько форм - ФормаЭлемента. И выбор формы зависит от текущего пользователя. Т.е. допустим если у пользователя в списке ролей есть роль - менеджер по продажам то открываем форму1 иначе форму2 и т.д. Как получить список ролей и т.д. вопросов нет. Вопрос - как мне задавать программно какая форма будет использоваться для просмотра(редактирования, добавления) элемента справочника. Т.е. в конфигураторе в свойствах справочника я могу выбрать форму элемента по умолчанию, но мне нужно в ходе работы выбирать, какую форму открыть.
    Заранее всем спасибо!
  2. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а чем метод

    ПолучитьФорму(<Форма>, <Владелец>, <Ключ уникальности>)

    не подходит? Укажите какую именно форму вы хотите в текущий момент открыть и вперед
  3. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Ну а он справится с моей задачей? у меня 2 формы типа - "ФормаЭлемента". я так понимаю, какую форму элемента выбрать из моих определено в метаданных. А мне нужно во время выполнения открывать то одну то другую форму.
  4. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    если в данной конструкции вы имя формы не укажите, то откроется именно та, которая по умолчанию

    З.Ы. их несколько методов

    ПолучитьФормуВыбора, ПолучитьФормуВыборГруппы и т.д. посмотрите поподробнее про каждый метод в С-П думаю найдете подходящий для вас
  5. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Допустим у меня есть две формы с именами "ФормаЭлемента" и "ФормаЭлемента2" , если по умолчанию стоит "ФормаЭлемента2" , как мне вместо нее загрузить форму с именем "ФормаЭлемента"? и в каком месте это нужно сделать?
  6. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    В модуле менеджера есть событие "ОбработкаПолученияФормы". Оно как раз и предназначено для того, чтобы "подменить" открываемую форму.
    В этой теме есть пример кода.
    Правда я не знаю, будет ли это работать в обычном приложении, - не проверял. В управляемом точно работает.
  7. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    У меня модуль менеджера пустой
  8. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Ну создайте событие :) (кнопка там есть для этого - "Процедуры и функции" (или сочетание клавиш Ctrl + Alt +P))
  9. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    создал. поставил точку останова, но при выполнении мы туда не попадаем
  10. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Приложение обычное или управляемое?
  11. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Обычное
  12. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Видимо, это событие только в управляемом приложении работает ((
  13. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Наверное( Смысл у меня тот же. как по ссылке, которую Вы мне прислали. Только в таком же виде не работает( Пробовал в ПолучитьФорму указывать имя нужной формы, но все равно открывается стандартная
  14. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    По той же ссылке... в конце темы....предложен еще один вариант - Перед открытием формы в случае чего закрывать эту форму и открывать другую.
  15. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Вот мой код процедуры перед открытием , можете подсказать как его надо доработать, а то у меня не получилось
    Код:
    // Процедура - обработчик события "ПередОткрытием" формы.
    //
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    
    
    Если ЭтоНовый()
    И ТипЗнч(ПараметрОснование) <> Тип("СправочникСсылка.Организации")
    И УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ИспользоватьПомощникВводаНовыхКонтрагентов") Тогда
    
    ВводНовогоКонтрагента = Обработки.РедактированиеДанныхНезарегистрированныхКонтрагентов.Создать();
    Форма = ВводНовогоКонтрагента.ПолучитьФорму( , ВладелецФормы);
    Форма.ЗаполнитьНачальныеДанные();
    Форма.СписокСправочника = Истина;
    
    Если Родитель <> Неопределено Тогда
    Форма.Родитель = Родитель;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(Наименование) Тогда
    ВводНовогоКонтрагента.Запись.НаименованиеКонтрагента = Наименование;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(НаименованиеПолное) Тогда
    ВводНовогоКонтрагента.Запись.НаименованиеКонтрагентаПолное = НаименованиеПолное;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(ДополнительноеОписание) Тогда
    ВводНовогоКонтрагента.Запись.ДополнительноеОписание = ДополнительноеОписание;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(ИНН) Тогда
    ВводНовогоКонтрагента.Запись.ИНН = ИНН;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(ОсновнойВидДеятельности) Тогда
    ВводНовогоКонтрагента.Запись.ОсновнойВидДеятельностиКонтрагента = ОсновнойВидДеятельности;
    КонецЕсли;
    
    
    ОсновнойСтатусКонтрагента = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойСтатусКонтрагента");
    Покупатель = (ОсновнойСтатусКонтрагента = Перечисления.СтатусыКонтрагентов.Покупатель);
    Поставщик  = (ОсновнойСтатусКонтрагента = Перечисления.СтатусыКонтрагентов.Поставщик);
    
    ВводНовогоКонтрагента.Запись.Покупатель = Покупатель;
    ВводНовогоКонтрагента.Запись.Поставщик  = Поставщик;
    
    Если ЗначениеЗаполнено(ЮрФизЛицо) Тогда
    ВводНовогоКонтрагента.Запись.ЮрФизЛицо = ЮрФизЛицо;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(ОКОПФ) Тогда
    ВводНовогоКонтрагента.Запись.ОКОПФ = ОКОПФ;
    КонецЕсли;
    
    Форма.Открыть();
    Отказ = Истина;
    Возврат;
    
    КонецЕсли;
    
    Если ЗначениеЗаполнено(ПараметрОбъектКопирования) Тогда
    УправлениеКонтактнойИнформацией.ПрочитатьКонтактнуюИнформацию(НаборКонтактнойИнформации, ПараметрОбъектКопирования);
    Иначе
    УправлениеКонтактнойИнформацией.ПрочитатьКонтактнуюИнформацию(НаборКонтактнойИнформации, Ссылка);
    КонецЕсли;
    
    Если ТипЗнч(ПараметрОснование) = Тип("СправочникСсылка.Организации") Тогда
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ВидСвязи"  , Перечисления.ВидыСобственныхКонтрагентов.Организация);
    Запрос.УстановитьПараметр("Основание" , ПараметрОснование);
    
    Запрос.Текст = "
    |ВЫБРАТЬ
    |   Контрагент
    |ИЗ
    |   РегистрСведений.СобственныеКонтрагенты
    |ГДЕ Объект	 = &Основание
    |    И ВидСвязи = &ВидСвязи";
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
    Отказ = Истина;
    Ответ = Вопрос("Для данной организации уже существует контрагент. Открыть форму?",
    РежимДиалогаВопрос.ДаНет);
    Если Ответ = КодВозвратаДиалога.Да Тогда
    Форма = Выборка.Контрагент.ПолучитьФорму("ФормаЭлемента");
    Форма.Открыть();
    КонецЕсли;
    КонецЕсли;
    
    КонецЕсли;
    
    КонтактныеЛицаКонтрагента.Отбор.Владелец.Значение	  = Ссылка;
    КонтактныеЛицаКонтрагента.Отбор.Владелец.Использование = Истина;
    
    
    КонецПроцедуры // ПередОткрытием
    
  16. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    Форма открывается, но данные не заполняются
  17. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    в самом начале процедуры вы открываете стандартную форму, которая по умолчанию, значения соответственно в ней заполняются

    а то что нет значений - это вы отладчиком посмотрите что да как
  18. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Для заполнения формы при открытии существует процедура модуля - ОбработкаЗаполнения().
  19. TopicStarter Overlay
    rockedit
    Offline

    rockedit Опытный в 1С

    Регистрация:
    6 дек 2010
    Сообщения:
    120
    Симпатии:
    0
    Баллы:
    26
    В самом начале открывается форма помощника ввода нового контрагента.
  20. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    не закрываем, а не открываем ;)

    ПередОткрытием() основной формы при выполнении определенного условия Отказ=истина, СтандартнаяОбработка=Ложь. и открываем другую форму.

    у меня так подмена формы для терминала сбора данных работает.

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