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

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

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

Анализ проблемы

Основная сложность заключается в том, что регистр накопления проектируется как хранилище итоговых данных в определенных разрезах (измерениях). Если поле Серия не вынесено в измерения, штатно получить его из записей регистра невозможно. Попытка использовать НомерСтроки в качестве связующего звена является крайне ненадежной практикой.

Почему использование НомерСтроки — это плохая идея:

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

Метод соединения с табличной частью

Если нет возможности изменить структуру конфигурации и добавить Серию в измерения регистра, наиболее корректным способом является соединение данных регистра с табличной частью документа-регистратора. Рассмотрим алгоритм действий:

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

Рассмотрим структуру запроса:


ВЫБРАТЬ
    РегистрПродаж.Регистратор КАК Документ,
    РегистрПродаж.Номенклатура,
    ТабличнаяЧастьТовары.Серия КАК Серия
ИЗ
    РегистрНакопления.Продажи.Обороты КАК РегистрПродаж
ЛЕВОЕ СОЕДИНЕНИЕ
    Документ.РеализацияТоваровУслуг.Товары КАК ТабличнаяЧастьТовары
ПО
    РегистрПродаж.Регистратор = ТабличнаяЧастьТовары.Ref
    И РегистрПродаж.а_номерстрокивДокументе = ТабличнаяЧастьТовары.НомерСтроки

Важно: Обратите внимание, что использование НомерСтроки здесь допустимо только в том случае, если вы уверены, что при проведении документа движения не сворачиваются. В противном случае этот метод вернет некорректные данные или задвоения.

Архитектурный подход к решению

Если аналитика в разрезе Серий критична для бизнеса, правильнее изменить саму структуру базы данных. Методика работы в 1С подразумевает, что если отчет требует получения определенных данных, эти данные должны быть доступны в измерениях регистра накопления.

Рекомендуемый алгоритм действий:

  1. Проанализируйте, действительно ли необходима серия в отчете.
  2. Если да, добавьте Серию в качестве Измерения в регистр накопления.
  3. Перепроведите документы, чтобы данные заполнились корректно.
  4. После этого вы сможете получать данные «из коробки», обращаясь напрямую к виртуальным таблицам регистра без необходимости сложных соединений.

Практические советы

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

Если же вы решили использовать запрос к табличной части, всегда учитывайте следующие моменты:

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

← На главную