PLD - 3 copies of A/R Invoice. Sort problem when 3 page invoice

I have a client that is printing A/R invoice on three color paper. White, Yellow, Pink. The layout properties are set to print three copies and set to a specific printer. When the A/R invoice is one page or two pages if prints correctly. Page one will print a white, yellow, and pink copy and page two will print a white, yellow, and pink copy.
When the A/R invoice is three pages it does not print the pages on the coresponding  colors

Hi,
Plz try this method....
I have tried it and it works.
The solution is as follows: 
Assuming that you want to display the copy name in the Start of Report (SoR)
1) in the Display Document Properties>Paper Format>Number of Copies = 3, this defines how many copies will be printed
2) Place a formula field in the SoR fldCopyName, set its formula as CopyNumber()
3) Place a formula field in the SoR fldCopy1, set its formula as fldCopyName == 1
4) Place a formula field in the SoR fldCopy2, set its formula as fldCopyName == 2
5) Place a formula field in the SoR fldCopy3, set its formula as fldCopyName == 3
6) Place a Text field in SoR and type in your Copy Name in the Content Tab and set the Link to fldCopy1
7) Place a Text field in SoR and type in your Copy Name in the Content Tab and set the Link to fldCopy2
8) Place a Text field in SoR and type in your Copy Name in the Content Tab and set the Link to fldCopy3
It is well known solution in forum.
By
Firos

Similar Messages

  • JTable sorting - problem when adding elements (complete code inside)

    I�m writing this email with reference to a recent posting here but this time with the code example. (I apologize for the duplicated posting � this time it will be with the code)
    Problem: when adding more elements to the JTable (sorted) the exception: ArrayIndexOutOfBoundsException is thrown.
    Example: If the elements in the table are 10 and then the user requests for 8 � the table will produce the correct result. However, if the user will ask for 11 items (>10) the exception will be thrown.
    The program: The program below (compiles and running). A JTable is constructed with 3 items, when you click the button - the return result should be 4 items - this will generate the error, WHY?
    I would highly appreciate your thoughts why this is happening and most importantly � how to fix it.
    Thanks a lot
    3 files:
    (1) TableSorterDemo
    (2) Traveler
    (3)TableSorter
    //TableSorterDemo:
    package sorter;
    import javax.swing.DefaultListModel;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    * TableSorterDemo is like TableDemo, except that it
    * inserts a custom model -- a sorter -- between the table
    * and its data model.  It also has column tool tips.
    public class TableSorterDemo implements ActionListener
         private JPanel superPanel;
         private JButton clickMe = new JButton("click me to get diff data");
         private boolean DEBUG = false;
         private DefaultListModel defaultListModel;
         private JTable table;
        public TableSorterDemo()
             superPanel = new JPanel(new BorderLayout());
             defaultListModel = new DefaultListModel();
             init1();
            TableSorter sorter = new TableSorter(new MyTableModel(defaultListModel)); //ADDED THIS     
            table = new JTable(sorter);             //NEW
            sorter.setTableHeader(table.getTableHeader()); //ADDED THIS
            table.setPreferredScrollableViewportSize(new Dimension(500, 70));
            //Set up tool tips for column headers.
            table.getTableHeader().setToolTipText(
                    "Click to specify sorting; Control-Click to specify secondary sorting");
            //Create the scroll pane and add the table to it.
            JScrollPane scrollPane = new JScrollPane(table);
            //Add the scroll pane to this panel.
            superPanel.add("Center", scrollPane);
            superPanel.add("South",clickMe);
            clickMe.addActionListener(this);              
        public JPanel getPanel()
             return superPanel;
        public void init1()
             //in real life this will be done from the db
             Traveler a = new Traveler();
             Traveler b = new Traveler();
             Traveler c = new Traveler();
             a.setFirstName("Elvis");
             a.setLastName("Presley");
             a.setSprot("Ping Pong");
             a.setNumYears(3);
             a.setVegetarian(true);
             b.setFirstName("Elton");
             b.setLastName("John");
             b.setSprot("Soccer");
             b.setNumYears(2);
             b.setVegetarian(true);
             c.setFirstName("shaquille");
             c.setLastName("oneil");
             c.setSprot("Golf");
             c.setNumYears(22);
             c.setVegetarian(true);
             defaultListModel.addElement(a);
             defaultListModel.addElement(b);
             defaultListModel.addElement(c);
        public void init2()
             //in real life this will be done from the db
             Traveler d = new Traveler();
             Traveler e = new Traveler();
             Traveler f = new Traveler();
             Traveler g = new Traveler();
             d.setFirstName("John");
             d.setLastName("Smith");
             d.setSprot("Tennis");
             d.setNumYears(32);
             d.setVegetarian(true);
             e.setFirstName("Ron");
             e.setLastName("Cohen");
             e.setSprot("Baseball");
             e.setNumYears(12);
             e.setVegetarian(true);
             f.setFirstName("Donald");
             f.setLastName("Mac Novice");
             f.setSprot("Vallyball");
             f.setNumYears(1);
             f.setVegetarian(true);
             g.setFirstName("Eithan");
             g.setLastName("Superstar");
             g.setSprot("Vallyball");
             g.setNumYears(21);
             g.setVegetarian(true);
             defaultListModel.addElement(d);
             defaultListModel.addElement(e);
             defaultListModel.addElement(f);
             defaultListModel.addElement(g);            
        class MyTableModel extends AbstractTableModel
             private DefaultListModel myModel;
             public MyTableModel(DefaultListModel m)
                  myModel=m;
            private String[] columnNames = {"First Name",
                                            "Last Name",
                                            "Sport",
                                            "# of Years",
                                            "Vegetarian"};
            public int getColumnCount()
                return columnNames.length;
            public int getRowCount()
                return myModel.size();
            public String getColumnName(int column)
                 return getNames()[column];             
             public String[] getNames()
                  String[] names = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"};
                  return names;
            public Object getValueAt(int row, int col)
                 return distributeObjectsInTable(row, col, (Traveler) myModel.elementAt(row));
            public Object distributeObjectsInTable(int row, int col, Traveler tr)
               switch(col)
                         case 0:
                              return tr.getFirstName();
                         case 1:
                           return tr.getLastName();
                      case 2:
                           return tr.getSprot();
                      case 3:
                           return new Integer(tr.getNumYears());
                      case 4:
                           return new Boolean (tr.isVegetarian());
                     default:
                         return "Error";
            public Class getColumnClass(int c)
                return getValueAt(0, c).getClass();
        private static void createAndShowGUI()
            //Make sure we have nice window decorations.
            JFrame.setDefaultLookAndFeelDecorated(true);
            //Create and set up the window.
            JFrame frame = new JFrame("TableSorterDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //Create and set up the content pane.
            TableSorterDemo newContentPane = new TableSorterDemo();
            newContentPane.getPanel().setOpaque(true); //content panes must be opaque
            frame.setContentPane(newContentPane.getPanel());
            //Display the window.
            frame.pack();
            frame.setVisible(true);
        public static void main(String[] args)
            //Schedule a job for the event-dispatching thread:
            //creating and showing this application's GUI.
            javax.swing.SwingUtilities.invokeLater(new Runnable()                   
                public void run()
                    createAndShowGUI();
         public void actionPerformed(ActionEvent ae)
              if (ae.getSource()==clickMe)
                   defaultListModel.removeAllElements();
                   init2(); //if the size of the model was less than 2 items - the result will be ok.
                              //in other words, if you commens the last 2 rows of this method (addElement(f) & g)
                             // the result will be fine.
                   table.updateUI();          
    }//(2) Traveler
    package sorter;
    public class Traveler
         private String firstName;
         private String lastName;
         private String sprot;
         private int numYears;
         private boolean vegetarian;
         public String getFirstName()
              return firstName;
         public String getLastName()
              return lastName;
         public int getNumYears()
              return numYears;
         public String getSprot()
              return sprot;
         public boolean isVegetarian()
              return vegetarian;
         public void setFirstName(String firstName)
              this.firstName = firstName;
         public void setLastName(String lastName)
              this.lastName = lastName;
         public void setNumYears(int numYears)
              this.numYears = numYears;
         public void setSprot(String sprot)
              this.sprot = sprot;
         public void setVegetarian(boolean vegetarian)
              this.vegetarian = vegetarian;
    }//(3)TableSorter
    package sorter;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import java.util.List;
    import javax.swing.*;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.*;
    public class TableSorter extends AbstractTableModel {
        protected TableModel tableModel;
        public static final int DESCENDING = -1;
        public static final int NOT_SORTED = 0;
        public static final int ASCENDING = 1;
        private static Directive EMPTY_DIRECTIVE = new Directive(-1, NOT_SORTED);
        public static final Comparator COMPARABLE_COMAPRATOR = new Comparator() {
            public int compare(Object o1, Object o2) {
                return ((Comparable) o1).compareTo(o2);
        public static final Comparator LEXICAL_COMPARATOR = new Comparator() {
            public int compare(Object o1, Object o2) {
                return o1.toString().compareTo(o2.toString());
        private Row[] viewToModel;
        private int[] modelToView;
        private JTableHeader tableHeader;
        private MouseListener mouseListener;
        private TableModelListener tableModelListener;
        private Map columnComparators = new HashMap();
        private List sortingColumns = new ArrayList();
        public TableSorter() {
            this.mouseListener = new MouseHandler();
            this.tableModelListener = new TableModelHandler();
        public TableSorter(TableModel tableModel) {
            this();
            setTableModel(tableModel);
        public TableSorter(TableModel tableModel, JTableHeader tableHeader) {
            this();
            setTableHeader(tableHeader);
            setTableModel(tableModel);
        private void clearSortingState() {
            viewToModel = null;
            modelToView = null;
        public TableModel getTableModel() {
            return tableModel;
        public void setTableModel(TableModel tableModel) {
            if (this.tableModel != null) {
                this.tableModel.removeTableModelListener(tableModelListener);
            this.tableModel = tableModel;
            if (this.tableModel != null) {
                this.tableModel.addTableModelListener(tableModelListener);
            clearSortingState();
            fireTableStructureChanged();
        public JTableHeader getTableHeader() {
            return tableHeader;
        public void setTableHeader(JTableHeader tableHeader) {
            if (this.tableHeader != null) {
                this.tableHeader.removeMouseListener(mouseListener);
                TableCellRenderer defaultRenderer = this.tableHeader.getDefaultRenderer();
                if (defaultRenderer instanceof SortableHeaderRenderer) {
                    this.tableHeader.setDefaultRenderer(((SortableHeaderRenderer) defaultRenderer).tableCellRenderer);
            this.tableHeader = tableHeader;
            if (this.tableHeader != null) {
                this.tableHeader.addMouseListener(mouseListener);
                this.tableHeader.setDefaultRenderer(
                        new SortableHeaderRenderer(this.tableHeader.getDefaultRenderer()));
        public boolean isSorting() {
            return sortingColumns.size() != 0;
        private Directive getDirective(int column) {
            for (int i = 0; i < sortingColumns.size(); i++) {
                Directive directive = (Directive)sortingColumns.get(i);
                if (directive.column == column) {
                    return directive;
            return EMPTY_DIRECTIVE;
        public int getSortingStatus(int column) {
            return getDirective(column).direction;
        private void sortingStatusChanged() {
            clearSortingState();
            fireTableDataChanged();
            if (tableHeader != null) {
                tableHeader.repaint();
        public void setSortingStatus(int column, int status) {
            Directive directive = getDirective(column);
            if (directive != EMPTY_DIRECTIVE) {
                sortingColumns.remove(directive);
            if (status != NOT_SORTED) {
                sortingColumns.add(new Directive(column, status));
            sortingStatusChanged();
        protected Icon getHeaderRendererIcon(int column, int size) {
            Directive directive = getDirective(column);
            if (directive == EMPTY_DIRECTIVE) {
                return null;
            return new Arrow(directive.direction == DESCENDING, size, sortingColumns.indexOf(directive));
        private void cancelSorting() {
            sortingColumns.clear();
            sortingStatusChanged();
        public void setColumnComparator(Class type, Comparator comparator) {
            if (comparator == null) {
                columnComparators.remove(type);
            } else {
                columnComparators.put(type, comparator);
        protected Comparator getComparator(int column) {
            Class columnType = tableModel.getColumnClass(column);
            Comparator comparator = (Comparator) columnComparators.get(columnType);
            if (comparator != null) {
                return comparator;
            if (Comparable.class.isAssignableFrom(columnType)) {
                return COMPARABLE_COMAPRATOR;
            return LEXICAL_COMPARATOR;
        private Row[] getViewToModel() {
            if (viewToModel == null) {
                int tableModelRowCount = tableModel.getRowCount();
                viewToModel = new Row[tableModelRowCount];
                for (int row = 0; row < tableModelRowCount; row++) {
                    viewToModel[row] = new Row(row);
                if (isSorting()) {
                    Arrays.sort(viewToModel);
            return viewToModel;
        public int modelIndex(int viewIndex)
            return getViewToModel()[viewIndex].modelIndex;
        private int[] getModelToView()
            if (modelToView == null) {
                int n = getViewToModel().length;
                modelToView = new int[n];
                for (int i = 0; i < n; i++) {
                    modelToView[modelIndex(i)] = i;
            return modelToView;
        // TableModel interface methods
        public int getRowCount() {
            return (tableModel == null) ? 0 : tableModel.getRowCount();
        public int getColumnCount() {
            return (tableModel == null) ? 0 : tableModel.getColumnCount();
        public String getColumnName(int column) {
            return tableModel.getColumnName(column);
        public Class getColumnClass(int column) {
            return tableModel.getColumnClass(column);
        public boolean isCellEditable(int row, int column) {
            return tableModel.isCellEditable(modelIndex(row), column);
        public Object getValueAt(int row, int column) {
            return tableModel.getValueAt(modelIndex(row), column);
        public void setValueAt(Object aValue, int row, int column) {
            tableModel.setValueAt(aValue, modelIndex(row), column);
        // Helper classes
        private class Row implements Comparable {
            private int modelIndex;
            public Row(int index) {
                this.modelIndex = index;
            public int compareTo(Object o) {
                int row1 = modelIndex;
                int row2 = ((Row) o).modelIndex;
                for (Iterator it = sortingColumns.iterator(); it.hasNext();) {
                    Directive directive = (Directive) it.next();
                    int column = directive.column;
                    Object o1 = tableModel.getValueAt(row1, column);
                    Object o2 = tableModel.getValueAt(row2, column);
                    int comparison = 0;
                    // Define null less than everything, except null.
                    if (o1 == null && o2 == null) {
                        comparison = 0;
                    } else if (o1 == null) {
                        comparison = -1;
                    } else if (o2 == null) {
                        comparison = 1;
                    } else {
                        comparison = getComparator(column).compare(o1, o2);
                    if (comparison != 0) {
                        return directive.direction == DESCENDING ? -comparison : comparison;
                return 0;
        private class TableModelHandler implements TableModelListener {
            public void tableChanged(TableModelEvent e) {
                // If we're not sorting by anything, just pass the event along.            
                if (!isSorting()) {
                    clearSortingState();
                    fireTableChanged(e);
                    return;
                // If the table structure has changed, cancel the sorting; the            
                // sorting columns may have been either moved or deleted from            
                // the model.
                if (e.getFirstRow() == TableModelEvent.HEADER_ROW) {
                    cancelSorting();
                    fireTableChanged(e);
                    return;
                // We can map a cell event through to the view without widening            
                // when the following conditions apply:
                // a) all the changes are on one row (e.getFirstRow() == e.getLastRow()) and,
                // b) all the changes are in one column (column != TableModelEvent.ALL_COLUMNS) and,
                // c) we are not sorting on that column (getSortingStatus(column) == NOT_SORTED) and,
                // d) a reverse lookup will not trigger a sort (modelToView != null)
                // Note: INSERT and DELETE events fail this test as they have column == ALL_COLUMNS.
                // The last check, for (modelToView != null) is to see if modelToView
                // is already allocated. If we don't do this check; sorting can become
                // a performance bottleneck for applications where cells 
                // change rapidly in different parts of the table. If cells
                // change alternately in the sorting column and then outside of            
                // it this class can end up re-sorting on alternate cell updates -
                // which can be a performance problem for large tables. The last
                // clause avoids this problem.
                int column = e.getColumn();
                if (e.getFirstRow() == e.getLastRow()
                        && column != TableModelEvent.ALL_COLUMNS
                        && getSortingStatus(column) == NOT_SORTED
                        && modelToView != null) {
                    int viewIndex = getModelToView()[e.getFirstRow()];
                    fireTableChanged(new TableModelEvent(TableSorter.this,
                                                         viewIndex, viewIndex,
                                                         column, e.getType()));
                    return;
                // Something has happened to the data that may have invalidated the row order.
                clearSortingState();
                fireTableDataChanged();
                return;
        private class MouseHandler extends MouseAdapter {
            public void mouseClicked(MouseEvent e) {
                JTableHeader h = (JTableHeader) e.getSource();
                TableColumnModel columnModel = h.getColumnModel();
                int viewColumn = columnModel.getColumnIndexAtX(e.getX());
                int column = columnModel.getColumn(viewColumn).getModelIndex();
                if (column != -1) {
                    int status = getSortingStatus(column);
                    if (!e.isControlDown()) {
                        cancelSorting();
                    // Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or
                    // {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed.
                    status = status + (e.isShiftDown() ? -1 : 1);
                    status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1}
                    setSortingStatus(column, status);
        private static class Arrow implements Icon {
            private boolean descending;
            private int size;
            private int priority;
            public Arrow(boolean descending, int size, int priority) {
                this.descending = descending;
                this.size = size;
                this.priority = priority;
            public void paintIcon(Component c, Graphics g, int x, int y) {
                Color color = c == null ? Color.GRAY : c.getBackground();            
                // In a compound sort, make each succesive triangle 20%
                // smaller than the previous one.
                int dx = (int)(size/2*Math.pow(0.8, priority));
                int dy = descending ? dx : -dx;
                // Align icon (roughly) with font baseline.
                y = y + 5*size/6 + (descending ? -dy : 0);
                int shift = descending ? 1 : -1;
                g.translate(x, y);
                // Right diagonal.
                g.setColor(color.darker());
                g.drawLine(dx / 2, dy, 0, 0);
                g.drawLine(dx / 2, dy + shift, 0, shift);
                // Left diagonal.
                g.setColor(color.brighter());
                g.drawLine(dx / 2, dy, dx, 0);
                g.drawLine(dx / 2, dy + shift, dx, shift);
                // Horizontal line.
                if (descending) {
                    g.setColor(color.darker().darker());
                } else {
                    g.setColor(color.brighter().brighter());
                g.drawLine(dx, 0, 0, 0);
                g.setColor(color);
                g.translate(-x, -y);
            public int getIconWidth() {
                return size;
            public int getIconHeight() {
                return size;
        private class SortableHeaderRenderer implements TableCellRenderer {
            private TableCellRenderer tableCellRenderer;
            public SortableHeaderRenderer(TableCellRenderer tableCellRenderer) {
                this.tableCellRenderer = tableCellRenderer;
            public Component getTableCellRendererComponent(JTable table,
                                                           Object value,
                                                           boolean isSelected,
                                                           boolean hasFocus,
                                                           int row,
                                                           int column) {
                Component c = tableCellRenderer.getTableCellRendererComponent(table,
                        value, isSelected, hasFocus, row, column);
                if (c instanceof JLabel) {
                    JLabel l = (JLabel) c;
                    l.setHorizontalTextPosition(JLabel.LEFT);
                    int modelColumn = table.convertColumnIndexToModel(column);
                    l.setIcon(getHeaderRendererIcon(modelColumn, l.getFont().getSize()));
                return c;
        private static class Directive {
            private int column;
            private int direction;
            public Directive(int column, int direction) {
                this.column = column;
                this.direction = direction;
    }

    The table listens to the TableModel for changes. Changing the table by adding/removing
    rows or columns has no affect on its table model. If you make changes to the table model
    the table will be notified by its TableModelListener and change its view. So tell
    MyTableModel about the change of data:
    public class TableSorterDemo implements ActionListener
        MyTableModel tableModel;
        public TableSorterDemo()
            defaultListModel = new DefaultListModel();
            init1();
            tableModel = new MyTableModel(defaultListModel);
            TableSorter sorter = new TableSorter(tableModel);
        public void actionPerformed(ActionEvent ae)
            if (ae.getSource()==clickMe)
                defaultListModel.removeAllElements();
                init2();
                tableModel.fireTableStructureChanged();
    }

  • A/R Invoice sort problem

    Hi every one
    I'm doing an A/R invoice where I've pull some sale orders from de BP, the problem is that the invoice seems to be sorting those sale orders by the number of the documents (ORDR.DocNUM) and I need them to be sort in the order y ctrl+click them in the 'Choose from list window', because i have several columns that need to be sorted in that order and since those are not number columns  I cannot simple dbl click the colum to get the sort done
    Thanks in advance
    enso

    Have you tried to change the sort order of documents in CFL (ctrl-shift-S)?
    AFAIK, the order of lines is determined first by the order of documents in the CFL
    then by the docline nbr.
    If that does not satisfy your requirement then you may
    want to consider the following workaround:
    - 'steal' one column (or make a UDF) for sorting purposes
    - generate a sort value for each line using Formatted Search on that column.
    Here I'm calculating the sort value using line description
    [code]declare @s as varchar(50)
    set @s = $[$38.3.0]
    if len(@s)=0 SELECT 0
    if len(@s)=1 SELECT ascii(substring(@s,1,1))*1000
    if len(@s)>1 SELECT ascii(substring(@s,1,1))*1000 + ascii(substring(@s,2,1))[/code]
    - doubleclick to sort
    HTH
    Juha

  • Excise Invoice Print problem for multiple Invoices

    HI   All,
    I Have developed a Zprint prog and zsmartform and attached it to standard tcode J1IP .
    when we execute J1IP outputtype J1I10  we get multiple invoices . if we select one check box and execute and press print preview/ print we get the print correctly . But if we check multiple check boxes and press print/preview then we have to press print button multiple times/come  back for every invoice .
    My requirement  is when we execute J1iP for multiple invoices it should not come multiple times pop up window ..ie in one print request we need to send multiple invoices . How to achieve this functionality.

    Hi,
    use NO_OPEN and NO_CLOSE fields of CONTROL_PARAMETERS structure
    in Your call to smart form function module.
    Currently You print every invoice in separate spool request.
    You should print all invoices in one big spool requests.
    Set NO_CLOSE = X to all, except last one, and NO_OPEN = X to all, except first one.
    Regards,
    Przemysław

  • Problem when crediting invoice

    Hi everybody,
    First post for me, new to this forum but I have used it before for help with other questions.
    Can't seem to find the correct help right now, so I joined your wonderful forum and maybe I can contribute somehow one day!
    I have created an invoice from 2 different sales orders (2 different jobs), with 2 service orders.
    This is only service, so only hours registered in CAT2. Then I ran DP91 for both orders and fixed the prices and such on the Debit Note Requests.
    Then I created the invoice with Collective Billing Document VF04.
    No problems so far.
    After the invoice has been created I noticed that several hours are missing. I have created a Credit note, because I was told by my superiors that I cannot run VF11 24 hours AFTER invoice has been created.
    But here I'm stuck.
    How do I go from here? Customer only wants one invoice per job, so I cannot create an additional invoice for the remaining hours. I need to add the additional hours and then create a new invoice with the correct amount of hours so that it all ends up on just one single invoice.
    Any ideas?

    Hi Hegal,
    That's what I want, to cancel the old invoice and redo it.
    But since I was told that, I cannot cancel an invoice unless it's created the same day i.e. an invoice created today, I'm not allowed to cancel tomorrow.
    I have to create a credit for it.
    And after this procedure, it seems like the hours used for the first invoice has status "fully invoiced" and cannot be used again. Maybe I need to create a new sales order with service order and register the hours again.
    But this does create lots of extra work it seems.
    To answer your second option, wont that create a separate row on the invoice? It could work, I'll just have to try it out first and make sure it looks the way our customer wants it.
    Thank you very much for your reply!
    Really appreciate it.
    BR

  • Sorting Problem when using HtmlDataTable

    Hello,
    In my table, I am displaying a list of homegrown, POJOs that represent users. Each row displays some info about the user as well as several command links for performing certain actions (like showing details, for instance). The sorting criteria is based upon whichever column is selected (the column names are being displayed via command links).
    The sorting for my list of users is working fine with the exception of the command links per row. That is, if I have the following:
    Last Name     First Name
    Conners            John               Show Details
    Conners            Amy               Show DetailsSay I select the "Show Details" link for the first row. Details for John Conners are displayed. Good. Now I decide to sort the same list by First Name so I get the following:
    Last Name     First Name
    Conners            Amy                Show Details
    Conners            John               Show DetailsThe problem now is that when I select "Show Details" for the first row, information for John Conners appears. No matter what I do, it appears that the links in each row remain associated with whatever objects are displayed for that row the very first time the table is built.
    How can I get the command links to "know" that their associated objects have changed after performing a sort routine?
    Any ideas?
    Jeff

    Solution:
    The problem was related to my usage of the list in conjunction with the code in my backing bean. Initially I was storing my list in the request scope. Basically, what was happening was I'd sort the list based upon a column that was selected. However, before the response was committed, I was retrieving the same list again--only in its previous, unordered state.
    Now I have a less bulky (compared to what it could be) list that I store in the session. After I sort, I make sure to update the list in the session so each link in each row of the data table stay associated with the correct data.
    Here's the sort method:
    public void sort(ActionEvent actionEvent) {
            sortColumn = (ColumnType) ColumnType.getEnumManager().getInstance(
                actionEvent.getComponent().getId());
            logger.debug("Attempting to sort by " + sortColumn);
            Comparator c = null;
            // Sort method will depend upon the column type
            switch (sortColumn.getValue()) {
            case ApplicationConstants.USER_ID_COLUMN:
                c = new BeanPropertyComparator(ApplicationConstants.ID);
                Collections.sort((List) this.getSearchResults(), c);
                break;
            case ApplicationConstants.LAST_NAME_COLUMN:
                c = new BeanPropertyComparator(ApplicationConstants.LAST_NAME);
                Collections.sort((List) this.getSearchResults(), c);
                break;
            case ApplicationConstants.FIRST_NAME_COLUMN:
                c = new BeanPropertyComparator(ApplicationConstants.FIRST_NAME);
                Collections.sort((List) this.getSearchResults(), c);
                break;
            default:
                break;
             * Update the object stored in the session so the sort order will be
             * retained between requests.
            facesContext.getApplication().createValueBinding(
                "#{sessionScope.searchResults}").setValue(facesContext,
                this.getSearchResults());
        }The search results are initialized from a previous search page and its backing bean. The results are passed as a managed property to the bean containing the sort method.
    Some snippets of my edit page that calls the sorting method is below:
    <h:dataTable id="userTable" styleClass="table-background"
                        rowClasses="table-odd-row,table-even-row" cellpadding="5"
                        value="#{pc_Search_user_results.searchResults}" var="searchResult"
                        binding="#{pc_Search_user_results.userTable}">
                        <h:column>
                             <f:facet name="header">
                                  <h:commandLink styleClass="table-header" id="userId"
                                       actionListener="#{pc_Search_user_results.sort}">
                                       <h:outputText value="User ID" />
                                  </h:commandLink>
                             </f:facet>
                             <h:outputText value="#{searchResult.id}" />
                        </h:column>
    <h:column>
                             <h:commandLink id="editLink" action="#{pc_Search_user_results.editUser}">
                                  <h:outputText value="Edit" />
                             </h:commandLink>
                        </h:column>This is a long post, but I thought I'd try to explain for those who attempted to help as well as others.
    Jeff

  • Discount in 2 pages invoice Smartform

    Hi;
    i calculate the given discount in an invoice, if the invoice is a one page invoice the total discount is ok, but if it is a 2 pages invoice, in the first page the calculate of the discount is just for the items of the first page, then i turn to the 2nd page and the total of the discount is for the items of the 2nd page:
    example:
    page 1 discount: 85.11
    page 2 discount: 00.38
    the total should be 85.49 and should be shown in each page but instead is shown in parts in the 2 pages.
    what should i do to get this discount in on variable that doesn't change on each page?
    Thanks on advace.
    David Fúnez
    Corp. Mandofer/Asin
    Tegucigalpa, Honduras

    It is going to be little bit tricky. But I hope I will explain you better.
    1. Create a one Dummy Window just before after the main window and before the Discount window.
    Set the flag "Only After End of Main window"
    Create one Code under this window
    Put code like:
    L_LAST = 'X'.
    2. In Discount window:
    Put this code:
    if l_last = 'X'.
    clear l_last.
    clear: l_sub_tot_dis.
    print_tot = 'X'.
    endif.
    l_sub_tot_dis = l_sub_tot_dis + discount_amt.
    l_Tot_dis = l_tot_dis + discount_amt.
    Print these both variables in separate text element
    Put condition as PRINT_TOT = 'X' for the TOT_Discount
    Hope this works.
    Regards,
    Naimesh Patel

  • Problem when invoice in VF01

    Hi
    I have a problem when create invoice in VF01.
    I created billing document in VA01 with order type "Rush order" and next in VF01 when I put
    this number then and choose INVOICE type and press SAVE. Then I got an error "No billing documents were generated".
    How to create invoice for that?
    Thanx for help
    Edited by: Kosmo on Oct 27, 2010 4:35 PM

    Go to VF02 and do "Relase to Accounting"
    What error message you got then?
    Regards,
    SDNer

  • Sorting problems in Grid View

    Hi, I'm having a bit of a sorting problem when it comes to an artist with name variations. The example I'm going to use is DJ Tiesto.
    There are album I have where he is credited as DJ Tiesto, and others where he is simply Tiesto.
    In the end, I'd like these albums sorted chronologically under one name (say DJ Tiesto), while still preserving and showing the proper artist name for each album. I have it set to sort by "Album by Year", which is working fine.
    The major problem I am having is that I can't get it to display properly across all iTunes viewing methods: List mode, Grid mode, and Coverflow.
    I've tried leaving the Artist field alone, and changing the Sort Artist field to "DJ Tiesto" for all songs, and that almost works:
    -List mode groups them all under "DJ Tiesto", while showing each albums Artist as the correct artist name.
    -Grid mode sorted by Album groups them all under "DJ Tiesto", while showing each albums Artist as the correct artist name.
    -Coverflow sorts them all in chronological order, while showing each albums Artist as the correct artist name.
    Problem is, Grid mode sorted by ARTIST creates two separate artists! Some for DJ Tiesto and some for Tiesto!
    To correct this I tried changing the Album Artist field for all songs to "DJ Tiesto", which solved that problem but created a bunch of new ones:
    -List mode is still correctly grouping them under "DJ Tiesto", while showing each albums Artist as the correct artist name.
    -Grid mode sorted by Album is still correctly grouping them under "DJ Tiesto", *however now it is not displaying the correct Artist name for each album!*
    -Grid mode sorted by Artist is now grouping them all under "DJ Tiesto", *however it is not displaying the correct Artist name for each album!*
    -Coverflow is sorting them in correct chronological order, *however it as well is not displaying the correct Artist name for each album!*
    Using the Album Artist tag has created more problems that it has solved! Is there anyone who knows a way to achieve what I am trying to do? I have tried seemingly every option I can and have still not found a way to do this!!
    Thanks!

    My own method of working involves renaming the files upon import to:
    i "shotdate_sequencenumber"
    Files are therefore typically named
    b 2007-11-25_001
    etc.
    This way, sorting by Filename automatically sorts by Date by default. And it wouldn't even matter if you added a descriptive text in between the date and number (
    b 2007-11-25_Scotland_001

  • To not allow billing cancellation when the invoice is cleared

    Hello
    I would like to know if there is any way to avoid the cancellation of an invoice via VF11 when the invoice has been already cleared.
    Thanks in advance.

    You can write a user exit by checking the status of accounting document associated with the billing document.
    Pl give points if you find my answer helpful / points to correct direction / resolves.
    Thanks,
    Ramesh

  • Regarding invoice no. displaying in non-invoice no.list in document flow

    Hi All,
    I have 3 radio buttons. if i select 1st one only orders with invoice list should be displayed and for 2nd only orders without invoice list should be displayed and for the 3rd both should be displayed.
    but here the problem was when i select the 2nd radiobutton and see the output it was showing all the orders without invoice no. but when i see the document flow for the first order it was showing invoice no. in DOCUMENT FLOW. but it was not displaying in the output.
    So any one can help me in this issue, i am sending the select statements i have used,
      Get the invoice numbers and the corresponding order numbers for the
      date range specified on the selection screen.
        SELECT vbrkvbeln vbrpposnr vbrp~matnr
               vbrpaubel vbfaposnv
          INTO CORRESPONDING FIELDS OF TABLE i_invoice_items FROM vbrk
          INNER JOIN vbpa ON vbrkvbeln = vbpavbeln
          INNER JOIN vbrp ON vbrkvbeln = vbrpvbeln
          INNER JOIN vbfa ON vbrkvbeln = vbfavbeln  AND
                             vbrpposnr = vbfaposnn  AND
                             vbrpaubel = vbfavbelv
          WHERE vbrk~fkdat BETWEEN s_fkdat-low AND s_fkdat-high AND
                vbrk~bukrs  IN s_bukrs    AND
                vbpa~parvw   = 'WE'       AND
                vbpa~kunnr  IN s_kunnr    AND
                vbrk~vkorg  IN s_vkorg    AND
                vbrp~prodh  IN s_prdha    AND
                vbrp~werks  IN s_werks    AND
                vbfavbelv   = vbrpaubel AND
                vbfa~vbtyp_n = 'M'        AND
                vbfa~vbtyp_v = 'C'.
    get all open orders i.e. orders that have not been invoiced - Start.
      Step 1 - Get all invoiced orders.
        SELECT vbfavbelv vbfaposnv
          INTO CORRESPONDING FIELDS OF TABLE i_inv_ord_items
          FROM vbfa
          INNER JOIN vbpa ON vbfavbelv = vbpavbeln
          INNER JOIN vbak ON vbfavbelv = vbakvbeln
          INNER JOIN vbap ON vbfavbelv = vbapvbeln AND
                             vbfaposnv = vbapposnr
          WHERE vbtyp_n        = 'M'     AND
                vbtyp_v        = 'C'     AND
                vbpa~parvw     = 'WE'    AND
                vbpa~kunnr    IN s_kunnr AND
                vbak~vkorg    IN s_vkorg AND
                vbak~bukrs_vf IN s_bukrs AND
                vbap~abgru     = ' '     AND
                vbap~werks    IN s_werks AND
                vbap~prodh    IN s_prdha.
      STEP 2 - Get all orders that have not been invoiced.
      Step 2a) Get all orders that match the filters specified on the selection screen
        SELECT vbakvbeln vbapposnr matnr
          INTO CORRESPONDING FIELDS OF TABLE i_ord_items FROM vbak
          INNER JOIN vbap ON vbakvbeln = vbapvbeln
          INNER JOIN vbpa ON vbakvbeln = vbpavbeln
          WHERE vbpa~parvw     = 'WE'    AND
                vbpa~kunnr    IN s_kunnr AND
                vbak~vkorg    IN s_vkorg AND
                vbak~bukrs_vf IN s_bukrs AND
                prodh         IN s_prdha AND
                werks         IN s_werks AND
                vbap~abgru     = ' '.
        SORT i_ord_items BY vbeln posnr.
      Step 2b) Delete orders that have been invoiced by
               deleting records found in Step 1
        LOOP AT i_inv_ord_items INTO wa_inv_ord_items.
          READ TABLE i_ord_items
            INTO wa_ord_items
            WITH KEY vbeln = wa_inv_ord_items-vbelv
                     posnr = wa_inv_ord_items-posnv
            BINARY SEARCH.
          IF sy-subrc = 0.
            gv_index = sy-tabix.
            DELETE i_ord_items
              INDEX gv_index.
          ENDIF.
        ENDLOOP.
      Step 2c) Remove entries that exist in the invoiced orders internal table
      to avoid duplicate entries
        SORT i_ord_items BY vbeln posnr.
        LOOP AT i_invoice_items INTO wa_invoice_items.
          READ TABLE i_ord_items
            INTO wa_ord_items
            WITH KEY vbeln = wa_invoice_items-aubel
                     posnr = wa_invoice_items-posnv
            BINARY SEARCH.
          IF sy-subrc = 0.
            gv_index = sy-tabix.
            DELETE i_ord_items
              INDEX gv_index.
          ENDIF.
        ENDLOOP.
    get all open orders i.e. orders that have not been invoiced - End.
      Combine the open orders and invoiced orders into one internal table
    --Code added by CHHEDAM.SMS129705.Date- 03/28/2007--
      Clear 'invoiced' orders if open orders are opted.
        IF g_open EQ 'X'.
          CLEAR: i_invoice_items[].
        ENDIF.
    --End of code added by CHHEDAM.SMS129705.Date- 03/28/2007--
        IF g_open EQ 'X' OR g_both EQ 'X'.       
          LOOP AT i_ord_items INTO wa_ord_items.
            CLEAR wa_invoice_items.
            MOVE: wa_ord_items-vbeln TO wa_invoice_items-aubel,
                  wa_ord_items-posnr TO wa_invoice_items-posnv,
                  wa_ord_items-matnr TO wa_invoice_items-matnr.
            APPEND wa_invoice_items TO i_invoice_items.
          ENDLOOP.
        ENDIF.                                   
        SORT i_invoice_items BY vbeln.
        IF i_invoice_items[] IS NOT INITIAL.
          SELECT *
            FROM vbak
            INTO TABLE gt_vbak_table
            FOR ALL ENTRIES IN i_invoice_items
            WHERE vbeln = i_invoice_items-aubel.
          IF sy-subrc = 0.
            DELETE gt_vbak_table
              WHERE vkorg    NOT IN s_vkorg OR
                    bukrs_vf NOT IN s_bukrs OR
                    auart    NOT IN s_auart.
          ENDIF.
          SORT gt_vbak_table BY vbeln.
          IF gt_vbak_table[] IS NOT INITIAL.
            SELECT *
              FROM vbap
              INTO TABLE gt_vbap_table
              FOR ALL ENTRIES IN gt_vbak_table
              WHERE vbeln = gt_vbak_table-vbeln.
            IF sy-subrc = 0.
              DELETE gt_vbap_table
                WHERE werks NOT IN s_werks OR
                      prodh NOT IN s_prdha.
            ENDIF.
          ENDIF.
        ENDIF.
        SORT gt_vbak_table BY vbeln.
        SORT gt_vbap_table BY vbeln posnr.
    LOOP AT i_invoice_items INTO wa_invoice_items.
          READ TABLE gt_vbak_table
            INTO gt_vbak_table_line
            WITH KEY vbeln = wa_invoice_items-aubel
            BINARY SEARCH.
          IF sy-subrc = 0.
            display_table_line-aubel     = gt_vbak_table_line-vbeln.
            display_table_line-vkorg     = gt_vbak_table_line-vkorg.
            display_table_line-auart     = gt_vbak_table_line-auart.
            display_table_line-bukrs_vf  = gt_vbak_table_line-bukrs_vf.
            display_table_line-bill_to   = gt_vbak_table_line-kunnr.
            display_table_line-vdatu     = gt_vbak_table_line-vdatu.
            display_table_line-faksk     = gt_vbak_table_line-faksk.
            display_table_line-lifsk     = gt_vbak_table_line-lifsk.
          ENDIF.
          READ TABLE gt_vbap_table
            INTO gt_vbap_table_line
            WITH KEY vbeln = wa_invoice_items-aubel
                     posnr = wa_invoice_items-posnv
            BINARY SEARCH.
          IF sy-subrc = 0.
            display_table_line-posnr     = gt_vbap_table_line-posnr.
            display_table_line-matnr     = gt_vbap_table_line-matnr.
            display_table_line-kdmat     = gt_vbap_table_line-kdmat.
            display_table_line-maktx     = gt_vbap_table_line-arktx.
            display_table_line-werks     = gt_vbap_table_line-werks.
            display_table_line-prodh     = gt_vbap_table_line-prodh.
            display_table_line-kwmeng    = gt_vbap_table_line-kwmeng.
            display_table_line-vrkme     = gt_vbap_table_line-vrkme.
            display_table_line-waerk     = gt_vbap_table_line-waerk.
            display_table_line-net_price = gt_vbap_table_line-netwr.
            display_table_line-kzwi1     = gt_vbap_table_line-kzwi1.
            display_table_line-kzwi2     = gt_vbap_table_line-kzwi2.
            display_table_line-kzwi3     = gt_vbap_table_line-kzwi3.
            display_table_line-kzwi4     = gt_vbap_table_line-kzwi4.
            display_table_line-kzwi5     = gt_vbap_table_line-kzwi5.
            display_table_line-wavwr     = gt_vbap_table_line-wavwr.
            display_table_line-mwsbp     = gt_vbap_table_line-mwsbp.
          ENDIF.
          display_table_line-vbeln = wa_invoice_items-vbeln.
          APPEND display_table_line TO display_table_line.
          CLEAR wa_invoice_items.
          CLEAR display_table_line.
        ENDLOOP.
      Get the Purchase Order Number, Sales District and Desc
        IF display_table_line[] IS NOT INITIAL.
          CLEAR: gt_vbkd_table.
          CLEAR: gt_t171t_table.
          SELECT *
            FROM vbkd
            INTO TABLE gt_vbkd_table
            FOR ALL ENTRIES IN display_table_line
            WHERE vbeln = display_table_line-aubel.
          SORT gt_vbkd_table  BY vbeln.
          IF gt_vbkd_table[] IS NOT INITIAL.
            SELECT *
              FROM t171t
              INTO TABLE gt_t171t_table
              FOR ALL ENTRIES IN gt_vbkd_table
              WHERE bzirk = gt_vbkd_table-bzirk.
          ENDIF.
          SORT gt_t171t_table BY bzirk.
        ENDIF.
      Get Ship To Account
        IF display_table_line[] IS NOT INITIAL.
          CLEAR: gt_vbpa_table.
          SELECT *
            INTO TABLE gt_vbpa_table
            FROM vbpa
            FOR ALL ENTRIES IN display_table_line
            WHERE vbeln = display_table_line-aubel.
          IF sy-subrc = 0.
            DELETE gt_vbpa_table
              WHERE parvw <> 'WE'.
          ENDIF.
        ENDIF.
        SORT gt_vbpa_table BY vbeln parvw.
    Get Ship To Name and City
        IF gt_vbpa_table[] IS NOT INITIAL.
          CLEAR: gt_kna1_table.
          SELECT *
            INTO TABLE gt_kna1_table
            FROM kna1
            FOR ALL ENTRIES IN gt_vbpa_table
            WHERE kunnr = gt_vbpa_table-kunnr.
        ENDIF.
        SORT gt_kna1_table BY kunnr.
        IF display_table_line[] IS NOT INITIAL.
          CLEAR: gt_vbpa2_table.
          SELECT *
            INTO TABLE gt_vbpa2_table
            FROM vbpa
            FOR ALL ENTRIES IN display_table_line
            WHERE vbeln = display_table_line-aubel.
          IF sy-subrc = 0.
            DELETE gt_vbpa2_table
              WHERE parvw <> 'ZS' .
          ENDIF.
        ENDIF.
        SORT gt_vbpa2_table BY vbeln parvw.
        IF gt_vbpa2_table[] IS NOT INITIAL.
          CLEAR: gt_kna12_table.
          SELECT *
            INTO TABLE gt_kna12_table
            FROM kna1
            FOR ALL ENTRIES IN gt_vbpa2_table
            WHERE kunnr = gt_vbpa2_table-kunnr.
        ENDIF.
        SORT gt_kna12_table BY kunnr.
    Get Sales Group and Desc
        IF display_table_line[] IS NOT INITIAL.
          CLEAR: gt_knvv_table.
          SELECT *
            INTO TABLE gt_knvv_table
            FROM knvv
            FOR ALL ENTRIES IN display_table_line
            WHERE kunnr = display_table_line-bill_to  AND
                  vkorg = display_table_line-vkorg    AND
                  vtweg = '01'.
          SORT gt_knvv_table BY kunnr vkorg vtweg.
          IF gt_knvv_table[] IS NOT INITIAL.
            CLEAR: gt_tvgrt_table.
            SELECT *
              INTO TABLE gt_tvgrt_table
              FROM tvgrt
              FOR ALL ENTRIES IN gt_knvv_table
              WHERE vkgrp = gt_knvv_table-vkgrp AND
                    spras = sy-langu.
          ENDIF.
          SORT gt_tvgrt_table BY vkgrp spras.
        ENDIF.
    Get Order Status for the line items in the sales orders
        IF display_table_line[] IS NOT INITIAL.
          CLEAR: gt_vbup_table.
          SELECT *
            INTO TABLE gt_vbup_table
            FROM vbup
            FOR ALL ENTRIES IN display_table_line
            WHERE vbeln = display_table_line-aubel AND
                  posnr = display_table_line-posnr.
        ENDIF.
        SORT gt_vbup_table BY vbeln posnr.
        IF gt_vbup_table[] IS NOT INITIAL.
          CLEAR: gt_tvbst_table.
          SELECT *
            INTO TABLE gt_tvbst_table
            FROM tvbst
            FOR ALL ENTRIES IN gt_vbup_table
            WHERE spras = sy-langu AND
                  tbnam = 'VBUP'   AND
                  fdnam = 'GBSTA'  AND
                  statu = gt_vbup_table-gbsta.
        ENDIF.
        SORT gt_tvbst_table BY spras tbnam fdnam statu.
    Get Blocked Reason Text for Billing and Delivery Block
        IF display_table_line[] IS NOT INITIAL.
          CLEAR: gt_tvfst_table.
          SELECT *
            INTO TABLE gt_tvfst_table
            FROM tvfst
            FOR ALL ENTRIES IN display_table_line
            WHERE spras = sy-langu AND
                  faksp = display_table_line-faksk.
        ENDIF.
        SORT gt_tvfst_table BY spras faksp.
        IF display_table_line[] IS NOT INITIAL.
          CLEAR: gt_tvlst_table.
          SELECT *
            INTO TABLE gt_tvlst_table
            FROM tvlst
            FOR ALL ENTRIES IN display_table_line
            WHERE spras = sy-langu AND
                  lifsp = display_table_line-lifsk.
        ENDIF.
        SORT gt_tvlst_table BY spras lifsp.
        SORT display_table_line BY vbeln aubel posnr matnr.
        DELETE ADJACENT DUPLICATES
          FROM display_table_line
          COMPARING aubel posnr matnr .
        LOOP AT display_table_line INTO display_table_line.
          gv_index = sy-tabix.
      Get the Purchase Order Number, Sales District and Desc
          READ TABLE gt_vbkd_table
            INTO gt_vbkd_table_line
            WITH KEY vbeln = display_table_line-aubel
            BINARY SEARCH.
          IF sy-subrc = 0.
            display_table_line-bstkd = gt_vbkd_table_line-bstkd.
            display_table_line-bzirk = gt_vbkd_table_line-bzirk.
            READ TABLE gt_t171t_table
              INTO gt_t171t_table_line
              WITH KEY bzirk = gt_vbkd_table_line-bzirk
              BINARY SEARCH.
            IF sy-subrc = 0.
              display_table_line-bztxt = gt_t171t_table_line-bztxt.
            ENDIF.
          ENDIF.
      Get Ship To Account
          READ TABLE gt_vbpa_table
            INTO gt_vbpa_table_line
            WITH KEY vbeln = display_table_line-aubel
                     parvw = 'WE'
            BINARY SEARCH.
          IF sy-subrc = 0.
            display_table_line-ship_to = gt_vbpa_table_line-kunnr.
          ENDIF.
    Get Ship To Name and City
          READ TABLE gt_kna1_table
            INTO gt_kna1_table_line
            WITH KEY kunnr = display_table_line-ship_to
            BINARY SEARCH.
          IF sy-subrc = 0.
            display_table_line-ship_to_name = gt_kna1_table_line-name1.
            display_table_line-ship_to_city = gt_kna1_table_line-ort01.
          ENDIF.
    Get Ship To Salesman Number
          READ TABLE gt_vbpa2_table
            INTO gt_vbpa2_table_line
            WITH KEY vbeln = display_table_line-aubel
                     parvw = 'ZS'
            BINARY SEARCH.
          IF sy-subrc = 0.
            display_table_line-salesrep = gt_vbpa2_table_line-kunnr.
          ENDIF.
    Get Ship To Salesman
          READ TABLE gt_kna12_table
            INTO gt_kna12_table_line
            WITH KEY kunnr = display_table_line-salesrep
            BINARY SEARCH.
          IF sy-subrc = 0.
            display_table_line-ship_to_srep = gt_kna12_table_line-name1.
          ENDIF.
    Get Sales Group and Desc
          READ TABLE gt_knvv_table
            INTO gt_knvv_table_line
            WITH KEY kunnr = display_table_line-bill_to
                     vkorg = display_table_line-vkorg
                     vtweg = '01'
            BINARY SEARCH.
          IF sy-subrc = 0.
            display_table_line-vkgrp = gt_knvv_table_line-vkgrp.
            READ TABLE gt_tvgrt_table
              INTO gt_tvgrt_table_line
              WITH KEY vkgrp = gt_knvv_table_line-vkgrp
                       spras = sy-langu
              BINARY SEARCH.
            IF sy-subrc = 0.
              display_table_line-bezei = gt_tvgrt_table_line-bezei.
            ENDIF.
          ENDIF.
    Get Order Status for the line items in the sales orders
          READ TABLE gt_vbup_table
            INTO gt_vbup_table_line
            WITH KEY vbeln =  display_table_line-aubel
                     posnr =  display_table_line-posnr
            BINARY SEARCH.
          IF sy-subrc = 0.
            display_table_line-gbsta = gt_vbup_table_line-gbsta.
          ENDIF.
          READ TABLE gt_tvbst_table
            INTO gt_tvbst_table_line
            WITH KEY spras = sy-langu
                     tbnam = 'VBUP'
                     fdnam = 'GBSTA'
                     statu = display_table_line-gbsta
            BINARY SEARCH.
          IF sy-subrc = 0.
            display_table_line-status = gt_tvbst_table_line-bezei.
          ENDIF.
    Get Blocked Reason Text for Billing and Delivery Block
          READ TABLE gt_tvfst_table
            INTO gt_tvfst_table_line
            WITH KEY spras = sy-langu
                     faksp = display_table_line-faksk
            BINARY SEARCH.
          IF sy-subrc = 0.
            display_table_line-fakskt = gt_tvfst_table_line-vtext.
          ENDIF.
         SELECT SINGLE vtext INTO display_table_line-lifskt
          READ TABLE gt_tvlst_table
            INTO gt_tvlst_table_line
            WITH KEY spras = sy-langu
                     lifsp = display_table_line-lifsk
            BINARY SEARCH.
          IF sy-subrc = 0.
            display_table_line-lifskt = gt_tvlst_table_line-vtext.
          ENDIF.
    Get Total Net and Total Gross Invoice Amount
          display_table_line-brtwr = display_table_line-kzwi1 -
                                     display_table_line-kzwi2 -
                                     display_table_line-kzwi3 -
                                     display_table_line-kzwi4 -
                                     display_table_line-kzwi5.
    Calculate Discount
          display_table_line-disc = display_table_line-kzwi2 +
                                    display_table_line-kzwi4.
         Unit Price and cost.
          IF display_table_line-kwmeng NE 0.
            display_table_line-unit_price = display_table_line-brtwr /
                                            display_table_line-kwmeng.
            display_table_line-wavwr = display_table_line-wavwr /
                                       display_table_line-kwmeng.
          ELSE.
            display_table_line-wavwr = 0.
          ENDIF.
        Calculate the GPM percentage.
          IF display_table_line-unit_price NE 0.
            display_table_line-gpm_perc = ( ( display_table_line-unit_price -
                                              display_table_line-wavwr ) /
                                              display_table_line-unit_price ) * 100.
          ENDIF.
        Update the internal table.
          SHIFT display_table_line-matnr   LEFT DELETING LEADING '0'.
          SHIFT display_table_line-bill_to LEFT DELETING LEADING '0'.
          SHIFT display_table_line-ship_to LEFT DELETING LEADING '0'.
          SHIFT display_table_line-vbeln   LEFT DELETING LEADING '0'.
          SHIFT display_table_line-aubel   LEFT DELETING LEADING '0'.
          WRITE display_table_line-vdatu   TO   display_table_line-vdatu_char MM/DD/YYYY.
          MODIFY display_table_line
            INDEX gv_index
            FROM display_table_line
            TRANSPORTING vbeln      aubel        bzirk        bztxt
                         bill_to    ship_to      ship_to_name ship_to_city
                         salesrep   ship_to_srep vkgrp        bezei
                         bstkd      gbsta        status       fakskt
                         lifskt     matnr        vdatu        brtwr
                         disc       unit_price   wavwr        gpm_perc
                         vdatu_char.
          CLEAR: display_table_line, tvbst_wa.
        ENDLOOP.
        IF  s_vkgrp[] IS NOT INITIAL.
          DELETE display_table_line WHERE vkgrp NOT IN s_vkgrp.
        ENDIF.
        IF  s_bzirk[] IS NOT INITIAL.
          DELETE display_table_line WHERE bzirk NOT IN s_bzirk.
        ENDIF.
        IF s_srep[] IS NOT INITIAL.
          DELETE display_table_line WHERE salesrep NOT IN s_srep.
        ENDIF.
        SORT display_table_line BY vkorg vkgrp ship_to_srep bill_to.
        DELETE display_table_line WHERE aubel = ' '.
      ENDMETHOD.                    "read_main_data
      METHOD display_report.
        CALL METHOD alv_class->set_table_for_first_display
       EXPORTING
         I_BUFFER_ACTIVE               =
         I_BYPASSING_BUFFER            =
         I_CONSISTENCY_CHECK           =
         I_STRUCTURE_NAME              =
         IS_VARIANT                    =
         I_SAVE                        =
         I_DEFAULT                     = 'X'
         is_layout                     = gv_layout
         IS_PRINT                      =
         IT_SPECIAL_GROUPS             =
         IT_TOOLBAR_EXCLUDING          =
         IT_HYPERLINK                  =
         IT_ALV_GRAPHICS               =
         IT_EXCEPT_QINFO               =
         IR_SALV_ADAPTER               =
         CHANGING
           it_outtab                     = display_table_line[]
           it_fieldcatalog               = gt_field_cat
         IT_SORT                       =
         IT_FILTER                     =
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          OTHERS                        = 4
        IF sy-subrc <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ENDMETHOD.                    "display_report
    Thanks in Advance,
    Ramana Prasad.T

    Hi Janakiraman,
    unfortunately we don't have an upload storage here in the SDN. At this point we have two options:
    a) you could upload the screenshots to a website that provides storage and then you can paste the url to the screenshots here
    b) we can route this through our support channel. You can send a message to our support team in the <a href="http://service.sap.com/smb/sbo/support">SAP Business One Support Center</a> in our <a href="http://service.sap.com/smb/sbo">SAP PartnerEdge Portal</a>.
    Please use the method that works best for you.
    Thanks,
    Torsten

  • Problem when trying to print standart invoice crystal report for SAP

    Hi All, I have the following problem when trying to print a system invoice report in crystal reports for SAP
    I pass params and load the report using this code
    Private Sub DisplayThreadReportSeq()
    Dim oView As New frmViewReport
    Dim strReportPath As String = ""
    Dim strParamName As String = ""
    Try
    Dim CR As New ReportDocument
    CR.Load(oReport.CrstPath)
    ' Declare the parameter related objects.
    SetReportValues(CR)
    Dim crParameterDiscreteValue As ParameterDiscreteValue
    Dim crParameterFieldDefinitions As ParameterFieldDefinitions
    Dim crParameterFieldLocation As ParameterFieldDefinition
    Dim crParameterValues As ParameterValues
    ' Get the report's parameters collection.
    For Each oPar As cslParam In oReport.Params
    crParameterFieldDefinitions = CR.DataDefinition.ParameterFields
    crParameterFieldLocation = crParameterFieldDefinitions.Item(oPar.ParName)
    crParameterValues = crParameterFieldLocation.CurrentValues
    crParameterDiscreteValue = New CrystalDecisions.Shared.ParameterDiscreteValue
    crParameterDiscreteValue.Value = oPar.Value
    crParameterValues.Add(crParameterDiscreteValue)
    crParameterFieldLocation.ApplyCurrentValues(crParameterValues)
    Next
    If pPrint Then
    If oReport.Printer "" Then
    CR.PrintOptions.PrinterName = oReport.Printer
    End If
    CR.PrintToPrinter(IIf(oReport.Copies = "", 1, oReport.Copies), False, 0, 0)
    SBO_Application.StatusBar.SetText("Printed Document Successfully", SAPbouiCOM.BoMessageTime.bmt_Medium, SAPbouiCOM.BoStatusBarMessageType.smt_Success)
    Else
    oView.Text = pReport
    oView.TopMost = True
    oView.Viewer.ReportSource = CR
    oView.Hide()
    oView.ShowDialog()
    End If
    Catch ex As Exception
    Util_GenErrorLog("DisplayReport", ex)
    End Try
    End Sub
    This code works fine when the report invoke to print is developed in crystal reports version for .net 2008 or .net 2005
    when trying to print a report standart getting from SAP BO 8.8.1 using this code I getting the following error:
    Error in File C:UsersecombaAppDataLocalTemp5ARInvoiceStandartSap {300B9A68-DF05-4D7B-8F3B-1670A4493BEE}.rpt:
    Error in formula .
    'Shared numberVar SectionTotalMaxHeght;
    A number, currency amount, boolean, date, time, date-time, or string is expected here.
    This report is the standart report that SAP 8.8.1 includes and works fine on SAP.
    I referenced this dlls CrystalDecisions.CrystalReports.Engine.dll, CrystalDecisions.CrystalReports.Shared, version 10.2.3600
    How I can get these dll´s version for Crystal Report 2008 for SAP Business one or How I can solve this problem
    thanks in advance,
    Ezequiel.

    Hi Ezequiel,
    You can try to search in SAP Business One Reporting & Printing forum section or post there.
    nd.Q

  • Delivry Challan/Proforma Invoice and Actual A/R Invoice Number sud b same

    Hi.. Experts , Please read the following scenario :
    my client wants to send the proforma Invoice to his customer at the time of delivery. He does not want to punch actual A/R Invoice at this stage reason some time his delivery gets rejected due to some reason. So he wants to be at safer side.
    When the send goods is successfully delivered only then he wants to punch actual A/R invoice in the system with the same number of Proforma Invoice.
    Solution I have given :
    What I have done, I have prepared one more PLD named Proforma Invoice based on the Delivery document.  the Number of this Proforma Invoice is based on manually entry number. when the goods is successfully delivered to the customer, Actual A/R Invoice with same Number (Proforma Invoice number) manually entered.
    Please let me know whether this solution is suitable or not..
    Regards
    Rakhi

    Hi  Joseph
    No there is no issue in document Number but I feel it would be bit tough to maintain document number manually in future because here I I have to punch A/R Invoice Number manully with the number of Proforma Invoice (delivery Document Number).
    Lets say during delivery , the proforma Invoice number i punch is  3000 but this document number is not available for A/R Invoice. then how I will maintain this situtation ?
    Regards
    Rakhi

  • [Microsoft][SQL Server Native Client 11.0][SQL Server]The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.  'Items' (OITM) (OITM)

    Dear Experts,
    i am getting the below error when i was giving * (Star) to view all the items in DB
    [Microsoft][SQL Server Native Client 11.0][SQL Server]The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.  'Items' (OITM) (OITM)
    As i was searching individually it is working fine
    can any one help me how to find this..
    Regards,
    Meghanath.S

    Dear Nithi Anandham,
    i am not having any query while finding all the items in item master data i am giving find mode and in item code i was trying to type *(Star) and enter while typing enter the above issue i was facing..
    Regards,
    Meghanath

  • Error in SQL Query The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator. for the query

    hi Experts,
    while running SQL Query i am getting an error as
    The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator. for the query
    select  T1. Dscription,T1.docEntry,T1.Quantity,T1.Price ,
    T2.LineText
    from OQUT T0  INNER JOIN QUT1 T1 ON T0.DocEntry = T1.DocEntry INNER JOIN
    QUT10 T2 ON T1.DocEntry = T2.DocEntry where T1.DocEntry='590'
    group by  T1. Dscription,T1.docEntry,T1.Quantity,T1.Price
    ,T2.LineText
    how to resolve the issue

    Dear Meghanath,
    Please use the following query, Hope your purpose will serve.
    select  T1. Dscription,T1.docEntry,T1.Quantity,T1.Price ,
    CAST(T2.LineText as nvarchar (MAX))[LineText]
    from OQUT T0  INNER JOIN QUT1 T1 ON T0.DocEntry = T1.DocEntry LEFT OUTER JOIN
    QUT10 T2 ON T1.DocEntry = T2.DocEntry --where T1.DocEntry='590'
    group by  T1. Dscription,T1.docEntry,T1.Quantity,T1.Price
    ,CAST(T2.LineText as nvarchar (MAX))
    Regards,
    Amit

Maybe you are looking for

  • Unable to see Hyperion FR reports in PDF view.

    Hi All, We are using Hyperion 11.1.1.3 version .User can able to open the report in HTML view but not in PDF View.When users try to open the report in PDF view ,found that PDF view grayed out(disabled).we tried to change the file preference-->preview

  • How do I place text on a ScatterGraph and have an arrow point to a data point on a plot?

    For example, show the minimum point with the string "MIN" and draw an arrow from the text to the minimum point. I am using Measurement Studio 7.0 with C#. This could be accomplished in MS 6.0 with annotations.

  • After effects CS6

    why dose my after effects CS6 crash

  • Processor glitch

    Is a simple question. I have a KT3 Ultra2 series mb with a via kt333 chip series. I am running an Athlon xp2400 cpu on Windows XP. The infoview reports the processor to be only an xp1800+. How and where do i fix this??????? (I am bios friendly) thanx

  • Save as keynote '08 problem

    Hi since a couple of weeks my KN9 presentations saved in KN8 don't open anymore nor on my KN8 neither on those of my colleagues. The message just says: can't open the xxx.key file I need to save presentations created in KN9 into KN8 to share them wit