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

Есть

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


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

&НаСервере
Процедура УстановитьУсловноеОформление()
    
    УсловноеОформление.Элементы.Очистить();
    
    ПланыВидовХарактеристик.СтатьиРасходов.УстановитьУсловноеОформлениеАналитик(
        УсловноеОформление, Новый Структура("ОтражениеРасходов"));
    
    #Область ОбщаяСобственность
    
    Элемент = УсловноеОформление.Элементы.Добавить();
    
    Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ОСДоляВПравеОбщейСобственностиЧислитель.Имя);
    Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ОСДоляВПравеОбщейСобственностиЗнаменатель.Имя);
    
    ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ОС.ОбщаяСобственность");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Ложь;
    
    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
    Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
    Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не требуется>'"));
    Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
    
    #КонецОбласти
    
    #Область ЖилищноеСтроительство
    
    Элемент = УсловноеОформление.Элементы.Добавить();
    
    Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ОСДатаРегистрацииПравНаОбъектНедвижимости.Имя);
    
    ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ОС.ЖилищноеСтроительство");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Ложь;
    
    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
    Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
    Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не требуется>'"));
    Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
    
    //
    
    Элемент = УсловноеОформление.Элементы.Добавить();
    
    Элемент.Поля.Элементы.Добавить().Поле = Новый ПолеКомпоновкиДанных(Элементы.ОСДатаНачалаПроектирования.Имя);
    
    ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
    
    ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ОС.ЖилищноеСтроительство");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Ложь;
    
    ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Дата");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ОтборЭлемента.ПравоеЗначение = Дата(2008, 1, 1, 0, 0, 0);
    
    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
    Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
    Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<не требуется>'"));
    Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
    
    #КонецОбласти
    
КонецПроцедуры
8 Tolstiy Beremenniy
 
04.09.18
07:21
Как срабатывает блокировка и разблокировка поля по
установке и снятию флажка не понятно!!!!
9 catena
 
04.09.18
07:29
(7)Все ж понятно. Если не установлен флаг ЖилищноеСтроительство или Объект.Дата больше 2008 года, то для поля ОСДатаНачалаПроектирования и ТолькоПросмотр=Истина.
10 Tolstiy Beremenniy
 
04.09.18
07:32
(9) Мне нужно вот это поле

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

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

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

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

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

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

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

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

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

   Мисти
Ну а что я могла не учесть? Советуйте!
И для среднестатической тетки - я совсем не дура.
   ДенисЧ
Документацию не читаешь
   Мисти
А зачем мне документация?? Я через неделю всё забуду и никогда больше не буду это использовать!
18 Tolstiy Beremenniy
 
04.09.18
08:28
(16) Да только просмотр не заметил.
Ну а как это работает при установке или снятии флажка.
Не очевидно.
19 Tolstiy Beremenniy
 
04.09.18
08:32
Я сделал вот так

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


Как сейчас это же сделать при открытии документа?
20 hhhh
 
04.09.18
08:40
(19) открываешь процедуру ПриОткрытии

здесь нажимаешь Ctrl-C, там нажимаешь Cthl-V
21 Tolstiy Beremenniy
 
04.09.18
08:42
В процедуре при открытии на клиенте, пишет итератор
для значения не определен.
Что я не так сделал?

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

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

но как будет по коду правильно?

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

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    УстановитьУсловноеОформление();
    
    Если Параметры.Свойство("АвтоТест") Тогда
        Возврат;
    КонецЕсли;
    
    ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
    
    Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
        ПриСозданииЧтенииНаСервере();
    КонецЕсли;
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
    ИнтеграцияС1СДокументооборот.ПриСозданииНаСервере(ЭтаФорма);
    СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
    
    Для каждого СтрОС из Объект.ОС Цикл
        Сообщить(СтрОС);    
    КонецЦикла;
    
КонецПроцедуры
40 hhhh
 
04.09.18
09:53
(39) у тебя это поле

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

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

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

Поэтому делай как в (19), устанавливай доступность только в текущей строке.
41 catena
 
04.09.18
09:54
(39)Ты скажи, как думаешь, доступность - свойство объекта или формы?
42 Мимохожий Однако
 
04.09.18
09:54
Он поймёт, пока не встанет отладчиком на проблемный фрагмент.
43 Tolstiy Beremenniy
 
04.09.18
09:56
как на сервере то управлять доступностью?
44 Tolstiy Beremenniy
 
04.09.18
09:57
(41) конечно формы
45 catena
 
04.09.18
10:00
(44)А зачем тогда в (39) объект перебираешь?
46 Tolstiy Beremenniy
 
04.09.18
10:02
(45) Но и перебирать же нужно на клиенте????
На сервере то какая Доступность может быть
47 Tolstiy Beremenniy
 
04.09.18
10:03
(45) Подскажите пожалуйста как будет правильно?
48 Tolstiy Beremenniy
 
04.09.18
10:08
(40) Это поле табличной части, оно есть у каждой строки
когда ввели данные, галку где то поставили где то нет
при открытии это же нужно задать тоже.
Иначе при открытии галка стоит, поле должно быть не доступно, а оно доступно. Это же ошибка функциональности.
49 dmt
 
04.09.18
10:13
(47) тебе готовый пример привели.

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

Если это работает, код (19) не нужен я так понимаю.
56 hhhh
 
04.09.18
10:57
(53) да, Доступность прекрасно устанавливается и НаСервере. Что-то ты зря на сервер бочку катишь.
57 Tolstiy Beremenniy
 
04.09.18
11:00
(56) Понял. Как тогда это сделать?

  Для каждого СтрОС из ЭтаФорма.ОС Цикл
        Сообщить(СтрОС);    
    КонецЦикла;
58 dmt
 
04.09.18
11:05
(53) не нужно
59 Tolstiy Beremenniy
 
04.09.18
11:11
(58) Как не нужно? Это необходимо!!!!

Я вставил вот этот чудесный код в процедуру
УстановитьУсловноеОформление(). Стало работать и при
открытии и при изменении в строке!!!!

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