· 6 years ago · Nov 08, 2019, 08:28 AM
1///////////////////////////////////////////////////////////////
2// Events processing
3
4&AtServer
5Procedure OnCreateAtServer(Cancel, StantardProcessing)
6
7 Var Text;
8
9 Items.DeleteMode.ChoiceList.Clear();
10 Text = NStr("ru = 'Полное удаление%1Удаление всех помеченных объектов'; sys = 'RemoveObjects.Mode.Full'", "ru");
11 Text = StrReplace(Text, "%1", Chars.LF);
12 Items.DeleteMode.ChoiceList.Add("Full", Text);
13 Text = NStr("ru = 'Выборочное удаление%1Позволяет предварительно выбрать объекты%1для удаления из списка помеченных'; sys = 'RemoveObjects.Mode.Selected'", "ru");
14 Text = StrReplace(Text, "%1", Chars.LF);
15 Items.DeleteMode.ChoiceList.Add("Selected", Text);
16
17 DeleteMode = "Full";
18
19EndProcedure
20
21&AtServer
22Function FindOrCreateTreeNode(TreeRows, Value, Presentation, Mark, CanDelete, CanOpen, Picture)
23
24 Var Node;
25
26 // Try to find existing node in TreeRows without childs
27 Node = TreeRows.Find(Value, "Value", False);
28 If Node = Undefined Then
29
30 // Such node not exists, let`s create new
31 Node = TreeRows.Add();
32 Node.Value = Value;
33 Node.Presentation = Presentation;
34 Node.CanDelete = CanDelete;
35 Node.CanOpen = CanOpen;
36 Node.Mark = ?(CanDelete, Mark, False);
37 Node.Picture = Picture;
38
39 EndIf;
40
41 Return Node;
42
43EndFunction
44
45&AtServer
46Function FindOrCreateTreeNodeWithPicture(TreeRows, Value, Presentation, Picture, CanOpen)
47
48 Var Node;
49
50 // Try to find existing node in TreeRows without childs
51 Node = TreeRows.Find(Value, "Value", False);
52 If Node = Undefined Then
53
54 // Such node not exists, let`s create new
55 Node = TreeRows.Add();
56 Node.Value = Value;
57 Node.Presentation = Presentation;
58 Node.Picture = Picture;
59 Node.CanOpen = CanOpen;
60
61 EndIf;
62
63 Return Node;
64
65EndFunction
66
67&AtServer
68Procedure FillTreeOfMarked()
69
70 Var TreeOfMarked, ArrayOfMarked, TitleString, ArrayOfMarkedItem;
71 Var MetadataObject, MetadataObjectPresentation, CanDelete;
72 Var Picture, MetadataObjectRow;
73
74 // fill tree of marked
75 TreeOfMarked = FormAttributeToValue("ListOfMarked");
76 TreeOfMarked.Rows.Clear();
77 // marked processing
78 ArrayOfMarked = FindMarkedForDeletion();
79 TitleString = NStr("ru = 'Объекты, помеченные на удаление (всего объектов: %1)';sys = ''", "ru");
80 Items.ListOfMarked.Title = StrReplace(TitleString, "%1", ArrayOfMarked.Count());
81
82 For Each ArrayOfMarkedItem In ArrayOfMarked Do
83
84 MetadataObject = ArrayOfMarkedItem.Metadata();
85 MetadataObjectPresentation = MetadataObject.Presentation();
86 CanDelete = AccessRight("InteractiveDeleteMarked", MetadataObject);
87 If Not CanDelete Then
88
89 Continue;
90
91 EndIf;
92
93 Picture = GetPictureFromMetadata(MetadataObject);
94 MetadataObjectRow = FindOrCreateTreeNode(TreeOfMarked.Rows, String(MetadataObject), MetadataObjectPresentation, True, CanDelete, 0, Picture);
95 FindOrCreateTreeNode(MetadataObjectRow.Rows, ArrayOfMarkedItem, GetDataPresentation(MetadataObject, ArrayOfMarkedItem) + " (" + MetadataObjectPresentation + ")", True, CanDelete, IsObjectCanOpen(MetadataObject), Picture);
96
97 EndDo;
98
99 TreeOfMarked.Rows.Sort("Value", True);
100 For Each MetadataObjectRow In TreeOfMarked.Rows Do
101
102 // create presentation for rows of metadata object
103 MetadataObjectRow.Presentation = MetadataObjectRow.Presentation + " (" + MetadataObjectRow.Rows.Count() + ")";
104
105 EndDo;
106
107 ValueToFormAttribute(TreeOfMarked, "ListOfMarked");
108
109EndProcedure
110
111&AtServer
112Function DoRemoveAtServer()
113
114 Var ToRemove, RemovedList, Types, Tree, RemoveObject, MetadaRowsCollection, MetadataObjectRow;
115 Var ReferenceRowsCollection, ReferenceRow, ObjectType, NowActivePage, FindedItems, NeedExclusiveMode;
116 Var UnremovedTypes, FindedItem, UnremovedItem, UnremovedMetadata, UnremovedMetadataPresentation,UnremovedObjectPresentation;
117 Var ReferencedItem, ReferenceMetadata, ReferencedMetadataPresentation, ReferenceObjectPresentation;
118 Var UnremovedBDObjectReferenceRow, RemovedTypes, UnremovedObjectsCount, RemovedObjectsCount;
119
120 // List of marked objects
121 ToRemove = New Array;
122 // List of deleted objects
123 RemovedList = New Array;
124 // List of types of removal
125 Types = New Array;
126
127 If DeleteMode = "Full" Then
128 // Let's get whole marked list
129 ToRemove = FindMarkedForDeletion();
130 For Each RemoveObject in ToRemove Do
131 If AccessRight("InteractiveDeleteMarked", RemoveObject.Metadata()) Then
132 RemovedList.Add(RemoveObject);
133 EndIf;
134 EndDo;
135 Else
136 // Fill an array by references to selected marked items
137 MetadataRowsCollection = ListOfMarked.GetItems();
138 For Each MetadataObjectRow In MetadataRowsCollection Do
139 ReferenceRowsCollection = MetadataObjectRow.GetItems();
140 For Each ReferenceRow In ReferenceRowsCollection Do
141 If ReferenceRow.Mark Then
142 RemovedList.Add(ReferenceRow.Value);
143 EndIf;
144 EndDo;
145 EndDo;
146 EndIf;
147
148
149 For Each RemoveObject in RemovedList Do
150 ObjectType = TypeOf(RemoveObject);
151 If Types.Find(ObjectType) = Undefined Then
152 Types.Add(ObjectType);
153 EndIf;
154 EndDo;
155
156 NowActivePage = Items.FormPages.CurrentPage;
157 Items.FormPages.CurrentPage = Items.RemoveResults;
158 // removing doing
159 FindedItems = New ValueTable;
160 Try
161 NeedExclusiveMode = (Not ExclusiveMode()) AND IsExclusiveModeNeeded();
162 If NeedExclusiveMode Then
163 //SetExclusiveMode(True);
164 EndIf;
165 DeleteObjects(RemovedList, True, FindedItems);
166 FindedItems.Columns.Add("Counter", New TypeDescription("Number"));
167 FindedItems.FillValues(1, "Counter");
168 If NeedExclusiveMode Then
169 SetExclusiveMode(False);
170 EndIf;
171 Except
172 If NeedExclusiveMode AND ExclusiveMode() Then
173 SetExclusiveMode(False);
174 EndIf;
175 Items.FormPages.CurrentPage = NowActivePage;
176 Raise;
177
178 EndTry;
179
180 // create the table of unremoved items
181 UnremovedTypes = New Array;
182 TreeOfUnremoved.GetItems().Clear();
183 Tree = FormAttributeToValue("TreeOfUnremoved");
184 For Each FindedItem In FindedItems Do
185
186 // unremoved item
187 UnremovedItem = FindedItem[0];
188 UnremovedMetadata = UnremovedItem.Metadata();
189 UnremovedMetadataPresentation = UnremovedItem.Metadata().Presentation();
190 UnremovedObjectPresentation = GetDataPresentation(UnremovedItem.Metadata(), UnremovedItem);
191
192 // reference item
193 ReferencedItem = FindedItem[1];
194 ReferenceMetadata = FindedItem[2];
195 ReferencedMetadataPresentation = ReferenceMetadata.Presentation();
196 ReferenceObjectPresentation = GetDataPresentation(ReferenceMetadata, ReferencedItem);
197
198 //metadata node
199 MetadataObjectRow = FindOrCreateTreeNodeWithPicture(Tree.Rows, String(UnremovedMetadata), UnremovedMetadataPresentation, GetPictureFromMetadata(UnremovedItem.Metadata()), 0);
200 //unremoved object node
201 UnremovedBDObjectReferenceRow = FindOrCreateTreeNodeWithPicture(MetadataObjectRow.Rows, UnremovedItem, UnremovedObjectPresentation, GetPictureFromMetadata(UnremovedItem.Metadata()), IsObjectCanOpen(UnremovedMetadata));
202 //unremoved object reference node
203 FindOrCreateTreeNodeWithPicture(UnremovedBDObjectReferenceRow.Rows, ReferencedItem, ReferenceObjectPresentation + " (" + ReferencedMetadataPresentation + ")", GetPictureFromMetadata(ReferenceMetadata), IsObjectCanOpen(ReferenceMetadata));
204
205 ObjectType = TypeOf(UnremovedItem);
206 If UnremovedTypes.Find(ObjectType) = Undefined Then
207 UnremovedTypes.Add(ObjectType);
208 EndIf;
209 EndDo;
210
211 Tree.Rows.Sort("Value", True);
212 ValueToFormAttribute(Tree, "TreeOfUnremoved");
213
214 // calculate unremoved objects
215 FindedItems.GroupBy(FindedItems.Columns[0].Name, "Counter");
216 UnremovedObjectsCount = FindedItems.Count();
217 RemovedObjectsCount = RemovedList.Count() - UnremovedObjectsCount;
218
219 // notify object list with success removing
220 RemovedTypes = New Array;
221 For Each RemoveType in Types Do
222 If UnremovedTypes.Find(RemoveType) = Undefined Then
223 RemovedTypes.Add(RemoveType);
224 EndIf;
225 EndDo;
226
227 ResultsString = NStr("ru='Удалено объектов:';sys='Processing.RemoveObjects'", "ru") + " " + RemovedObjectsCount;
228 If UnremovedObjectsCount > 0 Then
229 ResultsString = ResultsString + Chars.LF;
230 ResultsString = ResultsString + NStr("ru='Невозможно удалить объектов:';sys='Processing.UnremovedObjects'", "ru") + " " + UnremovedObjectsCount + NStr("ru=', т.к. в информационной базе на них ссылаются другие объекты.';sys='Processing.InfoString'", "ru") + Chars.LF;
231 ResultsString = ResultsString + NStr("ru='Для просмотра списка таких объектов нажмите кнопку Далее >>';sys='Processing.UnremoveListView'", "ru");
232 EndIf;
233
234 Return RemovedTypes;
235
236EndFunction
237
238&AtServerNoContext
239Function Is833OrHigherCompatible()
240
241 Return
242 Metadata.CompatibilityMode <> Metadata.ObjectProperties.CompatibilityMode.Version8_3_2
243 And Metadata.CompatibilityMode <> Metadata.ObjectProperties.CompatibilityMode.Version8_3_1
244 And Metadata.CompatibilityMode <> Metadata.ObjectProperties.CompatibilityMode.Version8_2_16
245 And Metadata.CompatibilityMode <> Metadata.ObjectProperties.CompatibilityMode.Version8_2_13
246 And Metadata.CompatibilityMode <> Metadata.ObjectProperties.CompatibilityMode.Version8_1;
247
248EndFunction
249
250&AtServerNoContext
251Function GetPictureFromMetadata(MetaObject)
252
253 Var PicArray;
254
255 PicArray = New Array;
256 PicArray.Add(New Picture); // 0
257 PicArray.Add(PictureLib.Constant); // 1
258 PicArray.Add(PictureLib.CatalogObject); // 2
259 PicArray.Add(PictureLib.DocumentObject); // 3
260 PicArray.Add(PictureLib.AccumulationRegister); // 4
261 PicArray.Add(PictureLib.AccountingRegister); // 5
262 PicArray.Add(PictureLib.CalculationRegister); // 6
263 PicArray.Add(PictureLib.InformationRegister); // 7
264 PicArray.Add(PictureLib.BusinessProcessObject); // 8
265 PicArray.Add(PictureLib.TaskObject); // 9
266 PicArray.Add(PictureLib.ChartOfCharacteristicTypesObject); // 10
267 PicArray.Add(PictureLib.ChartOfCalculationTypesObject); // 11
268 PicArray.Add(PictureLib.ChartOfAccountsObject); // 12
269 PicArray.Add(PictureLib.ExternalDataSourceTable); // 13
270 PicArray.Add(PictureLib.ExternalDataSourceTable); // 14
271
272 Return PicArray[GetMetaType(MetaObject)];
273
274EndFunction
275
276&AtServerNoContext
277Function GetMetaType(MetaObject)
278
279 Var MetaType, ExtSource;
280
281 MetaType = 0;
282 If Metadata.Constants.Contains(MetaObject) Then
283
284 MetaType = 1;
285 ElsIf Metadata.Catalogs.Contains(MetaObject) Then
286
287 MetaType = 2;
288 ElsIf Metadata.Documents.Contains(MetaObject) Then
289
290 MetaType = 3;
291 ElsIf Metadata.AccumulationRegisters.Contains(MetaObject) Then
292
293 MetaType = 4;
294 ElsIf Metadata.AccountingRegisters.Contains(MetaObject) Then
295
296 MetaType = 5;
297 ElsIf Metadata.CalculationRegisters.Contains(MetaObject) Then
298
299 MetaType = 6;
300 ElsIf Metadata.InformationRegisters.Contains(MetaObject) Then
301
302 MetaType = 7;
303 ElsIf Metadata.BusinessProcesses.Contains(MetaObject) Then
304
305 MetaType = 8;
306 ElsIf Metadata.Tasks.Contains(MetaObject) Then
307
308 MetaType = 9;
309 ElsIf Metadata.ChartsOfCharacteristicTypes.Contains(MetaObject) Then
310
311 MetaType = 10;
312 ElsIf Metadata.ChartsOfCalculationTypes.Contains(MetaObject) Then
313
314 MetaType = 11;
315 ElsIf Metadata.ChartsOfAccounts.Contains(MetaObject) Then
316
317 MetaType = 12;
318 Else
319 For Each ExtSource In Metadata.ExternalDataSources Do
320
321 If ExtSource.Tables.Contains(MetaObject) Then
322
323 If MetaObject.TableDataType = Metadata.ObjectProperties.ExternalDataSourceTableDataType.ObjectData Then
324
325 MetaType = 14; // object table
326
327 Else
328
329 MetaType = 13; // non-object table
330
331 EndIf;
332 Break;
333 EndIf;
334 EndDo;
335 EndIf;
336
337 Return MetaType;
338
339EndFunction
340
341&AtServerNoContext
342Function GetDataPresentation(MetaObject, DataObject)
343
344 Var Presentation, Dim, MetaType;
345
346 MetaType = GetMetaType(MetaObject);
347 Presentation = String(DataObject);
348 If MetaType = 2 OR MetaType = 3 OR MetaType = 8 OR MetaType = 9 OR MetaType = 10 OR MetaType = 11 OR MetaType = 12 OR MetaType = 14 Then
349
350 Presentation = String(DataObject);
351
352 ElsIf MetaType = 4 OR MetaType = 5 OR MetaType = 6 OR MetaType = 7 Then
353
354 Presentation = "";
355 If MetaObject.InformationRegisterPeriodicity <> Metadata.ObjectProperties.InformationRegisterPeriodicity.Nonperiodical Then
356
357 Presentation = String(DataObject.Period);
358
359 EndIf;
360
361 If MetaObject.WriteMode = Metadata.ObjectProperties.RegisterWriteMode.RecorderSubordinate Then
362
363 Presentation = ?(StrLen(Presentation) = 0, "", Presentation + "; ") + String(DataObject.Recorder);
364
365 EndIf;
366
367 For Each Dim in MetaObject.Dimensions Do
368
369 Presentation = ?(StrLen(Presentation) = 0, "", Presentation + "; ") + String(DataObject[Dim.Name]);
370
371 EndDo;
372
373 ElsIf MetaType = 13 Then
374
375 Presentation = "";
376 For Each Dim in MetaObject.KeyFields Do
377
378 Presentation = ?(StrLen(Presentation) = 0, "", Presentation + "; ") + String(DataObject[Dim.Name]);
379
380 EndDo;
381
382 EndIf;
383
384 Return Presentation;
385
386EndFunction
387
388&AtServerNoContext
389Function IsObjectCanOpen(MetaObject)
390
391 Var CanOpen;
392
393 CanOpen = New Array;
394 CanOpen.Add(False); // 0
395 CanOpen.Add(True); // 1
396 CanOpen.Add(True); // 2
397 CanOpen.Add(True); // 3
398 CanOpen.Add(False); // 4
399 CanOpen.Add(False); // 5
400 CanOpen.Add(False); // 6
401 CanOpen.Add(True); // 7
402 CanOpen.Add(True); // 8
403 CanOpen.Add(True); // 9
404 CanOpen.Add(True); // 10
405 CanOpen.Add(True); // 11
406 CanOpen.Add(True); // 12
407 CanOpen.Add(True); // 13 non-object table
408 CanOpen.Add(True); // 14 object table
409
410 Return CanOpen[GetMetaType(MetaObject)];
411
412EndFunction
413
414// Определяет, разделитель отключен или нет с помощью условного разделения
415&AtServerNoContext
416Function IsConditionalSeparatedOff(Separator)
417
418 Var MetadataObject, CommonAttribute, caUse;
419
420 If Separator.ConditionalSeparation = Undefined Then
421 // разделитель не использует условного разделения - он условно НЕ выключен
422 Return False;
423 EndIf;
424
425 // проверим, что разделитель отключен условным разделением
426 If Metadata.Constants.Contains(Separator.ConditionalSeparation) Then
427 // условное разделение задано константой
428
429 // константа Истина - включено разделение, возврат FALSE
430 // константа Ложь - отключено разделение, возврат ИСТИНА
431 Return Not Constants[Separator.ConditionalSeparation.Name].Get();
432 Else
433 // условное разделение может быть реквизитом ссылочного типа
434 // надо получить тип объекта, чей реквизит используется, найти разделитель с таким типом и из параметра сеанса достать значение реквизита
435
436 // получим родительский объект для реквизита - сам объект вида справочник, документ и т.д.
437 MetadataObject = Separator.ConditionalSeparation.Parent;
438 // найдем общий реквизит соответствующего типа
439 For Each CommonAttribute In Metadata.CommonAttributes Do
440 If CommonAttribute.Type = MetadataObject Then
441 If CommonAttribute.DataSeparationUse = Undefined Then
442 // у данного реквизита не используется условное разделение
443 caUse = SessionParameters[CommonAttribute.DataSeparationUse.Name];
444 caValue = SessionParameters[CommonAttribute.DataSeparationValue.Name];
445 if caUse AND caValue.EmptyRef() Then
446 // общий реквизит используется и пустая ссылка - включено разделение
447 Return False;
448 ElsIf Not caUse Then
449 // общий реквизит не используется - отключено разделение
450 Return True;
451 Else
452 // реквизит Истина - включено разделение, возврат FALSE
453 // реквизит Ложь - выключено разделение, возврат ИСТИНА
454 Return Not caValue[Separator.ConditionalSeparation.Name];
455 EndIf;
456 Else
457 // у данного реквизита используется условное разделение
458 Return IsConditionalSeparatedOff(CommonAttribute);
459 EndIf;
460 EndIf;
461 EndDo;
462 EndIf;
463 Return True;
464
465EndFunction
466
467&AtServerNoContext
468Function IsExclusiveModeNeeded()
469
470 Var SetExclusiveMode, CommonAttribute;
471
472 If Is833OrHigherCompatible() Then
473 // если режим совместимости выше версии 8.3.2 - всегда нужен монопольный режим
474 // если нет - проверяем все как раньше
475 Return True;
476 EndIf;
477 SetExclusiveMode = True;
478 SetPrivilegedMode(True);
479 For Each CommonAttribute In Metadata.CommonAttributes Do
480 If CommonAttribute.DataSeparation = Metadata.ObjectProperties.CommonAttributeDataSeparation.Separate Then
481 If SessionParameters[CommonAttribute.DataSeparationUse.Name] AND Not IsConditionalSeparatedOff(CommonAttribute) Then
482 Return False;
483 EndIf;
484 EndIf;
485 EndDo;
486 SetPrivilegedMode(False);
487 Return SetExclusiveMode;
488
489EndFunction
490
491&AtClient
492Procedure OnOpen(Cancel)
493
494 Items.FormPages.PagesRepresentation = FormPagesRepresentation.None;
495 ButtonVisibility();
496
497EndProcedure
498
499&AtClient
500Procedure SetMarkInList(Data, Mark, CheckParent)
501
502 Var RowElements, Parent, ParentMark;
503
504 Data.Mark = Mark;
505
506 // set to childs
507 RowElements = Data.GetItems();
508 For Each Item In RowElements Do
509 SetMarkInList(Item, Mark, False);
510 EndDo;
511
512 // Check parent
513 Parent = Data.GetParent();
514 If CheckParent And Parent <> Undefined Then
515 ParentMark = True;
516 RowElements = Parent.GetItems();
517 For Each Item In RowElements Do
518 If Not Item.Mark Then
519 ParentMark = False;
520 Break;
521 EndIf;
522 EndDo;
523 If ParentMark <> Parent.Mark Then
524 Parent.Mark = ParentMark;
525 EndIf;
526 EndIf;
527
528EndProcedure
529
530&AtClient
531Procedure OnDeleteModeChanged(Item)
532
533 ButtonVisibility();
534
535EndProcedure
536
537&AtClient
538Procedure OnMarkChanged(Item)
539
540 Var CurrentData;
541
542 CurrentData = Items.ListOfMarked.CurrentData;
543 If CurrentData = Undefined Then
544 Return;
545 EndIf;
546
547 If Not CurrentData.CanDelete Then
548 CurrentData.Mark = False;
549 Return;
550 EndIf;
551 SetMarkInList(CurrentData, CurrentData.Mark, True);
552
553EndProcedure
554
555&AtClient
556Procedure DoMarkedSetAll(Command)
557
558 Var ListItems;
559
560 ListItems = ListOfMarked.GetItems();
561 For Each Item In ListItems Do
562 SetMarkInList(Item, True, True);
563 EndDo;
564
565EndProcedure
566
567&AtClient
568Procedure DoMarkedClearAll(Command)
569
570 Var ListItems;
571
572 ListItems = ListOfMarked.GetItems();
573 For Each Item In ListItems Do
574 SetMarkInList(Item, False, True);
575 EndDo;
576
577EndProcedure
578
579&AtClient
580Procedure OnTreeOfUnremovedSelection(Item, SelectedRow, Field, StantardProcessing)
581
582 Var CurrentData;
583
584 CurrentData = Items.TreeOfUnremoved.CurrentData;
585 If CurrentData = Undefined Then
586 Return;
587 EndIf;
588
589 If CurrentData.GetItems().Count() = 0 and CurrentData.CanOpen Then
590 // this is row of object due to which is impossible to delete marked and selected
591 StantardProcessing = False;
592 //OpenValue(CurrentData.Value);
593 ShowValue(, CurrentData.Value);
594 EndIf;
595
596EndProcedure
597
598&AtClient
599Procedure OnListOfMarkedChoice(Item, SelectedRow, Field, StantardProcessing)
600
601 Var CurrentData;
602
603 CurrentData = Items.ListOfMarked.CurrentData;
604 If CurrentData = Undefined Then
605 Return;
606 EndIf;
607 If CurrentData.GetItems().Count() = 0 and CurrentData.CanOpen Then
608 // this is the row of marked object
609 StantardProcessing = False;
610 //OpenValue(CurrentData.Value);
611 ShowValue(, CurrentData.Value);
612 EndIf;
613
614EndProcedure
615
616&AtClient
617Procedure DoForward()
618
619 Var CurentPage;
620
621 CurrentPage = Items.FormPages.CurrentPage;
622 If CurrentPage = Items.RemoveModeChoice AND DeleteMode = "Selected" Then
623 Status(NStr("ru='Выполняется поиск помеченных на удаление объектов';sys='Processing.DoFindTip'", "ru"));
624 FillTreeOfMarked();
625 Items.FormPages.CurrentPage = Items.Marked;
626 ElsIf CurrentPage = Items.RemoveModeChoice AND DeleteMode = "Full" Then
627 DoRemove();
628 Items.FormPages.CurrentPage = Items.RemoveResults;
629 ElsIf CurrentPage = Items.Marked Then
630 DoRemove();
631 Items.FormPages.CurrentPage = Items.RemoveResults;
632 ElsIf CurrentPage = Items.RemoveResults Then
633 If TreeOfUnremoved.GetItems().Count() <> 0 Then
634 Items.FormPages.CurrentPage = Items.UnremoveReasons;
635 EndIf;
636 EndIf;
637 ButtonVisibility();
638
639EndProcedure
640
641&AtClient
642Procedure DoBack(Command)
643
644 Var CurrentPage;
645
646 CurrentPage = Items.FormPages.CurrentPage;
647 If CurrentPage = Items.Marked Then
648 Items.FormPages.CurrentPage = Items.RemoveModeChoice;
649 EndIf;
650 ButtonVisibility();
651
652EndProcedure
653
654&AtClient
655Procedure ButtonVisibility()
656
657 Var CurrentPage, ForwardTitle;
658
659 CurrentPage = Items.FormPages.CurrentPage;
660 ForwardTitle = NStr("ru='Далее >>';sys='Processing.Next'", "ru");
661 If CurrentPage = Items.RemoveModeChoice Then
662 Items.CommandForward.DefaultButton = True;
663 Items.CommandBack.Visible = False;
664 Items.CommandForward.Visible = True;
665 ForwardTitle = ?(DeleteMode = "Full", NStr("ru='Удалить';sys='Processing.Remove'", "ru"), ForwardTitle);
666 ElsIf CurrentPage = Items.RemoveResults Then
667 If TreeOfUnremoved.GetItems().Count() = 0 Then
668 Items.Close.DefaultButton = True;
669 Items.CommandBack.Visible = False;
670 Items.CommandForward.Visible = False;
671 Else
672 Items.CommandForward.DefaultButton = True;
673 Items.CommandBack.Visible = False;
674 Items.CommandForward.Visible = True;
675 EndIf;
676 ElsIf CurrentPage = Items.Marked Then
677 Items.CommandForward.DefaultButton = True;
678 Items.CommandBack.Visible = True;
679 Items.CommandForward.Visible = True;
680 ForwardTitle = NStr("ru='Удалить';sys='Processing.Remove'", "ru");
681 ElsIf CurrentPage = Items.UnremoveReasons Then
682 Items.Close.DefaultButton = True;
683 Items.CommandBack.Visible = False;
684 Items.CommandForward.Visible = False;
685 EndIf;
686 Items.CommandForward.Title = ForwardTitle;
687
688EndProcedure
689
690&AtClient
691Procedure DoRemove()
692
693 Var RemovedTypes;
694
695 If DeleteMode = "Full" Then
696 Status(NStr("ru='Выполняется поиск и удаление помеченных объектов';sys='Processing.DoFindRemoveTip'", "ru"));
697 Else
698 Status(NStr("ru='Выполняется удаление выбранных объектов';sys='Processing.RemovingProcess'", "ru"));
699 EndIf;
700
701 RemovedTypes = DoRemoveAtServer();
702 For Each RemoveType in RemovedTypes Do
703 NotifyChanged(RemoveType);
704 EndDo;
705
706 If TreeOfUnremoved.GetItems().Count() = 0 Then
707 Status(NStr("ru='Удаление завершено успешно';sys='Processing.RemoveSuccessComplet'", "ru"));
708 Else
709 Status(NStr("ru='Обнаружены объекты, которые невозможно удалить';sys='Processing.FoundedUnremoveObjects'", "ru"), , , PictureLib.Stop);
710 EndIf;
711
712EndProcedure