Как вывести организацию и ее остатки в форму подбора товаров в 1С:Управление торговлей 11

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

В типовых решениях на платформе 1С:Предприятие 8, таких как 1С:Управление торговлей 11, 1С:ERP Управление предприятием и 1С:Комплексная автоматизация, при подборе товаров в документы продажи пользователи часто хотят видеть, какой именно организации принадлежит товар на складе. Однако в типовой обработке подбора используется регистр накопления СвободныеОстатки, в котором отсутствует измерение Организация. Разберем архитектурные особенности учета и способы реализации вывода остатков по организациям.

Архитектурные причины разделения учета в 1С:УТ 11

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

  1. Разделение физического и юридического учета: Контроль физического наличия товаров на складах и обеспечение заказов клиентов ведутся отдельно от юридического права собственности. За доступность товаров отвечает регистр СвободныеОстатки (измерения: Номенклатура, Характеристика, Склад). За юридическую принадлежность конкретной организации отвечает регистр ТоварыОрганизаций.
  2. Механизм «Интеркампани»: Если на предприятии настроена автоматическая передача товаров между организациями, менеджер может оформить продажу от имени одной компании, даже если фактически товар принадлежит другой. В момент реализации система автоматически оформит межфирменную передачу. Поэтому штатный подбор ориентируется именно на складскую доступность, а не на юридического владельца.
  3. Особенности резервирования: Важно учитывать, что резервы под заказы покупателей формируются в разрезе складов, но не в разрезе организаций. В регистре ТоварыОрганизаций хранятся фактические учетные остатки, но понятия «свободный остаток организации за вычетом резервов» в типовой модели нет.

Связывание регистров через ключ аналитики номенклатуры

В регистре ТоварыОрганизаций номенклатурный состав и склад свернуты в специальное измерение АналитикаУчетаНоменклатуры, ссылающееся на справочник КлючиАналитикиУчетаНоменклатуры. Чтобы сопоставить данные двух регистров, необходимо соединять их по реквизитам этого справочника.

Рассмотрим пример правильного соединения таблиц в тексте запроса:


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

Нюансы реализации и производительность

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

  1. Задвоение строк в динамическом списке: Если выполнить простое левое соединение без отбора по конкретной организации (параметр &Организация), в форме подбора номенклатура размножится на столько строк, у скольких организаций есть остатки на данном складе. Для динамического списка номенклатуры это нарушит привычный интерфейс выбора.
  2. Падение производительности: Запрос динамического списка в модуле ПодборТоваровСервер формируется динамически. Добавление соединения с виртуальной таблицей ТоварыОрганизаций.Остатки с развертыванием через точки к реквизитам ключа аналитики (АналитикаУчетаНоменклатуры.Номенклатура) на больших базах с сотнями тысяч записей существенно увеличивает время отклика формы.

Варианты реализации задачи

В зависимости от требований бизнеса разберем несколько вариантов доработки:

  1. Фильтрация по организации документа продажи: Если менеджер должен видеть остаток только той компании, от которой выписывается документ, передаем в форму подбора параметр &Организация из документа и накладываем жесткий отбор в виртуальной таблице ТоварыОрганизаций.Остатки. В этом случае задвоения строк не происходит.
  2. Вывод детальной информации при активизации строки: Чтобы не перегружать основной динамический список каталога, добавляем в нижнюю часть формы подбора отдельную табличную часть. В событии ПриАктивизацииСтроки таблицы номенклатуры выполняем точечный и быстрый запрос остатков по текущей выбранной позиции в разрезе всех организаций и складов.
  3. Административное разделение складов: Если схема «Интеркампани» не используется, наиболее надежным решением без изменения кода является закрепление за каждой организацией собственного склада. В таком случае складской остаток всегда равен остатку организации.
← На главную