Почему в 1С:УПП списываются затраты без суммы и как это исправить?

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

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

Механика партионного учета затрат в УПП

Разберем по шагам, как работает механизм списания сумм из незавершенного производства (НЗП) в классическом партионном учете. Главное правило, которое необходимо запомнить: стоимость материалов списывается в себестоимость выпускаемой продукции только в том случае, если производственная аналитика в документе передачи материалов полностью совпадает с аналитикой в документе выпуска.

Когда вы проводите документ ТребованиеНакладная, материалы попадают в регистр накопления НезавершенноеПроизводство. Записи формируются в разрезе нескольких ключевых измерений. При последующем проведении документа ОтчетПроизводстваЗаСмену система обращается к этому регистру, чтобы получить стоимость накопленных партий.

Посмотрим на список ключевых полей аналитики, совпадение которых критически важно:

  1. Подразделение — цех или участок, куда были переданы материалы.
  2. Статья затрат — статья, по которой классифицируется расход.
  3. Номенклатурная группа — укрупненный вид выпускаемой продукции.
  4. Заказ — заказ покупателя или заказ на производство (если ведется обособленный учет).

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

Разберем причину пропадания сумм: фактор Номенклатурных групп

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

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

  1. Если документ ТребованиеНакладная был проведен без указания номенклатурной группы, стоимость материалов зависает в «общем котле» подразделения.
  2. Когда проводится первый ОтчетПроизводстваЗаСмену с пустой номенклатурной группой, система видит остатки в «общем котле» и успешно подтягивает сумму себестоимости. Возникает иллюзия, что всё работает корректно.
  3. Далее пользователи или программисты оформляют следующее ТребованиеНакладная, но в этот раз заполняют конкретную номенклатурную группу.
  4. Проводится второй ОтчетПроизводстваЗаСмену. Если в нем попытаться списать затраты снова по пустой номенклатурной группе (или по отличной от той, что указана в требовании), система не найдет остатков по указанной аналитике. В результате спишется только количество, а сумма останется нулевой.

Именно эта разница между «общим котлом» и детализированной аналитикой создает эффект «мистики», когда два соседних документа ведут себя по-разному при одинаковых, на первый взгляд, условиях.

Проанализируем запрос расчета стоимости

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


ВЫБРАТЬ
    Док.Количество КАК Количество,
    ВЫБОР 
        КОГДА ТаблицаСтоимостиЗатратУУ.КоличествоОстаток = 0
            ИЛИ ТаблицаСтоимостиЗатратУУ.КоличествоОстаток ЕСТЬ NULL ТОГДА
            0
        ИНАЧЕ
            Док.Количество * ТаблицаСтоимостиЗатратУУ.СтоимостьОстаток / ТаблицаСтоимостиЗатратУУ.КоличествоОстаток
    КОНЕЦ КАК СуммаУУ
ИЗ 
    ТаблицаДокумента КАК Док
        ЛЕВОЕ СОЕДИНЕНИЕ 
            ТаблицаСтоимостиЗатрат КАК ТаблицаСтоимостиЗатратУУ
        ПО 
            Док.Номенклатура = ТаблицаСтоимостиЗатратУУ.Затрата
            И Док.ХарактеристикаНоменклатуры = ТаблицаСтоимостиЗатратУУ.ХарактеристикаЗатраты
            И Док.СерияНоменклатуры = ТаблицаСтоимостиЗатратУУ.СерияЗатраты
            И Док.СтатьяЗатрат = ТаблицаСтоимостиЗатратУУ.СтатьяЗатрат
            И Док.НоменклатурнаяГруппаНЗП = ТаблицаСтоимостиЗатратУУ.НоменклатурнаяГруппа
            И Док.ЗаказНЗП = ТаблицаСтоимостиЗатратУУ.Заказ
            И Док.ПодразделениеНЗП = ТаблицаСтоимостиЗатратУУ.Подразделение

В блоке соединения ПО мы четко видим: система жестко сопоставляет аналитику из табличной части документа (Док.НоменклатурнаяГруппаНЗП) с остатками из регистра (ТаблицаСтоимостиЗатратУУ.НоменклатурнаяГруппа). Если соединение не находит точного совпадения всех полей, блок ЕСТЬ NULL отрабатывает и возвращает 0 КАК СуммаУУ. Запрос отработал корректно с математической точки зрения, но методически учет разорвался.

Практические шаги по исправлению и контролю

Рассмотрим подробнее, как исправить уже возникшие ошибки и как не допустить их в будущем. Важно понимать, что документ регламентного расчета себестоимости в конце месяца не сможет волшебным образом исправить аналитику пользователей. Суммы так и останутся висеть «хвостами» в регистре НЗП.

Шаг 1: Поиск расхождений

Для поиска зависших сумм используем штатный инструмент. Сформируем отчет «Анализ распределения производственных затрат». В настройках отчета выведем группировки по Подразделению, Статье затрат и Номенклатурной группе. Отчет наглядно покажет строки, где образовались суммовые остатки без количественных (затраты лежат на одной номенклатурной группе), и строки, где образовались количественные остатки без сумм (выпуск прошел по другой номенклатурной группе).

Шаг 2: Корректировка данных

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

Шаг 3: Программный контроль (Рекомендуется)

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

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

Внедрение такого простого контроля на уровне кода позволит навсегда избавиться от проблем с нулевой стоимостью выпуска и долгих часов поиска нестыковок перед закрытием месяца. Поддерживайте чистоту аналитики на этапе входа данных в регистр, и расчет себестоимости в 1С:УПП будет проходить без ошибок.

← На главную