10.12.2009, 18:38 | #21 |
Участник
|
Итак, сегодня, поколдовав 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
__________________
Незнание закона не освобождает от ответственности... От ответственности освобождает знание закона! Компания НЭТИ - http://i-neti.ru/ |
|