If an order is returned/refunded/canceled, some webshop-solutions will resend the transaction-data to Google Analytics using the same transactionID, but with a 0.00 cost and no products. The new data overwrites the old because it has the same transactionId.
There seems to be no other way of telling Google Analytics that an order has been canceled.
If this is the case with your webshop, it could explain why there are more transactions than the total products sold.
Update:
Another way to get a lower product count than transaction count in Google Analytics is if the tracking code has an error and is unable to add the products to the data layer before sending the transaction to Google Analytics.
Google Analytics does not require a list of products to record a transaction.
As we discovered, this is likely the cause of the issue as there have been no cancellations or refunds, and you've found that some transactions are recorded without any products in GA.
There might be invalid settings or a bug in Prestashop or any of the extensions used.
I recommend that you test buying each product (your payment method should have a test-mode you can use to avoid being charged and have to refund), and using Tag Assistant (browser extension) to see if the data is sent correctly to Google Analytics.
This will help you identify which products are causing the issue. They might have invalid settings or unescaped characters (like apostrophe) that causes the javascript code to fail.