Updating Trsp. Duration

Dear all,
I want to update /SAPAPO/TRM-DURAT in transaction /SAPAPO/SCC_TL5 (in batch mode).
I execute this tx with Source Transp Zone and Destination Trans. Zone, and must update the field /SAPAPO/TRM-DURAT for one of the Means of Transport there.
I'm trying BAPI_TRLSRVAPS_SAVEMULTI but it ends with an error message : "Time-based validities overlap".
Look at this:
DATA: trdesc(30),
      gv_matid(22),
      gv_meins TYPE /sapapo/meins,
      pversion(22).
CONSTANTS c_x VALUE 'X'.
  DATA: BEGIN OF record,
         location_from TYPE /sapapo/ext_locno,
         loctype_loc_from(4),
         loctype_loc_to(4),
         location_to TYPE /sapapo/ext_locno,
         valfr TYPE /sapapo/scc_valfromtstmp,
         valto TYPE /sapapo/scc_valfromtstmp,
         ttype TYPE /sapapo/tr_traty,
        END OF record.
DATA:
      p_transport_lane TYPE TABLE OF bapi11201trlane WITH HEADER LINE,
      p_transport_lanex TYPE TABLE OF bapi11201trlanex WITH HEADER LINE,
      p_prod_procurement TYPE TABLE OF bapi11201sources WITH HEADER LINE,
      p_prod_procurementx TYPE TABLE OF bapi11201sourcesx WITH HEADER LINE,
      p_means_of_transport TYPE TABLE OF bapi11201meansoftransp WITH HEADER LINE,
      p_means_of_transportx TYPE TABLE OF bapi11201meansoftranspx WITH HEADER LINE,
      p_prod_means_of_transport TYPE TABLE OF bapi11201prdmeansoftransp WITH HEADER LINE,
      p_prod_means_of_transportx TYPE TABLE OF bapi11201prdmeansoftranspx WITH HEADER LINE,
      p_carrier TYPE TABLE OF bapi11201carrier WITH HEADER LINE,
      p_carrierx TYPE TABLE OF bapi11201carrierx WITH HEADER LINE,
      return TYPE TABLE OF bapiret2 WITH HEADER LINE.
DATA: p_dur TYPE bapi11201trmdurat.
record-location_from = 'TZ-PRPBB1'.
record-loctype_loc_from = 1005.
record-loctype_loc_to = 1005.
record-location_to = 'TZ-PDJB05'.
record-valfr = 20080921000000.
record-valto = 20990922235959.
record-ttype = 'SID-Q-BB'.
    CONCATENATE 'Tr Lane Between' record-location_from INTO trdesc SEPARATED BY space.
    CONCATENATE trdesc '-> ' record-location_to INTO trdesc.
    p_transport_lane-location_from = record-location_from.
    p_transport_lane-loctype_loc_from = record-loctype_loc_from.
    p_transport_lane-location_to = record-location_to.
    p_transport_lane-loctype_loc_to = record-loctype_loc_to.
    p_transport_lane-short_text_tl = trdesc.
   p_transport_lane-planner = record-planner.
    APPEND p_transport_lane .
    IF record-location_from NE ' '.
      p_transport_lanex-location_from = record-location_from.
    ENDIF.
    IF record-loctype_loc_from NE ' '.
      p_transport_lanex-loctype_loc_from = record-loctype_loc_from.
    ENDIF.
    IF record-location_to NE ' ' .
      p_transport_lanex-location_to = record-location_to.
    ENDIF.
    IF record-loctype_loc_to NE ' ' .
      p_transport_lanex-loctype_loc_to = record-loctype_loc_to .
    ENDIF.
   IF record-short_text_tl NE ' ' .
     p_transport_lanex-short_text_tl = c_x.
   ENDIF.
   IF record-planner NE ' ' .
     p_transport_lanex-planner = c_x.
   ENDIF.
    APPEND p_transport_lanex.
    CONCATENATE 'Tr Lane Between' record-location_from INTO trdesc SEPARATED BY space .
    CONCATENATE trdesc '-> ' record-location_to INTO trdesc.
    p_means_of_transport-location_from = record-location_from.
    p_means_of_transport-loctype_loc_from = record-loctype_loc_from.
    p_means_of_transport-location_to = record-location_to.
    p_means_of_transport-loctype_loc_to = record-loctype_loc_to.
    p_means_of_transport-valfr = record-valfr.
    p_means_of_transport-valto = record-valto.
    p_means_of_transport-ttype = record-ttype.
   p_means_of_transport-valid_all_prds_flg = record-valid_all_prds_flg.
   p_means_of_transport-aggt_tpl_flg = record-aggt_tpl_flg.
   p_means_of_transport-dtlt_tpl_flg = record-dtlt_tpl_flg.
   p_means_of_transport-short_text_tm = record-short_text_tm.
    p_means_of_transport-short_text_tm = trdesc.
   p_means_of_transport-trcal = record-trcal.
    p_dur = 350.
    p_means_of_transport-duration = p_dur.
   p_means_of_transport-durfx_flg = record-durfx_flg.
   p_means_of_transport-distfx_flg = record-distfx_flg.
   p_means_of_transport-trans_cost = record-trans_cost.
   p_means_of_transport-trans_cost_uom = record-trans_cost_uom .
   p_means_of_transport-dur_rnd_value = record-dur_rnd_value.
   p_means_of_transport-treq_cover_type = record-treq_cover_type.
   p_means_of_transport-tlb_profile = record-tlb_profile.
    APPEND p_means_of_transport.
    p_means_of_transportx-location_from = record-location_from.
    p_means_of_transportx-loctype_loc_from = record-loctype_loc_from.
    p_means_of_transportx-location_to = record-location_to.
    p_means_of_transportx-loctype_loc_to = record-loctype_loc_to.
    p_means_of_transportx-ttype = record-ttype.
    IF record-ttype NE ' ' .
      p_means_of_transportx-ttype = c_x.
    ENDIF.
   IF record-valid_all_prds_flg NE ' ' .
     p_means_of_transportx-valid_all_prds_flg = c_x.
   ENDIF.
   IF record-aggt_tpl_flg NE ' ' .
     p_means_of_transportx-aggt_tpl_flg = c_x.
   ENDIF.
   IF record-dtlt_tpl_flg NE ' ' .
     p_means_of_transportx-dtlt_tpl_flg = c_x.
   ENDIF.
   IF record-short_text_tm NE ' ' .
     p_means_of_transportx-short_text_tm = c_x.
   ENDIF.
    IF trdesc NE ' ' .
      p_means_of_transportx-short_text_tm = c_x.
    ENDIF.
   IF record-trcal NE ' ' .
     p_means_of_transportx-trcal = c_x.
   ENDIF.
    IF p_dur NE ' ' .
      p_means_of_transportx-duration = c_x.
    ENDIF.
   IF record-durfx_flg NE ' ' .
     p_means_of_transportx-durfx_flag = c_x.
   ENDIF.
   IF record-distfx_flg NE ' ' .
     p_means_of_transportx-distfx_flg = c_x.
   ENDIF.
   IF record-trans_cost NE ' ' .
     p_means_of_transportx-trans_cost = c_x.
   ENDIF.
   IF record-trans_cost_uom NE ' ' .
     p_means_of_transportx-trans_cost_uom = c_x .
   ENDIF.
   IF record-dur_rnd_value NE ' ' .
     p_means_of_transportx-dur_rnd_value = c_x.
   ENDIF.
   IF record-treq_cover_type NE ' ' .
     p_means_of_transportx-treq_cover_type = c_x.
   ENDIF.
   IF record-tlb_profile NE ' ' .
     p_means_of_transportx-tlb_profile = c_x.
   ENDIF.
    APPEND p_means_of_transportx.
*CALL OF PERFORM TO CALL BAPI to create/update transportation lane with means of transport
    PERFORM bapi_call.
*BAPI CALL
FORM bapi_call.
  CALL FUNCTION 'BAPI_TRLSRVAPS_SAVEMULTI'
  EXPORTING
  logical_system = 'TSD_210'
*     business_system_group =
  model = '000'
  commit_control = 'E'
*     auto_delete = ' '
  TABLES
  transport_lane = p_transport_lane
  transport_lanex = p_transport_lanex
  prod_procurement = p_prod_procurement
  prod_procurementx = p_prod_procurementx
  means_of_transport = p_means_of_transport
  means_of_transportx = p_means_of_transportx
  prod_means_of_transport = p_prod_means_of_transport
  prod_means_of_transportx = p_prod_means_of_transportx
  carrier = p_carrier
  carrierx = p_carrierx
  return = return.
*Confirm the document creation by calling database COMMIT
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.
ENDFORM.
Actually the record contains :
Means of Transport = SID-Q-BB
Start Date: 21-9-08
End Date: 23-9-08
Duration: 315
Etc
If you have any idea, please help me.
Thanks and Regards,
Liliana

Hi Liliana,
Please check the Transportation lanes you are uploading/editing. It appears you had already uploaded a lane with some Validity. While the same is being uploaded again with a different validity.
You have to check the Existing TLanes and the ones you are trying to upload or any duplication. Omit the duplicate ones and try again...
Regards,
Manjit

Similar Messages

  • BAPI for updating Maintain Duration in Transportation and Delivery scheduling

    Hi all,
    Iam looking for a BAPI to update the Duration Times in Transportation and Delivery scheduling. I reluctant to use recording on SM30 Table maintenance T code and use it in LSMW. Is there a BAPI or Standard i/p Program to load these details. I have more than 200000 records to input.
    A list of all BAPI's in Transportation Management module would be great as well.
    Regards,
    Avi

    Hi,
    @praveen: I tried the solution provided by you and it worked for me in this context. But it seems this BADI gets triggered every time the delivery is getting saved. So for my test purposes, I'm triggering this BADI in a program, but in actual scenario, the BADI would be called on every sy-ucomm = 'SICH_T' i.e. SAVE. hence, I can't separate my piece of code using this condition.
    I'm trying to call my FM(update module in collective run mode) inside this BADI in backgrnd task as a separate unit but this doesn't seem to work.
    Any more suggestions?
    Thanks
    Ashish

  • Updating OCLG.Duration in DI Server

    I'm trying to add/update an activity using the DI Server. The XML request is generated properly (no schema errors) and sent to the DI Server. In the XML, I have (among other things):
    <Recontact>20070802</Recontact>
    <StartTime>1800</StartTime>
    <EndDueDate>20070803</EndDueDate>
    <EndTime>1815</EndTime>
    However, I get an error response from the DI Server saying <i>Duration does not match start/end time [OCLG.Duration]</i>.
    According to the DI Documentation,
    The duration value specifies the number of minutes, hours, or days according to the DurationType.
    The duration value must be equal or greater than 0.
    In case the start time (days + hours) and end time (days + hours) are specified, then the system recalculates the duration time.
    Now - the problem is if I specify the <StartDate></StartDate> tag in my source XML, I get an invalid schema error. If I use <Recontact>, I get the <i>Duration not defined</i> error.
    Is there any way around this without actually setting the duration (and get SAP to calculate it, like it says in TFM)?
    Thanks
    Hrishi

    I'm trying to add/update an activity using the DI Server. The XML request is generated properly (no schema errors) and sent to the DI Server. In the XML, I have (among other things):
    <Recontact>20070802</Recontact>
    <StartTime>1800</StartTime>
    <EndDueDate>20070803</EndDueDate>
    <EndTime>1815</EndTime>
    However, I get an error response from the DI Server saying <i>Duration does not match start/end time [OCLG.Duration]</i>.
    According to the DI Documentation,
    The duration value specifies the number of minutes, hours, or days according to the DurationType.
    The duration value must be equal or greater than 0.
    In case the start time (days + hours) and end time (days + hours) are specified, then the system recalculates the duration time.
    Now - the problem is if I specify the <StartDate></StartDate> tag in my source XML, I get an invalid schema error. If I use <Recontact>, I get the <i>Duration not defined</i> error.
    Is there any way around this without actually setting the duration (and get SAP to calculate it, like it says in TFM)?
    Thanks
    Hrishi

  • After OS Update Call Duration Is Missing

    After updating my 8330 to the most recent version, first thing I noticed was the call timer/duration
    is now missing. Has anyone else had this happen, and is there a fix?
    Also, call log doesnt show info for each call. Says all calls were 4:12 min. in duration.
    I havent seen anyone else mention this problem in the forums that I know of.
    Please help
    Thanks.

    i know its 3+ years later but this just happened to me. Have you figured it out?  I cant at all !  very annoying!

  • Updating Absence Duration

    The user enters the holiday days in the holiday calander after entering the absence days and the holidays are not being deducted from the already entered absence days field unless we re-enter the absence start and end date and save.
    How can we acheive this ?? Please advice
    Thanks
    Siva

    Thanks much Gaurav. I was able to work it out by creating work schedule itself. I reckon I missed out selecting the schedule pattern. We need to ensure that after creating schedule the pattern needs to be selected and launched. After a while it gets effected in the system. Just in case if others are trying to implement work schedule for working days between Saturday to Wednesday following are the step involved. I have created two schedule pattern with day start as 1 and day stop as 4; and another pattern with day start as 7 and day stop as 7. It works like charm....:)
    Regards,
    Ahmed

  • Best way to update a PRA file with changes to P6 schedule?

    Hello,
    I've spent some time looking at user manuals and video tutorials to try and become familiar with how to use Primavera Risk Analysis. I come from an @RISK user background so there were some concepts that were a little different between the two applications.
    One thing of particular interest to my company is how to use PRA with a constantly evolving and updating P6 project schedule? I know there are ways to import/export user defined fields to store the min/most likely/max values for each task. I also know that the risk register can be imported/exported from Excel. My concern can perhaps be demonstrated by this example (based on my current understanding of PRA and P6)
    1. Start PRA and import a copy of a P6 schedule. This is not a "live" link but rather a copy made for use with PRA.
    2. Set-up the risk register, link to project tasks. Set-up activity min/most likely/max, assign to a distribution (triangle)
    3. Run Monte Carlo simulations, review results etc.
    4. At this point I could export the min/most likely/max durations back to P6 as user defined fields and I could update the duration in P6 with the most likely. I'm not sure what would happen with risk activities that created new project activities but I assume they would import as new tasks to P6?
    After going through steps 1-4, the P6 schedule might continue to evolve further with new tasks, new dependencies, new durations, etc. At some point, I may be asked again to perform another risk analysis on the project and here is where my question comes in: Do I have to start all over and import everything into a new PRA? I know that I could get the min/max most likely from P6 user defined fields, I know I could import the risk register from Excel but are there other things that I would lose by having to start over (for example, links between risks in the risk register and the tasks in the P6 schedule?) Or... is there a way to re-use an existing PRA file and update the P6 schedule while preserving the info (like risk register, etc.)?
    Thank you for your reply

    >
    This method works but is there an easier (faster) way to update another table with new data only?
    >
    Almost anything would be better than that slow-by-slow loop processing.
    You don't need a procedure you should just use MERGE for that. See the examples in the MERGE section of the SQL Language doc
    http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm
    MERGE INTO bonuses D
       USING (SELECT employee_id, salary, department_id FROM employees
       WHERE department_id = 80) S
       ON (D.employee_id = S.employee_id)
       WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
         DELETE WHERE (S.salary > 8000)
       WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
         VALUES (S.employee_id, S.salary*.01)
         WHERE (S.salary <= 8000);

  • Updating Start, Finish % Complete from excel file to Ms Project

    Hi - This is my first post on this forum which i see is a great way to share knowledge.
    I’m having a schedule which has around 3000 lines with resources names and a Responsible Person (  where individual resources
    report to) updated on the schedule.
    I need to work out a good way to get schedule updates from different parties in a efficient way.
    My thoughts are to make a solution to generate the tasks which needs to be updated based on the status date and generate a individual excel files for each responsible person and get
    their updates back in excel and update the dates and % complete back to the MS Project schedule.<o:p></o:p>
    The steps
    a) create a filter to list all the tasks which need to be updated based status date ( tasks which are in progress, tasks in the past which have not started yet,
    tasks in the past which have finished etc) grouped as per responsible person and create separate excel files for each responsible person.
    b) the excel file will contain ( UID, Task name, start date, finish date, %complete, resource name, responsible person)
    c) I would like to email these excel files to each responsible person and get their updates for (start date, finish date, %complete)
    d) Create a VBA macro to let the user to select the updated excel file and update the data back to MS Project file.
    Conditions while updating
    a)  
    Read the Excel file from Top to bottom and find the correct record based on the UID and update the "duration" in order to change dates as below
    b)  
    IF Task has started ( the excel file contains % complete and a new start date later than the MS Project start date)
    Update MS Project file ( Actual Start date and % Complete)
    c)  
    IF Task has started as Scheduled ( the excel file contain % complete and the excel file start date is equal to MS Project start date)
            Update MS Project file ( Actual Start date and % Complete)
    d)  
    IF Task has started and finished as Scheduled ( The excel file start and finish dates are equal to MS Project file but excel file % complete is now 100%)
    Update MS Project File ( Actual Start, Actual Finish and Update % Complete 100%)
    e)  
    If Start date of the task has been rescheduled to a future date ( If Excel file start date is > that Ms project start date and excel file % complete is 0)
    Update the MS Project file and inset a lag to match the excel file start date.
    I would like to know whether this would be a feasible solutions and if some of you have implemented this kind of thing please share some code snippets.
    Thanks a lot

    Hi John, I've managed to progress further on the code and Split the records as per supervisor and create excel file and email  to supervisor.
    However I ran into 2 problems
    1) The code  works some time without any error and some times it stalls. I have managed to narrow it down to the sorting code block on the
    ExportTaskstobeUpdated mehod where it Selects the Active work book which has all the data based on the filter and Sorts according to Supervisor Name+ Resource Name
    I have made the error code Bold and Italic
    The error I'm getting is
    Run-time error '1004'
    Method'Range' of object'_Global' failed
    2) Currently I'm creating the Master Excel file which is generated by the
    ExportTaskstobeUpdated method and splitting them and creating all the splits + the Master  excel file to a hard coded locationwhich is C:GESProjectEmail folder
    When Saving it Prompts to Over wright the existing files , I don't need any prompts coming out for the user.
    I've tried using the Application.DisplayAlearts=False but it does not work for me.
    In order to overcome this , I created a routine to delete the files after the files have been emailed/Saved as draft but that too fails to delete the original Master excel file.
    Is there a way to generate the excel files on the fly and without saving can I attach it to the email ?
    Or would like to know your thoughts on a better way to handle this.
    Sub ExportTaskstoBeUpdated()
    'Start Excel and create a new workbook
    'Create column titles
    'Export data and the project title
    'Tidy up
    Dim xlApp As Excel.Application
    Dim xlRange As Excel.Range
    Dim Dept As Task
    Dim Check As String
    Dim Prime As String
    Dim PrimeEmail As String
    Dim OpeningParen, ClosingParen As Integer
    'Start Excel and create a new workbook
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True
    xlApp.Workbooks.Add
    'Create column titles
    Set xlRange = xlApp.Range("A1")
    With xlRange
    '.Formula = "Master Schedule Report"
    .Font.Bold = True
    .Font.Size = 12
    .Select
    End With
    xlRange.Range("A1") = "Supervisor"
    xlRange.Range("B1") = "Resource Name"
    xlRange.Range("C1") = "UID"
    xlRange.Range("D1") = "Task Name"
    xlRange.Range("E1") = "Start Date"
    xlRange.Range("F1") = "Finish Date"
    xlRange.Range("G1") = "% Completed"
    xlRange.Range("H1") = "Project"
    xlRange.Range("I1") = "Supervisor Email"
    With xlRange.Range("A1:N1")
    .Font.Bold = True
    .HorizontalAlignment = xlHAlignCenter
    .VerticalAlignment = xlVAlignCenter
    .EntireColumn.AutoFit
    .Select
    End With
    'Export data and the project title
    Set xlRange = xlRange.Range("A2") 'Set cursor to the right spot in the worksheet
    ViewApply Name:="Task Sheet" 'Get the view that has the Text11 column to filter on
    OutlineShowAllTasks 'Any hidden tasks won't be selected, so be sure all tasks are showing
    FilterApply Name:=" Telstra - CHECK 5 - Unstatused Tasks" 'This custom filter selects "External"
    SelectTaskColumn ("Text2") 'Insures the For Each loop gets all of the filtered tasks, this may be redundant
    For Each Dept In ActiveSelection.Tasks 'Pulls data for each task into spreadsheet
    If Dept.Text4 <> "" Then ' If there is no Supervisor defined ignore the Task
    With xlRange
    .Range("A1") = Dept.Text4 ' Supervisor Name, which has a Lookup , where the description on the lookup is the Supervisor Email
    .Range("B1") = Dept.ResourceNames
    .Range("C1") = Dept.Text1
    .Range("D1") = Dept.Name
    .Range("E1") = Format(Dept.Start, "dd-mmm-yyyy")
    .Range("F1") = Format(Dept.Finish, "dd-mmm-yyyy")
    .Range("G1") = Dept.PercentComplete
    .Range("H1") = ActiveProject.Name
    'This below Code Developed by John Finds the lookup description value for a custom field value
    If Dept.Text4 <> "" Then 'This is not required now since its captured above
    Dim Found As Boolean
    Dim i As Integer, NumSup As Integer
    NumSup = ActiveProject.Resources.Count
    'Once you have that set up, now you can add this code to your macro to determine the value for the "I1" range.
    On Error Resume Next
    'cycle through each item in the value list to find the one selected for this task
    For i = 1 To NumSup
    'once the item is found exit the loop
    If CustomFieldValueListGetItem(pjCustomTaskText4, pjValueListValue, i) = _
    Dept.Text4 Then
    'the loop can exit for two reasons, one, the item has been found, two,
    ' the item was not found and an error occurred. We need to distinguish between the two
    If Err = 0 Then Found = True
    Exit For
    End If
    Next
    On Error GoTo 0 'this resets the err function
    'now that the corresponding email address is found, set the Excel range value
    If Found Then
    .Range("I1") = CustomFieldValueListGetItem(pjCustomTaskText4, pjValueListDescription, i)
    Else
    .Range("I1") = "No Email Defined"
    End If
    End If
    '=====================
    End With
    Set xlRange = xlRange.Offset(1, 0) 'Point to next row
    Else
    End If
    Next Dept
    'Tidy up
    FilterApply Name:="All Tasks"
    ViewApply Name:="Task Sheet"
    With xlRange
    .Range("A1").ColumnWidth = 30
    .Range("D1").ColumnWidth = 50
    .Range("E1").ColumnWidth = 20
    .Range("F1").ColumnWidth = 20
    .Range("G1").ColumnWidth = 20
    .Range("H1").ColumnWidth = 30
    End With
    'Sort the Active work book for Supervisor Name + Resource Name
    Range("A1:I1").Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A500") _
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B500") _
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
    .SetRange Range("A1:I500")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
    Set xlApp = Nothing
    'Call Method to Split to seperate files and Email
    SplitIntoSeparateFiles
    'Call the Method to delete the excel files genearated by the above method
    Deletefiles
    End Sub
    Sub SplitIntoSeparateFiles()
    '* This method Split the Master excel file which is sorted by Supervisor Name + Resource Name
    Dim OutBook, MyWorkbook As Workbook
    Dim DataSheet As Worksheet, OutSheet As Worksheet
    Dim FilterRange As Range
    Dim UniqueNames As New Collection
    Dim LastRow As Long, LastCol As Long, _
    NameCol As Long, Index As Long
    Dim OutName, MasterOutName, SupervisorEmail As String
    'set references and variables up-front for ease-of-use
    'the current workbook is the one with the primary data, more workbooks will be created later
    Set MyWorkbook = ActiveWorkbook
    Set DataSheet = ActiveSheet
    NameCol = 1 ' This is supervisor Name which will be splitted
    LastRow = DataSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LastCol = DataSheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    Set FilterRange = Range(DataSheet.Cells(1, NameCol), DataSheet.Cells(LastRow, LastCol))
    'loop through the name column and store unique names in a collection
    For Index = 2 To LastRow
    On Error Resume Next
    UniqueNames.Add Item:=DataSheet.Cells(Index, NameCol), Key:=DataSheet.Cells(Index, NameCol)
    On Error GoTo 0
    Next Index
    'iterate through the unique names collection, writing
    'to new workbooks and saving as the group name .xls
    Application.DisplayAlerts = False
    For Index = 1 To UniqueNames.Count
    Set OutBook = Workbooks.Add
    Set OutSheet = OutBook.Sheets(1)
    With FilterRange
    .AutoFilter Field:=NameCol, Criteria1:=UniqueNames(Index)
    .SpecialCells(xlCellTypeVisible).Copy OutSheet.Range("A1")
    End With
    OutName = "C:\GESProjectEmail" + "\" 'Path to Save the generated file
    SupervisorEmail = OutSheet.Range("I2") 'Supervisor Email
    MasterOutName = OutName & "Test" ' This is the First excel file generated by the ExportTasksto Be Updated Method
    OutName = OutName & UniqueNames(Index) & Trim(I2)
    Application.DisplayAlerts = False
    OutBook.SaveAs FileName:=OutName, FileFormat:=xlExcel8 'Create Excel files for each splitted files and save
    'Call Send Email method
    Send_Email_Current_Workbook (SupervisorEmail)
    OutBook.Close SaveChanges:=False
    Call ClearAllFilters(DataSheet)
    Next Index
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs FileName:=MasterOutName, FileFormat:=xlExcel8
    ActiveWorkbook.Close SaveChanges:=False
    Application.DisplayAlerts = True
    End Sub
    Sub Send_Email_Current_Workbook(Email As String)
    Dim OutApp As Object
    Dim OutMail As Object
    Dim rng As Range
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    Set OutMail = OutApp.CreateItem(0)
    On Error Resume Next
    With OutMail
    .To = Email
    .CC = ""
    .BCC = ""
    .Subject = "Project Status Update"
    .Body = "Please Update the attached file and email it back to the PM"
    .Attachments.Add ActiveWorkbook.FullName
    .Save
    End With
    On Error GoTo 0
    Set OutMail = Nothing
    Set OutApp = Nothing
    End Sub
    'safely clear all the filters on data sheet
    Sub ClearAllFilters(TargetSheet As Worksheet)
    With TargetSheet
    TargetSheet.AutoFilterMode = False
    If .FilterMode Then
    .ShowAllData
    End If
    End With
    End Sub
    Sub Deletefiles()
    ' This method is to delete the excel files once its saved and to avoid the DO you want to overigt message
    ' because Application.DisplayAlerts = False command still prompts the user to save
    On Error Resume Next
    Kill "C:\GESProjectEmail\*.xl*"
    On Error GoTo 0
    End Sub

  • Updating HLineTo dynamically

    Hi,
    in this small scrolling text example, the text can be updated dynamically.
    The problem is that for longer text the start point need to adjusted further to the right and the endpoint further to the left.
    Anyone knows how to adjust the code to fix this problem?
    Thanks!
    package text;
    import javafx.animation.ParallelTransition;
    import javafx.animation.PathTransition;
    import javafx.animation.PathTransition.OrientationType;
    import javafx.animation.Timeline;
    import javafx.application.Application;
    import javafx.beans.property.SimpleDoubleProperty;
    import javafx.beans.property.SimpleFloatProperty;
    import javafx.beans.property.SimpleStringProperty;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Group;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.TextField;
    import javafx.scene.effect.Reflection;
    import javafx.scene.paint.Color;
    import javafx.scene.shape.CubicCurveTo;
    import javafx.scene.shape.HLineTo;
    import javafx.scene.shape.MoveTo;
    import javafx.scene.shape.Path;
    import javafx.scene.shape.Shape;
    import javafx.scene.text.Font;
    import javafx.scene.text.Text;
    import javafx.scene.text.TextBuilder;
    import javafx.stage.Stage;
    import javafx.util.Duration;
    public class MoveText extends Application{
       private SimpleStringProperty textProperty = new SimpleStringProperty("Test");
       private SimpleFloatProperty moveTo = new SimpleFloatProperty(-80.0f);
       private TextField textField = new TextField();
       private Shape shape;
       private HLineTo hLineTo;
       @Override
       public void start(Stage stage) throws Exception
       hLineTo = new HLineTo(moveTo.getValue());
        Button btn = new Button();
        final Reflection reflection = new Reflection();
        reflection.setFraction(1.0); 
        shape = TextBuilder.create()
                    .text(textProperty.getValue()).x(580).y(20)
                    .font(Font.font(java.awt.Font.SANS_SERIF, 25))
                    .effect(reflection)
                    .build();  
          btn.setLayoutY(70);
          textField.setLayoutY(70);
          textField.setLayoutX(140);
            btn.setText("Update textProperty");
            btn.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    ((Text)shape).setText(textField.getText());
                    moveTo.set(-textField.getText().length()*10);
          final Group group = new Group();
          final Scene scene = new Scene(group, 500, 400, Color.GHOSTWHITE);
          stage.setScene(scene);
          stage.setTitle("Animations");
          stage.show();
          final Path path = new Path();
          path.getElements().add(new MoveTo(580,20));
          path.getElements().add(hLineTo);
          path.setOpacity(0.0);
          group.getChildren().add(path);
          group.getChildren().add(shape);
          group.getChildren().add(btn);
          group.getChildren().add(textField);
          final PathTransition pathTransition = new PathTransition();
          pathTransition.setDuration(Duration.seconds(8.0));
          pathTransition.setPath(path);
          pathTransition.setNode(shape);
          pathTransition.setOrientation(OrientationType.NONE);
          pathTransition.setCycleCount(Timeline.INDEFINITE);
          final ParallelTransition parallelTransition =
             new ParallelTransition(pathTransition);
          parallelTransition.play();
       public static void main(final String[] arguments)
          Application.launch(arguments);
    }

    This is more of a complete rewrite than an adjustment, but perhaps you can use some of the concepts in the rewrite and apply them to your project.
    import javafx.animation.*;
    import javafx.application.Application;
    import javafx.beans.*;
    import javafx.event.*;
    import javafx.geometry.*;
    import javafx.scene.*;
    import javafx.scene.control.*;
    import javafx.scene.effect.Reflection;
    import javafx.scene.layout.*;
    import javafx.scene.paint.Color;
    import javafx.scene.text.Text;
    import javafx.stage.Stage;
    import javafx.util.Duration;
    public class TranslateText extends Application {
      final TextField textField       = new TextField("Test");
      final Text      text            = new Text(textField.getText());
      final double    SCROLL_VELOCITY = 100; // pixels/second
            TranslateTransition transition;
      @Override public void start(Stage stage) {
        Node translatableNode = createTranslatableNode();
        HBox controls         = createControls();
        final VBox layout = new VBox(10);
        layout.getChildren().setAll(
          translatableNode,
          controls
        layout.setPrefWidth(500);
        layout.setPadding(new Insets(20, 0, 20, 0));
        scrollWithinParent(translatableNode);
        stage.setScene(new Scene(layout, Color.GHOSTWHITE));
        stage.show();
      public static void main(final String[] arguments) { Application.launch(arguments); }
      private HBox createControls() {
        final Button updateButton = new Button("Update Text");
        updateButton.setOnAction(new EventHandler<ActionEvent>() {
          @Override public void handle(ActionEvent event) {
            text.setText(textField.getText());
        textField.setOnAction(new EventHandler<ActionEvent>() {
          @Override public void handle(ActionEvent event) {
            updateButton.fire();
        final HBox controls = new HBox(10);
        controls.setAlignment(Pos.BASELINE_CENTER);
        controls.getChildren().setAll(
          updateButton,
          textField
        return controls;
      private void scrollWithinParent(final Node node) {
        if (transition != null) {
          transition.stop();
        transition = new TranslateTransition();
        transition.setNode(node);
        transition.setInterpolator(Interpolator.LINEAR);
        transition.setCycleCount(Timeline.INDEFINITE);
        node.layoutBoundsProperty().addListener(new InvalidationListener() {
          @Override public void invalidated(Observable observable) {
            setTransitionParameters(node);
        node.getParent().layoutBoundsProperty().addListener(new InvalidationListener() {
          @Override public void invalidated(Observable observable) {
            setTransitionParameters(node);
        setTransitionParameters(node);
      private void setTransitionParameters(final Node node) {
        if (node.getParent() == null) {
          throw new IllegalArgumentException("Node must have a parent assigned");
        Bounds bounds = node.getLayoutBounds();
        final double fromX = node.getParent().getLayoutBounds().getWidth();
        final double toX   = -bounds.getWidth();
        if (effectivelyEquivalent(transition.getFromX(), fromX) &&
            effectivelyEquivalent(transition.getToX(),   toX)) {
          return;
        transition.fromXProperty().set(fromX);
        transition.toXProperty().set(toX);
        transition.setDuration(
          Duration.seconds(
            Math.abs(transition.getFromX() - transition.getToX()) / SCROLL_VELOCITY
        // stop and start the transition to pick up the updated parameters
        Duration curTime = transition.getCurrentTime();
        transition.stop();
        transition.playFrom(curTime);
      private Node createTranslatableNode() {
        text.setStyle("-fx-font-size: 25px;");
        text.setEffect(new Reflection());
        return new Group(text);
      private static final double EPSILON = 0.000001;
      private boolean effectivelyEquivalent(final double a, final double b) {
        return Math.abs(a - b) < EPSILON;
    }

  • SNP-- LSMW-- Transportation Lane

    Hi,
    When we are doing LSMW for Transporation Lane creation in APO SNP, system unable to recongize the Pop-Up screen, due to that its not updating record.
    It showing all values after converted data, but, when system unable to feed the value to populate the sub screen.
    Kindly guide to overcome this problem.
    Regards,
    Venkat

    Hi Venkat,
    LSMW does not recognize pop up, to avoid the pop-up you need to check the flags fix trsp duration and fix trsp distance and enter a value for both (dummy value in case you dont require any of these fields), the pop-up generate proposal will not appear.
    But I think creating transportation lane using BAPI is a better and faster option in case you have got large number of lanes.
    Thanks,
    Sanjog

  • Help to improve the performance of a procedure.

    Hello everybody,
    First to introduce myself. My name is Ivan and I recently started learning SQL and PL/SQL. So don't go hard on me. :)
    Now let's jump to the problem. What we have there is a table (big one, but we'll need only a few fields) with some information about calls. It is called table1. There is also another one, absolutely the same structure, which is empty and we have to transfer the records from the first one.
    The shorter calls (less than 30 minutes) have segmentID = 'C1'.
    The longer calls (more than 30 minutes) are recorded as more than one record (1 for every 30 minutes). The first record (first 30 minutes of the call) has segmentID = 'C21'. It is the first so we have only one of these for every different call. Then we have the next (middle) parts of the call, which have segmentID = 'C22'. We can have more than 1 middle part and again the maximum minutes in each is 30 minutes. Then we have the last part (again max 30 minutes) with segmentID = 'C23'. As with the first one we can have only one last part.
    So far, so good. Now we need to insert these call records into the second table. The C1 are easy - one record = one call. But the partial ones we need to combine so they become one whole call. This means that we have to take one of the first parts (C21), find if there is a middle part (C22) with the same calling/called numbers and with 30 minutes difference in date/time, then search again if there is another C22 and so on. And last we have to search for the last part of the call (C23). In the course of these searches we sum the duration of each part so we can have the duration of the whole call at the end. Then we are ready to insert it in the new table as a single record, just with new duration.
    But here comes the problem with my code... The table has A LOT of records and this solution, despite the fact that it works (at least in the tests I've made so far), it's REALLY slow.
    As I said I'm new to PL/SQL and I know that this solution is really newbish, but I can't find another way of doing this.
    So I decided to come here and ask you for some tips on how to improve the performance of this.
    I think you are getting confused already, so I'm just going to put some comments in the code.
    I know it's not a procedure as it stands now, but it will be once I create a better code. I don't think it matters for now.
    DECLARE
    CURSOR cur_c21 IS
        select * from table1
        where segmentID = 'C21'
        order by start_date_of_call;     // in start_date_of_call is located the beginning of a specific part of the call. It's date format.
    CURSOR cur_c22 IS
        select * from table1
        where segmentID = 'C22'
        order by start_date_of_call;
    CURSOR cur_c22_2 IS
        select * from table1
        where segmentID = 'C22'
        order by start_date_of_call;  
    cursor cur_c23 is
        select * from table1
        where segmentID = 'C23'
        order by start_date_of_call;
    v_temp_rec_c22 cur_c22%ROWTYPE;
    v_dur table1.duration%TYPE;           // using this for storage of the duration of the call. It's number.
    BEGIN
    insert into table2
    select * from table1 where segmentID = 'C1';     // inserting the calls which are less than 30 minutes long
    -- and here starts the mess
    FOR rec_c21 IN cur_c21 LOOP        // taking the first part of the call
       v_dur := rec_c21.duration;      // recording it's duration
       FOR rec_c22 IN cur_c22 LOOP     // starting to check if there is a middle part for the call
          IF rec_c22.callingnumber = rec_c21.callingnumber AND rec_c22.callednumber = rec_c21.callednumber AND 
            (rec_c22.start_date_of_call - rec_c21.start_date_of_call) = (1/48)                
    /* if the numbers are the same and the date difference is 30 minutes then we have a middle part and we start searching for the next middle. */
          THEN
             v_dur := v_dur + rec_c22.duration;     // updating the new duration
             v_temp_rec_c22:=rec_c22;               // recording the current record in another variable because I use it for the next check
             FOR rec_c22_2 in cur_c22_2 LOOP
                IF rec_c22_2.callingnumber = v_temp_rec_c22.callingnumber AND rec_c22_2.callednumber = v_temp_rec_c22.callednumber AND 
                  (rec_c22_2.start_date_of_call - v_temp_rec_c22.start_date_of_call) = (1/48)        
    /* logic is the same as before but comparing with the last value in v_temp...
    And because the data in the cursors is ordered by date in ascending order it's easy to search for another middle parts. */
                THEN
                   v_dur:=v_dur + rec_c22_2.duration;
                   v_temp_rec_c22:=rec_c22_2;
                END IF;
             END LOOP;                     
          END IF;
          EXIT WHEN rec_c22.callingnumber = rec_c21.callingnumber AND rec_c22.callednumber = rec_c21.callednumber AND 
                   (rec_c22.start_date_of_call - rec_c21.start_date_of_call) = (1/48);       
    /* exiting the loop if we have at least one middle part.
    (I couldn't find if there is a way to write this more clean, like exit when (the above if is true) */
       END LOOP;
       FOR rec_c23 IN cur_c23 LOOP             
          IF (rec_c23.callingnumber = rec_c21.callingnumber AND rec_c23.callednumber = rec_c21.callednumber AND
             (rec_c23.start_date_of_call - rec_c21.start_date_of_call) = (1/48)) OR v_dur != rec_c21.duration          
    /* we should always have one last part, so we need this check.
    If we don't have the "v_dur != rec_c21.duration" part it will execute the code inside only if we don't have middle parts
    (yes we can have these situations in calls longer than 30 and less than 60 minutes). */
          THEN
             v_dur:=v_dur + rec_c23.duration;
             rec_c21.duration:=v_dur;               // updating the duration
             rec_c21.segmentID :='C1';
             INSERT INTO table2 VALUES rec_c21;     // inserting the whole call in table2
          END IF;
          EXIT WHEN (rec_c23.callingnumber = rec_c21.callingnumber AND rec_c23.callednumber = rec_c21.callednumber AND
                    (rec_c23.start_date_of_call - rec_c21.start_date_of_call) = (1/48)) OR v_dur != rec_c21.duration;                 
                    // exit the loop when the last part has been found.
       END LOOP;
    END LOOP;
    END;I'm using Oracle 11g and version 1.5.5 of SQL Developer.
    It's my first post here so hope this is the right sub-forum.
    I tried to explain everything as deep as possible (sorry if it's too long) and I kinda think that the code got somehow hard to read with all these comments. If you want I can remove them.
    I know I'm still missing a lot of knowledge so every help is really appreciated.
    Thank you very much in advance!

    Atiel wrote:
    Thanks for the suggestion but the thing is that segmentID must stay the same for all. The data in this field is just to tell us if this is a record of complete call (C1) or a partial record of a call(C21, C22, C23). So in table2 as every record will be a complete call the segmentID must be C1 for all.Well that's not a problem. You just hard code 'C1' instead of applying the row number as I was doing:
    SQL> ed
    Wrote file afiedt.buf
      1  select 'C1' as segmentid
      2        ,start_date_of_call, duration, callingnumber, callednumber
      3  from (
      4        select distinct
      5               min(start_date_of_call) over (partition by callingnumber, callednumber) as start_date_of_call
      6              ,sum(duration) over (partition by callingnumber, callednumber) as duration
      7              ,callingnumber
      8              ,callednumber
      9        from table1
    10*      )
    SQL> /
    SEGMENTID  START_DATE_OF_CALL     DURATION CALLINGNUMBER   CALLEDNUMBER
    C1         11-MAY-2012 12:13:10 8020557824 1982032041      0631432831624
    C1         15-MAR-2012 09:07:26  269352960 5581790386      0113496771567
    C1         31-JUL-2012 23:20:23  134676480 4799842978      0813391427349
    Another thing is that, as I said above, the actual table has 120 fields. Do I have to list them all manually if I use something similar?If that's what you need, then yes you would have to list them. You only get data if you tell it you want it. ;)
    Of course if you are taking the start_date_of_call, callingnumber and callednumber as the 'key' to the record, then you could join the results of the above back to the original table1 and pull out the rest of the columns that way...
    SQL> select * from table1;
    SEGMENTID  START_DATE_OF_CALL     DURATION CALLINGNUMBER   CALLEDNUMBER          COL1       COL2       COL3
    C1         31-JUL-2012 23:20:23  134676480 4799842978      0813391427349          556         40       5.32
    C21        15-MAR-2012 09:07:26  134676480 5581790386      0113496771567          219        100      10.16
    C23        11-MAY-2012 09:37:26  134676480 5581790386      0113496771567          321         73       2.71
    C21        11-MAY-2012 12:13:10 3892379648 1982032041      0631432831624          959         80       2.87
    C22        11-MAY-2012 12:43:10 3892379648 1982032041      0631432831624          375         57       8.91
    C22        11-MAY-2012 13:13:10  117899264 1982032041      0631432831624          778         27       1.42
    C23        11-MAY-2012 13:43:10  117899264 1982032041      0631432831624          308         97       3.26
    7 rows selected.
    SQL> ed
    Wrote file afiedt.buf
      1  with t2 as (
      2  select 'C1' as segmentid
      3        ,start_date_of_call, duration, callingnumber, callednumber
      4  from (
      5        select distinct
      6               min(start_date_of_call) over (partition by callingnumber, callednumber) as start_date_of_call
      7              ,sum(duration) over (partition by callingnumber, callednumber) as duration
      8              ,callingnumber
      9              ,callednumber
    10        from table1
    11       )
    12  )
    13  --
    14  select t2.segmentid, t2.start_date_of_call, t2.duration, t2.callingnumber, t2.callednumber
    15        ,t1.col1, t1.col2, t1.col3
    16  from   t2
    17         join table1 t1 on (   t1.start_date_of_call = t2.start_date_of_call
    18                           and t1.callingnumber = t2.callingnumber
    19                           and t1.callednumber = t2.callednumber
    20*                          )
    SQL> /
    SEGMENTID  START_DATE_OF_CALL     DURATION CALLINGNUMBER   CALLEDNUMBER          COL1       COL2       COL3
    C1         11-MAY-2012 12:13:10 8020557824 1982032041      0631432831624          959         80       2.87
    C1         15-MAR-2012 09:07:26  269352960 5581790386      0113496771567          219        100      10.16
    C1         31-JUL-2012 23:20:23  134676480 4799842978      0813391427349          556         40       5.32
    SQL>Of course this is pulling back the additional columns for the record that matches the start_date_of_call for that calling/called number pair, so if the values differed from row to row within the calling/called number pair you may need to aggregate those (take the minimum/maximum etc. as required) as part of the first query. If the values are known to be the same across all records in the group then you can just pick them up from the join to the original table as I coded in the above example (only in my example the data was different across all rows).

  • How to get data from a DSO to another

    Hi!
    I have two DSO created:
    DSO_1
    DSO_2
    DSO_2 contains values that I need to transfer over to DSO 1 without any direct connection through a transformation.
    These are the field in DSO 1:
    CALL_ID
    REQ_ID
    REQ_DURATION
    These are the field in DSO 2:
    REQ_ID
    DURATION
    When the REQ_ID are the same in both DSO's, i need the value in DURATION (DSO_2) to transfer over to the Infoonbject called "REQ_DURATION" (DSO_1).
    Can anyone help me, please? Is this a "bad" way of doing ut (both DSO contains about 70000 records). Is it easier just to make a transformation from DSO_2 to DSO_1, and make a routine when transfering?

    Hi Helge,
    Below is the Code,modify this as per your requirement !!!!!!!!!!
    Declarations
    $$ begin of global - insert your declaration only below this line  -
      TYPES : BEGIN OF TY_DSO1,
                   REQ_DURATION TYPE DSO1-REQ_DURATION,
                   REQ_DURATION TYPE    DSO1-REQ_DURATION
                   REQ_ID TYPE DSO1-REQ_ID,
                   END OF TY_DSO1.
       DATA  :   IT_TEST    TYPE STANDARD TABLE OF TY_DSO1,
                      WA_TEST    TYPE TY_DSO1.
    $$ begin of routine - insert your code only below this line        *-
    Start Routines
        IF SOURCE_PACKAGE[] IS NOT INITIAL.
          SELECT    /BIC/DURATION
                     INTO CORRESPONDING FIELDS OF TABLE IT_TEST
                      FROM u201CDSO2u201D
                      FOR ALL ENTRIES IN SOURCE_PACKAGE
                      WHERE REQ_ID = SOURCE_PACKAGE-REQ_ID.
        ENDIF.
        IF NOT IT_TEST IS INITIAL.
          SORT IT_TEST BY REQ_ID.
        ENDIF.
    Transfer ROutine
    Source Field = DURATION
    Target Field = REQ_DURATION
        READ TABLE IT_TEST INTO WA_TEST WITH KEY REQ_ID =
        SOURCE_FIELDS-REQ_ID
        BINARY SEARCH.
        IF SY-SUBRC = 0.
          RESULT = WA_TEST-DURATION.
        ENDIF.
    The field Request_duration will be updated with Duration when req ID are same for both DSO's.
    You may have to change the code a bit.
    Rgds
    SVU123

  • Ken Burns Effect Pollutes Everything

    If you're putting together a slideshow, do not turn on the KB Effect for anything. Ever. I hate to say this, for I love this feature. It has enhanced many of my slides. However, it's a sorcerer's apprentice.
    It causes nightmares once it's in your timeline. You can't update its durations, unless you delete the slide & start all over. I've found, oddly, that if a transition is connected, and you try to reduce the duration of the slide, after the transition is rendered, the slide, instead of having reduced duration, is actually increased by the amount of the reduction you wanted!
    Beware of using KBE for any photo in your iPhoto imported album. Once you invoke KBE on any photo, it pollutes every photo you click on, thereafter, whether you turn it off or not. Karl Petersen posted a message last month, praising this polluting feature of KBE:
    "The most important is that all of the Ken Burns settings, the KB checkbox, zoom, pan and duration are controlled by the LAST imported clip you made, or a previously-imported clip you clicked on. THAT's what sets the default setting for your next import(s). (A very nice feature, by the way, for it lets you apply the Ken Burns settings of one clip to the next photos you import. You don't have to reconfigure settings each time.)"
    First, it's boring to an audience to have repetitious effects. Second, I don't know what he means by "import." iM4, in moving a photo from the Pane to the Viewer (timeline), says it's importing it, but I already imported it from iPhoto4. Third, I'm not so lazy as to resent having to reconfigure individual photos, if it means I have control over what I want to reconfigure & what I don't want to reconfigure.
    Third, I wish Apple would realize users do have a brain: They don't need everything automated. There should be two buttons: KBE on for all, another KBE off for all. KBE off would allow the user to select which photos KBE is confined to. One thing I like about Microsoft is, it doesn't assume anything about the user. The user has choice & is always in control.
    I'm really at the point of not invoking KBE for anything, anymore. It's causing too much frustration, & it's not worth the time trying to figure it out, especially once the photo is in the timeline.
    BTW, what's the relationship between the Monitor, the Timeline, & the window in the upper right corner of the Photo Pane?

    The conclusions you've reached about the Ken Burns Effect are so strange it makes me wonder if you've understood how it works. Unlike the Ken Burns Effect in iPhoto — which adds the effect on-the-fly as a sequence of photos is played — the Ken Burns Effect in iMovie affects how the photo is imported and rendered. iMovie renders video — creates a movie clip — based on your Ken Burns settings.
    Remember, iMovie is all about creating video clips that play as part of a movie. iPhoto, on the other hand, has no movie. It simply displays a series of images. It never creates a movie until we export the slideshow to a QuickTime movie.
    Changing the Ken Burns settings of a photo in iPhoto simply changes how that image is played in the iPhoto slideshow. Changing the Ken Burns settings of an iMovie clip, on the other hand, changes how it is (immediately) rendered into a new video clip.
    You can't update its durations, unless you delete the slide & start all over
    Of course you can change a duration. Click on the rendered clip in the Timeline, change the duration, and Update the clip.
    Of course, if you've edited a previously-rendered clip — added a title or transition, for example — then it is no longer a KB clip. But if you remove the title or transition you can update the KB settings normally.
    First, it's boring to an audience to have repetitious effects.
    I never suggested you use the same KB effect on all your clips. I suggested that if you want to avoid having to reconfigure your Ken Burns settings before importing a photo, first click on a clip that already uses those KB settings. This saves time and considerable aggravation. I find this especially useful because the KB settings window is so clumsy (and buggy).
    Second, I don't know what he means by "import." iM
    Each time you add a photo from the iPhoto list to your iMovie project it is imported to the project. iMovie adds the photo to the project, then renders the video clip, if needed. (The imported photo is retained so you can Update the clip later, if you want.)
    Third, I'm not so lazy as to resent having to reconfigure individual photos, if it means I have control over what I want to reconfigure & what I don't want to reconfigure.
    Fine, iMovie lets you do that. There's nothing preventing you from configuring new Ken Burns settings for each photo. (My suggestion was to avoid having to do that unnecessarily.)
    Third, I wish Apple would realize users do have a brain:
    Apple DOES assume we have brains. And that we use them to learn how the program actually works, and why.
    There should be two buttons: KBE on for all, another KBE off for all. KBE off would allow the user to select which photos KBE is confined to.
    It's that point which makes me wonder if you've misunderstood something important. The Ken Burns settings we apply in iMovie do NOT control how the movie PLAYS in iMovie, at least not directly, like it does in iPhoto (and other slideshow software). The KB settings control how a clip is RENDERED when the photo is imported to iMovie. Once rendered, that clip is FIXED unless we re-render (Update) it. Changing its Ken Burns settings changes the clip ONLY if we re-render the clip.
    Another way to think about it is that the Ken Burns Effect affects how a photo is imported. Once imported, it does not affect how it plays.
    Once you invoke KBE on any photo, it pollutes every photo you click on, thereafter, whether you turn it off or not
    There's no pollution of anything. For the reasons I mentioned earlier, the settings do NOT change anything about existing photos or clips until you Apply those settings, which (usually) causes iMovie to re-render the clip.
    Try to re-think how Ken Burns works, where you assume iMovie is creating video, not just a series of images it plays in sequence. Those are two very different things.
    Karl

  • Support Package long time

    Hi guys,
    I have an issue, when i apply any support package, for example SAPKE60026, taking longtime for execute in the phase MAIN IMPORT. This is a new installation ECC 6.0 SR3 Windows, Oracle 10g 10.2.0.1, the SPAM version is 35 and the Kernel patch level is 179. the SID is CPD. When the installation finished i run the command with the user cpdadm:
    brconnect -u / -c -f stats -t all -o SAPSR3DB
    and
    brconnect -u / -c -f stats -t all -o SAPSR3
    in the past i have a similar issue with MAXDB, in that opportunity we fix it whit update statistics (duration= 3hours) but in this case the update statistics run in one minute, or less, I dont work with Oracle, is new for me.
    Thanks in advance
    Alberto Gil

    for starters, Oracle 10.2.0.1 is not supported, upgrade to 10.2.0.2 or 10.2,0.4
    also install latest minipatch on top of your Oracle version.
    adapt as per SAP note 830576.
    you can also consider using DOWNTIME MINIMIZED option from SPAM, this way, the main import step can be run during online time and will minimized your offline downtime.

  • Custom Field not working

    Hi,
    I've made a project level custom field in PWA that takes "Total Slack" (in-built duration field) and based on a switch formula gives out 3 values viz. High, Medium, Low The field formula is as mentioned below:
    Switch([Total Slack] <= -7, "High", [Total Slack] >= 0, "Low", [Total Slack] > -7 And [Total Slack] <= -1, "Medium")
    The formula works very well and displays value as High for projects with Total slack less than -7. However, the formula is not working for Total Slack between -7 and -1 i.e. greater than - 7 and less than -1. The formula returns the value as "High"
    only.
    I've tried editing and publishing the project both from PWA as well as Proj Professional after updating task duration to calculate Total Slack.
    This field is critical and used in many views. I am looking for a solution to resolve this issue. Any help in this regard would be appreciated.

    The next step then would be to move away from the SWITCH statement and use a nested if statement, along the lines of....
    iif ([Total
    Slack]/[Minutes
    Per
    Day]<=-7,"High",iif([Total
    Slack]/[Minutes
    Per
    Day]<=-1,"Medium","Low"))
    Please note that I haven't validated this formula as I don't have MSProject on this PC, but it should be good enough to take you forward.
    Ben Howard [MVP] | web |
    blog |
    book | P2O

  • Delete a row in a table should affect in another table specified row

    hello ,
    my problem is let us  assume i have two table related to each other as
    dish       [d_id as primary key ,d_name,d_code,d_cost]
    dish_outlet    [id as primary key,d_id as foreign key,outlet_name,amt]
    i set foreign constraint in dish_outlet as foreign basetable as [dish_outlet] , foreign key as [d_id] , primary key table as [dish],primary key as [d_id].
    now i want to do as delete a row where d_id is let us suppose '1'  in dish table but also dish_outlet whose d_id will be '1' should also get deletd
    my issue is on [DELETE FROM dish WHERE d_id ='1'] query a row is deleted from dish table only.
    give a opinion or solution to my problem i need a query for vb.net and if foreign key setting is mistaken then need a procedure to solve it.
    im using vb.net with sqlserver 2005 with sqlserver management studio
    aziz

    use ondelete cascade option
    Please see below example for your reference
    CREATE TABLE dbo.cource
          courceID     INT   PRIMARY KEY,
          Name        VARCHAR(50)
    CREATE TABLE dbo.student
         studentID     INT   PRIMARY KEY,
         name     VARCHAR(50),
         courceID     INT   REFERENCES cource(courceID)
                            ON DELETE SET NULL
                            ON UPDATE CASCADE,
          Duration    TIME(0)
    INSERT      INTO dbo.cource(courceID  , Name)
    VALUES      (1,'c1'), (4,'c2')
    INSERT      INTO dbo.student (studentID,name, courceID, Duration)
    VALUES      (1, 's1' , 1, '00:07:08'),
                (2, 's2', 1, '00:07:52'),
                (3, 's3', 1, '00:07:56'),
                (4, 's4', 4, '00:05:12')
    DELETE FROM dbo.cource
    WHERE courceID = 1
    SELECT      A.courceid, A.Name,
                T.studentID, T.name, T.courceID, T.Duration
    FROM        dbo.cource  A
    RIGHT JOIN dbo.student T ON A.courceid = T.courceID
                

Maybe you are looking for

  • Creating mobile web dynpro application which customized theme

    Hi guys, I have created a mobile web dynpro application and a theme with Theme Editor. Then I have appended this theme with the sap-cssurl parameter to my application. <b>my_application? sap-cssurl=http://host:port/webdynpro/resources/sap.com/tcwddis

  • Account Doc is not created

    Hi, The original credit memo document 96873997, was cancelled because the wrong part number was entered on the order. They reversed the Goods Issue and deleted the delivery and deleted the ZO. Now what has happened is accounting can not clear documen

  • Setup system for Oracle practice

    Hi, Because I am preparing for OCP DBA 9i test, I want to set up environment on my personal Laptop so that I can do practice simultaneously. Could you share me what software I need and what should be system requirements? My laptop configuration: Dell

  • Oracle Application Server 10.1.3 on WinXP (x64)

    Hello, i would like to know, if there is a 64bit-Version of Oracle Application Server 10.1.3 available which can be installed on Windows XP (x64) or if at last a release date for such version exists. kind regards chris

  • OIM installation issue

    hi i am installing oracle identity management 11g. it will take a wjhole day in configuration process and at last it always give me a new errors: the steps i am following are 1. installed web logic server 10.3 2 installed oracle database 11g r2 3 ins