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

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

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

Способ 1. Использование механизма упаковок для услуг

Многие пользователи ошибочно полагают, что механизм упаковок предназначен исключительно для товарных позиций (коробки, паллеты). Однако в современных версиях УТ 11 (начиная с 11.5) этот функционал успешно применяется и для услуг. Проанализируем, как это настроить шаг за шагом.

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

Важный нюанс: Если по услуге уже были движения (продажи), система может заблокировать изменение настроек упаковок. В этом случае потребуется временно разрешить редактирование реквизитов через меню «Еще — Разрешить редактирование реквизитов».

Способ 2. Использование дополнительных реквизитов и расширения (для печати)

Выясним причину, по которой первый способ может не подойти. Если ваше решение интегрировано с внешними системами (например, Bitrix) через JSON и логика обмена жестко завязана на передачу конкретного кода единицы измерения по ОКЕИ, использование упаковок может «сломать» интеграцию. Если вам нужно видеть разные единицы измерения только в печатной форме УПД для клиента, а управленческий учет вести в одной единице, оптимальным будет использование расширения.

Разберем алгоритм реализации:

  1. Создание доп. реквизита. Создадим дополнительный реквизит для табличной части «Товары» документа «Реализация товаров и услуг». Назовем его ЕдиницаИзмеренияДляПечати с типом данных Классификатор единиц измерения.
  2. Настройка вывода. Пользователь при оформлении реализации будет выбирать в этом поле ту единицу, которую хочет видеть в печатной форме.
  3. Доработка печатной формы. Создадим расширение конфигурации, в котором перехватим процедуру печати УПД. Нам нужно подменить стандартный вывод единицы измерения данными из нашего доп. реквизита.

Пример программного кода для подмены значения в расширении может выглядеть следующим образом:


Процедура ПечатьУПД_ПриПечати(ДанныеПечати, ОбъектыПечати)
    Для Каждого СтрокаТаблицы Из ДанныеПечати.ТабличнаяЧасть Цикл
        Если ЗначениеЗаполнено(СтрокаТаблицы.СсылкаНаОбъект.ЕдиницаИзмеренияДляПечати) Тогда
            СтрокаТаблицы.ЕдиницаИзмеренияНаименование = СтрокаТаблицы.СсылкаНаОбъект.ЕдиницаИзмеренияДляПечати.Наименование;
            СтрокаТаблицы.ЕдиницаИзмеренияКод = СтрокаТаблицы.СсылкаНаОбъект.ЕдиницаИзмеренияДляПечати.Код;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Внимание: Этот метод подходит только в том случае, если вы не используете Электронный документооборот (ЭДО). При использовании ЭДО данные в XML-файл будут уходить из стандартных регистров, и ваш контрагент все равно увидит базовую единицу измерения, а не ту, что вы «подрисовали» в печатной форме.

Способ 3. Создание наборов номенклатуры

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

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

Сравнение методов и рекомендации

Проанализируем преимущества и недостатки каждого подхода:

Механизм упаковок (Штатный):
+ Не требует программирования.
+ Автоматический пересчет количества и цен.
- Требует настройки обмена с внешними сайтами.
- Жесткая привязка цены через коэффициент (нельзя сделать «сутки» дешевле, чем 24 «часа» без ручных правок цены).

Дополнительные реквизиты (Кастомный):
+ Не влияет на складской и финансовый учет.
+ Идеально для специфических требований контрагентов по оформлению документов.
- Требует навыков программирования (создание расширения).
- Не работает для ЭДО.

Таким образом, если ваша основная задача — корректное отображение данных в печатной форме без изменения логики взаимодействия с Bitrix, выбирайте Способ №2. Если же вы хотите использовать всю мощь типового функционала и готовы к настройке интеграции — Способ №1 будет наиболее правильным с точки зрения архитектуры 1С.

← На главную