Студия/OnAttachedButtons

From SunFlurry wiki
Revision as of 09:52, 20 August 2020 by Admin (talk | contribs) (Created page with "{{infobox function |name=OnAttachedButtons |element=Текстовое поле, Редактируемое поле, Поле со списком, Список значени...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
  OnAttachedButtons (Визуальные события)
Применимость:Текстовое поле, Редактируемое поле, Поле со списком, Список значений, Группа страниц с закладками, Таблица значений, Внедренная электронная таблица, Дерево значений
Тип события:Прерывающее
Статус разработки: Реализована

Событие, возникающее при нажатии на связанный элемент (саму кнопку или дополнительную кнопку выбора из меню). Событие работает как для линейных, для табличных элементов, так и при редактировании ячеек таблицы или электронной таблицы.

Аргументы

  • <Index (INT)> - Цифровой идентификатор активированного связанного элемента (см. следующую статью).
  • <Method (INT)> - Способ вызова, может принимать следующие значения:
    • 0 -- был активирован сам элемент
    • 1 -- была активирована дополнительная кнопка слева от элемента (см. Связанные элементы).
  • <Object> - Используется в некоторых вызовах (к примеру, при открытии в режиме редактирования), указывает на объект операции (часто содержимое поля для редактирования).
  • <Result (INT)> - (возможен аргумент-переменная (ByRef)) Переменная результата может принимать значения:
    • 0 (по умолчанию) -- Событие обработано и вызывать глобальное событие не требуется (цепочка вызова событий останавливается).
    • 1 -- Событие не обработано, будет продолжена цепочка вызова (см. OnAttachedButtons).

Примеры

//Пример события OnAttachedButtons для таблицы строчной части документа
aEl:=Form.Object;
MainTab:=Form.MainTab.Value;
aTab:=aEl.LineParts("Номенклатура");
aTab.CurLine:=MainTab.SelectedLine;
If (Index=_ABB_DEL)or(Index=_ABB_DELONE) Then
  //Изменить обработку стандартного события
  If MainTab.SelectedLine<1 Then
    Exit;
  EndIf;
  If AskQuestion("Удалить выбранную строку таблицы, вы уверены?",Q_QUESTION+Q_YESNO)<>R_YES Then
    Exit;
  EndIf;
  aTab.Remove(aTab.CurLine);
  глТаблицаУкладочнойТары(aEl);
  Form.CallOnStatusChange();
ElseIf Index=_ABB_ADDMANY Then
  //Задать нестандартное событие
  глПодборВДокумент(aEl);
  Form.CallOnStatusChange();
ElseIf Index=_ABB_MASSCHNG Then
  //Задать нестандартное событие
  а:=глВыполнитьВыборВМеню("Заполнить отрицательными остатками склада@Заполнить отрицательными остатками склада без учета резерва",,2);
  If (а=1)or(а=2) Then
    If aEl.Склад.Selected()=0 Then
      Box("Не выбран склад!",Q_STOP);
      Exit;
    EndIf;  
    If aTab.Size()>0 Then
      If AskQuestion("Очистить строчную часть перед заполнением?",Q_QUESTION+Q_YESNO)=R_YES Then
        aTab.ClearLines();
      EndIf;
    EndIf;
    
    aList:=List.Create();
    aTab.CopyTo(aList,1,aTab.Size(),"Номенклатура");
    Tab1:=Stor.ОстаткиТМЦ.Gross("Номенклатура","Количество",,0,"Склад,Номенклатура",aEl.Склад,aList);
    If а=1 Then
      Tab2:=Stor.РезервыТМЦ.Gross("Номенклатура","Количество",,0,"Склад,Номенклатура",aEl.Склад,aList);
      Tab2.Select();
      While Tab2.Next() Do
        Tab2.Количество:=-Tab2.Количество;
      EndDo;
      Tab1.FullJoin(Tab2,"Номенклатура","Количество");
    EndIf;  
    
    Tab1.Select();
    While Tab1.Next() Do
      If Tab1.Количество<0 Then
        if aTab.FindAndGoto(Tab1.Номенклатура,,"Номенклатура")=0 Then
          aTab.NewLine();
          aTab.Номенклатура:=Tab1.Номенклатура;
        EndIf;  
        aTab.Количество:=aTab.Количество-Tab1.Количество;
      EndIf;
    EndDo;
    //Вызов OnInitLine для измененных строк
    Form.MainTab.InvokeEvent("OnInitLine","IndexFrom,IndexTo",1,MainTab.Size());
  EndIf;
Else
  //Остальные события будут обработаны стандратно
  Result:=1;
EndIf;