Formula variable type customer exit
Hi all,
Can you explain me how link variable formula processing type customer exit to an infoobject?
Can you give an example of the exit?
Thanks
Gianmarco
Hi Gianmarco,
Here's an example of some CMOD code that converts yesterday's date to the factory date - in this case it refers to Factory Calendar Z1. You'll have to create a formula variable (in this case the technical name of the formula variable is ZVFCYEST) to call the code. I'm not much of an ABAPer so it might not be the most efficient code in the world, but at least it works.....
WHEN 'ZVFCYEST'.
IF i_step = 1. " BEFORE THE POPUP
z_today = sy-datum.
z_yesterday = z_today - 1.
CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
EXPORTING
correct_option = '-'
date = z_yesterday
factory_calendar_id = 'Z1'
IMPORTING
factorydate = z_yestfact.
CLEAR l_s_range.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
l_s_range-low = z_yestfact.
APPEND l_s_range TO e_t_range.
ENDIF.
Hope this helps,
Janet
Similar Messages
-
Formula Variable with customer Exit (ABAP Code)
Hi Experts,
Please advise me wether i am going in the right way to achieve my requirment else please advise me any alternate approach and update me with the abap code for my customer exit as i am not familiar with ABAP.
My Requirment:
Data :
Emp_ID----Start_Date(DATS)---End_Date(DATS)
I had a user entry (intreval) VARIABLE created on Start_Date
User will enter the date intreval he want to analyze...
Ex: 01.01.2008 to 01.02.2008
Now i want to use the No of Days between user entered date intreval in my calculaction of a keyfigure
In the above example it is 31 days
So i created a Formula Variable of Customer Exit now i need a code that will
pass the user entered dates to
FM: FIMA_DAYS_AND_MONTHS_AND_YEARSImport parameters Value
I_DATE_FROM 01.01.2008
I_DATE_TO 01.02.2008
I_FLG_SEPARATE ' '
Export parameters Value
E_DAYS 31
E_MONTHS 1
E_YEARS 1
and need to pass the E_DAYS (31) to the result of formula
User Entry Variable (Intreval) : ZST_VAR
Formula Variable (Customer Exit) : ZND_EXIT
Code
WHEN 'ZND_EXIT'.
DATA: low_date2 TYPE d,
high_date2 TYPE d,
num_days TYPE N,
new_low_date2 TYPE d.
IF i_step = 2.
LOOP AT i_t_var_range INTO ls_varrange WHERE vnam = 'ZST_VAR'.
CLEAR l_s_range.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
ls_varrange-low = low_date2.
ls_varrange-high = high_date2.
CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
EXPORTING
I_DATE_FROM = low_date2
I_DATE_TO = high_date2
I_FLG_SEPARATE = ' '
IMPORTING
E_DAYS = NUM_DAYS
l_s_range = NUM_DAYS.
APPEND l_s_range TO e_t_range.
EXIT.
ENDLOOP.
endif.Hello,
Before the WHEN statement it shoud have a CASE statement. In the user exit coding place your WHEN statement anywhere between CASE...ENDCASE statement.
your code should look like
DATA: low_date2 TYPE d,
high_date2 TYPE d,
num_days TYPE N,
new_low_date2 TYPE d.
Case i_vnam.
WHEN 'ZND_EXIT'.
IF i_step = 2.
LOOP AT i_t_var_range INTO ls_varrange WHERE vnam = 'ZST_VAR'.
CLEAR l_s_range.
l_s_range-sign = 'I'.
l_s_range-opt = 'BT'.
low_date2 = ls_varrange-low.
high_date2 = ls_varrange-high.
CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
EXPORTING
I_DATE_FROM = low_date2
I_DATE_TO = high_date2
I_FLG_SEPARATE = ' '
IMPORTING
E_DAYS = NUM_DAYS
l_s_range-low = NUM_DAYS.
APPEND l_s_range TO e_t_range.
EXIT.
ENDLOOP.
endcase.
Thanks
Chandran -
Formula Variable with customer exit
Hi,
can we use Formula variables with customer exit based on characteristics(ex Bill date)? if yes, can you guys help me on this.
Thanks
kriYes , you can use a formula variable with customer exit based on characteristics .
Depends on the requirement what you want to show in the formula variable ,
Eg : if you want to show the max fiscal year period , in that case :
create a new formula in the keyfigure section of your query , go to edit , you can see formula variable below the keyfigures ,
right click on the same and create new formula variable :
Write the code for the formula varible in the backend as we do for normal customer exit varaible :
for this e.g the code will be :
FORM get_variable_value
tables E_T_RANGE type RSR_T_RANGESID
using I_VNAM type RSZGLOBV-VNAM
I_VARTYP type RSZGLOBV-VARTYP
I_IOBJNM type RSZGLOBV-IOBJNM
I_S_COB_PRO type RSD_S_COB_PRO
I_S_RKB1D type RSR_S_RKB1D
I_PERIV type RRO01_S_RKB1F-PERIV
I_T_VAR_RANGE type RRS0_T_VAR_RANGE
I_STEP type I.
DATA L_S_RANGE LIKE LINE OF E_T_RANGE.
DATA loc_var_range LIKE rrrangeexit.
Data : l_inPer TYPE string.
IF i_step = 1.
Select min( distinct FISCPER )
from /BIC/A(DSO name)
into l_minper .
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
l_s_range-low = l_minper .
APPEND l_s_range TO e_t_range.
endif.
drag the formula variable in the new formula created and exexcute the query , you will be able to see the output .
This is just an example , your code will differ as per your requirement . -
Formula variable in Customer exit
Hi Experts,
I need help.
I create
first Formula variable (Z_OPTSEL) for a user entry, mandatory, ready for input, dimension ID = Number and
second Formula variable (Z_OPT1), customer exit, mandatory, not ready for input, dimension ID = Number .
User Exit code in ZXRSRU01 is :
When 'Z_OPT1'.
case i_step.
when '2'.
clear e_t_range.
read table I_T_VAR_RANGE INTO loc_var_range with key vnam = 'Z_OPTSEL'.
if sy-subrc = 0.
if <b> loc_var_range-low = '1'.</b>
l_s_range-low = '2'.
endif.
if loc_var_range-low = '2'.
l_s_range-low = '0'.
endif.
endif.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
clear l_s_range-high.
APPEND l_s_range TO e_t_range.
endcase.
Unfortunately, I get <u>no value in loc_var_range-low</u> (from Z_OPTSEL) so , I never can fill up Z_OPT1 !! What could I do to fix it ?
Any help would be welcome .
Thanks<FONT FACE = "Tahoma", Font Color = "Blue">
My Dear Friend<br>
<u>Please try the below code:</u><br><br>
Case vnam.<br>
When 'Z_OPT1'.<br>
check i_step = 2.<br>
<br>
read table I_T_VAR_RANGE INTO loc_var_range with key vnam = 'Z_OPTSEL'.<br>
<br>
if sy-subrc = 0.<br>
Clear l_s_range.<br>
if loc_var_range-low = '1'. <br>
l_s_range-low = '2'.<br>
endif.<br>
if loc_var_range-low = '2'.<br>
l_s_range-low = '0'.<br>
endif.<br>
endif.<br>
l_s_range--sign = 'I'.<br>
l_s_range-opt = 'EQ'.<br>
APPEND l_s_range TO e_t_range.<br>
endcase.<br>
<br><br>
Hope it helps.<br><br>
Cheers Abhijit<br>
</FONT><FONT FACE = "Verdana", Font Color = "Red">
Removed
</FONT> -
How to use formula variable in customer exit
Hi all,
I just want to use formula varible in customer exit
For eg,
I have created formula variable with user manual lnput eg: ZFM_V01 = 30
Another char variable with user manual input eg: 0keydate = 28/02/2011
Required output,
I just want to read my ZFM_V01 value in customer exit
Result = 0KEYDATE - ZFM_V01
EG:
result = 28/02/2011 - 30
Required result = 29/01/2011
Kindly guide me how u get formula varibale value into customer exit(CMOD) and find the required result. please help me.
Thanks & Regards,
R. SaravananSorry, Bhanu,Ashwin need more info
As my understand ::
Function module RSW_CURRENCY_TRANSLATION uses the following parameters
Import parameters
I_CTTNM : Currency translation key (optional)
I_AMOUNT: Amount in source currency (not optional !!) (data type: floating point !!)
I_SCUR : Source currency (optional) I_TCUR : Target currency (optional)
I_TIME_IOBJVL : InfoObject for determination of the time reference (optional)
I_SCUR_IOBJVL : InfoObject for determination of the the source currency (p.eg. 0COMP_CODE) (optional)I_TCUR_IOBJVL : InfoObject for determination of the the target currency (p.eg. 0COMP_CODE) (optional)
I_PERIV : Fiscal year variant (optional)
I_RATE : Exchange rate (optional)
Export parameters
E_AMOUNT : Amount in target currency (data type: floating point !!)
E_RATE : Exchange rate
E_SCUR : Source currency
E_TCUR : Target currency
I created a Currency key(ZXX) which takes CAD and converts to GBP on Planned Exchange rate (P) with time reference 0CALMONTH.
In my case :
Currency Key : ZXX (Confused here)
Source Curr :CAD
Target Curr :GBP
I need a Variable ,which takes time reference and gives back the exchange rate .
,,I am I missing some thing ?
Sudh -
Using Formula Variable in Customer Exit variable
Hi,
I want to assign valuees of 2 Formula Variables to one cstomer exit variable based on some Characteristic.
Example. Formula variables are Early and Late. If Early = 3 and Late = 4 , I want to pass value to the Customer Exit variable as Low = 3 and High = 4.
The problem is in I_T_VAR_RANGE there is no value for formula variable in LOW field.
Other variables based on Characteristics have values in this field.
What can I do in this case?
Regards
SSSSSS,
You can restrict your characteristic with two variables in the value range options of restricting.
One can be used as low and the other can be high.
Hope that helps.
Thanks. -
Query variable type Customer Exit problem
Hi All,
I need to set a Profit Center variable value by Customer Exit. My Exit has to results a Profit Center Hierarachy NODE value. The problem is that the Query handles my return value as a single Profit Center (10 char long) but my Profit Center Nodes are longer than 10 characters and they are truncated to 10 chars. Therefore I get an error message, namely 'XYZ... PC is not exists in PC Hierarchy ABC...'
How can I set that the Query or the code to get my result value not as a Profit Center but a Profit Center Hierarchy NODE?
Thanks in Advance,
DezsoHello,
Yes, I have set the right Hierarchy. If I change the PC variable to 'Characteristic variable' and set it on the selection screen everything is OK so the Hierarchy is good.
Thanks,
Dezso -
Node variable in query - Processing type customer exit?
We are on NW 2004S. I created a hierarchy for an info-object along with several nodes and child nodes.
I also created a node variable in a query for this info-object. I have the following questions with regards to using node variables in a query.
1) Can I use a node variable with processing type 'Customer Exit". My objective is to set the value of the node variable in the user exit.
2) If answer to first question is "Yes", how would I code the node value in the user-exit - Example code or some pointers to that effect.
I really appreciate your thoughts on this issue.
Thanks,
SanjayHi Sanjay,
As far as I'm aware this hasn't changed in NW2004s, (in any case it still works), so:
1)Yes you can, no difference with other type variables.
2)In userexit EXIT_SAPLRRS0_001 (include ZXRSRU01).
There's different options depending on at which stage you want to change it:
http://help.sap.com/saphelp_nw2004s/helpdata/en/f1/0a56f5e09411d2acb90000e829fbfe/frameset.htm
If you do a forum search on above technical names I think you'll find plenty of coding samples, but if you want something more specific, I'd be happy to help you out.
Regards,
Pieter -
How to display text variable of type customer exit
Hi to all,
I have created a query in query designer which display sales value according to plant.
There i have also used a variable which will take input from user and restricted on 0CALDAY.
I have also created 2 text variable to display the text for sales based on input in variable.
I need when user enter the 01.02.2010 - 31.12.2010 value in variable , text variable should display SALES FROM 01.02.2010 TO 31.12.2010
i knew how to do that by using text variable of processing type customer exit.
But display of text variable is like SALES FROM 01022010 TO 31122010 ,
But i need that SALES 01.02.2010 TO 31.12.2010
i shall be thankfull to you for this.
Regards
Pavneet Rana
Edited by: pavneet rana on Dec 22, 2010 7:46 AM
Edited by: pavneet rana on Dec 22, 2010 8:03 AMHi,
Give Description on Sales Amount as SALES FROM &ZVAR_YEAR1& TO &ZVAR_YEAR2&.
ZVAR_YEAR1 & ZVAR_YEAR2 are the two text variables. These two variables should NOT be input enabled.
In the Exit - under I_STEP = 2, write the below code.
WHEN 'ZVAR_YEAR1'.
DATA: l_s_range TYPE rs_s_range,
loc_var_range TYPE rrs0_s_var_range.
READ TABLE i_t_var_range INTO loc_var_range WITH KEY vnam = 'ZVAR_INPUT_CALDAY'.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
l_s_range-low = loc_var_range-low.
APPEND l_s_range to e_t_range.
WHEN 'ZVAR_YEAR2'.
DATA: l_s_range TYPE rs_s_range,
loc_var_range TYPE rrs0_s_var_range.
READ TABLE i_t_var_range INTO loc_var_range WITH KEY vnam = 'ZVAR_INPUT_CALDAY'.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
l_s_range-low = loc_var_range-high.
APPEND l_s_range to e_t_range. -
Formula variable with User Exit
Hi,
Can we create a Formula Variable of processing type USER EXIT...which will display a constant Value Y
Any syntax would be helpful
ThanksHi,
check this for formula variables with user exits;
http://wiki.sdn.sap.com/wiki/display/profile/Surendra+Reddy
http://sap.ittoolbox.com/groups/technical-functional/sap-bw/customer-exit-to-derive-formula-variable-to-text-variable-sap-bw-35-3030684
Also Check the issues and solution :
Formula Variable with User Exit....Problem
Thanks
Hemav -
Formula Variable with User Exit....Problem
Hi
My requirment is to create a Formula Variable on User Exit that will give me Current Cal Year...so that i can use that vale in Formulas
Created Formula Variable with processing Type Customer Exit single Value,Mandator and Unchecked the Variable input ready
The below code in CMOD
WHEN 'XXXXXXX'.
Year = sy-datum(4).
CLEAR L_S_RANGE.
L_S_RANGE-LOW = Year.
L_S_RANGE-SIGN = 'I'.
L_S_RANGE-OPT = 'EQ'.
APPEND l_s_range TO e_t_range.
But when i execute the query i am getting the below error
No value could be determined for variable xxxxxxx.
Incorrect call of OLAP layer CL_RSR_OLAP; error in BW-BEX-ET
Diagnosis
This error diagnosis is specific only to the variables 0P_FVAEX or 0P_CTPCA !
Termination message BRAIN 632 appears:
Could not determine value for variable 0P_FVAEX (or 0P_CTPCA).
WHAT WRONG I AM DOING...please update meUse the code:
WHEN 'XXXXXXX'.
IF i_step = 2.
Year = sy-datum(4).
CLEAR L_S_RANGE.
L_S_RANGE-HIGH = Year.
L_S_RANGE-SIGN = 'I'.
L_S_RANGE-OPT = 'EQ'.
APPEND l_s_range TO e_t_range.
ENDIF.
Let me know, if it is work or not!
- Balajee Kannan -
Prob in text variable with customer exit
Hi to all
I am working in PA module in HR ,In my Report i have to count total number of trainee and lateral in given Date range that From date to To Date , Before that i have to calculate a Total Employee Strength before one day of From date , suppose user enter a 1st of April 2007 to 1st of jun 2007 , so Employee strength should be calculated on the 31march 2007, for that i have written custome exit , now i am getting a value also , for Display that date have a created a text variable with customer exit , but i am not able to get that date , it should be display strength as on 31march2007 , instead of it is displaying Strength as on 00.00.0000.I am giving a cod also
ls_range-sign ='I'.
ls_range-opt = 'EQ'.
ls_range-low = 'EB1A'.
append LS_Range to e_t_range.
WHEN 'ZPA_DATE'.
if i_step = 3.
READ TABLE I_T_VAR_RANGE INTO L_S_VAR_RANGE WITH KEY VNAM = 'ZPA_DATE'.
IF SY-SUBRC = 0.
ZTEST = L_S_VAR_RANGE-LOW.
ztest1 = ZTEST - 1.
export p = ztest1 to MEMORY ID 'VALUE'.
ENDIF.
endif.
WHEN 'ZFRMDAT'.
if i_step = 3.
ls_range-sign ='I'.
ls_range-opt = 'EQ'.
ls_range-low = ztest.
append LS_Range to e_t_range.
endif.
when 'ZPA_CDAT'.
if i_step = 3.
ztest1 = ztest - 1.
ls_range-sign ='I'.
ls_range-opt = 'EQ'.
ls_range-low = ztest1.
append LS_Range to e_t_range.
endif.
when 'ZPA_VAR3'.
if i_step = 3.
ztest1 = ztest - 1.
import p = ztest1 from memory id 'VALUE'.
concatenate ztest16(2) ztest14(2) ztest1+0(4) into date separated by '.'.
move date to temp.
move 'Hello' to temp.
ls_range-sign ='I'.
ls_range-opt = 'EQ'.
ls_range-low = temp.
append LS_Range to e_t_range.
endif.
Please help me to come out
ThanksHi Stefania,
to me it looks like your local variable num_mese is not defined with the correct data type.
Try to change
if num_mese = 09 to if num_mese = <b>'</b>09<b>'</b>,
same for 10 -> '10', 11 -> '11'.
If that does not help please let me know your coding where you define the type of num_mese (DATA statement).
Regards
Stephan -
Usage of formula variable with custom table for values
Hi,
I have the following scenario:
a customer wants a report regarding payments of invoices with a formula in it to calculate interest results. In order to do so they want to be able to define a interest rate wich can be used to calculate te result by multiplying the rate by time and amount (for every line in the query the same rate should be used).
As a solution I thought it would be easiest to give the key user access to a custom table via a custom transaction and then use the entered rate in the query by selecting it from this table using a formula variable (using an exit).
I was wondering if anyone has ever used such a solution, or if one thinks this is possible.Hi Brock,
Its possible, but I haven't tried as requirements didn't imply.
More simpler idea is why don't you use a flat file loading through the IP to Info providers?
Or even more better option is why don't you adapt to Virtual Info providers?
For your suggested custom table using custom transaction, we can surely make it. Its possible in SE93. Try this transaction code. It must definitely help.
Thanks,
Arun Bala G
Edited by: Arun Bala G on Jan 11, 2010 2:16 PM -
Text Variable With Customer Exit Logic/ABAP Code
Hi Experts,
Could you please help me with the Logic/Code that i need to use in Calculacting The TEXT Variable Using CUSTOMER EXIT
I had a rolling report in which there are 14 Calculacted Keyfigures (Not Restricted KF),Which are
M-1,M-2,M-3,M-4,M-5........M-14
In MAY2009
M-1 represents (Current Month -1) APR2009
M-2 represents (Current Month -2) MAR2009
M-3 represents (Current Month -3) FEB2009
M-4 represents (Current Month -4) JAN2009
M-5 represents (Current Month -5) DEC2008
M-6 represents (Current Month -6) NOV2008
M-7 represents (Current Month -7) OCT2008
M-13 represents (Current Month -13) APR2008
M-14 represents (Current Month -14) MAR2008
In JUNE2009
M-1 represents (Current Month -1) MAY2009
M-2 represents (Current Month -2) APR2009
M-3 represents (Current Month -3) MAR2009
M-4 represents (Current Month -4) FEB2009
M-5 represents (Current Month -5) JAN2009
M-6 represents (Current Month -6) DEC2008
M-7 represents (Current Month -7) NOV2008
M-13 represents (Current Month -13) MAY2008
M-14 represents (Current Month -14) APR2008
Currently the Description of CKF is named as M-1,M-2..M-14.My requirment is to develop Text Variables that displays the description as MMMYYYYSample code, NO syntax check...!!
CASE i_vnam. " Variablenname
WHEN 'M-1'. "For Variable <M-1>
Data: l_peri type E_BUPER, "Declare variable for Period
l_year type E_GJAHR "Declare variable for year
IF i_step = 2.
DATA l_s_range LIKE LINE OF e_t_range.
CLEAR l_s_range.
CALL FUNCTION 'DATE_TO_PERIOD_CONVERT' " By providing Date this FM gives period and year
EXPORTING
I_DATE = SY-DATUM "System Date
I_PERIV = V3 "Fiscal Variant
IMPORTING
E_BUPER = l_peri "for period is date is today period = 005
E_GJAHR = l_year. "for Year = 2009
l_peri = l_peri - 1. "To reduce 1 from period (005 - 1 = 004)
IF l_peri = '004' "Check value of period.
Concatenate 'APR' l_year into l_s_range-low. "concatenate 'APR' & Year into Low.
l_s_range-sign = 'I'.
l_s_range-opt = 'EQ'.
APPEND l_s_range TO e_t_range.
ENDIF.
For M-2 subtract 2 and repeate same. -
Text Variable With Customer Exit ABAP Code
Hi Experts,
Could you please help me with the Logic/Code that i need to use in Calculacting The TEXT Variable Using CUSTOMER EXIT
I had a rolling report in which there are 14 Calculacted Keyfigures (Not Restricted KF),Which are
M-1,M-2,M-3,M-4,M-5........M-14
My requirment is to get the MMM.YYYY based on Sy Date as a title of the column
In MAY2009
M-1 represents (Current Month -1) APR2009
M-2 represents (Current Month -2) MAR2009
M-3 represents (Current Month -3) FEB2009
M-4 represents (Current Month -4) JAN2009
M-5 represents (Current Month -5) DEC2008
M-6 represents (Current Month -6) NOV2008
M-7 represents (Current Month -7) OCT2008
M-13 represents (Current Month -13) APR2008
M-14 represents (Current Month -14) MAR2008
In JUNE2009
M-1 represents (Current Month -1) MAY2009
M-2 represents (Current Month -2) APR2009
M-3 represents (Current Month -3) MAR2009
M-4 represents (Current Month -4) FEB2009
M-5 represents (Current Month -5) JAN2009
M-6 represents (Current Month -6) DEC2008
M-7 represents (Current Month -7) NOV2008
M-13 represents (Current Month -13) MAY2008
M-14 represents (Current Month -14) APR2008
Currently the Description of CKF is named as M-1,M-2..M-14.My requirment is to develop Text Variables that displays the description as MMMYYYYAmrit I think u72720 wanted to know how to get MMYYYY in the column headings.
this can be achieved using text variable easily.
steps
1. Right click and go to properties and click the button next to description box.
2. Add any existing text var from the list
3. now right click on this var in the desription box and select 'new variable'
4. give var name description
processing type ->replacement path
replace with char-> fiscal period (or calmonth if that is what restricted in your column)
select value as 'Key'
finish creation and use this var in all the selection column headings (remove M-1, M-2 etc)
you will get mmyyyy decriptions for every column depending on month of that column
Maybe you are looking for
-
E-Mail Conflict - Unable to Send Away from Home
I purchased a new Q10 (Model #SQN100-1) International Version phone in February 2015. The software version I am working on is 10.3.2.440 which was downloaded when received from BB. The e-mail service provider is Cogeco and the wireless service prov
-
CRMD_ORDER - Doc Flow is showing business obj code instead of description
Dear Friends, I am using CRM 2007. I have created service contract in CRMD_ORDER transaction code (contract no.5000031). Then, the DMR is created in R/3 (No.0060100097). So, the contract is replicated well. I have checked the document flow of contrac
-
this is sort of a javascript question, but its on my jsp pages so i'll ask. ;) I would like to be able to disable the backspace key so that a user cannot hit it to travel back a page. However, i want to leave it enabled so that they can at least back
-
Installing Third-Party Applications
My family wants to start downloading some games and third-party applications for our iMac. I am new to iMac system administration, so I have a few questions. I want to install the download so that they will be accessible to everyone. Does this have t
-
Problem with field-length in sql-loader
Hello, (sorry I see it's the wrong forum -> SQL-Developer, I searched for SQL-Loader, is there a possibility to change the forum ?) I can't find an answer for my question at google, so I hope there is someone in this forum who can help me. I have a d