Compare values in detail block
Hi everyone,
I have a detailed block which has many records. What's the best way to loop though the detail records and compare the values in the same field in the next, previous record or all detail records.
Thanks for your help.
For example, in field A you can only add a record where the value in field A is
ABC. for this master record.Ok, it sounds like you want a field (field A) to be the link between the master and detail records, which is a common situation. Forms will handle this for you if you use a relationship between the master and detail blocks - the value of the link field in the master will be put into the detail block automatically.
I would like to look at record 3 value in field A (CBA) and compare it to record 1 and 2.Now I'm confused. Do you have a master record or will you simply be setting field A to the same value for every record? If so then why display the field on each row? You could have a single field at the top of the form and populate each row before inserting it. Is it possible to have a mix of values in field A after querying the records? If so then how do you decide what value should be used for new records?
Similar Messages
-
How to query the master block based on one of the values in detail block
Hi,
In version 6i forms, I have a field in data block which is not set as a database item. I am using that field to store a value from detail block. If I want to query the form using that field (which represents one of the values from detail block), how do I do that? Any pointers?
TIA,Do you want to query a master, which contains a specific detail? If so, here's an example how you could do it with a PRE-QUERY-trigger:
DECLARE
vcQuery VARCHAR2(4000);
BEGIN
IF :MASTERBLOCK.THE_DETAIL_SEARCH_ITEM IS NOT NULL THEN
-- Build up an exists Sub-Query
vcQuery:=' MASTERBLOCKID IN (SELECT FK_TO_MASTERBLOCK FROM DETAILTABLE WHERE DETAIL_COLUMN=''' || :MASTERBLOCK.THE_DETAIL_SEARCH_ITEM|| ''')';
END IF;
SET_BLOCK_PROPERTY('MASTERBLOCK', DEFAULT_WHERE, vcQuery);
END; -
Unable to see the values in detail block
Hello,
I have a master detail block, when I query the form, I am unable to see the values for a particular field(Column), all other columns appear properly in the details block, Upon checking the same table(s) in SQL ( by using the JOIN defined in the where clause of the relationship in Forms) , it shows the relevant records for all fields. So what could be wrong with the Form, please advise.
Thanks
FMIQ wrote:
I have just checked the field its a non-database field which is being used as a LOV column to display a value derived from LOV. How do I make this populate at Query time, as obviously this works when the Form is in a insert mode but not for Query mode. How to make it work for Query ? As it for LOV column and non-database filed, ignore my first suggestion.
Does your non-database filed has associate any column ?
For example, you have SUPPLIER_ID (database column) and SUPPLIER_NAME (non-database column). SUPPLIER_NAME has LOV column. And when selecting supplier name from LOV value also assign at supplier_id.
Now to show supplier name when querying, you have to write POST-CHANGE trigger at supplier_id. like
SELECT ASSC_CODE INTO :MST_SUPPLIER.ACC_CODE
FROM ACC_SUB_SUB_CONTROL
WHERE ASSC_ID=:MST_SUPPLIER.SUPP_ASSC_ID;Hope this helps -
Searching master block based on value in detail block
I have two blocks on a form. A master block for purchase orders and a detail block for the line items. I need to provide users with the ability to search the purchase orders based on the values entered into the detail block (line items), during the query entry. I am considering to check to see which block the cursor resides by using the :SYSTEM.CURSOR_BLOCK variable, then retrieving the value from the current item and running a query, using that query. The problem is that I am not very familiar with Forms and do not know how to implement my idea. Any ideas?
nullI copied you an example from metalink. Hope it will help.
Doc ID:
Note:109583.1
Subject:
How to query a Master record from a Detail Block
Type:
BULLETIN
Status:
REVIEWED
Content Type:
TEXT/PLAIN
Creation Date:
22-MAY-2000
Last Revision Date:
03-AUG-2001
PURPOSE
------- To query a master record from a detail record. DESCRIPTION
=========== The user would like to enter a query criteria in the detail block
and then query the master record based on the above user input. SOLUTION
======== Create the master and detail blocks and the relationship in the usual
manner. We will consider here the blocks DEPT and EMP based on the
SCOTT schema. 1. Create a KEY-ENTQRY trigger at the block level of the detail block
(EMP) and add the following code in it : GO_BLOCK('dept');
CLEAR_BLOCK(no_commit);
GO_BLOCK('emp');
ENTER_QUERY; 2. Create a KEY-EXEQRY trigger for the detail block and add
this : EXECUTE_QUERY;
:global.deptno := :emp.deptno;
:global.flag := 'T';
GO_BLOCK('dept'); This will store the value of the deptno (primary key) in a global variable
:global.deptno and set another global variable :global.flag to 'T'. This
will be explained as we progress. 3. Create a WHEN-NEW-RECORD-INSTANCE trigger for the detail block
and add the following : -- This is used to populate the MASTER block with the corresponding
-- record whenever the user navigates through all the records in the
-- DETAIL block if get_record_property(:system.cursor_record,:system.cursor_block,status) = 'QUERY' then
SELECT rowid,deptno,dname,loc
INTO :dept.rowid,:dept.deptno,:dept.dname,:dept.loc
FROM dept
WHERE deptno = :emp.deptno; -- This is to set the status of the record populated
-- to QUERY and not to create a new record SET_RECORD_PROPERTY(1,'dept',status,QUERY_STATUS);
end if; 4. Create a WHEN-NEW-BLOCK-INSTANCE trigger for the master block again
and add this : if :global.flag = 'T' then -- set the variable to a different value
:global.flag := 'F';
:dept.deptno := :global.deptno; -- This will query the master table for the record based on the
-- deptno of the detail table which is stored in :global.deptno -- For ex: if an employee of department 10 has been queried in
-- the detail, then the global.deptno will have the value 10,
-- which is used in the query below to fetch the master record. SELECT rowid,deptno,dname,loc
INTO :dept.rowid,:dept.deptno,:dept.dname,:dept.loc
FROM dept
WHERE deptno = :global.deptno;
set_record_property(:system.cursor_record,'dept',status,QUERY_STATUS);
GO_BLOCK('emp'); end if; EXPLANATION
=========== Actually in the above method we are using the base table blocks as a
non-base table block when we query the master from detail. We are
displaying the master record fetched from the table based on
the query supplied in the detail. So after the fetch, if we clear the
block or form then we get a "Do you want to save the changes you have made"
alert. So in order to supress this while entering a normal master-detail
query, we have created the global variable, :global.flag. There is a limitation though, if you query detail records and then
navigate to the master block and then press the down arrow( i.e.,
navigate to the next record) and then presses the up arrow to
navigate back to the same record, then the detail records that
were originally populated will change and a new set of records will
get displayed. This is because the normal master-detail query is
taking place during MASTER record navigation. This can be controlled by creating a flag (global variable) and setting
its value and thus preventing the user from navigating to the next master
record. Do the following : 1) In the KEY-EXEQRY trigger of the detail add the following :global.control_master := 1; 2) Create a KEY-EXEQRY for the master and add this : :global.control_master := 0;
EXECUTE_QUERY; 3) Create a KEY-DOWN in the master with the following in it: IF :global.control_master <> 1 THEN
down;
END IF; Declare all the global variables before running the Form. RELATED DOCUMENTS
Note:611.1 -
How to validate non commited items in detail block.
Hi All,
I have a Detail block with 10 rows and 2 columns. the select of items is based on LOV. If i select One item in one row, then the user cannot select the same item again in other rows. either I need to not show the selected item in LOV or I need to raise form trigger failure and ask him to change values. This is to be done before commiting the items. Can anyone, please suggest me some way or triggers I can use.
Thank you.If the process is done by a key-commit trigger or a when button-pressed trigger then it is simple . But if there is no such trigger then you should create it because it is more convenient to make controls inside key-commit rather than in pre-update or pre-insert because these triggers do not accept restricted built-ins.
To validate your items just loop through the list of records and compare the values to the one you are on. Then if there are no match then you go to the next record to search for.
Something like this :
declare
v_current_value_to_compare varchar2(100);
v_record pls_integer;
begin
go_block('detail_block_name');
first_record;
while :system.last_record = 'FALSE' loop
loop
next_record;
v_current_value_to_compare := :detail_block_name.item_name;
v_record := :system.trigger_record;
if :detail_block_name.item_name = v_current_value_to_compare then
-- make your control here
end if;
exit when :system.last_record = 'TRUE';
end loop;
go_record(v_record);
end loop;
end; -
How to display data in detail block from a table.
Dear members,
i have 2 blocks. 1 is master block and another is detail block with multiple records.
the requirement is when i navigate to the detail block the data from a table is displayed in it. using a where clause depend on the value in an item in the master block.
i wrote the following code and tried in when-new-block-instance, when-new-record-instance, pre-block and post-block
but...
DECLARE
CURSOR ITEM_CUR IS
SELECT ITEM_ID, QTY_APPROVED
FROM IN_REQUEST_FORM_DETAIL
WHERE RF_MASTER_ID = :IN_MASTER_PO.RF_ID;
BEGIN
FOR ITEM_REC IN ITEM_CUR LOOP
:IN_PO_DETAIL.ITEM_ID := ITEM_REC.ITEM_ID;
:IN_PO_DETAIL.DIS_APPROVED_QTY := ITEM_REC.QTY_APPROVED;
NEXT_RECORD;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
MESSAGE ('THERE IS NO REQUESTS');
END;thanks dear simon,
i want to display the data from a table not included in this form. and these two tables are connected via a relation.
i have the following tables.
in_master_po
PO_ID pk
PO_DATE
RF_DETAIL_ID fk (in_request_form_detail)
in_po_detail
DETAIL_PO_ID pk
ITEM_ID fk
PO_ID fk (in_master_po)
QTY
the above 2 tables are datablocks connected via relation
the following is the from which i want to bring the data to display
in_request_form_detail
RF_DETAIL_ID pk
ITEM_ID fk (items)
QTY_REQ
i tried my code on the sample tables with scott/tiger there it works good.
thanks
Muhammad Nadeem -
Recommended best practice to fetch detail block based on procedure
HI
I am creating a detail block (Dept)based on procedure which will be populated from the value from master block 'Emp'.
For example,
Detail block 'Dept' will be populated by calling procedure populate_detail(:emp.empno in number,dept.deptno out number) .
But what are the triggers I need to call to populate detail block and at which level?
I was thinking to call a WHEN-MOUSE-DOUBLECLICK on master block 'Emp' level to populate the detail block 'Dept' by calling the procedure and passing emp.empno as the parameter whenever the user moves from one master record to another.
Please advise.
Thanks in advance.Download the forms 6i examples CD from the OTN website
-
How to get number of lines entered in detail block
Hi ,
Below is my requirement, I am calling custom form from standard RCV transactions form.
Below are parameters : PO NUMBER, RCPT NUM, QTY. These values will be passed from standard form to custom form and these values will be stored at header level in my custom form.
Based on the Quantity, I have to validate my detail block. For eg. If my quantiry is 10, my detail block items should not less or greater than 10.
Can any one please suggest me how to achieve this. I tried SYSTEM.TRIGGER current record etc,. I am getting below issue. If I place my cursor on any other record rather than last record it is throwing error. SO any experts please help here.
Thanks,You can use a calulated item of type summary for this. set the following propertie for a newly created item in your detail block
-Summary type=Summary
-Summary function=Count
-Summarized block=your detail block
-summarized item=any Required item in your detail block
Now you can check the number of records with that item. -
To get value in detail part of master detail form
hi all
i am using forms 6i
there is a master detail form
in the master part
i am just mentioning one field as per the requiremnt
FIELD BELONGS TO DATA BLOCK XXNP_JL_001.FIELD
this FIELD field is populated by a flexfield NAP_GL_WELL
VALUES are
abc 123
def 456
fgh 875
in the master part of the form there is also a button called POPULATE which populates values for the fields in the detail form
in the detail part of the form
i am mentioning two fields
item_number belongs to data block XXNP_JL_EST_002 and opn_value belongs to data block XXNP_JL_RES_005
now the requiremnt is as follows
say the WELL field has a value 'abc'
then in the detail part
whenever and only when the item_number is '1010103002' the opn_value field should have value 123
similarly when the WELL field has a value 'def'
in the detail part
when the item_number is '1010103002' the opn_value field should display value '456'kindly guide on how this can be achieved
thanking in advance
i did a when validate trigger on opn_value field
BEGIN
IF :XXNP_JL_RES_005.OPN_UOM_CODE='PKU' and :XXNP_JL_EST_002.ITEM_NUMBER='1010103002' THEN
SELECT hierarchy_level
INTO :XXNP_JL_RES_005.OPN_VALUE
FROM fnd_flex_values
WHERE flex_value_set_id = 1009757
AND FLEX_VALUE=:XXNP_JL_001.FIELD ;
END IF;
END;Edited by: makdutakdu on Jul 4, 2012 12:40 PM
Edited by: makdutakdu on Jul 4, 2012 1:05 PM
Edited by: makdutakdu on Jul 4, 2012 1:09 PMHI
If i understood your question on overview, your requirement is
get master details in details column.
If this is correct,
YOu can write a simple plsql to get master value in details columne thru trigger
If my understanding is not correct, please tell me -
Master-detail Block save behaviour
Hi,
I have master detail block just consider Forms A as a master and Forms B as a Detail,when my cursor is in form A i try to save the record, it is saved Form A and putting Form B data as null, i have to put a validation to stop this activity, i have to inform the user "Provide values for form B text item",
I created a post block trigger in form A
Begin
If (:FORM-B.TEXT1 is nul)l or( :FORM-B.TEXT2 is null)
then
Message( 'provide value for FORM-B');
Message( 'provide value for FORM-B');
raise form_trigger_failure;
ELSE
NULL;
END IF
END;
Im Getting error message and navigation got stopped in last item of form A, please advice me which trigger i have to use for this.
Thanks and regards
karthikHi
Getting error message what is the error message ?
to inform the user "Provide values for form B text item", Pls try to use WHEN-CREATE-RECORD or WHEN-validate-RECORD Trigger instead
Besides raise form_trigger_failure;
stops the navigation
or to inform user and stop saving
u can use pre-commit Trigger the raise form_trigger_failure;
will stop saving...
Regards
Abdetu...
Edited by: Abdetu on Feb 5, 2011 9:33 AM -
How to validate that only one check box is checked in detail block
Hi All,
I am using oracle Forms 10G on windows.
I need help on how to validate that only one check box is checked in detail block. I have multiple records in the detail block and I have check boxes for each record in the detail block.
I have a button to select the values from the detail records where the check box is checked. But I want to make sure that only one record is check not more than one.
How do I validate this on a push button trigger?
ThanksWhen I've done this kind of thing, I create a Form level variable of TYPE number and then add or subtract to this variable as I check and uncheck the checkboxes. If the value of the variable is 1, then you know that only one checkbox is selected. If the value is greater than 1, then you know the user has selected more than one check box. You could also add code to your When-Checkbox-Changed trigger to test the variable and instruct the user to un-check selected record before selecing a new record.
With respect to the Form level variable, you can use a GLOBAL, PARAMETER or Program Unit package specification. I prefer to use the PU Package Spec as this method has a smaller memory footprint. For example, in the Program Unit node of the object navigator create the following;
/* Form variables package spec */
PACKAGE Form_Vars IS
CheckBox_Cnt NUMBER := 0;
END;Now in your When-Checkbox-Changed trigger...
BEGIN
IF ( Form_Vars.CheckBox_Cnt = 0 ) THEN
Form_Vars.CheckBox_Cnt := Form_Vars.CheckBox_Cnt + 1;
ELSE
/* it's assumed the value is greater than 0 */
Message('Please uncheck selec ted record before choosing a new record.');
RAISE Form_Trigger_Failure;
END IF;
END;Hope this helps,
Craig B-)
If someone's response is helpful or correct, please mark it accordingly.
Edited by: CraigB on Feb 3, 2011 10:15 AM -
How to validate date between Header and Detail Block..
Hi All,
I was trying to find a way where, suppose I enter 'from date' and 'to date' in the header block.then in detail block all 'from dates' and 'to dates' should be restricted between the dates entered in the header block.
Thank youOr U Can Simply set in the child item lowest / highest Allowed Value
Invoke Property pallete for child date item and set the following
lowest Allowed Value :header.from_date (must be prefix with :)
Highest Allowed Value :header.to_date
siju.koiply -
Setting check box (in detail block) as (non) updatable...
Hi,
I have a master-detail form. The form does execute a query when it opens. Now, according to a condition i want to do the check box(in detail block) as non- updatable.
I have tried to write the appropriate code in:
WHEN-NEW-RECORD-INSTANCE(in the master block level)
WHEN-NEW-ITEM-INSTANCE (in the detail block level)
POST-QUERY(in the detail block level)
but it does not work 'perfectly'. I mean that in most cases even one of the above triggers does not execute (for example the 'WHEN-NEW-RECORD-INSTANCE' but only after i click on this new record instance. I mean that after this on this new record the condition is estimated....)
or
it does execute but after i click on the checkbox (for example the 'WHEN-NEW-ITEM-INSTANCE').
The code i tried looks like the following:
if :block.item=<condition>
then
set_item_property ('detail_block.chk_box',updatable,property_false);
else
set_item_property ('detail_block.chk_box',updatable,property_true);
end if;I consider to use the WHEN-CHECKBOX-CHANGED trigger and code which looks like:
if <condition>=true
then
/*i set the value of the checkbox as the opposite of what it is just after the click on it...*/
if :detail_block.chk_box=0
then
:detail_block.chk_box=1;
else
:detail_block.chk_box=0;
end if;
set_record_property(currect_record,status,query_status);
set_item_property ('detail_block.chk_box',updatable,property_false);
end if;The truth is that i do not like very much this code, but is there any alternative...???
Note: I use Dev6i with patch 12
Thank you,
SimI build a little testform based on HR-schema-table DEMO_USERS and switch each second record to be not updateable, works without problems (code from POST-QUERY-trigger):
DEFAULT_VALUE('1', 'GLOBAL.SWITCH');
:GLOBAL.SWITCH:=3-:GLOBAL.SWITCH;
IF :GLOBAL.SWITCH=2 THEN
SET_ITEM_INSTANCE_PROPERTY('DEMO_USERS.ADMIN_USER', TO_NUMBER(:SYSTEM.TRIGGER_RECORD), UPDATE_ALLOWED, PROPERTY_TRUE);
ELSE
SET_ITEM_INSTANCE_PROPERTY('DEMO_USERS.ADMIN_USER', TO_NUMBER(:SYSTEM.TRIGGER_RECORD), UPDATE_ALLOWED, PROPERTY_FALSE);
END IF; Edited by: Andreas Weiden on 31.03.2009 21:24 -
Hi,
Please suggest me best way to do it. Create a form with two blocks
1.Master block1 has items client,dc,sku,fromlocation,tolocation which is fetching data
from RFlog table in RFWH schema
2.Second block has items client,dc,sku,location which is fetching data from Inv_detail table in MPROD schema.
These tables are not linked but we can join them using client,dc,sku columns.When click on row in Master
block then corresponding data from Inv_detail table should display in detail block.
When there is value in Fromlocation(tolocation will be Null) then detail should show same location and viceversa tolocation.
problem is there is no way to find in inv_detail which is tolocation or fromlocation.
sample date
Master block
Client Dc Sku fromlocation tolocation
10 ABC Pen 001
10 ABC Pen 002
Detail block
Client DC Sku Location
10 ABC Pen 001
10 ABC Pen 002My approach: Created master data block based on RFlog then created detail data block based on Inv_detail and unchecked auto-join ,created link with client,dc and sku. in detail block where clause used below query
:inv_location.location=:rf_blk.fromlocation
OR :inv_location.location=:rf_blk.tolocationProblem: when ran this form it shows data in all fields of master-data-block and Client,DC,Sku field of detail DB
there is no data in location field. In detail client,dc and sku item proeprty palatte has COPY_value_item = Mblock.client
respectively.
Thanks a lot in advance
sandy
Edited by: sandy162 on Jul 20, 2009 3:53 PMLet me clarify:
Your master block rf_blk and detail block inv_location.
New non-database item location_m added in Master block. This item can be Visible=No and canvas = null (Just don't forget to put formula in this one)
Do not specify any Where Clause in Master block nor in Detail Block.
Manually create relation and specify Join Condition like this:
inv_location.location=rf_blk.location_m
AND inv_location.client=rf_blk.client
AND inv_location.dc=rf_blk.dc
AND inv_location.sku=rf_blk.skuNow you should see that property "Copy value From Item" in inv_location.location is set to rf_blk.location_m, inv_location.client set to copy from rf_blk.client etc. -
Something wrong in detail block
I've defined a WHEN_VALEDATE_ITEM trigger in one item of the main block,if the item's VALUE is '1' then set the property:REQUIRE of the first two columns of the detail block to PROPERTY_TRUE and else set them to PROPERTY_FALSE .
But when I set the item's VALUE to '1',and down to the second row of the detail block without typing angthing in the first two columns of the first row,no error messages appear.
So what's wrong with it,thanks!
PhoenixHow did you set the propertie "defer required enforcement" at form level? Also if the detail records has not been changed then forms probably has nothing to validate for that record.
Maybe you are looking for
-
Dear all, I am doing cost element planning monthly for a cost center through Tcode-KP06. Can anybody know in which table this data will store. Pls let me know the table.. Thanks in Advace.. Regds, Janardhan.
-
InputFile Changes to show Update
I have a form with an inputFile component and a commandImageLink. However when I click the commandImageLink the inputFile (if a file is selected) changes to show "Update". I don't want any of the form to submit when I click on the commandImageLink. I
-
HT5891 os x mavericks and bootcamp for windows 7 64 bit
I am currently running Win 7 64-bit in Bootcamp on my OS X 10.8 and it works great. I am connected via fire wire to my old DELL 2007WFP Display and this is allowing my MacBook Pro Retina to really act as a workstation for Revit/Acad 2014. Questions:
-
http://www.emu.com/support/vista.asp Driver & Firmware update download link: http://www.emu.com/support/files/dow...cy=&Platform=1 MAC drivers & firmware update: http://www.emu.com/support/files/dow...cy=&Platform=2 jutapa
-
MOVED: MSI 275 GTX Lightning, overcklocking procedure
This topic has been moved to Overclockers & Modding Corner. https://forum-en.msi.com/index.php?topic=135506.0