Имя: Пароль:
1C
 
Отмена выделения ячейки в табличном поле
0 Droning1C
 
16.04.20
17:10
Добрый день! Обычные формы, Табличное поле с типом значения ДокументСписок. Предположим в этом табличном поле нет никаких условных оформлений. Все по стандарту. При нажатии на ячейку - ячейка приобретает темно-синий цвет, рамка ячейки становится пунктирной, срабатывают соответствующие обработчики событий и тд. При повторном нажатии на ту же ячейку темно-синий цвет меняется на белый, пунктир по контуру остается. Как обработать событие повторного нажатия на одну и ту же ячейку?
1 Droning1C
 
16.04.20
17:12
Если более подробно.. Мне нужно считать сумму значений в колонке по выделенным ячейкам. Выделяю 5 ячеек подряд. Сумма считается правильно. Повторно нажимаю на одну из выделенных ячеек - Сумма не уменьшается на значение повторно выделенной ячейки.
2 dezss
 
16.04.20
17:19
Ну так запоминай те, на которые нажимали. В то же соответствие пихай, а при втором клике удаляй.
3 Droning1C
 
16.04.20
17:22
(2) думал про это уже, просто может есть какие-то более очевидные для знающего человека варианты, о которых я даже не подозреваю.
4 Droning1C
 
16.04.20
17:26
а чего-то типа коллекции выделенных ячеек нет?
5 Droning1C
 
17.04.20
11:21
(2) Ну хорошо, допустим соответствие или структура. Однозначно идентифицировать ячейку я могу через номер документа в строке и имя колонки.  Тут вроде ясно более менее. Но в какой момент это соответствие или структуру создавать и в какой момент чистить...

Сейчас алгоритм выглядит так -

Процедура ДокументСписокПриАктивизацииЯчейки(Элемент)
    
    СуммаВыделенных = 0;
        
    Для Каждого Строка Из ЭлементыФормы.ДокументСписок.ВыделенныеСтроки Цикл
        
        ИмяТекущейКолонки = Элементыформы.ДокументСписок.ТекущаяКолонка.Имя;
                
        Если ИмяТекущейКолонки = "КОплате"
            ИЛИ ИмяТекущейКолонки = "Оплачено"
            ИЛИ ИмяТекущейКолонки = "Баланс"
            ИЛИ ИмяТекущейКолонки = "СуммаДокумента"
            ИЛИ ИмяТекущейКолонки = "Поступило"
            Тогда
            
            ТекстЯчейки = Элементыформы.ДокументСписок.ОформлениеСтроки(Строка).Ячейки[ИмяТекущейКолонки].Текст;
            
            Если ТекстЯчейки = "" Тогда
                
            Иначе
                СуммаВыделенных    = СуммаВыделенных + Число(ТекстЯчейки);
            КонецЕсли;
                        
        КонецЕсли;
            
    КонецЦикла;    
    
    ЭлементыФормы.ДействияФормы.Кнопки.СуммаВыделенных.Текст = СуммаВыделенных;    
    
КонецПроцедуры



Да, знаю, что извращение с Число(ТекстЯчейки), но тут уж как есть.
6 Droning1C
 
17.04.20
11:53
Чистить соответствие по кнопке - не вариант, а другого пути я не вижу(
7 dezss
 
17.04.20
15:23
Иначе
    СуммаВыделенных    = СуммаВыделенных + Число(ТекстЯчейки);
КонецЕсли;

Вот прям там, где складываешь, так и пихай в соответствие, прям вот в этом самом "Иначе".
Если Соответствие.Получить(<твойключ>) = Неопределено Тогда
    СуммаВыделенных    = СуммаВыделенных + Число(ТекстЯчейки);
    Соответствие.Вставить(<твойключ>,1);
Иначе
    СуммаВыделенных    = СуммаВыделенных - Число(ТекстЯчейки);
    Соответствие.Удалить(<твойключ>);
КонецЕсли
8 dezss
 
17.04.20
15:26
Это просто пример. Надо только обходить все.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший