Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 04:19

подскажите как выбрать строку из таблице на форме?

Автор Yamuna, 04 сен 2019, 05:39

0 Пользователей и 1 гость просматривают эту тему.

Yamuna

Добрый день! в управляемом приложении для документа создаю произвольную форму для подбора на форму вывожу таблицу значений , при создании на сервере получаю запросом из регистра сведений данные и загружаю в таблицу. и в таблице могут быть несколько строк мне надо выбрать одну. и дальше как сделать ,чтоб нужная мне строка выбиралась? если сейчас я двойным кликом выбираю по строке то просто открывается элемент на редактирование, а как выбрать строку ?
здесь вызываю форму для подбора:
&НаКлиенте
Процедура НоменклатураНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура("Дата,Контрагент",Объект.Дата,Объект.Контрагент );
ОткрытьФорму("Документ.ИТС_ВходящаяЗаявка.Форма.ФормаВыбораНоменклатуры1",ПараметрыФормы,ЭтаФорма);
КонецПроцедуры

далее в форме для подбора выбираем данные из регистра сведений и загружаю в таблицу на форме подбора :
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               | ФРАН_НоменклатураПокупателейСрезПоследних.Номенклатура КАК Номенклатура,
               | ФРАН_НоменклатураПокупателейСрезПоследних.РегистрационныйНомер КАК РегНомер,
               | ФРАН_НоменклатураПокупателейСрезПоследних.ДатаОперации КАК Дата,
               | ФРАН_НоменклатураПокупателейСрезПоследних.Состояние КАК Состояние,
               | ФРАН_НоменклатураПокупателейСрезПоследних.Номенклатура.Артикул КАК Артикул
               |ИЗ
               | РегистрСведений.ФРАН_НоменклатураПокупателей.СрезПоследних(&Дата, Контрагент = &Контрагент) КАК ФРАН_НоменклатураПокупателейСрезПоследних
               |
               |УПОРЯДОЧИТЬ ПО
               | Дата";

Запрос.УстановитьПараметр("Контрагент", Параметры.Контрагент);
Запрос.УстановитьПараметр("Дата", Параметры.Дата);

Тз = Запрос.Выполнить().Выгрузить();
ТПНоменклатура.Загрузить(ТЗ);

КонецПроцедуры

 

LexaK

Одинарным кликом, а на форме, на элементе ТабПоле есть событие ПриАктивизацииСтроки(...)  вот его и обрабатываетй
пример

&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)

лкДанные = Элементы.Товары.ТекущиеДанные;
    ...
КонецПроцедуры
если помогло нажмите: Спасибо!

bsn-chita

1. В форме документа при открытии формы третьим параметром передавать не ЭтаФорма, а Элемент.
2. В форме подбора у элемента формы связанного с таблицей значения установить свойство РежимВыбора (Истина).
3. В Форме подбора у таблицы значений в обработчике события ВыборЗначения вставить код

&НаКлиенте
Процедура ТПНоменклатураВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
ОповеститьОВыборе(ТПНоменклатура[Значение].Номенклатура);
КонецПроцедуры

Yamuna

Цитата: LexaK от 04 сен 2019, 09:01
Одинарным кликом, а на форме, на элементе ТабПоле есть событие ПриАктивизацииСтроки(...)  вот его и обрабатываетй
пример

&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)

лкДанные = Элементы.Товары.ТекущиеДанные;
    ...
КонецПроцедуры

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

Добавлено: 04 сен 2019, 10:11


Цитата: bsn-chita от 04 сен 2019, 09:21
1. В форме документа при открытии формы третьим параметром передавать не ЭтаФорма, а Элемент.
2. В форме подбора у элемента формы связанного с таблицей значения установить свойство РежимВыбора (Истина).
3. В Форме подбора у таблицы значений в обработчике события ВыборЗначения вставить код

&НаКлиенте
Процедура ТПНоменклатураВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
ОповеститьОВыборе(ТПНоменклатура[Значение].Номенклатура);
КонецПроцедуры

ага сейчас попробую спасибо!
Добавлено: 04 сен 2019, 10:27


Цитата: bsn-chita от 04 сен 2019, 09:21

2. В форме подбора у элемента формы связанного с таблицей значения установить свойство РежимВыбора (Истина).

почему то нет у элемента который в таблице значения  РежимВыбора еще есть какие то варианты?

LexaK

если несколько данных надо передать, да упаковывайте в структуру

&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
   
    лкДанные = Элементы.Товары.ТекущиеДанные;
    лкВыбор = Новый Структура;
    лкВыбор.Вставить("Поле1", лкДанные.Поле1 ); 
    лкВыбор.Вставить("Поле2", лкДанные.Поле2 ); 
    Оповестить("ВыборСтроки", лкВыбор);

КонецПроцедуры


в форме, куда надо поместить выбранные данные добавьте (выберите из списка процедур) обработчик оповещения

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "ВыборСтроки" Тогда
       //в Параметр(е) - структура лкВыбор
    КонецЕсли;

КонецПроцедуры


2. или попробуйте как предложил bsn-chita,
если помогло нажмите: Спасибо!

Yamuna

ЛехаК да сейчас все нормально реквизиты на форме заполняются, спасибо за помощь,единственное когда форма подбора открывается, то курсор сразу же становится на первую строку происходит заполнение реквизитов формы, форма подбора при этом не закрывается, что в данном случае хорошо, так как дает возможность просмотреть список и если надо сделать выбор другой строки. И еще сейчас выдает ошибку если у контрагента нет записей в регистре:
{Документ.ИТС_ВходящаяЗаявка.Форма.ФормаВыбораНоменклатуры1.Форма(54)}: Значение не является значением объектного типа (Номенклатура)
   Если ЗначениеЗаполнено(текДаные.Номенклатура)И ЗначениеЗаполнено(текДаные.Артикул)И ЗначениеЗаполнено(текДаные.РегНомер) Тогда
я попробовал проверить на значение заполнено но это не помогло , что можно еще ?

LexaK

а-а-а, поверку на Неопределено добавьте

НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
    лкДанные = Элементы.Товары.ТекущиеДанные;
    Если лкДанные  = Неопределено Тогда Возврат; КонецЕсли;
    ...


можете попробовать изменить обработку с Активизации на Выбор (как раз по двойному клику)
если помогло нажмите: Спасибо!

Yamuna

Цитата: LexaK от 04 сен 2019, 12:39
а-а-а, поверку на Неопределено добавьте

НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
    лкДанные = Элементы.Товары.ТекущиеДанные;
    Если лкДанные  = Неопределено Тогда Возврат; КонецЕсли;
    ...


можете попробовать изменить обработку с Активизации на Выбор (как раз по двойному клику)

да все получилось , спасибо, еще теперь когда мы выбираем одного контрагента у него номенклатура заполнена и реквизит заполняется, но если мы контрагента перевыбираем , и выберем контрагента у которого номенклатура не заполнена,то как сделать чтобы номенклатура тоже очищалась? это надо использовать событие при изменении контрагента и очищать номенклатуру?

LexaK

Да при изменении Контрагента вызывайте процедуру Перезаполнения таблицы с товарами
соответственно если товаров нет - таблица будет/станет пустая
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск