CDR variables in Local channels

Hi all, I’m using Local channels to fork the call to 2 destination, an incoming SIP channel get forked in dial 2 Local channels, 1 answer and 1 get CANCELed.
Everything’s fine until I collect the cdr field generated in CDR() channel variables.

CANCEL,Local/4001@fork-000000d8;2,1,2017-06-22 17:51:20,2017-06-22 17:51:21
ANSWER,Local/4000@fork-000000d7;2,1,2017-06-22 17:51:20,2017-06-22 17:51:21,2017-06-22 17:51:22
above was the cdr I collect for Local channels used, generated when one picked up and local channels are no longer needed, they’re all fine.

And when I hangup the call, the final cdr for SIP channel generated with start value is at the time of answer value, I guess it suppose to be at the beginning of the call, not sure whether this is a bug.

ANSWER,SIP/sipuser-000015d2,12,2017-06-22 17:51:22,2017-06-22 17:51:22,2017-06-22 17:51:34

Second qns regarding using variables in Local channels, I’m able to inherit any channel variable set in incoming SIP channe,l to the Local channels, using _ (underscore) character, but How can I do the revert? Just because my Local channels set some variables that I need in collecting cdr for SIP channel eventually.

I’m using asterisk 13.11.2.
Any helps are appreciated.
Loi Dang