Добавление дополнительных наклеек при печати наклеек на профиль с дополнительной информацией

Материал из ADGroupWiki
Перейти к навигации Перейти к поиску

Данный скрипт довольно сложный в применении по сравнению с другими скриптами. Задача: необходимо на основе определенных условий добавить в цикл наклеек на профиль дополнительные наклейки с отображением дополнительной информации (например дополнительные наклейки на детали створки в которых установлена ручка для отображения подробной информации по фурнитуре на данной створке). Выполнение данной задачи обеспечивает наличие двух событий в модуле печати OnPrintOtchetCyclePrepare и OnPrintOtchetElemVisiblePrepare (третье событие OnPrintOtchetBeforeBuild в данном скрипте не используется). Событие OnPrintOtchetCyclePrepare выполняется после подготовки любого цикла. Благодаря данному событию мы можем заранее указать идентификатор печатной формы и идентификатор элемента цикла на который мы будем оказывать влияние (вот строка if not((PrintModule.CurPrintOtchetId=109)and(PrintModule.CurPrintObjectId=1)) then exit;). Смысл нашего влияния это в стандартный набор наклеек в цикле добавить несколько дополнительных и присвоить им в поле Tag некоторую метку, которая позволит нам дальше обрабатывать условия отображения надписей в стандартных и дополнительных наклейках на основе данной информации. Вторую часть задачи решает событие OnPrintOtchetElemVisiblePrepare которое выполняется в момент определения необходимости отображения того или иного элемента. Зная заранее что мы в цикле добавили несколько дополнительных наклеек с определенным полем Tag а также зная заранее идентификатор печатной формы и идентификаторы элементов на видимость которых нам нужно повлиять, мы можем в стандартных наклейках оставить стандартные надписи, а во вновь добавленных наклейках стандартные надписи скрыть и отобразить только дополнительные надписи (дополнительные надписи необходимо заранее с помощью редактора печатных форм добавить в печатную форму, скрипт будет просто влиять на их видимость).

Файл:PrintNeskolkoNakleek.rar

 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;