Как программно рассчитать себестоимость продукции (например, торта) в 1С?

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

Расчет себестоимости продукции в 1С — это задача, которая на первый взгляд может показаться простой, но на самом деле имеет множество нюансов. В зависимости от того, какую именно себестоимость мы хотим получить (плановую, фактическую, себестоимость реализации), а также от полноты и структуры наших данных, подходы к расчету могут существенно отличаться. Давайте вместе разберемся в этом вопросе, анализируя различные аспекты и методы.

Виды себестоимости: что именно мы хотим рассчитать?

Прежде чем приступать к коду, критически важно понять, какой именно вид себестоимости нам нужен. Как показало обсуждение, часто под словом "себестоимость" подразумеваются разные вещи. Рассмотрим основные виды:

  1. Плановая себестоимость (калькуляция блюда/продукта). Это расчетная величина, которая формируется на основании текущих или усредненных цен на ингредиенты и предполагаемых норм расхода. Она не учитывает фактические затраты конкретной партии, а служит для:
    • Предварительной оценки стоимости продукции.
    • Ценообразования и формирования прайс-листов.
    • Планирования закупок и производства.

    Для такой себестоимости нам не нужны фактические остатки на складе, только актуальные цены и спецификация продукта.

  2. Фактическая себестоимость запасов. Это себестоимость, определяемая по реальным понесенным затратам на приобретение или производство конкретных партий материалов или готовой продукции. Она учитывает стоимость приобретения каждой партии материалов и обычно формируется на основе данных регистров накопления, содержащих информацию о количестве и стоимости. Для ее расчета важны не только текущие цены, но и цены тех партий, которые были фактически использованы.
  3. Фактическая себестоимость реализации. Это себестоимость той продукции, которая уже была продана. Она рассчитывается на основе фактической себестоимости списанных запасов по одному из методов (ФИФО, по средней и т.д.) и окончательно формируется, как правило, по итогам месяца при закрытии периода, когда все расходы учтены и распределены.
  4. Полная себестоимость. Помимо прямых материальных затрат, она включает в себя дополнительные расходы, такие как заработная плата производственного персонала, амортизация оборудования, а также косвенные (общепроизводственные, общехозяйственные) расходы, распределенные по объектам калькуляции.

В нашем случае, когда автор вопроса изначально не уточняет вид себестоимости, но упоминает спецификацию торта, регистр сведений с ценами и регистр накопления с остатками, мы можем предположить, что речь может идти как о плановой (на основе цен), так и о фактической (с учетом остатков по их стоимости).

Исходные данные: регистры и их значение

Для расчета себестоимости нам необходимо правильно интерпретировать данные из указанных регистров:

  1. Спецификация торта. Это, вероятно, табличная часть какого-либо документа или элемент справочника, который описывает состав торта, то есть из каких ингредиентов он состоит и в каком количестве. Например, для торта "Наполеон" это будут мука, яйца, сахар, масло, молоко и т.д. с указанием их веса или объема.
  2. Регистр сведений с ценами на продукцию. Этот регистр обычно хранит актуальные (или исторические) цены на номенклатуру. Он идеален для расчета плановой себестоимости, так как позволяет получить текущую стоимость каждого ингредиента. Например, мы можем запросить цену муки на сегодня.
  3. Регистр накопления "Остатки продукции". Этот регистр хранит информацию о наличии номенклатуры на складах. Ключевой момент здесь — что именно хранится в этом регистре. Если он содержит только Количество, то для расчета фактической себестоимости он бесполезен. Если же в ресурсах регистра помимо Количество есть также Стоимость (или Сумма), то этот регистр является основой для расчета фактической себестоимости, так как он позволяет учитывать стоимость приобретения каждой партии ингредиентов. Важно также понимать, что регистры остатков (остаточные регистры накопления) хранят состояние на определенный момент времени, а не обороты за период. Обороты (поступление/расход) обычно хранятся в оборотных регистрах накопления.

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

Расчет плановой себестоимости (калькуляции)

Если наша задача — рассчитать ориентировочную (плановую) себестоимость торта на основе текущих цен, игнорируя фактические остатки и их стоимость, то процесс будет достаточно прямолинейным. Этот подход часто используется в общепите для "калькуляции блюд" или при расчете себестоимости новой продукции для ценообразования.

Шаги расчета:

  1. Получаем состав торта. Из табличной части спецификации мы получаем список всех ингредиентов и их нормативное количество для производства одного торта.
  2. Получаем текущие цены. Для каждого ингредиента из состава мы запрашиваем актуальную цену из регистра сведений цен на текущую дату.
  3. Рассчитываем сумму. Умножаем количество каждого ингредиента на его цену и суммируем полученные значения.

Пример концептуального кода (Запрос):

Предположим, у нас есть следующие структуры:

Код будет выглядеть примерно так:


Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	Ингредиенты.Ингредиент КАК Ингредиент,
|	Ингредиенты.Количество КАК Количество,
|	Цены.Цена КАК Цена
|ИЗ
|	Справочник.Номенклатура.СпецификацииТортов.Ингредиенты КАК Ингредиенты
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК Цены
|ПО Ингредиенты.Ингредиент = Цены.Номенклатура
|ГДЕ
|	Ингредиенты.Ссылка = &Торт
|	И Цены.Период = &ДатаЦены"; // Или условие для получения актуальной цены на определенную дату

Запрос.УстановитьПараметр("Торт", МойТортСсылка); // Ссылка на наш торт
Запрос.УстановитьПараметр("ДатаЦены", ТекущаяДата()); // Дата, на которую нужны цены

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

ПлановаяСебестоимость = 0;
Пока Выборка.Следующий() Цикл
	Если Выборка.Цена <> Неопределено Тогда
		ПлановаяСебестоимость = ПлановаяСебестоимость + Выборка.Количество * Выборка.Цена;
	КонецЕсли;
КонецЦикла;

// Теперь ПлановаяСебестоимость содержит рассчитанную сумму

Обратите внимание, что в запросе использовано ЛЕВОЕ СОЕДИНЕНИЕ. Это важно, чтобы получить все ингредиенты торта, даже если для какого-то из них цена не указана в регистре сведений. В таком случае, нам придется принять решение: либо исключить этот ингредиент, либо использовать какую-то стандартную/плановую цену для него, либо сигнализировать об ошибке.

Расчет фактической себестоимости запасов

Для расчета фактической себестоимости нам потребуется использовать данные из регистра накопления "Остатки продукции", который должен хранить не только количество, но и стоимость каждой партии ингредиентов. Это значительно сложнее, так как требуется корректное списание стоимости в соответствии с учетной политикой.

Методы оценки себестоимости запасов:

В 1С применяются различные методы списания запасов, которые влияют на расчет фактической себестоимости:

  1. По средней себестоимости. Себестоимость запасов рассчитывается как среднее арифметическое. В зависимости от настроек учетной политики, это может быть средняя взвешенная (когда стоимость пересчитывается при каждом поступлении) или скользящая средняя (когда стоимость рассчитывается на конец периода). Этот метод является наиболее распространенным и часто используется в бухгалтерском учете.
  2. ФИФО (First In, First Out). Запасы списываются в том порядке, в каком они поступили. То есть, сначала списываются самые "старые" по дате поступления партии по их стоимости. Этот метод чаще применяется в управленческом учете, а также в некоторых отраслях (например, для скоропортящихся продуктов).
  3. По себестоимости каждой единицы. Применяется для уникальных запасов, которые не могут взаимозаменяться (например, ювелирные изделия, дорогое оборудование). Для каждого экземпляра номенклатуры ведется индивидуальный учет его стоимости.

Выбор метода учета себестоимости устанавливается в УчетнойПолитикеОрганизации и влияет на то, как система будет автоматически рассчитывать стоимость при списании материалов в производство. Кодом мы не "высчитываем" себестоимость запасов каждый раз с нуля, а используем данные, уже рассчитанные и накопленные системой в регистрах при проведении документов движения товаров (списания в производство, реализации).

Как это работает в 1С:

  1. Поступление материалов. При поступлении ингредиентов (например, документ "Поступление товаров и услуг") записывается их количество и стоимость в регистр накопления "Остатки товаров" (или аналогичный), где ведется партионный учет или учет по средней.
  2. Производство торта. При списании ингредиентов на производство (например, документ "Передача материалов в производство", "Отчет производства за смену", "Выпуск продукции") система автоматически определяет стоимость списываемых материалов в соответствии с выбранным методом оценки запасов (ФИФО, по средней).
  3. Регистр накопления "Затраты". Списанная стоимость ингредиентов обычно попадает в регистры, отражающие прямые материальные затраты на производство (например, регистр накопления "Затраты на выпуск продукции" или бухгалтерские счета 20, 23).
  4. Закрытие месяца. Окончательный расчет фактической себестоимости выпущенной продукции, включая распределение косвенных расходов, происходит при выполнении регламентных операций по закрытию месяца.

Таким образом, для получения фактической себестоимости торта кодом, мы должны не сами "считать", а запрашивать уже рассчитанные системой данные из регистров, которые аккумулируют затраты на выпуск. Например, если у нас есть регистр, хранящий стоимость выпуска продукции, мы можем получить себестоимость по нему.

Пример концептуального кода (Получение фактической себестоимости из регистра затрат):

Предположим, у нас есть РегистрНакопления.СебестоимостьПродукции с полями Номенклатура, Сумма, Количество, в котором система уже рассчитала фактическую себестоимость.


Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	СебестоимостьПродукции.Сумма / СебестоимостьПродукции.Количество КАК СебестоимостьЕдиницы
|ИЗ
|	РегистрНакопления.СебестоимостьПродукции КАК СебестоимостьПродукции
|ГДЕ
|	СебестоимостьПродукции.Номенклатура = &Торт
|	И СебестоимостьПродукции.Период = &ДатаЗакрытияМесяца"; // Или другое условие для получения нужной записи

Запрос.УстановитьПараметр("Торт", МойТортСсылка);
Запрос.УстановитьПараметр("ДатаЗакрытияМесяца", КонецМесяца(ТекущаяДата())); // Например, на конец месяца

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Если Выборка.Следующий() Тогда
	ФактическаяСебестоимостьТорта = Выборка.СебестоимостьЕдиницы;
Иначе
	ФактическаяСебестоимостьТорта = 0; // Или другая логика, если себестоимость не найдена
КонецЕсли;

// Теперь ФактическаяСебестоимостьТорта содержит рассчитанную сумму

Этот пример предполагает, что система уже выполнила все необходимые расчеты и агрегировала данные о себестоимости в соответствующем регистре.

Учет дополнительных и косвенных расходов

Важно помнить, что себестоимость торта — это не только прямые материальные затраты. Если нам нужна полная себестоимость, мы должны учитывать:

  1. Дополнительные прямые расходы: Например, сдельная заработная плата пекарей, страховые взносы на нее, амортизация оборудования пекарни, если ее можно прямо отнести на производство торта. Эти затраты также накапливаются в регистрах затрат и участвуют в расчете себестоимости.
  2. Косвенные расходы: Это общепроизводственные и общехозяйственные расходы (аренда помещения, коммунальные услуги, зарплата административного персонала). Они не могут быть прямо отнесены на конкретный торт и требуют распределения в конце периода (обычно месяца) по какой-либо базе распределения (например, по объему выпущенной продукции, по прямым материальным затратам, по зарплате производственных рабочих). С 2021 года в 1С:Бухгалтерии 8, в соответствии с ФСБУ 5/2019 "Запасы", управленческие расходы (счет 26) чаще всего не включаются в себестоимость незавершенного производства и готовой продукции, а полностью относятся на расходы текущего периода. Однако общепроизводственные расходы (счет 25) продолжают распределяться.

Эти сложные механизмы распределения обычно реализуются стандартными регламентными операциями 1С при ЗакрытииМесяца, и программисту редко приходится кодировать их с нуля. Задача программиста чаще всего сводится к правильной настройке учетной политики и получению уже рассчитанных данных.

Процесс расчета в 1С и роль закрытия месяца

В типовых конфигурациях 1С (Бухгалтерия, Управление торговлей, Комплексная автоматизация, ERP) расчет фактической себестоимости — это не мгновенная операция, выполняемая "по кнопке", а регламентированный процесс, завершающийся при закрытии месяца. Именно в этот момент система выполняет следующие операции:

  1. Определяет фактическую стоимость списанных материалов (по ФИФО, средней).
  2. Распределяет косвенные расходы.
  3. Формирует окончательную фактическую себестоимость выпущенной продукции.

Для инициации процесса производства может использоваться документ ЗаказНаПроизводство, где указывается, что будет производиться и из каких материалов, согласно спецификации. Прямые расходы (материалы, зарплата производственных рабочих) отражаются в течение месяца, а окончательная "сборка" всех затрат происходит при закрытии периода.

Выводы и рекомендации

Как мы видим, расчет себестоимости кодом в 1С — это не просто суммирование цен. Это комплексная задача, требующая:

  1. Четкого определения, какой вид себестоимости нужен. Это самый первый и важный шаг.
  2. Понимания структуры и назначения всех используемых регистров. Особенно важно, содержит ли регистр остатков информацию о стоимости.
  3. Учета учетной политики организации, которая определяет методы списания запасов.
  4. Принятия решения об учете дополнительных и косвенных расходов.

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

← На главную