The situation you described is a typical many-to-many Invoice -< LineItem >- Product solution. The join table is the LineItem table, joining Products to Invoices. In this way, each Invoice can have many Products, and each Product can be included on many Invoices.
Usually in Invoice solutions, it is important that once the Invoice is created, the prices and descriptions don't change. To accomplish this, you need the LineItem table to keep copies of those Product fields. In FileMaker, this is done by defining normal text or number fields in LineItem, and defining them to have an auto-entered Lookup or Calculation, drawing from the corresponding related Product fields.
Your example of "30% price less for an item during a given period" implies two additional complications. The first is where to apply the discount. Discounts could either be done on the Product side (a particular product being discounted,) or on the Invoice side (the Customer recieves a discount for all items THEY purchase.) Once you know which of these to use, then you must either build that into the structure so the discounted price is the source of the Lookup, or add scripting to set the discounted price for the specified product(s). The second complication is "given period". The simplified way would be to manually adjust the Price of the Product in the Product table as it changes. But for a larger system, or if you want to have better tracking of prices over time, you could add a Price table, and have that related to Product. Keeping date ranges for each record in the Price table, you could then relate your LineItem to Price by ProductID and Date, and get the correct Price for the current date.
In FM7 & FM8, the relationships are bidirectional as long as the keys on both sides are indexed. In previous versions, each relationship has to be defined in its own file, but you can see both ways if both keys are indexed. The bigger advantage in FM7/8 is the ability to see data multiple tables away, eliminating much of the need for Lookups. In the case of Invoices however, Lookup fields are needed to preserve the history.