Каталог решений - Полноценное использование галочек для типа Булево в табличной части

Полноценное использование галочек для типа Булево в табличной части

Полноценное использование галочек для типа Булево в табличной части

В наличии

Предлагаю более удобный способ использования галочек в табличном поле, чем тот, до которого можно докопаться по умолчанию.

Категория:

Описание

Часто нахожу интересные решения, которых в нете найти невозможно или сложно. Но есть нестерпимое желание поделиться ими с народом)

Пока, так сказать, первая попытка, посему прошу не судить строго. Надеюсь, кому-то пригодится…

Штатная работа с булевым значением в табличном поле крайне неудобна, приходится выбирать либо информативное и понятное отображение, либо удобство управления с контролем изменения значения. А очень хочется и то и другое.

Но если ставим все красиво, исчезает возможность контролировать изменение этой ячейки… Исчезает возможность задать процедуру «ПриИзменении».

Но есть возможность всё-же реализовать такую возможность.
Описываю процедуру по шагам (есть ньюансы, поэтому прошу строго придерживаться порядка, а после получения результата уже можно «поэкспериментировать»):

1. Создаем в нужном табличном поле реквизит типа Булево, назовем его, к примеру, Имя_реквизита. Можно реквизит не создавать, а использовать переменную, если галочку не нужно хранить в документе (С) webester
2. Создаем колонку на форме в табличном поле
3. Указываем Имя=Имя_реквизита
4. Пропускаем поле Данные (поле должно оставаться пустым, это важно!)
5. Указываем ЭлементУправления=Флажок, появится поле «ДанныеФлажка»
6. Указываем ДанныеФлажка=Имя_реквизита
7. Указываем РежимРедактирования=Непосредственно

Как мы видим, возможность перехватить событие «ПриИзменении» исчезает из свойств… что же делать? Смотрим дальше…

8. Заходим в свойства табличного поля
9. Создаем процедуру на событие ПриОкончанииРедактирования с таким текстом:

Если Элемент.ТекущаяКолонка.Имя="Имя_реквизита" Тогда
   Имя_реквизита_ПриИзменении();
КонецЕсли;

9а. Как вариант (С) Yashazz, можно использовать процедуру ПриИзмененииФлажка, тогда Элемент.ТекущаяКолонка.Имя при желании можно сократить до Колонка.Имя,
но в таком случае мы не сможем использовать флаг ОтменаРедактирования (например, если нужно динамически задать условия изменения, например, доступность).

Если Колонка.Имя="Имя_реквизита" Тогда
   Имя_реквизита_ПриИзменении();
КонецЕсли;

Вот мой пример использования для сравнения обеих процедур:

Процедура УслугиПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если НачисленияСотрудникам.Найти(Элемент.ТекущаяСтрока.НомерСтроки, "НомерУслуги")=Неопределено Тогда
НачислитьЗаРаботу(Элемент.ТекущаяСтрока);
КонецЕсли;
Если Элемент.ТекущаяКолонка.Имя="РаботаВкл" или Элемент.ТекущаяКолонка.Имя="МатериалВкл" Тогда
УслугиСуммаПриИзменении();
КонецЕсли;
КонецПроцедуры

Процедура УслугиПриИзмененииФлажка(Элемент, Колонка)
Если НачисленияСотрудникам.Найти(Элемент.ТекущаяСтрока.НомерСтроки, "НомерУслуги")=Неопределено Тогда
НачислитьЗаРаботу(Элемент.ТекущаяСтрока);
КонецЕсли;
Если Колонка.Имя="РаботаВкл" или Колонка.Имя="МатериалВкл" Тогда
УслугиСуммаПриИзменении();
КонецЕсли;
КонецПроцедуры

10. Создаем процедуру Имя_реквизита_ПриИзменении(), где, например, производим пересчет текущей строки в зависимости от значения реквизита Имя_реквизита.

*к примеру, лично у меня в зависимости от показания меняется сумма услуги в текущей строке:

Стр=ЭлементыФормы.Услуги.ТекущаяСтрока;
Стр.СуммаМатериала= ?(Стр.МатериалВкл,Стр.ЦенаМатериала* Стр.Количество, 0);
Стр.СуммаРаботы= ?(Стр.РаботаВкл,Стр.ЦенаРаботы* Стр.Количество, 0);

П.С. если кто нибудь из старожилов может уделить мне пару минут внимания и объяснить, как правильно и грамотно публиковать свои наработки, буду очень благодарен. Мой скайп — valhalla_resa.

has been added to your cart:
Оформление заказа