Почему при выборе дополнительной единицы измерения в документах отображается код вместо наименования и как это исправить

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

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

Разберем подробнее причины возникновения такой ситуации и выясним, какими способами можно вернуть корректное текстовое отображение единиц измерения.

Причина некорректного отображения данных

Проанализируем техническую сторону формирования списков быстрого выбора в тонком клиенте платформы «1С:Предприятие 8.3»:

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

Способ 1. Обновление платформы «1С:Предприятие» (рекомендуемый)

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

  1. Установим стабильный релиз технологической платформы 8.3.9 или более поздний актуальный релиз ветки 8.3.
  2. Переведем базу данных на запуск под новой версией платформы.
  3. Проверим отображение единиц измерения в том же документе. Как показывает практика, на платформе 8.3.9.1850 и выше выпадающий список сразу начинает корректно отображать текстовые наименования без каких-либо доработок конфигурации.

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

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

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


Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) Экспорт
    СтандартнаяОбработка = Ложь;
    Представление = Данные.Наименование;
КонецПроцедуры

Данная процедура гарантирует, что при любом обращении к представлению элемента (в списках выбора, табличных частях и отчетах) система вернет именно значение реквизита Наименование.

Способ 3. Корректировка обработчика «ОбработкаПолученияДанныхВыбора»

Если для поля используется механизм быстрого выбора по строке, проанализируем процедуру ОбработкаПолученияДанныхВыбора в модуле менеджера справочника ЕдиницыИзмерения. При программном заполнении списка выбора обязательно передадим наименование вторым параметром метода Добавить:


Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Экспорт
    СтандартнаяОбработка = Ложь;
    ДанныеВыбора = Новый СписокЗначений;
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Единицы.Ссылка КАК Ссылка,
        |	Единицы.Наименование КАК Наименование
        |ИЗ
        |	Справочник.ЕдиницыИзмерения КАК Единицы
        |ГДЕ
        |	Единицы.Владелец = &Владелец";
    Запрос.УстановитьПараметр("Владелец", Параметры.Отбор.Владелец);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        // Явно передаем ссылку и текстовое представление
        ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Наименование);
    КонецЦикла;
КонецПроцедуры

Явная передача второго параметра исключает зависимость списка от платформенного алгоритма генерации строкового представления.

Способ 4. Проверка данных и очистка кэша

Если проблема сохраняется на единичных рабочих станциях, выполним следующие сервисные действия:

  1. Проверим заполнение наименования: Откроем карточку проблемной единицы измерения и убедимся, что поле «Наименование» действительно заполнено текстом, а не содержит пустое значение.
  2. Очистим кэш тонкого клиента: Удалим временные файлы 1С в каталогах пользователя %LOCALAPPDATA%\1C\1Cv8 и %APPDATA%\1C\1Cv8 или переподключим информационную базу в списке запуска под новым внутренним идентификатором.
← На главную