Пока, так сказать, первая попытка, посему прошу не судить строго. Надеюсь, кому-то пригодится...
Штатная работа с булевым значением в табличном поле крайне неудобна, приходится выбирать либо информативное и понятное отображение, либо удобство управления с контролем изменения значения. А очень хочется и то и другое.
Но если ставим все красиво, исчезает возможность контролировать изменение этой ячейки... Исчезает возможность задать процедуру "ПриИзменении".
Но есть возможность всё-же реализовать такую возможность.
Описываю процедуру по шагам (есть ньюансы, поэтому прошу строго придерживаться порядка, а после получения результата уже можно "поэкспериментировать"):
1. Создаем в нужном табличном поле реквизит типа Булево, назовем его, к примеру, Имя_реквизита. Можно реквизит не создавать, а использовать переменную, если галочку не нужно хранить в документе (С) webester
2. Создаем колонку на форме в табличном поле
3. Указываем Имя=Имя_реквизита
4. Пропускаем поле Данные (поле должно оставаться пустым, это важно!)
5. Указываем ЭлементУправления=Флажок, появится поле "ДанныеФлажка"
6. Указываем ДанныеФлажка=Имя_реквизита
7. Указываем РежимРедактирования=Непосредственно
Как мы видим, возможность перехватить событие "ПриИзменении" исчезает из свойств... что же делать? Смотрим дальше...
8. Заходим в свойства табличного поля
9. Создаем процедуру на событие ПриОкончанииРедактирования с таким текстом:
Если Элемент.ТекущаяКолонка.Имя="Имя_реквизита" Тогда
Имя_реквизита_ПриИзменении();
КонецЕсли;9а. Как вариант (С) Yashazz, можно использовать процедуру ПриИзмененииФлажка, тогда Элемент.ТекущаяКолонка.Имя при желании можно сократить до Колонка.Имя,
но в таком случае мы не сможем использовать флаг ОтменаРедактирования (например, если нужно динамически задать условия изменения, например, доступность).
Вот мой пример использования для сравнения обеих процедур:Если Колонка.Имя="Имя_реквизита" ТогдаИмя_реквизита_ПриИзменении();КонецЕсли;
Процедура УслугиПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если НачисленияСотрудникам.Найти(Элемент.ТекущаяСтрока.НомерСтроки, "НомерУслуги")=Неопределено Тогда
НачислитьЗаРаботу(Элемент.ТекущаяСтрока);
КонецЕсли;
Если Элемент.ТекущаяКолонка.Имя="РаботаВкл" или Элемент.ТекущаяКолонка.Имя="МатериалВкл" Тогда
УслугиСуммаПриИзменении();
КонецЕсли;
КонецПроцедуры
Процедура УслугиПриИзмененииФлажка(Элемент, Колонка)
Если НачисленияСотрудникам.Найти(Элемент.ТекущаяСтрока.НомерСтроки, "НомерУслуги")=Неопределено Тогда
НачислитьЗаРаботу(Элемент.ТекущаяСтрока);
КонецЕсли;
Если Колонка.Имя="РаботаВкл" или Колонка.Имя="МатериалВкл" Тогда
УслугиСуммаПриИзменении();
КонецЕсли;
КонецПроцедуры
10. Создаем процедуру Имя_реквизита_ПриИзменении(), где, например, производим пересчет текущей строки в зависимости от значения реквизита Имя_реквизита.
*к примеру, лично у меня в зависимости от показания меняется сумма услуги в текущей строке:
Стр=ЭлементыФормы.Услуги.ТекущаяСтрока;
Стр.СуммаМатериала= ?(Стр.МатериалВкл,Стр.ЦенаМатериала* Стр.Количество, 0);
Стр.СуммаРаботы= ?(Стр.РаботаВкл,Стр.ЦенаРаботы* Стр.Количество, 0);П.С. если кто нибудь из старожилов может уделить мне пару минут внимания и объяснить, как правильно и грамотно публиковать свои наработки, буду очень благодарен. Мой скайп - valhalla_resa.