Крайне эхотажный примерНу можно и крайне эхотажный пример. Вот он на поверхности. Сергей,
реализуй-ка обработу 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)