Часто при работе с каталогом товаров возникает необходимость видеть не только наименование номенклатуры, но и её уникальный идентификатор — Артикул — непосредственно в общем списке. Несмотря на то, что сам реквизит в справочнике может существовать, он не всегда отображается на форме по умолчанию. В этой статье мы подробно разберем, как вывести артикул в форму списка, учитывая особенности различных типов интерфейсов платформы 1С:Предприятие 8.3, на примере конфигурации «ДАЛИОН: АвтоБизнес».
Когда мы добавляем новый реквизит в объект метаданных (справочник), платформа не «знает» автоматически, в какое именно место на форме его нужно поместить. Форма списка — это отдельный объект, который требует настройки. В зависимости от того, используется ли в вашей программе старый тип интерфейса (Обычные формы) или современный (Управляемые формы), методика решения будет существенно различаться. Проанализируем каждый из этих вариантов.
Если ваша конфигурация использует управляемый интерфейс, то зачастую программирование в Конфигураторе даже не потребуется. Рассмотрим, как это сделать силами пользователя:
Артикул и установим напротив него флажок.В конфигурациях типа «ДАЛИОН: АвтоБизнес» редакции 1.3 чаще используются обычные формы. Здесь нам придется поработать в визуальном редакторе форм. Пройдем по шагам:
Номенклатура и откроем его формы.Данные (Data) необходимо указать путь к данным. Для обычного реквизита объекта это будет просто Артикул. Если поле связано с выборкой, система предложит выбрать его из списка доступных полей.В управляемых формах за отображение данных отвечает объект ДинамическийСписок. Иногда реквизита «Артикул» просто нет в наборе данных этого списка, даже если он есть в справочнике. Проанализируем, как это исправить:
Рассмотрим подробнее работу с запросом динамического списка:
Список.Артикул из таблицы справочника в список выбранных полей.Примерно так будет выглядеть фрагмент запроса:
ВЫБРАТЬ
СправочникНоменклатура.Ссылка,
СправочникНоменклатура.Код,
СправочникНоменклатура.Наименование,
СправочникНоменклатура.Артикул
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
После изменения запроса поле станет доступным для размещения на форме, как было описано в первом варианте.
В некоторых сложных случаях, особенно в старых конфигурациях, данные в колонку нельзя подтянуть простым выбором реквизита (например, если артикул хранится в другом справочнике или регистре сведений). Тогда мы используем программный метод. Выясним, как реализовать это через обработчик события.
Для табличного поля в обычных формах существует событие ПриВыводеСтроки. Посмотрим на пример кода:
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// Проверяем, что данные строки доступны
Если ДанныеСтроки <> Неопределено Тогда
// Заполняем текст в колонке "Артикул" данными из объекта
ОформлениеСтроки.Ячейки.Артикул.УстановитьТекст(ДанныеСтроки.Ссылка.Артикул);
КонецЕсли;
КонецПроцедуры
Этот метод гарантирует, что в каждой строке списка будет отображено актуальное значение, даже если динамическое считывание данных через свойства колонки дает сбои.
Поскольку платформа 8.3.11 и выше (как в рассматриваемом случае) поддерживает механизм расширений, крайне рекомендуется вносить изменения именно через них. Это позволит вам сохранить основную конфигурацию на поддержке и избежать сложностей при обновлениях от разработчика «ДАЛИОН».
Проанализируем алгоритм работы с расширением:
Номенклатура и нужную форму списка.При добавлении колонки всегда обращайте внимание на производительность. Вывод большого количества колонок с данными, требующими дополнительных обращений к базе данных (через точку от Ссылка в обычных формах), может замедлить прокрутку списка. Старайтесь использовать прямой выбор данных через реквизиты динамического списка или индексированные поля.
Также стоит проверить системные настройки самой программы «ДАЛИОН». Перейдите в меню «Сервис» — «Параметры учета». Иногда разработчики предусматривают специальную опцию «Выводить артикул в документах и справочниках», активация которой автоматически включает видимость нужных колонок во всей системе без вмешательства в код.