Имя: Пароль:
1C
1С v8
Гляньте несложный алгоритм с пометками строк таблицы
0 DJ Anthon
 
13.08.13
15:09
1. Не, не пойдет 100% (1)
2. Смысл в этом есть 0% (0)
3. А лучше сделать вот так / Тут баг 0% (0)
4. КГ/АМ 0% (0)
Всего мнений: 1

Нужна любая таблица (табличное поле) с пометками, у табличного поля есть метод. ну еще нужна переменная модуля Пометки типа строка.

Зачем оно надо: около таблицы принято размещать кнопочки, которыми можно сразу отметить все строки или разотметить. а в 7.7 когда-то было принято еще и инвертировать выделение. но эти кнопочки на скорую руку рисовать влом и дизайн часто они портят, особенно когда таблиц много, просто неохота их никуда пихать. тем не менее, заголовки таблиц неинтерактивны, и контекстное меню тоже делать неохота.
я решил использовать такую особенность таких таблиц-списков - как правило, одну и ту же пометку пользователи не нажимают несколько раз. короче, сделал так, чтобы на троекратное нажатие любой строчки все пометки инвертировались, на последующие троекратные нажатия все отметки устанавливались в зависимости от текущей. то есть можно особо не двигая мышкой (до кнопок с галочками, которые еще найти надо) быстренько отметить все пункты. Плюс - простота и универсальность.
Минус - надо еще об этом догадаться, что таблица так умеет. пока что для себя сделаю.




Процедура ТЗПриИзмененииФлажка(Элемент, Колонка)
    НС = Элемент.ТекущиеДанные.НомерСтроки;
    Пометки = Пометки + "!" + НС;
    Если СтрЗаменить(Пометки, "!" + НС, "") = "" Тогда
        Если СтрДлина(Пометки) % (3 * СтрДлина("!" + НС)) = 0 Тогда
            НС = ?(СтрДлина(Пометки) / СтрДлина("!" + НС) = 3, -НС, Элемент.ТекущиеДанные.Пометка);
            Для Каждого Строка Из ТЗ Цикл
                Строка.Пометка = ?(НС < 0, ?(-НС = Строка.НомерСтроки, Строка.Пометка, НЕ Строка.Пометка), НС);
            КонецЦикла;
        Иначе
            Возврат;
        КонецЕсли;
    Иначе
        Пометки = "!" + НС;
    КонецЕсли;
КонецПроцедуры