Здравствуйте, написал вот такую функцию для того чтобы перебрать значения номенклатуры из таблицы значений и заполнить поле номенклатура на печатной форме, подскажите пожалуйста, что не так написал, не работает.
Функция ТекстНоменклатура(Номенклатура)
ТабЗнач = Новый ТаблицаЗначений;
ТабЗнач.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТекстНоменклатура = "";
Для Каждого Колонка из ТабЗнач.Колонки Цикл
ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = "", ТекстНоменклатура , ", "+ТекстНоменклатура );
КонецЦикла;
КонецФункции
ПоказатьПо теме из базы знаний
- "Распределение в запросе" или "избавляемся от перебора"
- Автоматизация перепродажи маркированного товара
- Перенос номенклатуры в любую конфигурацию
- Консоль кода с поддержкой объявления процедур и функций, с дополнительными функциями отслеживания и вывода значений
- Выгрузка номенклатуры с характеристикой в Бухгалтерию 3
Найденные решения
(10) Ты все никак не победишь? В том месте где отладку в первый раз запускал вставь это код и посмотри что будет в переменной ТекстНоменклатура
ТЗНоменклатура = Номенклатура.Выгрузить();
ТекстНоменклатура = "";
Для Каждого Стр Из ТЗНоменклатура Цикл
ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = "", Стр.Номенклатура.Наименование, ", "+Стр.Номенклатура.Наименование);
КонецЦикла;
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
А что вообще должна делать функция то? в функцию что передается? Номенклатура - это ссылка, это табличная часть или что? Зачем вообще она в функцию передается, если там нигде не используется? Функция что должна возвращать? У вас она ничего не возвращает.
Создалась таблица. В ней добавили колонку. Затем начинаете перебирать колонки циклом. Зачем - у вас ведь всего одна колонка, чего их перебирать то?. Может надо не колонки перебирать, а строки? Но строк у вас нет. Вы же создали пустую таблицу без строк.
Создалась таблица. В ней добавили колонку. Затем начинаете перебирать колонки циклом. Зачем - у вас ведь всего одна колонка, чего их перебирать то?. Может надо не колонки перебирать, а строки? Но строк у вас нет. Вы же создали пустую таблицу без строк.
перебираете ТЗ по строкам (для каждого СтрокаТЗ из ТЗ цикл) и просто НоменклатураНаПечать = Строка(СтрокаТЗ.Номенклатура). Но если уж совсем по фен-шую делать, то в запрос передаете ссылку на документ. из этого документа получаете табличную часть с номенклатурой, и из каждой номенклатуры берете либо наименование, либо представление.
(5)
Посмотрите пожалуйста я вообще правильно делаю или шляпу какую-то?
Сначала пишу в модуле формы:
и заполняю поле:
ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатураНаСервере(ВыборкаТС.Номенклатура);
ля каждого СтрокаТЗ
Посмотрите пожалуйста я вообще правильно делаю или шляпу какую-то?
Сначала пишу в модуле формы:
&НаСервере
Процедура ТекстНоменклатура(Номенклатура)
ТабЗнач = Новый ТаблицаЗначений;
ТабЗнач.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТабЗнач.Колонки.Добавить ("");
ТекстНоменклатура = "";
Для Каждого Колонка из ТабЗнач.Колонки Цикл
ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = "", ТекстНоменклатура , ", "+ТекстНоменклатура );
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция ТекстНоменклатураНаСервере(Номенклатура)
Возврат ТекстНоменклатураНаСервере(Номенклатура);
КонецФункции
Потом в модуле менеджера:
Функция ТекстНоменклатураНаСервере(Номенклатура)
ТекстНоменклатураНаСервере(Номенклатура);
КонецФункции
Показатьи заполняю поле:
ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатураНаСервере(ВыборкаТС.Номенклатура);
(10) Ты все никак не победишь? В том месте где отладку в первый раз запускал вставь это код и посмотри что будет в переменной ТекстНоменклатура
ТЗНоменклатура = Номенклатура.Выгрузить();
ТекстНоменклатура = "";
Для Каждого Стр Из ТЗНоменклатура Цикл
ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = "", Стр.Номенклатура.Наименование, ", "+Стр.Номенклатура.Наименование);
КонецЦикла;
(11)
Да пока победить не могу) В выражение имеешь ввиду вставить этот текст?
ТЗНоменклатура - Номенклатура.Выгрузить();
ТекстНоменклатура = "";
Для Каждого Стр Из ТЗНоменклатура Цикл
ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = "", Стр .Номенклатура.Наименование, ", "+Стр .Номенклатура.Наименование);
КонецЦикла;
ТекстНоменклатура = "";
Для Каждого Стр Из ТЗНоменклатура Цикл
ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = "", Стр .Номенклатура.Наименование, ", "+Стр .Номенклатура.Наименование);
КонецЦикла;
Да пока победить не могу) В выражение имеешь ввиду вставить этот текст?
(21)
Так?
И заполняю пункт:
ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатура(ВыборкаТС.Номенклатура);
так не работает. Вставь мой
Так?
Функция ТекстНоменклатура(Номенклатура)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТЗ.Колонки.Добавить ("");
ТЗНоменклатура = Номенклатура.Выгрузить();
ТекстНоменклатура = "";
Для Каждого Стр Из ТЗНоменклатура Цикл
ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = "", Стр.Номенклатура.Наименование, ", "+Стр.Номенклатура.Наименование);
КонецЦикла;
КонецФункции
ПоказатьИ заполняю пункт:
ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатура(ВыборкаТС.Номенклатура);
Прикрепленные файлы:
(7) В первый раз с программированием сталкиваетесь?
То что Вы написали и правда "шляпа" какая-то
Есть хоть какой-то понимание, что в этом куске кода неправильно?
То что Вы написали и правда "шляпа" какая-то
&НаКлиенте
Функция ТекстНоменклатураНаСервере(Номенклатура)
Возврат ТекстНоменклатураНаСервере(Номенклатура);
КонецФункции
Есть хоть какой-то понимание, что в этом куске кода неправильно?
(15) Конкретно здесь у Вас бесконечная рекурсия
Из того, что Вы написали этот кусок кода в модуле менеджера и вызывается функция, которая в модуле менеджера (серверный модуль)
А то, что Вы написали в модуле формы никак не отрабатывает, потому что из модуля менеджера нельзя вызвать метод из модуля формы (точнее можно, но зачем)
В вашем случае, всё надо делать в модуле менеджера, модуль формы не трогайте
В итоге вызывает функцию в модуле менеджера и опять же здесь рекурсия
Из того, что Вы написали
ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатураНаСервере(ВыборкаТС.Номенклатура);
А то, что Вы написали в модуле формы никак не отрабатывает, потому что из модуля менеджера нельзя вызвать метод из модуля формы (точнее можно, но зачем)
В вашем случае, всё надо делать в модуле менеджера, модуль формы не трогайте
В итоге
ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатураНаСервере(ВыборкаТС.Номенклатура);
Функция ТекстНоменклатураНаСервере(Номенклатура)
ТекстНоменклатураНаСервере(Номенклатура);
КонецФункции
Всем спасибо!!! Получилось:
ОбластьЛицевая.Параметры.Пункт3_1 = ТекстНоменклатура(Номенклатура);
Функция ТекстНоменклатура(Номенклатура)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТЗНоменклатура = Номенклатура.Выгрузить();
ТекстНоменклатура = "";
Для Каждого Стр Из ТЗНоменклатура Цикл
ТекстНоменклатура = ТекстНоменклатура +?(ТекстНоменклатура = "", Стр.Номенклатура.Наименование, ", " + Стр.Номенклатура.Наименование);
КонецЦикла;
Возврат ТекстНоменклатура;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот