При разработке отчетов или обработок данных в 1С часто возникает ситуация, когда для аналитики требуется информация, которая хранится в табличной части документа, но отсутствует в измерениях регистра накопления. Рассмотрим, как правильно подойти к этой задаче, избегая архитектурных ошибок.
Основная сложность заключается в том, что регистр накопления проектируется как хранилище итоговых данных в определенных разрезах (измерениях). Если поле Серия не вынесено в измерения, штатно получить его из записей регистра невозможно. Попытка использовать НомерСтроки в качестве связующего звена является крайне ненадежной практикой.
Почему использование НомерСтроки — это плохая идея:
Если нет возможности изменить структуру конфигурации и добавить Серию в измерения регистра, наиболее корректным способом является соединение данных регистра с табличной частью документа-регистратора. Рассмотрим алгоритм действий:
Для реализации этого метода нам необходимо выполнить ЛЕВОЕ СОЕДИНЕНИЕ регистра с табличной частью документа. Поскольку в регистре всегда хранится поле Регистратор, мы можем использовать его для получения доступа к данным конкретного документа.
Рассмотрим структуру запроса:
ВЫБРАТЬ
РегистрПродаж.Регистратор КАК Документ,
РегистрПродаж.Номенклатура,
ТабличнаяЧастьТовары.Серия КАК Серия
ИЗ
РегистрНакопления.Продажи.Обороты КАК РегистрПродаж
ЛЕВОЕ СОЕДИНЕНИЕ
Документ.РеализацияТоваровУслуг.Товары КАК ТабличнаяЧастьТовары
ПО
РегистрПродаж.Регистратор = ТабличнаяЧастьТовары.Ref
И РегистрПродаж.а_номерстрокивДокументе = ТабличнаяЧастьТовары.НомерСтроки
Важно: Обратите внимание, что использование НомерСтроки здесь допустимо только в том случае, если вы уверены, что при проведении документа движения не сворачиваются. В противном случае этот метод вернет некорректные данные или задвоения.
Если аналитика в разрезе Серий критична для бизнеса, правильнее изменить саму структуру базы данных. Методика работы в 1С подразумевает, что если отчет требует получения определенных данных, эти данные должны быть доступны в измерениях регистра накопления.
Рекомендуемый алгоритм действий:
Серию в качестве Измерения в регистр накопления.Прежде чем приступать к написанию сложных запросов, проверьте другие регистры, связанные с документом. Часто бывает, что информация о серии уже присутствует в регистре накопления ТоварыОрганизаций или регистре сведений ДвиженияСерийТоваров.
Если же вы решили использовать запрос к табличной части, всегда учитывайте следующие моменты:
В завершение, проанализируем ситуацию: работа с регистрами через нештатные реквизиты (например, искусственно введенные номера строк) ведет к нестабильности системы. Старайтесь придерживаться стандартной методики учета, вынося аналитику в измерения, чтобы обеспечить надежность и скорость работы ваших отчетов.