Keith Barker hit 125 before Warwickshire declared their first innings at 631-9 on day two against Surrey at Guildford.
Surrey openers Rory Burns (21no) and Arun Harinath (17no) reached 49-0 in reply by stumps to reduce their deficit to 582.
Resuming on 359-3, Warwickshire lost opener Varun Chopra for 192 in the third over of the day, caught by Zander de Bruyn off the bowling of Jade Dernbach.
Seamer Dernbach (3-72), who joined the match the previous evening after his release from England's one-day squad, also denied Tim Ambrose a century when he trapped him lbw for 84.
But Surrey's attack had no answer to a Warwickshire record seventh-wicket stand of 211 between Ateeq Javid (85) and Barker which ensured the defending champions picked up maximum batting points for the first time this season.
Barker advanced to his third first-class century from 128 balls with 14 fours a six before Jason Roy (3-35) finally removed Javid for 85, the first of three quick wickets for the occasional seamer, including Barker lbw after being hit on the boot.
The declaration came with 21 overs remaining in the day. Burns and Harinath were able to negotiate that spell without loss but Surrey need to reach 482 merely to avoid the follow-on.
Warwickshire will have Boyd Rankin to bolster their ranks on day three. The seamer has been released by England and will replace Tom Milnes.