AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.04.2010, 20:18   #1  
Yakuza is offline
Yakuza
Участник
 
124 / 10 (1) +
Регистрация: 26.10.2004
Ох, весь день сидел, но что-то вышло. Более-менее работает. Сделал в виде счетчика. Осложняется все тем, что необходимо припереносе печатать промежуточное "итого" на предыдущем листе. Я использовал как своё итого, так и из трансфутера.
Привоже примерно сам алгоритм, т.к форма накладной сто раз переделывалась. Вот, кто захочет, разберется:
Код:
NumLines := COUNT;  // кол-во строк в счете
Exited := NumLines; // оставшееся до конца счета кол-во строк
p1 := 21;           // кол-во строк на первой странице с шапкой, максиамльное
p2 := 22;           // кол-во строк на последующих страницах, после которого надо перносить остаток на следующий лист, чтобы влез "подвал"
p2tot := 45;        // кол-во строк масимальное на второй и последующих страницах
page := 1;          // счетчик номера страницы
QtyItog := 0;       // накопитель кол-ва товара для промежуточного "итого"
AmItog := 0;        // накопитель суммы счета для промежуточного "итого"
NoLine - номер текущей строки.
Код:
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;
Ну и нарисовать новую секцию отображения строки счета и под ней "Итого: QtyItog AmItog", в старой секции условие отображения itog = FALSE, в новой itog = TRUE
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:28.