Работа с регистром УчетЗатрат (или «Учет затрат регл») в конфигурации «Управление производственным предприятием» (УПП) — это всегда вызов для начинающего разработчика. Особенность системы РАУЗ (Расширенная аналитика учета затрат) заключается в том, что данные в регистрах хранятся в виде ключей аналитики, а привычные понятия «Склад» или «Номенклатура» скрыты за ссылками на эти ключи. Рассмотрим подробнее, как решить задачу вывода ТМЦ в разрезе складов с расчетом процента списания и учетом сложных цепочек перемещений через транзитные зоны.
Основная сложность, с которой сталкиваются программисты — это необходимость исключить или особым образом обработать «транзитные» склады. Если товар перемещается по цепочке Склад А -> Транзит -> Склад Б, стандартный отчет по оборотам покажет удвоение оборотов перемещения. Чтобы система понимала, какой склад является конечным, а какой промежуточным, мы не должны завязываться на строковые названия складов в коде запроса.
Проанализируем ситуацию: оптимальным решением будет добавление признака для склада. Мы рекомендуем использовать механизм дополнительных сведений. Создадим для справочника Склады свойство ЭтоТранзитныйСклад с типом Булево. Это позволит нам в запросе СКД гибко фильтровать записи. Посмотрим на пример того, как это условие будет выглядеть в запросе:
ГДЕ
НЕ СкладыДополнительныеСведения.Значение = ИСТИНА
Если же остатки на транзитных складах всегда должны быть нулевыми на конец периода, мы можем применить логику виртуальных остатков: если оборот по приходу равен обороту по расходу в рамках одного документа, и конечный остаток равен нулю, мы можем классифицировать такое движение как «перевалочное».
В системе УПП перемещение между складами фиксируется сменой АналитикиВидаУчета (где хранится склад) при неизменной АналитикаУчетаНоменклатуры. Чтобы отследить, куда в итоге ушел товар, нам необходимо проанализировать корреспондирующую аналитику. Выясним причину, почему товар не был списан: возможно, он «завис» на одном из промежуточных этапов.
Для реализации этой логики в запросе СКД мы будем использовать соединение таблицы регистра саму с собой или анализ поля АналитикаКорУчета. Рассмотрим по шагам, как определить характер операции:
АналитикаКорУчета ссылается на затратную статью или производственное подразделение (счета 20, 23, 25).Чтобы увидеть конечный склад в цепочке, можно воспользоваться следующим приемом в запросе:
ВЫБРАТЬ
Движения.Номенклатура,
Движения.СкладОтправитель,
КоррДвижения.СкладПолучатель
ИЗ
РегистрНакопления.УчетЗатрат КАК Движения
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрНакопления.УчетЗатрат КАК КоррДвижения
ПО
Движения.Регистратор = КоррДвижения.Регистратор
И Движения.АналитикаУчетаНоменклатуры = КоррДвижения.АналитикаУчетаНоменклатуры
Теперь перейдем к расчету процента. Процент списания — это отношение количества (или суммы) списанного в производство товара к общему приходу на склад за период. Важно помнить, что расчет процента должен происходить на уровне группировок, а не в каждой строке запроса. Для этого мы будем использовать Вычисляемые поля в СКД.
Посмотрим на формулу, которую необходимо прописать в ресурсах отчета:
Выбор
Когда СуммаПриход = 0 Тогда 0
Иначе (СуммаСписаниеПроизводство / СуммаПриход) * 100
Конец
После того как расчет настроен, нам нужно наложить условие «исключить, если процент больше 5». В СКД это делается на вкладке «Настройки» -> «Отбор». Но будьте внимательны: так как это расчетный показатель, зависящий от итогов, обычный отбор в запросе (ГДЕ) не сработает. Нам нужно использовать Отбор по группировке или секцию ИМЕЮЩИЕ (HAVING) в тексте запроса, если мы агрегируем данные заранее.
Проанализируем ситуацию с внутренними оборотами. Чтобы перемещения между складами не «раздували» объем прихода (что исказит процент списания), в запросе необходимо четко разделять «Внешний приход» (от поставщика) и «Внутренний приход» (перемещение). Для этого в регистре УчетЗатрат мы анализируем вид операции документа-регистратора или свойства самой аналитики кор. учета.
Важный момент: если ваша база использует партионный учет (не РАУЗ), то задачу решить значительно проще через регистр ПартииТоваровНаСкладах, так как там есть явное указание на документ оприходования (партию), что позволяет проследить судьбу конкретной поставки через все перемещения до момента списания.
Подведем итог и составим план действий для реализации отчета:
РегистрНакопления.УчетЗатрат.Обороты.КоличествоПриходВнешний, КоличествоСписаноВПроизводство, КоличествоПеремещено.Сумма().ПроцентСписания.ПроцентСписания Меньше или Равно 5.КоличествоПеремещено > 0 И ПроцентСписания < 5, то выводить такие позиции.Такой структурный подход позволит вам не только решить текущую задачу бухгалтерии, но и создаст гибкий инструмент для анализа товарных потоков в 1С:УПП, не перегружая отчет лишними данными от транзитных складов.