Почему отчет СКД по регистру Товары к отгрузке в ERP не выводит данные?

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

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

Проверка параметров виртуальной таблицы и периода

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

Проанализируем ситуацию: если в конструкторе запроса на закладке «Параметры» не указано выражение для периода виртуальной таблицы, СКД может подставить текущую дату или, в худшем случае, пустую дату. Если в регистре нет остатков на конкретную секунду, указанную в параметре, отчет будет пустым. Разберем по шагам, как это исправить:

  1. Откроем схему компоновки данных и перейдем на закладку «Параметры».
  2. Найдем параметр Период. В поле «Выражение» для него следует указать границу периода, если используется стандартный интервал, например: &СтандартныйПериод.ДатаОкончания.
  3. В самом запросе, в параметрах виртуальной таблицы, рекомендуется явно указывать использование параметров компоновки:

ВЫБРАТЬ
    ТоварыКОтгрузкеОстатки.Склад,
    ТоварыКОтгрузкеОстатки.Номенклатура,
    ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток
ИЗ
    РегистрНакопления.ТоварыКОтгрузке.Остатки({&Период}, ) КАК ТоварыКОтгрузкеОстатки

Специфика регистра Товары к отгрузке в ERP

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

Проанализируем жизненный цикл записи в этом регистре:

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

Таким образом, если процесс отгрузки по документу полностью завершен, остатков в таблице ТоварыКОтгрузке.Остатки по этой сделке просто не будет. Если вам нужно увидеть данные по уже совершенным отгрузкам, следует использовать таблицу оборотов или другие регистры, такие как «Выручка и себестоимость продаж».

Влияние функциональных опций

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

Права доступа и механизмы RLS

Даже при наличии полных прав (роль «Полные права»), механизмы RLS (Access Level Security) в ERP могут накладывать ограничения. Посмотрим на ситуацию с точки зрения системы: если в запросе СКД происходит соединение нескольких таблиц, и к одной из них у пользователя нет доступа на уровне записей (например, по группе доступа «Склады»), платформа может «тихо» отсечь эти строки, не выдавая ошибки о недостаточности прав.

Проверьте следующие моменты:

Автозаполнение и параметры запроса

Рассмотрим еще одну техническую особенность СКД. Если флаг «Автозаполнение» в наборе данных включен, система сама пытается определить параметры и отборы. Однако для виртуальных таблиц это не всегда работает прозрачно. Попробуем явно указать параметры в тексте запроса, используя фигурные скобки. Это подскажет СКД, куда именно нужно накладывать пользовательские фильтры:


ВЫБРАТЬ
    Регистр.Склад КАК Склад,
    Регистр.Номенклатура КАК Номенклатура,
    Регистр.КОтгрузкеОстаток КАК Количество
ИЗ
    РегистрНакопления.ТоварыКОтгрузке.Остатки(&Период, {Склад.* КАК Склад, Номенклатура.* КАК Номенклатура}) КАК Регистр

Использование конструкции {} позволяет СКД более эффективно управлять условиями в виртуальных таблицах, что напрямую влияет на наличие данных в результирующей выборке.

← На главную