При оформлении первичных документов в «1С:Управление нашей фирмой» (УНФ 1.6) пользователи нередко сталкиваются с неприятным поведением интерфейса: при выборе единицы измерения в табличной части (например, при указании упаковок, ящиков или коробок) вместо привычного текстового названия (например, «упак» или «шт») в выпадающем списке отображается внутренний код элемента справочника, например 000000010. При этом в свойствах метаданных справочника ЕдиницыИзмерения для параметра Основное представление явно установлено значение «В виде наименования».
Разберем подробнее причины возникновения такой ситуации и выясним, какими способами можно вернуть корректное текстовое отображение единиц измерения.
Проанализируем техническую сторону формирования списков быстрого выбора в тонком клиенте платформы «1С:Предприятие 8.3»:
8.3.7 (в частности, 8.3.7.1759) присутствовала ошибка механизма вывода автоподбора и формирования списков быстрого выбора данных. Если значение реквизита формируется динамически или передается через переопределенный обработчик, тонкий клиент некорректно запрашивал строковое представление ссылки и подставлял вместо него системный код.ЕдиницыИзмерения используется собственный алгоритм формирования выпадающего списка. Если в коллекцию ДанныеВыбора добавляются ссылки без явной передачи второго параметра — текстового представления, платформа пытается вычислить его самостоятельно, что на старых платформах приводило к сбою.Поскольку проблема в большинстве случаев кроется в платформенной ошибке автоподбора и вывода ссылочных данных, самым надежным и штатным решением является обновление технологической платформы. Проверим поведение базы на актуальном релизе:
8.3.9 или более поздний актуальный релиз ветки 8.3.8.3.9.1850 и выше выпадающий список сразу начинает корректно отображать текстовые наименования без каких-либо доработок конфигурации.Если оперативно обновить платформу на сервере или рабочих местах нет возможности, разберем обходной путь через доработку конфигурации или расширение. В модуле менеджера справочника ЕдиницыИзмерения можно принудительно переопределить формирование строкового представления через событие ОбработкаПолученияПредставления.
Посмотрим на пример программного кода:
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) Экспорт
СтандартнаяОбработка = Ложь;
Представление = Данные.Наименование;
КонецПроцедуры
Данная процедура гарантирует, что при любом обращении к представлению элемента (в списках выбора, табличных частях и отчетах) система вернет именно значение реквизита Наименование.
Если для поля используется механизм быстрого выбора по строке, проанализируем процедуру ОбработкаПолученияДанныхВыбора в модуле менеджера справочника ЕдиницыИзмерения. При программном заполнении списка выбора обязательно передадим наименование вторым параметром метода Добавить:
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Экспорт
СтандартнаяОбработка = Ложь;
ДанныеВыбора = Новый СписокЗначений;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Единицы.Ссылка КАК Ссылка,
| Единицы.Наименование КАК Наименование
|ИЗ
| Справочник.ЕдиницыИзмерения КАК Единицы
|ГДЕ
| Единицы.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец", Параметры.Отбор.Владелец);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Явно передаем ссылку и текстовое представление
ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Наименование);
КонецЦикла;
КонецПроцедуры
Явная передача второго параметра исключает зависимость списка от платформенного алгоритма генерации строкового представления.
Если проблема сохраняется на единичных рабочих станциях, выполним следующие сервисные действия:
%LOCALAPPDATA%\1C\1Cv8 и %APPDATA%\1C\1Cv8 или переподключим информационную базу в списке запуска под новым внутренним идентификатором.