You could try hiding the original BT_QPPicking button on the DMAIN and DMAINW panels, put in its place a replica script button set to run on the server. You don't need an event script. Try the following code in the button script. You will need to replace sDateTimeStampValue with your value/variable and UDF_FieldName with your field name.
---------------------------------------
nRetVal = 0
sSalesOrderNo = """"
nRetVal = oBusObj.GetValue(""SalesOrderNo$"", sSalesOrderNo)
nRetval = oUIObj.BT_QPPicking() 'If you look in the resources at SO_SalesOrderUI (or any UI object for that matter), you will see methods that share the same name as certain buttons on the panel, these can be called like this line vs using oScript.InvokeButton, This method also makes sure the methods are triggered in the order they appear in the script.
If nRetval = 1 Then
' The below section is just illustrating how you can get module options and choose a different route in your code accordingly, you could shorten this with a GetValue on the sales order number field into a different variable, if you get a blank value back, then the source was not redisplayed.
sRedisplayAllDocuments = """"
nRetVal = oSession.GetParameter(""S/O"", ""RedisplayAllDocuments$"", sRedisplayAllDocuments)
sRedisplayPickingSheets = """"
nRetVal = oSession.GetParameter(""S/O"", ""RedisplayPickingSheets$"", sRedisplayPickingSheets)
If sRedisplayAllDocuments = ""Y"" Or sRedisplayPickingSheets = ""Y"" Then
nRetVal = oBusObj.SetValue(""UDF_FieldName$"", sDateTimeStampValue)
nRetval = oUIObj.BT_Accept()
nRetval = oUIObj.InvokeChange(""SalesOrderNo$"", sSalesOrderNo)
Else
nRetval = oUIObj.InvokeChange(""SalesOrderNo$"", sSalesOrderNo)
nRetVal = oBusObj.SetValue(""UDF_FieldName$"", sDateTimeStampValue)
nRetval = oUIObj.BT_Accept()
End If
End If
---------------------------------------
This has drawbacks as you can't be certain the picking sheet was printed without using additional replica buttons on the quick print screen and setting some storage variables but even then, you are not guaranteed the print job completed successfully. You also would need to work in additional logic for handling if the quick print picking sheet is triggered after printing the sales order. This should give you a start though.