Имя: Пароль:
1C
 
Список выбора типа данных для реквизита документа. УФ.
0 Wirtuozzz
 
17.05.16
14:01
Форумчане добрый день.
Есть реквизит документа составного типа. Реквизит может принимать значение, как некоторых документов, так и справочников. Требуется добавить в форму выбора типа (при выборе реквизита) еще одно значение, назовем его «ФиксированноеЗначениеРеквизита», при выборе этого значения, оно должно подставляться в реквизит.

Я правильно понимаю, что мне надо при НачалоВыбора реквизита самому собрать видимый пользователю список доступных значений, а в процедуре ОбработкаВыбора реквизита написать код, который присвоит моему реквизиту выбранное фиксированное значение, а для каждого ссылочного типа, прописать, что будет открываться список выбора того или иного типа  ?

Если нет, прошу поправить меня. Всем спасибо!

ps Формы управляемые.
1 aleks_default
 
17.05.16
14:18
Да, надо эмулировать самому форму выбора типа.
Я делал через ВыбратьЭлемент()
2 Wirtuozzz
 
17.05.16
14:23
(1) Можно пример кода или подсказку что там указывать когда добавляешь в список значений значения?
3 aleks_default
 
17.05.16
14:31
&НаКлиенте
Процедура ПредметИскаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
    
    Отказ = Истина;
    СписокТиповДокументов = ПолучитьСписокТиповДокумента();
    ВыбТип = СписокТиповДокументов.ВыбратьЭлемент("Выберите тип документа!");
    Если ВыбТип<>Неопределено тогда
        ИмяДокумента = ПолучитьИмяДокументаПоТипу(ВыбТип.Значение);
        Отбор = Новый Структура("Организация,Контрагент",Объект.Организация,Объект.Контрагент);
        ПараметрыФормы = Новый Структура("Отбор",Отбор);
        ОткрытьФорму("Документ."+ИмяДокумента+".ФормаВыбора",ПараметрыФормы,Элемент);
    КонецЕсли;

КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьСписокТиповДокумента()
    
    СписокТиповДокументов = Новый СписокЗначений;
    СписокТиповДокументов.ЗагрузитьЗначения(Метаданные.Документы.СудебныйИск.ТабличныеЧасти.ПредметИска.Реквизиты.Документ.Тип.Типы());    
    Возврат СписокТиповДокументов;    
    
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьИмяДокументаПоТипу(Тип)
    Возврат Метаданные.НайтиПоТипу(Тип).Имя;
КонецФункции
4 aleks_default
 
17.05.16
14:32
Тут немного другая ситуация. Здесь форма выбора типа открывается при начале добавления строки в таб. части.
5 Wirtuozzz
 
17.05.16
14:42
Спасибо большое добрый человек! Спасибо!
6 Wirtuozzz
 
17.05.16
14:59
(3) какой четкий код написан! Класс, прямо супер!
7 Wirtuozzz
 
17.05.16
16:42
Может кому пригодится и он ищет подобное без модальности, то

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

&НаКлиенте
Процедура ОработатьРезультатВыгрузки(ВыбранныйЭлемент,ДополнительныеПараметры) Экспорт
    
    Если ВыбранныйЭлемент = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Если ВыбранныйЭлемент.Значение = Тип("Строка") Тогда
        Если ВыбранныйЭлемент.Представление = "График погашения" Тогда
            УстановитьЗначениеРевквизитаНаСервере(ВыбранныйЭлемент.Представление);
            ЭтаФорма.Модифицированность = Истина;
        КонецЕсли;
        
    ИначеЕсли ВыбранныйЭлемент.Значение = Тип("СправочникСсылка.МаркетинговыеМероприятия")
        ИЛИ ВыбранныйЭлемент.Значение = Тип("СправочникСсылка.Проекты")
        ИЛИ ВыбранныйЭлемент.Значение = Тип("СправочникСсылка.СделкиСКлиентами") Тогда
        
        ИмяОбъекта = ПолучитьИмяПоТипу(ВыбранныйЭлемент.Значение);
        Отбор = Новый Структура();
        ПараметрыФормы = Новый Структура("Отбор",Отбор);
        
        ОткрытьФорму("Справочник."+ИмяОбъекта+".ФормаВыбора",ПараметрыФормы,Элементы.Предмет);
        
    ИначеЕсли ВыбранныйЭлемент.Значение = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")
        ИЛИ ВыбранныйЭлемент.Значение = Тип("ДокументСсылка.ЗапланированноеВзаимодействие")
        ИЛИ ВыбранныйЭлемент.Значение = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее")
        ИЛИ ВыбранныйЭлемент.Значение = Тип("ДокументСсылка.ТелефонныйЗвонок")
        ИЛИ ВыбранныйЭлемент.Значение = Тип("ДокументСсылка.Встреча")  Тогда
        
        ИмяОбъекта = ПолучитьИмяПоТипу(ВыбранныйЭлемент.Значение);
        Отбор = Новый Структура();
        ПараметрыФормы = Новый Структура("Отбор",Отбор);
        
        ОткрытьФорму("Документ."+ИмяОбъекта+".ФормаВыбора",ПараметрыФормы,Элементы.Предмет);
        
    КонецЕсли;
    
КонецПроцедуры

&НаСервере
Функция ПолучитьСписокВыбора()
    
    СписокВыбора = Новый СписокЗначений;
    СписокВыбора.Добавить(Тип("Строка"), "График погашения");
    СписокВыбора.Добавить(Тип("СправочникСсылка.МаркетинговыеМероприятия"),"Маркетинговые мероприятия");
    СписокВыбора.Добавить(Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"), "Электронное письмо исходящее");
    СписокВыбора.Добавить(Тип("ДокументСсылка.ЗапланированноеВзаимодействие"),"Запланированное взаимодействие");
    СписокВыбора.Добавить(Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее"), "Электронное письмо входящее");
    СписокВыбора.Добавить(Тип("ДокументСсылка.ТелефонныйЗвонок"),"Телефонный звонок");
    СписокВыбора.Добавить(Тип("ДокументСсылка.Встреча"),"Встреча");
    СписокВыбора.Добавить(Тип("СправочникСсылка.СделкиСКлиентами"),"Сделки с клиентами");
    СписокВыбора.Добавить(Тип("СправочникСсылка.Проекты"), "Проекты");
    
    Возврат СписокВыбора;
    
КонецФункции

&НаСервере
Функция ПолучитьИмяПоТипу(Тип)
    
    Возврат Метаданные.НайтиПоТипу(Тип).Имя;
    
КонецФункции

&НаСервере
Процедура УстановитьЗначениеРевквизитаНаСервере(Значение)
    Объект.Предмет = "";
    Объект.Предмет = Значение;
КонецПроцедуры