Make a relation bet'n Show and Actwith constant field value =1
From that relation bring the portal B in the data entry layout.
I hope it'll work
"1) enter a new Show without manually specifying the primary key of the corresponding Day"
- is that not what would happen if you simply specified the relationship as 'Allow creation of new records" in the child table, with no need for the special arrangements of the data entry screen?
Seems to me, that you've got a basic interface design issue you need to resolve first.
If you are on a given day record, that allows your "Shows" portal to work as all records in it will have the same primary key value from "Days". But the "Acts" records could be linked to any one of the "Shows" records that you enter in the "Shows" records.
Looks like you need a script to set up and maintain a link from Days to Acts that will correctly enter the correct "Shows" primary key.
Define this additional relationship, just for the "Acts" portal:
Days::gCurrentShowID = SelectedShow_Acts::ShowID
gCurrentShowID is a global field and SelectedShow_Acts would be a new table occurrence of Acts. (In Manage | Database | Relationships, click Acts to select it, then click the button with two green plus signs.) "Allow creation of records..." should be enabled for SelectedShow_Acts in this relationship.
In the Shows portal, you'd set up script trigger(s) to run this script:
Set Field [Days::gCurrentShowID ; Shows::ShowID]
Setting up an OnObjectExit script on the Shows portal should work here but I haven't tested this.
This way, any time you edit/create a record in the Shows portal, the portal to SelectedShow_Acts should update to display any Acts for that show and entering data into it, should automatically link it to the most recently edited record in the Shows portal. (Conditional formatting can be used to make the "current show" portal row a different color to help the user keep track of which show's Acts are visible.)