Какие регистры использовать для получения остатков и цен в 1С:Управление торговлей 11?

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

При работе с конфигурацией «1С:Управление торговлей 11» (УТ 11) разработчики часто сталкиваются с вопросом: из каких таблиц базы данных наиболее корректно извлекать информацию о текущих остатках товаров и их стоимости? Архитектура УТ 11 существенно отличается от предыдущих версий (например, УТ 10.3), так как здесь применяется более сложная система распределения запасов и механизмов ценообразования. В этой статье мы подробно разберем, какие регистры накопления и сведений следует использовать в запросах, чтобы получить достоверные данные.

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

Для получения информации об остатках в УТ 11 существует несколько специализированных регистров накопления. Выбор конкретного регистра зависит от того, какой именно «вид» остатка нам требуется: физический, юридический или доступный к продаже.

Рассмотрим основные регистры накопления:

  1. Товары на складах. Этот регистр предназначен для учета физического наличия товара на складах. Если вам нужно знать, сколько коробок фактически лежит на полках конкретного склада в разрезе Номенклатура, Характеристика и Серия, то обращаться нужно именно к нему. Важно понимать, что этот регистр не «знает», какой организации принадлежит товар.
  2. Товары организаций. В отличие от предыдущего, этот регистр отвечает за юридическую принадлежность товара. В УТ 11 реализована схема «Интеркампани», позволяющая продавать товар одной организации, если он фактически числится за другой. Остатки по этому регистру показывают, за кем закреплен товар документально.
  3. Свободные остатки. Это, пожалуй, самый востребованный регистр для торговых операций. Он хранит информацию не только о наличии, но и о резервах. В виртуальной таблице Остатки этого регистра вы найдете поля ВНаличии и Зарезервировано. Чтобы получить реальный остаток, доступный для отгрузки, необходимо из значения «В наличии» вычесть «Зарезервировано».
  4. Товары в ячейках. Если на складе используется адресное хранение (WMS), то данные из обычного регистра остатков будут общими. Для получения детальной информации о том, в какой конкретно ячейке (проходе, стеллаже) лежит товар, следует использовать этот регистр.

Проанализируем ситуацию: если ваша задача — построить отчет по дефициту товаров для отдела закупок, наиболее правильным будет использование регистра СвободныеОстатки, так как он учитывает клиентские резервы.

Разбираем работу с ценами номенклатуры

Цены в УТ 11 хранятся в периодическом регистре сведений ЦеныНоменклатуры. Для получения актуальной цены на определенную дату (или на текущий момент) в запросе необходимо использовать виртуальную таблицу СрезПоследних.

Выясним основные нюансы работы с этим регистром:

Посмотрим на пример структуры запроса для получения остатков и цен одновременно:


ВЫБРАТЬ
    СвободныеОстаткиОстатки.Номенклатура КАК Товар,
    СвободныеОстаткиОстатки.Характеристика КАК Характеристика,
    СвободныеОстаткиОстатки.ВНаличииОстаток - СвободныеОстаткиОстатки.ЗарезервированоОстаток КАК Доступно,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК АктуальнаяЦена
ИЗ
    РегистрНакопления.СвободныеОстатки.Остатки(&МоментВремени, Склад = &НужныйСклад) КАК СвободныеОстаткиОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&МоментВремени, ВидЦены = &НужныйВидЦены) КАК ЦеныНоменклатурыСрезПоследних
        ПО СвободныеОстаткиОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
            И СвободныеОстаткиОстатки.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика

Обратите внимание: мы используем ЛЕВОЕ СОЕДИНЕНИЕ. Это критически важно, так как если на товар установлены остатки, но еще не задана цена, при использовании внутреннего соединения (СОЕДИНЕНИЕ) такой товар просто исчезнет из выборки.

Технические рекомендации по оптимизации запросов

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

  1. Всегда используйте виртуальные таблицы. Никогда не обращайтесь к основной таблице регистра накопления (к движениям), если вам нужны только остатки. Обращение к физической таблице заставляет сервер 1С выполнять лишние вычисления, что замедляет работу.
  2. Передавайте параметры в виртуальные таблицы. Указывайте МоментВремени и фильтры по справочникам (Склад, Номенклатура) непосредственно в скобках виртуальной таблицы, а не в секции ГДЕ. Это позволит SQL-серверу отобрать нужные данные на раннем этапе выполнения запроса.
  3. Используйте индексированные поля. Поля Номенклатура, Склад, Организация в типовых регистрах уже индексированы, что обеспечивает быстрый поиск.

Сложные случаи: Себестоимость и товары в пути

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

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

Таким образом, мы выяснили, что для решения типичной задачи получения остатков и цен в УТ 11 оптимальной связкой является использование виртуальных таблиц РегистрНакопления.СвободныеОстатки.Остатки и РегистрСведений.ЦеныНоменклатуры.СрезПоследних. Грамотное использование этих инструментов позволит вам создавать быстрые и точные отчеты.

← На главную