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