При работе с конфигурациями на базе платформы 1С:Предприятие 8.3, такими как Управление торговлей (УТ 11), ERP Управление предприятием или Комплексная автоматизация, разработчики часто сталкиваются с вопросом: почему при проведении документа реализации в регистре ВыручкаИСебестоимостьПродаж заполнена только выручка, а колонки с себестоимостью остаются пустыми? В этой статье мы подробно разберем механизм формирования стоимостных данных, выясним, в каких модулях искать код расчета, и проанализируем, как связать данные разных организаций.
Прежде всего, нам необходимо понять фундаментальный принцип работы современных конфигураций 1С. Формирование движений в регистре ВыручкаИСебестоимостьПродаж разделено на два четких этапа. Попытка найти расчет суммы списания в момент проведения документа (в модуле объекта или в подписках на событие ОбработкаПроведения) не увенчается успехом, так как на этом этапе система еще не знает окончательной стоимости товара.
СебестоимостьТоваров в регистр ВыручкаИСебестоимостьПродаж.Если перед нами стоит задача кастомизации или отладки этого процесса, мы должны обратиться к специализированным модулям. Логика расчета себестоимости в УТ 11 крайне сложна и вынесена за пределы модулей документов. Рассмотрим основные точки входа.
Основная часть логики сосредоточена в общих модулях, отвечающих за расчет партий и стоимостных данных. Проанализируем ключевые объекты:
РасчетСебестоимостиПрикладныеАлгоритмы: Здесь описываются правила, по которым система собирает данные для отражения в регистрах выручки.РасчетСебестоимостиЛогика: Содержит алгоритмы распределения затрат и формирования стоимостных показателей.ПроведениеСерверУТ: В нем находятся механизмы, которые отвечают за фактическую запись наборов записей в регистры накопления.Для поиска места, где формируется запрос к данным, рекомендуется искать по ключевой фразе ТекстЗапросаВыручкаИСебестоимость. Система использует временные таблицы для подготовки данных перед массовой записью.
Разберем по шагам, как данные попадают в целевой регистр во время закрытия месяца. Проанализируем ситуацию, когда расчет себестоимости уже выполнен в регистре СебестоимостьТоваров.
Система выполняет процедуру, которую условно можно назвать «Отражение стоимостных данных в продажах». Ключевым моментом является сопоставление записей по следующим измерениям:
В коде это часто выглядит как вызов метода для формирования движений после завершения основного цикла расчета:
// Примерный фрагмент кода вызова отражения
ПроцедурыРасчетаСебестоимости.СформироватьДвиженияПослеРасчета(ПараметрыРасчета);
Внутри этого процесса формируется временная таблица ВТ_СтоимостьСписания. Именно в нее подтягиваются данные из регистра накопления СебестоимостьТоваров, и именно здесь происходит агрегация сумм, которые в итоге попадут в ВыручкаИСебестоимостьПродаж.
Рассмотрим ситуацию, описанную в теме: закупки ведутся на «Управленческую организацию», а продажи — на «Официальную». В стандартной логике 1С, если товар куплен на Организацию А, а продан от Организации Б, и между ними не оформлен документ «Передача товаров», себестоимость для Организации Б будет нулевой, так как остатков этого товара на ней не числится.
Попытка сделать «костыль» через отключение отбора по организации в коде:
Это крайне рискованный путь. Расчет себестоимости строится на решении системы линейных уравнений или на графе затрат, который жестко завязан на измерениях регистров. Простое удаление условия ГДЕ Организация = &Организация в запросе может привести к непредсказуемым результатам, так как нарушится баланс между регистрами остатков и регистром выручки.
Вместо изменения программного кода рекомендуется рассмотреть штатные возможности системы:
Если целью является расчет себестоимости в целом по компании без жесткой привязки к юридическим лицам, рассмотрим два варианта:
Если же вы все-таки решили вносить изменения в код, обратите внимание на метод СформироватьДвиженияПослеРасчета в обработке РасчетСебестоимостиТоваров. Именно там происходит финальное распределение сумм по регистрам после того, как все стоимостные показатели определены.
Важный момент: Помните, что регистр ВыручкаИСебестоимостьПродаж является оборотным, и его данные должны строго соответствовать данным регистра СебестоимостьТоваров. Любое расхождение приведет к тому, что отчеты «Валовая прибыль» и «Себестоимость товаров» будут показывать разные цифры, что недопустимо для корректного учета.