?

Log in

entries friends calendar profile Компания НЭТИ Previous Previous Next Next
Производство как оно есть - Сообщество неравнодушных к MD Nav (ex-Navision)
loggerzd
ru_navision
loggerzd
Производство как оно есть
Итак, сегодня, поколдовав 2 часа над дебаггером, удалось выявить место, где формируются проводки учета производства. Это несравненный CodeUnit 5802 "Inventory Posting To G/L", функция InitInvtPostBuf. Модифицировал функцию для целей разделения проводок.


Новые локальные переменные:
Name DataType Subtype Length
CostToPost1 Decimal
CostToPost2 Decimal
ValueEntry_l Record Value Entry
CostToPostACY1 Decimal
CostToPostACY2 Decimal
ValueEntry_l_tmp Record Value Entry
OutputExists Boolean

Листинг:

// RBS >20091210
CASE ValueEntry."Item Ledger Entry Type" OF
// если выход производственного заказа
ValueEntry."Item Ledger Entry Type"::Output: BEGIN
OutputExists:=FALSE;

ValueEntry_l_tmp.RESET;
ValueEntry_l_tmp.DELETEALL;

ValueEntry_l.RESET;
ValueEntry_l.SETCURRENTKEY("Document No.");
ValueEntry_l.SETFILTER(ValueEntry_l."Document No.",ValueEntry."Document No.");
//себестоимость потребленных товаров Д20.1 К41
ValueEntry_l.SETRANGE(ValueEntry_l."Item Ledger Entry Type",ValueEntry_l."Item Ledger Entry Type"::Consumption);
ValueEntry_l.FINDFIRST;
REPEAT
CostToPost1:=CostToPost1+ABS(ValueEntry_l."Cost Posted to G/L");
UNTIL ValueEntry_l.NEXT = 0;
//себестоимость работы Д20.2 К70
ValueEntry_l.SETRANGE(ValueEntry_l."Item Ledger Entry Type",ValueEntry_l."Item Ledger Entry Type"::" ");
ValueEntry_l.FINDFIRST;
REPEAT
CostToPost2:=CostToPost2+ABS(ValueEntry_l."Cost Posted to G/L");
UNTIL ValueEntry_l.NEXT = 0;
//проверяем, был ли уже сформирован выход продукции (иначе получим дублирование проводок при коррекции себестоимости)
ValueEntry_l.SETRANGE("Item Ledger Entry Type",ValueEntry_l."Item Ledger Entry Type"::Output);
ValueEntry_l.SETFILTER("Cost Posted to G/L",'<>0');
IF ValueEntry_l.FINDFIRST THEN
IF ValueEntry_l."Entry No."<>ValueEntry."Entry No." THEN
OutputExists:=TRUE;
IF OutputExists=TRUE THEN BEGIN
PostBufDimNo := PostBufDimNo + 1;
SetAccNo(TempInvtPostBuf[PostBufDimNo],ValueEntry,AccType,BalAccType);
SetPostBufAmounts(TempInvtPostBuf[PostBufDimNo],CostToPost,CostToPostACY,InterimAccount);

PostBufDimNo := PostBufDimNo + 1;
SetAccNo(TempInvtPostBuf[PostBufDimNo],ValueEntry,BalAccType,AccType);
SetPostBufAmounts(TempInvtPostBuf[PostBufDimNo],-CostToPost,-CostToPostACY,InterimAccount);

END ELSE BEGIN
//формируем себестоимость потребленных товаров Д43 К20.1
PostBufDimNo := PostBufDimNo + 1;
SetAccNo(TempInvtPostBuf[PostBufDimNo],ValueEntry,AccType,BalAccType);
SetPostBufAmounts(TempInvtPostBuf[PostBufDimNo],CostToPost1,CostToPostACY1,InterimAccount);

PostBufDimNo := PostBufDimNo + 1;
SetAccNo(TempInvtPostBuf[PostBufDimNo],ValueEntry,BalAccType,AccType);
SetPostBufAmounts(TempInvtPostBuf[PostBufDimNo],-CostToPost1,-CostToPostACY1,InterimAccount);

//формируем себестоимость работ Д43 К20.2
ValueEntry_l_tmp:=ValueEntry;
ValueEntry_l_tmp."Location Code":='';
PostBufDimNo := PostBufDimNo + 1;
SetAccNo(TempInvtPostBuf[PostBufDimNo],ValueEntry_l_tmp,AccType,BalAccType);
SetPostBufAmounts(TempInvtPostBuf[PostBufDimNo],CostToPost2,CostToPostACY2,InterimAccount);

PostBufDimNo := PostBufDimNo + 1;
SetAccNo(TempInvtPostBuf[PostBufDimNo],ValueEntry_l_tmp,BalAccType,AccType);
SetPostBufAmounts(TempInvtPostBuf[PostBufDimNo],-CostToPost2,-CostToPostACY2,InterimAccount);

END;
END;
ELSE BEGIN
// RBS <20091210
PostBufDimNo := PostBufDimNo + 1;
SetAccNo(TempInvtPostBuf[PostBufDimNo],ValueEntry,AccType,BalAccType);
SetPostBufAmounts(TempInvtPostBuf[PostBufDimNo],CostToPost,CostToPostACY,InterimAccount);

PostBufDimNo := PostBufDimNo + 1;
SetAccNo(TempInvtPostBuf[PostBufDimNo],ValueEntry,BalAccType,AccType);
SetPostBufAmounts(TempInvtPostBuf[PostBufDimNo],-CostToPost,-CostToPostACY,InterimAccount);

// RBS >20091210
END;
END;
// RBS <20091210

// PS462.begin
TempInvtPostBuf[PostBufDimNo]."FA No." := ValueEntry."FA No.";
TempInvtPostBuf[PostBufDimNo]."Depreciation Book Code" := ValueEntry."Depreciation Book Code";
TempInvtPostBuf[PostBufDimNo]."FA Entry No." := ValueEntry."FA Entry No.";
// PS462.end


Результат в сформированной корреспонденции (три товара и два рабочих центра):

Операция Но. Документ Но. Дата Учета Дебет Счет Но. Дебет Источник Но. Кредит Счет Но. Кредит Источник Но. Сумма
384 101016 10.12.09 20-1100 41-1000 527,08
386 101016 10.12.09 20-1100 41-1000 63,04
388 101016 10.12.09 20-1100 41-1000 741,50
390 101016 10.12.09 20-1200 70-1000 775,00
392 101016 10.12.09 20-1200 70-1000 2 750,00
395 101016 10.12.09 43-1000 20-1200 3 525,00
396 101016 10.12.09 43-1000 20-1100 1 331,62

Операции стоимости никоим образом не затрагиваются. Коррекция себестоимости добавляет необходимые проводки.

Операция Но. Документ Но. Дата Учета Дебет Счет Но. Дебет Источник Но. Кредит Счет Но. Кредит Источник Но. Сумма
435 101016 10.12.09 20-1100 41-1000 155,04
467 101016 10.12.09 43-1000 20-1100 155,04

Tags: ,
Current Location: Russian Federation, Казань
Current Mood: happy happy

Leave a comment