Функция для перебора номенклатуры

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

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

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

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

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

КонецФункции
Показать
По теме из базы знаний
Найденные решения
11. Westonline82 20.02.23 09:36 Сейчас в теме
(10) Ты все никак не победишь? В том месте где отладку в первый раз запускал вставь это код и посмотри что будет в переменной ТекстНоменклатура
ТЗНоменклатура = Номенклатура.Выгрузить();
ТекстНоменклатура = "";
Для Каждого Стр Из ТЗНоменклатура Цикл
    ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура  = "", Стр.Номенклатура.Наименование, ", "+Стр.Номенклатура.Наименование);
КонецЦикла;
Geophysic; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DBV 20.02.23 08:50 Сейчас в теме
(1) Функция ничего не возвращает
Таблица значений всегда пустая
Перебираете колонки, а не значения
Параметр не используется
Переменная ТекстНоменклатура всегда равна ""

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

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


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

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

&НаСервере
Процедура ТекстНоменклатура(Номенклатура) 
	
ТабЗнач = Новый ТаблицаЗначений;

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

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

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

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

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

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

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

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

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

КонецФункции
Показать

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

ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатураНаСервере(ВыборкаТС.Номенклатура);
7. Geophysic 20.02.23 09:27 Сейчас в теме
(6) По-моему шляпа какая-то, первый раз просто с этим сталкиваюсь нет понимания как это делается
9. Stref75 20.02.23 09:28 Сейчас в теме
(7) надо с самого начала разбираться, т.к. ощущение, что ошибки изначально возникают
10. Geophysic 20.02.23 09:31 Сейчас в теме
(9) Проблем не было, заполнял большую печатную форму, столкнулся с этими ТЗ, почитал про них, понимание теперь есть как создать ТЗ и оттуда достать значения, а как уже из существующей ТЗ достать значения не понимаю
11. Westonline82 20.02.23 09:36 Сейчас в теме
(10) Ты все никак не победишь? В том месте где отладку в первый раз запускал вставь это код и посмотри что будет в переменной ТекстНоменклатура
ТЗНоменклатура = Номенклатура.Выгрузить();
ТекстНоменклатура = "";
Для Каждого Стр Из ТЗНоменклатура Цикл
    ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура  = "", Стр.Номенклатура.Наименование, ", "+Стр.Номенклатура.Наименование);
КонецЦикла;
Geophysic; +1 Ответить
12. Geophysic 20.02.23 09:41 Сейчас в теме
(11)
ТЗНоменклатура - Номенклатура.Выгрузить();
ТекстНоменклатура = "";
Для Каждого Стр Из ТЗНоменклатура Цикл
ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = "", Стр .Номенклатура.Наименование, ", "+Стр .Номенклатура.Наименование);
КонецЦикла;


Да пока победить не могу) В выражение имеешь ввиду вставить этот текст?
13. Westonline82 20.02.23 09:43 Сейчас в теме
(12)Ты скрин показывал где ты через отладку "Номенклатуру" мучал, вот прям туда и вставь
16. Geophysic 20.02.23 09:54 Сейчас в теме
(13) Не уверен что я тебе правильно понял...
Прикрепленные файлы:
17. Westonline82 20.02.23 09:55 Сейчас в теме
(16)
ТЗНоменклатура - Номенклатура.Выгрузить(); Измени на ТЗНоменклатура = Номенклатура.Выгрузить();
19. Geophysic 20.02.23 10:02 Сейчас в теме
(17)
ТЗНоменклатура = Номенклатура.Выгрузить()
Прикрепленные файлы:
21. Westonline82 20.02.23 10:08 Сейчас в теме
(19)
Ты что делаешь? Это так не работает. Вставь мой кусок кода в свой код, а в отладке смотри переменную ТекстНоменклатура
22. Geophysic 20.02.23 11:10 Сейчас в теме
(21)
так не работает. Вставь мой


Так?

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

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

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

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

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

КонецФункции
Показать


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

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

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

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

Есть хоть какой-то понимание, что в этом куске кода неправильно?
15. Geophysic 20.02.23 09:48 Сейчас в теме
(14) Я вообще не уверен что это именно так делается, что пишется процедура на сервере передается на клиент и тд, сам алгоритм не понимаю, или можно просто функцию написать в модуле менеджера и с помощью функции заполнить уже пункт номенклатура
18. DBV 20.02.23 09:56 Сейчас в теме
(15) Конкретно здесь у Вас бесконечная рекурсия

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

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

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

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

КонецФункции
и опять же здесь рекурсия
20. Geophysic 20.02.23 10:04 Сейчас в теме
(18)
этот кусок кода в модуле менеджера и вызывается функция, которая в модуле менеджера (серверный модул


Хорошо, спасибо большое, теперь хоть стало понятно что всё нужно будет делать в модуле менеджера
8. Stref75 20.02.23 09:27 Сейчас в теме
23. Geophysic 20.02.23 12:04 Сейчас в теме
Всем спасибо!!! Получилось:

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


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

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

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

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

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

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

КонецФункции
Показать
24. Westonline82 20.02.23 12:37 Сейчас в теме
(23)
Это лишнее

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

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот