Добавление дополнительных наклеек при печати наклеек на профиль с дополнительной информацией
Данный скрипт довольно сложный в применении по сравнению с другими скриптами. Задача: необходимо на основе определенных условий добавить в цикл наклеек на профиль дополнительные наклейки с отображением дополнительной информации (например дополнительные наклейки на детали створки в которых установлена ручка для отображения подробной информации по фурнитуре на данной створке). Выполнение данной задачи обеспечивает наличие двух событий в модуле печати OnPrintOtchetCyclePrepare и OnPrintOtchetElemVisiblePrepare (третье событие OnPrintOtchetBeforeBuild в данном скрипте не используется). Событие OnPrintOtchetCyclePrepare выполняется после подготовки любого цикла. Благодаря данному событию мы можем заранее указать идентификатор печатной формы и идентификатор элемента цикла на который мы будем оказывать влияние (вот строка if not((PrintModule.CurPrintOtchetId=109)and(PrintModule.CurPrintObjectId=1)) then exit;). Смысл нашего влияния это в стандартный набор наклеек в цикле добавить несколько дополнительных и присвоить им в поле Tag некоторую метку, которая позволит нам дальше обрабатывать условия отображения надписей в стандартных и дополнительных наклейках на основе данной информации. Вторую часть задачи решает событие OnPrintOtchetElemVisiblePrepare которое выполняется в момент определения необходимости отображения того или иного элемента. Зная заранее что мы в цикле добавили несколько дополнительных наклеек с определенным полем Tag а также зная заранее идентификатор печатной формы и идентификаторы элементов на видимость которых нам нужно повлиять, мы можем в стандартных наклейках оставить стандартные надписи, а во вновь добавленных наклейках стандартные надписи скрыть и отобразить только дополнительные надписи (дополнительные надписи необходимо заранее с помощью редактора печатных форм добавить в печатную форму, скрипт будет просто влиять на их видимость).
procedure OnPrintOtchetBeforeBuild;
begin
//Showmessage('Event BB!!! '+inttostr(PrintModule.CurPrintOtchetId)+', '+inttostr(PrintModule.CurPrintObjectId));
end;
procedure OnPrintOtchetCyclePrepare;
var
i:integer;
rpr1,rpr2:TCycleRPRItem;
reil:TId32L;
rdiout:TRaskrDetalItem;
begin
//Showmessage('Event CP!!! '+inttostr(PrintModule.CurPrintOtchetId)+', '+inttostr(PrintModule.CurPrintObjectId));
if not((PrintModule.CurPrintOtchetId=109)and(PrintModule.CurPrintObjectId=1)) then exit;
i:=0;
while i<=PrintData.RPRDet.Items.Count-1 do
begin
rpr1:=PrintData.RPRDet.Items.GetByNum(i);
if (rpr1.detnum>=0)and(rpr1.Tag=) then
begin
reil:=rpr1.rei.GetElm(rpr1.detnum);
rdiout:=gd.RaskrProf.InDetales.GetById(reil.Id);
if rdiout.Ruchka then
begin
rpr2:=TCycleRPRItem.Create;
rpr2.Assign(rpr1);
rpr2.Tag:='Ruch1';
PrintData.RPRDet.Items.InsertBeforeNum(rpr2,aimYes,i+1);
rpr2:=TCycleRPRItem.Create;
rpr2.Assign(rpr1);
rpr2.Tag:='Ruch2';
PrintData.RPRDet.Items.InsertBeforeNum(rpr2,aimYes,i+1);
rpr2:=TCycleRPRItem.Create;
rpr2.Assign(rpr1);
rpr2.Tag:='Ruch3';
PrintData.RPRDet.Items.InsertBeforeNum(rpr2,aimYes,i+1);
end;
end;
inc(i);
end;
end;
procedure OnPrintOtchetElemVisiblePrepare;
var
rpr1:TCycleRPRItem;
poi:TPrintObjectItem;
popi:TPrintObjectPositionItem;
begin
//Showmessage('Event EVP!!! '+inttostr(PrintModule.CurPrintOtchetId)+', '+inttostr(PrintModule.CurPrintObjectId));
if not((PrintModule.CurPrintOtchetId=109)and(PrintModule.CurPrintObjectId=7)) then exit;
rpr1:=PrintData.RPRDet.Items.GetByNum(PrintData.RPRDet.ItemPos);
if (rpr1.detnum>=0)and(rpr1.Tag='Ruch2') then
begin
poi:=PrintModule.CurPrintObject;
if poi is TPrintObjectPositionItem then
begin
popi:=TPrintObjectPositionItem(poi);
popi.Visible:=false;
end;
//PrintModule.CurPrintObject.Visible:=false;
end;
end;