ООП - каскадное обновление связных файлов

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Ну можно и крайне эхотажный пример. Вот он на поверхности. Сергей,
реализуй-ка обработу REGISTEREVENT без класса? :)

Владимир Якимченко
Крайне эхотажный пример

clarion 5.5g сравниваем legacy и ABC на следующем примере:

Необходимо объединить два справочника контрагентов, попутно
отстреливая двойные записи. К справочникам по ID привязаны документы
связи на документы прописаны Update - cascade; Delete - Restrict
Апликуха для конвертации генериться шаблонами.

Естественное желание - изменяя ID справочника каскадно изменять все
связные документы используя процедуры (или методы) созданные
шаблонами.

Для legacy путем копания в исходниках нужный код был найден почти
мгновенно:

!Нашли запись ID которой нужно изменить...

RISnap:"Справочник"() !подготовка к изменению
!Изменяем ID на другой...
Update::Error = RIUpdate:"Справочник"(1) !тут происходит изменение всех связных документов

!Анализ Update::Error и пр.

т.е. пара строк и все работает :)

Для ABC решения не видно по существующему
коду :(
если изменяю ID в форме, то все отрабатывает
а как написать Source ? :(

Аналог RIUpdate:"Справочник"(1) это Relate:"Справочник".Update()
А вот чем заменить RISnap:"Справочник"()

Понятно, что перед изменением надо сохранить текущее состояние
записи. Для этого в процедуре Form шаблоны генерят
History::"Справочник".Record LIKE("Справочник":RECORD),STATIC

и в методе ThisWindow.Init выполняется
SELF.AddHistoryFile("Справочник":Record,History::"Справочник":Record)


но если пишу руками Source этого не хватает :(
При вызове Relate:"Справочник".Update() не происходит каскадного
обновления документов :(

Подскажите кто знает !!!

--
С уважением,
Алексей Дынин
daa@polad.ru

(Добавление)

Relate:FILE.Save()
<...>
<меняю запись>
<...>
Relate:FILE.Update() !Каскадное обновление

Павел Яковенко
Написал: ClaList(2)
Гость

Сообщение Гость »

Абалдеть!! Оно!!!! :)
СПАСИБО!

--
С уважением,
Алексей Дынин
Написал: ClaList(2)
Ответить