Вход | Регистрация


1С:Предприятие ::

Метки: 

обработчик поля типа флажок

Я
   TolstiyBeremenniy
 
04.09.18 - 06:24
Управляемые формы. Табличная часть документа. Есть поле типа флажок.
При установке или снятии с него значения, становится доступным или
не доступным одно из соседних полей. Добавил ещё поле в табличную
часть. Сейчас хочу добавить код в этот обработчик, что бы делать
доступным или не доступным новое поле. Но смотрю в обработчике
события при изменении поля флажок, ничего не задано. А обработчик
работает. Где и как найти процедуру, которая делает доступным
или не доступным соседнее поле? И доработать её.
 
 
   TolstiyBeremenniy
 
1 - 04.09.18 - 06:30
Конфигурация 1С:ERP Управление предприятием 2 (2.4.3.144).
Смотрю в коде там вообще какая то фантастика.
Как же задан этот обработчик делающий доступным или не
доступным поле в табличной части, при установке
или снятии флажка?
   lxndr
 
2 - 04.09.18 - 06:31
смотри УсловноеОформление формы
   TolstiyBeremenniy
 
3 - 04.09.18 - 06:36
(2) Процедура такая?

Есть

&НаСервере
Процедура УстановитьУсловноеОформление()


Но в ней вообще ничего не понятно.
   hhhh
 
4 - 04.09.18 - 06:53
(3) попробуйте у табличного поля поискать событие. ПриИзмененииФлажка
   TolstiyBeremenniy
 
5 - 04.09.18 - 07:12
(4) Вообще нет ни одного обработчика. Ни у табличного поля, ни у реквизита флажок.
Я несколько обескуражен.
Управляемые формы, интерфейс такси.
Хочу сделать это сам. Задаю обработчик реквизиту флажок при изменении.
Как отловить значение флажка, и задать доступность или
не доступность нужному полю?
Подскажите пожалуйста.
   catena
 
6 - 04.09.18 - 07:16
(3)А что в процедуре-то?
   TolstiyBeremenniy
 
7 - 04.09.18 - 07:19
(6) Там ппц, какой то. Она на сервере выполняется.
Пока отладка на сервере не работает. Как видно к ней
не подобраться, даже по коду. Как это сделать самому?
Я хочу делать в процедуре при изменении флажка.

&НаСервере
Процедура УстановитьУсловноеОформление()
    
    УсловноеОформление.Элементы.Очистить();
    
    ПланыВидовХарактеристик.СтатьиРасходов.УстановитьУсловноеОформлениеАналитик(
        УсловноеОформление, Новый Структура("ОтражениеРасходов"));
    
    #Область ОбщаяСобственность

    
    Элемент = УсловноеОформление.Элементы.Добавить();
    
    Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ОСДоляВПравеОбщейСобственностиЧислитель.Имя);
    Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ОСДоляВПравеОбщейСобственностиЗнаменатель.Имя);
    
    ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ОС.ОбщаяСобственность");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Ложь;
    
    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
    Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
    Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не требуется>'"));
    Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
    
    #КонецОбласти

    
    #Область ЖилищноеСтроительство

    
    Элемент = УсловноеОформление.Элементы.Добавить();
    
    Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ОСДатаРегистрацииПравНаОбъектНедвижимости.Имя);
    
    ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ОС.ЖилищноеСтроительство");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Ложь;
    
    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
    Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
    Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не требуется>'"));
    Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
    
    //

    
    Элемент = УсловноеОформление.Элементы.Добавить();
    
    Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ОСДатаНачалаПроектирования.Имя);
    
    ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
    
    ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ОС.ЖилищноеСтроительство");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Ложь;
    
    ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Дата");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ОтборЭлемента.ПравоеЗначение = Дата(2008, 1, 1, 0, 0, 0);
    
    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
    Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
    Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не требуется>'"));
    Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
    
    #КонецОбласти

    
КонецПроцедуры
   TolstiyBeremenniy
 
8 - 04.09.18 - 07:21
Как срабатывает блокировка и разблокировка поля по
установке и снятию флажка не понятно!!!!
   catena
 
9 - 04.09.18 - 07:29
(7)Все ж понятно. Если не установлен флаг ЖилищноеСтроительство или Объект.Дата больше 2008 года, то для поля ОСДатаНачалаПроектирования и ТолькоПросмотр=Истина.
   TolstiyBeremenniy
 
10 - 04.09.18 - 07:32
(9) Мне нужно вот это поле

ДатаРегистрацииПравНаОбъектНедвижимости

Оно нигде не обрабатывается вообще. Я искал везде же.

А флаг вот этот ОСЖилищноеСтроительство.
 
 Рекламное место пустует
   TolstiyBeremenniy
 
11 - 04.09.18 - 07:33
В процедуре при изменении флага, вот так я могу получить
значение поля.

Элементы.ОС.ТекущиеДанные.ДатаРегистрацииПравНаОбъектНедвижимостиПрочее

Как мне установить или снять его доступность на форме?
Подскажите пожалуйста.
   catena
 
12 - 04.09.18 - 07:38
(10)А это что?

    #Область ЖилищноеСтроительство


    
    Элемент = УсловноеОформление.Элементы.Добавить();
    
    Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ОСДатаРегистрацииПравНаОбъектНедвижимости.Имя);
    
    ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ОС.ЖилищноеСтроительство");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Ложь;
    
    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
    Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
    Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не требуется>'"));
    Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
   TolstiyBeremenniy
 
13 - 04.09.18 - 07:47
(12) Скажите пожалуйста, что с этого можно понять?
Как срабатывает блокировка и разблокировка поля по установке флажка?
   catena
 
14 - 04.09.18 - 07:54
(13)Сделайте форму с любым динамическим списком, откройте в режиме предприятия и поиграйтесь с условным оформлением вручную. Откройте справку и почитайте. Код в (12) не такой уж сложный для понимания.
   TolstiyBeremenniy
 
15 - 04.09.18 - 07:59
(14) Там про доступность нет слова.
Мне нужно делать задачи, нет времени на эксперименты.
Тем более я не понимаю что нужно сделать и как поэксперементировать.
   catena
 
16 - 04.09.18 - 08:04
(15)Ну как нет про доступность??
    Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

>>"Мне нужно делать задачи, нет времени на эксперименты."

Что-то мне напомнило:

   /users.php?id=79305" target="_blank" class="registered-user">Мисти
Ну а что я могла не учесть? Советуйте!
И для среднестатической тетки - я совсем не дура.
   /users.php?id=3566" target="_blank" class="registered-user">ДенисЧ
Документацию не читаешь
   Мисти
А зачем мне документация?? Я через неделю всё забуду и никогда больше не буду это использовать!
   TolstiyBeremenniy
 
18 - 04.09.18 - 08:28
(16) Да только просмотр не заметил.
Ну а как это работает при установке или снятии флажка.
Не очевидно.
   TolstiyBeremenniy
 
19 - 04.09.18 - 08:32
Я сделал вот так

    Если Элементы.ОС.ТекущиеДанные.ЖилищноеСтроительство Тогда
        Элементы.ОСДатаРегистрацииПравНаОбъектНедвижимостиПрочее.Доступность = Ложь;
    Иначе
        Элементы.ОСДатаРегистрацииПравНаОбъектНедвижимостиПрочее.Доступность = Истина;
    КонецЕсли;


Как сейчас это же сделать при открытии документа?
   hhhh
 
20 - 04.09.18 - 08:40
(19) открываешь процедуру ПриОткрытии
здесь нажимаешь Ctrl-C, там нажимаешь Cthl-V
   TolstiyBeremenniy
 
21 - 04.09.18 - 08:42
В процедуре при открытии на клиенте, пишет итератор
для значения не определен.
Что я не так сделал?
    Для каждого СтрОС из Элементы.ОС Цикл
        
    КонецЦикла;
   МимохожийОднако
 
22 - 04.09.18 - 08:46
(21) Включи отладчик на ошибке и сравни ожидаемое с фактом.
   МимохожийОднако
 
23 - 04.09.18 - 08:47
(7) Работай на файловой копии в чистой базе с отладчиком и найдешь как работает.
   TolstiyBeremenniy
 
24 - 04.09.18 - 08:47
Элементы.ОС - таблица формы, её и хотел перебрать
   TolstiyBeremenniy
 
25 - 04.09.18 - 08:47
(23) мне тут нужно делать, на этой версии SQL Server
   TolstiyBeremenniy
 
26 - 04.09.18 - 08:48
Подскажите как правильно будет?
   МимохожийОднако
 
27 - 04.09.18 - 08:48
(25) Включи отладку на сервере в таком случае.
   TolstiyBeremenniy
 
28 - 04.09.18 - 08:52
(27) Пока нет возможности.
При открытии делаю на клиенте.
   МимохожийОднако
 
29 - 04.09.18 - 08:55
(28) Если нет возможности, то разобраться можно и на файловой копии. ИМХО. Чего ты так вцепился в SQL?
   TolstiyBeremenniy
 
30 - 04.09.18 - 08:57
можно ли это сделать на клиенте при открытии?
   МимохожийОднако
 
31 - 04.09.18 - 08:58
(30) нет
   TolstiyBeremenniy
 
32 - 04.09.18 - 09:03
деалать в ПриСозданииНаСервере() ?

Подскажите по коду?
   shadow_sw
 
33 - 04.09.18 - 09:06
судя по теме FallingStar №3? )
 
 
   МимохожийОднако
 
34 - 04.09.18 - 09:14
(32) Делать процедуру с директивой на сервере для работы с табличной частью.
   TolstiyBeremenniy
 
35 - 04.09.18 - 09:20
(34) Пробую при создании на сервере

но как будет по коду правильно?
    Для каждого СтрОС из Объект.ОС Цикл
        Сообщить(СтрОС);    
    КонецЦикла;
   МимохожийОднако
 
36 - 04.09.18 - 09:31
(35) Если работает так как хотел, то код правильный.
Проверил, работает? ))
   TolstiyBeremenniy
 
37 - 04.09.18 - 09:39
выдает

ДанныеФормыЭлементКоллекции

как это обрабатывать правильно?
   МимохожийОднако
 
38 - 04.09.18 - 09:45
(37) Покажи весь код и процедуры с директивами
   TolstiyBeremenniy
 
39 - 04.09.18 - 09:49
(38) Да я просто пробую, не пойму как управлять доступностью полей

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    УстановитьУсловноеОформление();
    
    Если Параметры.Свойство("АвтоТест") Тогда
        Возврат;
    КонецЕсли;
    
    ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
    
    Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
        ПриСозданииЧтенииНаСервере();
    КонецЕсли;
    // СтандартныеПодсистемы.ПодключаемыеКоманды

    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды

    ИнтеграцияС1СДокументооборот.ПриСозданииНаСервере(ЭтаФорма);
    СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
    
    Для каждого СтрОС из Объект.ОС Цикл
        Сообщить(СтрОС);    
    КонецЦикла;
    
КонецПроцедуры
   hhhh
 
40 - 04.09.18 - 09:53
(39) у тебя это поле
    Элементы.ОСДатаРегистрацииПравНаОбъектНедвижимостиПрочее

одно на форме. ты не сможешь одновременно, чтобы оно было и Ложь и Истина.

Поэтому твой подход: при открытии для каждой строчки проставить изначально бредовый. Не получится.

Поэтому делай как в (19), устанавливай доступность только в текущей строке.
   catena
 
41 - 04.09.18 - 09:54
(39)Ты скажи, как думаешь, доступность - свойство объекта или формы?
   МимохожийОднако
 
42 - 04.09.18 - 09:54
Он поймёт, пока не встанет отладчиком на проблемный фрагмент.
   TolstiyBeremenniy
 
43 - 04.09.18 - 09:56
как на сервере то управлять доступностью?
   TolstiyBeremenniy
 
44 - 04.09.18 - 09:57
(41) конечно формы
   catena
 
45 - 04.09.18 - 10:00
(44)А зачем тогда в (39) объект перебираешь?
   TolstiyBeremenniy
 
46 - 04.09.18 - 10:02
(45) Но и перебирать же нужно на клиенте????
На сервере то какая Доступность может быть
   TolstiyBeremenniy
 
47 - 04.09.18 - 10:03
(45) Подскажите пожалуйста как будет правильно?
   TolstiyBeremenniy
 
48 - 04.09.18 - 10:08
(40) Это поле табличной части, оно есть у каждой строки
когда ввели данные, галку где то поставили где то нет
при открытии это же нужно задать тоже.
Иначе при открытии галка стоит, поле должно быть не доступно, а оно доступно. Это же ошибка функциональности.
   dmt
 
49 - 04.09.18 - 10:13
(47) тебе готовый пример привели.
    Элемент = УсловноеОформление.Элементы.Добавить();
    
    Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.<<ТвоеПолеВвода>>.Имя);
    
    ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ОС.ЖилищноеСтроительство");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Ложь;
    
    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
    Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
    Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не требуется>'"));
    Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
 
 Рекламное место пустует
   TolstiyBeremenniy
 
50 - 04.09.18 - 10:22
(49) Буду пробовать, но ранее такой подход не использовался.
Я хотел сделать по понятному. Перебором строк, и установкой
доступности поля для каждой строки как в (19).
Так нельзя что ли сделать?
   catena
 
51 - 04.09.18 - 10:35
(50)Можно, но ты не умеешь. А еще представь следующего разработчика, который будет вынужден поддерживать код, устанавливающий доступность в десяти разных процедурах пятнадцатью разными способами. Это невежливо.
   dmt
 
52 - 04.09.18 - 10:41
(50) тебе уже все написали в (40)
"Поэтому делай как в (19), устанавливай доступность только в текущей строке."
   TolstiyBeremenniy
 
53 - 04.09.18 - 10:52
(51) Подскажите.
(52) Это нужно делать и при открытии.
   catena
 
54 - 04.09.18 - 10:54
(53)Подсказали в (49). Тебе какая разница в чем разбираться, ты ни то, ни то не умеешь.
   TolstiyBeremenniy
 
55 - 04.09.18 - 10:56
(54) Я уже это взял применяю.
Только не понял как это отрабатывает и при открытии и при
изменении флага в строке.

Если это работает, код (19) не нужен я так понимаю.
   hhhh
 
56 - 04.09.18 - 10:57
(53) да, Доступность прекрасно устанавливается и НаСервере. Что-то ты зря на сервер бочку катишь.
   TolstiyBeremenniy
 
57 - 04.09.18 - 11:00
(56) Понял. Как тогда это сделать?
  Для каждого СтрОС из ЭтаФорма.ОС Цикл
        Сообщить(СтрОС);    
    КонецЦикла;
   dmt
 
58 - 04.09.18 - 11:05
(53) не нужно
   TolstiyBeremenniy
 
59 - 04.09.18 - 11:11
(58) Как не нужно? Это необходимо!!!!

Я вставил вот этот чудесный код в процедуру 
УстановитьУсловноеОформление(). Стало работать и при
открытии и при изменении в строке!!!!
    Элемент                                = УсловноеОформление.Элементы.Добавить();
    Элемент.Поля.Элементы.Добавить().Поле  = Новый ПолеКомпоновкиДанных(Элементы.ОСДатаРегистрацииПравНаОбъектНедвижимостиПрочее.Имя);
    ОтборЭлемента                          = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение            = Новый ПолеКомпоновкиДанных("Объект.ОС.ЖилищноеСтроительство");
    ОтборЭлемента.ВидСравнения             = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение           = Истина;
    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста",            ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
    Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
    Элемент.Оформление.УстановитьЗначениеПараметра("Текст",                 НСтр("ru = '<не требуется>'"));
    Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр",        Истина);
   catena
 
60 - 04.09.18 - 11:16
(59)мирэкал
   TolstiyBeremenniy
 
61 - 04.09.18 - 11:34
(60) Что?
   dmt
 
62 - 04.09.18 - 11:36
(59) это беременность, хочется непонятного!!!
   catena
 
63 - 04.09.18 - 11:41
(61)Чудеса, говорю. Даже до сотого поста не дотянули.



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует