Где в 1C:УТ 11 рассчитываются и формируются движения в регистре «Выручка и себестоимость продаж»?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

При работе с конфигурациями на базе платформы 1С:Предприятие 8.3, такими как Управление торговлей (УТ 11), ERP Управление предприятием или Комплексная автоматизация, разработчики часто сталкиваются с вопросом: почему при проведении документа реализации в регистре ВыручкаИСебестоимостьПродаж заполнена только выручка, а колонки с себестоимостью остаются пустыми? В этой статье мы подробно разберем механизм формирования стоимостных данных, выясним, в каких модулях искать код расчета, и проанализируем, как связать данные разных организаций.

Двухэтапная модель формирования движений

Прежде всего, нам необходимо понять фундаментальный принцип работы современных конфигураций 1С. Формирование движений в регистре ВыручкаИСебестоимостьПродаж разделено на два четких этапа. Попытка найти расчет суммы списания в момент проведения документа (в модуле объекта или в подписках на событие ОбработкаПроведения) не увенчается успехом, так как на этом этапе система еще не знает окончательной стоимости товара.

  1. Оперативный этап: При проведении документа (например, «Реализация товаров и услуг») в регистр записываются только количественные показатели, суммы выручки в валюте документа и валюте регламентированного учета, а также суммы НДС. Себестоимость на данном этапе остается нулевой.
  2. Регламентный этап: Окончательный расчет себестоимости и заполнение соответствующих ресурсов в регистре происходит только при выполнении регламентной операции «Расчет себестоимости» в рамках процедуры «Закрытие месяца». Именно в этот момент данные «транслируются» из регистра СебестоимостьТоваров в регистр ВыручкаИСебестоимостьПродаж.

Где искать программный код расчета?

Если перед нами стоит задача кастомизации или отладки этого процесса, мы должны обратиться к специализированным модулям. Логика расчета себестоимости в УТ 11 крайне сложна и вынесена за пределы модулей документов. Рассмотрим основные точки входа.

Основная часть логики сосредоточена в общих модулях, отвечающих за расчет партий и стоимостных данных. Проанализируем ключевые объекты:

Для поиска места, где формируется запрос к данным, рекомендуется искать по ключевой фразе ТекстЗапросаВыручкаИСебестоимость. Система использует временные таблицы для подготовки данных перед массовой записью.

Процесс отражения стоимостных данных

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

Система выполняет процедуру, которую условно можно назвать «Отражение стоимостных данных в продажах». Ключевым моментом является сопоставление записей по следующим измерениям:

  1. Аналитика учета номенклатуры (Номенклатура, Склад, Характеристика).
  2. Документ-регистратор (Ключ связи, позволяющий точно сопоставить строку реализации и строку списания стоимости).
  3. Раздел учета (например, «Товары на складах» или «Товары переданные на комиссию»).

В коде это часто выглядит как вызов метода для формирования движений после завершения основного цикла расчета:


// Примерный фрагмент кода вызова отражения
ПроцедурыРасчетаСебестоимости.СформироватьДвиженияПослеРасчета(ПараметрыРасчета);

Внутри этого процесса формируется временная таблица ВТ_СтоимостьСписания. Именно в нее подтягиваются данные из регистра накопления СебестоимостьТоваров, и именно здесь происходит агрегация сумм, которые в итоге попадут в ВыручкаИСебестоимостьПродаж.

Проблема разных организаций (Intercompany)

Рассмотрим ситуацию, описанную в теме: закупки ведутся на «Управленческую организацию», а продажи — на «Официальную». В стандартной логике 1С, если товар куплен на Организацию А, а продан от Организации Б, и между ними не оформлен документ «Передача товаров», себестоимость для Организации Б будет нулевой, так как остатков этого товара на ней не числится.

Попытка сделать «костыль» через отключение отбора по организации в коде: Это крайне рискованный путь. Расчет себестоимости строится на решении системы линейных уравнений или на графе затрат, который жестко завязан на измерениях регистров. Простое удаление условия ГДЕ Организация = &Организация в запросе может привести к непредсказуемым результатам, так как нарушится баланс между регистрами остатков и регистром выручки.

Вместо изменения программного кода рекомендуется рассмотреть штатные возможности системы:

Рекомендуемые решения задачи

Если целью является расчет себестоимости в целом по компании без жесткой привязки к юридическим лицам, рассмотрим два варианта:

  1. Использование механизма «Интеркампани»: Настройте схему передачи товаров между организациями. В этом случае при продаже «чужого» товара система автоматически или по расписанию создаст документ «Передача товаров», который перенесет себестоимость с закупающей организации на продающую. Это обеспечит корректность всех регистров.
  2. Настройка «Управленческий учет по компании в целом»: В настройках финансового результата можно включить опцию ведения учета без разреза по организациям. В этом случае система будет игнорировать границы юридических лиц при расчете себестоимости в управленческом разрезе, что и является целью автора вопроса.

Если же вы все-таки решили вносить изменения в код, обратите внимание на метод СформироватьДвиженияПослеРасчета в обработке РасчетСебестоимостиТоваров. Именно там происходит финальное распределение сумм по регистрам после того, как все стоимостные показатели определены.

Важный момент: Помните, что регистр ВыручкаИСебестоимостьПродаж является оборотным, и его данные должны строго соответствовать данным регистра СебестоимостьТоваров. Любое расхождение приведет к тому, что отчеты «Валовая прибыль» и «Себестоимость товаров» будут показывать разные цифры, что недопустимо для корректного учета.

← На главную