Как в УТ 10.3 сформировать прайс-лист по остаткам конкретной организации

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

В типовой конфигурации «1С:Управление торговлей 10.3» при работе нескольких юридических лиц в одной информационной базе часто возникает задача сформировать прайс-лист только по тем товарам, которые числятся на остатках определенной организации. Стандартная обработка ПечатьПрайсЛиста при установке отборов по организации или складу ведет себя неожиданно для пользователей: в печатную форму попадает весь справочник номенклатуры, либо товары выводятся с пустыми остатками.

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

Почему типовой прайс-лист выводит лишние позиции

Посмотрим на структуру типовых данных и алгоритм формирования прайс-листа. Некорректный результат при попытке отбора связан с тремя ключевыми особенностями архитектуры УТ 10.3:

  1. Логика выборки данных: Прайс-лист строится от справочника Номенклатура или среза последних регистра сведений ЦеныНоменклатуры, к которым через ЛЕВОЕ СОЕДИНЕНИЕ подключаются остатки. При наложении стандартного отбора по складу или организации позиции без остатка не исключаются из результирующей выборки, а просто выводятся с пустым количеством.
  2. Разделение складского и организационного контуров: В регистре накопления ТоварыНаСкладах ведется оперативный количественный учет в разрезе складов, но измерение Организация в нем отсутствует. Напротив, в регистре ТоварыОрганизаций есть измерение Организация, но отсутствует измерение Склад. Простая замена имени регистра в запросе типовой обработки приводит к ошибке, так как поля этих регистров не совпадают.
  3. Отсутствие организации в ценах: Регистр ЦеныНоменклатуры не имеет привязки к организациям. Цены назначаются строго на типы цен (ТипыЦенНоменклатуры).

Способ 1. Создание отчета на СКД по регистру «ТоварыОрганизаций»

Если для формирования прайс-листа достаточно знать только принадлежность товара организации (без детализации по конкретным складам), оптимальным решением является создание внешнего отчета на Системе компоновки данных (СКД) с жестким соединением таблиц.

Разберем по шагам логику запроса для такого отчета:

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

Посмотрим на пример текста запроса для набора данных СКД:


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

Такой подход полностью решает задачу выборки товаров конкретного юридического лица и работает значительно быстрее типового прайс-листа за счет отсутствия избыточных соединений.

Способ 2. Использование регистра «ПартииТоваровНаСкладахБухгалтерскийУчет»

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

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

Посмотрим на пример запроса для выборки данных по партиям:


ВЫБРАТЬ
	ПартииОстатки.Номенклатура КАК Номенклатура,
	ПартииОстатки.Склад КАК Склад,
	СУММА(ПартииОстатки.КоличествоОстаток) КАК Остаток,
	Цены.Цена КАК Цена,
	Цены.Валюта КАК Валюта
ИЗ
	РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.Остатки(
		&Период,
		Организация = &Организация
			И Склад В (&Склады)) КАК ПартииОстатки
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
			&Период,
			ТипЦен = &ТипЦен) КАК Цены
		ПО ПартииОстатки.Номенклатура = Цены.Номенклатура
СГРУППИРОВАТЬ ПО
	ПартииОстатки.Номенклатура,
	ПартииОстатки.Склад,
	Цены.Цена,
	Цены.Валюта
ИМЕЮЩИЕ
	СУММА(ПартииОстатки.КоличествоОстаток) > 0

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

Способ 3. Организационное разделение через типы цен

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

  1. Создаем в справочнике ТипыЦенНоменклатуры отдельные типы цен для каждой фирмы (например, «Оптовая Ромашка» и «Оптовая Лютик»).
  2. Документами УстановкаЦенНоменклатуры назначаем соответствующие цены только на тот товар, которым торгует конкретная организация.
  3. При формировании типового прайс-листа выбираем только профильный тип цены. В настройках отбора устанавливаем флаг «Не выводить позиции без цены».

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

← На главную