Как вывести три и более единиц измерения в стандартных отчетах 1С:Управление торговлей 11?

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

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

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

Метод 1. Настройка третьей единицы через пользовательские поля СКД (без изменения конфигурации)

Если вам необходимо быстро вывести дополнительную единицу измерения в отчет без изменения кода и снятия конфигурации с поддержки, мы можем воспользоваться мощным механизмом пользовательских полей Схемы компоновки данных (СКД) непосредственно в режиме «1С:Предприятие».

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

Выполним следующие шаги для настройки:

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

    [Количество] / [Номенклатура].[НаборУпаковок].[Коэффициент]

    Или, если нам нужно использовать конкретную упаковку с жестким условием, мы можем применить конструкцию выбора:

    Выбор Когда [Номенклатура].[ЕдиницаИзмерения] = "кг" Тогда [Количество] / 1000 Иначе [Количество] Конец

  6. Перейдем на вкладку Поля и перетащим наше новое пользовательское поле в список выбранных полей отчета.
  7. Нажмем Завершить редактирование и сформируем отчет.

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

Метод 2. Динамический расчет коэффициентов с помощью общих модулей 1С

Для более гибкого пересчета и вывода произвольных упаковок правильнее использовать встроенные функции конфигурации «1С:Управление торговлей 11». В модуле менеджера справочника УпаковкиЕдиницыИзмерения содержится готовый инструментарий для получения точных коэффициентов упаковок с учетом иерархии и индивидуальных настроек номенклатуры.

Рассмотрим пример программного пересчета количества из одной упаковки в другую. Для этого используется экспортная функция КоэффициентУпаковки. Посмотрим на практический пример кода, который можно использовать при доработке документов или внешних отчетов:


КоэффициентСтаройУпаковки = Справочники.УпаковкиЕдиницыИзмерения.КоэффициентУпаковки(ТекущиеДанные.СтараяУпаковка, ТекущиеДанные.Номенклатура);
КоэффициентУпаковки = Справочники.УпаковкиЕдиницыИзмерения.КоэффициентУпаковки(ТекущиеДанные.Упаковка, ТекущиеДанные.Номенклатура);

КоличествоВДокументе = ТекущиеДанные.СтароеКоличествоВДокументе
/ ?(ЗначениеЗаполнено(КоэффициентУпаковки), КоэффициентУпаковки, 1)
* ?(ЗначениеЗаполнено(КоэффициентСтаройУпаковки), КоэффициентСтаройУпаковки, 1);

Для работы в отчетах СКД мы можем вызывать функции этого модуля напрямую из вычисляемых полей. Выясним, как это реализовать на уровне Схемы компоновки данных:

  1. В схеме компоновки данных нашего отчета перейдем на вкладку Вычисляемые поля.
  2. Добавим новое поле, например, КоличествоВАльтернативнойЕдинице.
  3. В колонке Выражение пропишем вызов функции общего модуля, передавая в параметры текущую номенклатуру и целевую упаковку. Пример вызова:

    Справочники.УпаковкиЕдиницыИзмерения.КоэффициентУпаковки(Номенклатура.Ссылка, ВыбраннаяУпаковка)

Важно: Чтобы функции общих модулей были доступны для вызова в СКД, у этих общих модулей в свойствах должны стоять флаги Клиент (управляемое приложение) и Сервер.

Метод 3. Профессиональная доработка через расширение конфигурации

Изменение типовых отчетов «в лоб» внутри основной конфигурации сильно усложняет последующие обновления системы. Рассмотрим современный и безопасный подход к решению этой задачи с использованием механизмов расширения конфигурации.

Разберем по шагам процесс реализации:

  1. Создадим новое расширение конфигурации в режиме Конфигуратора и снимем флаг Безопасный режим в его свойствах (это необходимо для возможности вызова серверного кода из СКД).
  2. Добавим в расширение справочник Номенклатура. Добавим в него новые реквизиты:
    • ДополнительнаяЕдиницаИзмерения (тип: СправочникСсылка.УпаковкиЕдиницыИзмерения или СправочникСсылка.КлассификаторЕдиницИзмерения).
    • КоэффициентДополнительнойЕдиницы (тип: Число(15, 3)).
  3. Добавим в расширение интересующий нас отчет (например, ВедомостьПоТоварамНаСкладах) и откроем его основную схему компоновки данных.
  4. В запросе набора данных СКД соединим виртуальную таблицу остатков с нашими новыми реквизитами справочника Номенклатура.
  5. На вкладке Вычисляемые поля добавим поле КоличествоВДополнительнойЕдинице и пропишем выражение расчета:

    КоличествоОстаток / Выбор Когда КоэффициентДополнительнойЕдиницы = 0 Тогда 1 Иначе КоэффициентДополнительнойЕдиницы Конец

  6. Выведем это поле в настройки отчета по умолчанию.

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

Метод 4. Динамический выбор произвольной единицы измерения в параметрах отчета

Наиболее элегантное решение — дать пользователю возможность прямо в шапке отчета выбирать, в какой именно единице измерения он хочет видеть данные прямо сейчас. Для реализации такого подхода выполним следующие действия в СКД отчета:

  1. Добавим в Схему компоновки данных новый параметр &ВыбраннаяЕдиницаПересчета с типом ссылки на справочник УпаковкиЕдиницыИзмерения и сделаем его доступным для быстрой настройки на форме отчета.
  2. В запросе СКД настроим левое соединение с таблицей упаковок по условию равенства выбранному параметру:
    
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиПересчета
        ПО УпаковкиПересчета.Ссылка = &ВыбраннаяЕдиницаПересчета
        И УпаковкиПересчета.Владелец = ТаблицаТоваров.Номенклатура
    
  3. В вычисляемых полях добавим расчет итогового количества:

    Количество / Выбор Когда ЕстьNull(УпаковкиПересчета.Коэффициент, 0) = 0 Тогда 1 Иначе УпаковкиПересчета.Коэффициент Конец

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

Важное архитектурное ограничение: постоянные коэффициенты против «плавающего» веса

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

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

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

Для автоматизации таких процессов необходимо использовать либо специализированные отраслевые решения (например, линейку решений «1С:ERP Молокозавод» или «1С:Общепит»), либо вести параллельный количественный учет в разрезе характеристик и серий номенклатуры, где точный вес каждой физической упаковки фиксируется непосредственно в регистре накопления в момент совершения хозяйственной операции.

← На главную