Технология создания и использование специализированных визардов

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2832
Зарегистрирован: 06 Ноябрь 2014, 12:48

Технология создания и использование специализированных визардов

Сообщение finsoftrz »

Привет всем. Про сабж каких-то описаний и обсуждений не встречал. Поэтому расшарю
свой опыт в этой области.

http://finsoftrz.ru/mp4_tmp/fswizards.htm
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
porutchik
Бывалый
Сообщения: 89
Зарегистрирован: 01 Февраль 2009, 5:35

Технология создания и использование специализированных визардов

Сообщение porutchik »

когда я вижу в таблице поля дата/время изменения, кто изменил... меня начинает коробить :((
Аватара пользователя
porutchik
Бывалый
Сообщения: 89
Зарегистрирован: 01 Февраль 2009, 5:35

Технология создания и использование специализированных визардов

Сообщение porutchik »

после непонятной (ни с чем не связанной) правки тха ушел в нирвану
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2832
Зарегистрирован: 06 Ноябрь 2014, 12:48

Технология создания и использование специализированных визардов

Сообщение finsoftrz »

porutchik писал(а): 08 Сентябрь 2021, 21:15 когда я вижу в таблице поля дата/время изменения, кто изменил... меня начинает коробить :((
Ммм... Чем коробит и какие другие варианты?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2832
Зарегистрирован: 06 Ноябрь 2014, 12:48

Технология создания и использование специализированных визардов

Сообщение finsoftrz »

porutchik писал(а): 08 Сентябрь 2021, 21:37 после непонятной (ни с чем не связанной) правки тха ушел в нирвану
Что непонятно? Сохраняем процедуры в txa и встраиваем в шаблон. Для этого меняем в txa % на %% и вставляем в нужные места символы из заголовка визарда. Чтобы не искать все места, куда их вставлять, используем определеные соглашения в названиях и делаем массовую замену. Это если концептуально.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
porutchik
Бывалый
Сообщения: 89
Зарегистрирован: 01 Февраль 2009, 5:35

Технология создания и использование специализированных визардов

Сообщение porutchik »

finsoftrz писал(а): 08 Сентябрь 2021, 21:49 Ммм... Чем коробит?
как же с вами сложно. Элементарно Ватсон(С) это поле будет только показывать кто последним изменил запись... зачем? Допустим "косяк" в запись внесли до него, что это даст?
finsoftrz писал(а): 08 Сентябрь 2021, 21:49 какие другие варианты?
ммм. зачем? в твоем случае таблица куда триггер заносит запись кто и когда в какой таблице делал изменения. Здорово сэкономит место на диске. Но опять же зачем. Чтобы знать кто внес "косяк" нужно вести полноценный лог с историей данных
Аватара пользователя
porutchik
Бывалый
Сообщения: 89
Зарегистрирован: 01 Февраль 2009, 5:35

Технология создания и использование специализированных визардов

Сообщение porutchik »

finsoftrz писал(а): 08 Сентябрь 2021, 22:00 Что непонятно? Сохраняем процедуры в txa и встраиваем в шаблон. Это если концептуально.
если детально, то нах это надо? для того и делаю шаблоны, чтоб уйти от такой рутины. потому и странно... что сразу не сделать нужные действия в шаблоне. Целый огород, зачем?
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2832
Зарегистрирован: 06 Ноябрь 2014, 12:48

Технология создания и использование специализированных визардов

Сообщение finsoftrz »

porutchik писал(а): 09 Сентябрь 2021, 4:59
finsoftrz писал(а): 08 Сентябрь 2021, 21:49 Ммм... Чем коробит?
как же с вами сложно. Элементарно Ватсон(С) это поле будет только показывать кто последним изменил запись... зачем? Допустим "косяк" в запись внесли до него, что это даст?
finsoftrz писал(а): 08 Сентябрь 2021, 21:49 какие другие варианты?
ммм. зачем? в твоем случае таблица куда триггер заносит запись кто и когда в какой таблице делал изменения. Здорово сэкономит место на диске. Но опять же зачем. Чтобы знать кто внес "косяк" нужно вести полноценный лог с историей данных
Лог логом, само собой, но на практике зачастую достаточно увидеть, кто создал запись и последнюю руку, кто изменил. Особенно для обычных пользователей. Это стандартная практика. Подписи используются не только для того, чтобы "показать". Например, еще для отбора документов, созданных конкретным пользователем, в статистике работы и т.п.
Хранить подписи в отдельной таблице возможно. Наверно, это дело предпочтений и используемой субд. Я предпочитаю избегать таких зависимостей.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2832
Зарегистрирован: 06 Ноябрь 2014, 12:48

Технология создания и использование специализированных визардов

Сообщение finsoftrz »

porutchik писал(а): 09 Сентябрь 2021, 5:14
finsoftrz писал(а): 08 Сентябрь 2021, 22:00 Что непонятно? Сохраняем процедуры в txa и встраиваем в шаблон. Это если концептуально.
если детально, то нах это надо? для того и делаю шаблоны, чтоб уйти от такой рутины. потому и странно... что сразу не сделать нужные действия в шаблоне. Целый огород, зачем?
Если приложение имеет достаточную функциональность и мы хотим по минимуму писать код вручную, то в оконных процедурах навешивается довольно много разных extension и control шаблонов. У меня 10-20-30 обычное дело. В каждом шаблоне заполняются различные промпты. Врукопашную писать визард на языке шаблонов, учитывающий нюансы в типовых процедурах, очень трудоемко, да и вряд ли возможно.
Поэтому поступаем таким образом. Систематизируем все диалоговые окна и проектируем их содержимое, как обычные процедуры в прикладном приложении. Навешиваем в них все, что считаем нужным. Потом небольшой манипуляцией, которую я показал в ролике, переводим получившуюся оконную процедуру в визард. В одном визарде может объединяться генерация нескольких оконных процедур. При наличии некоторого опыта, сделать это не сложно. У меня подобных визардов около 20. Делается это один раз. Бывает, что в заготовке надо внести какое-то изменение. Например, добавить новый шаблон или изменить значение какого-то промпта. Вносим изменение в мастер апп и пересохраняем в тха. Тоже достаточно просто и быстро.
В результате получаем наборчик специализированных визардов для всех типовых ситуаций. Когда нужно создать оконную процедуру (или несколько по типу броуз-форма), то выбираем типовой для нее визард, заполняем несколько промптов, и получаем результат в максимально готовом виде. Затем дополняем специфические для конкретной процедуры настройки и код.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
porutchik
Бывалый
Сообщения: 89
Зарегистрирован: 01 Февраль 2009, 5:35

Технология создания и использование специализированных визардов

Сообщение porutchik »

finsoftrz писал(а): 09 Сентябрь 2021, 7:45 Хранить подписи в отдельной таблице возможно. Наверно, это дело предпочтений и используемой субд. Я предпочитаю избегать таких зависимостей.
без разницы какая субд. Попробуй посчитай насколько "тяжелее" становится твои базы имея эти 2 полей кто, когда создал/изменил. Опять же добавлю смысл в поле кто последний изменил и когда вообще не вижу. Если сильно нужно, то это норм читается из другого файла. Опять же пользователь удалил запись и что ты узнаешь? Повторю, кларионовский триггер с этой задачей справляется без проблем и огород городить не зачем. Про скул вообще не молчу:
create trigger tu_arOutDays on OutDays for update as
begin
insert ArhLog (TypeOp, NameTable, IdRec)
select 1, 'OutDays', IdOutDay from inserted
end
go
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2832
Зарегистрирован: 06 Ноябрь 2014, 12:48

Технология создания и использование специализированных визардов

Сообщение finsoftrz »

У меня возможность физического удаления записей регулируется правами доступа. Например, рядовые операторы могут только выключать документы (наподобии 1с). А в каких-то случаях только свои документы, которые они создали. Подпись это первый уровень аудита изменений. Для углубленного анализа, если такой потребовался, используется лог, в котором сохраняются в том числе и все измененные значения полей записей. По нему можно определить и физически удаленные записи, а для накладных и восстановить на любой момент времени, в том числе и физически удаленный документ.

Лог имеет особенность, что занимает очень много места. Когда-то замерял, у меня растет примерно в 4 раза быстрее, чем основная база данных.
Добавление нескольких полей подписи непосредственно в запись никаких проблем не вызывало. Ну, будет весить база данных не 2 гига, а 2.2 гига, сейчас это не принципиально. Хранение подписей в отдельной таблице в свое время рассматривалось, по совокупности плюсов и минусов я предпочел вариант с полями.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
porutchik
Бывалый
Сообщения: 89
Зарегистрирован: 01 Февраль 2009, 5:35

Технология создания и использование специализированных визардов

Сообщение porutchik »

finsoftrz писал(а): 09 Сентябрь 2021, 9:37 Добавление нескольких полей подписи непосредственно в запись никаких проблем не вызывало. Ну, будет весить база данных не 2 гига, а 2.2 гига
у тебя:
Id IdDoc IdParent Date Time NumStr TypeRec DateIns DatePut TimeIns TimePut UserIns UserPut или
Id IdDoc IdParent Date Time NumStr TypeRec будет в 2 раза короче, а там еще и индексы. КОГО ТЫ ЛЕЧИШЬ? у тебя дочерний так расти не будет даже если ты туда всех кто изменял занесешь? А если в основном еще и стринговые поля и индексы по ним каждая запись сколько отъест? А записей несколько миллионов? Или на весь твой геморой: файл, тип изменения, дата/время изменения, ид пользователя. То же самое что у тебя только быстрее надежнее и меньше по размерам. Но судя по видео с шаблонами у вас не ищут легких путей
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2832
Зарегистрирован: 06 Ноябрь 2014, 12:48

Технология создания и использование специализированных визардов

Сообщение finsoftrz »

Товарищ танкист, поменьше эмоций. :-)
Ты привел частный случай заготовки с небольшим количеством предопределенных полей. В реальной базе полей много больше. В случае справочников, записей в них всегда относительно немного и они в отдельных файлах. Это копейки. Если брать тяжелые таблицы с миллионами записей, то считается. Примем, что подпись составляет не более 36 байт на запись. На самом деле меньше, берем с запасом. Миллион записей это плюс 36 мб к общему размеру файла в несколько сотен мб. Вот тебе не пофиг на такой прирост? В 1с информация дублируется по несколько раз, и ничего, живут с этим.
Если смотреть твой вариант с постоянным добавлением подписей в служебную таблицу, то почему ты решил, что общий размер базы будет меньше? Ты же еще туда какой-то идентификатор таблицы вписываешь, идентификатор записи. И почему решил, что будет работать быстрее и надежнее? Ровно наоборот.
Судя по всему, ты просто путаешь 2 разных функционала, подпись (штамп) у записи и логирование изменений. Причем сам не используешь ни то, ни другое. :-)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1198
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

Технология создания и использование специализированных визардов

Сообщение RaFaeL »

porutchik писал(а): 09 Сентябрь 2021, 13:51 у тебя дочерний так расти не будет даже если ты туда всех кто изменял занесешь?
Ну вообще там всё зависит от того, насколько часто изменяются данные. Если 100 раз в день, то в логе будет 100 записей, а у него только последнее изменение

А так я тоже считаю, что в каждой таблице эти все поля иметь - бред. У нас триггеры в лог. Сколько весит лог не очень принципиально, в любой непонятной ситуации его можно удалить хоть целиком одним движением
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2832
Зарегистрирован: 06 Ноябрь 2014, 12:48

Технология создания и использование специализированных визардов

Сообщение finsoftrz »

Удалили одним движением, и пропала вся информация про автора и последней руке. Вытаскивать автора и последнюю руку из лога это забавно. У меня такое впечатление, что это я временной штамп придумал. Дискутировать предмета не вижу.
C6/C11, ШВС, tps/btrieve.
Ответить