В практике работы с 1С:ERP специалисты часто сталкиваются с ситуацией, когда стандартные отчеты по финансовому результату показывают странное поведение. Одной из самых распространенных и сложных для диагностики проблем является расхождение данных в отчете «Выручка и себестоимость продаж».
Симптомы проблемы выглядят следующим образом: в группировках отчета (например, по заказу или подразделению) мы видим одну общую сумму себестоимости, но если попытаться развернуть отчет до детальных записей (до документов движения или статей затрат), сумма строк оказывается меньше итога, или строки вовсе отсутствуют. При этом, анализируя регистры, мы обнаруживаем, что данные отсутствуют в регистре сведений ДетализацияСебестоимостиПартииТоваровПостатейныеЗатраты.
Давайте подробно разберем, как устроен этот механизм, почему возникает данная ошибка и как её исправить.
Прежде всего, нам необходимо понять, как именно система строит отчет «Выручка и себестоимость продаж». В отличие от простых отчетов, которые берут данные из одной таблицы, этот отчет использует гибридную модель данных.
ВыручкаИСебестоимостьПродаж. Это основной финансовый регистр. Данные в него попадают гарантированно при расчете себестоимости, так как он фиксирует факт возникновения расходов и доходов в целом.ДетализацияСебестоимостиТоваров и ДетализацияСебестоимостиПартииТоваровПостатейныеЗатраты.Суть проблемы заключается в рассинхронизации этих источников. Если запись существует в регистре накопления (финансовый итог есть), но механизм партионного учета (ФИФО или Скользящая оценка) не смог полностью «разузловать» цепочку затрат до конкретной партии возникновения, запись в регистр детализации не создается.
В результате отчет «знает», что себестоимость есть (и показывает её в итоге), но «не знает», из каких конкретно партий и статей она сложилась (и показывает пустые строки или меньшую сумму при детализации).
Рассмотрим основные сценарии, при которых данные не попадают в ДетализацияСебестоимостиПартииТоваровПостатейныеЗатраты. Чаще всего это связано со сложными схемами распределения затрат.
Как было замечено в ходе обсуждения проблемы, часто сбой происходит, когда затраты образуются документом ПроизводствоБезЗаказа с направлением выпуска «На затраты».
В этом случае необходимо проверить Тип номенклатуры, которая выпускается:
ВыручкаИСебестоимостьПродаж, но не сможет создать запись в регистре детализации партий, так как физической партии-источника нет.Даже если визуально статьи затрат кажутся одинаковыми, критическое значение имеют настройки внутри элемента справочника СтатьиРасходов. Давайте проверим следующие параметры:
Вариант распределения:
Если в статье указано распределение «На финансовый результат» (даже если это происходит косвенно, через цепочку распределений), такие расходы не должны попадать в детализацию себестоимости товаров. Они списываются сразу на расходы периода (счет 90.07, 90.08 и т.д. в регламентированном учете).
Чтобы данные попали в детализацию себестоимости партии, вариант распределения должен быть «На себестоимость товаров» или «На производственные затраты».
Тип аналитики расходов:
Проанализируем соответствие аналитики. Если тип аналитики расхода (например, «Склад») не совпадает с объектом возникновения затрат в документе распределения (например, мы распределяем на «Заказ на производство»), система может рассчитать стоимостную оценку, но потерять «след» для детализации.
При использовании документа ПроизводствоБезЗаказа могут возникать циклические ссылки (выпуск затраты на саму себя или через один передел). Рассмотрим, как работает алгоритм расчета себестоимости в 1С:
СебестоимостьТоваров.При сложных встречных выпусках механизм детализации может прерваться, не найдя исходную партию. В итоге сумма в отчете есть, а расшифровки нет.
Если вы столкнулись с такой ситуацией, выполним следующие шаги для исправления.
Часто «потерянные» суммы зависают в других регистрах. Проверьте регистр накопления ПрочиеРасходы. Если система не смогла однозначно отнести затрату на партию выпуска (материальную себестоимость), она могла классифицировать её как прочий расход, который распределился на себестоимость продаж, но не прошел через регистры партий.
В регистрах 1С:ERP важную роль играет справочник КлючиАналитикиУчетаНоменклатуры. Бывают случаи, когда возникают дубли ключей аналитики. Регистр детализации может привязаться к «мертвому» ключу, в то время как основные движения идут по активному. Это можно проверить через «Все функции» (или «Функции для технического специалиста»), открыв соответствующий регистр сведений и сделав отбор по проблемному документу.
В обсуждении проблемы предлагалось снять отбор по конкретной реализации. Это дельный совет. Попробуйте сформировать отчет за период без отборов по регистратору. Иногда сумма «вылезает» в другой группировке или с пустой аналитикой, что сразу укажет на проблему с заполнением аналитик в первичных документах.
Регистры сведений (детализация) заполняются на самом последнем этапе закрытия месяца. Если процедура закрытия была выполнена с ошибками (даже не критичными) или этап «Формирование движений по партиям товаров» был пропущен/выполнен некорректно, основные суммы будут, а детализации — нет.
Попробуйте включить режим отладки или расширенного логирования расчета себестоимости (через настройки НСИ и Администрирование - Финансовый результат и контроллинг или через константы системы, если вы разработчик). Перезапустите расчет себестоимости только для одной организации и одного месяца.
Если пользовательский режим не дает ответа, программисту 1С следует сравнить данные прямым запросом. Нам нужно соединить данные регистра накопления и регистра сведений, чтобы увидеть дельту.
Примерная структура запроса для поиска расхождений:
ВЫБРАТЬ
Выручка.АналитикаУчетаНоменклатуры КАК Аналитика,
Выручка.ЗаказКлиента КАК Заказ,
СУММА(Выручка.СебестоимостьОборот) КАК СебестоимостьРегистрНакопления,
0 КАК СебестоимостьДетализация
ПОМЕСТИТЬ втДанные
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Выручка
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Детализация.АналитикаУчетаНоменклатуры,
Детализация.ЗаказКлиента,
0,
СУММА(Детализация.Стоимость)
ИЗ
РегистрСведений.ДетализацияСебестоимостиТоваров КАК Детализация
ГДЕ
Детализация.Период МЕЖДУ &НачалоПериода И &КонецПериода
СГРУППИРОВАТЬ ПО
Детализация.АналитикаУчетаНоменклатуры,
Детализация.ЗаказКлиента
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
втДанные.Аналитика,
втДанные.Заказ,
СУММА(втДанные.СебестоимостьРегистрНакопления) КАК СУммаРН,
СУММА(втДанные.СебестоимостьДетализация) КАК СуммаРС,
СУММА(втДанные.СебестоимостьРегистрНакопления) - СУММА(втДанные.СебестоимостьДетализация) КАК Разница
ИЗ
втДанные КАК втДанные
СГРУППИРОВАТЬ ПО
втДанные.Аналитика,
втДанные.Заказ
ИМЕЮЩИЕ
СУММА(втДанные.СебестоимостьРегистрНакопления) - СУММА(втДанные.СебестоимостьДетализация) <> 0
Такой запрос покажет конкретные аналитики, по которым есть «разрыв». Далее, взяв полученную АналитикаУчетаНоменклатуры, можно найти все документы движения по ней и проверить настройки статей затрат, участвующих в этих документах.
Проблема отсутствия данных в регистре ДетализацияСебестоимостиПартииТоваровПостатейныеЗатраты почти всегда кроется в разрыве цепочки партионного учета между возникновением затраты и конечным изделием. Основные «подозреваемые»:
Для исправления необходимо скорректировать первичные документы или настройки статей и выполнить полное перекрытие месяца.