Some simple explanation why pull is bad:
Suppose you script loop WHEN/ENDWHEN is running in Planning and there are no records for the accounts A1.591,... Exactly what you mentioned here: "But It will work only if there is existing one and only one record in scope When A1.591 and P1_NA."
Without existing records the loop simply will not run for this member combinations. It's possible to enforce WHEN/ENDWHEN to loop all member combinations (with and without data) using *WHEN_REF_DATA = MASTER_DATA, but it will affect performance (this statement will enforce all member loop for ALL dimensions in the cube)
B.R. Vadim