08.11.2011, 15:46 | #1 |
Участник
|
Опять ситуация: то ли лыжи не едут, то ли я .... ;-/
Догадываюсь, что где-то чего-то я крывенько сделала. Помогите, плиз, разобраться где и как это исправить. Сразу поршу порщения, что многа букафф. Начну с предистории. Есть у нас отчет один: к заказу печатает Packing list (Packzettel) со штрих-кодами. Захотелось кладовщику склада зап.частей печатать кроме Packing list еще и Return list. Выглядят они практически одинаково, только несколько различается текст в шапке и Footer отчета. Дабы не плодить два почти одинаковых отчета, решила я совместить 2 в 1, а именно в Request Form юзер выбирает какой из отчетов хочет печатать. Для этого создана переменная WasDrucken типа Option и на Request Form созданы соотв. контролы. Кр.того, поскольку обычно надо печатать оба отчета, то было высказано пожелание печатать всё за один раз. Поэтому переменная WasDrucken имеет три значения: 0 - Packing list 1 - Return list 2 - Both (т.е. должны быть напечатаны оба варианта один за другим, но, разумеется, каждый с нового листа) В отчете есть след. DataItems: Код: DataItem Name Integer DruckVariante Sales Header Verkaufsrechnungskopf Integer KopieSchleife Integer SeiteSchleife Sales Line <Sales Line> и проч. Если = Return list, тогда два раза на печать выводится секция для ВТОРОЙ страницы, вместо того, чтобы один раз вывести секцию для первой (с футером всё в порядке - он выводтся правильно) Если = Both, то Packing list распечатывается правильно, а Return list - см. предыдущий пункт В разделе секций имеем след. секции: > > >SeiteSchleife, Header (1) - шапка для Return list (для страницы 1) > > >SeiteSchleife, Header (2) - шапка для Packing list (для страницы 1) > > >SeiteSchleife, Header (3) - шапка для второй страницы (обоих отчетов) > > >SeiteSchleife, Header (4) - еще для чего-то > > > >Sales Line, Body (1)...(4) - тут понятно что и проч. Вот так выглядят триггеры для секций: Код: SeiteSchleife, Header (1) - OnPreSection() //CurrReport.SHOWOUTPUT(CurrReport.PAGENO = 1); 1) pgno := CurrReport.PAGENO; 2) CurrReport.SHOWOUTPUT((CurrReport.PAGENO = 1) AND (NOT PackZettel)); 3) pgno := CurrReport.PAGENO; SeiteSchleife, Header (2) - OnPreSection() //CurrReport.SHOWOUTPUT(CurrReport.PAGENO = 1); pgno := CurrReport.PAGENO; CurrReport.SHOWOUTPUT((CurrReport.PAGENO = 1) AND PackZettel); SeiteSchleife, Header (3) - OnPreSection() pgno := CurrReport.PAGENO; CurrReport.SHOWOUTPUT(CurrReport.PAGENO <> 1); pgno := CurrReport.PAGENO; SeiteSchleife, Header (4) - OnPreSection() pgno := CurrReport.PAGENO; CurrReport.SHOWOUTPUT((Kopf_Liefernan <> '') AND (CurrReport.PAGENO = 1)); pgno := CurrReport.PAGENO; Заходит в триггер SeiteSchleife, Header (1) - OnPreSection() (для удобства я пронумеровала строки и в доп. переменную pgno считываю номер текущей страницы. Буду писать последовательность выполнения и чему равна эта переменная) 1) pgno = 1 2) pgno = 1 3) pgno = 1 после выполнения третьей строки снова переходит на первую 1) Pgno = 2 2) Pgno = 2 3) Pgno = 2 Вопрос: почему он вернулся снова в начало этого триггера, вместо того чтобы перейти к выполнению триггеров для остальных секций Header(2)...(4)? После втрого "прохода" триггера SeiteSchleife, Header (1) - OnPreSection() выполняются последовательно: SeiteSchleife, Header (2) - OnPreSection() SeiteSchleife, Header (3) - OnPreSection() SeiteSchleife, Header (4) - OnPreSection() Потом (почему-то ;-/) опять: SeiteSchleife, Header (2) - OnPreSection() SeiteSchleife, Header (3) - OnPreSection() SeiteSchleife, Header (4) - OnPreSection() Вопрос: почему он вернулся снова на вторую секцию? Потом выполнение триггеров идет по нормальной логике: Sales Line - OnPreDataItem() Sales Line - OnAfterGetRecord() Sales Line, Body (1) - OnPreSection() Sales Line, Body (2) - OnPreSection() и т.д. Написала тут много, но, догадываюсь, что ответ будет довольно простым и коротким |
|
08.11.2011, 17:19 | #2 |
Участник
|
Экспериментировала я долго и нудно. Вот что обнаружила: если я в той злополучной секции Header (1) поменяю параметр KeepWithNext с Yes на No, тогда печатает всё корректно.
Но почему оно так, я так и не въехала Может кто объяснить? Замечу, что у секции Header (2) этот параметр = Yes, но эту секцию выводит корректно |
|