При работе с отчетами в 1С:Управление торговлей 11.4 часто возникает потребность отображать количество проданных товаров не только в базовых единицах измерения, но и в других, специфических для анализа, например, в килограммах, литрах или квадратных метрах. Стандартные отчеты обычно выводят количество в базовой единице номенклатуры, что не всегда удобно, если товары учитываются в одной единице (штуках), а продаются или анализируются в другой (килограммах). В этой статье мы подробно разберем, как модифицировать отчет по продажам с использованием Системы Компоновки Данных (СКД), чтобы получить желаемый результат.
Прежде чем перейти к решению, нам необходимо четко понять, как 1С:Управление торговлей работает с единицами измерения. В системе для каждой номенклатурной позиции определена базовая единица измерения. Например, для сахара это могут быть "Штуки" (пачки) или "Килограммы". Однако часто требуется продавать или учитывать товар в других единицах, отличных от базовой. Для этого в справочнике Номенклатура предусмотрен механизм дополнительных единиц измерения, где можно указать коэффициент пересчета относительно базовой единицы.
Например, если базовая единица сахара — "кг", а вы продаете его в "мешках по 50 кг", то "мешок" будет дополнительной единицей с коэффициентом 50. Проблема возникает, когда в отчете по продажам нам нужно получить сумму проданных товаров в килограммах, независимо от того, в каких единицах была оформлена конкретная реализация (в килограммах или в мешках).
Основным инструментом для построения гибких и настраиваемых отчетов в 1С является Система Компоновки Данных (СКД). Она позволяет создавать сложные запросы, настраивать вычисляемые поля, группировки и параметры, что идеально подходит для нашей задачи.
В основе любого отчета на СКД лежит запрос, который извлекает необходимые данные из базы. Для нашей задачи нам потребуется информация из регистра накопления Продажи.Обороты и из регистра сведений, который хранит коэффициенты пересчета единиц измерения. Изначально может показаться, что достаточно обратиться к справочнику Номенклатура.ЕдиницыИзмерения, но как было выяснено в ходе обсуждения, это не всегда корректно, поскольку поле ЕдиницаИзмерения в регистре Продажи чаще всего указывает на базовую единицу, а не на ту, в которой фактически осуществлялась продажа, если она отличалась от базовой.
Для корректного получения коэффициентов пересчета нам необходимо использовать регистр сведений ДвиженияНоменклатураЕдиницыИзмерения. Этот регистр содержит актуальные коэффициенты для каждой связки номенклатура-единица измерения. Рассмотрим, как составить запрос:
ВЫБРАТЬ
ПродажиОбороты.Номенклатура,
ПродажиОбороты.Характеристика,
ПродажиОбороты.КоличествоОборот КАК КоличествоБазовое,
ПродажиОбороты.СуммаОборот,
ДвиженияНоменклатураЕдиницыИзмерения.Коэффициент КАК КоэффициентКГ,
ДвиженияНоменклатураЕдиницыИзмерения.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПродажиДляОтчета
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДвиженияНоменклатураЕдиницыИзмерения КАК ДвиженияНоменклатураЕдиницыИзмерения
ПО ПродажиОбороты.Номенклатура = ДвиженияНоменклатураЕдиницыИзмерения.Номенклатура
И ПродажиОбороты.ЕдиницаИзмерения = ДвиженияНоменклатураЕдиницыИзмерения.ЕдиницаИзмерения // Это базовая единица!
ГДЕ
ДвиженияНоменклатураЕдиницыИзмерения.ЕдиницаИзмерения = &ЕдиницаДляОтчета // Параметр для выбора "кг", "литры" и т.д.
Разберем этот запрос подробнее:
РегистрНакопления.Продажи.Обороты. Нас интересуют Номенклатура, Характеристика, КоличествоОборот (количество в базовых единицах) и СуммаОборот.РегистрСведений.ДвиженияНоменклатураЕдиницыИзмерения. Это очень важный шаг, так как именно в этом регистре хранятся коэффициенты пересчета для всех дополнительных единиц измерения.ПродажиОбороты.Номенклатура = ДвиженияНоменклатураЕдиницыИзмерения.Номенклатура: мы связываем записи по одной и той же номенклатуре.ПродажиОбороты.ЕдиницаИзмерения = ДвиженияНоменклатураЕдиницыИзмерения.ЕдиницаИзмерения: здесь мы связываем по базовой единице измерения. Важно понимать, что это поле в регистре продаж хранит ссылку именно на базовую единицу, а не на ту, в которой была совершена продажа. Это стандартное поведение системы.ГДЕ мы используем параметр &ЕдиницаДляОтчета. Этот параметр позволит нам динамически указывать, в какую единицу измерения мы хотим пересчитать количество. Например, мы можем передать сюда ссылку на единицу измерения "кг".Важно: Убедитесь, что для каждой номенклатурной позиции, которую вы хотите анализировать, в справочнике Номенклатура настроены все необходимые дополнительные единицы измерения с их корректными коэффициентами пересчета относительно базовой единицы. Без этих настроек регистр сведений ДвиженияНоменклатураЕдиницыИзмерения не будет содержать нужных данных.
После того как мы получили коэффициент пересчета в запросе, нам необходимо создать новое вычисляемое поле в СКД, которое будет производить сам расчет. Для этого:
КоличествоВОтчетнойЕдинице.
КоличествоБазовое * КоэффициентКГ
Здесь КоличествоБазовое — это поле из нашего запроса, которое содержит количество в базовых единицах, а КоэффициентКГ — это коэффициент пересчета, который мы получили из регистра ДвиженияНоменклатураЕдиницыИзмерения. Если вы назвали поля в запросе иначе, используйте соответствующие имена.
Теперь в вашем отчете появится новое поле КоличествоВОтчетнойЕдинице, которое будет содержать количество проданных товаров, пересчитанное в выбранную вами единицу измерения (в нашем примере — в килограммы).
Чтобы отчет был гибким, настроим параметр &ЕдиницаДляОтчета:
ЕдиницаДляОтчета.СправочникСсылка.ЕдиницыИзмерения.ЕдиницыИзмерения.Преимущества использования параметра: Пользователь сможет самостоятельно выбрать единицу измерения, в которой ему нужно видеть данные в отчете, не заходя в конфигуратор. Это делает отчет гораздо более универсальным и удобным.
Для более сложных сценариев или когда требуется динамический пересчет между различными единицами измерения без жесткой привязки в запросе, можно использовать глобальную функцию 1С ПолучитьКоэффициентПересчетаЕдиниц(). Эта функция позволяет программно получить коэффициент пересчета между двумя любыми единицами измерения для конкретной номенклатуры.
Синтаксис функции выглядит примерно так:
ПолучитьКоэффициентПересчетаЕдиниц(Номенклатура, ЕдиницаИзмеренияИсточника, ЕдиницаИзмеренияЦели)
Где:
Номенклатура: Ссылка на элемент справочника "Номенклатура".ЕдиницаИзмеренияИсточника: Ссылка на единицу измерения, из которой нужно пересчитать (например, базовая единица номенклатуры).ЕдиницаИзмеренияЦели: Ссылка на единицу измерения, в которую нужно пересчитать (например, "кг").Использование этой функции в СКД возможно через вычисляемое поле, но это потребует более глубокого понимания механизма СКД и создания запросов к наборам данных "объект". Для начинающих пользователей или для решения нашей конкретной задачи с одной целевой единицей измерения, подход с присоединением к регистру сведений ДвиженияНоменклатураЕдиницыИзмерения в запросе является более простым и прозрачным.
Мы рассмотрели подробный подход к решению проблемы вывода количества товаров в различных единицах измерения в отчете 1С:Управление торговлей 11.4. Основным шагом является правильное формирование запроса в СКД, включающее соединение с регистром сведений ДвиженияНоменклатураЕдиницыИзмерения для получения коэффициентов пересчета. Затем мы добавляем вычисляемое поле, которое использует этот коэффициент, и настраиваем параметры, чтобы пользователь мог динамически выбирать требуемую единицу измерения.
Следуя этим шагам, вы сможете создавать гибкие и информативные отчеты, которые точно соответствуют вашим аналитическим потребностям, предоставляя данные о количестве товаров в тех единицах, которые наиболее релевантны для вашего бизнеса.