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,
AviHi,
@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
HrishiI'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!
-
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
SivaThanks 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 lotHi 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 -
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,
VenkatHi 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 -
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 Gilfor 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. -
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
azizuse 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
-
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
-
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