Имя: Пароль:
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) таже шлюпа, помоему для дока закупки смотрел реквизит направление деятельность там через ФУ убирался
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший