Имя: Пароль:
1C
1С v8
Параменты управляемой формы
0 saradip
 
17.08.19
15:38
Доброго времени.
В общем, есть процедура &НаСервере которая получается ссылку на "элемент справочника" Люди
и присваивает ее "реквизиту формы", допустим с именем СсылкаНаЧеловека.
Так вот, чтобы эту ссылку использовать в параметрах метода ОткрытьФорму:

ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЧеловека);
ОткрытьФорму("Справочник.Люди.ФормаОбъекта", ПараметрыФормы);

Необходимо чтобы ранее созданный "реквизит формы" с именем СсылкаНаЧеловека имел тип
СправочникСсылка.Люди

Почему? Ведь в серверной процедуре я и так присваиваю реквизиту тип СправочникСсылка.Люди с конкретной ссылкой.
1 saradip
 
17.08.19
16:01
Вот, к примеру.
Почему реквизит формы СсылкаНаПодарок должен быть с типом:
СправочникСсылка.Подарки?
Ведь я в процедуре ПоискНаСервере и так присваиваю ему тип прямой ссылки на элемент.
Если поменять тип реквизита формы СсылкаНаПодарок, допустим на СправочникСсылка.Сотрудники, то параметры при открытии формы не сработают.
Почему?
Ведь я тип реквизиту "переприсваиваю" в процедуре.


&НаСервере
Процедура ПоискНаСервере()
    
    Менеджер = Справочники.Подарки;
    
    Выборка = Менеджер.Выбрать();
    
    Цена = 0;
    Подарок = Справочники.Подарки.ПустаяСсылка();
    
    Пока Выборка.Следующий() Цикл
        
        Если Выборка.Цена > Цена Тогда
            Цена = Выборка.Цена;
            Подарок = Выборка.Ссылка;    
        КонецЕсли;
        
    КонецЦикла;
    
    Элементы.НадписьПодарок.Заголовок = Подарок.Наименование;
    Элементы.НадписьЦена.Заголовок = Цена;
    
    СсылкаНаПодарок = Подарок;
    
КонецПроцедуры


&НаКлиенте
Процедура НадписьПодарокНажатие(Элемент)
    
    ПараметрыФормы = Новый Структура("Ключ", СсылкаНаПодарок);
    
    ОткрытьФорму("Справочник.Подарки.ФормаОбъекта", ПараметрыФормы);
    
КонецПроцедуры
2 saradip
 
17.08.19
16:09
Не могу поймать логику.
Разве я не могу реквизиту с типом ссылка в коде присвоить какую угодно ссылку?

Ссылка = Справочники.Подарки.НайтиПоНаименованию("Телефон");
Ссылка = Справочники.Подарки.НайтиПоНаименованию("Браслет");
Ссылка = Справочники.Подарки.НайтиПоНаименованию("Часы");
Ссылка = Справочники.Подарки.НайтиПоНаименованию("ЧтоТоЕще");
3 saradip
 
17.08.19
16:16
Если реквизит формы имеет тип СправочникСсылка.Подарки, то после завершения процедуры
ПоискНаСервере() ,он получает:

значение> Телефон и тип> СправочникСсылка.Подарки

Если реквизит имеет тип СправочникСсылка.Люди, то он получает:
значение> "пустое" и тип> СправочникСсылка.Люди
4 hhhh
 
17.08.19
16:35
(3) да, так и задумано. Тут мы вам ничем не поможем. Это язык такой, 1с.
5 saradip
 
17.08.19
16:39
(4) Так я не пойму, почему я не могу реквизит формы указать строка, а через код присвоить ему тип ссылка?
реквизиты формы имеют жесткий тип, или я что-то не пойму?
6 hhhh
 
17.08.19
16:46
(5) ну, такой язык. Если задан тип строка, то через код нельзя переприсвоить.
7 Asmody
 
17.08.19
16:49
(5) Реквизиты - это не просто переменные. Они типизированы на уровне метаданных. Но могут быть составного типа.
8 saradip
 
17.08.19
17:18
(7) Спасибо!!! Вот теперь прояснилось!
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.