Имя: Пароль:
1C
1С v8
События форм
0 Xamio
 
12.09.19
12:54
1С 8.3 ERP 2.4 УФ
Описал элемент формы документа в общем модуле СобытияФорм. Элемент "ПолеВвода" на форму выводится. Как можно управлять видимостью этого созданного таким образом документа? Я хочу чтобы видимость этого поля зависела от значения в одном из полей этой же формы. Попытался программно добавить условное оформление - не работает. В отладчике при открытой форме просмотрел Элементы, там моего поля.
1 Xamio
 
12.09.19
12:55
*там нет моего поля
2 sqr4
 
12.09.19
12:58
(0) что значит не работает? Не меняет видимость или с ошибкой валится. Получай через квадратные скобки
3 Xamio
 
12.09.19
13:01
(2) условное оформление

    Элемент = Форма.УсловноеОформление.Элементы.Добавить();

    ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
    ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Форма.Элементы.рар_Договор.Имя);

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

    Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Истина);

в последующем в отладке просматриваю УсловноеОформление формы, там моя эта моя настройка присутствует, но ни ошибок ни ожидаемого эффекта
4 Xamio
 
12.09.19
13:04
мне кажется это связано с тем что я не вижу моего поля "рар_Договор" при отладке в Элементах формы, УсловноеОформление его тоже похоже не видит, ошибки не выдает, но и не работает. В таком случае как по другому можно это реализовать?
5 Xamio
 
12.09.19
13:10
описание элемента УсловногоОформления сделано тоже в общем модуле СобытияФорм, сразу после описания вывода самого поля. Если бы это было сделно в форме документа, то ругалось бы на

  ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Форма.Элементы.рар_Договор.Имя);

а именно на рар_Договор как раз
6 aleks_default
 
12.09.19
13:41
ПолеЭлемента.Использование = истина
7 aleks_default
 
12.09.19
13:44
Вообще Использование везде в истину надо поставить и в полях и в отборе
8 sqr4
 
12.09.19
14:24
а нахера условное оформление?
Элементы["НазваниеТвоегоЭлемента"].Видимость = ЗначениеФлага;
Нет?
9 Xamio
 
12.09.19
15:56
(6) везде истина установлена, при отладке просматривал коллекцию условного форматирования
10 Xamio
 
12.09.19
15:57
(8) можно, но в Элементах нет моего элемента
11 Xamio
 
12.09.19
15:57
(8) пробовал и через скобки
12 aleks_default
 
12.09.19
16:03
У тебя там контекста нет формы в этом общем модуле просто. Вот так попробуй
Форма.Элементы.НазваниеТвоегоЭлемента.Видимость = ЗначениеФлага
13 aleks_default
 
12.09.19
16:07
Но и через условное оформление должно работать. Условие точно выполняется?
14 aleks_default
 
12.09.19
16:08
Объект.ЗаданиеВыполняет - тип значения точно перечисление?
15 Xamio
 
12.09.19
16:11
(12) в общем модуле СобытияФорм вызываются процедуры ПриСозданииНаСервере и ПриЧтенииНаСервере форм. Я всё это пришу в первой процедуре которая выполняется единожды, поэтому в данном случае простой инициализации не достаточно, она один раз выполнится и всё, а при изменении ЗданчеияФлага, видимость элемента на форме не изменится. Поэтому и использую УсловноеОформление
16 sqr4
 
12.09.19
16:13
(15) как я понял обязательное условие по разработке, расширение не придумать?
17 sqr4
 
12.09.19
16:14
Покажи код как ты добавляешь элемент на форму и где прописываешь обработчик события на изменения видимости
18 Xamio
 
12.09.19
16:15
(16) ну чтобы типовую форму не курочить, так то логично. Просто непонятка с видимостью, должно работать, но описанный таким образом элемент не видится среди элементов формы
19 Xamio
 
12.09.19
16:24
(17)
Общий модуль СобытияФорм

Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка, ДополнительныеПараметры = Неопределено) Экспорт
    
    Если Форма.ИмяФормы = "Документ.ЗаданиеНаПеревозку.Форма.ФормаДокумента" Тогда
        
        // описание элемента
        Элемент = Форма.Элементы.Вставить("Договор", Тип("ПолеФормы"), Форма.Элементы.ГруппаПраво, Форма.Элементы.ГруппаСклад);
        Элемент.Вид = ВидПоляФормы.ПолеВвода;
        Элемент.АвтоМаксимальнаяШирина = Ложь;
        Элемент.МаксимальнаяШирина     = 28;
        Элемент.ПутьКДанным = "Объект.Договор";
        Элемент.Видимость    = Ложь;
        
        // условное оформление
        Элемент = Форма.УсловноеОформление.Элементы.Добавить();

        ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
        ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Форма.Элементы.Договор.Имя);

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

        Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Истина);
        
    КонецЕсли;

КонецПроцедуры
20 aleks_default
 
12.09.19
16:46
Так отладка что показывает? Элемент добавляется на форму или нет?
21 aleks_default
 
12.09.19
16:48
Если в ПриСозданииНаСервере Поле есть, а при открытии его нет, значит где-то в промежутке его что-то удаляет
22 Xamio
 
12.09.19
16:50
Элемент на форме, всё ок, работает. Но в отладке (например в процедуре при изменении какого либо поля) среди Элементов его нет.
23 sqr4
 
12.09.19
16:55
Элемент = Форма.Элементы.Вставить("Договор", Тип("ПолеФормы"), Форма.Элементы.ГруппаПраво, Форма.Элементы.ГруппаСклад);
В качестве родителя что передается, не понял вот это
24 sqr4
 
12.09.19
16:55
(22) он есть среди элементов, но он внутри родителя Элементы.РодительТвоегоЭЛемента.Договор
25 sqr4
 
12.09.19
16:56
Соответственно и тут ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Форма.Элементы.Договор.Имя); надо происать полное имя
26 sqr4
 
12.09.19
16:59
(25) хотя тут нет
27 sqr4
 
12.09.19
17:01
хм, а у меня и среди ЭЛементы есть
28 Xamio
 
12.09.19
17:06
(27) да, среди Элементы есть, просмотрел, но не работает условное оформление. А у тебя?
29 aleks_default
 
12.09.19
17:12
Попробуй сделать обратное условие. Сперва поставить видимость у поля =  истина, в условиях отбора НеРавно и оформление Видимость = ложь
30 Xamio
 
12.09.19
17:26
(29) попробовал, не работает так же
31 ам794123
 
12.09.19
17:29
есть такой метод ЗначениеВРеквизитФормы
32 sqr4
 
12.09.19
17:31
такое условное оформление не работает вообще... даже с имеющимися в конфигураторе элементами формы
33 sqr4
 
12.09.19
17:35
а на добавление новых объектов нет ограничений? Попробуй через функциональные опции
34 sqr4
 
12.09.19
17:40
https://forum.infostart.ru/forum9/topic83976/
ну и собственно ответ Поручика на эту тему
35 ам794123
 
12.09.19
17:46
(34) придется вернуться к пункту (8)
36 sqr4
 
12.09.19
17:49
(35) это как я понял, обработчик нужно будет на поле источник видимость набрасывать, а если он там уже есть, то еще как то.
Как я понял http://catalog.mista.ru/public/1009429/ тут как то можно заюзать функциональные опции
37 Xamio
 
12.09.19
18:02
(34) В ERP есть документ ЗаданиеНаПеревозку, в форме есть процедура УстановитьУсловноеОформление(), которая задаёт условное оформление для поля типа Справочник, задаётся оформление "ОтметкаНеЗаполненного" - это типовой код, т.е. не совсем наверное прав Поручик
38 sqr4
 
13.09.19
10:28
(37) в любом случае не пашет оно даже если все есть на форме и настраивать через конфигуратор. Меняй подход
39 sqr4
 
13.09.19
11:14
(37) цвет фона меняет, с видимостью походу не совладать условным оформлением.
40 aleks_default
 
13.09.19
11:16
(38)Если не пашет, то нафига в типовой ERP это пишут? Вот кусок кода из типовой

//
    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();

    ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
    ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементыФормы[ИмяПоляВводаСтавкиНДС].Имя);

    ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
    ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементыФормы[ИмяПоляВводаСуммыНДС].Имя);

    ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
    ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ЭлементыФормы[ИмяПоляВводаСуммыСНДС].Имя);
    
    СписокНалогообложенийБезНДС = Новый СписокЗначений;
    СписокНалогообложенийБезНДС.Добавить(Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяЕНВД);
    СписокНалогообложенийБезНДС.Добавить(Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС);
    СписокНалогообложенийБезНДС.Добавить(Перечисления.ТипыНалогообложенияНДС.ОблагаетсяНДСУПокупателя);
    
    ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.НалогообложениеНДС");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ОтборЭлемента.ПравоеЗначение = СписокНалогообложенийБезНДС;
    
    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
41 aleks_default
 
13.09.19
11:20
(40)Хотя правда, это УФ для поля таб. части Товары. Наверное действительно для поля шапки видимость через условное оформление не работает.
42 aleks_default
 
13.09.19
11:23
Там в оформлении есть еще параметр "Отображать" может его еще попробовать? ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь); - тоже не работает?
43 sqr4
 
13.09.19
11:41
(42) таже шлюпа, помоему для дока закупки смотрел реквизит направление деятельность там через ФУ убирался