Класс для селектора выбора рецептуры |
Чтобы совместить вывод названия рецептуры в колонке таблицы формы (акт переработки, акт списания по нормам и др.) с возможностью выбора из существующих вариантов, достаточно указать в колонке типа "селектор" или "гиперссылка" источник данных, которые поставляет приведенный ниже класс. Идентификатор выбранной рецептуры хранится в параметре проводки "Вариант состава". 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 и старше версиях программы Акцент появилась возможность использовать гиперссылку в колонке таблицы с прокруткой. Вариант с гиперссылкой более удобен для пользователей, поскольку возможность выбора варианта рецепта по вхождению фрагмента наименования они практически не используют. |
« Пред. | След. » |
---|