List Format Manager - запрет на определенную колонку

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 451
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 114 раз
Поблагодарили: 6 раз

List Format Manager - запрет на определенную колонку

Сообщение ingasoftplus »

Ого - выглядит круто. Проглядываются и наши хотелки!! не поделитесь еще раз в образовательных целях?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7891
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 89 раз

List Format Manager - запрет на определенную колонку

Сообщение Игорь Столяров »

Всё тоже самое ... см. личные сообщения. 👀
Make Clarion Great Again ! 😎
gopstop2007
Полимат
Сообщения: 1788
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 21 раз
Поблагодарили: 10 раз

List Format Manager - запрет на определенную колонку

Сообщение gopstop2007 »

Игорь Столяров писал(а): 28 Март 2025, 11:45 Всё тоже самое ... см. личные сообщения. 👀
Тоже использую, только внешне немного изменил, спасибо большое Игорю ), если можно мне тоже бросьте может новое что то найду. :cat:
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5109
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 11 раз
Поблагодарили: 55 раз

List Format Manager - запрет на определенную колонку

Сообщение finsoftrz »

Игорь Столяров писал(а): 28 Март 2025, 11:45 Всё тоже самое ... см. личные сообщения. 👀
Игорь, а как разруливаете сейчас в управлении колонками визуальную их настройку и параметры в бизнес-логике? На примере. У нас в параметрах программы есть признак "Использовать сертификаты". Если он включен, то в ряде диалогов появляются относящиеся к нему контролы, если не включен, то пользователи эти контролы не видят. В частности, в справочнике товаров появляются 2 колонки, название сертификата и имя файла со сканом сертификата. Когда признак выключаем, эти колонки скрываются. Соответственно, они не должны отображаться в визуальной настройке колонок.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7891
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 89 раз

List Format Manager - запрет на определенную колонку

Сообщение Игорь Столяров »

Да, таких ситуаций много ... но в общем случае нет решения.
У колонки ведь есть только ширина и нет признака HIDE. :(

Если не нужно показывать какие-либо данные, то сейчас, после настройки
формата "скрывается" колонка и данные в неё не выводятся.
Через настройку формата можно "включить" колонку - но она будет пустой.

Что бы не показывать скрытые колонки в списке настроек - нужно задавать
для них какой-нибудь аттрибут и обрабатывать его.
Например специальный цвет или текст в шапке ... но мы такое не делали.
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5109
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 11 раз
Поблагодарили: 55 раз

List Format Manager - запрет на определенную колонку

Сообщение finsoftrz »

Этот вопрос связан с перестановкой местами колонок в визуальной настройки list и сохранением форматов в строковом виде в ini файле. Чтобы разрулить описанные ситуации, надо как-то идентифицировать колонку. У нас есть в этой ситуации только номер колонки и ее название, что-то из них надо фиксировать. По этой причине я когда-то отказался от динамического изменения порядка следования колонок. Хотя в некоторых ситуациях такая возможность пригодилась бы. Подвязываться на название колонок тоже как-то не хорошо выглядит. Если я правильно понимаю, то для корректной реализации нужно хранить описание форматов list в базе данных по каждой колонке. С этим лень связываться.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7891
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 89 раз

List Format Manager - запрет на определенную колонку

Сообщение Игорь Столяров »

finsoftrz писал(а): 31 Март 2025, 9:50 о для корректной реализации нужно хранить описание форматов list в базе данных по каждой колонке
Можно по другому. Хранить "исходный" формат списка и тогда по номеру колонки можно получить все данные о ней.
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5109
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 11 раз
Поблагодарили: 55 раз

List Format Manager - запрет на определенную колонку

Сообщение finsoftrz »

Исходный хранится и используется для отработки ситуаций с добавлением колонок list, чтобы заново не настраивать. Но как определить соответствие колонок в исходной формате и в сохраненном пользовательском? Про это речь.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7891
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 89 раз

List Format Manager - запрет на определенную колонку

Сообщение Игорь Столяров »

По номеру колонки можно получить её ID. У каждой колонки есть ID. Proplist:FieldNo
Только нужно его зафиксировать (и для этого перезаписать) - и далее можно юзать.
Это всё есть в примере FList (см. в теме).

Код: Выделить всё

        Loop Loc:Count = 1 to xBrwSet_.xBrowse{PropList:Exists,0} by 1
          If xBrwSet_.xBrowse{PropList:Exists,Loc:Count} = True
             Loc:Column = xBrwSet_.xBrowse{Proplist:FieldNo,Loc:Count}
             xBrwSet_.xBrowse{Proplist:FieldNo,Loc:Count} = Loc:Column
          end
        end

      ! Получить настройку колонки по её ID (Proplist:FieldNo)
                
                  Clear(Loc:QBlock)
                  Loc:QBColumn = xBrwSet_.xBrowse{Proplist:FieldNo,Loc:Count}
                  Get(Loc:QBlock,Loc:QBColumn)
                  If ~ErrorCode()
                     xBrwSet_.xBrowse{PropList:Picture,Loc:Count} = Clip(Loc:QBFormat)
                     xBrwSet_.xBrowse{PropList:Header,Loc:Count}  = Clip(Loc:QBHeader)
                     If Loc:QBWidth = 0 then xBrwSet_.xBrowse{PropList:Width,Loc:Count} = 0.  ! Скрытая колонка
        
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5109
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 11 раз
Поблагодарили: 55 раз

List Format Manager - запрет на определенную колонку

Сообщение finsoftrz »

Proplist:FieldNo устанавливает соответствие со списком полей, заданным в аттрибуте #fields оконной структуры. Технически его можно попробовать использовать, хотя этот номер тоже не фиксированный, если только явно не нумеровать в форматере LIST (у меня на автонумерации везде).
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7891
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 89 раз

List Format Manager - запрет на определенную колонку

Сообщение Игорь Столяров »

Не можно, а нужно. Причём уже лет 15 точно. :D
Не знаю зачем есть возможность присваивать свой номер. Мы юзаем присвоенный автонумерацией.
Собственно это ID который не меняется от расположения колонки в списке.
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5109
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 11 раз
Поблагодарили: 55 раз

List Format Manager - запрет на определенную колонку

Сообщение finsoftrz »

Игорь Столяров писал(а): 31 Март 2025, 14:49 Не можно, а нужно. Причём уже лет 15 точно. :D
Не знаю зачем есть возможность присваивать свой номер. Мы юзаем присвоенный автонумерацией.
Собственно это ID который не меняется от расположения колонки в списке.
Он будет меняться, если будут добавляться колонки.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7891
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 89 раз

List Format Manager - запрет на определенную колонку

Сообщение Игорь Столяров »

finsoftrz писал(а): 31 Март 2025, 15:06 Он будет меняться, если будут добавляться колонки.
Естественно. При удалении и перемещении колонок тоже.
Поэтому мы храним Default Format для которого сделаны пользовательские настройки.

И если при открытии LIST видим, что в формат LIST разработчиком внесены исправления -
то сбрасываем пользоватеские настройки. А иначе пользователь не увидит сделанные разработчиком изменения.
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5109
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 11 раз
Поблагодарили: 55 раз

List Format Manager - запрет на определенную колонку

Сообщение finsoftrz »

Хардкорно. :lol:

Глянул у себя, вызывается функция проверка колонок, в качестве параметров передаются строки с форматом list старым и новым. В процедуре окно с одним пустым list контролом. Присваиваем list старый формат. Записываем колонки старого формата в очередь (наименование колонки + ширина). Затем присваиваем list новый формат. Пробегаемся по колонкам и по наименованию определяем ширину колонки в старом формате, присваиваем новому. Модифицированный новый формат возвращаем.

В большинстве случаев это работает корректно, так как названия колонок не так часто меняются. Новые колонки появляются, старые сохраняют свою ширину (видимость).

Чтобы исключить скрытую колонку из визуальной настройки и из некоторых других обработок, присваиваю ее заголовку системное значение "...".
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7891
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 89 раз

List Format Manager - запрет на определенную колонку

Сообщение Игорь Столяров »

finsoftrz писал(а): 31 Март 2025, 18:19 В большинстве случаев
1. Ну вроде бы работающие программы - это не наш профиль.
Видов изменений LIST много. Формат колонки, внесение или вывод колонки в группу и т.д.
Гипотетически конечно мона поставить цель всё это отработать и сделать, но ...

2. Зачем ? Настройка колонок - это те же самые рабочие данные, как и настрока окон.
Тем более, что вопросы ограничения доступа к тем или иным колонкам - это отдельная история.

3. У нас кроме, собственно настройки колонок LIST, везде работает масштабирование содержания LIST
и автоформат ширины колонок по содержимому (штатная, но исправленная опция Clarion)

И по итогу проще при изменении сделать "а давайте все выйдем и снова зайдём, чем разгребать весь этот кандибобер. :D
Make Clarion Great Again ! 😎
Ответить