Добрый день

Прошу помочь в решении проблемы. В интернете ответа на свой вопрос не нашел.

Создаю отчет на основании Универсального. Для упрощения вопроса - нужно вывести отчет о продажах Номенклатуры Контрагентам и в качестве дополнительного поля соответствующий Артикул, который берется из регистра сведений АртикулыКонтрагентов.

Запрос построен правильно (в консоли запросов проверено), данные все есть - нужно сделать так, чтоб Артикул выводился рядом с Номенклатурой. Сейчас он в Настройках появляется в Дополнительных полях, но в отчет не выводится

Вот текст процедуры УстановитьНачальныеНастройки:

```1c
    Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт

    // Настройка общих параметров универсального отчета

    // Содержит название отчета, которое будет выводиться в шапке.
    // Тип: Строка.
    // Пример:
    // УниверсальныйОтчет.мНазваниеОтчета = "Название отчета";
    УниверсальныйОтчет.мНазваниеОтчета = СокрЛП(ЭтотОбъект.Метаданные().Синоним);

    // Содержит признак необходимости отображения надписи и поля выбора раздела учета в форме настройки.
    // Тип: Булево.
    // Значение по умолчанию: Истина.
    // Пример:
    // УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;
    УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;

    // Содержит имя регистра, по метаданным которого будет выполняться заполнение настроек отчета.
    // Тип: Строка.
    // Пример:
    // УниверсальныйОтчет.ИмяРегистра = "ТоварыНаСкладах";

    // Содержит признак необходимости вывода отрицательных значений показателей красным цветом.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    УниверсальныйОтчет.ОтрицательноеКрасным = Истина;

    // Содержит признак необходимости вывода в отчет общих итогов.
    // Тип: Булево.
    // Значение по умолчанию: Истина.
    // Пример:
    // УниверсальныйОтчет.ВыводитьОбщиеИтоги = Ложь;

    // Содержит признак необходимости вывода детальных записей в отчет.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    // УниверсальныйОтчет.ВыводитьДетальныеЗаписи = Истина;

    // Содержит признак необходимости отображения флага использования свойств и категорий в форме настройки.
    // Тип: Булево.
    // Значение по умолчанию: Истина.
    // Пример:
    УниверсальныйОтчет.мВыбиратьИспользованиеСвойств = Ложь;

    // Содержит признак использования свойств и категорий при заполнении настроек отчета.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    //УниверсальныйОтчет.ИспользоватьСвойстваИКатегории = Истина;

    // Содержит признак использования простой формы настроек отчета без группировок колонок.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    // УниверсальныйОтчет.мРежимФормыНастройкиБезГруппировокКолонок = Истина;

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

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

    // В универсальном отчете включен флаг использования свойств и категорий.
    Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда

    // Добавление свойств и категорий поля запроса в таблицу полей.
    // Необходимо вызывать для каждого поля запроса, предоставляющего возможность использования свойств и категорий.
    // УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(<ПсевдонимТаблицы>.<Поле> , <ПсевдонимПоля>, <Представление>, <Назначение>);

    // Добавление свойств и категорий в исходный текст запроса.
    УниверсальныйОтчет.ДобавитьВТекстЗапросаСвойстваИКатегории(ТекстЗапроса);

    КонецЕсли;

    // Инициализация текста запроса построителя отчета
    УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;

    // Представления полей отчета.
    // Необходимо вызывать для каждого поля запроса.
    // УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить(<ИмяПоля>, <ПредставлениеПоля>);

    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Контрагент", "Контрагент");
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Номенклатура", "Номенклатура");

    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Количество", "Количество");

    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Артикул", "Артикул");

    // Добавление показателей
    // Необходимо вызывать для каждого добавляемого показателя.
    // УниверсальныйОтчет.ДобавитьПоказатель(<ИмяПоказателя>, <ПредставлениеПоказателя>, <ВключенПоУмолчанию>, <Формат>, <ИмяГруппы>, <ПредставлениеГруппы>);
    УниверсальныйОтчет.ДобавитьПоказатель("Количество", "Количество", Истина);

    // Добавление предопределенных группировок строк отчета.
    // Необходимо вызывать для каждой добавляемой группировки строки.
    // УниверсальныйОтчет.ДобавитьИзмерениеСтроки(<ПутьКДанным>);
    УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Контрагент");
    УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Номенклатура");

    // Добавление предопределенных группировок колонок отчета.
    // Необходимо вызывать для каждой добавляемой группировки колонки.
    // УниверсальныйОтчет.ДобавитьИзмерениеКолонки(<ПутьКДанным>);

    // Добавление предопределенных отборов отчета.
    // Необходимо вызывать для каждого добавляемого отбора.
    // УниверсальныйОтчет.ДобавитьОтбор(<ПутьКДанным>);
    УниверсальныйОтчет.ДобавитьОтбор("Контрагент");
    УниверсальныйОтчет.ДобавитьОтбор("Номенклатура");

    // Добавление предопределенных полей порядка отчета.
    // Необходимо вызывать для каждого добавляемого поля порядка.
    // УниверсальныйОтчет.ДобавитьПорядок(<ПутьКДанным>);

    // Установка связи подчиненных и родительских полей
    // УниверсальныйОтчет.УстановитьСвязьПолей(<ПутьКДанным>, <ПутьКДаннымРодитель>);
    УниверсальныйОтчет.УстановитьСвязьПолей("Артикул", "Номенклатура");

    // Установка связи полей и измерений
    // УниверсальныйОтчет.УстановитьСвязьПоляИИзмерения(<ИмяПоля>, <ИмяИзмерения>);
    УниверсальныйОтчет.УстановитьСвязьПолей("Артикул", "Номенклатура");

    // Установка представлений полей
    УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);

    // Установка типов значений свойств в отборах отчета
    УниверсальныйОтчет.УстановитьТипыЗначенийСвойствДляОтбора();

    // Заполнение начальных настроек универсального отчета
    УниверсальныйОтчет.УстановитьНачальныеНастройки(Ложь);

    // Добавление дополнительных полей
    // Необходимо вызывать для каждого добавляемого дополнительного поля.
    // УниверсальныйОтчет.ДобавитьДополнительноеПоле(<ПутьКДанным>, <Размещение>, <Положение>);
    УниверсальныйОтчет.ДобавитьДополнительноеПоле("Артикул", ТипРазмещенияРеквизитовИзмерений.Отдельно, 3);

    КонецПроцедуры // УстановитьНачальныеНастройки()
```
---
Все, вопрос решен.
Нужно вычислять итог по Артикулу (агрегатная функция Максимум), но не добавлять его в показатели. И в модуле была смысловая ошибка - использовалась процедура УстановитьСвязьПолей вместо УстановитьСвязьПоляИИзмерения.
Результат должен выглядеть так:

```1c
    Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт

    // Настройка общих параметров универсального отчета

    // Содержит название отчета, которое будет выводиться в шапке.
    // Тип: Строка.
    // Пример:
    // УниверсальныйОтчет.мНазваниеОтчета = "Название отчета";
    УниверсальныйОтчет.мНазваниеОтчета = СокрЛП(ЭтотОбъект.Метаданные().Синоним);

    // Содержит признак необходимости отображения надписи и поля выбора раздела учета в форме настройки.
    // Тип: Булево.
    // Значение по умолчанию: Истина.
    // Пример:
    // УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;
    УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;

    // Содержит имя регистра, по метаданным которого будет выполняться заполнение настроек отчета.
    // Тип: Строка.
    // Пример:
    // УниверсальныйОтчет.ИмяРегистра = "ТоварыНаСкладах";

    // Содержит признак необходимости вывода отрицательных значений показателей красным цветом.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    УниверсальныйОтчет.ОтрицательноеКрасным = Истина;

    // Содержит признак необходимости вывода в отчет общих итогов.
    // Тип: Булево.
    // Значение по умолчанию: Истина.
    // Пример:
    // УниверсальныйОтчет.ВыводитьОбщиеИтоги = Ложь;

    // Содержит признак необходимости вывода детальных записей в отчет.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    // УниверсальныйОтчет.ВыводитьДетальныеЗаписи = Истина;

    // Содержит признак необходимости отображения флага использования свойств и категорий в форме настройки.
    // Тип: Булево.
    // Значение по умолчанию: Истина.
    // Пример:
    УниверсальныйОтчет.мВыбиратьИспользованиеСвойств = Ложь;

    // Содержит признак использования свойств и категорий при заполнении настроек отчета.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    //УниверсальныйОтчет.ИспользоватьСвойстваИКатегории = Истина;

    // Содержит признак использования простой формы настроек отчета без группировок колонок.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    // УниверсальныйОтчет.мРежимФормыНастройкиБезГруппировокКолонок = Истина;

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

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

    // В универсальном отчете включен флаг использования свойств и категорий.
    Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда

    // Добавление свойств и категорий поля запроса в таблицу полей.
    // Необходимо вызывать для каждого поля запроса, предоставляющего возможность использования свойств и категорий.
    // УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(<ПсевдонимТаблицы>.<Поле> , <ПсевдонимПоля>, <Представление>, <Назначение>);

    // Добавление свойств и категорий в исходный текст запроса.
    УниверсальныйОтчет.ДобавитьВТекстЗапросаСвойстваИКатегории(ТекстЗапроса);

    КонецЕсли;

    // Инициализация текста запроса построителя отчета
    УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;

    // Представления полей отчета.
    // Необходимо вызывать для каждого поля запроса.
    // УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить(<ИмяПоля>, <ПредставлениеПоля>);

    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Контрагент", "Контрагент");
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Номенклатура", "Номенклатура");

    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Количество", "Количество");

    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Артикул", "Артикул");

    // Добавление показателей
    // Необходимо вызывать для каждого добавляемого показателя.
    // УниверсальныйОтчет.ДобавитьПоказатель(<ИмяПоказателя>, <ПредставлениеПоказателя>, <ВключенПоУмолчанию>, <Формат>, <ИмяГруппы>, <ПредставлениеГруппы>);
    УниверсальныйОтчет.ДобавитьПоказатель("Количество", "Количество", Истина);

    // Добавление предопределенных группировок строк отчета.
    // Необходимо вызывать для каждой добавляемой группировки строки.
    // УниверсальныйОтчет.ДобавитьИзмерениеСтроки(<ПутьКДанным>);
    УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Контрагент");
    УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Номенклатура");

    // Добавление предопределенных группировок колонок отчета.
    // Необходимо вызывать для каждой добавляемой группировки колонки.
    // УниверсальныйОтчет.ДобавитьИзмерениеКолонки(<ПутьКДанным>);

    // Добавление предопределенных отборов отчета.
    // Необходимо вызывать для каждого добавляемого отбора.
    // УниверсальныйОтчет.ДобавитьОтбор(<ПутьКДанным>);
    УниверсальныйОтчет.ДобавитьОтбор("Контрагент");
    УниверсальныйОтчет.ДобавитьОтбор("Номенклатура");

    // Добавление предопределенных полей порядка отчета.
    // Необходимо вызывать для каждого добавляемого поля порядка.
    // УниверсальныйОтчет.ДобавитьПорядок(<ПутьКДанным>);

    // Установка связи подчиненных и родительских полей
    // УниверсальныйОтчет.УстановитьСвязьПолей(<ПутьКДанным>, <ПутьКДаннымРодитель>);

    // Установка связи полей и измерений
    УниверсальныйОтчет.УстановитьСвязьПоляИИзмерения("Артикул", "Номенклатура");

    // Установка представлений полей
    УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);

    // Установка типов значений свойств в отборах отчета
    УниверсальныйОтчет.УстановитьТипыЗначенийСвойствДляОтбора();

    // Заполнение начальных настроек универсального отчета
    УниверсальныйОтчет.УстановитьНачальныеНастройки(Ложь);

    // Добавление дополнительных полей
    // Необходимо вызывать для каждого добавляемого дополнительного поля.
    // УниверсальныйОтчет.ДобавитьДополнительноеПоле(<ПутьКДанным>, <Размещение>, <Положение>);
    УниверсальныйОтчет.ДобавитьДополнительноеПоле("Артикул", ТипРазмещенияРеквизитовИзмерений.Отдельно, 3);

    КонецПроцедуры // УстановитьНачальныеНастройки()
```
---
Добрый день

в конструкторе запросов вкладка построитель затем вкладка поля, там поле артикул есть в правой табличке?
---
Да, конечно есть.
---
отбор сделан по связи артикул и номенклатура?
---
Артикул должен выводиться рядом с Номенклатурой - нужно организовать связку дополнительного поля Артикул с группировкой Номенклатура
---
Самое простое - запихнуть артикул в показатели (итоги по МАКСИМУМ).
Неоднократно встречал такой вопрос и даже в одной теме приводилось решение (на мисте), но к сожалению ссылка затерялась.
---
Спасибо, Иван - это действительно могло бы быть решением.
Но в моем случае отчет будет развит в более сложный, и будут группировки еще и по колонкам (периоды). Если Артикул запихнуть в показатели, то он будет выводиться отдельной колонкой в каждом периоде.
Артикул должен стать именно дополнительным полем.
---
В конце процедуры закомментируйте строку

```1c
    УниверсальныйОтчет.УстановитьНачальныеНастройки(Ложь);
```
---
Закоментировал - в результате выводится два наименования Номенклатуры в колонке Номенклатура.
---
Все, вопрос решен.
Нужно вычислять итог по Артикулу (агрегатная функция Максимум), но не добавлять его в показатели. И в модуле была смысловая ошибка - использовалась процедура УстановитьСвязьПолей вместо УстановитьСвязьПоляИИзмерения.
Результат должен выглядеть так:

```1c
    Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт

    // Настройка общих параметров универсального отчета

    // Содержит название отчета, которое будет выводиться в шапке.
    // Тип: Строка.
    // Пример:
    // УниверсальныйОтчет.мНазваниеОтчета = "Название отчета";
    УниверсальныйОтчет.мНазваниеОтчета = СокрЛП(ЭтотОбъект.Метаданные().Синоним);

    // Содержит признак необходимости отображения надписи и поля выбора раздела учета в форме настройки.
    // Тип: Булево.
    // Значение по умолчанию: Истина.
    // Пример:
    // УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;
    УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;

    // Содержит имя регистра, по метаданным которого будет выполняться заполнение настроек отчета.
    // Тип: Строка.
    // Пример:
    // УниверсальныйОтчет.ИмяРегистра = "ТоварыНаСкладах";

    // Содержит признак необходимости вывода отрицательных значений показателей красным цветом.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    УниверсальныйОтчет.ОтрицательноеКрасным = Истина;

    // Содержит признак необходимости вывода в отчет общих итогов.
    // Тип: Булево.
    // Значение по умолчанию: Истина.
    // Пример:
    // УниверсальныйОтчет.ВыводитьОбщиеИтоги = Ложь;

    // Содержит признак необходимости вывода детальных записей в отчет.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    // УниверсальныйОтчет.ВыводитьДетальныеЗаписи = Истина;

    // Содержит признак необходимости отображения флага использования свойств и категорий в форме настройки.
    // Тип: Булево.
    // Значение по умолчанию: Истина.
    // Пример:
    УниверсальныйОтчет.мВыбиратьИспользованиеСвойств = Ложь;

    // Содержит признак использования свойств и категорий при заполнении настроек отчета.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    //УниверсальныйОтчет.ИспользоватьСвойстваИКатегории = Истина;

    // Содержит признак использования простой формы настроек отчета без группировок колонок.
    // Тип: Булево.
    // Значение по умолчанию: Ложь.
    // Пример:
    // УниверсальныйОтчет.мРежимФормыНастройкиБезГруппировокКолонок = Истина;

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

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

    // В универсальном отчете включен флаг использования свойств и категорий.
    Если УниверсальныйОтчет.ИспользоватьСвойстваИКатегории Тогда

    // Добавление свойств и категорий поля запроса в таблицу полей.
    // Необходимо вызывать для каждого поля запроса, предоставляющего возможность использования свойств и категорий.
    // УниверсальныйОтчет.ДобавитьСвойстваИКатегорииДляПоля(<ПсевдонимТаблицы>.<Поле> , <ПсевдонимПоля>, <Представление>, <Назначение>);

    // Добавление свойств и категорий в исходный текст запроса.
    УниверсальныйОтчет.ДобавитьВТекстЗапросаСвойстваИКатегории(ТекстЗапроса);

    КонецЕсли;

    // Инициализация текста запроса построителя отчета
    УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;

    // Представления полей отчета.
    // Необходимо вызывать для каждого поля запроса.
    // УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить(<ИмяПоля>, <ПредставлениеПоля>);

    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Контрагент", "Контрагент");
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Номенклатура", "Номенклатура");

    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Количество", "Количество");

    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Артикул", "Артикул");

    // Добавление показателей
    // Необходимо вызывать для каждого добавляемого показателя.
    // УниверсальныйОтчет.ДобавитьПоказатель(<ИмяПоказателя>, <ПредставлениеПоказателя>, <ВключенПоУмолчанию>, <Формат>, <ИмяГруппы>, <ПредставлениеГруппы>);
    УниверсальныйОтчет.ДобавитьПоказатель("Количество", "Количество", Истина);

    // Добавление предопределенных группировок строк отчета.
    // Необходимо вызывать для каждой добавляемой группировки строки.
    // УниверсальныйОтчет.ДобавитьИзмерениеСтроки(<ПутьКДанным>);
    УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Контрагент");
    УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Номенклатура");

    // Добавление предопределенных группировок колонок отчета.
    // Необходимо вызывать для каждой добавляемой группировки колонки.
    // УниверсальныйОтчет.ДобавитьИзмерениеКолонки(<ПутьКДанным>);

    // Добавление предопределенных отборов отчета.
    // Необходимо вызывать для каждого добавляемого отбора.
    // УниверсальныйОтчет.ДобавитьОтбор(<ПутьКДанным>);
    УниверсальныйОтчет.ДобавитьОтбор("Контрагент");
    УниверсальныйОтчет.ДобавитьОтбор("Номенклатура");

    // Добавление предопределенных полей порядка отчета.
    // Необходимо вызывать для каждого добавляемого поля порядка.
    // УниверсальныйОтчет.ДобавитьПорядок(<ПутьКДанным>);

    // Установка связи подчиненных и родительских полей
    // УниверсальныйОтчет.УстановитьСвязьПолей(<ПутьКДанным>, <ПутьКДаннымРодитель>);

    // Установка связи полей и измерений
    УниверсальныйОтчет.УстановитьСвязьПоляИИзмерения("Артикул", "Номенклатура");

    // Установка представлений полей
    УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);

    // Установка типов значений свойств в отборах отчета
    УниверсальныйОтчет.УстановитьТипыЗначенийСвойствДляОтбора();

    // Заполнение начальных настроек универсального отчета
    УниверсальныйОтчет.УстановитьНачальныеНастройки(Ложь);

    // Добавление дополнительных полей
    // Необходимо вызывать для каждого добавляемого дополнительного поля.
    // УниверсальныйОтчет.ДобавитьДополнительноеПоле(<ПутьКДанным>, <Размещение>, <Положение>);
    УниверсальныйОтчет.ДобавитьДополнительноеПоле("Артикул", ТипРазмещенияРеквизитовИзмерений.Отдельно, 3);

    КонецПроцедуры // УстановитьНачальныеНастройки()
```
---
УниверсальныйОтчет.УстановитьСвязьПоляИИзмерения("Артикул", "Номенклатура");
Спасибо большое!
Так я вывела должность сотрудника.
---
Вот спасибо! Очень помогло.
---
Вставлю от себя. Еще чтобы не было итогов по артикулу по группировкам отчета можно сделать пост-обработку таблицы в функции СформироватьОтчет.

```1c
    Процедура СформироватьОтчет(ТабличныйДокумент) Экспорт

    // Перед формирование отчета можно установить необходимые параметры универсального отчета.
    УниверсальныйОтчет.СформироватьОтчет(ТабличныйДокумент);

    НомерКолонки = 0;
    Для а = 1 по ТабличныйДокумент.ВысотаТаблицы Цикл
    Для б = 1 по ТабличныйДокумент.ШиринаТаблицы Цикл
    текстЯчейка = ТабличныйДокумент.Область("R"+а+"C"+б).Текст;
    Если текстЯчейка = "Артикул" Тогда
    НомерКолонки = б;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    Если НомерКолонки > 0 Тогда
    Прервать;
    КонецЕсли;
    КонецЦикла;

    Если НомерКолонки > 0 Тогда
    Для а = 8 по ТабличныйДокумент.ВысотаТаблицы Цикл
    Если Строка(ТабличныйДокумент.Область("R"+СтрЗаменить(а, Символы.НПП, ")+"C" + НомерКолонки).ЦветФона)="стиль: Фон кнопки" И
    ТабличныйДокумент.Область("R"+СтрЗаменить(а, Символы.НПП, ")+"C" + НомерКолонки).Текст <> "Артикул" Тогда
    ТабличныйДокумент.Область("R"+СтрЗаменить(а, Символы.НПП, ")+"C" + НомерКолонки).Текст=";
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    //нс

    КонецПроцедуры // СформироватьОтчет()
```
---
Алгоритм поиска нужной ячейки - это понятно. Но откуда взять сам Артикул? Ведь в печатной форме ссылки на Номенклатуру нет, как узнать по какой Номенклатуре в этой строке нужно выводить артикул?
---
Универсальный отчет при использовании функции МАКСИМУМ() выводит в отчете итоги по группировкам, если эти группировки есть. А итоги по артикулу по группировкам тут не нужны и выглядят странно. Например в отчете с группировками Контрагент и Номенклатура по каждому контрагенту будет максимум по артикулу. Мой кусок алгоритма просто затирает итоги по артикулу по группировкам.
---
А, теперь понятно - да, затирать лишние итоги логично
---
Кстати может есть более простой и правильный способ не выводить итоги по таким полям? )
---
Насколько я понимаю, для того чтобы не делать пост-обработку, нужно поступить так, как делает тот же универсальный отчет со свойствами и категориями. Т.е. в приведенном решении вместо:

УниверсальныйОтчет.УстановитьСвязьПоляИИзмерения("Артикул", "Номенклатура");

написать:

УниверсальныйОтчет.мСоответствиеСвойствКатегорийИИзмерений.Вставить("Артикул", "Номенклатура"); УниверсальныйОтчет.УстановитьСвязьПолей("Артикул", "Номенклатура");

Тема хоть и старая, но для истории оставлю))) Вдруг кому поможет.
---
У меня вместо Артикула суммы. Как можно отформатировать эти поля, чтобы выводилось 555,00 или 8566,90? Сейчас выводится 555 и 8566,9
---
Здравствуйте. Делаю как в (10), условный артикул выводится, но также он выводится и в группах номенклатуры (ставит наибольший из полученных внутри группы), хотя в регистре сведений нет записей с привязкой к группе номенклатуры. Не понимаю, как это убрать.
---
- не помогает
---
спасибо (10) и (12)
мне потребовалось в АнализДоступностиТоваровНаСкладах к номенклатуре выводить дополнительное значение ШК EAN13
в целом предложенный способ - работает
в конструкторе запроса добавил таблицу Штрихкоды (регистр сведений) и связь с ВложенныйЗапрос по Номенклатура-Владелец
и в "ВЫБРАТЬ РАЗРЕШЕННЫЕ добавил:
 | ВЫБОР
 | КОГДА Штрихкоды.ТипШтрихкода.Наименование = ""EAN13"" ТОГДА Штрихкоды.Штрихкод
 | ИНАЧЕ """"
 | КОНЕЦ КАК Штрихкод
(чтобы шк других типов не цеплялись)