Имя: Пароль:
1C
1С v8
Строковое представление списка значений
0 Гипервизор
 
12.08.15
23:35
Дано: ТЗ как входной параметр, какие колонки-заранее не знаем, в строках возможны дубли. Пробуем от них избавиться:
лМойСписок = Новый СписокЗначений;
Для Каждого лКолонка Из лВходнаяТЗ.Колонки Цикл
    лМойСписок.Добавить(лКолонка.Имя);
КонецЦикла;
лПредставлениеСписка = СтрЗаменить(Строка(лМойСписок), ";", ", ");
лВходнаяТЗ.Свернуть(лПредставлениеСписка);

Однако это работает когда СтрДлина(лКолонка.Имя) < 26
И тогда может получиться, например, такое:
"Номенклатура, ХарактеристикаНоменклатур...,  ЕдиницаИзмерения"
Собственно, добрался до вопроса: это такое ограничение платформы в 25 символов для представления? 26-й символ не осилить, но "..." - вполне. Где-то это документировано?
1 RomanYS
 
13.08.15
00:16
задокументировано:
"Преобразование к строке значений остальных типов производится по мере возможности и обычно содержит читабельное представление значения."
2 Провинциальный 1сник
 
13.08.15
04:04
Завязываться на представление - плохой стиль программирования.
3 Гипервизор
 
13.08.15
21:10
(2) ОК, рыдаю по своему плохому стилю..
Но может вами здесь был предложен образчик решения задачи высоким штилем? Надо же, нет.
Тогда может вами был дан ответ по существу вопроса? И снова нет.
Понятно, ответ ваш из серии "пришло в голову и распирало".
4 ДенисЧ
 
13.08.15
21:11
ПРишло в голову и распёрло (как по заказу)
А занафейхоа вообще список значений представлять в строковом виде?
5 Defender aka LINN
 
13.08.15
21:14
(3) А может где-то была озвучена острая необходимость такого представления?
6 Dен
 
13.08.15
22:20
(0) Вот, не Ваше?:
https://partners.v8.1c.ru/forum/topic/1391438

Господа, Вы когда нибудь задумываетесь нафига придумали типы данных? Нафига их компилятары по максимуму потыются отслеживать, проверять, выдавать предупреждения, ошибки? Что использовать неяное преобразование типов - это поиск проблем на свою голову.
7 mistеr
 
13.08.15
22:36
(0) Условия задачи сразу выдают быдлокодера. В консерватории править нужно. То есть подавать на вход нормальные данные.
8 Dен
 
13.08.15
22:46
Все документировано, выдержка из синтакс-помощника:

Строка (String)
Синтаксис:

Строка(<Значение>)
Параметры:

<Значение> (обязательный)

Тип: Произвольный.
Исходное значение.
Возвращаемое значение:

Тип: Строка.
Полученное значение.
Описание:

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

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример:

Сообщить(Строка(Количество) + " единиц товара на  складе не обнаружено");


"Преобразование к строке значений остальных типов производится по мере возможности и обычно содержит читабельное представление значения."
9 Гипервизор
 
18.08.15
20:12
(7) Уважаемый НЕбыдлокодер!
Я рад за вас, если вы всегда можете отфутболить задачу с пометкой "Как челобитную царю подаете? Подать мне кошерные данные!".
Увы, мне часто приходится работать с тем, что есть.
10 Ненавижу 1С
 
гуру
18.08.15
20:22
а если так:

лПредставлениеСписка = "";
Для Каждого лКолонка Из лВходнаяТЗ.Колонки Цикл
    лПредставлениеСписка = ?(ЗначениеЗаполнено(лПредставлениеСписка,",",""));
КонецЦикла;
лВходнаяТЗ.Свернуть(лПредставлениеСписка);
11 Ненавижу 1С
 
гуру
18.08.15
20:23
+(10) точнее так:
лПредставлениеСписка = лПредставлениеСписка+?(ЗначениеЗаполнено(лПредставлениеСписка,",",""));
12 Ненавижу 1С
 
гуру
18.08.15
20:24
+(11) окончательно пьян:

лПредставлениеСписка = лПредставлениеСписка+?(ЗначениеЗаполнено(лПредставлениеСписка,",",""))+лКолонка.Имя;
13 Провинциальный 1сник
 
19.08.15
08:04
(3) Создание строки перебором элементов списка. Очевидное решение.
А использовать недокументированные методы рискованно. Завтра в очередном релизе 1с поменяет разделитель в строковом представлении с точки на запятую - и всё, ваш алгоритм не работает.
14 ЧеловекДуши
 
19.08.15
08:50
(0) У ТЗ, нет дублей в колонках :)
в 1С 7.7 можно было не указывать название колонки, что и могло вызвать дублирование. Но в 8-ке уже каждая колонка должна содержать уникальное имя :)
15 ЧеловекДуши
 
19.08.15
08:52
+ (14) Если подходить к делу грамотно. То в Список нужно помещать не только колонки, но и Представление из набора метаданных. А не как вы, поместили названия реквизитов, и довольны :)