Главная DISCLAIMER Ссылки Карта сайта Контакты
Главная arrow Вопросы разработки arrow Класс для селектора выбора рецептуры
Класс для селектора выбора рецептуры

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

Идентификатор выбранной рецептуры хранится в параметре проводки "Вариант состава".

Dim RecipeRow  : Set RecipeRow=New ClassRecipeRow
Const trNo1=1 ' номер проводки с выходом готовой продукции из производства.
'sgrd.Column(009).DataSource="RecipeRow(sgrd.BindRow)"
sgrd.Column(009).HLink=True       'если тип колонки - метка с гиперссылкой. 
'sgrd.Column(009).DisableBindClick 'если тип колонки селектор: чтобы задействовать событие нажатия кнопки.
Class ClassRecipeRow
  Public Default Property Get Name(row)
    If row>op.TransList(TrNo1).Rows Then Exit Property
    Dim entID : entID=op.Trans(TrNo1,row).EntID : If entID=0 Then Exit Property
    Dim rpID : rpID=op.Trans(TrNo1,row).Params("Вариант состава").Value2 : If rpID=0 Then Name="<без рецепта>" : Exit Property
    Dim ent : Set ent=workarea.Entity(entID)
    Dim rcp : Set rcp=ent.Recipes.ItemID(rpID) : If rcp Is Nothing Then Name="<рецептура удалена>" : Exit Property
    Name=rcp.Name
  End Property
  Public Property Let Name(row, nm)
    If row>op.TransList(TrNo1).Rows Then Exit Property
    Dim entID : entID=op.Trans(TrNo1,row).EntID : If entID=0 Then Exit Property
    Dim ent : Set ent=workarea.Entity(entID)
    Dim rcp : For Each rcp In ent.Recipes
      If InStr(rcp.Name,nm)>0 Then op.Trans(TrNo1,row).Params("Вариант состава").Value=rcp.ID : Exit Property
    Next
  End Property
  Public Property Get RowNo(row)  ' Порядковый номер задействованного рецепта.
    If row>op.TransList(TrNo1).Rows Then Exit Property
    Dim ent : Set ent=op.Trans(TrNo1,row).Entity : If ent Is Nothing Then Exit Property
    Dim rpID : rpID=op.Trans(TrNo1,row).Params("Вариант состава").Value2 : If rpID=0 Then Exit Property
    With ent.Recipes
      Dim n : For n=.Count To 1 Step-1
        If .Item(n).ID=rpID Then Exit For
      Next
    End With
    RowNo=n  ' при ненахождении номера рецепта (несуществующей ссылке на ID рецепта) свойство вернёт 0
  End Property
  Sub BrowseRow(row)
    Dim entID  : entID=op.Trans(TrNo1,row).EntID
    If entID=0 Then Exit Sub  'нет объекта, на который надо выбирать норму.
    Dim rpID  : rpID=op.Trans(TrNo1,row).Params("Вариант состава").Value2 'прежний вариант для позиционирования
    If CreateLibObject("Redirect").GetFullPath("vOb_Калькуляция.adg",False)="" Then
      Dim selID : selID=workarea.Entity(entID).Recipes.Browse(rpID,"Выбирайте!")
      If selID<>0 Then op.Trans(TrNo1,row).Params("Вариант состава").Value=selID
    Else  ' если доступен фирменный диалог составов, предпочтём его.
      Dim dlg : Set dlg=app.CreateDialog("vOb_Калькуляция.adg")
      dlg.Map("ID")=entID
      dlg.Map("RecID")=rpID
      dlg.DoModal
      op.Trans(TrNo1,row).Params("Вариант состава").Value=dlg.Map("RecID")
    End If
    Recalc
  End Sub
End Class
 
Sub sgrd_OnCellClick(Row, Column)  'Когда норма в селекторе колонки таблицы.
  If Column=009 Then Call RecipeRow.BrowseRow(Row)
End Sub
Sub sgrd_OnCellNavigate(Row, Column)  'Когда норма в гиперссылке колонки таблицы.
  If Column=009 Then Call RecipeRow.BrowseRow(Row)
End Sub

В 7 и старше версиях программы Акцент появилась возможность использовать гиперссылку в колонке таблицы с прокруткой. Вариант с гиперссылкой более удобен для пользователей, поскольку возможность выбора варианта рецепта по вхождению фрагмента наименования они практически не используют.

 
« Пред.   След. »