Имя: Пароль:
1C
1С v8
Модальность в "такси" или как сделать выбор из ДереваЗначений
, ,
0 MasterShi
 
15.08.18
09:58
Дано: Иерархическая структура статей расходов, меняющаяся во времени. Реализована в виде периодического регистра сведений РегистрыСведений.СтатьиРасходов:
Измерения: Код, ЦФО
Ресурсы: Наименование,Родитель,Вкл
Выбор должен осуществляться из дерева значений, сформированного на указанную дату.
Пока можно было использовать модальные окна, всё решалось довольно просто: передаём дату отбора в общую модальную форму и назад получаем код статьи, если был выбор.
Как сделать, когда модальные формы запрещены?
Можно ли создать форму выбора из дерева значений прямо в РегистреСведений.СтатьиРасходов? В форме списка возможен только Динамический список...
1 Остап Сулейманович
 
15.08.18
10:01
(0) Выбор из ДС ничем не отличается от прочих.
Так что (отвечая на вопрос) - можно. Делайте.
2 Остап Сулейманович
 
15.08.18
10:04
+ (1) "Как сделать, когда модальные формы запрещены?"
Форму выбора открывать с фишкой "блокировать окно владельца" или "блокировать окно приложения". Это на ваш выбор.
После собственно выбора - оповещать окно владельца о выборе. Или заюзать оповещение о закрытии (см. Процедуру ОткрытьФорму). Это на ваш выбор.
Выбор в главной форме обрабатывать как обычно.
3 MasterShi
 
15.08.18
10:27
(2) А как передать, что, собственно, выбрали.
4 Вафель
 
15.08.18
10:27
(2) для этого есть оповещения
5 MasterShi
 
15.08.18
14:54
(4) (2) Спасибо. Сатори получено :)
При открытии формы надо обязательно указать элемент-владелец.
6 Fragster
 
гуру
15.08.18
16:40
Сделать вместо формы выбора отчет, формирующий нужную структуру на нужную дату, в нем в обработке расшифровки оповещать о выборе
7 Fragster
 
гуру
15.08.18
16:41
ну и да, вариантОткрытияОкна = БлокироватьОкноВладельца
8 MasterShi
 
16.08.18
08:18
(4) (2) Спасибо. Сатори получено :)
При открытии формы надо обязательно указать элемент-владелец.

Возникла другая странность.
В Общей форме я поставил оповещение:
&НаКлиенте
Процедура ДеревоСтатейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    Элем=ДеревоСтатей.НайтиПоИдентификатору(ВыбраннаяСтрока);
    ОповеститьОВыборе(Новый Структура("Код,Наименование,ЦФО,Период",
        Элем.Код, Элем.Наименование, Элем.ЦФО, Элем.Период));
    СтандартнаяОбработка = Ложь;
КонецПроцедуры

А в форме документа в Обработке выбора в поле:
&НаКлиенте
Процедура РодительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    УстановкаДляОтбора=Новый Структура("ДатаВыборки",Объект.Дата);
    ФВыбора=ПолучитьФорму("ОбщаяФорма.ВыборСтатьиБД",УстановкаДляОтбора,Элемент);
    ФВыбора.Открыть();
КонецПроцедуры

&НаКлиенте
Процедура РодительОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    Объект.СтатьяПредок=ВыбранноеЗначение.Код;
КонецПроцедуры

Так вот. Пока в ОповеститьОВыборе стоял возврат просто текста, всё было хорошо, но когда я поставил возврат структуры, то в поле, где происходит выбор, пишется просто "структура" и никаких тебе кодов статей, хотя должен быть код.
"доктор, что я делаю не так?"(с) анек
9 Fragster
 
гуру
16.08.18
08:55
СтандартнаяОбработка
10 MasterShi
 
16.08.18
09:01
(9) ???
11 Fragster
 
гуру
16.08.18
14:09
(10) что "???"
12 MasterShi
 
16.08.18
15:37
(11) В каком месте от нее отказаться?
13 Fragster
 
гуру
16.08.18
16:00
в обработке выбора
14 FIXXXL
 
16.08.18
17:24
можно
Синтаксис:

ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>, <ОписаниеОповещенияОЗакрытии>, <РежимОткрытияОкна>)

и использовать РезультатЗакрытия

<ОписаниеОповещенияОЗакрытии> (необязательный)

Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана при закрытии формы со следующими параметрами:
<РезультатЗакрытия> - значение, переданное при вызове метода Закрыть открываемой формы,