8.х Как обратиться к открытой форме

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Катерина20, 23 июл 2011.

  1. TopicStarter Overlay
    Катерина20
    Offline

    Катерина20

    Регистрация:
    22 июл 2011
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Есть форма выбора, на ней кнопочка - при нажатии которой модально открывается форма с табличной частью. После выбора строки эта форма должна закрыться, а в ранее открытой форме выбора должен произойти отбор значения.
    Делала вот так, отбор делается, но открывается новая форма выбора:

    ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора("ФормаВыбора");
    ФормаВыбора.ЭлементыФормы.СправочникСписок.Значение.Отбор.Код.Использование = Истина;
    ФормаВыбора.ЭлементыФормы.СправочникСписок.Значение.Отбор.Код.ВидСравнения = ВидСравнения.Равно;
    ФормаВыбора.ЭлементыФормы.СправочникСписок.Значение.Отбор.Код.Значение = ЭлементыФормы.ТПАналоги.ТекущиеДанные.Код;
    ФормаВыбора.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;
    ФормаВыбора.ЭлементыФормы.СправочникСписок.РежимВыбора = Истина;
    ЭтаФорма.Закрыть();


    Пробовала обратиться к уже открытой форме:

    ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора("ФормаВыбора");
    Если ФормаВыбора.Открыта() = Истина Тогда
    ФормаВыбора.Активизировать();
    //код отбора
    ФормаВыбора.ЭлементыФормы.СправочникСписок.Значение.Отбор.Код.Использование = Истина;
    ФормаВыбора.ЭлементыФормы.СправочникСписок.Значение.Отбор.Код.ВидСравнения = ВидСравнения.Равно;
    ФормаВыбора.ЭлементыФормы.СправочникСписок.Значение.Отбор.Код.Значение = ЭлементыФормы.ТПАналоги.ТекущиеДанные.Код;
    ФормаВыбора.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;
    ФормаВыбора.ЭлементыФормы.СправочникСписок.РежимВыбора = Истина;
    ЭтаФорма.Закрыть();
    КонецЕсли;

    В отладчике смотрю значение "ФормаВыбора.Открыта()" показывает Ложь, хотя форма открыта.

    Помогите пожалуйста, заранее спасибо!!!
  2. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    А ТПАналоги - это что? Табличное поле?
    А находится оно где?
  3. TopicStarter Overlay
    Катерина20
    Offline

    Катерина20

    Регистрация:
    22 июл 2011
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    ТПАналоги - это табличное поле, оно находится на форме которая открывается по кнопке.
  4. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Т.е. в этом поле тоже список номенклатуры. И кода Вы тыкаете по строке, Вам надо, чтобы в форме выбора установился отбор по коду той позиции, по которой Вы тыкнули??? Я правильно понимаю задачу?
  5. TopicStarter Overlay
    Катерина20
    Offline

    Катерина20

    Регистрация:
    22 июл 2011
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Табличное поле "Список номенклатуры" находится на форме выбора , а "ТПАналоги" на произвольной форме.
    Вы правильно понимаете "кода тыкаем по строке, надо, чтобы в форме выбора установился отбор по коду той позиции, по которой Вы тыкнули?".
  6. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    В общем, в форме выбора в событии нажатия на кнопку (которая открывает форму) пишите примерно следующее:
    Код:
    Процедура ОткрытьФормуГдеТПАналоги(Кнопка)
    ФормаГдеТПАналоги = Справочники.Номенклатура.ПолучитьФорму("ФормаГдеТПАналоги");
    
    КодВыбраннойСтроки = ФормаГдеТПАналоги.ОткрытьМодально();
    
    СправочникСписок.Отбор.Код.Использование = Истина;
    СправочникСписок.Отбор.Код.ВидСравнения = ВидСравнения.Равно;
    СправочникСписок.Отбор.Код.Значение = КодВыбраннойСтроки;
    ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;
    КонецПроцедуры
    
    
    В той форме, где поле ТПАналоги, надо прописать событие "Выбор" этого табличного поля. Пишем там такой код:
    Код:
    Процедура ТПАналогиВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ЭтаФорма.Закрыть(ВыбраннаяСтрока.Код);
    КонецПроцедуры
    
    
  7. TopicStarter Overlay
    Катерина20
    Offline

    Катерина20

    Регистрация:
    22 июл 2011
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Спасибо Вам огромное- огромное!!! Сейчас попробую...
  8. TopicStarter Overlay
    Катерина20
    Offline

    Катерина20

    Регистрация:
    22 июл 2011
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    В "ТПАналоги" при открытии у меня тоже происходит отбор данных. И вот при выборе нужного товара - сначала отображаются все данные, и лишь повторно выбрав товар из всего списка происходит отбор в форме выбора. Сейчас попробую, может можно как-нибудь это дело исправить.
    Спасибо Вам большое, что откликнулись и помогли!!!

    У меня все получилось. Я просто дурочка два раза форму модально открывала. )))) :angry:
  9. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Небольшое дополнение. Даже два :)
    1) Сейчас, если Вы в поле ТПАналоги не будете ничего выбирать, а просто закроете форму, то у Вас вылетит ошибка.
    В событии нажатия на кнопку в форме выбора после строки:
    Код:
    КодВыбраннойСтроки = ФормаГдеТПАналоги.ОткрытьМодально();
    
    
    
    допишите:
    Код:
    Если ТипЗнч(КодВыбраннойСтроки) <> Тип("Строка") Тогда
    Возврат;
    КонецЕсли;
    
    
    
    2) Я так понял, что у Вас в поле ТПАналоги тоже список номенклатуры.
    И, наверное, этот список - иерархический.
    Т.е. там есть группы (папки) и элементы.
    Так вот сейчас, если Вы тыкните по группе, то у Вас произойдет не открытие этой группы (как было бы, на мой взгляд, логично...или поменьшей мере привычно :)), а установится отбор по коду этой группы в форме выбора.
    Чтобы группы все ж-таки открывались, надо чуть чуть подправить обработчик события "Выбор" поля ТПАналоги.
    Код:
    Процедура ТПАналогиВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    
    Если НЕ ВыбраннаяСтрока.ЭтоГруппа Тогда
    СтандартнаяОбработка = Ложь;
    ЭтаФорма.Закрыть(ВыбраннаяСтрока.Код);
    КонецЕсли; 
    
    КонецПроцедуры
    
    
    
    Как-то так...))
  10. TopicStarter Overlay
    Катерина20
    Offline

    Катерина20

    Регистрация:
    22 июл 2011
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    На форме "ТПАналоги" у меня просто список номенклатуы, не иерархический.
    Действительно если там ничего не выбрано, то вылетает ошибка, но я кое-что исправила, и даже если ничего не выбрано, то форма просто закрывается. Вот что у меня прописано при нажатии на кнопку на форме выбора:

    ФормаПодбора = Справочники.Номенклатура.ПолучитьФорму("ПодобратьАналог");
    КодВыбраннойСтроки = ФормаПодбора.ОткрытьМодально();
    СправочникСписок.Отбор.Код.Использование = Истина;
    СправочникСписок.Отбор.Код.ВидСравнения = ВидСравнения.Равно;
    Если КодВыбраннойСтроки = Неопределено Тогда
    СправочникСписок.Отбор.Код.Использование = Ложь;
    ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина;
    Иначе
    СправочникСписок.Отбор.Код.Значение = КодВыбраннойСтроки;
    ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;
    КонецЕсли;

    :angry: :D :aua: Но всё-равно спасибо Вам большое, а то я уже голову поломала как мне сделать отбор в открытой форме выбора ))))))))
  11. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Не за что:))))))
    Вы всё правильно написали)))))

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