23.12.2004, 15:09 | #1 |
Участник
|
Пересчет себестоимости отгрузок
Подскажите, пожалуйста, какие проводки создаются при пересчете себестоимости продаж через "Закрытие и коррекция"?
При уменьшении себестоимости отгрузки я ожидал увидеть сторно , но, похоже, аксапта делает реверс. Так ли это? Можно ли изменить поведение системы? |
|
23.12.2004, 16:14 | #2 |
Участник
|
Еще ниразу не видел "сторно" при пересчете склада!!! Однозначно: аксапта делает нормальные проводки по увеличению себестоимости и реверс проводки по уменьшению себестоимости. К сожалению, настроить "сторно" проводки я не знаю как, но подозреваю, что это не возможно.
|
|
23.12.2004, 16:21 | #3 |
Moderator
|
Цитата:
К сожалению, настроить "сторно" проводки я не знаю как, но подозреваю, что это не возможно.
|
|
23.12.2004, 16:35 | #4 |
Участник
|
т.е. при уменьшении себесетоимости отгрузки готовой продукции проводка Д43 К90 - норма, и добиться Д90 К43 с отрицательной суммой нельзя?
|
|
23.12.2004, 18:53 | #5 |
Участник
|
Без модификаций нельзя.
|
|
23.12.2004, 18:59 | #6 |
Участник
|
Цитата:
Изначально опубликовано IvanHARD
т.е. при уменьшении себесетоимости отгрузки готовой продукции проводка Д43 К90 - норма, и добиться Д90 К43 с отрицательной суммой нельзя?
__________________
|
|
24.12.2004, 05:10 | #7 |
Участник
|
Я достаточно долго занимался изучением данного вопроса и пришел к выводу, что добиться создания именно сторнирующих проводок при закрытии можно только путем очень тяжелых и опасных модификаций. Объясню почему.
Для примера возьмем проводку списания материалов Д20 К10 на сумму 1000. Как известно, сторнирующие проводки отличаются от обычных тем, что в поле Коррекция у них стоит Да (LedgerTrans.Correct = NoYes::Yes), а реверсированные - это проводки с обратной корреспонденцией. Для нащего примера сторнирующей проводкой будет Д20 К10 -1000, а реверсирующей Д10 К20 1000. За создание проводок отвечают классы LedgerVoucher и LedgerVoucherObject. Последний при создание объекта прнимает параметр Correction, который и отвечает за то, будет ли проводка сторнирущей или реверсированной. Важное замечание: документ ГК может быть либо целиком сторно, либо целиком реверс. То есть ситуация, когда часть провдок в рамках одного документа ГК являются сторнирующими, а часть реверсированными, невозможна (в рамках стандартного функционала, естественно ). Чтобы убедится в этом, достаточно взглянуть на конструктор класса LedgerVoucherObject newVoucher, который принимает в качестве параметра помимо прочего документ ГК для проводки (_voucher) и признак сторно (_correction). Теперь помотрим на механизм закрытия склада. При закрытии создается множество проводок с ОДНИМ документом ГК. За это отвечает класс InventAdjustPost и его метод updateNow. Поскольку используется один ваучер, то все его проводки будут либо сторно, либо, как в стандартном функционале, реверсом. Вернемся к нашем примеру. Предположим теперь, что было списано два вида материалов. Возникли две проводки: Д20 К10 1000 и Д20 К10 500. В ходе закрытия склада система обнаружила, что себестоимость первого материала была на 100 руб. меньше, а второго - на 200 больше. Хотелось бы, чтобы при закрытии возникли две проводки: Д20 К10 -100 и Д20 К10 200. Однако, всвязи со всем вышесказанным, система не может сделать такие проводки в рамках одного документа ГК. Поэтому имеем Д10 К20 100 и Д20 К10 200. Если же слегка подправить метод InventAdjustPost.updateNow, то опять же получится лажа: Д20 К10 -100 и Д10 К20 -200. Общий вывод. В рамках стандартного функционала добиться возникновения правильных сторнирующих проводок при закрытии склада невозможно. Более того, решить эту проблему небольшими модификациями невозможно. А писать большую и сложную модификацию (например, можно было бы создавать два ваучера по одному закрытию, один сторно, второй реверс) слишком опасно с точки зрения целостности данных и логики системы. |
|
|
За это сообщение автора поблагодарили: PavelX (1). |
24.12.2004, 05:13 | #8 |
Участник
|
Цитата:
Изначально опубликовано ppson
Локализация такая . |
|
24.12.2004, 14:09 | #9 |
Участник
|
Также столкнулись с подобной проблемой.
В стандарном функционале никогда не пойдут развернутые обороты обороты по главной книге и складским проводкам. Бухгалтерам часто необходимо посмотреть обороты по ГК и по номенклатурам, которые разносяться по соответствующим счетам ГК. Увы... Они не знаю, где верная цифра. Другая ситуация - в главной книге создается под одним Voucher на одну дату, т.е. закрыте покрывает период 01/01/2004-31/01/2004 Обороты и сальдо по ГК за 01/01/2004-07/01/2004 будут не верными, а 01/01/2004-31/01/2004 - сальдо верное. Как вариант - своя модификация по "дописыванию" проводки в ГК с тем же Voucher, что и в складской проводке. Но много подводных камней. Например в какой момент запускать эту обработку. Есть большая вероятность, что коррекция по складским проводкам за закрытый период прошла полностью. |
|
24.12.2004, 14:59 | #10 |
Moderator
|
В случае, если вам нужно сторно не при закрытии склада а в журналах - все гораздо проще. Надо просто поправить код, где создается LedgerVoucherObject, передав туда параметр correct. Если выполнять сторно отдельным журналом - проблем не будет.
|
|
24.12.2004, 15:50 | #11 |
Участник
|
В свете открытия, сделанного slava09 (см. http://www.axforum.info/forums/showt...&threadid=7761), модификация по созданию сторно-проводок при закрытии уже не кажется мне столь сложной (но не менее опасной!!!). Общая идея такая: заставить класс InventAdjustPost создавать проводка в две итерации. Сначала создаются проводки, которые должны быть не-сторно, затем, с таким же документом ГК, сторно-проводки. Основной проблемой тут, на мой взгляд, будет определение критерия того, какие записи из InventSettlement должны создавать прямые проводки, а какие сторно.
|
|
|
За это сообщение автора поблагодарили: Atar (1). |
24.12.2004, 15:53 | #12 |
Участник
|
Цитата:
Изначально опубликовано Peter Savintsev
В свете открытия, сделанного slava09 (см. http://www.axforum.info/forums/showt...&threadid=7761), модификация по созданию сторно-проводок при закрытии уже не кажется мне столь сложной (но не менее опасной!!!). Общая идея такая: заставить класс InventAdjustPost создавать проводка в две итерации. Сначала создаются проводки, которые должны быть не-сторно, затем, с таким же документом ГК, сторно-проводки. Основной проблемой тут, на мой взгляд, будет определение критерия того, какие записи из InventSettlement должны создавать прямые проводки, а какие сторно. Двух итераций не надо можно и одной. |
|
24.12.2004, 16:02 | #13 |
Участник
|
Цитата:
Изначально опубликовано bio_unit
Никаких проблем нет, нужно смотреть знак коррекции в InventSettlement и направление складкой проводки. Цитата:
Изначально опубликовано bio_unit
Двух итераций не надо можно и одной. |
|
24.12.2004, 16:11 | #14 |
Участник
|
Повторюсь, модификация опасная. Я бы не рекомендовал ее делать. Разве что если будут ОЧЕНЬ серьезные причины. Не исключено, что в следующих версиях Аксапты механизм закрытия склада перепишут и что будет тогда со всеми этими наворотами, неизвестно.
Сейчас подумал еще об одной тонкости - отмене закрытия. Как известно, при отмене создаются проводки ГК, сторнирующие проводки, возникшие при закрытии. Так вот как должны отменяться сторно-проводки закрытия при отмене, я что-то не могу пока сообразить. |
|
24.12.2004, 16:58 | #15 |
Участник
|
Цитата:
Изначально опубликовано Peter Savintsev
Повторюсь, модификация опасная. Я бы не рекомендовал ее делать. Разве что если будут ОЧЕНЬ серьезные причины. Не исключено, что в следующих версиях Аксапты механизм закрытия склада перепишут и что будет тогда со всеми этими наворотами, неизвестно. |
|
15.04.2008, 18:27 | #16 |
Снова балуюсь косаптой :)
|
Up!
Цитата:
Сообщение от Peter Savintsev
Я достаточно долго занимался изучением данного вопроса и пришел к выводу, что добиться создания именно сторнирующих проводок при закрытии можно только путем очень тяжелых и опасных модификаций. Объясню почему.
Для примера возьмем проводку списания материалов Д20 К10 на сумму 1000. Как известно, сторнирующие проводки отличаются от обычных тем, что в поле Коррекция у них стоит Да (LedgerTrans.Correct = NoYes::Yes), а реверсированные - это проводки с обратной корреспонденцией. Для нащего примера сторнирующей проводкой будет Д20 К10 -1000, а реверсирующей Д10 К20 1000. За создание проводок отвечают классы LedgerVoucher и LedgerVoucherObject. Последний при создание объекта прнимает параметр Correction, который и отвечает за то, будет ли проводка сторнирущей или реверсированной. Важное замечание: документ ГК может быть либо целиком сторно, либо целиком реверс. То есть ситуация, когда часть провдок в рамках одного документа ГК являются сторнирующими, а часть реверсированными, невозможна (в рамках стандартного функционала, естественно ). Чтобы убедится в этом, достаточно взглянуть на конструктор класса LedgerVoucherObject newVoucher, который принимает в качестве параметра помимо прочего документ ГК для проводки (_voucher) и признак сторно (_correction). Ситуация со времен написания данного поста (2004 год) никак не изменилась? Имеем 3.0 SP4 с указанным в ветке поведением системы: при операции коррекции - закрытия склада, вместо создания сторно - система создает реверсивные проводки и, соответственно, плывут обороты по 20 счету и воют бухгалтера. Было ли сие пофиксено в SP5 или, быть может, в каких-то дальнейших хотфиксах? Если нет - то может кто-нибудь добрый поделится рабочим решением проблемы в виде проектика?
__________________
Бесты и регарды! |
|
16.04.2008, 10:03 | #17 |
Участник
|
Цитата:
|
|
|
За это сообщение автора поблагодарили: konfet (1). |
16.04.2008, 10:32 | #18 |
SAP
|
Цитата:
За создание проводок отвечают классы LedgerVoucher и LedgerVoucherObject. Последний при создание объекта прнимает параметр Correction, который и отвечает за то, будет ли проводка сторнирущей или реверсированной. Важное замечание: документ ГК может быть либо целиком сторно, либо целиком реверс. То есть ситуация, когда часть провдок в рамках одного документа ГК являются сторнирующими, а часть реверсированными, невозможна (в рамках стандартного функционала, естественно ). Чтобы убедится в этом, достаточно взглянуть на конструктор класса LedgerVoucherObject newVoucher, который принимает в качестве параметра помимо прочего документ ГК для проводки (_voucher) и признак сторно (_correction).
Общий вывод. В рамках стандартного функционала добиться возникновения правильных сторнирующих проводок при закрытии склада невозможно. Более того, решить эту проблему небольшими модификациями невозможно. А писать большую и сложную модификацию (например, можно было бы создавать два ваучера по одному закрытию, один сторно, второй реверс) слишком опасно с точки зрения целостности данных и логики системы. X++: ledgerVoucherTransObject = LedgerVoucherTransObject::newCreateTrans( _ledgerVoucher.findLedgerVoucherObject(), this.postingBalanceSheet(), this.accountBalanceSheet(), this.dimension(), Companyinfo::standardCurrency(), costAmount, 0); ledgerVoucherTransObject.parmCorrect(this.correctLedgerTransObject() ? this.correctLedgerTransObject() : ledgerVoucherTransObject.parmCorrect()); _ledgerVoucher.addTrans(ledgerVoucherTransObject); |
|
16.04.2008, 13:40 | #19 |
Moderator
|
мои пять копеек: Привязка признака сторнирования к всему ваучеру исчезла еще во времена версии 3.0. Теперь признак сторнирования можно привязывать к постингу (LedgerVoucherTransObject). Механизм корреспонденции не позволяет корреспондировать сторнирующую и обычную проводки (что логично). Теперь по смыслу задачи. Кусочек кода по понятным причинам тоже не могу привести Задача решается следующими шагами:
1. Добавляется признак сторнирования в шапку журналов 2. Добавляется признак сторнирования в строки журналов (инициализируется из шапки) 3. Метод inventJournalCheckPost.postLedgerTransправится таким образом, чтобы parmCorrect() у ledgerObjectVoucher инициализировался из признака сторнирования в строке журнала. 4. В inventTrans добавляется поле с признаком сторнирования. (Correct). Метод inventMovement.initInventTransFinancial() правится так, чтобы копировать в складскую проводку признак сторнирования из ledgerVoucherObject 5. В классе inventCostItemDim (или в таблице inventTrans) создается статический метод SetSettlementCorrect. Он заполняет в inventSettlement признак коррекции в том случае, если знак суммы положительный, а корректируемая складская проводка – списание или если знак суммы отрицательный, а корректируемая складская проводка – приход. При наличии в складской проводке признака сторнирования (из пункта 4) – логика инвертируется. При любых созданиях/обновлениях inventSettlement из кода закрытия/пересчета склада (класс inventCostItemDim) перед вызовом update/insert вызывался бы метод setSettlementCorrect. 6. Класс inventAdjustPost и его наследники правится так, чтобы группировать проводки еще и по признаку сторнирования (correct) из inventSettlement. При создании объекта ledgerVoucherTransObject - parmCorrect инициализируется из ключа mapSettlement. 7. После того как я все это сделал – выяснилось что у меня случилась засада входящими накладными расходами. Они тоже создаются как записи в inventSettlement и разносятся классом inventAdjustPost. Учитывая что в тех классах, которые создают inventSettlement по накладным расходам признак коррекции не заполняется, то при некоторых операциях (кажется при возврате накладной с накладными расходами или при вводе отрицательных накладных расходов) все разваливалось. Изначально - я глупо заткнул эту дырку, просто передавая в inventAdjustPost какой-то параметр, который приводил к тому что признак коррекции не подставлялся из inventSettlement, а брался из исходного ledgerVoucher. Несколько позже я эту дырку починил более правильным способом. Я нашел все классы в которых создается inventSettlement (InventTransAdjust и еще парочка кажется) и вставил туда код, который правильно выставляет поле сторнирования в inventSettlement. Последний раз редактировалось fed; 16.04.2008 в 13:44. |
|
|
За это сообщение автора поблагодарили: konfet (1), gl00mie (4), Atar (1). |
16.04.2008, 15:44 | #20 |
Снова балуюсь косаптой :)
|
Всем ответившим спасибо. Будем рыть.
То, что эта очевидная недоработка в локализации не была устранена российским Microsoft-ом в течении 4 лет - говорит о многом
__________________
Бесты и регарды! |
|
Теги |
ax3.0, ax4.0, faq, себестоимость, сторно |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|