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

```1c
    Функция ТекстНоменклатура(Номенклатура)

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

    ТабЗнач.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));

    ТекстНоменклатура = ";
    Для Каждого Колонка из ТабЗнач.Колонки Цикл
    ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = ", ТекстНоменклатура , ", "+ТекстНоменклатура );
    КонецЦикла;

    КонецФункции
```
---
Ты все никак не победишь? В том месте где отладку в первый раз запускал вставь это код и посмотри что будет в переменной ТекстНоменклатура

```1c
    ТЗНоменклатура = Номенклатура.Выгрузить();
    ТекстНоменклатура = ";
    Для Каждого Стр Из ТЗНоменклатура Цикл
    ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = ", Стр.Номенклатура.Наименование, ", "+Стр.Номенклатура.Наименование);
    КонецЦикла;
```
---
Функция ничего не возвращает
Таблица значений всегда пустая
Перебираете колонки, а не значения
Параметр не используется
Переменная ТекстНоменклатура всегда равна ""

Естественно не работает
---
А что вообще должна делать функция то? в функцию что передается? Номенклатура - это ссылка, это табличная часть или что? Зачем вообще она в функцию передается, если там нигде не используется? Функция что должна возвращать? У вас она ничего не возвращает.

Создалась таблица. В ней добавили колонку. Затем начинаете перебирать колонки циклом. Зачем - у вас ведь всего одна колонка, чего их перебирать то?. Может надо не колонки перебирать, а строки? Но строк у вас нет. Вы же создали пустую таблицу без строк.
---
У меня есть таблица значений номенклатуры, там выходит 3 значения, как тогда мне их динамически достать, потому что в зависимости от документа, номенклатура изменяется.
---
перебираете ТЗ по строкам (для каждого СтрокаТЗ из ТЗ цикл) и просто НоменклатураНаПечать = Строка(СтрокаТЗ.Номенклатура). Но если уж совсем по фен-шую делать, то в запрос передаете ссылку на документ. из этого документа получаете табличную часть с номенклатурой, и из каждой номенклатуры берете либо наименование, либо представление.
---
ля каждого СтрокаТЗ

Посмотрите пожалуйста я вообще правильно делаю или шляпу какую-то?

Сначала пишу в модуле формы:

```1c
    &НаСервере
    Процедура ТекстНоменклатура(Номенклатура)

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

    ТабЗнач.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));

    ТабЗнач.Колонки.Добавить (");

    ТекстНоменклатура = ";
    Для Каждого Колонка из ТабЗнач.Колонки Цикл
    ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = ", ТекстНоменклатура , ", "+ТекстНоменклатура );
    КонецЦикла;

    КонецПроцедуры

    &НаКлиенте
    Функция ТекстНоменклатураНаСервере(Номенклатура)

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

    КонецФункции

    Потом в модуле менеджера:

    Функция ТекстНоменклатураНаСервере(Номенклатура)

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

    КонецФункции
```

и заполняю поле:

ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатураНаСервере(ВыборкаТС.Номенклатура);
---
По-моему шляпа какая-то, первый раз просто с этим сталкиваюсь нет понимания как это делается
---
надо с самого начала разбираться, т.к. ощущение, что ошибки изначально возникают
---
Проблем не было, заполнял большую печатную форму, столкнулся с этими ТЗ, почитал про них, понимание теперь есть как создать ТЗ и оттуда достать значения, а как уже из существующей ТЗ достать значения не понимаю
---
Ты все никак не победишь? В том месте где отладку в первый раз запускал вставь это код и посмотри что будет в переменной ТекстНоменклатура

```1c
    ТЗНоменклатура = Номенклатура.Выгрузить();
    ТекстНоменклатура = ";
    Для Каждого Стр Из ТЗНоменклатура Цикл
    ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = ", Стр.Номенклатура.Наименование, ", "+Стр.Номенклатура.Наименование);
    КонецЦикла;
```
---
ТЗНоменклатура - Номенклатура.Выгрузить();
ТекстНоменклатура = "";
Для Каждого Стр Из ТЗНоменклатура Цикл
    ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = "", Стр .Номенклатура.Наименование, ", "+Стр .Номенклатура.Наименование);
КонецЦикла;

Да пока победить не могу) В выражение имеешь ввиду вставить этот текст?
---
Ты скрин показывал где ты через отладку "Номенклатуру" мучал, вот прям туда и вставь
---
Не уверен что я тебе правильно понял...
---
ТЗНоменклатура - Номенклатура.Выгрузить(); Измени на ТЗНоменклатура = Номенклатура.Выгрузить();
---
ТЗНоменклатура = Номенклатура.Выгрузить()
---
Ты что делаешь? Это так не работает. Вставь мой кусок кода в свой код, а в отладке смотри переменную ТекстНоменклатура
---
так не работает. Вставь мой

Так?

```1c
    Функция ТекстНоменклатура(Номенклатура)

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

    ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));

    ТЗ.Колонки.Добавить (");

    ТЗНоменклатура = Номенклатура.Выгрузить();
    ТекстНоменклатура = ";
    Для Каждого Стр Из ТЗНоменклатура Цикл
    ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = ", Стр.Номенклатура.Наименование, ", "+Стр.Номенклатура.Наименование);
    КонецЦикла;

    КонецФункции
```

И заполняю пункт:

ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатура(ВыборкаТС.Номенклатура);
---
В первый раз с программированием сталкиваетесь?
То что Вы написали и правда "шляпа" какая-то
```1c
    &НаКлиенте
    Функция ТекстНоменклатураНаСервере(Номенклатура)

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

    КонецФункции
```

Есть хоть какой-то понимание, что в этом куске кода неправильно?
---
Я вообще не уверен что это именно так делается, что пишется процедура на сервере передается на клиент и тд, сам алгоритм не понимаю, или можно просто функцию написать в модуле менеджера и с помощью функции заполнить уже пункт номенклатура
---
Конкретно здесь у Вас бесконечная рекурсия

Из того, что Вы написали
```1c
    ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатураНаСервере(ВыборкаТС.Номенклатура);
```
этот кусок кода в модуле менеджера и вызывается функция, которая в модуле менеджера (серверный модуль)
А то, что Вы написали в модуле формы никак не отрабатывает, потому что из модуля менеджера нельзя вызвать метод из модуля формы (точнее можно, но зачем)

В вашем случае, всё надо делать в модуле менеджера, модуль формы не трогайте

В итоге
```1c
    ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатураНаСервере(ВыборкаТС.Номенклатура);
```
вызывает функцию в модуле менеджера
```1c
    Функция ТекстНоменклатураНаСервере(Номенклатура)

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

    КонецФункции
```
 и опять же здесь рекурсия
---
этот кусок кода в модуле менеджера и вызывается функция, которая в модуле менеджера (серверный модул

Хорошо, спасибо большое, теперь хоть стало понятно что всё нужно будет делать в модуле менеджера
---
полнейшая шляпа
---
Всем спасибо!!! Получилось:

```1c
    ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатура(Номенклатура);

    Функция ТекстНоменклатура(Номенклатура)

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

    ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));

    ТЗНоменклатура = Номенклатура.Выгрузить();

    ТекстНоменклатура = ";
    Для Каждого Стр Из ТЗНоменклатура Цикл
    ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = ", Стр.Номенклатура.Наименование, ", " + Стр.Номенклатура.Наименование);
    КонецЦикла;

    Возврат ТекстНоменклатура;

    КонецФункции
```
---
Это лишнее

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

ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));