Как работать с периодическими реквизитами ?

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Как работать с периодическими реквизитами ?

Сообщение Андрей »

Есть материнская таблица "Картотека" и дочерняя "История", в которой хранятся записи истории изменений некоторых атрибутов "Картотеки" (одна запись содержит значения всех период. параметров на некоторую дату).
Нужно - в картотеке показывать ПОСЛЕДНИЕ значения период. параметров (т.е. записи "Истории"" с посл. датой), лучше бы как то автоматически типа lookup и через словарь. Как это сделать ? Проблема в том что Lookup обычно делается на материнскую таблицу, а тут надо на определенную запись дочерней.
Пока попробовал реализовать след. схему:
1. В момент записи Истории проверяем самая ли это свежая запись, если да, ищем и снимаем старый флаг "свежести" FlgNew=0 и устанавливаем FlgNew=1 для этой записи. Делаю это в точке вставки "Перед записью на диск" (кстати а как эти 2 операции завернуть в транзакцию ?)
2. В таблице Картотека заводим псевдополе FlgNew которое всегда будет равно 1.
3. Делаем связь в одну сторону к таблице "История" из таблицы "Картотека" many:1 по составному полю
IdKart+FlgNew
Так то работает, но не покидает "смутное ощущение", что можно как то аккуратнее и красивше сделать. Может кто поделится мыслями ?
Аватара пользователя
StillZero
Ветеран
Сообщения: 458
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Поблагодарили: 1 раз
Контактная информация:

Re: Как работать с периодическими реквизитами ?

Сообщение StillZero »

блиа! зачетное решение! респект
по аэродрому...
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как работать с периодическими реквизитами ?

Сообщение kreator »

Надо в таблице "История" сделать поле ID (уникальное и поставить на него автонумерацию). А потом отображать только запись с самым большим ID.
We are hard at work… for you. :)
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Re: Как работать с периодическими реквизитами ?

Сообщение Андрей »

Ну если без той оговорки что возможен случай, когда пользователь решит добавить пропущенную запись в истории, то ....
А дальше что ? Как привязать эту запись с макс Id к родительской записи ?
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как работать с периодическими реквизитами ?

Сообщение kreator »

Ну, если пользователю разрешено редактировать записи истории, то надо явно привязываться к дате. "Свежая запись" - это какая? Та, которая редактировалась последней или последняя по дате изменения?
We are hard at work… for you. :)
Андрей
Старожил
Сообщения: 277
Зарегистрирован: 30 Октябрь 2005, 3:58

Re: Как работать с периодическими реквизитами ?

Сообщение Андрей »

"Свежая" - конечно с последней датой. Наверно... можно будет запретить редактирование. Но все же я не понял, поясните,pls, как потом прицепиться на автомате к этой записи с макс ID ? Еще раз подчеркиваю проблему - не хочу нигде писать код для отображения "свежих" значений период. реквизитов - хочу автоматизацию сего процессса ! :)
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как работать с периодическими реквизитами ?

Сообщение kreator »

Думаю без ручного кода не обойтись, используем set, get, если не SQL. Все равно же пишешь код для снятия и установки флага. И, по-моему, неправильно бизнес логику загонять в словарь. А если посмотреть на SQL? Там это, вообще, родит кучу проблем.
We are hard at work… for you. :)
Аватара пользователя
StillZero
Ветеран
Сообщения: 458
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Поблагодарили: 1 раз
Контактная информация:

Re: Как работать с периодическими реквизитами ?

Сообщение StillZero »

Для Андрея:
твое решение самое зачетное на данный момент, хотя... неверное :) я вижу только одну проблему - это оборачивание прохода по истории и выставление/снятие флага в транзакцию - т.е. это ОБЯЗАНО быть. Иначе залепуха :) Можно показать самую последнюю запись истории в листе, но это будет ручной код... не такой уж и большой на самом деле... на каждую запись найти свежую в другой таблице и отобразить... На автомате решения не знаю.

ps
С sql как раз проблем не вижу вообще :)
по аэродрому...
Ал
✯ Ветеран ✯
Сообщения: 1039
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Re: Как работать с периодическими реквизитами ?

Сообщение Ал »

Андрей писал(а):Есть материнская таблица "Картотека" и дочерняя "История", в которой хранятся записи истории изменений некоторых атрибутов "Картотеки" (одна запись содержит значения всех период. параметров на некоторую дату).
Нужно - в картотеке показывать ПОСЛЕДНИЕ значения период. параметров (т.е. записи "Истории"" с посл. датой), лучше бы как то автоматически типа lookup и через словарь. Как это сделать ? Проблема в том что Lookup обычно делается на материнскую таблицу, а тут надо на определенную запись дочерней.
Пока попробовал реализовать след. схему:
1. В момент записи Истории проверяем самая ли это свежая запись, если да, ищем и снимаем старый флаг "свежести" FlgNew=0 и устанавливаем FlgNew=1 для этой записи. Делаю это в точке вставки "Перед записью на диск" (кстати а как эти 2 операции завернуть в транзакцию ?)
2. В таблице Картотека заводим псевдополе FlgNew которое всегда будет равно 1.
3. Делаем связь в одну сторону к таблице "История" из таблицы "Картотека" many:1 по составному полю
IdKart+FlgNew
Так то работает, но не покидает "смутное ощущение", что можно как то аккуратнее и красивше сделать. Может кто поделится мыслями ?
Андрей писал(а):"Свежая" - конечно с последней датой. Наверно... можно будет запретить редактирование. Но все же я не понял, поясните,pls, как потом прицепиться на автомате к этой записи с макс ID ? Еще раз подчеркиваю проблему - не хочу нигде писать код для отображения "свежих" значений период. реквизитов - хочу автоматизацию сего процессса ! :)
определись - user может править"освежать" существующую "старую" запись в "истории" или если нет - при манипуляциях в картотеке и сохранении измененной записи картотеки "автоматом" в историю всегда пишем уник запись т.е. каждый раз при изменении данных записи картотеки в истории создается новая запись с датами, параметрами и проч. изз картотеки - каждый раз самый свежий новый )) уникальный ИД записи истории формируем и храним в записи картотеки и по нему "на автомате" формир поле в новую запись в истории и потом при просмотре картотеки поднимать по составному полю параметры из истории - самые последние и будут. но количество записей в истории будет тьма... сколько изм было в картотеке столько записей и в истории...
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Как работать с периодическими реквизитами ?

Сообщение WadimZapara »

StillZero писал(а):блиа! зачетное решение! респект
StillZero писал(а):...я вижу только одну проблему - это оборачивание прохода по истории и выставление/снятие флага в транзакцию..
ps
С sql как раз проблем не вижу вообще :)
Полностью согласен :D
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Ответить