This is not probably not going to help, but the situation is as Leejor pointed out......
You have two devices that have the same extension. 3CX, as do most phone systems, reacts at the extension level. This is akin to having multiple phones in your house all using the same phone number and expecting that calls will only be forwarded from the one phone on which you activated the forwarding. Your home phone is really not much more than a glorified extension of the phone company.
What may differentiate one from the other device in 3CX is the IP address which each has and how that may be manipulated independently of one another. For example, you might try leaving the status set as available. Then on the desk phone, assuming it has its own DND setting that is not forwarding to 3CX, you could set the desk phone to DND. When a call comes into extension 100 (yours), the system will attempt to ring both extensions, but because the desk phone is set to DND, it will not ring (may get a slight chirp of a ring) as the phone will inform the system that extension
[email protected] is busy (DND), but the system should continue to ring the softphone.
The key to the above is to let the desk phone use DND and not set DND at the 3CX system which will then rightfully assume that all extensions associated to extension 100 will be DND.
I am not certain that I follow the argument about the desk phone always making you available. You have the ability of setting the status at the 3CX softphone as well by dial code or tapping on where it indicates the status and setting accordingly. You just need to remember that when setting a status at the PBX, which is what the dial codes and apps do, it impacts all devices with the same extension. So, setting yourself away or other at the softphone impacts the desk phone and vice versa as well.
The DND at the desk phone, as long as not programmed to send the DND dial code to 3CX should only cause that device with that extension and IP to be DND.
Does this help?