Добрый день. Не могу разобраться как в документ "Заказ на производство" в табличную часть добавить поле штрихкод. Необходимо проверять есть ли у номенклатуры штрихкод перед тем как отдать заказ в производство.
1С:Предприятие 8.3 (8.3.11.3034)
1С:ERP Управление предприятием 2 (2.2.4.81)
---
Примерно так, только в запросе нужно добавить группировку

```1c
    &НаСервере
    Функция ШтрихКодЭлемента(Номенклатура)

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

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

    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Номенклатура", Выборка.Номенклатура);
    НайденныеСтроки = Объект.Товары.НайтиСтроки(ПараметрыОтбора);

    Если НайденныеСтроки.Количество()>0 Тогда
    НайденныеСтроки[0].Штрихкод=Выборка.Штрихкод;
    КонецЕсли;

    КонецЦикла;

    КонецФункции
```
---
ШтрихКод номенклатуры хранится в регистре сведений и их там может быть несколько.

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

В общем без изменения конфигурации никак.
---
Посмотрел как это делается в "Рознице и намудрил вот такой запрос"

```1c
    &НаСервере
    Функция ШтрихКодЭлемента(Номенклатура)

    Штрихкод = ";
    Запрос = Новый Запрос;

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

    Возврат Штрихкод;
    КонецФункции
```

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

```1c
    &НаСервере
    Функция ШтрихКодЭлемента(Номенклатура)

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

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

    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Номенклатура", Выборка.Номенклатура);
    НайденныеСтроки = Объект.Товары.НайтиСтроки(ПараметрыОтбора);

    Если НайденныеСтроки.Количество()>0 Тогда
    НайденныеСтроки[0].Штрихкод=Выборка.Штрихкод;
    КонецЕсли;

    КонецЦикла;

    КонецФункции
```
---
Не очень оптимально. Если при открытии формы надо будет указать штрихкод, то запрос будет вызван в цикле много раз.

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

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

    Запрос.Текст = "ВЫБРАТЬ
    | ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура,
    | ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
    |ИЗ
    | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
    |ГДЕ
    | ШтрихкодыНоменклатуры.Номенклатура В(&МассивНом)";

    МассивТМЗ = Новый Массив;

    Для Каждого Стр Из Объект.Товары Цикл //Заполнить Массив для запроса
    МассивТМЗ.Добавить(Стр.Номенклатура);
    КонецЦикла;

    Запрос.УстановитьПараметр("МассивНом", МассивТМЗ);
    Выборка = Запрос.Выполнить().Выгрузить();

    СоответствиеШК = Новый Соответствие;

    Для Каждого Выб Из Выборка Цикл //заполнить соответствие Номенклатура и Штрихкод из Результата запроса
    СоответствиеШК.Вставить(Выб.Номенклатура, Выб.Штрихкод);
    КонецЦикла;

    Для Каждого Стр Из Объект.Товары Цикл // заполить штрихкода в табл части согласно соответствию
    Стр.Штрихкод = СоответствиеШК.Получить(Стр.Номенклатура);
    КонецЦикла;
```

Можете сказать можно ли здесь оптимизировать код?
Заранее благодарю.
---
Для отчёта сойдёт

```1c
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура,
    | ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
    |ИЗ
    | РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
    |ГДЕ
    | ШтрихкодыНоменклатуры.Номенклатура В(&МассивНом)";

    Запрос.УстановитьПараметр("МассивНом", Объект.Товары.ВыгрузитьКолонку("Номенклатура"));
    Выборка = Запрос.Выполнить().Выбрать();
    СтруктураПоиска = Новый Структура("Номенклатура");

    Пока Выборка.Следующий() Цикл
    СтруктураПоиска.Номенклатура = Выборка.Номенклатура;
    массивСтрокТЧ = Объект.Товары.НайтиСтроки(СтруктураПоиска);
    Для Каждого СтрокаТЧ Из массивСтрокТЧ Цикл
    СтрокаТЧ.Штрихкод = Выборка.Штрихкод;
    КонецЦикла;
    КонецЦикла;
```
---
Благодарю вас
---
Запрос.УстановитьПараметр("МассивНом", Объект.Товары.Выгрузить(, "Номенклатура"));

Вот так работает у меня
---
Ну, по идее не должно. В запрос должен попасть список или массив, а не таблица значений.
---
```1c
    Объект.Товары.ВыгрузитьКолонку("Номенклатура"));
```

так не работает