Вопрос получения себестоимости в системе 1С:ERP Управление предприятием является одним из самых часто задаваемых среди разработчиков. В отличие от более простых конфигураций, здесь себестоимость — это результат сложного регламентного процесса, который окончательно формируется только при закрытии месяца. В этой статье мы разберем, почему не существует одной «магической» функции, и какие инструменты всё же можно использовать для решения этой задачи.
Прежде чем переходить к коду, давайте проанализируем ситуацию с точки зрения логики системы. В 1С:ERP (начиная с версий 2.4 и 2.5) себестоимость не записывается в момент проведения документа поступления или реализации в окончательном виде. На это влияют несколько факторов:
Рассмотрим подробнее РегистрСведений.СтоимостьТоваров. Это вспомогательный регистр, который специально предназначен для того, чтобы быстро получать рассчитанную стоимость единицы товара без выполнения сложных запросов к регистрам накопления. Данные в него попадают после выполнения регламентной операции «Расчет себестоимости».
Преимущества: содержит уже готовую стоимость и количество, что позволяет простым делением получить цену за единицу.
Недостатки: если расчет за месяц не производился, данных в регистре не будет или они будут неактуальными. Также он не является периодическим в привычном понимании 1С, так как хранит срез данных по итогам расчетов.
Для более детального анализа, особенно если нам нужно получить данные в середине месяца или с учетом различных аналитик (склад, раздел учета), мы должны обратиться к РегиструНакопления.СебестоимостьТоваров. Это основной «двигатель» учета себестоимости.
Разберем, как построить запрос к этому регистру. Важно помнить, что в ERP 2.5 данные разделены на суммы с НДС и без НДС. Посмотрим на пример структуры запроса:
ВЫБРАТЬ
СебестоимостьТоваровОстатки.КоличествоОстаток КАК Кол,
СебестоимостьТоваровОстатки.СтоимостьОстаток КАК СуммаБезНДС,
СебестоимостьТоваровОстатки.СтоимостьСНДСОстаток КАК СуммаСНДС
ИЗ
РегистрНакопления.СебестоимостьТоваров.Остатки(&ДатаОстатков,
Организация = &Организация
И Номенклатура = &Номенклатура) КАК СебестоимостьТоваровОстатки
Проанализируем ситуацию: если результат запроса пустой, это может означать, что товар либо отсутствует на остатках, либо регламентный расчет еще ни разу не запускался. Для получения оперативной себестоимости (до закрытия месяца) система использует механизм «Предварительного расчета».
В типовом решении 1С:ERP реализован мощный программный интерфейс для работы с расчетами. Если вам необходимо получить данные так, как это делает сама система в отчетах (например, в отчете «Себестоимость товаров организации»), обратите внимание на общий модуль СебестоимостьТоваровСервер. Хотя в нем нет функции типа ПолучитьЧисло(), в нем реализованы методы для подготовки временных таблиц с данными о стоимости.
Выясним причину, по которой иногда данные в отчетах «Себестоимость товаров» и «Валовая прибыль» различаются. Зачастую это связано с операциями Интеркампани. Когда одна наша организация продает товар другой нашей организации, для первой это продажа с прибылью, а для второй — себестоимость закупки. В зависимости от настроек отчета, эти внутренние наценки могут исключаться или учитываться.
Если ваша задача — вывести примерную себестоимость в печатную форму или отчет в середине месяца, необходимо понимать разницу между типами расчета:
Для программного доступа к этим данным лучше всего использовать методы менеджера регистра РегистрНакопления.СебестоимостьТоваров, предварительно убедившись, что в системе настроено расписание для фонового расчета себестоимости.
Если вам все же нужно написать функцию, которая возвращает себестоимость, мы рекомендуем следующий алгоритм:
РегистреСведений.СтоимостьТоваров за последний закрытый период. Это даст максимально точную «историческую» себестоимость.РегистраНакопления.СебестоимостьТоваров.ПартииТоваровОрганизаций.Таким образом, вместо поиска одной функции, мы создаем надежный механизм, который учитывает специфику закрытия периода в 1С:ERP. Это гарантирует, что полученные вами цифры будут соответствовать официальным финансовым отчетам компании.