|
![]() |
#1 |
Участник
|
Ох, весь день сидел, но что-то вышло. Более-менее работает. Сделал в виде счетчика. Осложняется все тем, что необходимо припереносе печатать промежуточное "итого" на предыдущем листе. Я использовал как своё итого, так и из трансфутера.
Привоже примерно сам алгоритм, т.к форма накладной сто раз переделывалась. Вот, кто захочет, разберется: Код: NumLines := COUNT; // кол-во строк в счете Exited := NumLines; // оставшееся до конца счета кол-во строк p1 := 21; // кол-во строк на первой странице с шапкой, максиамльное p2 := 22; // кол-во строк на последующих страницах, после которого надо перносить остаток на следующий лист, чтобы влез "подвал" p2tot := 45; // кол-во строк масимальное на второй и последующих страницах page := 1; // счетчик номера страницы QtyItog := 0; // накопитель кол-ва товара для промежуточного "итого" AmItog := 0; // накопитель суммы счета для промежуточного "итого" Код: OnAfterGetRecord: IF NumLines > 1 THEN BEGIN // если всего одна строка, то и так помещается на одном листе // Определяем, если следующую строку будем переносить на другой лист, то поднимаем флаг для печати "итого" минуя трансфутер IF (page = 1) THEN BEGIN IF (NumLines <= p1) AND (NumLines = NoLine+1) THEN itog := TRUE ELSE itog := FALSE; END; IF (page > 1) THEN BEGIN IF (Exited < p2tot) AND (Exited > (p2-1)) AND (NumLines = NoLine+1) THEN itog := TRUE ELSE itog := FALSE; END; // Если первая страница, то всегда при кол-ве строк меньше 21 последнюю строку переносить IF (page = 1) AND (NumLines <= p1) AND (NoLine = NumLines) THEN BEGIN CurrReport.NEWPAGE; page := page + 1; Exited := NumLines - NoLine + 1; END; // Если вторая и далее - то при оставшихся 45 и менее строках, но больше 21 последнюю строку переносить IF (page > 1) AND (Exited < p2tot) AND (Exited > (p2-1)) AND (NoLine = NumLines) THEN BEGIN CurrReport.NEWPAGE; page := page + 1; Exited := NumLines - NoLine + 1; END; // В остальных случаях используется стандартный pagebreak с печатью transfooter (см. код в секции трансфутера) END; QtyItog := QtyItog + Quantity; // в накопитель добавляем кол-во и сумму из строки AmItog := AmItog + Amount; Код: В секции стандартного трансфутера добавить код : OnPostSection: page := page + 1; Exited := NumLines - NoLine + 1; |
|