Изменение создания номера партии/серийного номера на экране ведения производственного заказа Acumatica (AM201500)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Изменение создания номера партии/серийного номера на экране ведения производственного заказа Acumatica (AM201500)

Сообщение Anonymous »

Мне нужно выполнить настройку на экране ведения производственного заказа, где на вкладке сведений о строке есть кнопка «Создать», чтобы создать строку в последовательности 000001 и т. д.
Но я хотите изменить его, чтобы получить производственный номер, например (PP000004), а сгенерированный номер партии/серийный номер: PP000004-000001, PP000004-000002, PP000004-000003 и так далее, пока не будет достигнуто необходимое количество. Как добиться этого с помощью настройки? Чтобы изменить номер партии/серийный номер, необходимо расширить кнопку создания. Я создал метод переопределения, но получаю эту ошибку, буду благодарен за любую помощь!
using System;
using PX.Data;
using PX.Objects.IN;
using PX.Objects.CS;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using PX.Objects.AM.GraphExtensions;
using PX.Common;
using PX.Objects.Common;
using PX.Objects.SO;
using PX.Objects.AM.Attributes;
using System.Linq;
using PX.Objects.AM.CacheExtensions;
using PX.Data.BQL.Fluent;
using PX.Data.BQL;
using PX.Objects.AR;
using PX.Objects.CR;
using PX.Objects.GL;
using PX.Objects;
using PX.Objects.AM;

namespace PX.Objects.AM
{
public class ProdMaint_Extension : PXGraphExtension
{
#region Event Handlers

// This method overrides the existing method tied to the Generate button
[PXOverride]
public virtual void GenerateNumbers(Action baseMethod)
{
// Call the base method to keep existing functionality (optional)
baseMethod?.Invoke();

// Custom logic to generate Lot/Serial numbers based on production number
var currentOrder = PXSelect.Select(Base).TopFirst;
if (currentOrder == null) return;

string productionNumber = currentOrder.ProdOrdID;

// Get all generated material lines
PXResultset materialLines = PXSelect
.Select(Base, currentOrder.ProdOrdID);

int sequenceNumber = 1;
foreach (AMProdMatl line in materialLines)
{
if (string.IsNullOrEmpty(line.LotSerialNbr)) continue;

// Generate the new lot/serial number
string newLotSerialNbr = $"{productionNumber}-{sequenceNumber:D6}";

// Update the lot/serial number
line.LotSerialNbr = newLotSerialNbr;

// Save changes
Base.Caches[typeof(AMProdMatl)].Update(line);

sequenceNumber++;
}

// Save changes to the database
Base.Actions.PressSave();
}

#endregion

}

Ошибка: [2024-10-07 03:16:01.919] The Void GenerateNumbers(System.Action) метод в расширении графа PX.Objects.AM.ProdMaint_Extension помечен как [PXOverride], но в PXGraph не найден исходный метод с таким именем.
[2024-10-07 03:16:08.479] Проверка не удалась .
Спасибо!
Новый код
{
public class ProdMaint_Extension : PXGraphExtension
{

#region Event Handlers

//public IEnumerable GenerateNumbersDelegate(PXAdapter adapter);
//public delegate IEnumerable GenerateNumbersDelegate(PXAdapter adapter);
[PXOverride]
public IEnumerable GenerateNumbers(PXAdapter adapter, Func baseMethod)
{
//var result = baseMethod(adapter);

//return result;
// Call the base method to ensure the original functionality is executed
var baseResult = baseMethod.Invoke(adapter);

// Retrieve the current production order
var currentProductionOrder = PXSelect.Select(Base).TopFirst;
if (currentProductionOrder == null)
{
throw new PXException("No Production Order found.");
}

// Get the production order number
var productionOrderNbr = currentProductionOrder.ProdOrdID; // Adjust this field as needed

if (string.IsNullOrEmpty(productionOrderNbr))
{
throw new PXException("Production Order Number is required.");
}

// Prepare a list to store the updated rows
var resultList = new List();
int sequenceNumber = 1;

// Iterate over the results returned by the base method
foreach (AMProdMatl row in baseResult.OfType())
{
// Generate the custom Lot/Serial number
row.LotSerialNbr = $"{productionOrderNbr}-{sequenceNumber:D6}";

// Add the updated row to the result list
resultList.Add(row);
sequenceNumber++;
}

// Return the updated result list
return resultList;
}

#endregion
}
}```


Подробнее здесь: https://stackoverflow.com/questions/790 ... ntenance-s
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»