Restricting Null Values in the report
Hi All,
I have a aggregated feild displayed in the bottom of the report and sorted on the report on that field to show me top results.
When I try to run the report, Null values are coming first in the report (Displayed as NaN).
I want to restrict these null values from the report.
Please guide me on this.
Thanks in advance,
Imtiaz.
Okay. If you are using sum, you could use the following: <?sum(Petrofac-ECRevenue[.!=''])?>
ensure that the path to the element is correct. Are you using a syntax like <?sum(current-group()/Petrofac-ECRevenue)?>
Send me an email to [email protected] with your xml data and RTF if you can't make it work.
Similar Messages
-
Suppressing NuLL values in Crystal Report
Hi....
I m facing a problem,i use asp.net and I have designed a Crystal Report.I had to place Text Objects in the the details section along with the corresponding Records from Database as per the Reports Design needed. Now i want that the NULL values in the report should be suppressed and should be disappeared along with the static Text Objects. Like as it happens in Grid view in ASP .net
Please Help me to solve this issue..
Thank youI think i have been able to do it with little compliated suppress logic.
When i design the report this is how it looks in design mode:
Line1 Field1
Line2 Field2
Line3 Field3
and when Field 2 is null or contains a blank string the output should look like:
Line1 Field1
Line3 Field3
1. Initially just design the text fields and db fields without any suppress.
2. Check Suppress for Line 2 and use the formula: isnull({Table.Field2}) . Do nothing to Field2. This should suppress Line2 when Field2 is null, you can also add StrCmp({Table.Field2}, "") = 0 for checking blank strings.
3. Now copy Object Line3 and Field3 and place on top of Line2 and Field2 respectively so that their positions match. Let these newly copied objects be Line3_1 and Field3_1 respectively.
4. Line3_1 and Field3_1 should be suppressed if Field2 contains a non null value. So for both of them Click Suppress checkbox and add the following in the format formula editor not isnull({Table.Field2})
5. If Line3_1 and Field3_1 are visible = Field2 is null\empty -> Line3 and Field3 should be suppressed or the output would be like:
Line1 Field1
Line3 Field3
Line3 Field3
So to remove the duplicate:
For both of them Click Suppress checkbox and add the following in the format formula editor isnull({Table.Field2})
Hope this helps. I will see if I can attach a sample report based on xtreme here. -
How do I restrict null values??????
Hi,
Created BW report Purchase Orders Awaiting Goods Receipting. Having difficulty in restricting the report to those orders that have not been goods receipted. How do I restrict null values.
thanks in advance
S VRHi,
I believe you are using Standard Business Content.
You can use the following reports for overcome your requirement:
Query Name: 0PUR_C01_Q0017 - Quantities Purchase Order Delivery - Invoice
Link: http://help.sap.com/saphelp_nw04/helpdata/en/99/670539b15b186ce10000000a114084/content.htm
Try to use it. And let me know still you are having some doubts.
Regards,
Vivek V -
How to get rid of unassigned values in the report
hai to all,
here is the issue,
while running a report(sales per country), iam getting the data,after that when i drill down on <u><b>sales document number</b></u> iam getting some unassigned data, with Sales document number as #, and some value in the keyfigure.what is the reason behind this?
Here is another issue that i want to find all the sales documents which have the value # in the report?, is it possible? the same case with <u><b>Customer country</b></u>, on the same report.
pl anyone help me
br
venkat/shyamHi Shyam.
Regarding the first issue: Well, you've loaded some data records into your cube where the "Sales Doc Field" is empty. Did you load through PSA? The best way to scan your PSA (I believe) is to find the underlying table and have a look at it via SE16. In this way you don't have to scan through every data single package. This can be done via "display data flow" from your cube and switch on technical names. There you have it. (It's called /BIC/B00...etcetc you might have to add i few zeroes though when you enter it into SE16). Get request ID from "Infocube Managment". In SE16 seelction screen use F2 to set the "sales Doc No." field even to blank.
Second issue is a bit easier: in your query (or a working copy of your query) restrict on "Sales Doc No" or "Customer Coutry" to only include value "#". In the same way you can remove the unassigned values be excluding value "#".
Hope this works for you.
Chears, Jørn -
How do I pass a null value to the reportDocument?
I'm using CR 2008 and VS 2005.
I am using a stored procedure as the datasource for one of my report, which we run using the C# API. The stored procedure is expecting a NULL in certain cases and I find I cannot pass a NULL with my current code:
// Here I get the parameter
// If we are dealing with an empty string or a NULL value, let's give it
// a value of a space so that Crystal's DLLs don't choke.
if ((value.Length == 0) || (value == "NULL"))
value = " ";
arrParams.Add(value);
Object strParam = arrParams<i>;
this.reportDocument1.SetParameterValue(num, strParam);
The stored procedure parameter type is INT so in the report it shows up as NUMBER.
How do I get a NULL value to the stored procedure?
Thanks.See if this does the trick:
Dim crParameterDiscreteValue As New CrystalDecisions.Shared.ParameterDiscreteValue()
crParameterDiscreteValue.Value = Nothing
C# would look something like;
CrystalDecisions.Shared.ParameterDiscreteValue crParameterDiscreteValue;
crParameterDiscreteValue = new CrystalDecisions.Shared.ParameterDiscreteValue();
crParameterDiscreteValue.Value = null;
Ludek
Follow us on Twitter http://twitter.com/SAPCRNetSup -
JDT1.MTHDATE has null value although the transaction has already closed
Dear All
I need to know about when is a transaction closing date
i think i can use JDT1.MTHDATE, but sometimes i found JDT1.MTHDATE have null value, although the transaction (AR or AP) have already been closed or paid
any body know why it could be happened ?
thanks
Best Regards
JeiMingHi,
Please check Note No. : 1179946 if the same relates to the issue reported by you.
Kind Regards,
Jitin
SAP Business One Forum Team -
Need help Take out the null values from the ResultSet and Create a XML file
hi,
I wrote something which connects to Database and gets the ResultSet. From that ResultSet I am creating
a XML file. IN my program these are the main two classes Frame1 and ResultSetToXML. ResultSetToXML which
takes ResultSet & Boolean value in its constructor. I am passing the ResultSet and Boolean value
from Frame1 class. I am passing the boolean value to get the null values from the ResultSet and then add those
null values to XML File. When i run the program it works alright and adds the null and not null values to
the file. But when i pass the boolean value to take out the null values it would not take it out and adds
the null and not null values.
Please look at the code i am posing. I am showing step by step where its not adding the null values.
Any help is always appreciated.
Thanks in advance.
============================================================================
Frame1 Class
============
public class Frame1 extends JFrame{
private JPanel contentPane;
private XQuery xQuery1 = new XQuery();
private XYLayout xYLayout1 = new XYLayout();
public Document doc;
private JButton jButton2 = new JButton();
private Connection con;
private Statement stmt;
private ResultSetToXML rstx;
//Construct the frame
public Frame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
catch(Exception e) {
e.printStackTrace();
//Component initialization
private void jbInit() throws Exception {
//setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
contentPane = (JPanel) this.getContentPane();
xQuery1.setSql("");
xQuery1.setUrl("jdbc:odbc:SCANODBC");
xQuery1.setUserName("SYSDBA");
xQuery1.setPassword("masterkey");
xQuery1.setDriver("sun.jdbc.odbc.JdbcOdbcDriver");
contentPane.setLayout(xYLayout1);
this.setSize(new Dimension(400, 300));
this.setTitle("Frame Title");
xQuery1.setSql("Select * from Pinfo where pid=2 or pid=4");
jButton2.setText("Get XML from DB");
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
catch(java.lang.ClassNotFoundException ex) {
System.err.print("ClassNotFoundException: ");
System.err.println(ex.getMessage());
try {
con = DriverManager.getConnection("jdbc:odbc:SCANODBC","SYSDBA", "masterkey");
stmt = con.createStatement();
catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton2_actionPerformed(e);
contentPane.add(jButton2, new XYConstraints(126, 113, -1, -1));
//Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
void jButton2_actionPerformed(ActionEvent e) {
try{
OutputStream out;
XMLOutputter outputter;
Element root;
org.jdom.Document doc;
root = new Element("PINFO");
String query = "SELECT * FROM PINFO WHERE PID=2 OR PID=4";
ResultSet rs = stmt.executeQuery(query);
/*===========This is where i am passing the ResultSet and boolean=======
===========value to either add the null or not null values in the file======*/
rstx = new ResultSetToXML(rs,true);
} //end of try
catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
======================================================================================
ResultSetToXML class
====================
public class ResultSetToXML {
private OutputStream out;
private Element root;
private XMLOutputter outputter;
private Document doc;
// Constructor
public ResultSetToXML(ResultSet rs, boolean checkifnull){
try{
String tagname="";
String tagvalue="";
root = new Element("pinfo");
while (rs.next()){
Element users = new Element("Record");
for(int i=1;i<=rs.getMetaData().getColumnCount(); ++i){
tagname= rs.getMetaData().getColumnName(i);
tagvalue=rs.getString(i);
System.out.println(tagname);
System.out.println(tagvalue);
/*============if the boolean value is false it adds the null and not
null value to the file =====================*/
/*============else it checks if the value is null or the length is
less than 0 and does the else clause in the if(checkifnull)===*/
if(checkifnull){
if((tagvalue == null) || tagvalue.length() < 0 ){
users.addContent((new Element(tagname).setText(tagvalue)));
else{
users.addContent((new Element(tagname).setText(tagvalue)));
else{
users.addContent((new Element(tagname).setText(tagvalue)));
root.addContent(users);
out=new FileOutputStream("c:/XMLFile.xml");
doc = new Document(root);
outputter = new XMLOutputter();
outputter.output(doc,out);
catch(IOException ioe){
System.out.println(ioe);
catch(SQLException sqle){Can someone please help me with this problem
Thanks. -
How can I get null values for the later weeks
Hi All,
When I execute this code I get the records till current week.
How can I display the output so that I get null values for the later weeks. (with the help of v_numOfWeeks variable in the code)
Thanks,
Vikram
DECLARE
v_query VARCHAR2(4000);
TYPE ref_cursor IS REF CURSOR;
v_refcur ref_cursor;
v_sum NUMBER;
v_id NUMBER;
v_name VARCHAR2(1000);
v_weeknum NUMBER;
v_pernum NUMBER;
v_numOfWeeks NUMBER := 5;
BEGIN
v_query := ' SELECT SUM(product_bkg), postn_id, postn_tbl.postn_name, b.week_num, b.period_num
FROM ops_cv_extract b, (SELECT row_id, desc_text postn_name
FROM s_postn) postn_tbl
WHERE lvl_6_id = 5767
AND fiscal_year = 2008
AND b.week_num < 4
AND b.period_num = 3
AND b.postn_id = TO_NUMBER(postn_tbl.row_id)
GROUP BY postn_id, postn_tbl.postn_name, b.week_num, b.period_num
ORDER BY postn_tbl.postn_name, b.week_num';
OPEN v_refcur FOR v_query;
LOOP
FETCH v_refcur INTO v_sum, v_id, v_name, v_weeknum, v_pernum;
EXIT WHEN v_refcur%notfound;
dbms_output.put_line('P'|| v_pernum||'W'|| v_weeknum||' '||v_name||' '||v_sum);
END LOOP;
END;
This is the output when I execute this code.
P3W1 COMM CNTRL ISAM 213 26961.61
P3W2 COMM CNTRL ISAM 213 12870.4
P3W3 COMM CNTRL ISAM 213 245.88
P3W1 COMM CNTRL ISAM 273 72831.2
P3W2 COMM CNTRL ISAM 273 8739.38
P3W3 COMM CNTRL ISAM 273 3764.92
P3W1 COMM CNTRL TAM 213 49844
P3W2 COMM CNTRL TAM 213 20515.17
P3W3 COMM CNTRL TAM 213 16167.46
P3W2 COMM CNTRL TAM 216 12561.4
P3W3 COMM CNTRL TAM 216 2027.1
P3W1 COMM CNTRL TAM 273 -3336.71
P3W2 COMM CNTRL TAM 273 -1376.68
P3W3 COMM CNTRL TAM 273 19707.42
P3W1 Damon Walters -609.07
P3W2 Damon Walters 30030.24
P3W3 Damon Walters 37475.1
This is the output I'd like to get
P3W1 COMM CNTRL ISAM 213 26961.61
P3W2 COMM CNTRL ISAM 213 12870.4
P3W3 COMM CNTRL ISAM 213 245.88
P3W4 COMM CNTRL ISAM 213
P3W5 COMM CNTRL ISAM 213
P3W1 COMM CNTRL ISAM 273 72831.2
P3W2 COMM CNTRL ISAM 273 8739.38
P3W3 COMM CNTRL ISAM 273 3764.92
P3W4 COMM CNTRL ISAM 273
P3W5 COMM CNTRL ISAM 273
P3W1 COMM CNTRL TAM 213 49844
P3W2 COMM CNTRL TAM 213 20515.17
P3W3 COMM CNTRL TAM 213 16167.46
P3W4 COMM CNTRL TAM 213
P3W5 COMM CNTRL TAM 213
P3W1 COMM CNTRL TAM 273 -3336.71
P3W2 COMM CNTRL TAM 273 -1376.68
P3W3 COMM CNTRL TAM 273 19707.42
P3W4 COMM CNTRL TAM 273
P3W5 COMM CNTRL TAM 273
P3W1 Damon Walters -609.07
P3W2 Damon Walters 30030.24
P3W3 Damon Walters 37475.1
P3W4 Damon Walters
P3W5 Damon Walters Edited by: polasa on Oct 28, 2008 6:42 PMSure, in a Single SQL ->
satyaki>
satyaki>select * from v$version;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
Elapsed: 00:00:00.01
satyaki>
satyaki>
satyaki>-- Start Of Test Data --
satyaki>with week_tab
2 as
3 (
4 select 1 period_num, 1 week_num, 10 bkg1 from dual
5 union all
6 select 1, 2, 40 from dual
7 union all
8 select 1, 3, 30 from dual
9 union all
10 select 1, 2, 20 from dual
11 union all
12 select 1, 1, 10 from dual
13 union all
14 select 1, 1, 20 from dual
15 union all
16 select 1, 3, 10 from dual
17 union all
18 select 2, 1, 15 from dual
19 union all
20 select 2, 2, 20 from dual
21 union all
22 select 2, 3, 10 from dual
23 union all
24 select 2, 1, 15 from dual
25 union all
26 select 2, 2, 30 from dual
27 union all
28 select 2, 3, 20 from dual
29 )
30 -- End Of Test Data --
31 select period_num,
32 week_num,
33 (
34 select sum(week_tab.bkg1)
35 from week_tab
36 where period_num = m.period_num
37 and week_num = m.week_num
38 group by week_num, period_num
39 ) sum_bkg1
40 from (
41 select dum.week_num,
42 wk.period_num
43 from (
44 select 1 week_num from dual
45 union all
46 select 2 from dual
47 union all
48 select 3 from dual
49 union all
50 select 4 from dual
51 union all
52 select 5 from dual
53 ) dum ,
54 (
55 select distinct period_num
56 from week_tab
57 ) wk
58 ) m;
PERIOD_NUM WEEK_NUM SUM_BKG1
1 1 40
1 2 60
1 3 40
1 4
1 5
2 1 30
2 2 50
2 3 30
2 4
2 5
10 rows selected.
Elapsed: 00:00:00.48
satyaki>Regards.
Satyaki De. -
Passing null values to the attributes of a CAF operation
Hi,
In CAF I am trying to fetch data through Web Service. For this I need to pass null value for the attributes of the operation.If I set the value to null it gives me missing parameter as the error.
Can anyone tell me how to pass null values to the attributes of a CAF operation?Hi Xavier,
Declare the two variables of type if_wd_contex_node for e.g. lv_node and if_wd_context_element for e.g. lv_element. Now in the first one lets say lv_node get the refrence of dynamically created node like:
lv_node = wd_context->get_child_node('<node name>').
Then get the refrence of element like:
lv_element = lv_node->get_element( ). (You can also pass index as parameter check the method API)
then just set the value of attribute you want like:
lv_element->set_attribute( exporting name = '<attribute name>' value = '<your value>').
Regards,
Neha -
How can we read the screen field values from the report selection screen wi
Hi expart,
How can we read the screen field values from the report selection screen with out having an ENTER button pressed .
Regards
Razzuse this code...
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_posnr.
**Read the Values of the SCREEN FIELDs
CALL FUNCTION 'DYNP_VALUES_READ' -
Hi Gurus,
I Have joined in the proejct.
When I am executing a report. it is showing the following value in the Business Explorer
#/20230401
Though # is not there in the cube.
also profit center value is showing like this. ABAD/1443300
May i know the reason why we are getting this # and / values in the report. and how to suprress this as client doesnot want this
Thanks in advance
AnanyaThank you.
May I know what is the reason for getting # value in the report? -
Date range to be displayed & Displaying multiple values on the report
Hi,
I have date range parameters, but I also need it to be displayed it on the report. Is there any way I can display it. E.G If a parameter is created one can drag and drop it on the report if it needs to be displayed on the report, I tried to do the same for the date range parameter but it does not work.
Also If a parameter is created by selecting the option 'Allow Multiple Values', and if you drag and drop it on the report only the first value is displayed and the rest does not show. Has anyone tried this before and been successful in displaying multiple values in the report.
Thanks in advance.Hi,
A multi-value parameter is actually treated as an array in Crystal Reports.
To display the values selected in the parameter, create a formula from the Field Explorer and type this code:
Join({?ParameterName},",");
Place this formula on the header or the footer sections of the report.
Regarding the date range issue, please follow Sastry's advice and it should work fine.
Make sure you're using the parameter in the Minimum and Maximum functions. For eg: If I was to create a date range parameter called OrderDate, my formula to show the start date would look like this:
Minimum({?OrderDate})
-Abhilash -
Hi ,
Facing strange issue in Xpath debatching in Orchestration.
Getting following error in construct shape:
The part 'part' of message 'Message_In_Copy' contained a null value at the end of the construct block
Code inside the construct block:
sXpath = System.String.Format("/*[local-name()='Customers' and namespace-uri()='http://Debatch.Customer']/*[local-name()='Customer' and namespace-uri()='http://Debatch.Customer' and position()={0}]", nLoopCount);
System.Diagnostics.Debug.WriteLine(sXpath);
Message_In_Copy= xpath(Message_In, sXpath);
Schema used:
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://Debatch.Customer" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://Debatch.Customer" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Customers">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Customer">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="id" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Can anyone help me out ? to identify the root cause for above issue.
Thanks,
Kind Regards,
girsh
girishkumar.aI agree with Shankycheil here, querying XPath will return XMLNode and thus can't be assigned to XMLNode.
But for debatching in Orchestration using Xpath is not a very good idea.
Because using XPATH loads the complete message in memory(XML Structure) and then performs processing.
This approach is always prone to throwing Out of Memory exception and low in performance also.
Therefore I would suggest you to perform debatching by calling XML Disassembler(XMLReceive) pipeline.
As pipeline works with Stream it will have better performance and you will also get complete control over the messages.
Refer the below samples for debatching using XML Receive pipeline within Orchestration.
Comparrison between XPATH and ReceivePipeline for Debatching:-
De-batching within an orchestration using XPath or calling a pipeline
Debatching within Orchestration using Pipeline-
http://tech-findings.blogspot.in/2013/07/debatchingsplitting-xml-message-in.html
https://jeremyronk.wordpress.com/2011/10/03/how-to-debatch-into-an-orchestration-with-a-pipeline/
Thanks,
Prashant
Please mark this post accordingly if it answers your query or is helpful. -
How to put the null value at the last of a select list
Hello,
I have a select list with a null value, I want the null value to be the last value in the list. It always appears in the top of the list, Desc and Asc order is not working.
Thank you in advance!
Edited by: Najla on Apr 1, 2013 10:37 PMHi,
Edited by: Howard (... in Training) on Apr 2, 2013 1:xx PM
The statement - I don't think it is possible to arrange the order of the null option in a select list.- is close. You can't control the order of the Null value if you add the Null value through the GUI. However, it can be added and controlled as part of a SELECT ...
One way is to add NULL to the "SELECT". Here the Yes/No are hard-coded but they could have been selected from a table:
select d, r from
select 'YES' d, 'Y' r from dual
union all
select 'No' d, 'N' r from dual
union all
select Null d, '<Null>' r from dual
) order by 1 desc NULLS lastHoward -
Reports in EPM version 16 to be refreshed twice to see the values in the Report
Dear All,
We are on BPC 10 and EPM version 16. When we try to refresh the Reports in EPM 16, the first time, it does not bring any values, but when we refresh the second time, we get the values in the Report. Has anyone faced the similar issue like this, please let me know how it can be solved? When i execute the same report in EPM 13, the report gets the values in the first refresh itself.
Thanks in advance,
Best Regards,
RamaHi Swapnil, Vadim,
Thanks for your help but as per the Note, I would like to check if this will help for my Report. As per the Note it says,
Resolution
A solution is to select the member Context(XXXX) in the 'EPM - Member selector' for the dimension initialized in page axis for the input schedule instead of referring to Sheet1 in the EPMOlapMember formula.
Another solution is to implement a macro via a button in the second sheet that contains the input schedule as follows:
Point 1: I have 6 sheets in this workbook, The Input Sheet which you see below is created by using a MACRO. Going to each sheet and changing the context would not help our users because they need to just refresh from the Input sheet.
Point 2: It says, to go to each sheet and create a MACRO which is also not feasible for our users. They require to have it in the Input sheet only.
Below Screen shot is from Input Sheet. PRC refers to the Profit Center in the below screen shot.
Below Screen shot is from Sheet 1
Please let me know if I am wrong as per the Note.
Thanks in advance,
Regards,
Venkata
Maybe you are looking for
-
ORA-00904 Error while running CMP EJB
When I am running my CMP bean, I get following error, 2006-07-02 09:58:17,171 DEBUG org.jboss.ejb.plugins.cmp.jdbc.JDBCEJBQLQuery.AccountBean#fi ndByAccountNumber] Executing SQL: SELECT t0_a.ACCOUNT.UOID FROM ACCOUNT t0_a WHERE (t0_a.ACCOUNT.ACCOUNT_
-
I upgraded to 11.1.14.62 this morning. Not iTunes is saying "An iPod had been detected but could not be identified properly". I unlugged/replugged in. I reset the iPod, I removed iTunes and reinstalled. I'ver tried three different cables. When I
-
How to change my meteo localisation on Siri ?
Hi everyone, I have a problem with Siri, when I ask him "What will be the weather tomorrow" for example, he doesn't give me the right weather forcast. It's not my localisation, but he gets the right time. how can I fix it ? I hope someone can help me
-
File won't import - "Aperture failed to import the image listed below"
Hi: I have a folder of D200 NEFs and 117 of 119 import OK, but two give an error. I repeated the import attempt on one of the failed images and still get the subject error message (in a "Import Results/Import Images Completed with Errors" status box)
-
WHAT HAPPEN TO MY PHONE AFTER UPDATE IOS7.1 I CANT CALL OUT, WHAT HAPPEN TO MY PHONE AFTER UPDATE IOS7.1 I CANT CALL OUT. only ppl can call me. what happen??can be fix?