Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
11 дек 2024, 08:45

Передать ТаблицуЗначений в другую функцию

Автор Franc07, 29 авг 2024, 09:56

0 Пользователей и 1 гость просматривают эту тему.

Franc07

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

Функция СформироватьПечатнуюФорму (СсылкаНаОбъект,ОбъектыПечати)
ТЗД = Дочь(СсылкаНаОбъект);
Если ТЗД.Количество() = 0 Тогда
Сообщить("Данных в ТЗД нет");
КонецЕсли;
Для каждого СтрД из ТЗД Цикл
ОбластьСоглашение.Параметры.Дочь = Строка(СтрД.СтепеньРодства) + Строка(СтрД.Наименование) + Строка(СтрД.ДатаРождения);
КонецЦикла;
КонецФункции


Функция Дочь(СсылкаНаОбъект)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РодственникиФизическихЛиц.СтепеньРодства КАК СтепеньРодства,
| РодственникиФизическихЛиц.ДатаРождения КАК ДатаРождения,
| РодственникиФизическихЛиц.Наименование КАК Наименование
|ИЗ
| Справочник.РодственникиФизическихЛиц КАК РодственникиФизическихЛиц
|ГДЕ
| РодственникиФизическихЛиц.Владелец = &Владелец
| И РодственникиФизическихЛиц.СтепеньРодства.Наименование = ""Дочь""";

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

antoneus

Странно, что первую, после этого кода

Для каждого СтрД из ТЗД Цикл
   ОбластьСоглашение.Параметры.Дочь = Строка(СтрД.СтепеньРодства) + Строка(СтрД.Наименование) + Строка(СтрД.ДатаРождения);
КонецЦикла;

должна остаться только последняя. Почему? Потому что идет цикл по строкам, значение устанавливается, потом затирается следующим значением при следующем проходе цикла. Как быть? Конкатенировать.

Franc07

antoneus, ошибся, получаю последнюю строку

LexaK

Franc07, используйте массив (пример)
лкМ = Новый Массив;
Для каждого СтрД из ТЗД Цикл
лкМ.Добавить(Строка(СтрД.СтепеньРодства) + Строка(СтрД.Наименование) + Строка(СтрД.ДатаРождения));
КонецЦикла;
ОбластьСоглашение.Параметры.Дочь = лкМ;

если помогло нажмите: Спасибо!

antoneus

Емнип, в ячейке выведется слово Массив) Тогда уж

ОбластьСоглашение.Параметры.Дочь = СтрСоединить(лкМ, Символы.ПС);

LexaK

antoneus, аааа
тогда соединять строки
лкДочь = "";
Для каждого СтрД из ТЗД Цикл
лкДочь = лкДочь +Строка(СтрД.СтепеньРодства)
+ Строка(СтрД.Наименование)
+ Строка(СтрД.ДатаРождения)
+Символы.ПС;
КонецЦикла;
ОбластьСоглашение.Параметры.Дочь = лкДочь;
если помогло нажмите: Спасибо!

Optiman

Можно вообще таблицу значений не передавать.
В объекте создать Табличную часть с полями, которые используются в запросе. Функцию "Дочь" сделать процедурой, результат запроса выгружать в эту таблицу.
В Функции "СформироватьПечатнуюФорму" обращаться к этой табличной части (Ссылка на Объект уже есть).

antoneus

Да вообще можно всю строку формировать на сервере и возвращать)

Franc07

antoneus, LexaK спасибо!. Сделал по вашим советам, получилось!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск