В типовой конфигурации «1С:Управление торговлей 11» (а также в «1С:ERP» и «1С:Комплексная автоматизация») по умолчанию заложен удобный механизм работы с двумя альтернативными единицами измерения: единицей хранения и единицей для отчетов. Однако в реальной практике оптовые и дистрибьюторские компании часто сталкиваются с необходимостью видеть в отчетах одновременно три и более единиц измерения (например, штуки, коробки и паллеты) или иметь возможность динамически выбирать любую произвольную упаковку для анализа.
В рамках этой статьи мы подробно разберем, как решить эту задачу различными методами: от простых настроек в режиме пользователя до профессиональной разработки с использованием механизмов СКД и расширений конфигурации.
Если вам необходимо быстро вывести дополнительную единицу измерения в отчет без изменения кода и снятия конфигурации с поддержки, мы можем воспользоваться мощным механизмом пользовательских полей Схемы компоновки данных (СКД) непосредственно в режиме «1С:Предприятие».
Проанализируем ситуацию: в системе у каждой номенклатурной позиции могут быть заданы упаковки со своими коэффициентами. Наша задача — взять базовое количество из отчета и разделить его на коэффициент нужной нам упаковки.
Выполним следующие шаги для настройки:
[Количество] / [Номенклатура].[НаборУпаковок].[Коэффициент]
Выбор Когда [Номенклатура].[ЕдиницаИзмерения] = "кг" Тогда [Количество] / 1000 Иначе [Количество] Конец
Этот способ хорош тем, что он не требует программирования, однако он ограничен возможностями логики выражений СКД в пользовательском режиме и подходит только для простых статических пересчетов.
Для более гибкого пересчета и вывода произвольных упаковок правильнее использовать встроенные функции конфигурации «1С:Управление торговлей 11». В модуле менеджера справочника УпаковкиЕдиницыИзмерения содержится готовый инструментарий для получения точных коэффициентов упаковок с учетом иерархии и индивидуальных настроек номенклатуры.
Рассмотрим пример программного пересчета количества из одной упаковки в другую. Для этого используется экспортная функция КоэффициентУпаковки. Посмотрим на практический пример кода, который можно использовать при доработке документов или внешних отчетов:
КоэффициентСтаройУпаковки = Справочники.УпаковкиЕдиницыИзмерения.КоэффициентУпаковки(ТекущиеДанные.СтараяУпаковка, ТекущиеДанные.Номенклатура);
КоэффициентУпаковки = Справочники.УпаковкиЕдиницыИзмерения.КоэффициентУпаковки(ТекущиеДанные.Упаковка, ТекущиеДанные.Номенклатура);
КоличествоВДокументе = ТекущиеДанные.СтароеКоличествоВДокументе
/ ?(ЗначениеЗаполнено(КоэффициентУпаковки), КоэффициентУпаковки, 1)
* ?(ЗначениеЗаполнено(КоэффициентСтаройУпаковки), КоэффициентСтаройУпаковки, 1);
Для работы в отчетах СКД мы можем вызывать функции этого модуля напрямую из вычисляемых полей. Выясним, как это реализовать на уровне Схемы компоновки данных:
КоличествоВАльтернативнойЕдинице.Справочники.УпаковкиЕдиницыИзмерения.КоэффициентУпаковки(Номенклатура.Ссылка, ВыбраннаяУпаковка)
Важно: Чтобы функции общих модулей были доступны для вызова в СКД, у этих общих модулей в свойствах должны стоять флаги Клиент (управляемое приложение) и Сервер.
Изменение типовых отчетов «в лоб» внутри основной конфигурации сильно усложняет последующие обновления системы. Рассмотрим современный и безопасный подход к решению этой задачи с использованием механизмов расширения конфигурации.
Разберем по шагам процесс реализации:
Номенклатура. Добавим в него новые реквизиты:
ДополнительнаяЕдиницаИзмерения (тип: СправочникСсылка.УпаковкиЕдиницыИзмерения или СправочникСсылка.КлассификаторЕдиницИзмерения).КоэффициентДополнительнойЕдиницы (тип: Число(15, 3)).ВедомостьПоТоварамНаСкладах) и откроем его основную схему компоновки данных.Номенклатура.КоличествоВДополнительнойЕдинице и пропишем выражение расчета:
КоличествоОстаток / Выбор Когда КоэффициентДополнительнойЕдиницы = 0 Тогда 1 Иначе КоэффициентДополнительнойЕдиницы Конец
Использование расширения позволяет сохранить типовую конфигурацию полностью на поддержке, при этом предоставив пользователям весь необходимый функционал для многомерного количественного анализа.
Наиболее элегантное решение — дать пользователю возможность прямо в шапке отчета выбирать, в какой именно единице измерения он хочет видеть данные прямо сейчас. Для реализации такого подхода выполним следующие действия в СКД отчета:
&ВыбраннаяЕдиницаПересчета с типом ссылки на справочник УпаковкиЕдиницыИзмерения и сделаем его доступным для быстрой настройки на форме отчета.
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиПересчета
ПО УпаковкиПересчета.Ссылка = &ВыбраннаяЕдиницаПересчета
И УпаковкиПересчета.Владелец = ТаблицаТоваров.Номенклатура
Количество / Выбор Когда ЕстьNull(УпаковкиПересчета.Коэффициент, 0) = 0 Тогда 1 Иначе УпаковкиПересчета.Коэффициент Конец
При такой архитектуре пользователь сможет в один клик переключить всю ведомость, например, с килограммов на коробки или поддоны, при условии, что соответствующие коэффициенты заданы в карточках номенклатуры.
При внедрении подобных решений на производственных предприятиях (особенно на мясокомбинатах, молокозаводах или кабельных производствах) необходимо учитывать критически важный нюанс учета мерного товара.
Все вышеописанные формулы пересчета в СКД базируются на постоянных (жестких) коэффициентах пересчета. Например, если в коробке всегда ровно 10 штук, математический пересчет будет работать идеально.
Если же мы автоматизируем предприятие с весовым товаром (где одна головка сыра весит от 7.5 до 8.2 кг, а одна коробка готовой продукции каждый раз имеет уникальный вес), то стандартный механизм упаковок и простые формулы пересчета в СКД не дадут достоверных данных.
Для автоматизации таких процессов необходимо использовать либо специализированные отраслевые решения (например, линейку решений «1С:ERP Молокозавод» или «1С:Общепит»), либо вести параллельный количественный учет в разрезе характеристик и серий номенклатуры, где точный вес каждой физической упаковки фиксируется непосредственно в регистре накопления в момент совершения хозяйственной операции.