IE2017

Закрытие месяца (Управление торговлей 11) - решение проблемы ненулевой себестоимости при отсутствии товара

Обработки - Закрытие периода

Часто при запуске процедуры "Закрытие месяца" выскакивает ошибка следующего содержания: "По номенклатуре ... обнаружен некорректный остаток в регистре "Себестоимость товаров"" и обработка прекращается на пункте "Расчет себестоимости". Данная статья посвящена методам борьбы с указанной ошибкой.

Используя "Управление торговлей 11" с начала 2014 г. при закрытии месяца часто сталкиваемся со следующей проблемой - не рассчитывается себестоимость некоторых товаров. Перейдя в журнал регистрации можно видеть записи следующего вида:

По номенклатуре Пакет бум. Крафт 330*200*90*95 (2000шт), склад: Холодный, организация: Моя организация обнаружен некорректный остаток в регистре "Себестоимость товаров": Количество = 0, СтоимостьБезНДС = 2,13, СтоимостьРегл = 2,13

Сформировав отчет "Анализ себестоимости товаров" можно убедиться, что действительно, в данном случае документ расчета себестоимости почему-то некорректно закрыл себестоимость без ндс и себестоимость упр. - остался небольшой остаток, несмотря на то, что количество на конец месяца нулевое:

Эмпирическим путем было выявлено, что такая "ошибка" расчета в 99% случаев связана с некорректным расчетом себестоимости в ранних периодах, ежели перепроведение документов данного месяца не улучшило ситуацию. Т.е. несмотря на то, что предыдущие месяцы были закрыты (произведен расчет себестоимости), в них уже была заложена ошибка расчета, однако она не была проявлена явно, поскольку остаток товара на конец месяца был ненулевой. Найти "когда" возникла первая ошибка, чтобы с этого момента перепровести документы, можно отчетом "Анализ себестоимости товаров" (вывести поле "Средняя цена" для удобства анализа). В большинстве случаев это помогает, однако, во-первых, может потребоваться перепроводить очень большой период, а во-вторых, не всегда даже это помогает.

В таком случае исправить дело можно записью в регистр накопления "Себестоимость товаров" документом "Корректировка регистров".

В моем случае запись такая:
Нужный Вид запасов определил по отчету "Анализ себестоимости товаров", добавив соответствующую группировку.
Ну и, наконец, чтобы в дальнейшем не сталкиваться с такими ситуациями, было решено исправить алгоритм проведения документа "Расчет себестоимости", чтобы данные корректировочные записи делались при его проведении. Показано на примере релиза 11.1.2.31 (для 11.1.9.55, по-видимому, тоже будет работать, но не проверялось).
Итак, в модуле документа "Расчет себестоимости товаров" находим процедуру "СкорректироватьСтомостьСписанияЗапасов" и в конце, перед блоком 
ЗаписатьНаборЗаписей(НаборСебестоимостьТоваров, КоличествоСебестоимостьТоваров, Истина);
Если ИспользоватьУчетПрочихДоходовРасходов Тогда
    ЗаписатьНаборЗаписей(НаборПрочиеРасходы, КоличествоПрочиеРасходы, Истина);
    ЗаписатьНаборЗаписей(НаборПрочиеДоходы, КоличествоПрочиеДоходы, Истина);
КонецЕсли;
ЗаписатьНаборЗаписей(НаборПрочиеАктивыПассивы, КоличествоПрочиеАктивыПассивы, Истина);

вставляем следующее:
ЗаписатьНаборЗаписей(НаборСебестоимостьТоваров, КоличествоСебестоимостьТоваров, Истина);
КоличествоСебестоимостьТоваров = 0;
ИсправитьКорректностьОстатковВРегистреСебестоимостьТоваров(Дата, мМассивОрганизаций, НаборСебестоимостьТоваров, КоличествоСебестоимостьТоваров);
        
Текст процедуры "ИсправитьКорректностьОстатковВРегистреСебестоимостьТоваров" следующий:
Процедура ИсправитьКорректностьОстатковВРегистреСебестоимостьТоваров(Дата, МассивОрганизаций, НаборСебестоимостьТоваров, КоличествоСебестоимостьТоваров) 

    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    Таб.РазделУчета                        КАК РазделУчета,
    |    Таб.ВидЗапасов                         КАК ВидЗапасов,
    |    Таб.Организация                        КАК Организация,
    |    Таб.АналитикаУчетаНоменклатуры         КАК АналитикаУчетаНоменклатуры,
    |    АналитикаНоменклатуры.Номенклатура     КАК Номенклатура,
    |    АналитикаНоменклатуры.Характеристика   КАК Характеристика,
    |    АналитикаНоменклатуры.Склад            КАК Склад,
    |    Таб.Количество                         КАК Количество,
    |    Таб.Стоимость                         КАК Стоимость,
    |    Таб.СтоимостьБезНДС                   КАК СтоимостьБезНДС,
    |    Таб.СуммаДопРасходов                  КАК СуммаДопРасходов,
    |    Таб.СуммаДопРасходовБезНДС            КАК СуммаДопРасходовБезНДС,
    |    Таб.СтоимостьРегл                     КАК СтоимостьРегл
    |
    |ИЗ
    |    (ВЫБРАТЬ
    |        Т.РазделУчета                   КАК РазделУчета,
    |        Т.ВидЗапасов                    КАК ВидЗапасов,
    |        Т.Организация                   КАК Организация,
    |        Т.АналитикаУчетаНоменклатуры    КАК АналитикаУчетаНоменклатуры,
    |        Т.КоличествоОстаток             КАК Количество,
    |        Т.СтоимостьОстаток              КАК Стоимость,
    |        Т.СтоимостьБезНДСОстаток        КАК СтоимостьБезНДС,
    |        Т.СуммаДопРасходовОстаток       КАК СуммаДопРасходов,
    |        Т.СуммаДопРасходовБезНДСОстаток КАК СуммаДопРасходовБезНДС,
    |        Т.СтоимостьРеглОстаток          КАК СтоимостьРегл
    |    ИЗ
    |        РегистрНакопления.СебестоимостьТоваров.Остатки(&ГраницаДатаОкончания,
    |                                            Организация В (&МассивОрганизаций)) КАК Т
    |    ) КАК Таб
    |
    |    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаНоменклатуры
    |        ПО Таб.АналитикаУчетаНоменклатуры = АналитикаНоменклатуры.КлючАналитики
    |
    |ГДЕ
    |    Таб.Количество = 0
    |    И НЕ(Таб.Стоимость = 0
    |        И Таб.СтоимостьБезНДС = 0
    |        И Таб.СуммаДопРасходов = 0
    |        И Таб.СуммаДопРасходовБезНДС = 0
    |        И Таб.СтоимостьРегл = 0)";
    
    Запрос.УстановитьПараметр("МассивОрганизаций", МассивОрганизаций);
    Запрос.УстановитьПараметр("ГраницаДатаОкончания", Новый Граница(КонецМесяца(Дата), ВидГраницы.Включая));

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        КоличествоСебестоимостьТоваров = КоличествоСебестоимостьТоваров + 1;
        
        Запись = НаборСебестоимостьТоваров.Добавить();
        ЗаполнитьЗначенияСвойств(Запись, Выборка);
        Запись.Период      = Дата;
        Запись.ВидДвижения = ВидДвиженияНакопления.Расход;
    КонецЦикла;    
    
КонецПроцедуры // ИсправитьКорректностьОстатковВРегистреСебестоимостьТоваров()

Эту процедуру можно вынести в общий серверный модуль.

Теперь при расчете себестоимости такие записи, когда есть нулевой количественный остаток и ненулевые остатки сумм (Стоимость,  СтоимостьБезНДС,  СуммаДопРасходов, СуммаДопРасходовБезНДС или СтоимостьРегл), будут создаваться автоматически.

Итак, повторим способы "борьбы" с указанной проблемой закрытия месяца:

1. Перепровести документы за нужный месяц (либо начиная с момента нарушения корректного расчета себестоимости по данному товару).

2. Если перепроведение не помогло или его невозможно сделать, ввести корректирующую запись регистра "Себестоимость товаров" с помощью документа "Корректировка регистров" или...

3. Добавить указанный в статье код в модуль документа "Расчет себестоимости товаров".

P.S. Возможно, в более свежих релизах "Управления торговлей 11" эта ошибка расчета уже устранена и потому для пользователей/администраторов таких баз данная статья неактуальна.

Комментарии
1. Сергей (Che) Коцюра (CheBurator) 3387 12.12.16 20:27 Сейчас в теме
плохое решение, т.к. такое исправление не позволит выявлять/отличать мелкие помарки от глобальных ошибок. По меньшей мере следует вставить вывод сообщения о автокорректировке с величиной корректировки.
2. Николай Зайков (Mortiferus) 270 13.12.16 07:26 Сейчас в теме
(1) Плохое решение - это которое? Первое, второе или третье? Никто ж не заставляет делать также, у кого есть мозги, сам решит для себя, что лучше выбрать. Я предлагаю выбор.
3. Николай Зайков (Mortiferus) 270 13.12.16 07:28 Сейчас в теме
Писать сообщения в журнал регистрации - пожалуйста, кому надо, тот добавит. Я для себя не вижу в этом смысла - что мне потом с этой информацией делать? Мне важно, чтобы месяц закрылся и руководитель вовремя получил отчет по балансу организации.
4. Николай Зайков (Mortiferus) 270 13.12.16 07:33 Сейчас в теме
и по поводу глобальных ошибок - возможно, не спорю, но у меня с 2014 г на 7-и боевых базах ни разу не выходила разница в суммах более, скажем так, 10 р. Как правило, это либо 2-3 р или вообще 1-10 коп.
Более того, если я исправлю "по-правильному", т.е. перепроведя документы прошлых периодов, руководитель будет очень недоволен, что изменились цифры баланса за прошлый месяц - ну пунктик такой у него на этом, что я поделаю... Так что отнести на текущий месяц эту разницу в несколько рублей на общем фоне в несколько тысяч рублей - самое оптимальное.
5. Николай Беляев (freez1301) 149 13.12.16 09:44 Сейчас в теме
А я делаю немного не так. Открываю регистр Себестоимость товаров. Делаю отбор по складу, организации и номенклатуре - в подавляющем большинстве случаев ошибка в текущем закрываемом месяце - отменяю и провожу документ, вызвавший ошибку, закрываю месяц. Если же ошибка все таки вылезла из прошлого периода - все зависит от того - насколько глубоко она находится, тут уже по ситуации.
Ну это если в двух словах конечно
6. Лилия Мищенко (LiliyaM) 71 13.12.16 16:28 Сейчас в теме
Ребята, я Вас немного огорчу) Я не верю, что расчет себестоимости в УТ11 работает не верно, потому что он работает правильно в УТ3.1. Так же перепроводить документы, которые проходят по партиям за прошлые периоды не всегда нужно. И совет - не стоит "ковырять" расчет себестоимости. Копайте глубже))) Наводка - правильность оформления документов и соблюдение логики партионного учета.
Единственное что, так это могут быть проблемы с доп расходами. Но, опять же, если все доки верно оформлены, то их не должно быть.
Дальше, просто перепроводя документы, Вы на самом деле просто скидываете точку актуальности, которая уже и перерасчитывает верно все.
Ну вот как-то так)
7. Николай Зайков (Mortiferus) 270 14.12.16 07:51 Сейчас в теме
(6) 1) Не понял, что такое УТ3.1? Если имелось в виду УТ10.3 - то, в свою очередь, я вас немного огорчу - это, как говорят в Одессе, две очень большие разницы. 2) В нашем случае допрасходов как раз нет, но есть много-много корректировок реализаций. Вот они-то и создают "неправильные" движения, точнее расчет себестоимости по этим документам. А от корректировок, к сожалению, не уйти, у нас решили так - провел реализацию - баста, менять ее уже нельзя, только через корректировку. И бывает, что на один документ до 5 корректировок. Почему так много - это уже не к программисту вопрос. 3) Фраза про сброс точки актуальности не совсем к месту, уж извините. И что при этом все пересчитывается - вполне очевидно, не пойму в чем тут противоречие с моей статьей. Я как раз об этом и говорю - чтобы было минимум проблем - надо периодически перепроводить документы, хотя бы перед закрытием месяца. Возможно, это явно не написано, однако я решил такие банальные вещи не писать - это очевидно следует из текста. Статья как раз о тонкостях закрытия, с которыми я лично столкнулся и поделился опытом борьбы с ними. Кто захочет, то примет к сведению, кто не захочет - может следить за правильностью оформления документов. Каждый волен делать то, что хочет.
8. Artem Shamsutdinov (smartem) 14.12.16 07:55 Сейчас в теме
(0) В одном из последних релизов ERP эта ошибка вроде как была исправлена. Закрытие декабря покажет.
Я так понимаю, что в УТ11 автоматом ложна была ошибка уйти.
9. Игорь (IgorS) 41 14.12.16 10:07 Сейчас в теме
(7) УТ3.1 - "Управление торговлей для Украины 3.1". Сделано на основе "Управление торговлей 11". Я тоже не верю, что разработчики из 1С-Украина могли исправить ошибки исходной конфы. Добавить своих - это запросто :)
10. Лилия Мищенко (LiliyaM) 71 14.12.16 15:23 Сейчас в теме
(7)
Не понял, что такое УТ3.1? Если имелось в виду УТ10.3 - то, в свою очередь, я вас немного огорчу - это, как говорят в Одессе, две очень большие разницы.

ну таки раз знаете как говорят в Одессе, то я имею Вам сказать, шо УТ3.1 это аналог УТ11 для Украины)
Ну а на счет корректировок - они делаются на основании реализаций? Если таки да, то программа берет с/ст из них, насколько я понимаю. К сожалению, я не имею большого опыта работы с корректировками, но знаю, что, если возврат от клиента не имеет документа основания, то таки тогда возникает такая ошибка.
11. Лилия Мищенко (LiliyaM) 71 14.12.16 15:26 Сейчас в теме
(9) Да, багов предостаточно))) особенно со следом расчета НДС. но я уже год закрываю каждый день месяца и сталкивалась только с теми проблемами, что неверно оформлены документы или не в той последовательности. Если все по феншую, то с/ст рассчитывается как часики.
12. Николай Зайков (Mortiferus) 270 15.12.16 10:08 Сейчас в теме
(11) ну я вас поздравляю. А у нас не так.
13. Николай Зайков (Mortiferus) 270 15.12.16 10:12 Сейчас в теме
(8) к сожалению, мы не имеем возможности обновлять базу до последнего релиза. Поэтому ошибки приходится самим исправлять. Их там кстати предостаточно было.
14. Artem Shamsutdinov (smartem) 15.12.16 11:18 Сейчас в теме
(13) В этом и смысл обновления до свежих релизов, что бы текущие ошибки были исправлены...

... и, к сожалению, добавлены новые :(
15. Николай Зайков (Mortiferus) 270 15.12.16 13:09 Сейчас в теме
(14) а зачем, если косяки уже все исправлены? этот я тоже уже исправил. смысла не вижу никакого.
16. Роман Мишкин (smilejka) 29 23.12.16 12:09 Сейчас в теме
Столкнулся с такой же проблемой у клиента. Регистрировали в 1С, написали что ошибку исправили

После выполнения регламентных операций по закрытию месяца в регистре "Себестоимость товаров" возникают отрицательные суммовые остатки без количества, если в статье расходов с вариантом распределения "На себестоимость товаров" было изменено правило распределения и ранее по этой статье были уже распределены расходы.

"Исправлена: "1С:Управление торговлей 11", версия 11.2.3.175"

https://bugboard.v8.1c.ru/error/000019162.html

Клиент не может обновиться, т.к. база сильно доработана, но в то же время мы предлагали схожее решение корректировать постфактум - отказались.
Оставьте свое сообщение