Имя: Пароль:
1C
 
v8: как вернуть значение из формыВыбора
0 larryk
 
12.04.10
19:46
при нажати на кнопкуВыбора реквизита ТЧ открывается  моя форма,в которой надо выбрать значение, но ситуация поставила в тупик. ак записать это значение в реквизит ТЧ.

вот мой код -

при нажатии на кнопку выбора

Процедура МатериалыпартииНачалоВыбора(Элемент, СтандартнаяОбработка)
   

СтандартнаяОбработка = ЛОЖЬ;
        //Берем текущую строку и из нее номенклатуру

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

       ФормаВыбора = Документы.ТребованиеНакладная.ПолучитьФормуВыбора("форма");
       ФормаВыбора.ТабличноеПоле1 = Выборка.Выгрузить();
       ФормаВыбора.ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
       
       ФормаВыбора.Открыть();

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

а потом в форме которая открывается -

Процедура ТабличноеПоле1Выбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
     // В переменную или куда?)заносим интересующий нас документ

    ВыборПартии = ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока.ДокументОприходования;

ЭтаФорма.Закрыть();
                 
 КонецПроцедуры

подскажите что доделать?
буду очень благодарен!
1 Варвар
 
12.04.10
19:52
ОБработкаВыбора есть в ТЧ?
2 Лефмихалыч
 
12.04.10
19:52
(0) ОбработкаВыбора
3 Варвар
 
12.04.10
19:52
блин, в форме, а не ТЧ конечно же :))
4 larryk
 
12.04.10
19:54
нет нету обработки, я тут и "поплыл", все что в форме есть сейчас написал)

как значение реквизиту присвоить? :)
5 Лефмихалыч
 
12.04.10
19:54
(3) похер. Щас будет вопрос: "чтоэта?!"
6 Варвар
 
12.04.10
19:55
(5) а вот и ниугадал :))
Реквизит=ВыбраноеЗначение;
Както так...
7 Лефмихалыч
 
12.04.10
19:55
(4) во-первых, нужно открытвать форму в режиме выбора. Во-вторых, в форме должна быть ОбработкаВыбора, которая добавит строку в ТЧ. А в самых первых, надо устанавливать СтандартнаяОбработка = Ложь в ТабличноеПоле1Выбор и аже делать это в НачалоВыбора
8 larryk
 
12.04.10
20:00
Я форму открываю в режиме выбора, там сверху Процедура МатериалыпартииНачалоВыбора  про стандартную обработку верно очень,пропустил да :)
попробую сделать в режиме выбора, но мне не надо добавлять строку в ТЧ а лишь присвоить значение реквизиту в ней
9 larryk
 
12.04.10
20:01
как это сделать из другой формы? для наглядности можите код поправить где неверно плиз? косяки доделаю,главное чтобы записывалось выбраное значение. в этом загвоздка.
10 Варвар
 
12.04.10
20:05
(9) зачем из другой?
В обработке выбора наверное чтото типа ТекущаяСТрока.РЕквизит=ВЫбраноеЗначение.
Каюсь, точно не помню как, а 1С нет под рукой.
11 Лефмихалыч
 
12.04.10
20:06
(9) ты имеешь в виду что не знаешь, как пишется "ЭлементыФОрмы.Табличноеполе1.ТекущиеДанные"?
12 larryk
 
12.04.10
20:12
как пишется знаю, это есть и у меня выше в коде,вот в таком виде правда, там из конкретной колонки берется
ВыборПартии = ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока.ДокументОприходования;
только чему именно присваивать это значение было сутью вопроса.
из ФормыДокумента я вызвал Форму и в ней выбрал ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока.[Чтото] как потом это поместить в тот реквизит ТЧ из которого вызывалась форма?
13 Лефмихалыч
 
12.04.10
20:14
(12) в обработке выбора через ТекущиеДанные присваивать пробовал?
14 Варвар
 
12.04.10
20:15
(12) (1,2) еще раз перечитай попробуй. Расскажи о результатах.
15 larryk
 
12.04.10
20:18
Я просто с ней не совсем понял как действовать:) обязательно попробую. спасибо за участие.

как я понял в обработке выбора формы , которая вызывается надо присвоить выбраное значение, но к чему ?как тот элемен выудить ?
16 Варвар
 
12.04.10
20:23
(15) в СП написано.
17 Лефмихалыч
 
12.04.10
20:26
(15) и форма выбора у тебя, не смотря на название, открывается НЕ в режиме выбора, судя по коду из (0)
18 larryk
 
12.04.10
20:29
ну намёки я понял, буду учить мат часть:)

ФормаВыбора = Документы.ТребованиеНакладная.ПолучитьФормуВыбора("форма");

это не режим выбора? если нет то как тогда будет выбор же?
19 Mitriy
 
12.04.10
20:37
возможно, я чего-то не понимаю, но вроде бы все просто:
1. СтандартнаяОбработка = Ложь;
2. получаем форму выбора документа по умолчанию (или не по умолчанию, но форму выбора) с владельцем Элемент:
ФормаВыбора = Документы.ТребованиеНакладная.ПолучитьФормуВыбора(, Элемент);
2. устанавливаем
ФормаВыбора.ДокументСписок.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
ФормаВыбора.ДокументСписок.Отбор.Ссылка.Значение = СписокЗначенийСНужнымиСсылками;
ФормаВыбора.ДокументСписок.Отбор.Ссылка.Использование = Истина;
ФормаВыбора.ДокументСписок.НастройкаОтбора.Ссылка.Доступность = Ложь;
ФормаВыбора.Открыть();
20 larryk
 
12.04.10
20:43
документСписок это вроде не совсем то, ведь нужно чтобы в формы был не только список документов но и некоторые их реквизиты которые я запросом отбираю.
21 Mitriy
 
12.04.10
20:46
(20) а... не разглядел... пардон... тогда проще с ОбработкаВыбора... Лёвыч прав...
22 larryk
 
12.04.10
20:48
обработку выбора делать в форме выбора? я чтото уже запутался,сорри)
23 Mitriy
 
12.04.10
20:48
(21) хотя нет... не то...
открывай форму модально, будет все проще...
24 larryk
 
12.04.10
20:50
а можно немного подробней, как реквизиту потом выбранное значение присвоить то?
25 larryk
 
12.04.10
20:51
ФормаВыбора = Документы.ТребованиеНакладная.ПолучитьФормуВыбора("форма");
       ФормаВыбора.ТабличноеПоле1 = Выборка.Выгрузить();
       ФормаВыбора.ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
       
       ФормаВыбора.ОткрытьМодально();

это почти тоже самое:)
26 larryk
 
12.04.10
20:52
как возвратить значение в элемент,вот видимо как сформулировать будет правильней
27 Mitriy
 
12.04.10
20:57
(26)
ЗначениеЧегоТо = ФормаВыбора.ОткрытьМодально();
Если ЗначениеЧегоТо = Неопределено Тогда
// форму просто закрыли или нажали на Отмена
КонецЕсли;

в форме выбора, при выборе чего-то (например два раза кликнули на строке, или нажали ОК):

Закрыть(ЛюбоеЗначение);
28 Mitriy
 
12.04.10
20:58
(27)*
ЗначениеЧегоТо = ФормаВыбора.ОткрытьМодально();
Если ЗначениеЧегоТо = Неопределено Тогда
// форму просто закрыли или нажали на Отмена
Иначе
ТвояСтрока.ЗначениеЧегоТо = ЗначениеЧегоТо;
КонецЕсли;
29 Mitriy
 
12.04.10
21:03
если все это ты делаешь в обработке, то и форму для выбора делай в этой же обработке, зачем документ трогать?
30 larryk
 
12.04.10
21:05
спасибо ,попробую применить это) форму сделал в этом же документе,не в другом,просто отдельно.
31 larryk
 
12.04.10
21:09
Закрыть(ЛюбоеЗначение); а это что значит? в форме выбора как я понял надо вот это
Если ЗначениеЧегоТо = Неопределено Тогда
// форму просто закрыли или нажали на Отмена  
Иначе
ТвояСтрока.ЗначениеЧегоТо = ЗначениеЧегоТо;
КонецЕсли;
с дополнениями конечно)
32 Mitriy
 
12.04.10
21:10
с точностью до наоборот ))
щас попонятнее напишу...
33 Mitriy
 
12.04.10
21:12
....
   ФормаВыбора = Документы.ТребованиеНакладная.ПолучитьФормуВыбора("форма");
       ФормаВыбора.ТабличноеПоле1 = Выборка.Выгрузить();
       ФормаВыбора.ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
       
       ВыбранноеЗначение = ФормаВыбора.ОткрытьМодально();

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

а потом в форме которая открывается -

Процедура ТабличноеПоле1Выбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
     // В переменную или куда?)заносим интересующий нас документ


    Закрыть(ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока.ДокументОприходования);
                 
 КонецПроцедуры
34 Mitriy
 
12.04.10
21:14
только я бы написал не ТекущаяСтрока, а ТекущиеДанные:

Закрыть(ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные.ДокументОприходования);
35 larryk
 
12.04.10
21:14
вот этим мы заносим в реквизит значение?
Закрыть(ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока.ДокументОприходования);

никогда бы не подумал :)
36 larryk
 
12.04.10
21:15
большое спасибо Mitriy ,очень познавательно)
37 Mitriy
 
12.04.10
21:15
ну и соответственно:

ВыбранноеЗначение = ФормаВыбора.ОткрытьМодально();
Если ВыбранноеЗначение = Неопределено Тогда
// форму просто закрыли или нажали на Отмена  
Иначе
ТвояСтрока.ЗначениеЧегоТо = ВыбранноеЗначение;
КонецЕсли;

с дополнениями, конечно ))
38 Mitriy
 
12.04.10
21:17
(35) этим мы возвращаем любое, нужное нам значение из формы, открытой модально... ты можешь сформировать сначала структуру с кучей значений, например, и уже ее вернуть... этим модальная форма и удобна, еще она удобна тем, что код не будет выполняться дальше, пока ты форму не закроешь...
39 larryk
 
12.04.10
21:18
очень удобно! именно это я и искал! спасибище!!))
40 larryk
 
12.04.10
21:20
Процедура ТабличноеПоле1Выбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
 


    Закрыть(ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока.ДокументОприходования);
                 
 КонецПроцедуры

тут еще видимо СтандартнаяОбработка= ложь;  
)
41 Mitriy
 
12.04.10
21:21
(40) видимо )
42 larryk
 
12.04.10
21:21
....
   ФормаВыбора = Документы.ТребованиеНакладная.ПолучитьФормуВыбора("форма");
       ФормаВыбора.ТабличноеПоле1 = Выборка.Выгрузить();
       ФормаВыбора.ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
       
       ВыбранноеЗначение = ФормаВыбора.ОткрытьМодально();

Если ВыбранноеЗначение = Неопределено Тогда
// форму просто закрыли или нажали на Отмена    
Иначе
ТвояСтрока.ЗначениеЧегоТо = ВыбранноеЗначение;
КонецЕсли;
43 larryk
 
12.04.10
21:22
удобно так, а через обработку выбора полгода делалось бы
Закон Брукера: Даже маленькая практика стоит большой теории.