Как правильно создать отчет по приобретению новой номенклатуры в 1С?

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

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

Определение критериев новизны

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

  1. Дата создания элемента: Мы ориентируемся на реквизит Дата элемента справочника Номенклатура.
  2. Дата первого приобретения: Товар считается новым, если он впервые появился в регистрах накопления (например, ТоварыНаСкладах или Закупки) в выбранном периоде.
  3. Отсутствие исторических данных: Новизна определяется тем, что по данной позиции не было оборотов или остатков до начала анализируемого периода.

Методы технической реализации

Рассмотрим подробнее каждый из подходов с технической точки зрения.

Использование дополнительных реквизитов

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

Анализ данных регистров накопления

Если у вас нет специальных реквизитов, воспользуемся данными регистров. Логика заключается в анализе движений товаров. Мы ищем номенклатуру, по которой приход был осуществлен в выбранном периоде, но до этого момента движений не было. В СКД это реализуется через виртуальные таблицы.

Для реализации отчета выполним следующие шаги:

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

Пример структуры запроса в Консоли запросов:


ВЫБРАТЬ
    ЗакупкиОбороты.Номенклатура КАК Товар,
    МИНИМУМ(ЗакупкиОбороты.Период) КАК ДатаПервогоПрихода
ИЗ
    РегистрНакопления.Закупки.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ЗакупкиОбороты
СГРУППИРОВАТЬ ПО
    ЗакупкиОбороты.Номенклатура

Использование версионирования или UID

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

Важные рекомендации и предостережения

При построении отчета избегайте типичных ошибок:

В завершение, рекомендуем реализовать отчет на базе СКД. Это позволит пользователям самостоятельно выводить колонку «Дата первого прихода» и добавлять дополнительные группировки по видам номенклатуры или иерархии групп. Такой подход обеспечит гибкость и наглядность данных, необходимых для анализа ассортимента.

← На главную