Как построить отчет по списанию и перемещению ТМЦ через транзитные склады в 1С:УПП?

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

Работа с регистром УчетЗатрат (или «Учет затрат регл») в конфигурации «Управление производственным предприятием» (УПП) — это всегда вызов для начинающего разработчика. Особенность системы РАУЗ (Расширенная аналитика учета затрат) заключается в том, что данные в регистрах хранятся в виде ключей аналитики, а привычные понятия «Склад» или «Номенклатура» скрыты за ссылками на эти ключи. Рассмотрим подробнее, как решить задачу вывода ТМЦ в разрезе складов с расчетом процента списания и учетом сложных цепочек перемещений через транзитные зоны.

Разберем проблему транзитных складов

Основная сложность, с которой сталкиваются программисты — это необходимость исключить или особым образом обработать «транзитные» склады. Если товар перемещается по цепочке Склад А -> Транзит -> Склад Б, стандартный отчет по оборотам покажет удвоение оборотов перемещения. Чтобы система понимала, какой склад является конечным, а какой промежуточным, мы не должны завязываться на строковые названия складов в коде запроса.

Проанализируем ситуацию: оптимальным решением будет добавление признака для склада. Мы рекомендуем использовать механизм дополнительных сведений. Создадим для справочника Склады свойство ЭтоТранзитныйСклад с типом Булево. Это позволит нам в запросе СКД гибко фильтровать записи. Посмотрим на пример того, как это условие будет выглядеть в запросе:


ГДЕ
    НЕ СкладыДополнительныеСведения.Значение = ИСТИНА

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

Анализ цепочек перемещений через РАУЗ

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

Для реализации этой логики в запросе СКД мы будем использовать соединение таблицы регистра саму с собой или анализ поля АналитикаКорУчета. Рассмотрим по шагам, как определить характер операции:

  1. Списание в производство: Это записи, где поле АналитикаКорУчета ссылается на затратную статью или производственное подразделение (счета 20, 23, 25).
  2. Перемещение: Это записи, где корреспондирующая аналитика также является складской (счета 10, 41, 43), но с другим значением склада.

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


ВЫБРАТЬ
    Движения.Номенклатура,
    Движения.СкладОтправитель,
    КоррДвижения.СкладПолучатель
ИЗ
    РегистрНакопления.УчетЗатрат КАК Движения
ЛЕВОЕ СОЕДИНЕНИЕ 
    РегистрНакопления.УчетЗатрат КАК КоррДвижения
ПО 
    Движения.Регистратор = КоррДвижения.Регистратор
    И Движения.АналитикаУчетаНоменклатуры = КоррДвижения.АналитикаУчетаНоменклатуры

Расчет процента списания в СКД

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

Посмотрим на формулу, которую необходимо прописать в ресурсах отчета:


Выбор 
    Когда СуммаПриход = 0 Тогда 0 
    Иначе (СуммаСписаниеПроизводство / СуммаПриход) * 100 
Конец

После того как расчет настроен, нам нужно наложить условие «исключить, если процент больше 5». В СКД это делается на вкладке «Настройки» -> «Отбор». Но будьте внимательны: так как это расчетный показатель, зависящий от итогов, обычный отбор в запросе (ГДЕ) не сработает. Нам нужно использовать Отбор по группировке или секцию ИМЕЮЩИЕ (HAVING) в тексте запроса, если мы агрегируем данные заранее.

Работа с корреспондирующей аналитикой

Проанализируем ситуацию с внутренними оборотами. Чтобы перемещения между складами не «раздували» объем прихода (что исказит процент списания), в запросе необходимо четко разделять «Внешний приход» (от поставщика) и «Внутренний приход» (перемещение). Для этого в регистре УчетЗатрат мы анализируем вид операции документа-регистратора или свойства самой аналитики кор. учета.

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

Итоговый алгоритм настройки отчета

Подведем итог и составим план действий для реализации отчета:

  1. Создаем запрос к виртуальной таблице РегистрНакопления.УчетЗатрат.Обороты.
  2. Добавляем левое соединение со справочником складов для получения признака «Транзитный».
  3. Разделяем показатели: КоличествоПриходВнешний, КоличествоСписаноВПроизводство, КоличествоПеремещено.
  4. В СКД настраиваем ресурсы для этих полей с функцией Сумма().
  5. Создаем вычисляемое поле ПроцентСписания.
  6. В настройках варианта отчета устанавливаем отбор: ПроцентСписания Меньше или Равно 5.
  7. Для второй части задачи (те, что перемещались, но не списаны) добавляем условие: если КоличествоПеремещено > 0 И ПроцентСписания < 5, то выводить такие позиции.

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

← На главную