Используя "Управление торговлей 11" с начала 2014 г. при закрытии месяца часто сталкиваемся со следующей проблемой - не рассчитывается себестоимость некоторых товаров. Перейдя в журнал регистрации можно видеть записи следующего вида:
По номенклатуре Пакет бум. Крафт 330*200*90*95 (2000шт), склад: Холодный, организация: Моя организация обнаружен некорректный остаток в регистре "Себестоимость товаров": Количество = 0, СтоимостьБезНДС = 2,13, СтоимостьРегл = 2,13
Сформировав отчет "Анализ себестоимости товаров" можно убедиться, что действительно, в данном случае документ расчета себестоимости почему-то некорректно закрыл себестоимость без ндс и себестоимость упр. - остался небольшой остаток, несмотря на то, что количество на конец месяца нулевое:
Эмпирическим путем было выявлено, что такая "ошибка" расчета в 99% случаев связана с некорректным расчетом себестоимости в ранних периодах, ежели перепроведение документов данного месяца не улучшило ситуацию. Т.е. несмотря на то, что предыдущие месяцы были закрыты (произведен расчет себестоимости), в них уже была заложена ошибка расчета, однако она не была проявлена явно, поскольку остаток товара на конец месяца был ненулевой. Найти "когда" возникла первая ошибка, чтобы с этого момента перепровести документы, можно отчетом "Анализ себестоимости товаров" (вывести поле "Средняя цена" для удобства анализа). В большинстве случаев это помогает, однако, во-первых, может потребоваться перепроводить очень большой период, а во-вторых, не всегда даже это помогает.
В таком случае исправить дело можно записью в регистр накопления "Себестоимость товаров" документом "Корректировка регистров".
ЗаписатьНаборЗаписей(НаборСебестоимостьТоваров, КоличествоСебестоимостьТоваров, Истина);
Если ИспользоватьУчетПрочихДоходовРасходов Тогда
ЗаписатьНаборЗаписей(НаборПрочиеРасходы, КоличествоПрочиеРасходы, Истина);
ЗаписатьНаборЗаписей(НаборПрочиеДоходы, КоличествоПрочиеДоходы, Истина);
КонецЕсли;
ЗаписатьНаборЗаписей(НаборПрочиеАктивыПассивы, КоличествоПрочиеАктивыПассивы, Истина);
ЗаписатьНаборЗаписей(НаборСебестоимостьТоваров, КоличествоСебестоимостьТоваров, Истина);
КоличествоСебестоимостьТоваров = 0;
ИсправитьКорректностьОстатковВРегистреСебестоимостьТоваров(Дата, мМассивОрганизаций, НаборСебестоимостьТоваров, КоличествоСебестоимостьТоваров);
Текст процедуры "ИсправитьКорректностьОстатковВРегистреСебестоимостьТоваров" следующий:
Процедура ИсправитьКорректностьОстатковВРегистреСебестоимостьТоваров(Дата, МассивОрганизаций, НаборСебестоимостьТоваров, КоличествоСебестоимостьТоваров)
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Таб.РазделУчета КАК РазделУчета,
| Таб.ВидЗапасов КАК ВидЗапасов,
| Таб.Организация КАК Организация,
| Таб.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| АналитикаНоменклатуры.Номенклатура КАК Номенклатура,
| АналитикаНоменклатуры.Характеристика КАК Характеристика,
| АналитикаНоменклатуры.Склад КАК Склад,
| Таб.Количество КАК Количество,
| Таб.Стоимость КАК Стоимость,
| Таб.СтоимостьБезНДС КАК СтоимостьБезНДС,
| Таб.СуммаДопРасходов КАК СуммаДопРасходов,
| Таб.СуммаДопРасходовБезНДС КАК СуммаДопРасходовБезНДС,
| Таб.СтоимостьРегл КАК СтоимостьРегл
|
|ИЗ
| (ВЫБРАТЬ
| Т.РазделУчета КАК РазделУчета,
| Т.ВидЗапасов КАК ВидЗапасов,
| Т.Организация КАК Организация,
| Т.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| Т.КоличествоОстаток КАК Количество,
| Т.СтоимостьОстаток КАК Стоимость,
| Т.СтоимостьБезНДСОстаток КАК СтоимостьБезНДС,
| Т.СуммаДопРасходовОстаток КАК СуммаДопРасходов,
| Т.СуммаДопРасходовБезНДСОстаток КАК СуммаДопРасходовБезНДС,
| Т.СтоимостьРеглОстаток КАК СтоимостьРегл
| ИЗ
| РегистрНакопления.СебестоимостьТоваров.Остатки(&ГраницаДатаОкончания,
| Организация В (&МассивОрганизаций)) КАК Т
| ) КАК Таб
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаНоменклатуры
| ПО Таб.АналитикаУчетаНоменклатуры = АналитикаНоменклатуры.КлючАналитики
|
|ГДЕ
| Таб.Количество = 0
| И НЕ(Таб.Стоимость = 0
| И Таб.СтоимостьБезНДС = 0
| И Таб.СуммаДопРасходов = 0
| И Таб.СуммаДопРасходовБезНДС = 0
| И Таб.СтоимостьРегл = 0)";
Запрос.УстановитьПараметр("МассивОрганизаций", МассивОрганизаций);
Запрос.УстановитьПараметр("ГраницаДатаОкончания", Новый Граница(КонецМесяца(Дата), ВидГраницы.Включая));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
КоличествоСебестоимостьТоваров = КоличествоСебестоимостьТоваров + 1;
Запись = НаборСебестоимостьТоваров.Добавить();
ЗаполнитьЗначенияСвойств(Запись, Выборка);
Запись.Период = Дата;
Запись.ВидДвижения = ВидДвиженияНакопления.Расход;
КонецЦикла;
КонецПроцедуры // ИсправитьКорректностьОстатковВРегистреСебестоимостьТоваров()
Эту процедуру можно вынести в общий серверный модуль.
Теперь при расчете себестоимости такие записи, когда есть нулевой количественный остаток и ненулевые остатки сумм (Стоимость, СтоимостьБезНДС, СуммаДопРасходов, СуммаДопРасходовБезНДС или СтоимостьРегл), будут создаваться автоматически.
Итак, повторим способы "борьбы" с указанной проблемой закрытия месяца:
1. Перепровести документы за нужный месяц (либо начиная с момента нарушения корректного расчета себестоимости по данному товару).
2. Если перепроведение не помогло или его невозможно сделать, ввести корректирующую запись регистра "Себестоимость товаров" с помощью документа "Корректировка регистров" или...
3. Добавить указанный в статье код в модуль документа "Расчет себестоимости товаров".
P.S. Возможно, в более свежих релизах "Управления торговлей 11" эта ошибка расчета уже устранена и потому для пользователей/администраторов таких баз данная статья неактуальна.