Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Какую версию выбрать?

13.02.20 11:54
Re: Какую версию выбрать?
 
Murr патриот
Murr
в ответ AlexNek 12.02.20 23:39

Долго старался понять какого там поинтер у тебя делает?

-----

Ну это бывает... с Шарпе поинтеров нема, но есть параметры. А без "п" - мне уже неудобно...


Похоже на очередной костыль к тому, что имеется.

-----

Ну да - очередной кусок конвертится в объектную форму.

Требуются - имена полей в табличке... ну и вместо того чтобы разбираться во всех 100500 местах где их собирают с тем правильно ли их собирают - все скинуто в субкласс и изолировано от внешнего кода...

Оставалось выбрать в какой форме писать... бо, обычно, там константы и никакие манипуляции не требуется...

Ну а тут - динамика - надо базировать на строках из другой таблицы...

И либо таскать строку, либо придумать ка без этого обойтись...

Придумал... повторов суффиксов нигде нет и работает нормально...

Код, кстати, подсократился и стал более-менее понятным...



Какого имена полей вообще в "ручном" коде делают?

-----

Оригинальная часть:


    
Private Function fillDRResultCommodities(ByVal DTItemsByCustomer As DataTable, _

ByVal DTDistinctIntrastatCodes As DataTable, _

ByVal DRResult As DataRow) As DataRow

Dim sqlFilter As String = Nothing

Dim DRFilter() As DataRow = Nothing

Dim intrastatCode As String = Nothing

Dim columnHeader As String = Nothing

Dim netPriceHomeCurrency As Decimal = 0

Try

For Each DRDistinctIntrastatCode As DataRow In DTDistinctIntrastatCodes.Rows

intrastatCode = DRDistinctIntrastatCode.Item("intrastatCode").ToString & " "

columnHeader = intrastatCode & _

DRDistinctIntrastatCode.Item("commodity").ToString

sqlFilter = "intrastatCode=" & DRDistinctIntrastatCode.Item("intrastatCode").ToString

DRFilter = DTItemsByCustomer.Select(sqlFilter)

If DRFilter.Length > 0 Then

netPriceHomeCurrency = DTItemsByCustomer.Compute("SUM([netPrice homeCurrency])", sqlFilter)

DRResult.Item(columnHeader) = netPriceHomeCurrency.ToString

columnHeader = intrastatCode & "statVal"

' DRResult.Item(columnHeader) = netPriceHomeCurrency - (netPriceHomeCurrency / 100)

DRResult.Item(columnHeader) = netPriceHomeCurrency

columnHeader = intrastatCode & "weight"

DRResult.Item(columnHeader) = DTItemsByCustomer.Compute("SUM(weight)", sqlFilter)

columnHeader = intrastatCode & "sqm"

DRResult.Item(columnHeader) = DTItemsByCustomer.Compute("SUM(sqm)", sqlFilter)

End If

Next

Catch ex As Exception

End Try

Return DRResult

End Function

переработанный код:


public void FillCommodities(TDistinctIntrastatCodes.Distinct pDistinctIntrastatCodes, TItems.Subset pItemsbyCustomer)
{
try {
foreach (TDistinctIntrastatCodes.Row intrastatCodeRow in pDistinctIntrastatCodes)
{
Filters.ByIntrastatCode byIntrastatCode = new Filters.ByIntrastatCode();
byIntrastatCode.IntrastatCode = intrastatCodeRow.IntrastatCode;

TItems.Subset itemsByIntrastatCode = pItemsbyCustomer.Select(byIntrastatCode);

if (itemsByIntrastatCode.HasData)
{
TIntrastatCodeRowProxy icp = this[intrastatCodeRow];

string netPriceHomeCurrency = itemsByIntrastatCode.SumNetPriceHomeCurrency.ToString();
icp.IntrastatCodeComodity = netPriceHomeCurrency;
icp.StatVal = netPriceHomeCurrency;
icp.Weight = itemsByIntrastatCode.SumWeight.ToString();
icp.Sqm = itemsByIntrastatCode.SumSqm.ToString();
}
}
} catch (Exception ex)
{
TExceptionHandler.Error(ex);
}
}

Упростилось до уровня понимабельности... имена полей - ушли... об ошибочке - письмишко придет... ну и тестируемость доступна...


Вроде нормально? улыб

 

Перейти на