1. I'll be there(=in prison) for seven years for making fake money.

2. I'll be there (=in prison) for seven years for having made fake money.

(Which expression is grammatical?)

both are syntactically correct, but the first is better.

The crime was making fake money.
Of course, having made it, you are guilty of making it.

Both expressions are grammatically correct, but they convey slightly different meanings.

The first expression, "I'll be there for seven years for making fake money," suggests that the person will spend seven years in prison for the act of making fake money. This implies that the person will be actively engaged in the production of counterfeit currency during their prison sentence.

The second expression, "I'll be there for seven years for having made fake money," implies that the person will spend seven years in prison for the prior act of having made fake money. It suggests that the person has already participated in the production of counterfeit currency, and the sentence is a consequence of that past behavior.

In terms of grammar, both expressions are correctly structured and understandable. However, the choice between them depends on the intended meaning and context.