Hello NicC, the problem will keep coming unless the length is handled explicitly as tested by Pandora/Mr. Woodgar in the earlier tagged post; at least for SYNCSORT.
Aside, Susanta, for a VB dataset, you add 4 to the already specified start-of-data positions; for example, from: FIELDS=(11,14,CH,A) , 11 changes to 15; from FIELDS=(2,14,CH,A), 2 changes to 6; and so on. Play around with it a bit, and you should be able to work it out. There are hundreds of examples for this available on the forum as well as the good ol' web (if the manual is not around).
Do confirm if the information from the link shared and stated by Mr. Raj a few posts earlier was helpful in to resolving the issue, because your last sort-card doesn't show any changes.
Are all other issues solved now? If VB is the only thing troubling you, you should be able to figure it out yourself. There are plenty of working examples here showing what needs to be done for handling VB datasets.
Next time when you start a new topic, try to post as much information as possible in your very first post instead of throwing it in bits. That would make it easier for others who are trying to help you.
Susanta, Please take sometime and freeze your need once for all and then do some research by yourself to learn and get things done independently. Because if you are a Beginner to DFSORT/SYNCSORT then the right place to post your question and learn is here.
I don't know why I thought the REFORMAT was variable :-)
In your first BUILD, you have 90 bytes of data, in the second 88. That's the reason for the failure. You could add 2X to the end of the second BUILD, or, perhaps less clear, use the IFOUTLEN as you have.