Почему не заполняется колонка «Период оборачиваемости» в отчете «Оборачиваемость запасов на складах»?

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

В процессе работы с конфигурациями 1С:Комплексная автоматизация 2.4 или 1С:ERP пользователи и разработчики часто сталкиваются с ситуацией, когда отчет Оборачиваемость запасов на складах формируется не полностью. Наиболее распространенная проблема — пустые значения в колонке «Период оборачиваемости (дней)», даже если по товару есть остатки. В этой статье мы подробно разберем, как устроена логика этого отчета, где искать причины отсутствия данных и как проанализировать код системы.

Разберем логику расчета: почему колонка может быть пустой?

Прежде чем приступать к программному анализу, давайте выясним математическую причину появления пустых полей. Оборачиваемость запасов в днях — это показатель, который говорит нам, за сколько дней в среднем продается (оборачивается) средний запас товара на складе. Формула расчета выглядит следующим образом:

Период оборачиваемости = Количество дней в периоде / Коэффициент оборачиваемости

Где Коэффициент оборачиваемости = Расход за период / Средний остаток за период.

Рассмотрим основные ситуации, когда расчет не может быть произведен:

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

Техническая реализация: где искать формируемый запрос?

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

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

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

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


// Пример логики формирования текста запроса для получения расхода
Функция ТекстЗапросаРасходЗаПериодТоварыНаСкладах()
    ТекстЗапроса = 
    "ВЫБРАТЬ
    |	ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура,
    |	ТоварыНаСкладахОбороты.Характеристика КАК Характеристика,
    |	ТоварыНаСкладахОбороты.ВНаличииРасход КАК КоличествоРасход
    |ИЗ
    |	РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ТоварыНаСкладахОбороты";
    Возврат ТекстЗапроса;
КонецФункции

Что такое «ТаблицаОтчета» и как её просмотреть?

В настройках СКД этого отчета часто можно увидеть, что в качестве набора данных используется Объект с именем ТаблицаОтчета. Это означает, что данные в отчет передаются «снаружи» — сначала выполняется код на встроенном языке, формируется таблица значений (ТЗ), и уже эта ТЗ передается в систему компоновки.

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

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

Регистр «ТоварыНаСкладах» и роль виртуальных таблиц

Выясним причину использования конкретных таблиц. В сообщениях форума упоминается ТоварыНаСкладахРегистраторРасход. Это виртуальная таблица, которая позволяет системе получить не просто общую сумму расхода, а детализировать её до конкретного документа-регистратора.

Важный нюанс: Для корректного расчета периода оборачиваемости 1С использует алгоритм интегральной оценки остатков. Это значит, что система считает остаток на каждый день внутри периода. Если за весь месяц был остаток 100 штук, но расход произошел только в последний день, показатель оборачиваемости будет сильно отличаться от случая, когда расход был равномерным. Если данных в регистре ТоварыНаСкладах недостаточно для определения ежедневных остатков (например, отключен детальный учет), отчет может выводить пустые значения.

Пошаговая инструкция по исправлению проблемы

Рассмотрим последовательность действий для пользователя или аналитика, если данные не выводятся:

  1. Проверьте первичные движения. Откройте карточку движения товара и убедитесь, что в выбранном периоде были документы с видом «Расход».
  2. Проверьте настройки отчета. Зайдите в «Настройки» -> «Расширенный» -> вкладка «Фильтры» (или «Параметры»). Убедитесь, что параметр Анализировать потребление охватывает нужные вам типы документов.
  3. Классификация запасов. В КА 2.4 отчет часто завязан на результаты классификации ABC/XYZ. Если регламентное задание по классификации запасов не выполнялось, система может не рассчитать параметры для некоторых товаров. Попробуйте выполнить актуализацию классификации.
  4. Методы обеспечения. Проверьте, заполнен ли для номенклатуры Способ обеспечения. В некоторых версиях алгоритм расчета может игнорировать товары, для которых не заданы параметры поддержания запасов, так как для них не ведется статистика потребления.

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

← На главную