Имя: Пароль:
1C
 
Обычное приложение, выбор?
, ,
0 Demetres
 
29.03.15
18:56
Всем привет! Есть задача в табличной части обычной формы, сделать выбор в реквизите "ВидыЗначений" в зависимости от реквизита "Контрагент". Если Контрагент.НеРизидент = Истина, то брать выбирать из предопределенной группы "НеРизидент" если наоборот то "Резидент". Как сделать это ГРАМОТНО? Нужно будет запилить обработчики на события "ВидЗакрытияНачалоВыбора", "ВидЗакрытияОбработкаВыбора", "ВидЗакрытияАвтоПодборТекста", или можно как-то без кода это сделать в обычном приложении?
1 Demetres
 
29.03.15
18:56
Реквизит "ВидЗакрытия"
2 ДенисЧ
 
29.03.15
18:58
Без кода нельзя.
3 ShoGUN
 
29.03.15
18:59
(0) В обычном приложении без кода не реализуется. Единственное что можно - владельца задать другим реквизитом на форме, если справочник подчинённый.
4 Demetres
 
29.03.15
19:01
А есть что-то на подобии как в управляемом приложении "Связи параметров выбора"
5 Demetres
 
29.03.15
19:02
(4) Не, у меня связь по родителю.
6 Demetres
 
29.03.15
19:06
И форму выбора нужно задать для Справочники.ВидыЗакрытия автоматом ничего не сгенерируется?
7 Demetres
 
29.03.15
19:19
Почему для Справочники.ВидыЗакрытия.ФормыВыбора нельзя добавить отбор по родителю?
{Документ.ВыборВТабличнуюЧасть.Форма.ФормаДокумента.Форма(14)}: Ошибка при вызове метода контекста (Добавить)
        ТекОтборПоРодителю = ФормаВыбора.СправочникСписок.Отбор.Добавить("Родитель");
по причине:
Метод не доступен для данного объекта
8 Demetres
 
29.03.15
19:27
Кто в теме, ответьте почему может недоступно поле родитель для отбора?
9 ShoGUN
 
29.03.15
19:33
(8) Его не надо добавлять, он там уже есть :)))
ФормаВыбора.СправочникСписок.Отбор.Родитель
10 Demetres
 
29.03.15
19:35
(9) Сейчас попробую, но так тоже ошибка, В списке элементов отбора его не было
11 ShoGUN
 
29.03.15
19:36
(10) В справочнике иерархия-то есть?
12 Demetres
 
29.03.15
19:36
(9) Поле не обнаружено, в отладке посмотрел?
13 Demetres
 
29.03.15
19:36
Да, групп и элементов
14 Demetres
 
29.03.15
19:37
Не понимаю почему нет родителя
15 Demetres
 
29.03.15
20:09
У меня так получилось, если видите что-то лишнее скажите
16 Demetres
 
29.03.15
20:09
Процедура ДанныеКонтагентовВидЗакрытияНачалоВыбора(Элемент, СтандартнаяОбработка)
    
    ТекКонтрагент = ЭлементыФормы.ДанныеКонтагентов.ТекущаяСтрока.Контрагент;
    
    Если ЗначениеЗаполнено(ТекКонтрагент) Тогда
        
        ТекРодитель = ?(ТекКонтрагент.НеРезидент, Справочники.ВидыЗакрытия.НеРезидент, Справочники.ВидыЗакрытия.Резидент);
        НаборЭлементов = ПолучитьНаборЭлементовПоРодителю(ТекРодитель);
        Если НаборЭлементов.Количество() = 0 Тогда
            Возврат;
        Иначе
            Если НаборЭлементов.Найти(Элемент.Значение) <> Неопределено Тогда
                ТекЗначниеЭлемента = Элемент.Значение;
            Иначе
                ТекЗначниеЭлемента = НаборЭлементов[0];
            КонецЕсли;
        КонецЕсли;    
        
        СтандартнаяОбработка = Ложь;
        
        ФормаВыбора = Справочники.ВидыЗакрытия.ПолучитьФормуВыбора("ФормаВыбора", Элемент);
        
        ФормаВыбора.СправочникСписок.Отбор.Ссылка.Установить(ТекРодитель);
        ФормаВыбора.СправочникСписок.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВИерархии;
        ФормаВыбора.СправочникСписок.Отбор.ПометкаУдаления.Установить(Ложь);
        ФормаВыбора.ЭлементыФормы.СправочникСписок.ТекущаяСтрока = ТекЗначниеЭлемента;
        ФормаВыбора.ПараметрВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы;
            
        ФормаВыбора.Открыть();
    КонецЕсли;    
    
КонецПроцедуры

Функция ПолучитьНаборЭлементовПоРодителю(ТекРодитель)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ВидыЗакрытия.Ссылка КАК Ссылка
        |ИЗ
        |    Справочник.ВидыЗакрытия КАК ВидыЗакрытия
        |ГДЕ
        |    ВидыЗакрытия.Родитель В ИЕРАРХИИ(&Родитель)
        |    И НЕ ВидыЗакрытия.ПометкаУдаления
        |    И НЕ ВидыЗакрытия.ЭтоГруппа";

    Запрос.УстановитьПараметр("Родитель", ТекРодитель);

    РезультатЗапроса = Запрос.Выполнить();

    Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка");
    
КонецФункции
17 Demetres
 
29.03.15
20:10
Нашел это лишнее
ФормаВыбора.СправочникСписок.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВИерархии;
18 Demetres
 
29.03.15
20:12
Нет это не лишнее, к вечеру уже не очень соображается
19 hhhh
 
29.03.15
23:30
может просто колонку Родитель добавить в список. Тогда и отбор появится сам.