If the query is returning data correctly, then you should be getting
the sdate, sqty and swt records but with the pdate, pqty and pwt column headings.
As the union takes the column names from the first select statement as pdate, pqty and pwt.
What you could do to distinguish the purchasemaster and haladsale records is to add an extra column in you select such as type with a static value, instead of using the column names(pdata and sdate etc)
You could do something like this:
select
'purchasemaster' as type,
purchasemaster.date as date,
puchasetable.qty as qty,
puchasetable.wt as wt
...
union
select
'haladsale' as type,
aladsale.date as date,
haladsaletable.qty as qty,
haladsaletable.wt as wt
...