Имя: Пароль:
1C
1C 7.7
v7: НазначитьТип() программно а не с формы
,
0 MiracMC
 
22.09.18
00:56
Добрый день.

Есть реквизит справочника с названием "Значение" неопределенного типа.
При работе с формой элемента справочника в интерактивном режиме программно назначаю нужный мне вид...
Как то так:

Если Характеристика.ВидЗначения = Перечисление.ВыдЗначения.Цвет Тогда
Процедура ПриВыбореХарактеристики()
Если Характеристика.ВидЗначения = Перечисление.ВыдЗначения.Цвет Тогда    
Форма.Значение.НазначитьТип("Справочник.Цвета",,);
КонецЕсли;
Если Характеристика.ВидЗначения = Перечисление.ВыдЗначения.Текст Тогда
Форма.Значение.НазначитьТип("Строка",100,);
КонецЕслИ;
КонецПроцедуры

Но задача повернулась так что необходимо из обработки создавать новые элементы этого справочника и как то не получается назначить вид моему реквизиту...

пробовал простую запись нужного мне значения, допустим :
Значение = Перечисление.Вид.Товар
или
Значение = ТМЦ.ТекущийЭлемент();

Есть способы решить задачу кроме вызова самой формы справочника?
1 Злопчинский
 
22.09.18
01:22
Ну, наверное у тебя проба была не так как ты в примере написал а примерно так
Спр.Значение = .....

Ну и пиши примерно как в форме
Спр.Значение.НазначитьТип(...)
2 MiracMC
 
22.09.18
01:39
(1) Привет.
НУ так и написал пример выше...
В форме перед тем как пользователь внесет значение (или выберет его) он выбирает "тип" характеристики... отрабатывает процедура

Процедура ПриВыбореХарактеристики()
Если Характеристика.ВидЗначения = Перечисление.ВыдЗначения.Текст Тогда
Форма.Значение.НазначитьТип("Строка",100,);
КонецЕсли;
Если Характеристика.ВидЗначения = Перечисление.ВыдЗначения.Число Тогда
Форма.Значение.НазначитьТип("Число",10,0);
КонецЕсли;
Если Характеристика.ВидЗначения = Перечисление.ВыдЗначения.Цвет Тогда    Форма.Значение.НазначитьТип("Справочник.Цвета",,);
КонецЕслИ;
Если Характеристика.ВидЗначения = Перечисление.ВыдЗначения.Размер Тогда    Форма.Значение.НазначитьТип("Справочник.Размеры",,);
КонецЕсли;
.....
КонецПроцедуры

Так все работает. Пользователь выбирает значение или вносит его...

А когда программно создаю - делаю как то так:
....
ХарПред.Новый();    
ХарПред.Характеристика = Хар.ТекущийЭлемент();    
ХарПред.Значение = ТМЦ.Модель;            
ХарПред.ЗначениеТекст = СокрЛП(ТМЦ.Модель);            
ХарПред.Записать();
....

Где
ХарПред.Значение = ТМЦ.Модель;    - это и есть попытка записи значения в неопределенный реквизит справочника...
ЗначениеТекст  - это просто текстовое поле для проверки. Сюда значение записывается без проблем....
3 Мимохожий Однако
 
22.09.18
07:59
Где в примере программного кода назначение типа?
4 MiracMC
 
22.09.18
12:46
(3) интерактивно
Форма.Значение.НазначитьТип("Строка",100,);

написано ж...

программно НазначитьТип() не работает

отсюда и вопрос как это сделать программно?
5 HawkEye
 
22.09.18
13:44
(4) читаем... думаем...
НазначитьТип(<?>,,,)
Синтаксис:
НазначитьТип(<ИмяРеквизита>,<ИмяТипа>,<Длина>,<Точность>)
Назначение:
Назначить тип для реквизита неопределенного типа.
Параметры:
<ИмяРеквизита> - строка с наименованием реквизита неопределенного типа, как он назван в конфигураторе.
<ИмяТипа> - строковое выражение - название типа данных (или Вид субконто), который назначается реквизиту. Например, ''Строка'', ''Число'', ''Справочник.Товары'', ''Документ.РасходнаяНакладная'' и т.п.
<Длина> - необязательный параметр. Число - длина поля представления данных. Имеет смысл только при задании числового или строкового типа.
<Точность> - необязательный параметр. Число знаков после десятичной точки. Имеет смысл только при задании числового типа.
6 MiracMC
 
22.09.18
16:05
(5)... коллега... ну не страдайте ерундой и сами дочитайте до конца... а там написано

Замечание:
Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.
Подробнее см. в документации, глава 'Атрибуты и методы контекста Модуля формы

И если пересмотреть что я выше пишу то там тоже видно что оно работает только в виде

Форма.Значение.НазначитьТип("Справочник.Цвета",,);
7 MiracMC
 
22.09.18
16:14
Так же НазначитьТип() может быть у:
1. Документ
2. Журнал
3. Константа
4. Контекст Формы - именно его я использую интерактивно
5. Операция и проводка
6. Периодический реквизит
7. Регистр
8. Справочник
9. Счет
10. Таблица

Возможно я чего то не понимаю, но тут нет вариантов программного создания элемента справочника у которого один из аргументов имеет неопределенный тип...

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

Просто в моем случае это приведет к сумашедшему мерцанию экрана пользователя... а не хотелось бы...
8 MiracMC
 
22.09.18
16:59
(5)... сори... я не прав...
зациклился на одной формулировке про Элемент формы и не видел попросту остальных...

всем спасибо... разобрался..
9 Рэйв
 
22.09.18
17:46
Какая прелесть...77..понастальгировал, спасибо.
10 Эльниньо
 
24.09.18
14:21
Спр.НазначитьТип("ЗначениеРеквизита", ТипЗначенияСтр(ТМЦ.ТекущийЭлемент()));