8.х Вопрос по форме

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

  1. TopicStarter Overlay
    Berezin
    Offline

    Berezin Опытный в 1С

    Регистрация:
    27 сен 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    С прошедшим всех. Суть проблемы: Необходимо чтобы при нажатии на кнопку открывался справочник номенклатуры и я от туда мог выбрать, не закрывая форму выбора справочника, нужную номенклатуру в табличную часть, часть я сделал:

    Код:
     ФорСп =Справочники.Номенклатура.ПолучитьФормуВыбора();
    ФорСп.Открыть();
    ФорСп.ЗакрыватьПриВыборе = Ложь;
    
    Тут возникли 2 вопроса, как определить действие выбор номенклатуры и как назначить событие на это действие, если бы я сделал просто "поле выбора", - там все понятно, но здесь в ступор впал.

    Вот думаю может через получить, установить действие?
  2. nbIpKuH_BaH9I
    Offline

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    Самое простое сделать подбор. (На мой взгляд). Чтобы по красивее было. То сделаете еще одну произвольную форму. ФормуПодбора. Запросом помещайте в нее необходимые данные. Вот посмотрите процедурки моего подбора.
    Код:
    
    
    Процедура ТППодборГруппВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    //Перем Группа присваивается значение найденной, выбранной строки наименование реквизита 
    //ТЧ_Группы ФормыПодбора
    Группа = ТЧ_Группы.Найти(ВыбраннаяСтрока.Наименование);
    Если Группа = Неопределено Тогда
    НоваяГруппа = ТЧ_Группы.Добавить();
    НоваяГруппа.Группы = ВыбраннаяСтрока.Наименование;
    КонецЕсли;
    
    КонецПроцедуры
    
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |	Группы.Ссылка
    |ИЗ
    |	Справочник.Группы КАК Группы
    |ГДЕ
    |	Группы.ПометкаУдаления = ЛОЖЬ";
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Группа = ТППодборГрупп.Добавить();
    Группа.Наименование = Выборка.Ссылка;
    КонецЦикла;
    
    КонецПроцедуры
    
    
  3. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    смотрите в сп 2 метода: 1ый - ОповеститьОВыборе() (у формы выбора). 2ой ОбработкаВыбора() у той формы из который вызывается форма выбора
    в типовых смотрите кнопку "подбор"
  4. cska-fanat-kz
    Offline

    cska-fanat-kz

    Регистрация:
    8 янв 2011
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    1. ЗакрыватьПриВыборе надо писать ДО Открыть()!

    Код:
     ФорСп =Справочники.Номенклатура.ПолучитьФормуВыбора();
    ФорСп.ЗакрыватьПриВыборе = Ложь;
    ФорСп.Открыть();
    
    
    А еще если быть точным желательно владельца формы задать (см. п.2). Как то так:
    ФорСп =Справочники.Номенклатура.ПолучитьФормуВыбора(,ЭтаФорма);

    2. Если получаешь стандартную форму выбора справочника то в открываемой форме ничего и делать не надо - все автоматом отработает. Останется только обработку выбора обработать, т.е. в табчасть основной формы добавить новую строку и т.д. Как то так:

    Код:
    Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
    
    СтандартнаяОбработка = Ложь;
    
    Если ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница.Имя = "Продукты" Тогда
    ТекТабОбъект = Продукты;
    ТекТабПоле = ЭлементыФормы.Продукты;
    
    ИначеЕсли ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница.Имя = "Напитки" <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда	</span>
    ТекТабОбъект = Напитки;
    ТекТабПоле = ЭлементыФормы.Напитки;
    Иначе
    ТекТабОбъект = ШтучныеТовары;
    ТекТабПоле = ЭлементыФормы.ШтучныеТовары;
    КонецЕсли;
    
    ТекСтрока = ТекТабОбъект.Добавить();
    ТекСтрока.Ассортимент = ЗначениеВыбора;
    
    Кол = 1;
    Если ВвестиЧисло(Кол, "Введите количество") Тогда
    ТекСтрока.Количество = Кол;
    КонецЕсли;
    
    ТекСтрока.Цена = РаботаСЦенами.ПолучитьПриходнуюЦену(Дата, ТекСтрока.Ассортимент) * ТекСтрока.Коэфф;
    ТекСтрока.Сумма = ТекСтрока.Количество * ТекСтрока.Цена;
    
    ТекТабПоле.ТекущаяСтрока = ТекСтрока;
    
    КонецПроцедуры
    
    Это приведено обработка события ОбработкаВыбора у формы, потому как именно она была назначена владельцем открываемой формы (см. п.1). Владельцем можно назначать конкретную табличную часть или отдельное поле ввода. Тогда ОбработкаВыбора пишется у конкретного элемента.
  5. cska-fanat-kz
    Offline

    cska-fanat-kz

    Регистрация:
    8 янв 2011
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Еще момент на тему выбора.

    Стандартная обработка выбора работает только на формах, у которых основным реквизитом значится СправочникСписок.<ИмяСправочника>. Если создать ПРОИЗВОЛЬНУЮ форму то такого реквизита не будет и выбор придется организовывать самому с помощью метода ОповеститьОВыборе(<ЗначениеВыбора>).
  6. Nikoloz
    Offline

    Nikoloz Опытный в 1С

    Регистрация:
    19 июн 2012
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    А как мне вытащить из Партии товаров компании Сумму?

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