I’m almost tempted to post this in the bugs section because, although the current behaviour is intentional, it’s highly undesirable.
For a lot of logistics carrying jobs in the game, villagers don’t just take some from A to X. They want to get as much stuff to X as possible in one trip; so they visit A, B, and C and then go to X. Examples including grocers visiting multiple cellars when stocking the market, smokers visiting multiple hunters when stocking the smokehouse, and traders visiting multiple forager huts when stocking herbs. This is generally good, this kind of round-robin trip is often more efficient than A->X->B->X->C->X, especially if A, B, C are close together.
BUT, sometimes it isn’t. If A, B, and X are all close together and C is both miles away and has a small quantity of good to pick up, I’d rather the villager went A->B->X and then did a separate trip C->X so that I don’t have to wait forever for the goods at A and B to get used (and, who knows, maybe someone else closer to C will pick those up anyway). As an extreme example of this being a problem, see this screenshot, where a grocer is taking the entire food supply of the village on a walk to the opposite corner of the map in order to pick up 10 smoked meat from a salvage. In the meantime, everyone at home is starving.
How could this be fixed? Say the villager is currently carrying x amounts of goods from A and B, and has y left to pick up at C. If the distance to C is greater than y/x the distance to X, the villager should not go to C this trip and instead return to X first.
I doubt this is perfect, but it encapsulates the idea that walking a long distance to pick up a small amount when already carrying a lot is not worth it. It might have unintended consequences of distance places being visited less but, as the local stockpiles build up it will eventually become more desirable to visit it, so it ought to balance itself out. I also don’t think it should be too expensive to compute: it only needs to be done once after visiting every building in the A->B->C chain (or in advance when reserving goods to pick up), and if the Euclidean distance (rather than true-path distance) is used then it’s a cheap check too.