Как получить себестоимость выпуска продукции в 1С:УПП 1.3

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

При разработке печатных форм и отчетов для производственных документов разработчики часто сталкиваются с задачей вывести себестоимость произведенной продукции непосредственно в документе Отчет производства за смену. Однако попытка получить фактическую стоимость запросом к регистру накопления ВыпускПродукции с фильтром по текущему документу возвращает пустые значения или нулевые суммы. Разберем причины такого поведения платформы, архитектуру производственного учета в конфигурации «1С:Управление производственным предприятием 1.3» и рассмотрим корректные способы решения задачи.

Синтаксическая ошибка: передача контекста в запрос

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

Запрос.УстановитьПараметр("ЭтотОбъект", ЭтотОбъект);

Поле Регистратор в таблицах регистров накопления всегда имеет ссылочный тип данных (например, ДокументСсылка.ОтчетПроизводстваЗаСмену). Переменная ЭтотОбъект содержит объектную ссылку на сам экземпляр документа в оперативной памяти (ДокументОбъект). Сравнение ссылки с объектом в СУБД всегда вернет ложь.

Чтобы установить фильтр по текущему документу, в параметрах запроса всегда следует передавать ссылку на записанный документ:


Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
// или просто:
Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);

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

Методологическая причина: когда формируется фактическая себестоимость

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

В производственном учете 1С фактическая себестоимость выпуска принципиально не может быть рассчитана в момент проведения оперативного документа выпуска по следующим причинам:

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

В типовой конфигурации 1С:УПП 1.3 фактический расчет выполняется специализированным регламентным документом «Расчет себестоимости выпуска» (РСВ) при процедуре закрытия месяца. Движения с фактическими суммами затрат и скорректированной стоимостью выпуска формируются именно документом РСВ, а не исходным отчетом за смену.

Особенности поведения зависят от выбранного режима учета:

  1. Режим РАУЗ (Расширенная аналитика учета затрат): Документ выпуска делает движения по регистру УчетЗатрат только в количественном выражении. Стоимостная оценка формируется исключительно документом РСВ путем решения системы линейных уравнений.
  2. Партионный учет: Документ выпуска приходует готовую продукцию на склад по плановой себестоимости. Разница между плановой и фактической стоимостью корректируется документом РСВ в конце месяца.

Решение 1. Получение оперативной (плановой) себестоимости

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

Плановые цены в 1С:УПП хранятся в типовом регистре сведений ЦеныНоменклатуры. Чтобы они подставлялись в документы:

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

Посмотрим на пример запроса для получения плановых цен и расчета материальных затрат по спецификации продукции:


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

Запрос.УстановитьПараметр("Период", ДокументСсылка.Дата);
Запрос.УстановитьПараметр("Спецификация", ВыбСпецификация);
Запрос.УстановитьПараметр("ТипЦенПлановый", Константы.ТипЦенПлановойСебестоимостиНоменклатуры.Получить());

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

Решение 2. Вывод материальной себестоимости (партионный учет)

Если в организации ведется традиционный партионный учет и в документе Отчет производства за смену заполнены табличные части Материалы и Распределение материалов, мы можем рассчитать оперативную прямую материальную себестоимость на основе списанных партий.


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

Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Результат = Запрос.Выполнить();

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

Решение 3. Получение фактической себестоимости за закрытый период

Если печатная форма формируется постфактум за прошлые периоды, когда регламентная операция закрытия месяца уже выполнена, фактические затраты на единицу продукции рассчитываются по регистрам учета затрат.

В этом случае соединение выполняется не по регистратору, а по аналитике выпуска за период месяца:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |    ВыпускОбороты.Номенклатура КАК Продукция,
    |    ВыпускОбороты.КоличествоОборот КАК ВыпущеноЗаМесяц,
    |    ВыпускОбороты.СтоимостьОборот КАК СтоимостьВыпускаЗаМесяц,
    |    ВЫБОР 
    |        КОГДА ВыпускОбороты.КоличествоОборот <> 0 
    |        ТОГДА ВыпускОбороты.СтоимостьОборот / ВыпускОбороты.КоличествоОборот 
    |        ИНАЧЕ 0 
    |    КОНЕЦ КАК ФактическаяСебестоимостьЕдиницы
    |ИЗ
    |    РегистрНакопления.ВыпускПродукцииБухгалтерскийУчет.Обороты(
    |        НАЧАЛОПЕРИОДА(&ДатаДокумента, МЕСЯЦ),
    |        КОНЕЦПЕРИОДА(&ДатаДокумента, МЕСЯЦ),
    |        ,
    |        Номенклатура = &Номенклатура
    |        И Подразделение = &Подразделение
    |    ) КАК ВыпускОбороты";

Запрос.УстановитьПараметр("ДатаДокумента", Ссылка.Дата);
Запрос.УстановитьПараметр("Номенклатура", ВыбНоменклатура);
Запрос.УстановитьПараметр("Подразделение", Ссылка.Подразделение);

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

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

← На главную