В системе 1С:Предприятие номенклатура — это не просто список товаров или услуг, а основа учета, которая связывает между собой складские операции, бухгалтерские проводки и аналитику. Проблема в том, что многие пользователи сталкиваются с трудностями при попытке выразить номенклатуру в отчетах, запросах или документах. Часто это приводит к ошибкам в учете, некорректным остаткам или проблемам с интеграцией данных.

В этой статье мы разберем, что значит «выразить номенклатуру» в контексте , какие инструменты для этого предусмотрены в платформе, и как избежать типичных ошибок. Материал будет полезен как бухгалтерам, которые хотят лучше понимать механизмы работы с номенклатурой, так и программистам , которые пишут запросы или настраивают отчеты. Особое внимание уделим практическим примерам — от простых выборок до сложных механизмов с использованием Выразить() и Представление().

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

Что значит «выразить номенклатуру» в 1С?

В 1С:Предприятие термин «выразить» часто используется в контексте преобразования данных из одного формата в другой. Когда речь идет о номенклатуре, это может означать:

  • 📌 Преобразование ссылки на номенклатуру в ее текстовое представление (название, артикул, полное имя).
  • 📌 Получение дополнительных реквизитов (например, единица измерения, группа номенклатуры, характеристики).
  • 📌 Форматирование вывода в отчетах или печатных формах (например, с учетом иерархии или дополнительных свойств).
  • 📌 Использование в запросах для корректной выборки данных по номенклатуре.

Самый распространенный случай — когда в отчете или документе вместо понятного названия товара (например, «Стул офисный») отображается технический идентификатор вроде Номенклатура.Ссылка12345. Это происходит потому, что система по умолчанию работает со ссылками на объекты, а не с их текстовыми представлениями. Чтобы получить читаемый вид, нужно явным образом указать, как именно выразить номенклатуру.

В платформе для этого предусмотрены специальные методы:

  • 🔹 Представление() — возвращает строковое представление объекта (аналог функции Строка(), но с учетом настроек системы).
  • 🔹 Выразить() — более гибкий метод, позволяющий преобразовать данные в нужный формат (например, в Строка, Число или другой тип).
  • 🔹 ПолноеИмя() — возвращает полное имя объекта с учетом иерархии (например, «Мебель → Стулья → Стул офисный»).
📊 Какой метод вы чаще используете для работы с номенклатурой?
Представление()
Выразить()
ПолноеИмя()
Другие способы

Базовые способы выражения номенклатуры

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

1. Метод Представление()

Это самый универсальный способ получить текстовое представление номенклатуры. Он автоматически учитывает настройки системы и возвращает название объекта в том виде, в котором оно отображается в интерфейсе.

Пример использования в коде:

НазваниеТовара = Номенклатура.Представление();

Если номенклатура имеет иерархическую структуру (например, разделена на группы), можно получить полное имя с учетом пути:

ПолноеНазвание = Номенклатура.ПолноеИмя();

Если в справочнике «Номенклатура» изменено стандартное представление (например, добавлен артикул), то и метод вернет обновленный формат.

💡

Если в отчете номенклатура отображается как "Объект не найден", проверьте, не удален ли элемент справочника. Используйте обработку для поиска "битых" ссылок.

2. Функция Строка()

Иногда вместо Представление() используют функцию Строка(). Она также преобразует ссылку на номенклатуру в текст, но делает это без учета пользовательских настроек представления.

Пример:

НазваниеТовара = Строка(Номенклатура);

Разница между Строка() и Представление() может быть критичной, если в справочнике настроено нестандартное отображение. Например, если в представлении номенклатуры добавлен артикул, то:

  • 🔸 Представление() вернет: «Стул офисный (ART-001)».
  • 🔸 Строка() вернет: «Стул офисный» (без артикула).

3. Использование реквизитов напрямую

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

Артикул = Номенклатура.Артикул;

ЕдиницаИзмерения = Номенклатура.ЕдиницаИзмерения.Представление();

Группа = Номенклатура.Родитель.Представление();

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

💡

Для корректного отображения номенклатуры в отчетах всегда используйте Представление() или явное обращение к реквизитам. Функция Строка() может давать неполные данные.

Выражение номенклатуры в запросах 1С

При работе с запросами выражение номенклатуры требует особого внимания. Если в выборке не указать, как именно нужно представить номенклатуру, система вернет ссылку на объект, что сделает отчет нечитаемым.

Рассмотрим основные способы выражения номенклатуры в запросах.

1. Использование ВЫРАЗИТЬ в языке запросов

В запросах для преобразования ссылок в строки используется оператор ВЫРАЗИТЬ. Он позволяет явно указать тип данных, в который нужно преобразовать поле.

Пример запроса, который выбирает номенклатуру и ее название:

ВЫБРАТЬ

Номенклатура КАК Ссылка,

ВЫРАЗИТЬ(Номенклатура КАК СТРОКА) КАК Название

ИЗ

Документ.ПоступлениеТоваровУслуг.Товары

Если нужно получить полное имя номенклатуры (с учетом группы), используйте функцию ПОЛНОЕИМЯ:

ВЫБРАТЬ

ПОЛНОЕИМЯ(Номенклатура) КАК ПолноеНазвание

ИЗ

Документ.РеализацияТоваровУслуг.Товары

2. Использование виртуальных таблиц

Если требуется получить не только название, но и дополнительные реквизиты номенклатуры (например, артикул или группу), удобно использовать виртуальные таблицы справочников.

Пример запроса с присоединением виртуальной таблицы:

ВЫБРАТЬ

Товары.Номенклатура КАК Ссылка,

Товары.Номенклатура.Представление КАК Название,

НоменклатураСрезПоследних.Артикул КАК Артикул,

НоменклатураСрезПоследних.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения

ИЗ

Документ.ПоступлениеТоваровУслуг.Товары КАК Товары

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.СрезПоследних КАК НоменклатураСрезПоследних

ПО Товары.Номенклатура = НоменклатураСрезПоследних.Ссылка

Что делать, если запрос возвращает пустые значения для номенклатуры?

Если в результате запроса поле с номенклатурой пустое, проверьте:

1. Не удален ли элемент справочника (ссылка стала "битой").

2. Правильно ли указано присоединение таблиц (особенно если используете СрезПоследних).

3. Есть ли права у пользователя на чтение справочника "Номенклатура".

3. Выражение номенклатуры с характеристиками

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

ВЫБРАТЬ

ВЫРАЗИТЬ(Номенклатура КАК СТРОКА) КАК Номенклатура,

ВЫРАЗИТЬ(Характеристика КАК СТРОКА) КАК Характеристика,

Номенклатура.Представление + " (" + Характеристика.Представление + ")" КАК ПолноеНазвание

ИЗ

Документ.РеализацияТоваровУслуг.Товары

В этом примере мы объединяем представление номенклатуры и характеристики в одну строку для удобства чтения.

Метод Пример кода Результат Когда использовать
Представление() Номенклатура.Представление() «Стул офисный (ART-001)» Для отображения в интерфейсе или печатных формах
ВЫРАЗИТЬ(КАК СТРОКА) ВЫРАЗИТЬ(Номенклатура КАК СТРОКА) «Стул офисный» В запросах для преобразования ссылок в строки
ПолноеИмя() Номенклатура.ПолноеИмя() «Мебель → Стулья → Стул офисный» Для отображения иерархии в отчетах
Реквизиты напрямую Номенклатура.Артикул «ART-001» Когда нужны конкретные данные (артикул, единица измерения)

1. Указан ли оператор ВЫРАЗИТЬ для преобразования ссылок?

2. Используется ли ПОЛНОЕИМЯ() или Представление() для читаемого вывода?

3. Присоединены ли виртуальные таблицы, если нужны дополнительные реквизиты?

4. Учтена ли номенклатура с характеристиками (если используется)?

-->

Типичные ошибки при выражении номенклатуры и как их избежать

Даже опытные пользователи иногда сталкиваются с проблемами при работе с номенклатурой. Рассмотрим наиболее распространенные ошибки и способы их решения.

1. Отображение идентификаторов вместо названий

Если в отчете или документе вместо названия товара вы видите что-то вроде Номенклатура.Ссылка12345, это значит, что система не смогла преобразовать ссылку в строку. Причины могут быть разные:

  • 🚨 В запросе не использован оператор ВЫРАЗИТЬ или функция Представление().
  • 🚨 Поле номенклатуры в отчете имеет тип «Ссылка», а не «Строка».
  • 🚨 Элемент справочника удален, и ссылка стала недействительной.

Решение:

  • 🔧 В запросе явно укажите преобразование: ВЫРАЗИТЬ(Номенклатура КАК СТРОКА).
  • 🔧 В настройках отчета измените тип поля на «Строка».
  • 🔧 Проверьте справочник на наличие удаленных элементов с помощью обработки «Поиск и замена ссылок».

2. Некорректное отображение иерархии

Если номенклатура организована в группы (например, «Мебель → Стулья → Стул офисный»), но в отчете отображается только последний уровень без пути, значит, не используется ПолноеИмя().

Пример ошибки:

  • 🔴 Ожидается: «Мебель → Стулья → Стул офисный».
  • 🔴 Получается: «Стул офисный».

Решение: замените в запросе или коде Представление() на ПолноеИмя().

3. Проблемы с номенклатурой и характеристиками

Если в базе используется номенклатура с характеристиками (например, «Стул офисный» + «Цвет: Черный»), но в отчете характеристики не отображаются, проверьте:

  • 🔹 Присоединена ли таблица характеристик в запросе.
  • 🔹 Используется ли конкатенация строк для объединения номенклатуры и характеристики.
  • 🔹 Не сброшены ли настройки отображения характеристик в справочнике.

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

ВЫБРАТЬ

Номенклатура.Представление + " (" + Характеристика.Представление + ")" КАК ПолноеНазвание

ИЗ

Документ.РеализацияТоваровУслуг.Товары КАК Товары

💡

Если в отчете не отображаются характеристики, проверьте настройки справочника "Характеристики номенклатуры". Возможно, отключено отображение в интерфейсе.

4. Ошибки при работе с удаленными элементами

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

Решение:

  • 🔧 Используйте обработку «Поиск и замена ссылок» для восстановления или замены удаленных элементов.
  • 🔧 В запросах добавьте проверку на существование ссылки:
ВЫБРАТЬ

ЕСТЬNULL(ВЫРАЗИТЬ(Номенклатура КАК СТРОКА), "Удалено") КАК Название

ИЗ

Документ.ПоступлениеТоваровУслуг.Товары

Как найти все документы с удаленной номенклатурой?

Используйте следующий запрос для поиска "битых" ссылок:

ВЫБРАТЬ

Документ.Ссылка КАК Документ,

Документ.Дата,

Товары.Номенклатура КАК Номенклатура

ИЗ

Документ.ПоступлениеТоваровУслуг КАК Документ

ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК Товары

ПО Документ.Ссылка = Товары.Ссылка

ГДЕ

НЕ Товары.Номенклатура.ЭтотОбъект.Существует()

Продвинутые техники выражения номенклатуры

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

1. Использование функции СтрокаСокрЛП() для форматирования

Если нужно вывести номенклатуру в компактном виде (например, для печатных форм с ограниченным местом), можно использовать функцию СтрокаСокрЛП(), которая обрезает пробелы и переносы строк:

КомпактноеНазвание = СтрокаСокрЛП(Номенклатура.ПолноеИмя());

2. Выражение номенклатуры с дополнительными реквизитами

Иногда требуется вывести номенклатуру вместе с дополнительными реквизитами (например, вес, объем, производитель). Для этого можно использовать конструкцию вида:

ПолнаяИнформация = Номенклатура.Представление() + " | " +

"Артикул: " + Номенклатура.Артикул + " | " +

"Производитель: " + Номенклатура.Производитель.Представление();

В запросах это будет выглядеть так:

ВЫБРАТЬ

Номенклатура.Представление +

" | Артикул: " + Номенклатура.Артикул +

" | Производитель: " + ВЫРАЗИТЬ(Номенклатура.Производитель КАК СТРОКА) КАК ПолнаяИнформация

ИЗ

Документ.ПоступлениеТоваровУслуг.Товары

3. Работа с номенклатурой в динамических списках

Если вы настраиваете динамический список (например, в управляемой форме), чтобы номенклатура отображалась корректно, нужно:

  1. 📌 В настройках колонки указать тип «Строка».
  2. 📌 В выражении для колонки использовать Представление() или ПолноеИмя().
  3. 📌 Если нужны дополнительные реквизиты, присоединить их через точку.

Пример настройки колонки:

ПолеВыбора.Выражение = "Представление(Номенклатура) + "" ("" + Номенклатура.Артикул + "")"";

4. Использование временных таблиц для сложных преобразований

Если требуется выполнить сложное преобразование номенклатуры (например, агрегировать данные по группам или заменить названия по определенным правилам), удобно использовать временные таблицы.

Пример запроса с временной таблицей:

ВЫБРАТЬ

Номенклатура.Родитель КАК Группа,

СУММА(Количество) КАК ОбщееКоличество

ИЗ

Документ.РеализацияТоваровУслуг.Товары КАК Товары

ГРУППИРОВАТЬ ПО

Номенклатура.Родитель

УПОРЯДОЧИТЬ ПО

ОбщееКоличество УБЫВ

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

ВЫБРАТЬ

ГруппыНоменклатуры.Представление КАК Группа,

ВременнаяТаблица.ОбщееКоличество

ИЗ

ВТ_Результаты КАК ВременнаяТаблица

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК ГруппыНоменклатуры

ПО ВременнаяТаблица.Группа = ГруппыНоменклатуры.Ссылка

💡

Для сложных отчетов по номенклатуре используйте временные таблицы и многоступенчатые запросы. Это позволит избежать ошибок и ускорить выполнение.

Оптимизация работы с номенклатурой в больших базах

В крупных базах данных (с десятками тысяч позиций номенклатуры) неоптимизированные запросы могут работать медленно. Рассмотрим способы ускорения.

1. Использование индексов

Если запросы по номенклатуре выполняются долго, проверьте, созданы ли индексы на часто используемых полях (например, Артикул, Родитель). В конфигураторе можно добавить индексы для ускорения выборки.

2. Ограничение выборки

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

ВЫБРАТЬ

Номенклатура.Ссылка,

Номенклатура.Представление КАК Название,

Номенклатура.Артикул

ИЗ

Справочник.Номенклатура КАК Номенклатура

ГДЕ

Номенклатура.ЭтоГруппа = ЛОЖЬ

3. Кэширование данных

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

Пример кэширования на клиенте:

НоменклатураКэш = Новый Соответствие();

Для Каждого Товар Из Товары Цикл

Если НЕ НоменклатураКэш.Содержит(Товар.Номенклатура) Тогда

НоменклатураКэш.Вставить(Товар.Номенклатура, Товар.Номенклатура.Представление());

КонецЕсли;

КонецЦикла;

4. Использование представлений базы данных

Для часто используемых отчетов можно создать представление базы данных (VIEW), которое будет содержать предварительно агрегированные данные по номенклатуре. Это снизит нагрузку на сервер.

Пример создания представления (в это делается через внешние обработки или прямые SQL-запросы):

СОЗДАТЬ ПРЕДСТАВЛЕНИЕ ОстаткиНоменклатуры КАК

ВЫБРАТЬ

Номенклатура.Ссылка,

Номенклатура.Представление КАК Название,

СУММА(Остатки.Количество) КАК Остаток

ИЗ

Справочник.Номенклатура КАК Номенклатура

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК Остатки

ПО Номенклатура.Ссылка = Остатки.Номенклатура

ГРУППИРОВАТЬ ПО

Номенклатура.Ссылка, Номенклатура.Представление;

💡

Для ускорения работы с номенклатурой в больших базах используйте механизм Планы обмена для распределенной обработки данных.

Примеры практического применения

Рассмотрим несколько реальных сценариев, в которых требуется корректно выразить номенклатуру.

1. Печатная форма счета с номенклатурой

В печатной форме счета нужно вывести таблицу с товарами, где каждая строка содержит:

  • 📄 Название номенклатуры.
  • 📄 Артикул.
  • 📄 Единица измерения.
  • 📄 Количество и цена.

Пример кода для формирования строки:

ТекстСтроки = Номенклатура.Представление() + " (" + Номенклатура.Артикул + ") " +

Номенклатура.ЕдиницаИзмерения.Представление() + ", " +

Формат(Количество, "ЧЦ=10; ЧРД=' '; ЧГ=0") + " x " +

Формат(Цена, "ЧДЦ=2; ЧРД=' '");

2. Отчет по остаткам с группировкой по группам номенклатуры

Требуется создать отчет, который показывает остатки товаров с группировкой по группам номенклатуры. Для этого нужно:

  1. 📊 Получить остатки по номенклатуре.
  2. 📊 Присоединить справочник номенклатуры для получения групп.
  3. 📊 Сгруппировать данные по группам.

Пример запроса:

ВЫБРАТЬ

Номенклатура.Родитель КАК Группа,

Номенклатура.Родитель.Представление КАК НазваниеГруппы,

СУММА(ОстаткиТоваровОстатки.КоличествоОстаток) КАК Остаток

ИЗ

РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаОстатков,) КАК ОстаткиТоваровОстатки

ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура

ПО ОстаткиТоваровОстатки.Номенклатура = Номенклатура.Ссылка

ГДЕ

НЕ Номенклатура.ЭтотОбъект.ЭтоГруппа()

ГРУППИРОВАТЬ ПО

Номенклатура.Родитель,

Номенклатура.Родитель.Представление

УПОРЯДОЧИТЬ ПО

НазваниеГруппы

3. Интеграция с внешней системой (выгрузка номенклатуры в Excel)

При выгрузке номенклатуры во внешнюю систему (например, в Excel или JSON) важно правильно сформировать структуру данных. Пример кода для выгрузки в Excel:

ТаблицаДанных = Новый ТаблицаЗначений;

ТаблицаДанных.Колонки.Добавить("Название");

ТаблицаДанных.Колонки.Добавить("Артикул");

ТаблицаДанных.Колонки.Добавить("Группа");

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

Номенклатура.Представление КАК Название,

Номенклатура.Артикул,

Номенклатура.Родитель.Представление КАК Группа

ИЗ

Справочник.Номенклатура КАК Номенклатура

ГДЕ

НЕ Номенклатура.ЭтотОбъект.ЭтоГруппа()";

Результат = Запрос.Выполнить();

Выборка = Результат