Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: НазначитьТип() программно а не с формы

v7: НазначитьТип() программно а не с формы
Я
   MiracMC
 
22.09.18 - 00:56
Добрый день.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует