Как изменить единицу измерения по умолчанию при создании номенклатуры в 1С:Бухгалтерии 8.3?

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

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

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

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

Способ 1. Использование расширения конфигурации (Рекомендуемый)

Прямое изменение типового кода в основной конфигурации требует снятия объекта с поддержки или включения возможности изменения, а при очередном обновлении типовой конфигурации ваш код может затереться. Чтобы подстановка единицы измерения подтягивала «м2» и сохранялась после всех обновлений программы, воспользуемся механизмом расширений.

Разберем процесс настройки по шагам:

  1. Убедимся, что необходимая единица измерения (например, квадратные метры с кодом ОКЕИ 055) подгружена в справочник КлассификаторЕдиницИзмерения. Если элемента еще нет, добавим его из Общероссийского классификатора единиц измерения.
  2. В режиме Конфигуратора добавим новое расширение конфигурации через меню Конфигурация — Расширения конфигурации.
  3. Найдем в дереве объектов основной конфигурации справочник КлассификаторЕдиницИзмерения и добавим его в расширение.
  4. Откроем модуль менеджера справочника в расширении и переопределим экспортируемую функцию ПолучитьЕдиницуИзмеренияПоУмолчанию() с помощью аннотации &Вместо.

Проанализируем пример кода для модуля менеджера справочника в расширении:


&Вместо("ПолучитьЕдиницуИзмеренияПоУмолчанию")
Функция Расш1_ПолучитьЕдиницуИзмеренияПоУмолчанию()
    // Ищем квадратные метры по коду ОКЕИ "055"
    ЕдиницаПоУмолчанию = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("055");
    
    // Если по коду элемент не найден, пробуем найти по наименованию
    Если НЕ ЗначениеЗаполнено(ЕдиницаПоУмолчанию) Тогда
        ЕдиницаПоУмолчанию = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("м2", Истина);
    КонецЕсли;
    
    // Если м2 не подгружен в базу, вызываем стандартную алгоритмическую логику
    Если НЕ ЗначениеЗаполнено(ЕдиницаПоУмолчанию) Тогда
        Возврат ПродолжитьВызов();
    КонецЕсли;
    
    Возврат ЕдиницаПоУмолчанию;
КонецФункции

Важное ограничение: использование расширений с собственной программной логикой доступно только в версиях ПРОФ и КОРП. В базовых версиях платформы механизмы расширения кода ограничены.

Способ 2. Прямая правка модуля менеджера справочника

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

Откроем Конфигуратор, перейдем по пути: Справочник → КлассификаторЕдиницИзмерения → МодульМенеджера. Найдем экспортную функцию ПолучитьЕдиницуИзмеренияПоУмолчанию() и скорректируем её алгоритм.

Посмотрим на пример изменения исходного кода:


Функция ПолучитьЕдиницуИзмеренияПоУмолчанию() Экспорт

    // Заменяем стандартный код "796" (шт) на код нужной единицы, например "055" (м2)
    ЕдиницаПоУмолчанию = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("055");
    
    Если ЕдиницаПоУмолчанию = Справочники.КлассификаторЕдиницИзмерения.ПустаяСсылка() Тогда
        ЕдиницаПоУмолчанию = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("м2", Истина);
    КонецЕсли;
    
    Возврат ЕдиницаПоУмолчанию;

КонецФункции

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

Альтернативные варианты без доработки кода

Если у вас нет прав на редактирование конфигурации или используется базовая версия 1С:Бухгалтерии, разберем пользовательские способы решения задачи:

  1. Ввод элементов копированием: при создании новой позиции используйте клавишу F9 (Копировать), выбрав ранее созданный товар, у которого уже установлена единица «м2». В этом случае все реквизиты скопируются напрямую, минуя стандартный алгоритм подстановки.
  2. Групповое изменение реквизитов: если вы уже добавили массив номенклатуры со штучной единицей измерения, замените ее массово. Для этого перейдите в раздел Администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов, выберите справочник «Номенклатура» и задайте новое значение для реквизита «Единица».
← На главную