Isometric grid
I need to be able to easily make an isometric grid so I can use it as a guide. It doesn't need to have lock into position or anything, I just need a back ground image so i can layout isometric objects for an isometric game. I need something that will allow me to easily set the row and column count, change the angle and width of the tiles, as well as the ratio. I've been looking for a day now and I can't find anything like this. Is everyone creating grid guides by hand? if so, how do you change the grid when needed? Adobe really needs to add more tools for making isometric games, and games in general. HTML5 is going to replace a lot of Flash work, but Flash is still going to be needed to make games, for a long time, so Adobe needs to facilitate game designers.
Does anyone know how to easily build and adjust grids so I can make an isometric grid?
Thanks!
The first section of code makes the array, the second part of the code just draws the grid. hope this helps
for (int col = 0 ; col < grid.length ; col++)
for (int row = 0 ; row < grid [0].length ; row++)
grid [col] [row] = 0;
//makes the iso grid
for (int i = 0 ; i <= 40 ; i++)
int x1 = 0 + (i * 20), x2 = 10 + (i * 20), x3 = 20 + (i * 20), x4 = 10 + (i * 20);
for (int ii = 0 ; ii <= 30 ; ii++)
int y1 = 10 + (ii * 20), y2 = 0 + (ii * 20), y3 = 10 + (ii * 20), y4 = 20 + (ii * 20);
int gx [] = {x1, x2, x3, x4};
int gy [] = {y1, y2, y3, y4};
offscreen.drawPolygon (gx, gy, 4);
}
Similar Messages
-
Best technique for creating an isometric grid
I know there are plugins to make isometric grids. I just want to draw one and have it available for later usage. How can I create this? (I am new to Illustrator and have no experience making custom grids.)
Thanks!There are no true "custom grids" in Illustrator (in the sense of angled snap grids), just as there are no custom rulers.
If you feel you must use a grid for isometric drawing, you can fake it by several methods:
1. Draw an array of lines. Put them on a locked layer. Snap to point and SmartGuides will snap to them, even though they are locked.
2. Draw the array of lines. Convert them to Guides.
3. Use the Grid Tool to draw a square grid, rotate it 45°, scale it vertically 57.7%, put it on a locked layer or convert it to Guides.
4. Draw two short lines of the same length (one at 30°, the other at 150°), centered on each other, and use that figure to create a Pattern Swatch. Draw a rectangular path, fill it with the Swatch. Expand the fill so that snaps will work on it.
All the above have their drawbacks. 1, 2, and 3 are cumbersome because if your page size changes, the grid has to be changed, moved, or added to accordingly. (Unless you draw the grid to fill the entire pasteboard). 3 is awkward because of all the extraneous trash Illustrator is so prone to creating (unfilled, unstroked paths and clipping masks in expanded results).
I don't use a grid when drawing isometric in Illustrator. I just use SmartGuides. Look it up in online Help. Set the construction guides to 15° increments (or set custom angles to 30°, 150°, and 90°.)
JET -
hi guys,
1 - Do you know which is the best way to draw a grid like that in Illustrator?
http://www.pixentral.com/show.php?picture=1ub1FOws8ZpNjfaWuKSTIOpkSeMN7V
Sometimes i did drew something like it and when i apply the outline view, the node points are not in the same line. I guess i might have to make an isometric grid...
2 - The idea is to use this grid later on as a pattern to fill shapes like rectangles or circles. Which is the best way to do it?
thanks for any ideas,
SebastiaoJet, that is a marvelous drawing!
So if i understand right you draw the red or the yellow lines and then how you convert it to a pattern? Is that symbol palette?
Thanks for the good info and regards!
Sebastiao -
Perspective Grid from 3D Extrude Revolve Default
I want to create a perspective grid based on a rectangle that has been 3D extruded and revolved using default settings. The 3D default setting doesn't have any perspective so that means the resulting 3D shape is in 2-point perspective, right? So I should use the 2-point perspective grid and try and draw out all the little widgets and controls to match the sides of the 3D rectangle? That's what I've tried and am having a heckuva time getting the sides to match. Maybe because I can't get those vanishing points out far enough? Or maybe I should be using the 3-point perspective grid to try and model the rectangle with that? I had more trouble with that, though. Not strong with illlustration / perspective, but determined to create a grid that matches! ... Can anyone do this?
Yep. I quit futzing with the perspective grids and just created my own custom isometric grid and was able to accomplish what i set out to. Thanks.
-
Retrieve/Modify the transformation matrix of an object
Hi,
I'm new to this, so I have a lot of questions.
Here is what I am trying to do.
I know the designer I work with will draw some paths on an isometric grid (30 degrees )
I am interested in the paths that get skewed 30 degrees vertically.
I will need to create a 'bottom' plane for the selected path, that means I will need to copy
the object and shear/skew it.
As far as I can tell I need to:
1.retrieve the selected PathItem
2.clone it
3.transform it ( skew/shear ) it.
I've to create a scaleMatrix using
app.getScaleMatrix(Math.atan(30 * Math.PI / 180) * 100,Math.atan(60 * Math.PI/180) * 100);
then transforming my path, but the skew looks pretty random.
I know that in theory
skewX = Math.atan( matrix.c * angleInRadians);
skewY = Math.atan( matrix.b * angleInRadians);
but things aren't as easy to do in Illustrator as they are in Flash
Is it possible to retrieve the transformation matrix of a PathItem ? (I've looked in the docs and found nothing of use )
Any hints ?What exactly is it that you are trying to accomplish with the ScaleMatrix? Are you trying to merely skew a selection by 30 degrees?
If so, do you understand that merely skewing something will not yield the sides of an object drawn in isometric?
For example:
Assume two 1" squares, normally oriented and abutting each other side by side.
Skew the right side of the rightmost square vertically upward 30 degrees.
Skew the left side of the leftmost square vertically upward 30 degrees.
I hope you understand that does not yield the left and right visible sides of a 1" isometric cube. In an isometric cube, all the visible edges are the same length. (In an isometric drawing of a 1" cube, each edge measures 1". In an isometric projection of the same cube, each edge measures approximately .82" [cosine of the isometric angle, 35'16"]).
By merely skewing the squares, you are effectively lengthening their top and bottom edges. The vertical edges are now out of proportion.
You can draw the "bottom" or "top" of a 1" isometric cube by rotating a normally-oriented 1" square 45 degrees and then scaling it vertically by 58% (sine of the iso angle). Then rotate two copies of that about the resulting bottom-most point to complete the cube.
Maybe you know this and I'm misunderstanding what you are trying to do.
JET -
How to use the palette or drag and drop functions in netbean?
Is there anyone who can help me out on using drag and drop function in netbean to design GUI inteface..??
Is palette is the tool that can be used to drag and drop.??
thank you in advance.I actually really like the GUI builder in netbeans. I used to be a big eclipse user so I am very familiar with coding GUIs by hand, and most of what I do involves GUI's or at least swing.
At first I hated netbeans, I hated that I couldn't edit the code most. Then I decided to take a deep breath and really examine the issue. What I discovered is that most of the edits I wanted to make but couldn't really weren't the right way to be doing it in the first place, for the rest the code is actually really easy to change you just have to know how.
Now my palette is huge, probably about 250 objects in it organized into sections that work for me. Basically if I want a object to do something that is not already in the palette I simply write a new object and add it to the palette. I started small like with rounded buttons/progress bars, and as I got comfortable I now have some fairly advanced objects like grids, isometric grids, alpha composits, an animated hourglass countdown timer, and an animated "loading/activity" indicator that is not tied to a progress indicator.
The main reason I stuck with the netbeans drag and drop GUI builder is it's layout manager is really a very nice layout manager, you couldn't pay me enough to go back to eclipse or codeing GUIs by hand, as I can now do in one day what used to take me several weeks.
So what I am saying is stick with netbeans and the drag and drop, it sucks at first, but once you get to a point where you are comfortable with it and adding to the palette it will become a great tool.
JSG -
3D: scale, shear and rotate settings
Hi. I am relatively new to Illustrator.
I am trying to create a simple 3D map, but not with the default iso settings. It's actually a remake of a map made many years ago on a squar grid using a rise of 1 and a run of 2 (all done by hand on graph paper). This creates an angle that is 26.5651°.
For iso, [scale: H=100%, V=86.602%] [shear: hoizontal axis -30°] [rotate: -30°] and so on, varying for the left, right and top. I have this working fine for iso.
My problem arose when I went to the 26.5651 angle. What settings should I use for the three sides (left, right, top)?
Is there any way to get the extrude and bevel tool to do work with my settings?
ThanksI am trying to create a simple 3D map, but not with the default iso settings....made many years ago on a squar grid using a rise of 1 and a run of 2...
You are confusing actual orthographic projection from an actual 3D model (3D Effect), with an archaic 2D "cheat" that is really not a correctly proportioned orthographic projection at all.
This creates an angle that is 26.5651°.
Yes, but more significantly it is simply the projected angle that results from vertically scaling a true-length 45° line by an arbitrary 50% (the 1:2 ratio). In orthographic projection, that amount of foreshortening would mean that you are viewing the top plane of your coordinate system as if it is tilted upward toward you 30°[arcsine (.5 )= 30°], not the isometric angle of 35°16".
For iso, [scale: H=100%, V=86.602%] [shear: hoizontal axis -30°] [rotate: -30°]
Contrary to the misconception perpetuated by many of those who use the 1:2 cheat, that is not isometric. It's just an arbitrary 2D oblique. By definition, in isometric (read "same measure") drawing, all three axes are of the same length. Using the 1:2 ratio, the length of your left and right axes (the hypoteneuse of a 1x2 rectangle) measures 2.2361. If your vertical axis measures .86602, then obviously your three axes are not of equal length, and the drawing is not isometric. The corresponding lengths/angles of the axes in axonometric (isometric, dimetric, trimetric) drawing are not arbitrary. For any given set of axis angles, there is but one correct set of forshortened lengths.
So from where are you getting the 86.602% figure? I'll tell you: That's the cosine of 30°. Now, if the 1:2 ratio did, in fact, result in a vertical axis of that measure, then the 1:2 cheat would result in a proper dimetric (not isometric) projection. That is, if the top of a cube is tilted upward from your line of sight by 30°, then the front of that cube is necessarily tilted away from perpendicular to your line of sight by 30°. The top would be foreshortened by a factor of .5, and the front would be foreshortened by a factor of .866.
But that is not the vertical measure that the 1:2 cheat gives you. Xara Designer Pro, for example, has the fake "isometric" 1:2 grid you are talking about built in as a standard feature:
Note that the vertical axis measure of the 1:2 ratio is not .866. It's .7071. (Otherwise, it wouldn't fit the square grid which is the whole point of the 1:2 ratio cheat.)
Inkscale, on the other hand, provides an actual isometric grid feature:
Note that all three axes are of the same length, and are separated by 120°.
Here's a properly proportioned dimetric cube, using your desired 1:2 aspect-ratio 26.57° axis angles (manually drawn in Illustrator, but could be drawn in any of the three programs mentioned):
Note that the vertical axis is .866 (cosine of 30°).
Which of the three boxes above look like a properly proportined cube to you? Note how the first screenshot looks short and squat. It's simply out of proportion. That's because it's not an orthographic projection of a cube. The other two are.
Isometric:
Left and right axes angled 30° from horizontal. (or more correctly, 120° from the vertical axis).
Unit cube is rotated 45° and tilted upward toward you 35°16".
All three axes foreshortened length: .8165
[One instance of] dimetric:
Left and right axes angled your desired 26.57° from horizontal
Unit cube is rotated 45° and tilted upward toward you 30°
Left and right axes foreshortened length: .7906
Vertical axis foreshortened length: .866
1:2 cheat:
Left and right axes angled your desired 26.57° from horizontal
Unit cube is rotated 45° and tilted upward toward you 30°
Left and right axes foreshortened length: .7906
Vertical axis foreshortened length: .71 (incorrect value for orthographic projection)
So the fact is, the 1:2 fake "isometric" cheat yields neither an isometric nor a dimetric drawing. It just yields a distorted 2D oblique. But again, 3D Effect is an actual orthographic projection generated by 3D geometry. Thus my initial comment that you are confusing a mere geometrically incorrect 2D cheat with real orthographic projection. You're trying to apply a set of arbitrary geometric values to a system that is not arbitrary in its geometric calculations.
My problem arose when I went to the 26.5651 angle....Is there any way to get the extrude and bevel tool to do work with my settings?
So can you get 3D Effect to replicate the disproportionate scaling of your 1:2 cheat? Sure. You just have to use settings which cause 3D Effect to make the same proportional error, thereby extruding a square to a squat box, rather than to a cube. (Albeit you will get into other proportional errors when you map artwork to the extruded sides.)
Like everything else in Illustrator, the extrusion depth setting in 3D Effect uses points as its basic unit of measure. So to extrude a 1" square into a cube, you use an extrusion depth of 72 points (1").
Because of the cumbersome way the rotation fields are implemented in the 3D Effect modal dialog, it's much simpler to perform the initial 45° rotation of the base art before applying the effect. That way, you only have to mess with one of the rotation fields (i.e.; numerically specify a simple rotation, rather than a compound rotation).
Now do the same thing again, but just distort the extrusion depth by the same proportion of a correct dimetric vertical axis length to that of the 1:2 cheat:
The routine is not limited to cubes. Draw the top face of any shape(s), rotate 45°, and apply the same 3D Effect settings. This should work for your map, to match things previously drawn using the 1:2 cheat:
JET -
Simple Grid/Tile based layout
I am trying to create a simple game, where there is the human controlled character and some enemy placed in a maze. When you take one move, the enemy takes one move, until he reaches you or you reach the exit.
What I'm having trouble figuring out is how I can lay all this out.
What I'm envisioning is a 2 dimensional array, with each position either a 0 or 1 depending on if the user can move there or not.
Is there a way in java to implement a grid style playing field, such that the player moves from tile to tile, and incoporate collision detection with the use of the array values?
I could realy use some help here, I was thinking of using a layout manager, but I don't think the two ideas are compatible. Please help!Assuming your not going to use a special-purpose gaming library, you'll probably have to build most from scratch.
A simple way of doing it would probably be to to create a 2-dimensional Tile array, in which Tile is a class you'll write yourself to hold all relevant information (painting info, wether it can be moved to, etc).
If you're going for a 'square' looking game (as opposed to isometric) you might be able to use GridLayout to some extent. But in that case (or when using any other layout manager) your Tiles will have to subclass Component. My guess is that it will quickly become more work to cram everything into Component-shape than it's worth...
Short skeleton-example of what I might do:
public class Game extends JFrame {
private Tile[][] tiles;
private Monster[] monster;
private Player player;
private GameCanvas canvas;
public Game() {
canvas = new GameCanvas();
add(canvas);
//other initialization, listeners, etc.
//you could call something like this when you detect user input that implies a move
private void move(int x, int y) {
if (tiles[x][y].isPassable()) {
player.moveTo(x, y);
for (int i = 0; i < monsters.length; i++) {
monsters.makeMove();
canvas.repaint();
} else {
//inform user that he can't move to (x, y)
private static class GameCanvas extends JPanel {
public void paintComponent(Graphics g) {
for (int i = 0; i < tiles.length; i ++) {
for (int j = 0; j < tiles[i].length; j++) {
//OtherPaintingInfo is stuff like coordinates, width, height, etc.
//All of that more or less depends on how you want tiles to look
tiles[i][j].paint(Graphics g, OtherPaintingInfo I);
//do something similar for monsters and player
private static class Tile {
boolean isPassable() { ... }
//Again, OtherPaintingInfo is just a placeholder for anything your impl. needs
void paint(Graphics g, OtherPaintingInfo I() { ... } -
Converting Isometric drawing to Perspective drawing
Hi,
I currently have an isometric drawing. What would be the easiest way to convert it to a perspective drawing using the 'Perspective Grid Tool' rather than doing it again from scratch?
ThanksIn the 2D space of Illustrator, there is really not a single answer or "conversion" that would work for any/every isometric view. Consider the content. Applying perspective to an isometric view of a simple, plain-sided cube would be simple in comparison to doing the same thing with say...an isometric view of a complete automobile or other complex shape. And, the Perspective Grid tools are more geared for the manipulation of the perspective grid itself and objects newly created on/in it, as opposed to pre-exsiting objects which were created without the Perspective Grid. 3D modeling packages appear to do what your asking quite easily, but there is a lot more spacial intelligence in 3D modeling.
-
Can not see the data in the grid
Hi,
nice to see the new features, but I can not see the the table inserts
in the data grid - the <data> rider is not clickable.
RegardsHi annerose,
This problem has appeared in a few other threads. It's caused by installing Release 2 Raptor over Release 1 Raptor without first deinstalling Release 1 Raptor . So what you need to do is:
1) Back up any important Raptor files, e.g. connections etc.
2) Remove the existing Raptor Rel 1 installation folder
3) Install Raptor Rel 2
Hope this helps
ady -
Vendor open items wise ALV Grid Display (FBL1N) report to Excel Sheet
Hi All,
I need vendor wise open items and cleared items in ALV Grid format in excel sheet.
I'm Trying that in T Code FBL1N, After the execution. I had select ALV Grid format like this From the menu bar->Settings-> Switch list.
After that i get ALV Grid format, Then i'm doing export the data to excel sheet. like this From the Menu bar->List->Export->Spread sheet.
That time i'm getting Error Message no. 0K064, Filter criteria, sorting, totals and subtotals are not taken into account.
I want vendor wise sorting totals and subtotals,
How can i over come this Error please let me now.
Thanks,
AmarHi Amar,
Please check the KBA 2083705.
https://websmp230.sap-ag.de/sap(bD1odSZjPTAwMQ==)/bc/bsp/sno/ui_entry/entry.htm?param=69765F6D6F64653D3030312669765F7361706E6F7465735F6E756D6265723D3230383337303526
Regards,
Monika -
ALV Totals , Subtotals for a particular field in ALV Grid report
Hi,
I have an issue in ALV totals and subtotals.
Scenario is like this.
i have a vendor data to be pulled out of SAP and to be shown in the form of report.
i am populating all the data and doing do_sum based on Vendor ( has expansin & collapse option ) and display the number of reports .
Vendor -
100
Vendor1 -
1
Vendor2----
2.
Vendor100----
100.
but my problem is in the same report i have a date field .
if i have a five vendors created on 03/03/2008. in the same report for the date field having ( expansion & collapse ) , when i expand based on that date can i be able to sum up all the vendors created on 03/03/2008 and display in the same report along with the vendor count.
Let me know . Thank you in advance
Regards,
RyHi Roby,
Have a look at this sample code
It will help u,
REPORT ZIN_FI_AGEING
message-id zbdc
no standard page heading.
Title : For Ageing Details
Author :
Date : 22/11/2004
Transport/Correction Id :
Clarify case ID :
Application : FI
Program Type :
Frequency :
Purpose :
Comments :
Request No :
TABLES DELCARATIONS
Tables: zzgeinz9a, "Actual line item table
t001. "Plants/Branches
ALV TTPE DELCARATIONS
type-pools: slis.
*Type Declarations for Field Catalog
data : i_fldcat_head type slis_t_fieldcat_alv,
wa_fldcat_head type slis_fieldcat_alv.
*Type Declarations for ALV Events
data : i_events type slis_t_event,
wa_event like line of i_events.
*Type Declarations for Layout Design
data : wa_layout type slis_layout_alv.
*Type Declarations for Sorting Fields
data: it_sort type slis_sortinfo_alv occurs 0 with header line.
*Type Declarations for Displaying Images on Grid
data : i_comment type slis_t_listheader,
wa_comment type slis_listheader.
*Type Declarations for Grouping fields
data : wa_group type slis_sp_group_alv,
i_group type slis_t_sp_group_alv.
DATA DELCARATIONS
data: v_flag, "Status Flag
v_repid like sy-repid, "Program Name
p_year(4) type c, "Year
v_due_days type i. "To hold the due days
CONSTANTS DELCARATIONS
constants: c_x type c value 'X',
c_bukrs(4) type c value '0373'.
INTERNAL TABLES DELCARATIONS
*--Internal table to hold the required data
data: begin of it_final_vendor occurs 0,
rzzlifnr like zzgeinz9a-rzzlifnr, "Vendor
name1 like lfa1-name1, "Vendor Name
docnr like zzgeinz9a-DOCNR, "Accounting Doc No
refdocnr like zzgeinz9a-REFDOCNR, "Reference document no
belnr like bkpf-belnr, "FI Doc No
doc_date like bkpf-awkey, "Document Date
zbd1t like bsik-zbd1t, "Cash discount days 1
bldat like bkpf-bldat, "Document Date
due_date like bkpf-bldat, "Due Date
due_days type i, "Due Days
rzz_ebeln like zzgeinz9a-rzz_ebeln, "P.O. Ref No
not_due like zzgeinz9a-hsl, "Not Yet Due
hsl like zzgeinz9a-hsl, "local currency
found type c, "Existance Flag
end of it_final_vendor.
data: begin of it_final_vendor_temp occurs 0,
rzzlifnr like zzgeinz9a-rzzlifnr, "Vendor
name1 like lfa1-name1, "Vendor Name
belnr like bkpf-belnr, "FI Doc No
bldat like bkpf-bldat, "Document Date
rzz_ebeln like zzgeinz9a-rzz_ebeln, "P.O. Ref No
hsl like zzgeinz9a-hsl, "local currency
due_date like bkpf-bldat, "Due Date
due_days type i, "Due Days
not_due like zzgeinz9a-hsl, "Not Yet Due
buck_0_30 like zzgeinz9a-hsl, "Invoiceamt in localcurr
buck_31_60 like zzgeinz9a-hsl, "Invoiceamt in localcurr
buck_61_90 like zzgeinz9a-hsl, "Invoiceamt in localcurr
buck_91_180 like zzgeinz9a-hsl, "Invoiceamt in localcurr
buck_180 like zzgeinz9a-hsl, "Invoiceamt in localcurr
docnr like zzgeinz9a-DOCNR, "Accounting Doc No
refdocnr like zzgeinz9a-REFDOCNR, "Reference document no
doc_date like bkpf-awkey, "Document Date
found type c, "Existance Flag
end of it_final_vendor_temp.
data: begin of it_final_customer occurs 0,
rzzkunnr like zzgeinz9a-rzzkunnr, "Customer
name1 like kna1-name1, "Customer Name
docnr like zzgeinz9a-DOCNR, "Accounting Doc No
refdocnr like zzgeinz9a-REFDOCNR, "Reference document no
belnr like bkpf-belnr, "FI Doc No
doc_date like bkpf-awkey, "Document Date
zbd1t like bsik-zbd1t, "Cash discount days 1
bldat like bkpf-bldat, "Document Date
due_date like bkpf-bldat, "Due Date
due_days type i, "Due Days
rzz_ebeln like zzgeinz9a-rzz_ebeln, "P.O. Ref No
not_due like zzgeinz9a-hsl, "Not Yet Due
hsl like zzgeinz9a-hsl, "local currency
found type c, "Existance Flag
end of it_final_customer.
data: begin of it_final_customer_temp occurs 0,
rzzkunnr like zzgeinz9a-rzzkunnr, "Customer
name1 like kna1-name1, "Customer Name
belnr like bkpf-belnr, "FI Doc No
bldat like bkpf-bldat, "Document Date
rzz_ebeln like zzgeinz9a-rzz_ebeln, "P.O. Ref No
hsl like zzgeinz9a-hsl, "local currency
due_date like bkpf-bldat, "Due Date
due_days type i, "Due Days
not_due like zzgeinz9a-hsl, "Not Yet Due
buck_0_30 like zzgeinz9a-hsl, "Invoiceamt in localcurr
buck_31_60 like zzgeinz9a-hsl, "Invoiceamt in localcurr
buck_61_90 like zzgeinz9a-hsl, "Invoiceamt in localcurr
buck_91_180 like zzgeinz9a-hsl, "Invoiceamt in localcurr
buck_180 like zzgeinz9a-hsl, "Invoiceamt in localcurr
docnr like zzgeinz9a-DOCNR, "Accounting Doc No
refdocnr like zzgeinz9a-REFDOCNR, "Reference document no
doc_date like bkpf-awkey, "Document Date
found type c, "Existance Flag
end of it_final_customer_temp.
*--Internal Table to hold the Cash discount days 1 for Vendors
data: begin of it_final_bsik occurs 0,
belnr like bsik-belnr,
zbd1t like bsik-zbd1t,
end of it_final_bsik.
*--Internal Table to hold the Cash discount days 1 for Customers
data: begin of it_final_bsid occurs 0,
belnr like bsid-belnr,
zbd1t like bsid-zbd1t,
end of it_final_bsid.
INITIALIZATION
v_repid = sy-repid.
SELECTION SCREEN
selection-screen: begin of block b1 with frame title text-h01.
selection-screen skip.
select-options: s_vendor for zzgeinz9a-rzzlifnr modif id ven.
parameters: p_comp1 like t001-bukrs modif id ven.
parameters: p_rundt1 like bkpf-bldat modif id ven.
select-options: s_cust for zzgeinz9a-rzzkunnr modif id cst.
parameters: p_comp2 like t001-bukrs modif id cst.
parameters: p_rundt2 like bkpf-bldat modif id cst.
selection-screen skip.
selection-screen: begin of block b2 with frame title text-h02.
parameters : p_vendor radiobutton group gr1 default 'X'
user-command test,
p_cust radiobutton group gr1.
selection-screen: end of block b2.
selection-screen: end of block b1.
**************************AT Selection Screen OutPut ******************
at selection-screen output.
loop at screen.
if p_cust = 'X'.
if screen-group1 = 'VEN'.
screen-active = '0'.
screen-input = '0'.
screen-output = '0'.
screen-invisible = '0'.
endif.
elseif p_vendor = 'X'.
if screen-group1 = 'CST'.
screen-active = '0'.
screen-input = '0'.
screen-output = '0'.
screen-invisible = '0'.
endif.
endif.
modify screen.
endloop.
SELECTION SCREEN ON
at selection-screen on s_vendor.
*--Validating Vendor
if not s_vendor[] is initial.
perform validate_s_vendor.
endif.
at selection-screen on s_cust.
*--Validating Customer
if not s_cust[] is initial.
perform validate_s_cust.
endif.
at selection-screen on p_comp1.
*--Validating Company Code.
if not p_comp1 is initial.
perform validate_p_comp1.
endif.
at selection-screen on p_comp2.
*--Validating Company Code.
if not p_comp2 is initial.
perform validate_p_comp2.
endif.
START OF SELECTION
start-of-selection.
if p_vendor = 'X'.
perform get_vendor_data.
elseif p_cust = 'X'.
perform get_customer_data.
endif.
END OF SELECTION
end-of-selection.
if p_vendor = 'X'.
*--Generating the output for vendor
perform generate_field_catalog_vendor.
perform get_events_vendor.
perform generate_layout_vendor.
perform generate_sort_vendor.
perform generate_group_vendor.
perform disp_alv_grid_vendor.
elseif p_cust = 'X'.
*--Generating the output for customer
perform generate_field_catalog_cust.
perform get_events_customer.
perform generate_layout_customer.
perform generate_sort_customer.
perform generate_group_customer.
perform disp_alv_grid_customer.
endif.
*& Form validate_s_vendor
Validating the Vendor
form validate_s_vendor.
select rzzlifnr up to 1 rows
into (zzgeinz9a-rzzlifnr)
from zzgeinz9a
where rzzlifnr in s_vendor.
endselect.
if sy-subrc ne 0.
message e004 with 'Invalid Range of Vendor'(002)
s_vendor-low 'To'(006) s_vendor-high.
endif.
endform. " validate_s_vendor
*& Form validate_s_cust
Validating the Customer
form validate_s_cust.
select rzzkunnr up to 1 rows
into (zzgeinz9a-rzzkunnr)
from zzgeinz9a
where rzzkunnr in s_cust.
endselect.
if sy-subrc ne 0.
message e004 with 'Invalid Range of Customer'(005)
s_cust-low 'To'(006) s_cust-high.
endif.
endform. " validate_s_cust
*& Form validate_p_comp1
Validating the Company Code
form validate_p_comp1.
select single bukrs
into (t001-bukrs)
from t001
where bukrs eq p_comp1.
if sy-subrc ne 0.
message e004 with 'Company Code'(004) p_comp1 'Does not Exists'(003)
endif.
endform. " validate_p_comp1
*& Form validate_p_comp2
Validating the Company Code
form validate_p_comp2.
select single bukrs
into (t001-bukrs)
from t001
where bukrs eq p_comp2.
if sy-subrc ne 0.
message e004 with 'Company Code'(004) p_comp2 'Does not Exists'(003)
endif.
endform. " validate_p_comp2
*& Form get_vendor_data
Getting the Vendor Related Docs
form get_vendor_data.
select a~rzzlifnr
b~name1
a~docnr
a~refdocnr
a~rzz_ebeln
a~hsl
into corresponding fields of table it_final_vendor
from zzgeinz9a as a
inner join lfa1 as b
on arzzlifnr = blifnr
where rzzlifnr in s_vendor
and rbukrs eq p_comp1.
if sy-subrc eq 0.
v_flag = 'X'.
p_year = sy-datum+0(4).
perform get_doc_date using p_comp1
p_year.
perform move_records.
sort it_final_vendor by rzzlifnr.
perform generate_data.
else.
v_flag = space.
endif.
endform. " get_vendor_data
*& Form get_customer_data
Getting the Customer Related Docs
form get_customer_data.
select a~rzzkunnr
b~name1
a~docnr
a~refdocnr
a~rzz_ebeln
a~hsl
into corresponding fields of table it_final_customer
from zzgeinz9a as a
inner join kna1 as b
on arzzkunnr = bkunnr
where rzzkunnr in s_cust
and rbukrs eq p_comp2.
if sy-subrc eq 0.
v_flag = 'X'.
p_year = sy-datum+0(4).
perform get_doc_date_cust using p_comp2
p_year.
perform move_records_cust.
sort it_final_customer by rzzkunnr.
perform generate_data_cust.
else.
v_flag = space.
endif.
endform. " get_customer_data
*& Form get_doc_date
Getting the Document Date and FI Doc No
-->P_P_COMP1 Company Code
-->P_P_YEAR Fiscal Year
form get_doc_date using p_p_comp1
p_p_year.
loop at it_final_vendor.
concatenate it_final_vendor-refdocnr '*' into
it_final_vendor-doc_date.
modify it_final_vendor index sy-tabix.
endloop.
clear it_final_vendor.
data: v_doc_date(11) type c,
v_belnr like bkpf-belnr,
v_bldat like bkpf-bldat.
loop at it_final_vendor.
concatenate it_final_vendor-refdocnr '%' into v_doc_date.
select single belnr
bldat
into corresponding fields of it_final_vendor
from bkpf
where bukrs eq p_p_comp1
and gjahr eq p_p_year
and awkey like v_doc_date.
modify it_final_vendor.
endloop.
clear:it_final_vendor.
endform. " get_doc_date
*& Form move_records
Moving records to final internal table
form move_records.
*--Checking the existance of belnr in bsik
clear it_final_vendor.
select belnr
zbd1t
into table it_final_bsik
from bsik
for all entries in it_final_vendor
where belnr eq it_final_vendor-belnr
and bukrs eq c_bukrs.
clear it_final_bsik.
loop at it_final_vendor.
read table it_final_bsik with key belnr = it_final_vendor-belnr.
if sy-subrc eq 0.
it_final_vendor-zbd1t = it_final_bsik-zbd1t.
it_final_vendor-due_date = it_final_vendor-bldat +
it_final_bsik-zbd1t.
it_final_vendor-found = 'X'.
modify it_final_vendor.
endif.
endloop.
endform. " move_records
*& Form generate_data
Segregating the records based on due_date
form generate_data.
delete it_final_vendor[] where found ne 'X'.
sort it_final_vendor by belnr.
loop at it_final_vendor.
if it_final_vendor-due_date > p_rundt1.
move-corresponding it_final_vendor to it_final_vendor_temp.
move it_final_vendor-hsl to it_final_vendor_temp-not_due.
elseif it_final_vendor-due_date < p_rundt1.
it_final_vendor-due_days = p_rundt1 - it_final_vendor-DUE_DATE.
endif.
*--filling 0-30 bucket.
if it_final_vendor-due_days ge 0 AND it_final_vendor-due_days le 30.
move-corresponding it_final_vendor to it_final_vendor_temp.
move it_final_vendor-hsl to it_final_vendor_temp-buck_0_30.
*--filling 31-60 bucket.
elseif it_final_vendor-due_days ge 31 AND it_final_vendor-due_days le 60
move-corresponding it_final_vendor to it_final_vendor_temp.
move it_final_vendor-hsl to it_final_vendor_temp-buck_31_60.
*--filling 61-90 bucket.
elseif it_final_vendor-due_days ge 61 AND it_final_vendor-due_days le 90
move-corresponding it_final_vendor to it_final_vendor_temp.
move it_final_vendor-hsl to it_final_vendor_temp-buck_61_90.
*--filling 91-180 bucket.
elseif it_final_vendor-due_days ge 91 AND it_final_vendor-due_days
le 180.
move-corresponding it_final_vendor to it_final_vendor_temp.
move it_final_vendor-hsl to it_final_vendor_temp-buck_91_180.
*--filling 180 bucket.
elseif it_final_vendor-due_days gt 180.
move-corresponding it_final_vendor to it_final_vendor_temp.
move it_final_vendor-hsl to it_final_vendor_temp-buck_180.
endif.
append it_final_vendor_temp.
clear it_final_vendor_temp.
endloop.
endform. " generate_data
*& Form DISP_ALV_GRID_VENDOR
Displaying the output in grid For Vendor
form DISP_ALV_GRID_VENDOR.
*--Generating the OUTPUT GRID FOR VENDOR
call function 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = v_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_CALLBACK_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME =
I_BACKGROUND_ID = ' '
I_GRID_TITLE =
I_GRID_SETTINGS =
IS_LAYOUT = wa_layout
IT_FIELDCAT = i_fldcat_head
IT_EXCLUDING =
IT_SPECIAL_GROUPS = i_group
IT_SORT = it_sort[]
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS = i_events
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IT_ALV_GRAPHICS =
IT_ADD_FIELDCAT =
IT_HYPERLINK =
I_HTML_HEIGHT_TOP =
I_HTML_HEIGHT_END =
IT_EXCEPT_QINFO =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
tables
t_outtab = it_final_vendor_temp
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endform. " DISP_ALV_GRID
*& Form get_doc_date_cust
text
-->P_P_COMP2 Company Code
-->P_P_YEAR Fiscal Year
form get_doc_date_cust using p_p_comp2
p_p_year.
loop at it_final_customer.
concatenate it_final_customer-refdocnr '*' into
it_final_customer-doc_date.
modify it_final_customer index sy-tabix.
endloop.
clear it_final_customer.
data: v_doc_date(11) type c,
v_belnr like bkpf-belnr,
v_bldat like bkpf-bldat.
loop at it_final_customer.
concatenate it_final_customer-refdocnr '%' into v_doc_date.
select single belnr
bldat
into corresponding fields of it_final_customer
from bkpf
where bukrs eq p_p_comp2
and gjahr eq p_p_year
and awkey like v_doc_date.
modify it_final_customer.
endloop.
clear:it_final_customer.
endform. " get_doc_date_cust
*& Form move_records_cust
Moving Customer Data to Final Internal Table
form move_records_cust.
*--Checking the existance of belnr in bsid
select belnr
zbd1t
into table it_final_bsid
from bsid
for all entries in it_final_customer
where belnr eq it_final_customer-belnr
and bukrs eq c_bukrs.
clear it_final_bsid.
loop at it_final_customer.
read table it_final_bsid with key belnr = it_final_customer-belnr.
if sy-subrc eq 0.
it_final_customer-zbd1t = it_final_bsid-zbd1t.
it_final_customer-due_date = it_final_customer-bldat +
it_final_bsid-zbd1t.
it_final_customer-found = 'X'.
modify it_final_customer.
endif.
endloop.
endform. " move_records_cust
*& Form generate_data_cust
Generating the Customer Output
form generate_data_cust.
delete it_final_customer[] where found ne 'X'.
sort it_final_customer by belnr.
loop at it_final_customer.
if it_final_customer-due_date > p_rundt2.
move-corresponding it_final_customer to it_final_customer_temp.
move it_final_customer-hsl to it_final_customer_temp-not_due.
elseif it_final_customer-due_date < p_rundt2.
it_final_customer-due_days = p_rundt2 - it_final_customer-DUE_DATE.
endif.
*--filling 0-30 bucket.
if it_final_customer-due_days ge 0 AND it_final_customer-due_days le 30
move-corresponding it_final_customer to it_final_customer_temp.
move it_final_customer-hsl to it_final_customer_temp-buck_0_30.
*--filling 31-60 bucket.
elseif it_final_customer-due_days ge 31 AND it_final_customer-due_days
le 60
move-corresponding it_final_customer to it_final_customer_temp.
move it_final_customer-hsl to it_final_customer_temp-buck_31_60.
*--filling 61-90 bucket.
elseif it_final_customer-due_days ge 61 AND it_final_customer-due_days
le 90
move-corresponding it_final_customer to it_final_customer_temp.
move it_final_customer-hsl to it_final_customer_temp-buck_61_90.
*--filling 91-180 bucket.
elseif it_final_customer-due_days ge 91 AND
it_final_customer-due_days
le 180.
move-corresponding it_final_customer to it_final_customer_temp.
move it_final_customer-hsl to it_final_customer_temp-buck_91_180.
*--filling 180 bucket.
elseif it_final_customer-due_days gt 180.
move-corresponding it_final_customer to it_final_customer_temp.
move it_final_customer-hsl to it_final_customer_temp-buck_180.
endif.
append it_final_customer_temp.
clear it_final_customer_temp.
endloop.
endform. " generate_data_cust
*& Form generate_field_catalog_vendor
Generating the Field Catalog for Vendor
form generate_field_catalog_vendor.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = v_repid
I_INTERNAL_TABNAME = 'IT_FINAL_VENDOR_TEMP'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
changing
ct_fieldcat = i_fldcat_head
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
if not i_fldcat_head[] is initial.
loop at i_fldcat_head into wa_fldcat_head.
case wa_fldcat_head-fieldname.
when 'RZZLIFNR'.
wa_fldcat_head-col_pos = '1'.
wa_fldcat_head-ref_tabname = ' '.
wa_fldcat_head-seltext_m = 'Vendor No'(001).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '12'.
when 'NAME1'.
wa_fldcat_head-col_pos = '2'.
wa_fldcat_head-seltext_m = 'Vendor Name'(007).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '35'.
when 'BELNR'.
wa_fldcat_head-col_pos = '3'.
wa_fldcat_head-seltext_m = 'Invoice No'(008).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '12'.
wa_fldcat_head-KEY = ' '.
when 'BLDAT'.
wa_fldcat_head-col_pos = '4'.
wa_fldcat_head-seltext_m = 'Document Date'(009).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '13'.
wa_fldcat_head-ref_tabname = ' '.
when 'RZZ_EBELN'.
wa_fldcat_head-col_pos = '5'.
wa_fldcat_head-seltext_m = 'PO.Ref.No'(010).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '13'.
wa_fldcat_head-ref_tabname = ' '.
when 'HSL'.
wa_fldcat_head-col_pos = '6'.
wa_fldcat_head-seltext_m = 'Invoice Amount'(011).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'DUE_DATE'.
wa_fldcat_head-col_pos = '7'.
wa_fldcat_head-seltext_m = 'Due Date'(012).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '12'.
wa_fldcat_head-ref_tabname = ' '.
when 'DUE_DAYS'.
wa_fldcat_head-col_pos = '8'.
wa_fldcat_head-seltext_m = 'Due Days'(013).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '9'.
when 'NOT_DUE'.
wa_fldcat_head-col_pos = '9'.
wa_fldcat_head-seltext_m = 'Not Due'(014).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'BUCK_0_30'.
wa_fldcat_head-col_pos = '10'.
wa_fldcat_head-seltext_m = '0 To 30'(015).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'BUCK_31_60'.
wa_fldcat_head-col_pos = '11'.
wa_fldcat_head-seltext_m = '31 To 60'(016).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'BUCK_61_90'.
wa_fldcat_head-col_pos = '12'.
wa_fldcat_head-seltext_m = '61 To 90'(017).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'BUCK_91_180'.
wa_fldcat_head-col_pos = '13'.
wa_fldcat_head-seltext_m = '91 To 180'(018).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'BUCK_180'.
wa_fldcat_head-col_pos = '14'.
wa_fldcat_head-seltext_m = 'Beyond 180'(019).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'DOCNR'.
wa_fldcat_head-no_out = 'X'.
when 'REFDOCNR'.
wa_fldcat_head-no_out = 'X'.
when 'DOC_DATE'.
wa_fldcat_head-no_out = 'X'.
when 'FOUND'.
wa_fldcat_head-no_out = 'X'.
endcase.
modify i_fldcat_head from wa_fldcat_head index sy-tabix.
endloop.
endif.
endform. " generate_field_catalog_vendor
*& Form get_events_vendor
Getting ALV Events
form get_events_vendor.
call function 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
importing
et_events = i_events
exceptions
list_type_wrong = 1
others = 2
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
if not i_events[] is initial.
read table i_events into wa_event with key name = 'TOP_OF_PAGE'(024)
wa_event-form = 'GENERATE_USERCOMMAND'.
modify i_events from wa_event index sy-tabix.
read table i_events into wa_event with key name = 'END_OF_LIST'(025)
wa_event-form = 'GENERATE_USERCOMMAND_FOOTER'.
modify i_events from wa_event index sy-tabix.
endif.
endform. " get_events_vendor
*& Form GENERATE_USERCOMMAND
Displaying Header-Text and Logo on Grid
form generate_usercommand .
clear i_comment[].
wa_comment-typ = 'H'.
wa_comment-info = 'Vendor Ageing Report'(026).
append wa_comment to i_comment.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = i_comment
i_logo = 'ENJOYSAP_LOGO'
I_END_OF_LIST_GRID = 'X'
endform. " GENERATE_USERCOMMAND
*& Form GENERATE_USERCOMMAND_FOOTER
Displaying Footer-Text on Grid
form generate_usercommand_footer.
clear i_comment[].
clear wa_comment.
wa_comment-typ = 'S'.
wa_comment-key = 'GE-Betz'(027).
append wa_comment to i_comment.
call function 'REUSE_ALV_COMMENTARY_WRITE'
exporting
it_list_commentary = i_comment
I_LOGO = ''
i_end_of_list_grid = 'X'.
endform. " GENERATE_USERCOMMAND_FOOTER
*& Form generate_layout_vendor
Generating the ALV Layout
form generate_layout_vendor.
WA_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. "OPTIMIZING FIELD WIDTH
wa_layout-zebra = 'X'. "PUTTING ZEBRA COLORS
wa_layout-confirmation_prompt = 'X'. "DISPLAYS CONFIRMATION DIALOG
wa_layout-totals_text = 'Totals'(028). "DISPLAYS TOTALS TEXT
wa_layout-subtotals_text = 'Sub Totals'(029)."DISPLAYS SUBTOTALS TEXT
endform. " generate_layout_vendor
*& Form generate_sort_vendor
Sorting the Internal Table by Vendor
form generate_sort_vendor.
it_sort-fieldname = 'RZZLIFNR'.
it_sort-tabname = 'IT_FINAL_VENDOR_TEMP'.
it_sort-up = 'X'.
it_sort-subtot = 'X'.
append it_sort.
endform. " generate_sort_vendor
*& Form generate_group_vendor
Grouping the Data
form generate_group_vendor.
clear i_group.
wa_group-sp_group = 'A'.
wa_group-text = 'RZZLIFNR'.
append wa_group to i_group.
endform. " generate_group_vendor
*& Form GENERATE_FIELD_CATALOG_CUST
Generating Field Catalog for Customer
form GENERATE_FIELD_CATALOG_CUST.
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = v_repid
I_INTERNAL_TABNAME = 'IT_FINAL_CUSTOMER_TEMP'
I_STRUCTURE_NAME =
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = v_repid
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
changing
ct_fieldcat = i_fldcat_head
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
if not i_fldcat_head[] is initial.
loop at i_fldcat_head into wa_fldcat_head.
case wa_fldcat_head-fieldname.
when 'RZZKUNNR'.
wa_fldcat_head-col_pos = '1'.
wa_fldcat_head-ref_tabname = ' '.
wa_fldcat_head-seltext_m = 'Customer No'(020).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '12'.
when 'NAME1'.
wa_fldcat_head-col_pos = '2'.
wa_fldcat_head-seltext_m = 'Customer Name'(021).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '35'.
when 'BELNR'.
wa_fldcat_head-col_pos = '3'.
wa_fldcat_head-seltext_m = 'Invoice No'(008).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '12'.
wa_fldcat_head-KEY = ' '.
when 'BLDAT'.
wa_fldcat_head-col_pos = '4'.
wa_fldcat_head-seltext_m = 'Document Date'(009).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '13'.
wa_fldcat_head-ref_tabname = ' '.
when 'RZZ_EBELN'.
wa_fldcat_head-col_pos = '5'.
wa_fldcat_head-seltext_m = 'PO.Ref.No'(010).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '13'.
wa_fldcat_head-ref_tabname = ' '.
when 'HSL'.
wa_fldcat_head-col_pos = '6'.
wa_fldcat_head-seltext_m = 'Invoice Amount'(011).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'DUE_DATE'.
wa_fldcat_head-col_pos = '7'.
wa_fldcat_head-seltext_m = 'Due Date'(012).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '12'.
wa_fldcat_head-ref_tabname = ' '.
when 'DUE_DAYS'.
wa_fldcat_head-col_pos = '8'.
wa_fldcat_head-seltext_m = 'Due Days'(013).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '9'.
when 'NOT_DUE'.
wa_fldcat_head-col_pos = '9'.
wa_fldcat_head-seltext_m = 'Not Due'(014).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'BUCK_0_30'.
wa_fldcat_head-col_pos = '10'.
wa_fldcat_head-seltext_m = '0 To 30'(015).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'BUCK_31_60'.
wa_fldcat_head-col_pos = '11'.
wa_fldcat_head-seltext_m = '31 To 60'(016).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'BUCK_61_90'.
wa_fldcat_head-col_pos = '12'.
wa_fldcat_head-seltext_m = '61 To 90'(017).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'BUCK_91_180'.
wa_fldcat_head-col_pos = '13'.
wa_fldcat_head-seltext_m = '91 To 180'(018).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'BUCK_180'.
wa_fldcat_head-col_pos = '14'.
wa_fldcat_head-seltext_m = 'Beyond 180'(019).
wa_fldcat_head-ddictxt = 'M'.
wa_fldcat_head-outputlen = '16'.
wa_fldcat_head-do_sum = 'X'.
when 'DOCNR'.
wa_fldcat_head-no_out = 'X'.
when 'REFDOCNR'.
wa_fldcat_head-no_out = 'X'.
when 'DOC_DATE'.
wa_fldcat_head-no_out = 'X'.
when 'FOUND'.
wa_fldcat_head-no_out = 'X'.
endcase.
modify i_fldcat_head from wa_fldcat_head index sy-tabix.
endloop.
endif.
endform. " GENERATE_FIELD_CATALOG_CUST
*& Form get_events_customer
Getting ALV Events
form get_events_customer.
call function 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
importing
et_events = i_events
exceptions
list_type_wrong = 1
others = 2
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
if not i_events[] is initial.
read table i_events into wa_event with key name = 'TOP_OF_PAGE'(024)
wa_event-form = 'GENERATE_USERCOMMAND_CUST'.
modify i_events from wa_event index sy-tabix.
read table i_events into wa_event with key na -
08/29/2008 08:58:48 AM
Reply | Quote | Top | Bottom | Edit
hi all,
i have two classes.
class User
public String name;
public int age;
public Address address;
class Address
public String city;
I'm passing a List<Users> to the data provider of a
data grid . I can display the values of properties of Users i.e,
name and age.. My issue is how do i display the value of city which
is a propertyt of Address class in the datagrid column..
thanx in advance
Mark this message as the answer.
Print this message
Report this to a ModeratorHi,
Try labelFunction property of the DataGridColumn.
labelFunction allow you to specify a function name, which will be
invoked when that data is rendered. You will get the Object (User
id your case) corresponding the row being rendered will be passed
as argument to the function. You can use the object and return the
value you want to be displayed.
Please find more details on labelFunction at the URL below
http://livedocs.adobe.com/flex/3/langref/mx/controls/dataGridClasses/DataGridColumn.html#l abelFunction
You can also try custom item renderer.
Hope this helps. -
Multiple database members in a single Grid Row
Hi All,
I have created an FR report (9.3x) and getting the below error while trying to run the report via Web Preview.
5217: Error Processing Results;hasPovDims=1;povXML=<?xml version="1.0"?><datasources><datasource name="FIN QA" dsid="-117fcde3_132fd17f2f6_-771b" allowEdit="1"><dim name="Versions" dimIndex="0" dsName="FIN QA" keyDimName="Versions" memberName="Versions" displayName="Versions: Versions"/><dim name="Scenarios" dimIndex="4" dsName="FIN QA" keyDimName="Scenarios" memberName="Scenarios" displayName="Scenarios: Scenarios"/><dim name="Components" dimIndex="5" dsName="FIN QA" keyDimName="Components" memberName="Components" displayName="Components: Components"/><dim name="Customers" dimIndex="6" dsName="FIN QA" keyDimName="Customers" memberName="Customers" displayName="Customers: Customers"/><dim name="Assets" dimIndex="7" dsName="FIN QA" keyDimName="Assets" memberName="Assets" displayName="Assets: Assets"/></datasource><datasource name="FINDEF QA" dsid="-607fb334_128b79d246e_-7d0a" allowEdit="1"><dim name="Time Periods" dimIndex="1" dsName="FINDEF QA" keyDimName="Time Periods" memberName="Time Periods" displayName="Time Periods: Time Periods"/><dim name="Scenario" dimIndex="3" dsName="FINDEF QA" keyDimName="Scenario" memberName="SC_Actual" displayName="Scenario: SC_Actual"/><dim name="Versions" dimIndex="4" dsName="FINDEF QA" keyDimName="Versions" memberName="VR_Input_Version" displayName="Versions: VR_Input_Version"/><dim name="Customers_Region" dimIndex="6" dsName="FINDEF QA" keyDimName="Customers_Region" memberName="CU_NA" displayName="Customers_Region: CU_NA"/><dim name="Assets" dimIndex="7" dsName="FINDEF QA" keyDimName="Assets" memberName="Assets_NA" displayName="Assets: Assets_NA"/></datasource></datasources>
In my report I have selected 2 rows where I have selected @descendants of ccounts from one database which is FIN QA and in the second row I have selected @children of Accounts from another database which is FINDEF QA. I am using only ONE GRID here.
Is it not possibe to run a FR report by select members from multiple databases in a single grid??
Please have your valuable inputs.Yes it possible to retrive data from multiple database using single grid.
Also there are few limitations namely:
Database connections must be of the same type (for example, both must be Essbase database connections or both must be Financial Management database connections).
Mismatched number of dimensions in the database connections may cause retrieval errors.
For more details refer to this link for details:-
http://www.oracle.com/technetwork/middleware/financial-management/tutorials/obe-multipledbs-086586.html
Cheers
Vikas Naidu -
Error while attaching to cache grid - 3399
Hi experts,
I am getting following error in cache grid operation –
3399: The recorded information indicates that there are other attached members of the grid but this member failed to communicate any of them
Let me tell you what I am trying to achieve
I have two hosts 1 and 2, host 1 and host 2 should be a part of cachegrid. Oracle DB (Persistent DB) is shared with both hosts and is at host 1. Host 2 have access to Oracle on Host 1 (I can do sqlplus from host 2 to host 1's Oracle DB)
Steps I followed are -
Host 1 – (Contains IMDB as well as Persistent DB )
call ttcacheUidPwdSet ('cacheuser','oracle');
call ttGridCreate ('Grid');
call ttGridNameSet ('Grid');
call ttcacheStart;
call ttCachePolicySet('always');
call ttrepPolicySet('always');
…some cache groups ….
call ttRepStart;
call ttGridAttach(1,'alone1','host',5001);
Host 2 - (Contain only IMDB)
call ttcacheUidPwdSet ('cacheuser','oracle');
call ttGridNameSet ('Grid');
call ttcacheStart;
call ttCachePolicySet('always');
call ttrepPolicySet('always');
…. Same cache groups as in host 1 …
call ttRepStart;
call ttGridAttach(1,'alone2','host2',5002);
ttGridNodeStatus displays on both hosts, TimesTen standalone DB attached on grid -
Command> call ttGridNodeStatus;
< GRID, 1, 1, T, host1, GRID_alone1_1, "some IP address", 5001, <NULL>, <NULL>, <NULL>, <NULL>, <NULL> >
When I try to attach host 2 on grid gets following message –
Command> call ttGridAttach(1,'alone2','host2',5002);
3399: The recorded information indicates that there are other attached members of the grid but this member failed to communicate any of them
The command failed.
All .ini files for timesten seem to be good.
Are steps correct? Did I miss something in documentation?Hi,
The error indicates that host2 couldn't communicate with the attached data store on host1. Can you try to get more information?
1. ttStatus output of the attached data store on host1.
2. On host2, can you try to ping "some IP address"?
Besides, I noticed some inconsistency in your script. When you were attaching the first data store, you invoked:
call ttGridAttach(1,'alone1','*host*',5001);
But ttGridNodeStatus showed "*host1*" instead of "*host*".
Command> call ttGridNodeStatus;
< GRID, 1, 1, T, host1, GRID_alone1_1, "some IP address", 5001, <NULL>, <NULL>, <NULL>, <NULL>, <NULL> >
Andy
Maybe you are looking for
-
Hey guys i need some help!!!
I have a slow iMovie4 but only when I am in timeline view.
-
How to get a message from call transaction in RFC call
Hello : I would like to ask one favor i make a 2 call transaction in a RFC funtion when i make the first CALL TRANSACTION using te next statement. CALL TRANSACTION 'F-43' USING bdcdata MESSAGES INTO messtab2 OPTIONS FROM l_fromopt. I recive
-
I want the max date but only look at rows with a certain category value.
I want a way to get the max date but only look at rows with a certain category value - ignoring the other rows. My detail table contains expenditures including date (col A) and category (col D) the number of rows will increase with expenditures over
-
Photoshop CS6 drawing performance and MBP Retina 15 with Nvidia GT 650M
Hi, I've noticed that to get a significantly better drawing performace in Photoshop CS6 with a MacBook Pro 15" Retina Mid 2012 Nvidia GeForce GT 650M one has to start Photshop with a screen resolution set to "Best for Retina" then once Photoshop is r
-
I created and distributed my form. How do I see and print the returned form?
I need to know how I can print the returned form? Thanks