Table of Content
HAL Forum
Part 1: Find the window
In this example you will be shown all the necessary steps you need to take to change the layout of a window. In the first part you will learn how to locate a certain window, in the second part you will make a change to the window and compile it so you can see the result on your screen! To be able to do this example on your own machine you need a copy of Hansa World version 4.0 (in this example version 4.2 is used) or later and the source code folder named "english". The source code folder is named "english" if you are using the english version. If you are using some other launguage the folder might be named swedish, finnish etc. You also need a foder named halcust and the check box HAL Screens checked in your system configurations in Hansa to be able to compile the HAL code. (Module System => Setting System Configuration => HAL Screens). See the Get Started section for more information.


Find a window.
The first thing you normally do before you start modifying a window is to find it in the Hansa World Program. All windows in Hansa have on the title row the short code from the company register followed by a colon (:) sign, then the name of the window. Many of the windows also have a word describing the window state after the window name and a colon sign. For example when you bring up the detail window of an invoice the title line could for example be "DEMO: Invoice: Inspect". In this case the short code for the company where the invoice is registered is "DEMO", the name of the window is "Invoice" and the window state is "Inspect".

To find the HAL code that defines this window make a multi-file serach in the english folder. Search for the key word WindowBegin followed by left paranthesis, quotation mark and the window name. In the window name the company short code, the colon signs and the window state should be omitted. Add another quotation mark after the window name. So to find the Invoice window search for the following string in the english folder:

WindowBegin("Invoice"

In the english folder you might have a number of sub folders containing window definitions for products like First Office, First Contace etc., in this example you should ignore all files in these subfolders. The files we want to search in are the ones located directly inside the english folder. The search should find three occurrences of the search string in the file Haengsl.hal. That we get three different hits means that there are three different versions of the window. If we take a closer look at the file we realize that the first occurrence of the search string in the file belongs to the invoice window of the pocket version of Hansa. The second occurrence is the invoice window with touch screen look and the third is the "normal" invoice window.

To be able to modify the window the window definition should be copied into a different file that is stored in the halcust folder. So copy everything from WindowBegin("Invoice" down to and including the line EndWindow;. Paste the whole window definition into a new empty file. Then copy from the top of the Haengsl.hal file the four code lines:


event DefineWindows
begin
  Real h,h1,h2,h3,h4,h5,h6,h7,hs,hm,v,v3,l,vs,vm,f,t,x,v2;

  SetLangMode(LangEnglish,"ENG",0);




Paste these lines in the top of your new file and add to the bottom of your file:


  return;
end;




Some of the window definitions are using calls to external functions or procedures. In order for these window definitions to work you must also copy the declarations of the external functions and procedures from the top of the Haengsl.hal file and paste them into your new file. When declaring an external function/procedure it must be declared with the keyword "inner" if the prodecure is not defined in a file in the halcust folder (only for Hansa version 4.1 or later). So let´s add the following lines to the top of your new file.


external inner function real FunctionButtons(string);
external inner function Boolean TouchScreenLook();
external inner function real ItemButtons(string,Integer);




Save the file into your halcust folder and give it a filename with the suffix .hal for example MyInvoiceWindow.hal. Below is shown what your file should look like. Next we will see how to modify the window definition code!

The file MyInvoiceWindow.hal



external function real FunctionButtons(string);
external function Boolean TouchScreenLook();
external function real ItemButtons(string,Integer);

event DefineWindows
begin
  Real h,h1,h2,h3,h4,h5,h6,h7,hs,hm,v,v3,l,vs,vm,f,t,x,v2;

  SetLangMode(LangEnglish,"ENG",0);
  
  WindowBegin("Invoice",IVDClass,CGview,-);
  SetWRect(20,80,620,420);
  Sizeable(-1,-1,0,0);
  UseView(IVVc);
  ActiveFieldOnNew("CustCode");  
  Tile(0,48+22,false,"",CustCode);
  EditField(75,vm=(v=6), 82,"No.",Normal,SerNr,false,TSerSClass);
  EditField(75,v+=20,95, "Customer",Normal,CustCode,false,CUSClass);
  EnterSkip(PayDeal);
  EditField(h=216,v=vm,-40,"Name",Normal,Addr0,false,0);
//  HalPushButton(-150,v+25,-100,v+25+20,"DoNewCashIn","Cash In"); //Customer Specific
  v = v+24;
  TileButton(1,"Terms");
  TileButton(2,"Items");
  TileButton(3,"Currency");
  TileButton(4,"Delivery");
  TileButton(5,"Identifiers");
  TileButton(6,"Inv. Address");
  TileButton(7,"Del. Address");
//  CheckBox(210,v,0,"OK",OKFlag);
  Tile(1,92,false,"1",InvDate);
  vs = 20; h1 = 110; h2 = 300; h3 = 480;
  EditField(h1,vm=(v=6),82,"Inv. Date",Normal,InvDate,false,PasteCurDate);
  EditField(h1,v+=vs,20,"Pay. Terms",Normal,PayDeal,false,PDSClass);//PDMSClass);
  EditField(h1,v+=vs,82,"Due Date",Normal,PayDate,false,PasteCurDate);
  EditField(h1,v+=vs,82,"Trans. Date",Normal,TransDate,false,PasteCurDate);
  EditField(h2,v=vm,135,"Our Ref.",Normal,OurContact,false,0);
  EditField(h3+50,v,50,"Salesman",Normal,SalesMan,false,UserSClass);
  EditField(h2,v+=vs, 135,"Attn.",Normal,ClientContact,false,ContactSClass);
  EditField(h2,v+=vs,135,"Object",Normal,Objects,false,ObjSClass);
  EditField(h2,v+=vs,135,"Official Ser. No.",Normal,OfficialSerNr,false,LegalInvNrSClass);
  EnterSkip(Math);
  Tile(2,190,true,"2",Math);
  CheckBox(20,-20,0,"OK",OKFlag);
  EditField(65,-41,50,"Currency",Normal,CurncyCode,false,CurncyCodeSClass);
  EditField(190,-41,70,"Freight",Normal,FrPrice,true,0);
  EditField(190,-21,70,"Ext. Tax",ViewOnly,Tax1Sum,true,0);
  EditField(310,-41,80,"VAT",ViewOnly ,Sum3,true,0);
  EditField(310,-21,95,"Base",ViewOnly,BaseSum4,true,0);
  EditField(-133,-41,95,"Sub-Total",ViewOnly ,Sum1,true,0);
  EditField(-133,-21,95,"TOTAL",ViewOnly ,Sum4,true,0);
  v = 24;
  MatrixBegin(4,v,-50,-49,-,200);
  MatTypedRow(stp);
  Flip(0);
  MatCol(t=1,32,"Item",0,ArtCode,false,INSClass);
//  MatCol(t,94,"Var",0,VARList,true,VARSClass);
//  MatCol(t,144,"Qty",0,Quant,true,0);
  MatCol(t,94,"Qty",0,Quant,true,MATVARINSClass);
  EnterSkip(ArtCode);
  MatText(t=3,32,"Credit of Invoice",true);
  MatCol(t,208,"",0,OrdRow,false,ARSClass);
  MatCol(t,-216,"",0,Spec,false,0);//MatText(t,-216,"",true);
  MatText(t=4,32,"Interest",true);
  MatCol(t,98,"",0,ArtCode,false,0);
  MatCol(t,153,"",0,Quant,true,0);
  MatCol(t,188,"",0,Spec,false,0);
  MatText(t=5,32,"Down Payment",true);
  MatCol(t,188,"",0,Spec,false,0);
  MatColTL(t,-170,"",0,-1,Normal,0,Sum,true,0); //?? TL?
  MatCol(t,-70,"",0,SalesAcc,false,AccSClass);
  MatCol(t,-24,"",0,VATCode,false,VATCodeSClass);
  MatText(t=6,32,"Prepayment Number",true);
  MatCol(t,170,"",0,CUPNr,true,ARPaySClass);
  MatCol(t,-300,"",0,Spec,false,0);
  MatCol(t,-170,"",0,Price,true,0);// Price holds the VAT sum, Recipe holds the date of prepaym. 
  MatCol(t,-100,"",0,Sum,true,0);
  MatText(t=7,32,"Loan",true);
  MatCol(t,98,"",0,CuAccCode,true,CuAccSClass);
  MatCol(t,-350,"",0,SalesAcc,true,AccSClass);
  MatCol(t,-230,"",0,Objects,false,0);
  MatCol(t,-110,"",0,Sum,true,0);
  MatCol(t,-30,"",0,VATCode,false,VATCodeSClass);
  MatText(t=8,32,"Loan Int.",true);
  MatCol(t,98,"",0,CuAccCode,true,CuAccSClass);
  MatCol(t,-350,"",0,SalesAcc,true,AccSClass);
  MatCol(t,-230,"",0,Objects,false,0);
  MatCol(t,-110,"",0,Sum,true,0);
  MatCol(t,-30,"",0,VATCode,false,VATCodeSClass);
  MatText(t=9,34,"Subtotal",true);
  MatCol(t,100,"",0,Spec,false,0);
  MatCol(t,-140,"Sum",0,Sum,true,0);
//  MatCol(t,-70,"Cost",0,Cost,true,0);
  MatText(t=10,32,"This row and all rows below it will be hidden on printout",false);
  MatText(t=11,32,"K",true);
  MatCol(t,47,"Item",0,ArtCode,false,INSClass);
  MatCol(t,94,"Qty",0,Quant,true,0);
  MatText(t=12,32,"Retention",true);
  MatCol(t,188,"",0,Spec,false,0);
  MatColTL(t,-170,"",0,-1,ViewOnly,0,Sum,true,0); //?? TL?
  MatCol(t,-70,"",0,SalesAcc,false,AccSClass);
  MatCol(t,-24,"",0,VATCode,false,VATCodeSClass);
  MatText(t=13,28,"GC",true);
  MatCol(t,58,"",0,GCNr,false,GCSClass);
  MatCol(t,-316,"",0,Spec,false,0);
  MatCol(t,-84,"Sum",0,Sum,true,0);
  MatCol(t,-24,"",0,VATCode,false,VATCodeSClass);  
  MatText(t=14,28,"GCR",true);
  MatCol(t,58,"",0,GCNr,false,GCSSClass);
  MatCol(t,-316,"",0,Spec,false,0);
  MatCol(t,-84,"Sum",0,Sum,true,0);
  MatCol(t,-24,"",0,VATCode,false,VATCodeSClass);  
  MatText(t=15,28,"CASH",true);
  MatCol(t,68,"Sum",0,Sum,true,0);
  MatCol(t,108,"Curency",0,CurncyCode,true,CurncyCodeSClass);
  MatCol(t,-280,"Spec",0,Spec,false,0);
  MatText(t=16,28,"CC",true);
  MatCol(t,58,"Sum",0,Sum,true,0);
  MatCol(t,-280,"",0,CreditCard,false,CreditCardSClass);
  MatCol(t,-84,"Authorization",0,AuthorizationCode,false,0);
  Flip(1);
//  MatCol(t=1,194,"Description",0,Spec,false,0);
  MatCol(t=1,144,"Description",0,Spec,false,0);
  MatCol(t,-235,"Unit Price",0,Price,true,0);
//  MatColTL(t,-235,"",0,M45Val,Normal,0,Price,true,0);
  MatCol(t,-135,"%",0,vRebate,true,0);
  MatCol(t,-100,"Sum",0,Sum,true,0);
  MatCol(t=4,-260,"",0,OrdRow,true,0);
  MatCol(t,-235,"",0,BasePrice,true,0);
  MatCol(t,-135,"",0,vRebate,true,0);
  MatCol(t,-100,"",0,Sum,true,0);
  MatCol(t=11,144,"Description",0,Spec,false,0);
  MatCol(t,-235,"Unit Price",0,Price,true,0);
  MatCol(t,-135,"%",0,vRebate,true,0);
  MatCol(t,-100,"Sum",0,Sum,true,0);
  Flip(2);
  MatCol(t=1,144,"Description",0,Spec,false,0);
  MatCol(t,-250,"A/C",0,SalesAcc,false,AccSClass);
  MatCol(1,-170,"Accrual",0,PeriodCode,false,AutSimPerSClass);
  MatCol(t,-124,"Objects",0,Objects,false,ObjSClass);
  MatCol(t,-24,"V-Cd",0,VATCode,false,VATCodeSClass);
  MatCol(t=4,-70,"",0,SalesAcc,false,AccSClass);
  MatCol(t,-24,"",0,VATCode,false,VATCodeSClass);
//  MatCol(t=6,-224,"",0,SalesAcc,false,AccSClass);
//  MatCol(t,-24,"",0,VATCode,false,VATCodeSClass);
  MatCol(t=11,144,"Description",0,Spec,false,0);
  MatCol(t,-250,"A/C",0,SalesAcc,false,AccSClass);
  MatCol(t,-170,"Accrual",0,PeriodCode,false,AutSimPerSClass);
  MatCol(t,-104,"Objects",0,Objects,false,ObjSClass);
  MatCol(t,-24,"V-Cd",0,VATCode,false,VATCodeSClass);
  Flip(3);
  MatCol(t=1,144,"Description",0,Spec,false,0);
  MatCol(t,-315,"Unit Price",0,Price,true,0);
  MatCol(t,-245,"%",0,vRebate,true,0);
  MatCol(t,-210,"Cost",0,BasePrice,true,0);
  MatCol(t,-140,"GP",0,rowGP,true,0);
  MatCol(t,-70,"FIFO",0,FIFO,true,0);
  MatCol(t=11,144,"Description",0,Spec,false,0);
  MatCol(t,-315,"Unit Price",0,Price,true,0);
  MatCol(t,-245,"%",0,vRebate,true,0);
  MatCol(t,-210,"Cost",0,BasePrice,true,0);
  MatCol(t,-140,"GP",0,rowGP,true,0);
  MatCol(t,-70,"FIFO",0,FIFO,true,0);
  Flip(4);
  MatCol(t=1,144,"Description",0,Spec,false,0);
  MatCol(t,-310,"Serial No",0,SerialNr,false,SerialNrSClass);
  MatCol(t,-240,"P.Factor",0,PriceFactor,true,0);
  MatCol(t,-180,"Recipe",0,Recepy,true,0);
  MatCol(t,-110,"Row FIFO",0,FIFORowVal,true,0);
  MatCol(1,-40,"Coeff",0,Coefficient,true,0);
  MatCol(t=11,144,"Description",0,Spec,false,0);
  MatCol(t,-310,"Serial No",0,SerialNr,false,SerialNrSClass);
  MatCol(t,-240,"P.Factor",0,PriceFactor,true,0);
  MatCol(t,-180,"Recipe",0,Recepy,true,0);
  MatCol(t,-110,"Row FIFO",0,FIFORowVal,true,0);
  MatCol(t,-40,"Coeff",0,Coefficient,true,0);
  Flip(5);
  MatCol(t=1,144,"Description",0,Spec,false,0);
  MatCol(t,-315,"Unit",0,UnitCode,false,UnitSClass);
  MatCol(t,-260,"Unit Qty",0,UnitFactQuant,true,0);
  MatCol(t,-200,"Width",0,UnitXval,true,0);
  MatCol(t,-160,"Height",0,UnitYval,true,0);
  MatCol(t,-120,"Depth",0,UnitZval,true,0);
  MatCol(t,-80,"Unit Pr. of Unit",0,UnitFactPrice,true,0);
  MatCol(t=11,144,"Description",0,Spec,false,0);//New Row Type..
  MatCol(t,-315,"Unit",0,UnitCode,false,UnitSClass);
  MatCol(t,-260,"Unit Qty",0,UnitFactQuant,true,0);
  MatCol(t,-200,"Width",0,UnitXval,true,0);
  MatCol(t,-160,"Height",0,UnitYval,true,0);
  MatCol(t,-120,"Depth",0,UnitZval,true,0);
  MatCol(t,-80,"Units Unit Price",0,UnitFactPrice,true,0);
  Flip(6);
  MatCol(t=1,144,"Description",0,Spec,false,0);
  MatCol(t,-80,"Environment Tax",0,RepaExVAT,true,0);
  MatCol(t=11,144,"Description",0,Spec,false,0);//New Row Type..
  MatCol(t,-80,"Environment Tax",0,RepaExVAT,true,0);
  InsertRowTest;
  DeleteRowTest;
  EndMatrix;
  vs = 22;
  v = 18; VTab(-35,v,-16,v+vs,ToolFlip,1,"A");
  v=v+ vs; VTab(-35,v,-16,v+vs,ToolFlip,2,"B");
  v=v+ vs; VTab(-35,v,-16,v+vs,ToolFlip,3,"C");
  v=v+ vs; VTab(-35,v,-16,v+vs,ToolFlip,4,"D");
  v=v+ vs; VTab(-35,v,-16,v+vs,ToolFlip,5,"E");
  v=v+ vs; VTab(-35,v,-16,v+vs,ToolFlip,6,"F");
  Tile(3,70,false,"3",FrRate);
  vs = 20;
  EditField(h=110,v=6,50,"Currency",Normal,CurncyCode,false,CurncyCodeSClass);
  EditField(h2=295,v,50,"Rate",Normal,FrRate,true,0);
  EditField(h3=360,v,50,":",Normal,ToRateB1,true,0);
  StaticText(h3+60,v+12,"Base Currency 1",false);
  EditField(h,v+=vs,50,"Base Currency 1",Normal,BaseRate1,true,0);
  EditField(h3,v,50,":",Normal,ToRateB2,true,0);
  StaticText(h3+60,v+12,"Base Currency 2",false);
  EditField(h,v+=vs,50,"Base Currency 2",Normal,BaseRate2,true,0);
  Tile(4,170,false,"4",ShipDeal);
  vs = 20;
  EditField(h=110,v=6,60,"Del. Terms",Normal,ShipDeal,false,ShipDealSClass);
  EditField(h2=360,v,60,"Del. Mode",Normal,ShipMode,false,DMSClass);
  EditField(h,v+=vs,  30,"Rem. Level",Normal,LastRemndr,false,0);
  EditField(h2,v,95,"Last Rem. Date",Normal,LastRemDate,false,0);
  EditField(h,v+=vs,  50,"Price List",Normal,PriceList,false,PLDefSClass);
  EditField(h2,v,  50,"Discount Matrix",ViewOnly,RebCode,false,0); 
//  EditField(h,v+=vs,60,"Disc. %",ViewOnly,DiscPerc,false,0);
//  EditField(h2,v,90,"Disc. Amount",ViewOnly,DiscSum,false,0);
  EditField(h,v+=vs,  50,"Interest",Normal,IntCode,false,IntSClass);
  EditField(h2,v,80,"Debtors",ViewOnly,ARAcc,false,0);
  EditField(h,v+=vs,80,"Tot Quantity",ViewOnly,TotQty,true,0);
  EditField(h2,v,80,"Tot Weight",ViewOnly,TotWeight,true,0);
  EditField(h,v+=vs,80,"Tot Volume",ViewOnly,TotVolume,true,0);
  EditField(h2,v,70,"Tot GP",ViewOnly,TotGP,false,0);
  EditField(h,v+=vs,80,"Commission",Normal,Commision,true,0);
  EditField(h2,v,80,"Tot Inc Com",ViewOnly,SumIncCom,true,0);
  EditField(h,v+=vs,80,"Stat. Value",Normal,StatVal,true,0);
  CheckBox(h3=(h2+120),v=10,0,"Update Stock",UpdStockFlag);
  CheckBox(h3,v+=16,0,"No Reminder",NoRemndrFlag);
  CheckBox(h3,v+=16,0,"No Interest",NoInterestFlag);
  CheckBox(h3,v+=16,0,"No Collection",NoColectionFlag);
  CheckBox(h3,v+=16,0,"Disputed",DisputedFlag);
  CheckBox(h3,v+=16,0,"Cust. _Info on Trans.",ARonTR);
  CheckBox(h3,v+=16,0,"Electronic Invoice",EInvFunc);
  Tile(5,150,false,"5",OrderNr); vs = 20;
  EditField(h,v=6,60,"Order No.",ViewOnly,OrderNr,false,0);
  EditField(h2,v,-20,"Cust. Ord. No.",Normal,CustOrdNr,false,0);
  EditField(h,v+=vs,95,"Org. Customer",ViewOnly,OrgCust,false,0);
  EditField(h2,v,-20,"Sorting",Normal,Sorting,false,0);
  EditField(h,v+=vs,60,"Location",Normal,Location,false,LocationSClass);
  EditField(h2,v,  50,"Language",Normal,LangCode,false,LangSClass);
  EditField(h,v+=vs,95,"Project",Normal,PRCode,false,PRSClass);
  EditField(h2,v   ,50,"Serv Ord. No.",ViewOnly,SVONr,false,0);
  EditField(h,v+=vs,  150,"Credit Card",Normal,CreditCard,false,CreditCardSClass);
  EditField(h2,v,  80,"Authorisation",Normal,AuthorizationCode,false,0);
  EditField(h,v+=vs,  150,"E-Inv Exp. Date",ViewOnly,EInvExpDate,false,0);
  EditField(h2,v,  80,"E-Inv Exp. Qty",ViewOnly,EInvExpQty,false,0);
  CheckBox(h3,v,0,"E-Invoice Exported",EInvExpFlag);
  EditField(h,v+=vs, -20,"Comment",Normal,InvComment,false,0);
  Tile(6,220,false,"6",Addr1); vs = 20;
  EditField(h=110,v=6,-20,"Invoice To",Normal,Addr1,false,0);
  EditField(h,v+=vs, -20,"Address",Normal,Addr2,false,0);
  EditField(h,v+=vs, -20,"",Normal,Addr3,false,0);
  EditField(h,v+=vs, -20,"",Normal,InvAddr3,false,0);
  EditField(h,vm=(v+=vs), -20,"",Normal,InvAddr4,false,0);
  ButtonFrame(h+4,v+=40,140,5,"Zone");
  RadioButton(h+4,v,0,0,"Domestic",ExportFlag);
  RadioButton(h+4,v+=16,1,0,"Inside EU",ExportFlag);
  RadioButton(h+4,v+=16,3,0,"Inside EU (Book VAT)",ExportFlag);
  RadioButton(h+4,v+=16,2,0,"Outside EU",ExportFlag);
  RadioButton(h+4,v+=16,4,0,"Outside EU (Book VAT)",ExportFlag);
  EditField(h2,v=vm+vs, -20,"VAT Reg.",Normal,VATNr,false,0);
  EditField(h2,v+=vs,100,"Phone",Normal,Phone,false,0);
  EditField(h2,v+=vs,100,"Fax",Normal,Fax,false,0);
  Tile(7,150,false,"7",ShipAddr0); vs = 20;
  EditField(h=110,v=6,-20,"Delivery",Normal,ShipAddr0,false,0);
  EditField(h,v+=vs, -20,"Address",Normal,ShipAddr1,false,0);
  EditField(h,v+=vs, -20,"",Normal,ShipAddr2,false,0);
  EditField(h,v+=vs, -20,"",Normal,ShipAddr3,false,0);
  EditField(h,v+=vs, -20,"",Normal,DelAddr3,false,0);
  EditField(h,v+=vs, -20,"",Normal,DelAddr4,false,0);
  EditField(h,v+=vs,80,"Address",Normal,DelAddrCode,false,DelAddrSClass);
  EnterSkip(InvDate);
  SpecialMenu("Item Status",'I',0,"ItemStatusIVDsm");
  SpecialMenu("Create Cash In",' ',1,"DoCLInFromIVD");
  SpecialMenu("Invoice Status",' ',2,"IVInfoIVDsm");
  SpecialMenu("Print Proforma Invoice",' ',3,"PrintProformaIVDsm");
  SpecialMenu("Connect to Prepayment",' ',4,"ConnectToPrepayIVDsm");
  SpecialMenu("Update Currency Price List Items",' ',5,"UpdatePricesIVDsm");
  SpecialMenu("Create Instalments",' ',6,"CreateInstalmentsIVDsm");
  SpecialMenu("Print Cash IN-OUT",' ',7,"PrintCashInOutIVDsm");
  SpecialMenu("Open NL Transaction",' ',8,"OpenTRFromIV");
  SpecialMenu("Create EDI Invoice",' ',9,"DoEDIInvFromIVD");
  SpecialMenu("Recalculate Weight and Volume",' ',10,"RecalcWeightIVDsm");
  SpecialMenu("Recalculate Discount",' ',11,"RecalcDiscountIVDsm");
  SpecialMenu("Add Hidden Line",' ',12,"HiddenLineIVDsm");
  SpecialMenu("Create Contract",' ',13,"COFromIVDsm");
  SpecialMenu("Change to Base 1",' ',14,"SwitchToBase1IVDsm");
  SpecialMenu("Previous Sales Prices",' ',15,"IVLastSPrsm");
  SpecialMenu("Correction Invoice",' ',16,"CorrectionIVsm");
  SpecialMenu("VAT Correction",' ',17,"VATCorrectionIVsm");
  SpecialMenu("Create First Event",' ',18,"FirstEventIVDsm");
  SpecialMenu("Add Environment Tax",' ',19,"RepaIVsm");
  SpecialMenu("Print to Fiscal Printer",' ',19,"PrintToFiscPrntIVDsm");
  EndWindow;
  
  return;
end;