Mapas fiscais de imobilizado PT - Informação trocada

Tenho o seguinte problema :
ao sacar os mapas de imobilizado estes  estão trocados , a informação de 33.11 sai no 33.12 e sucessivamente , as parametrizações estão correctas inclusive o valor  influente para os activos  totalmente amortizado aquando da reavaliação .
alguem sabe como ultrapassar isto ?

Os mapas de imobilizados  PT ( Portugal ) separam os bens que sofreram reavaliações  ,  diferenciando   os que estavam totalmente amortizados  na data da reavaliação   como exemplo temos o mapa 33.11 e 33.12 .
A parametrização tem que mostrar como  separamos os bens que estão ou não totalmente  amortizados no momento da reavaliação .  isso está feito  e assim ocorre em outras empresas.
Anotar que estamos a falar de activos que  migraram de outro sistema para o  SAP , não de activos criados e reavalidados em SAP . Os activos quando carregados em SAP já tinham a informação da revaliação .
O problema é que  a informação dos activos  nos mapas de amortização  está trocada , o que m e sai no mapa 33.11 deveria sair no mapa 33.12  e vice versa . 
As transações que utilizo são as seguintes :
S_P99_41000033 e S_P99_41000034

Similar Messages

  • Mapping Master/Detail type of information in a PDF form

    Hi there,
    I have a Web Dynpro Application and I am experiencing some difficulties in mapping the Web Dynpro Context to the PDF form to get the desired result. I hope you smart people can help me.
    In the Web Dynpro Context I have the following structure:
    - DataSource
    Customer (0..n)
    Name
    Address (0..1)
    some attributes like Street, City, etc.
    Orders (0..n)
    some attributes like description, amount, etc
    On the PDF form I want to generate 1 PDF that displays all the order details for all the customers.
    In other words a high-level layout for the PDF would be:
    Heading
    Customer 1
    -- Name and Address
    -- All Orders
    Customer 2
    -- Name and Address
    -- All Orders
    Customer n
    -- Name and Address
    -- All Orders
    By using a SubForm and binding the context I can easily repeat the display of all Customers, but I cannot manage to display all the orders for just a specific Customer.
    I believe that I am just not finding how to setup the binding for the PDF elements correctly. If I just drag-n-drop the Order elements onto the form I get a binding in the PDF form of $record.Customer[].Orders[].amount. This does not seem to be correct.
    Can any one help me with a solution to my problem? Any advice or a more advanced tutorial than the ones I've found will be much appreciated.
    Many thanks,
    Albertus

    Hello,
    Unfortunately I get an exception on the Orders Subform when I try that.
    The error message is "The SOM expression 'Orders[*]' for the dataRef specified on field 'Orders', resolved to an incompatible node value of 'dataValue'.
    I followed the tutorial "Unit: Interactive Forms Integration into Web Dynpro for
    Java, Topic: Dynamically generated forms" that suggested nesting Subforms. The structure I currently have:
    Customer SubForm             -> <b>Type:</b> Flow Content, <b>Flow Direction:</b> Table
    |--- Customer Row SubForm -> <b>Type:</b> Position Content, <b>Binding:</b> $record.Customer[*], Repeat for Each Data Item
    Up to here it works and it repeats for all Customers, but the next subform is the problem. After your reply I set it up as follows:
         |--- Orders Subform         -> <b>Type:</b> Position Content, <b>Binding:</b> Orders[*]
              |--- Description          -> <b>Binding:</b> Description
    But I then get the exception above. Any ideas?
    Thanks,
    Albertus

  • WRT1900AC Network map not displaying accurate information

    Hi All,
    For some reason my network map doesn't show correct information for example it's showing my server to be connected as a Wifi connection and has 3 of them.
    It also shows a phone connected via a cable.
    Currently running on Version: 1.1.8.164461
    Which is the latest.

    Just a bug. The server must have disconnected and reconnected 2 times and the previous connections were not removed from the list.
    The strange thing is it's showings as both 2.4 and 5 Ghz connections. Is the server wireless adapter capable of both 2.4 and 5Ghz?
    Please remember to Kudo those that help you.
    Linksys
    Communities Technical Support

  • What is difference between  Service map iview and Workset Map iview

    Hi Experts,
                        Can anyone tell me the difference between  service map iView and Workset Map iView.
    When I am creating these iViews, its seams both are same. I canu2019t find difference still, can anyone help me out of this
    Thanks in Advance
    Janardhan

    Hi,
    Service Map Iview:The Service Map iView is an ERP-specific variant of the portal Workset Map iView. It serves as a central point of entry and guided access to the services of SAP service modules such as the Manager Self Service (MSS) module, or the Employee Self Service (ESS) module.
    Workset Map iview:A Workset Map is the equivalent of a site map, providing users with explicit information on the functionality that is available in a given workset. It is based on an iView, and serves as a central point of entry and guided access to the contents of a workset.
    if you want to more info pls go thr the below thread
    Workset Map iView
    i hope it will help you
    Thanks,
    Sreeni.

  • Message Mapping using UseOneAsMoney

    Hi Experts,
    I am doing the Message Mapping as mentioned in the below blog. I am getting the Error as
    05:15:46 Start of test
    Exception:[com.sap.aii.mappingtool.tf7.FunctionException: Too few values in the first queue in function useOneAsMany. It must have the same number of contexts as the second queue] in class com.sap.aii.mappingtool.flib7.NodeFunctions method useOneAsMany[[Ljava.lang.String;@478d13c, [Ljava.lang.String;@17f0bc6f, [Ljava.lang.String;@3de327b0, com.sap.aii.mappingtool.tf7.rt.ResultListImpl@c42b38e, com.sap.aii.mappingtool.tf7.rt.Context@6f1a35eb]
    com.sap.aii.utilxi.misc.api.BaseRuntimeException: Exception:[com.sap.aii.mappingtool.tf7.FunctionException: Too few values in the first queue in function useOneAsMany. It must have the same number of contexts as the second queue] in class
    I have searched in other blog also and ended up with the same error. Please check and do the needful.
    The Basic Problem
    We have an IDoc ORDERS05 with purchase order information where each purchase order line item (represented by segment .<E1EDP01>) can contain multiple schedule lines (represented by segment <E1EDP20>). For example, we have 2 line items with 3, resp. 2 schedule lines. Then the corresponding portion of message ORDERS05 can look as follows:
       <E1EDP01>
          <POSEX>00010</POSEX>
          <E1EDP20 SEGMENT="1">
             <WMENG>15</WMENG>
          </E1EDP20>
          <E1EDP20 SEGMENT="1">
             <WMENG>44</WMENG>
          </E1EDP20>
          <E1EDP20 SEGMENT="1">
             <WMENG>3</WMENG>
          </E1EDP20>
       </E1EDP01>
       <E1EDP01>
          <POSEX>00020</POSEX>
          <E1EDP20 SEGMENT="1">
             <WMENG>32</WMENG>
          </E1EDP20>
          <E1EDP20 SEGMENT="1">
             <WMENG>12</WMENG>
          </E1EDP20>
       </E1EDP01>
    We want to map the information of the IDoc ORDERS05 to the message OrderCreate of the CIDX v4.0 standard. This message uses a more flat
    structure where the purchase order line items and the corresponding schedule lines are on the same level. The corresponding portion of the
    message OrderCreate (for the same information as in the IDoc) looks as follows:
       <OrderCreateProductLineItem>
    <PurchaseOrderLineItemNumber>00010</PurchaseOrderLineItemNumber>
          <ProductQuantity>15</ProductQuantity>
       </OrderCreateProductLineItem>
       <OrderCreateProductLineItem>
          <PurchaseOrderLineItemNumber>00010</PurchaseOrderLineItemNumber>
          <ProductQuantity>44</ProductQuantity>
       </OrderCreateProductLineItem>
       <OrderCreateProductLineItem>
          <PurchaseOrderLineItemNumber>00010</PurchaseOrderLineItemNumber>
          <ProductQuantity>3</ProductQuantity>
       </OrderCreateProductLineItem>
       <OrderCreateProductLineItem>
          <PurchaseOrderLineItemNumber>00020</PurchaseOrderLineItemNumber>
          <ProductQuantity>32</ProductQuantity>
       </OrderCreateProductLineItem>
       <OrderCreateProductLineItem>
          <PurchaseOrderLineItemNumber>00020</PurchaseOrderLineItemNumber>
          <ProductQuantity>12</ProductQuantity>
       </OrderCreateProductLineItem>
    The data in red correspond to data of the segment <E1EDP01>, while the information in blue correspond to data of the segment <E1EDP20> of the original IDoc. Note that the data in red need to be duplicated based on the occurence of segment <E1EDP20>.
    Solution 1
    A simple solution of this mapping problem exists under the assumption that in the IDoc ORDERS05 each segment <E1EDP01> contains at least one segment <E1EDP20>. Luckily this assumption holds true for IDocs created via the purchase order creation process in ERP.
    1. Mapping of <OrderCreateProductLineItem>
    The segment <OrderCreateProductLineItem> of the target structure needs to be created once for each occurrence of segment <E1EDP20> of our source structure. This can easily be achieved via the following mapping:
    Remember to change the context to IDOC.
    2. Mapping of <PurchaseOrderLineItemNumber>
    Since the information for the node <PurchaseOrderLineItemNumber> comes from the IDoc segment <E1EDP01>, this node needs to be replicated based on the occurrence of segment <E1EDP20> under each segment <E1EDP01>. This can be achieved using the node function useOneAsMany as follows:
    I will not describe the functionality of the node function useOneAsMany in detail since there is a lot of excellent documentation available on this function, for example in the SAP help . In our scenario you only need to change the context of the second input parameter to E1EDP01.
    With the sample input from above, the function useOneAsMany will give the following result:
    3. Mapping of <ProductQuantity>
    Since the <ProductQuantity> is derived from a value of the IDoc segment <E1EDP20> the mapping for this field is trivial (remember that <ProductQuantity> must occur once per <E1EDP20> segment):
    Please check the error and guide me how to proceed further.
    Regards,
    GIRIDHAR

    Hi
    The problem is that you the first and second input queue of UseOneAsMany function does not have the same number of context changes.
    Do your mapping like this
    E1EDP20(set context to Idoc level )----> OrderCreateProductLineItem
    First input of UseOneAsMany   --->POSEX ( set context to E1EDP01)
    Second input of UseOneAsMany--->  E1EDP20 ( set context to E1EDP01 )
    Third  input of UseOneAsMany--->  E1EDP20 ( set context to E1EDP01 )
    Then after UseOneAsMany use removeContext--->SplitByEachValue--->PurchaseOrderLineItemNumber
    WMENG ( set context to E1EDP20) ----> ProductQuantity
    This will give you the output in the format you are asked for.
    Let me know if any issues.

  • How to execute an ABAP Mapping after a Java Mapping

    Hi, i have found a Bug in XI and SAP said to me that the only solution is to execute an ABAP mapping after my java mapping.
    I have an IDOC to FILE scenario
    Could anyone orient me on what do i have to configure, so after my java mapping i can execute an abap mapping ?.
    Do i have to use process integration?
    thanks
    Mariano.

    i have developed a Java mapping originally, but XI has a bug. When you do not write anything to the outputStream XI instead of writing an emtpy file writes a file containing one byte ( 0x00 ) and this is a problem.
    SAP said to me that they will not fix this issue so they recomend me to create an abap mapping after my java mapping that will send no information if it receives this byte (0x00) and if not it will write all the information as received.
    My doubt regarding putting several mappings in the interface mapping configuration is this...
    Actual configuration:
    SOURCE MSG A -> ORIGINAL MAPPING -> TARGET MSG B
    Proposed configuration
    SOURCE. MSG A -> ORIGINAL MAPPING -> TARGET MSG B
    SOURCE. MSG A -> PATCH MAPPING -> TARGET MSG B
    I dont understand what receives de "patch mapping" it receives the structure from TARGET MSG B?
    regards
    mariano

  • Mapping Alerts in BPM

    Hi,
      I am working on a scenario where in i need to raise alerts to business end users from mapping errors. The mapping errors occurs due to missing data in Idoc segments. I have tried using the control step in exception branch and posting a call to the Alert Category defined in ALRTCATDEF in the ABAP stack.
    In the alert category, i have defined the container variables and used the following configurations in the long text -
    Message ID : &SXMS_MSG_GUID&
    Sender Service : &SXMS_FROM_SERVICE&
    Sender Interface : &SXMS_FROM_INTERFACE&
    Sender NameSpace : &SXMS_FROM_NAMESPACE&
    Receiver Service : &SXMS_TO_SERVICE&
    Receiver Interface : &SXMS_TO_INTERFACE&
    Receiver Namespace : &SXMS_TO_NAMESPACE&
    Adapter Error : &SXMS_TO_ADAPTER_ERRTXT&
    Error Category : &SXMS_ERROR_CAT&
    Error Code : &SXMS_ERROR_CODE&
    However on mapping error, i get the alert message in the inbox with all the above fields blank. Even i am not getting the possible subsequent activities in the alert mail.
    The client requires the details to be filled in case of mapping errors.
    For your information, the above information is well filled in case of any adapter error or Network issues (ICM failure etc..).
    I doubt that the data is unable to be filled in due to mapping being executed on the Java stack.
    Please suggest.
    Thanks,
    Amit

    Hi Amit,
       I faced the same issue in one of my projects.
    You canot get dynamic messages(Using container variables) with the long text option in your alert category.
    You can do the following.
    1) In the Exception branch, have a transformation step with source message as the source message in your actual mapping and target message as an abstartct interface(Name it as Alert_Variables(NOt mandataory to name it the same way) ) with one node and one child (of type string).
    2) Have a mapping between your source message and your target Alert_Variables.
    3) Write a UDF to get the concatenated text with all the variables you need and map to the target field.
    //write your code here
    String constant;
    java.util.Map map;
    map = container.getTransformationParameters();
    constant = "Message GUID:"+(String) map.get(StreamTransformationConstants.MESSAGE_ID)+"\n"
    +"Sender Party:"+(String) map.get(StreamTransformationConstants.SENDER_PARTY)+"\n"
    +"Sender Service:"+(String) map.get(StreamTransformationConstants.SENDER_SERVICE)+"\n"
    +"Sender Namespace:"+(String) map.get(StreamTransformationConstants.SENDER_NAMESPACE)+"\n"
    +"Sender Interface:"+(String) map.get(StreamTransformationConstants.INTERFACE)+"\n"
    +"\n"
    +"Receiver Party:"+(String) map.get(StreamTransformationConstants.RECEIVER_PARTY)+"\n"
    +"Receiver Service:"+(String) map.get(StreamTransformationConstants.RECEIVER_SERVICE)+"\n"
    +"Receiver Namespace:"+(String) map.get(StreamTransformationConstants.RECEIVER_NAMESPACE)+"\n"
    +"Receiver Interface:"+(String) map.get(StreamTransformationConstants.RECEIVER_NAME)+"\n"
    +"\n";
    return constant;
    4) After the transformation step in your exception branch, you can have a container step to assign the value of the target node's child element(That was returned by the transformation step).
    5) Have the control step to raise the alert category. The alert text should include only the container variable that holds the concatenated value of all the information.
    6) Check the Dynamic text checkbox in your ALert category defined in your abap stack.
    Regards,
    Ravi Kanth Talagana

  • How to pass JMS header Information to proxy field

    Hi,
    I am working with JMS to Proxy scenario (Synchronous).
    I am getting one header field at sender JMS channel which need to be mapped with one of the Proxy field.
    and similarly  when proxy returning one field value that need to be mapped with receiver channel header information.
    could any one help me on how to achieve  this.
    regards,
    Navneet

    Hi,
    >>Now My Question is how can I get Dynamic Configuration Key
    Like this
    1. switch on ASMA in sender JMS communication channel
    2 Assign this udf to target field
    UDF code
    DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
    DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/JMS","DCJMSMessageProperty9";
    String valueOld = conf.get(key);
    return valueOld;
    3. Do a  end to end testing (message mapping test will;l throw error)
    Regards
    Suraj

  • HT5429 Map backgrounds are not displaying on my 4s

    My iPhone 4S is running ios 6.1.2
    Apple Maps doesn't display any information at all. The location pin is visible but that's it, no map background is visible.
    This also affects other map based apps that use the map.
    Google Maps works fine, and internet access isn't a problem
    Any ideas?

    I am having the same issue with an iPhone 4S running on 6.1.2.  Shows only as a green layer (parks and such) but no streets.  In standard view I can find places, current location is accurate, but no street (or other layers) information, across the globe. The satellite view works, the hybrid view works but with no street names. I have tried home+power buttons reset but to no avail.  Not sure when it stopped working exactly, if before or after the 6.1.2 update.
    Any pointers greatly appreciated.

  • Group ID, ID-Mapping, storage of data

    Hi,
    I've got a question concerning <b>where which data or data attributes are being stored in the (re-)distribution of cleansed master data</b>.
    Please have a look at the following example:
    In my understanding MDS extracts Master Data (only special identifying attributes) from the MDCs, puts it in the staging area of CI, normalizes data and identifies matching candidates - matches of identical data-record-sets get a Group-ID (a new field to the record), which is created newly by MDS, right?
    <b>Now, which information is stored on the MDS and what goes back to the Client systems?</b>
    In my understanding the cleansed/ merged data gets back to the MDCs (with Group ID?) or if you just follow the scenario "Consolidation", which aims at the knowledge about redundancies but not at redistributing cleansed data, the reference object is maintained on the MDS, containing a Mapping/ Group ID and probably information about the source systems.
    Is that right?
    Thanx for help.
    Matthias Kasig

    so the key mapping information is stored in a separate table on the MDS with (I assume) somehow following structure:
    Table Mapping_Information:
    mapping-id -- mds-object -- location(MDC)
    A  --     hammer150g  --     R/3 0814
    A  --     150g hammer  --     CRM 0815
    right?
    another different question...
    is the integrtation engine of the MDM-System needed for something? in the configuration of the int.engine on the mdm i entered: role of system = loc anwendungssystem and corresponding int.server = IX 30 Integrationserver
    with the result, that i can see (on mdm under sproxy) the software-components on the XI Int.Server
    and one more:
    how to establish the connection between EP and MDM?
    is it enough to act corresponding to the config-guide content-consolidation MDM 3.0, which states on different pages to install the mdm30-components on the different systems and EP-Plugin-Versions on clients...
    is it correct, that i don't have to establish sm59-connections? didn't read anything about that.
    thank you once more,
    matthias

  • Call another Message Interface from Java Mapping

    Hi Gurus!!
    I have designed a Java Mapping that does a Socket Connection. Before send the response of the Java Mapping, I have to send information to our SAP System.
    I have see in a blog that I can call a RFC from the Java Mapping, but my doubt is, can I call another Message Interface designed on XI?
    Thanks and regards,
    Manuel Míguez.

    That's tricky, since the proper way of doing it would be through BPM.
    Anyway, if you expose your XI interface as a WebService (Soap sender cc) you could access it through Mapping Lookup (lookup works for RFC, DB and Soap lookups). Check https://help.sap.com/javadocs/NW04S/current/pi/index.html
    But be aware that Mapping Lookup API is not intended for inserts/updates (since it doesn't contain any transacational handling), just mere lookups (selects in tables), so I'm not sure it is the best approach for your case.
    Regards,
    Henrique.

  • Idoc to jdbc mapping duplicate source node to target structure

    Dear all,
    I am working on PI 7.1
    My sceniro
    IDOC to JDBC  [sap to mssql ]  where the target is a table structure shown below: I execute a stored procedure to insert the below message type into sql table.
    <ns0:MT_SP_LFBK xmlns:ns0="http://test.com">
    - <Statement_Name>
    - <storedProcedureName action="EXECUTE">
      <table>spr_test</table>
      <BANKS type="Char">BOA</BANKS>
      <BANKL type="char">122207</BANKL>
      <BANKN type="char">4555--0</BANKN>
      <LIFNR type="char">1100000218</LIFNR>
      <KOINH type="char">varchar</KOINH>
      <BKONT type="char">01</BKONT>
      <BANKA type="varchar">S.A.</BANKA>
      </storedProcedureName>
      </Statement_Name>
      </ns0:MT_SP_LFBK>
    The mapping is between source CREMAS02 and the above target structure. Everything works fine.
    The problem is when the  vendor has more than one bank account number the IDOC CREMAS02 replicates the below segment E1LFBKM for each BANK account information. Since target and source are mapped one to one how can i map the second bank account information to the same target structure or genereate a new target Message type for the second bank account  information and send it to sql ?
    <E1LFBKM SEGMENT="1">
      <MSGFN>005</MSGFN>
      <LIFNR>110000021</LIFNR>
      <BANKS>BOA</BANKS>
      <BANKL>122207</BANKL>
      <BANKN>4555-0</BANKN>
      <BKONT>02</BKONT>
      <BANKA>S.A.</BANKA>
      <BNKLZ>3000000</BNKLZ>
      </E1LFBKM>
    Thank you ,
    Teresa

    Hi Teresa,
    which segment have you mapped with <storedProcedureName action="EXECUTE"> ?
    Because according to me , if you send <E1LFBKM> to <storedProcedureName action="EXECUTE">
    , you will be able to use your stored procedure several times, in fact each times that you have a <E1LFBKM>.
    Reminds: inside <Statement_Name> you can do several SQL actions like execute one or several stored procedures (could be different).
    Of course, after that your table should accept to have several bank account for a same customer.
    So to have something like that:
    <Statement_Name>
    <storedProcedureName action="EXECUTE">
    </storedProcedureName>
    <storedProcedureName action="EXECUTE">
    </storedProcedureName>
    <storedProcedureName action="EXECUTE">
    </storedProcedureName>
    </Statement_Name>
    regards
    mickael

  • Path Finder in a 2D Grid Map With Different Terrain Types

         I have been thinking for a while on path finding game algoritms and I can up with one idea witch I want to publish. The goal of my project is when I have a 2 dimensional grid map where squares can have different movement cost, like in Civilization II, to find the shortest way from one point in the map to another. I've used the Breathed First Search Engine. If you are not familiar to this search engine it is better to read about it first because I am not fcusing on it and I assume that you now how it works. You can read about it at the book "Practical Artificial Intelligence Programming in Java" writen by Mark Watson, witch is freely distributed at www.markwatson.com.
         Actually the idea of this 2D grid path finder is to use a third dimension witch have a size equal to the highest movement cost among all terrain types. This helps solving the problem with the different movement cost of the squates. By adding this abstract third dimension it is posible to use the Breadth First Search Engine.
         I this example the movementcost of a terrain type is always the same, no matter from witch square to with are you going (like in Civilization II but I haven't included roads or railroads). For example if you want to go from one square A to another square B with movement cost X (A and B are attached) you must go "up stairs" in the third dimension X - 1 times and then move to square B. But when you step on square B you are again at the lowest floor. So if you want to come back to the previous square A and it have movement cost Y first you must go floor Y and then jump in square A. And now you are again at the lowest floor at square A. When you move from one square to another you go always at the lowest floor. This is the way I handle with different movement costs.
         When you find the path to the goal point it is in 3 dimensions. So you must just project it in the 2D map and that's all you have the shortest path.
         I am sure this is not the best way to code this search engine but this is just the first scratch with no optimisation and so on. If I make a 100x100 randomly generated map it takes on my configuration(400Mhz Pentium II CPU with ASUS P2B MotherBoard on 100 MHz and 256 MB SD RAM on 133 MHz but because of my MB on 100MHz) around 1000 miliseconds (1000 miliseconds = 1 second) to find the shortest path from (1, 1) to (100, 100) witch is pretty good compare to the goTo function in Civilization II witch does not finds the shortest path at all and have made hundrets of gamers angry. This is amazing that nowadays there are so many games with bad path finding.
         This project includes:
    1. The PathFinder class witch does the jub.
    2. The Map class witch has a generator for a random map in it.
    3. The class TerrainType, every square on the map is based on this class.
    4. The class TerrainTypes witch is the set of all terrain types used in the map.
    5. The class PathFinderTest witch just test the path finder.
    To test this project put all files in one directory and run PathFinderTest.java.
    Map.java:
    import java.util.Vector;
    import java.util.Random;
    //This class just creates a random map and keeps it. I will not comment on this.
    class Map {
      //here is kept the information about the terrain types placed in the map. Where
      //every terrain type has a specific movement cost.
      private int[][] terrain;
      public TerrainTypes terrainTypes;
      private int landMass;
      private int width;
      private int height;
      private int highestMovementCost;
      public Map(int aWidth, int aHeight) {
        width = aWidth;
        height = aHeight;
        terrainTypes = new TerrainTypes();
        highestMovementCost = terrainTypes.getHighestMovementCost();
        terrain = new int[width][height];
        landMass = 0;
        generateRandomMap();
      public void clearGoalAndStartLocFromWater(int sx, int sy, int gx, int gy) {
        terrain[gx][gy] = 0;
        terrain[sx][sy] = 0;
      private void expandWater() {
        int waterConstant = 40;
        int waterExpansion = 2;
        int[][] moreWater = new int[width][height];
        Random randomizer = new Random();
        for (int t = 0; waterExpansion > t; t++) {
          for (int i = 0; i < width; i++) {
            for (int j = 0; j < height; j++) {
              if (i + 1 >= 0 && j >= 0 && i + 1 < width && j < height) {
                if (terrain[i + 1][j] != 4) {
                  if (randomizer.nextInt(waterConstant) == 0)
                    moreWater[i + 1][j] = 1;
              if (i + 1 >= 0 && j - 1 >= 0 && i + 1 < width && j - 1 < height) {
                if (terrain[i + 1][j - 1] != 4) {
                  if (randomizer.nextInt(waterConstant) == 0)
                    moreWater[i + 1][j - 1] = 1;
              if (i >= 0 && j - 1 >= 0 && i < width && j - 1 < height) {
                if (terrain[i][j - 1] != 4) {
                  if (randomizer.nextInt(waterConstant) == 0)
                    moreWater[i][j - 1] = 1;
              if (i - 1 >= 0 && j - 1 >= 0 && i - 1 < width && j - 1 < height) {
                if (terrain[i - 1][j - 1] != 4) {
                  if (randomizer.nextInt(waterConstant) == 0)
                    moreWater[i - 1][j - 1] = 1;
              if (i - 1 >= 0 && j >= 0 && i - 1 < width && j < height) {
                if (terrain[i - 1][j] != 4) {
                  if (randomizer.nextInt(waterConstant) == 0)
                    moreWater[i - 1][j] = 1;
              if (i - 1 >= 0 && j + 1 >= 0 && i - 1 < width && j + 1 < height) {
                if (terrain[i - 1][j + 1] != 4) {
                  if (randomizer.nextInt(waterConstant) == 0)
                    moreWater[i - 1][j + 1] = 1;
              if (i >= 0 && j + 1 >= 0 && i < width && j + 1 < height) {
                if (terrain[i][j + 1] != 4) {
                  if (randomizer.nextInt(waterConstant) == 0)
                    moreWater[i][j + 1] = 1;
              if (i + 1 >= 0 && j + 1 >= 0 && i + 1 < width && j + 1 < height) {
                if (terrain[i + 1][j + 1] != 4) {
                  if (randomizer.nextInt(waterConstant) == 0)
                    moreWater[i + 1][j + 1] = 1;
        for (int i = 0; i < width; i++) {
          for (int j = 0; j < height; j++) {
            if (moreWater[i][j] == 1) {
              terrain[i][j] = 4;
      private void generateRandomMap() {
        Random randomizer = new Random();
        for (int i = 0; i < width; i++) {
          for (int j = 0; j < height; j++) {
            if (randomizer.nextInt(3) == 1)
              terrain[i][j] = 0;
            else if (randomizer.nextInt(2) == 1)
              terrain[i][j] = 1;
            else if (randomizer.nextInt(2) == 1)
              terrain[i][j] = 3;
            else if (randomizer.nextInt(2) == 1)
              terrain[i][j] = 2;
            else if (randomizer.nextInt(2) == 1)
              terrain[i][j] = 2;
            else if (randomizer.nextInt(2) == 1)
              terrain[i][j] = 1;
            else if (randomizer.nextInt(2) == 1)
              terrain[i][j] = 3;
            else
              terrain[i][j] = randomizer.nextInt(5);
        expandWater();
        for (int i = 0; i < width; i++) {
          for (int j = 0; j < height; j++) {
            if (terrain[i][j] != 0)
              landMass++;
      public int getMapHeight() {
        return height;
      public int getMapWidth() {
        return width;
      public int getSquareID(int x, int y) {
        return terrain[x][y];
      public int getSquareMovementCost(int x, int y) {
        return terrainTypes.getMovementCost(terrain[x][y]);
    }PathFinder.java:
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.Vector;
    public class PathFinder {
      private BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
      //The array t3D[][] represents the 2D square map where t3D.leght = map width
      //and t3D[x].lenght = map width (-1 < x < t3D.leght). The third dimension
      //is refered to the square's movement cost, witch is definite by terrain.
      //The fourth dimension will be with lenght = 3. When running the search engine
      //(expanding the explored squares) this 3 values will keep the position of
      //the previous square in 3 dimension, witch are width, height and the maximum
      //movement cost among all squares.
      private int[][][][] squares3DReference;
      //Keeps information witch squares are visited.
      private boolean[][][] visitedSquares;
      private Map map;
      //this is the queue used in the Breathed First Seatch.
      private Vector queue3D;
      //Here is saved the shortest path
      private Vector path2D;
      private int highestMovementCost;
      public PathFinder(Map aMap) {
        map = aMap;
        queue3D = new Vector();
        path2D = new Vector();
        squares3DReference = new int[map.getMapWidth()][map.getMapHeight()][][];
        visitedSquares = new boolean[map.getMapWidth()][map.getMapHeight()][];
        highestMovementCost = map.terrainTypes.getHighestMovementCost();
        buildAbstract3DTerrain();
      private void buildAbstract3DTerrain() {
        for (int x = 0; x < map.getMapWidth(); x++) {
          for (int y = 0; y <map.getMapHeight(); y++) {
            int movementCost = map.terrainTypes.getMovementCost(map.getSquareID(x, y));
            if ( movementCost > 0) {
              visitedSquares[x][y] = new boolean[highestMovementCost];
              squares3DReference[x][y] = new int[highestMovementCost][3];
              for (int z = 0; z < highestMovementCost; z++) {
                for (int t = 0; t < 3; t++) {
                  squares3DReference[x][y][z][t] = -1;
      private boolean isMoveValid(int x, int y, int z, int x2, int y2, int z2) {
        if ( x < 0 || y < 0 || z < 0 || x2 < 0 || y2 < 0 || z2 < 0 || x >= map.getMapWidth() || y >= map.getMapHeight() || z >= highestMovementCost ||  x2 >= map.getMapWidth() || y2 >= map.getMapHeight() || z2 >= highestMovementCost)
          return false;
        if (map.terrainTypes.getMovementCost(map.getSquareID(x2, y2)) < 1)
          return false;
        if (visitedSquares[x2][y2][z2])
          return false;
        if (x == x2 && y == y2)
          return true;
        else {
          if (z == map.terrainTypes.getMovementCost(map.getSquareID(x2, y2)) - 1)
            return true;
          else
            return false;
      private void clearPreviousSearchData() {
        queue3D.clear();
        path2D.clear();
        for (int x = 0; x < map.getMapWidth(); x++) {
          for (int y = 0; y < map.getMapHeight(); y++) {
            if (squares3DReference[x][y] != null) {
              for (int z = 0; z < highestMovementCost; z++) {
                visitedSquares[x][y][z] = false;
                for (int t = 0; t < 3; t++) {
                  squares3DReference[x][y][z][t] = -1;
      private Vector copyPath2D() {
        Vector path = new Vector();
        for (int i = 0; i < path2D.size(); i++) {
          path.add(path2D.get(i));
        return path;
      public Vector findPath(int sX, int sY, int gX, int gY) {
        int head = 0;
        int tail = 0;
        int x = sX;
        int y = sY;
        int z = 0;
        visitedSquares[x][y][z] = true;
        mainLoop: {
          while (tail <= head) {
            int[][] moves = getPosibleMoves(x, y, z);
            for (int i = 0; i < 9; i++) {
              if (moves[i] != null) {
                squares3DReference[moves[0]][moves[i][1]][moves[i][2]][0] = x;
    squares3DReference[moves[i][0]][moves[i][1]][moves[i][2]][1] = y;
    squares3DReference[moves[i][0]][moves[i][1]][moves[i][2]][2] = z;
    queue3D.add(moves[i]);
    if (moves[i][0] == gX && moves[i][1] == gY) {
    break mainLoop;
    visitedSquares[moves[i][0]][moves[i][1]][moves[i][2]] = true;
    head++;
    if (queue3D.size() == 0 || queue3D.size() == tail)
    break mainLoop;
    int[] nextInQueue = ((int[]) queue3D.get(tail));
    x = nextInQueue[0];
    y = nextInQueue[1];
    z = nextInQueue[2];
    tail++;
    if (squares3DReference[gX][gY][0][0] == -1) {
    clearPreviousSearchData();
    return path2D;
    fillpath2D(sX, sY, gX, gY);
    Vector path = copyPath2D();
    clearPreviousSearchData();
    return path;
    private int[][] getPosibleMoves(int x, int y, int z) {
    int[][] moves = new int[9][3];
    if (isMoveValid(x, y, z, x + 1, y, 0)) {
    moves[0][0] = x + 1;
    moves[0][1] = y;
    moves[0][2] = 0;
    else
    moves[0] = null;
    if (isMoveValid(x, y, z, x + 1, y - 1, 0)) {
    moves[1][0] = x + 1;
    moves[1][1] = y - 1;
    moves[1][2] = 0;
    else
    moves[1] = null;
    if (isMoveValid(x, y, z, x, y - 1, 0)) {
    moves[2][0] = x;
    moves[2][1] = y - 1;
    moves[2][2] = 0;
    else
    moves[2] = null;
    if (isMoveValid(x, y, z, x - 1, y - 1, 0)) {
    moves[3][0] = x - 1;
    moves[3][1] = y - 1;
    moves[3][2] = 0;
    else
    moves[3] = null;
    if (isMoveValid(x, y, z, x - 1, y, 0)) {
    moves[4][0] = x - 1;
    moves[4][1] = y;
    moves[4][2] = 0;
    else
    moves[4] = null;
    if (isMoveValid(x, y, z, x - 1, y + 1, 0)) {
    moves[5][0] = x - 1;
    moves[5][1] = y + 1;
    moves[5][2] = 0;
    else
    moves[5] = null;
    if (isMoveValid(x, y, z, x, y + 1, 0)) {
    moves[6][0] = x;
    moves[6][1] = y + 1;
    moves[6][2] = 0;
    else
    moves[6] = null;
    if (isMoveValid(x, y, z, x + 1, y + 1, 0)) {
    moves[7][0] = x + 1;
    moves[7][1] = y + 1;
    moves[7][2] = 0;
    else
    moves[7] = null;
    if (isMoveValid(x, y, z, x, y, z + 1)) {
    moves[8][0] = x;
    moves[8][1] = y;
    moves[8][2] = z + 1;
    else
    moves[8] = null;
    return moves;
    private void fillpath2D(int sX, int sY, int gX, int gY) {
    int[] gLoc = {gX, gY};
    path2D.add(gLoc);
    int x = gX;
    int y = gY;
    int z = 0;
    while (x != sX || y != sY) {
    int x2 = squares3DReference[x][y][z][0];
    int y2 = squares3DReference[x][y][z][1];
    int z2 = squares3DReference[x][y][z][2];
    x = x2;
    y = y2;
    z = z2;
    if (z == 0) {
    int[] loc = {x, y};
    path2D.insertElementAt(loc, 0);
    PathFinderTest.java
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.Vector;
    public class PathFinderTest {
      static BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
      static Map map;
      static int startX;
      static int startY;
      static int goalX;
      static int goalY;
      public static void main(String[] args) throws Exception {
        System.out.print("Enter map size.\nx = ");
        int width = Integer.parseInt(consoleReader.readLine());
        System.out.print("y = ");
        int height = Integer.parseInt(consoleReader.readLine());
        System.out.print("Enter strting location.\nx = ");
        startX = Integer.parseInt(consoleReader.readLine()) - 1;
        System.out.print("y = ");
        startY = Integer.parseInt(consoleReader.readLine()) - 1;
        System.out.print("Enter goal location.\nx = ");
        goalX = Integer.parseInt(consoleReader.readLine()) - 1;
        System.out.print("y = ");
        goalY = Integer.parseInt(consoleReader.readLine()) - 1;
        if (goalX < 0 || goalY < 0 || startX < 0 || startY < 0 || goalX >= width || goalY >= height || startX >= width || startY >= height) {
          System.out.println("Invalid parameters found. Program will exit");
          System.exit(0);
        map = new Map(width, height);
        map.clearGoalAndStartLocFromWater(startX, startY, goalX, goalY);
        printSolution(new Vector());
        PathFinder pathFinder = new PathFinder(map);
        long before = System.currentTimeMillis();
        Vector path = pathFinder.findPath(startX, startY, goalX, goalY);
        long after = System.currentTimeMillis();
        long time = after - before;
        printSolution(path);
        if (path.size() == 0)
          System.out.println("No path found.");
        else
          System.out.println("Path found.");
        System.out.println("Finding the path took " + time + " milliseconds");
      static void printSolution(Vector path) {
        boolean[][] pathOnMap = new boolean[map.getMapWidth()][map.getMapHeight()];
        for (int i = 0; path.size() > i; i++) {
          int[] move = (int[]) path.get(i);
          pathOnMap[move[0]][move[1]] = true;
        for (int y = 0; y < map.getMapHeight(); y++) {
          for (int x = 0; x < map.getMapWidth(); x++) {
            System.out.print(" ");
            if (pathOnMap[x][y] == false)
              System.out.print(" ");
            else
              System.out.print("0");
            if (x == startX && y == startY)
              System.out.print("S");
            else if (x == goalX && y == goalY)
              System.out.print("G");
            else
              System.out.print(map.terrainTypes.getNameFirstLetter(map.getSquareID(x, y)));
          System.out.println();
        System.out.println();
    }TerrainType.java:
    public class TerrainType {
      private int movementCost;
      private String name;
      TerrainType(int aMovementCost, String aName) {
        movementCost = aMovementCost;
        name = aName;
      public int getMovementCost() {
        return movementCost;
      public String getName() {
        return name;
      public String getNameFirstLetter() {
        return name.substring(0, 1).toUpperCase();
    }TerrainTypes.java:
    import java.util.Vector;
    public class TerrainTypes {
      //Here are saved the terrain types with the map has. ElementAt 'i' in
      //setOfTypes is represented by the number in Map.terrain[x][y] witch is
      //equal to i, were x, y are random integer as soon as they do not
      //throw ArrayIndexOutOfBoundsException. Actually this is a coding to know
      //a specific square in the map to witch terrain type is refered in setOfTypes.
      private Vector setOfTypes;
      public TerrainTypes() {
        setOfTypes = new Vector();
        setOfTypes.add(new TerrainType(1, "Plains"));
        setOfTypes.add(new TerrainType(2, "Forst"));
        setOfTypes.add(new TerrainType(3, "Jungle"));
        setOfTypes.add(new TerrainType(4, "Mountain"));
        setOfTypes.add(new TerrainType(-1, "X"));
      public int getMovementCost(int i) {
        return ((TerrainType) setOfTypes.get(i)).getMovementCost();
      public String getName(int i) {
        return ((TerrainType) setOfTypes.get(i)).getName();
      public String getNameFirstLetter(int i) {
        return ((TerrainType) setOfTypes.get(i)).getNameFirstLetter();
      public int getHighestMovementCost() {
        int max = 1;
        for (int i = 0; setOfTypes.size() > i; i++) {
          int movementCost = ((TerrainType) setOfTypes.get(i)).getMovementCost();
          if ( movementCost > 0) {
            if (max < movementCost)
              max = movementCost;
        return max;
    }I hope this program will be helpful.
    Sogartar

    Why is such a smart guy like you not using A*
    It is a general known algorithm which will find the
    optimal solution in a finite search-space (within a minimal time).
    The calculation time for the A* algorithm is influenced by two parameters:
    1 - cumulative cost
    2 - minimal expected additional cost
    The calculation of these two costs has a great influence on the
    solution.
    I think the actual problems most games experience with shortest path calculatoin are
    1 - very little time to spent calculating the shortest path
    The quickest solution might be the best for the game
    If your solution takes 1 second for the calculation of a path for one element on the board (100x100)
    What would it take for the game to calculate the path for all elements controlled by the computer ??
    If the computer controls two players which each have 50 elements to control, it would take forever...
    Don't even consider the usage of a larger board (200x200 would take 4 seconds/element when
    algorithm has complexity O(n))
    2 - low priority.
    Users tend to forgive a bad shortest path-algorithm most of the time,
    but not a bad display, bad pictures,...
    This is why most shortest-path algorithms within games were
    developed as a depth first search,
    within some earlier games this was even developed as
    a rule which went straight to the endlocation and
    takes a right/left turn when blocked by water/wall/...
    So the actual steps you should take are:
    1 - develop a normal breath-first search (to get going)
    2 - develop a normal depth-first search (to compare speed and solution with)
    3 - develop a normal dijkstra algorithm (sometimes called A)
    4 - develop a best first algorithm (called A*)
    5 - develop other AI-algorithms building upon A* (tabu-search, limited memory A*,...)
    6 - develop some other AI-algorithms (Genetic Algorithms, Simulated Annealing,...)
    7 - compare and tweak/change all search-algorithms for
    7 - a - size of maps (small versus huge)
    7 - b - optimality of the solution
    7 - c - actual usage for your game
    8 - !!! very important !!!
    Share the developed path algorithms along with remarks about speed, map-size,...
    with the rest of us. I would be very interested in such library.
    kind regards,

  • Corrupted Display of Ovi Map Guides - N8

    When I open any of the Online Services (city guides, Qype, weather, etc.) in Ovi maps on my N8, the information displayed is corrupted with big graphic blocks and the text formatted in odd ways. I'm on version 3.06. This was raised on another thread and solved by installing PR 1.1 but I've done this and it's not made any difference. Has anybody got another solution?

    Sorry for any confusion over this, you do have the latest available version of OVI Maps installed and unfortunately don't know best way forward to resolve this issue.
    Is N8 running PR1.0 or PR1.1 as might be opportunity to re-install device firmware?
    Happy to have helped forum with a Support Ratio = 42.5

  • Toll calculator in Maps app

    Please tell me when toll calculations will be available in Apole Maps. I need this information when planning longer road trips, as I do not ordinarily carry cash, so I need to make special provisions to carry enough. It is not enough to have "avoid tolls" when plotting a trip, which is a major disadvantage of the app right now; enough of us are complaining about that inadequacy that I hope we stand some chance of having that rectified in the not-too-distant future. Somebody should be collating all the toll data published by all the various states and authorities -- what a coup for Apple Maps that would be.
    We potential users need to be able to make decisions on the fly about what route to use by taking traffic, time on the road, gas consumption, and tolls into account. I bought Apple iPhone 5 and iPads running OS 7.1.2 -- smart devices -- to help me make these everyday decisions more intelligently, then I run up against a roadblock in this dumb app.
    I do use the app now for local trips, and like the clear directions and reliability. But if I were outside my "stomping grounds" I would have no information about strategic alternatives for routes avoiding traffic congestion through various times of the day, finding gas stations (especially 24-hour stations along the interstates), and being prepared for tolls. 
    Can anyone tell me how often the traffic conditions on a planned route are updated, or whether it even happens after a set of directions is downloaded?
    Lots of topics here. Glad for any info I can get.

    SeattleBound wrote:
    Please tell me when toll calculations will be available in Apole Maps.
    How would we know?  We don't work for Apple. These are user to user forums.  So unless Apple announces or documents it, you know as much as the rest of us.

Maybe you are looking for

  • Look up in Dictionary keyboard shortcut hot key broken

    The look up in dictionary keyboard shortcut does not work. The Dictionary.app and widget works. Even clicking on the menu item: Safari > Services > Look Up in Dictionary works. Under System Preferences > Keyboard > Keyboard Shortcuts I have "Restore

  • How to Find Actual Time Spent on a TASK in TFS 2013 by using the scrum template

    Hi! Currently we are using the TFS 2013 version with Scrum template this template contains only Remaining work measure for Task item and there is no other option for getting the Actual time spent on particular Task and Bug having the option called Ef

  • DB Lookup Problem

    Hi All,   I am trying to use DB LOOKUP in the  mapping.   I am getting the following error. Can you through some pointers?    I am using   1. Driver = oracle.jdbc.pool.OracleConnectionPoolDataSource 2. Connection = jdbc:oracle:thin:@190.190.190.190:1

  • Have problem to order copies of the Book just completed in iPhoto

         My first venture at making a book in iPhoto with family pictures, has, once I understood the practical business of getting pictures organised, been very successful, so I clicked on the "Buy" button and thereafter my efforts to order 3 copies of

  • Firefox 3.6.12 wouldn't open after I did nov. 1, 2001 restore. Why

    Firefox was working wonderfully for a long time. Unclear why it wouldn't open. I even downloaded it gagin and run it, but none helps.