О чем эта статья
Статья описывает существенную ошибку, обнаруженную пользователями прикладного решения «Управление торговлей, ред.11» версии 11.1.2.9 – в расчете себестоимости при возврате товара от клиентов прошлых периодов. В статье также разрабатывается и внедряется программный код, позволяющий исправить эту ошибку.
Применимость
Статья написана для редакции УТ 11.1.2.9, в актуальных релизах типовой конфигурации данная ошибка устранена.
Ошибка расчета себестоимости при возврате товара
В существующей версии последнего релиза (на текущий момент это 11.1.2.9) присутствует одна существенная ошибка, которая может значительно попортить нервы как специалистам-учетчикам товаров, так и программистам, обслуживающим данную программу. А именно – ошибка с расчетом себестоимости при возврате товара от клиентов прошлых периодов.
Дело в том, что в программе корректно отрабатываются возвраты только в том случае, если отгрузка и возврат товара от клиента произошли в одном периоде (в одном месяце) и не работает, если отгрузка товара произошла, например, в июне месяце, а возврат происходит в июле.
Дабы не быть голословными, приведем простой пример на картинках.
Возьмем «чистую» базу последнего релиза (11.1.2.9), в настройках сразу укажем, что у нас одна организация и один склад. Заведем карточку номенклатуры «Стол» (товар). В учетной политике организации укажем, что метод оценки стоимости товаров у нас – «ФИФО (скользящая оценка)». (Сразу оговоримся, что для остальных методов (по средней за месяц, и средней по ФИФО) возвраты обоих видов рассчитываются корректно.)
Теперь создадим несколько документов, чтобы продемонстрировать суть проблемы.
Итак, в начале июня мы закупили на склад 10 шт. столов по цене 10000 руб/шт (наша себестоимость, для простоты – нет никаких доп.расходов):
Рис. 1 (Нажмите, чтобы увеличить картинку)
Производим отгрузку 5 столов основному покупателю:
Рис. 2 (Нажмите, чтобы увеличить картинку)
Обратим внимание на дату отгрузки – это июнь месяц. Теперь попробуем вернуть 1 стол – сначала в этом же месяце, затем – в следующем, июле, и посмотрим, что получилось.
Итак, сначала возврат в том же месяце, что и месяц отгрузки.
Рис. 3 (Нажмите, чтобы увеличить картинку)
Заполнение по кнопке «Заполнить» – «Добавить товары из документов продажи» отработало на ура – нашелся документ отгрузки по данному клиенту и корректно заполнились количество и цена; мы меняем количество на 1 шт. После проведения сразу «заглянем» в движения, нас интересует регистр «Себестоимость товаров»:
Рис. 4 (Нажмите, чтобы увеличить картинку)
Движение типа «расход» со знаком минус – ну что ж, это стандартная ситуация с возвратами и тянется такой вариант записи еще с версий на 7.7 – так удобнее в отчетах «отлавливать» возвраты. Обратите внимание на Хозяйственную операцию – это «Сторно реализации».
Теперь «закроем месяц» июнь (Финансы – Закрытие месяца – выбираем июнь) и сформируем отчет «Себестоимость выбывших товаров» за июнь:
Рис. 5 (Нажмите, чтобы увеличить картинку)
Все верно, себестоимость по возврату посчиталась корректно (себестоимость возврата = стоимости закупки = 10000 руб/шт – см. Рис.1).
А теперь вернем товар в следующем месяце:
Рис. 6 (Нажмите, чтобы увеличить картинку)
В основании тот же документ отгрузки, но месяц возврата теперь – июль. Что в движениях документа?
Рис. 7 (Нажмите, чтобы увеличить картинку)
Довольно странно – почему то здесь уже вид движения не расход, как в прошлом случае, а приход – ну да ладно, мы же понимаем, что от «перестановки мест слагаемых сумма не меняется…», чисто формально все верно, но все равно на душе остался легкий налет непонимания. А вот хозяйственная операция теперь стала другой – «Возврат товаров от клиентов прошлых периодов». Ну что ж, формально опять все верно. Двигаемся тем же путем – закрываем месяц, только теперь не июнь, а июль. Снова формируем «Себестоимость выбывших товаров» (за июль) и видим следующее:
Рис. 8
Пусто! Даже количество возврата не отражено. Ах, ну да, у нас ведь вид движения поменялся, поэтому теперь нам надо смотреть движения по возврату не в этом отчете, а в «Себестоимости поступивших товаров» (для полной уверенности, что мы все верно понимаем, добавим группировку по регистратору):
Рис. 9 (Нажмите, чтобы увеличить картинку)
Количество есть, а стоимости нет, сколько бы мы не жали на кнопку закрытия месяца или не перепроводили документ «Расчет себестоимости товара». Конечно, мы можем в этом документе сменить вариант расчета себестоимости на один из вариантов по средней, но тогда для чего мы ставили «скользящую»? Наши пользователи ждут от нас именно такого расчета по всем номенклатурным позициям вне зависимости от того, случился у нас в этом месяце возврат или нет.
После 2-часовых консультаций с техподдержкой выяснилось, что проблема эта действительно существует (т.е. связана не с нашей «криворукостью») и ошибка эта зарегистрирована на сайте 1С и потому в перспективе, надеемся, будет решена. Вопрос когда? Новый метод по «скользящей» доступен уже с конца февраля (11.1.1.11), на дворе уже середина года и уверен, что многие уже успели перейти на него «задним числом.
Итак, задача – исправить себестоимость возвратов, не дожидаясь его официального решения. Описывать свои часы раздумий, поисков, анализов текстов запросов не буду. Сразу приведу решение.
Посыл следующий – себестоимость возврата – это стоимость закупки. Но! В нашем возврате уже есть движения по сторнированию стоимости закупа – это регистр «Партии товаров организаций» и они посчитаны верно:
Рис. 10 (Нажмите, чтобы увеличить картинку)
Т.е. нам остается всего ничего – просто перенести эти цифры (с НДС, без НДС…) в записи регистра себестоимости товаров. Лучше всего это сделать в обработке закрытия месяца, а не при проведении документа «Возврат от клиента», поскольку регистры партий также рассчитываются при закрытии месяца.
Итак, в конфигураторе открываем форму обработки «Операции закрытия месяца» (она одна – «Форма УТ»), ищем процедуру «ДействиеФормированиеДвиженийПоПартиямТоваровСервер» и после строки:
ПартионныйУчетСервер.ВыполнитьРегламентноеФормированиеДвиженийПоПартиямТоваров();
(т.е. после формирования движения по партиям) вставляем свою строку:
т_Модуль.СкорректироватьСтоимостьВозвратовПрошлыхПериодов(Объект.ПериодРегистрации);
Здесь «т_Модуль» – это мой общий модуль с галочкой «Сервер» и в ней следующая экспортная процедура:
Из текста видно, что «подправляются» также движения по регистру «Выручка и себестоимость продаж», которые «завязаны» на те же данные по партиям.
Обновим конфигурацию, снова «закроем» июль и посмотрим наш отчет:
Рис. 11 (Нажмите, чтобы увеличить картинку)
Ура! Себестоимость возвращена.
Отмечу, что себестоимость отражается в самом возврате, а не в регламентном документе и лично для себя никаких противопоказаний этому я не нашел – мне так удобнее и к тому же так нагляднее.
Вкратце опишу процедуру «поиска и подстановки» себестоимости. Во-первых, выбираем все проведенные возвраты от клиентов за указанный период. Далее, начинаем их перебирать, и для каждого документа «загоняем» движения по партиям во временную таблицу. Начинаем перебирать записи движений по себестоимости товаров и там где хоз.операция равна «Возврат товаров от клиентов прошлых периодов» (напомню, что для хоз.операции «Сторно реализации» считается и так правильно) ищем в таблице партий соответствующую строку (отбор по номенклатуре и по количеству), найдя которую подставляем суммовые параметры в регистр себестоимости. Аналогично делаем для регистра «Выручка и себестоимость продаж».
Резюме:
Обнаружена ошибка при расчете себестоимости возврата товара клиенту прошлых периодов. В данной статье предложено решение этой проблемы, которое можно рекомендовать в качестве временной меры (поскольку рано или поздно эта ошибка будет исправлена самой 1С).
Блин, статья 2013 года, а я в 2020 году с этим борюсь! Статья сильно помогла понять, что не я “криворукая”. С корректировками реализации согласна, что тоже все плохо, если в 0 корректируешь.
В УНФ такая же проблема, похоже. Но не с возвратами прошлых периодов, а с возвратами в рознице не в день покупки.
Спасибо за статью.
Вот только модуль не копируется.
Спасибо, очень помогли. С корректировками реализации тоже все плохо.
В 11.2 вернулись к ошибке. Себестоимость возврата не считается, если возврат не в том же месяце что и реализация.
В 1С Управление торговлей 11.1.9.70 (20 января 2015) уже исправили (хотя, в 11.1.9.66, 2 недели назад, вроде, ещё оставалась эта проблема, не хочется перепроверять)
Здравствуйте!
На последнем на текущий момент релизе конфигурации ошибка не воспроизводится.
Отчеты показывают верную информацию.
В последнем релизе как данный отчет называется, не могу его найти.
Здравствуйте!
Раздел “Финансы” – “Себестоимость товаров”.
И полутора лет не прошло о_О
Спасибо за статью. Очень много вопросов по расчету себестоимости в УТ 11=( Еще заметила “пропажу себестоимости” при применении схемы интеркампани.