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