При постоянном создании карточек товаров с одинаковыми характеристиками (например, строительные материалы, подлежащие учету в квадратных или кубических метрах) пользователи часто сталкиваются с подстановкой штучной единицы измерения. По умолчанию конфигурация «1С:Бухгалтерия предприятия» (БП 3.0) устанавливает реквизит «Единица» равным «шт».
Выясним причину такого поведения программы. В отличие от конфигурации «1С:Управление торговлей», где единица измерения завязывается на конкретный вид номенклатуры, в 1С:Бухгалтерии 8.3 алгоритм подстановки зафиксирован программно для всей создаваемой номенклатуры. При создании элемента справочника программа вызывает функцию ПолучитьЕдиницуИзмеренияПоУмолчанию() модуля менеджера справочника КлассификаторЕдиницИзмерения, в которой по умолчанию зашит поиск кода ОКЕИ «796» (штуки).
Рассмотрим подробнее два способа решения этой задачи: безопасное переопределения логики через расширение конфигурации и прямой вариант правки модуля менеджера.
Прямое изменение типового кода в основной конфигурации требует снятия объекта с поддержки или включения возможности изменения, а при очередном обновлении типовой конфигурации ваш код может затереться. Чтобы подстановка единицы измерения подтягивала «м2» и сохранялась после всех обновлений программы, воспользуемся механизмом расширений.
Разберем процесс настройки по шагам:
055) подгружена в справочник КлассификаторЕдиницИзмерения. Если элемента еще нет, добавим его из Общероссийского классификатора единиц измерения.КлассификаторЕдиницИзмерения и добавим его в расширение.ПолучитьЕдиницуИзмеренияПоУмолчанию() с помощью аннотации &Вместо.Проанализируем пример кода для модуля менеджера справочника в расширении:
&Вместо("ПолучитьЕдиницуИзмеренияПоУмолчанию")
Функция Расш1_ПолучитьЕдиницуИзмеренияПоУмолчанию()
// Ищем квадратные метры по коду ОКЕИ "055"
ЕдиницаПоУмолчанию = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("055");
// Если по коду элемент не найден, пробуем найти по наименованию
Если НЕ ЗначениеЗаполнено(ЕдиницаПоУмолчанию) Тогда
ЕдиницаПоУмолчанию = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("м2", Истина);
КонецЕсли;
// Если м2 не подгружен в базу, вызываем стандартную алгоритмическую логику
Если НЕ ЗначениеЗаполнено(ЕдиницаПоУмолчанию) Тогда
Возврат ПродолжитьВызов();
КонецЕсли;
Возврат ЕдиницаПоУмолчанию;
КонецФункции
Важное ограничение: использование расширений с собственной программной логикой доступно только в версиях ПРОФ и КОРП. В базовых версиях платформы механизмы расширения кода ограничены.
Если конфигурация уже снята с поддержки или в базе не используются расширения, изменим программный код непосредственно в модуле менеджера справочника.
Откроем Конфигуратор, перейдем по пути: Справочник → КлассификаторЕдиницИзмерения → МодульМенеджера. Найдем экспортную функцию ПолучитьЕдиницуИзмеренияПоУмолчанию() и скорректируем её алгоритм.
Посмотрим на пример изменения исходного кода:
Функция ПолучитьЕдиницуИзмеренияПоУмолчанию() Экспорт
// Заменяем стандартный код "796" (шт) на код нужной единицы, например "055" (м2)
ЕдиницаПоУмолчанию = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("055");
Если ЕдиницаПоУмолчанию = Справочники.КлассификаторЕдиницИзмерения.ПустаяСсылка() Тогда
ЕдиницаПоУмолчанию = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("м2", Истина);
КонецЕсли;
Возврат ЕдиницаПоУмолчанию;
КонецФункции
Обратите внимание: при обновлении типовой конфигурации через «Обновление конфигурации» данный модуль может быть перезаписан поставщиком (фирмой «1С»), в результате чего единица измерения по умолчанию снова станет штукой. В этом случае потребуется повторно вносить правки или контролировать объединение модулей при обновлении.
Если у вас нет прав на редактирование конфигурации или используется базовая версия 1С:Бухгалтерии, разберем пользовательские способы решения задачи:
F9 (Копировать), выбрав ранее созданный товар, у которого уже установлена единица «м2». В этом случае все реквизиты скопируются напрямую, минуя стандартный алгоритм подстановки.