Имя: Пароль:
1C
1С v8
Изменяемый тип поля на форме
,
0 Nykos
 
18.08.15
10:24
Всем привет! На форме есть два переключателя и поле ввода. Подскажите пожалуйста, как сделать так, чтобы при выборе первого переключателя поле ввода имело тип ДокументСсылка.Акты, а при выборе второго переключателя - ДокументСсылка.Накладные?
Заранее спасибо!
1 Cube
 
18.08.15
10:25
(0) Проставляй пустую ссылку при переключении.
2 Nykos
 
19.08.15
14:13
(1)
Процедура Переключатель1ПриИзменении(Элемент)
Если Переключатель1 = 1 Тогда
ЭлементыФормы.Основание = Документы.Накладная.ПустаяСсылка();
ИначеЕсли Переключатель1 = 2 Тогда
ЭлементыФормы.Основание = Документы.ПриходнойАкт.ПустаяСсылка();
КонецЕсли;
КонецПроцедуры


При попытке переключить переключатель выдает ошибку
"Поле объекта недоступно для записи (Основание)"

Вопрос: Реквизит Основание должен быть с типом Строка или изначально ссылкой на один из документов?
3 Nykos
 
19.08.15
14:18
Недоглядел.

Заменил
ЭлементыФормы.Основание
на
ЭлементыФормы.Основание.Данные
и ошибка ушла.

Но вопрос с реквизитом остается открытым..
4 Mankubus
 
19.08.15
14:42
(2) меняй данные, а не элемент формы
Основание = Документы.Накладная.ПустаяСсылка();
5 Nykos
 
19.08.15
15:07
(4) А какой изначально присваивать тип элементу?
6 shpioleg
 
19.08.15
15:27
Попробуй по аналогии

    ПолеСтатья = ЭлементыФормы.СоответствияСтатей.Колонки.Статья.ЭлементУправления;
    ПолеСтатья.ОграничениеТипа =(Новый ОписаниеТипов (СоответствиеВыбораИТипа[ТипСтатьиБДР]));
7 Nykos
 
19.08.15
16:14
(6) не проканало
8 Nykos
 
19.08.15
16:15
Проблема решена.

Процедура Переключатель1ПриИзменении(Элемент)
Если Переключатель = 1 Тогда
Поле = Справочники.Контрагенты.ПустаяСсылка();
ИначеЕсли Переключатель = 2 Тогда
Поле = Справочники.МОЛ.ПустаяСсылка();
КонецЕсли;
КонецПроцедуры


Тип поля ЛюбаяСсылка. Но по идее можно любой.
9 Nykos
 
19.08.15
16:23
А как сделать чтобы при выборе Контрагента в реквизит Должность,который находится в ТЧ текущего документа, подкидывалась должность выбранного контрагента из справочника?
10 КоньЛапчатый
 
19.08.15
16:54
(9)
Процедура КонтрагентПриИизменении()
ТекСтрока.Должность = Контрагент.Должность
КонецПроцедуры
11 Mort
 
19.08.15
16:59
(8) А теперь зайди в поле, нажми Shift+F4 и попробуй выбрать снова.
12 Nykos
 
19.08.15
17:01
(11) не нажимай и все будет хорошо))
13 Mort
 
19.08.15
17:03
(12) Ага. "А вы не делайте так". Отличный подход к разработке.
14 Nykos
 
19.08.15
18:24
(13) У меня пока не хватает знаний сделать лучше... Но буду рад, если ты подскажешь как надо, а если еще и объяснишь почему именно так надо делать, я тебе только благодарен буду..
15 Nykos
 
19.08.15
18:31
(14) Все что я придумал это указал составной тип данных и отметил справочник Контрагенты и МОЛ. Теперь если пользователь нажмет Shift+F4, то ему придется выбрать из 2 справочников один... Хотя бы так.
Но с таким успехом переключатели вообще можно убрать и пусть сразу выбирают из списка. Как считаешь?
16 rmrush
 
19.08.15
18:40
(2) А ограничение типа данных чем не устраивает?
17 Mort
 
19.08.15
18:48
(15) Тут две задачи.
Во-первых надо установить ограничение типа для функционирования элемента:

Если Переключатель = 1 Тогда
Элементы.Поле.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Контрагенты");
.... и т.д.


Во вторых надо привести существующее значение:

Поле = Элементы.Поле.ОграничениеТипа.ПривестиЗначение(Поле);
18 Nykos
 
19.08.15
18:57
(17) Элементы или ЭлементыФормы? у меня 8.1, может в 8.2 немного иначе..
19 Mort
 
19.08.15
18:58
(18) ЭлементыФормы, конечно. Привычка...
20 Nykos
 
19.08.15
19:06
(19) (16) Спасибо! Вроде сделал и работает правильно..
21 Nykos
 
19.08.15
19:40
(10)
Процедура ПолеПриИзменении(Элемент)
ЭлементыФормы.ТЧ.ТекущаяСтрока.Должность= Поле.Должность;
КонецПроцедуры

Ругается что поле Должность не найдено..
22 Nykos
 
20.08.15
09:16
вверх(
23 cw014
 
20.08.15
09:19
Советую отойти от компьютера и позвать программиста
24 Nykos
 
20.08.15
09:30
(23) Советую практиковаться в остроумии в другом месте