Версия для печати темы (https://pro1c.org.ua/index.php?s=f69e5f4c4ec4e1350b893ef3caf7ffb1&showtopic=39895)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Список значений в строку

Автор: salton 31.08.17, 10:55

Прошу тапками не бросаться - я пытаюсь разобраться с 1С 8 совсем недавно. Матчасть читал. Столкнулся намедни с необходимостью: список значений (внутри может быть как 1 так и больше срок) необходимо преобразовать в строку с разделителями (пускай это будет ",").
Функции аналогичной как в 1С 7.7 не нашел. Вернее сказать нашел - ЗначениеВСтрокуВнутр(), описание которой повергло в ступор. На просторах интернета нашел кусок кода:

Функция ВСтроку(Знач Массив)    
    СтрокаВнутр=СтрЗаменить(ЗначениеВСтрокуВнутр(Массив), """}," + Символы.ПС + "{""S"",""", "");
    СтрокаВнутр2=Сред(СтрокаВнутр,Найти(СтрокаВнутр,Массив[0]));    
    Возврат Лев(СтрокаВнутр2,СтрДлина(СтрокаВнутр2)-6);
КонецФункции


А также нашел пару-тройку других вариантов на основании которых было сделано решение:
Функция ВСтроку(Массив)
    ном=0;
    Для каждого элемент Из Массив Цикл
        стр=Строка(стр)+Строка(Массив.Получить(ном).Значение)+",";
        ном=ном+1;
    КонецЦикла;
    возврат Лев(стр,СтрДлина(Стр)-1);
КонецФункции


Итак вопрос - как первый код сделать рабочим?

При условии, что:
Массив = Новый СписокЗначений;
Массив.Добавить(1);
Массив.Добавить(2);
Массив.Добавить(3);
Массив.Добавить(4);


Заранее спасибо!

Автор: Vidocq05 31.08.17, 11:29

salton @ Сегодня, 11:55 * ,
Нужно именно со списка значений?
Если с массива то вот:

СтрСоединить (StrConcat)
Синтаксис:

СтрСоединить(<Строки>, <Разделитель>)
Параметры:

<Строки> (обязательный)

Тип: ФиксированныйМассив; Массив.
Массив, содержащий объединяемые строки.
<Разделитель> (необязательный)

Тип: Строка.
Строка, которая будет вставлена между объединяемыми строками.
Если параметр не задан, строки будут объединены слитно друг с другом.
Значение по умолчанию: Неопределено.
Возвращаемое значение:

Тип: Строка.
Строка, содержащая соединенные исходные строки с разделителем между ними.
Описание:

Соединяет массив переданных строк в одну строку с указанным разделителем.


salton @ Сегодня, 11:55 * ,
Или так

МассивЭлементов = ВашСписокЗначений.ВыгрузитьЗначения();

СоединеннаяСтрока = СтрСоединить(МассивЭлементов,",");

Автор: Flexy 31.08.17, 11:30

Спис = Новый СписокЗначений;
Спис.Добавить(1);
Спис.Добавить(2);
Спис.Добавить(3);
Спис.Добавить(4);
Спис.Добавить(5);
Результат = "";
Для Каждого Элем Из Спис Цикл
Результат = ?(Спис.Индекс(Элем) > 0,  Результат+","+Элем.Значение, Результат+Элем.Значение)     
КонецЦикла;

Автор: salton 31.08.17, 12:07

Flexy, спасибо! Ваш код лаконичнее моего.

Но... интересует вариант с помощью

ЗначениеВСтрокуВнутр()

Автор: Flexy 31.08.17, 12:13

Цитата(salton @ 31.08.17, 12:07) *
Но... интересует вариант с помощью
ЗначениеВСтрокуВнутр()

А для чего это нужно?

Автор: salton 31.08.17, 12:14

Цитата(Vidocq05 @ 31.08.17, 12:29) *
salton @ Сегодня, 11:55 ,
Или так

МассивЭлементов = ВашСписокЗначений.ВыгрузитьЗначения();

СоединеннаяСтрока = СтрСоединить(МассивЭлементов,",");


"Процедура или функция с указанным именем не определена (СтрСоединить)"

Сам читал за эту функцию.... но не работает почему-то...

Цитата(Flexy @ 31.08.17, 13:13) *
А для чего это нужно?

Чисто ради интереса...

Свою задачу я решил методом который описал выше в теме. Но принцип есть принцип!

Автор: Flexy 31.08.17, 12:17

Цитата(salton @ 31.08.17, 12:14) *
Чисто ради интереса...

Свою задачу я решил методом который описал выше в теме. Но принцип есть принцип!

Данный метод не рекомендуется использовать.
Примечание:
Используется для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать для других целей не рекомендуется.

Ради интереса, для 8-ки, могу посоветовать сериализацию в/из XDTO

Автор: Vidocq05 31.08.17, 12:24

Цитата(salton @ 31.08.17, 13:14) *
"Процедура или функция с указанным именем не определена (СтрСоединить)"

Сам читал за эту функцию.... но не работает почему-то...

Какая у Вас платформа? Данной функции в 8.2 нету. Она появилась в 8.3.

Автор: salton 31.08.17, 12:26

Vidocq05 @ Сегодня, 13:24 * ,
у меня 8.3.8.2322
в синтаксис-помощнике нет.
на выполнение кода ругается.

Автор: Bernet 31.08.17, 13:18

salton @ Сегодня, 13:26 * ,
релиз платформы тоже имеет значение, данная функция появилась не то в 8.3.9 не то в 8.3.10, это уже в описаниях к релизам надо смотреть

Автор: Vidocq05 01.09.17, 8:30

Цитата(Bernet @ 31.08.17, 14:18) *
релиз платформы тоже имеет значение, данная функция появилась не то в 8.3.9 не то в 8.3.10, это уже в описаниях к релизам надо смотреть

Появилась она в 8.3.6, на сколько я знаю.
Цитата(salton @ 31.08.17, 13:26) *
у меня 8.3.8.2322
в синтаксис-помощнике нет.
на выполнение кода ругается.

Скорее всего стоит режим совместимости с 8.2, поэтому она и не работает.

Автор: salton 01.09.17, 9:39

Цитата(Vidocq05 @ 01.09.17, 9:30) *
Скорее всего стоит режим совместимости с 8.2, поэтому она и не работает.

Режим совместимости включен...
Сейчас выключу и проверю! А потом отпишусь!

Наверное я поспешил.... как пошло обновление - висит на реструктуризации Справоничка ЦеновыеГруппы. Или же просто процесс идет, но у меня интерфейс висит!
Подожду часок-полтора... База небольшая - 35 гигов.

Автор: Vidocq05 01.09.17, 9:41

Цитата(salton @ 31.08.17, 13:14) *
Чисто ради интереса...

Свою задачу я решил методом который описал выше в теме. Но принцип есть принцип!

Если чисто ради интереса, то создайте пустую конфигурацию и там пробуйте внешней обработкой.

Автор: salton 01.09.17, 9:43

Цитата(Vidocq05 @ 01.09.17, 10:41) *
Если чисто ради интереса, то создайте пустую конфигурацию и там пробуйте внешней обработкой.


Я попробую.... На тестовой - вот как обновиться - так и попробую 64000000.gif

Автор: salton 01.09.17, 12:33

Цитата(Vidocq05 @ 31.08.17, 12:29) *
salton @ Сегодня, 11:55 ,
Или так

МассивЭлементов = ВашСписокЗначений.ВыгрузитьЗначения();
СоединеннаяСтрока = СтрСоединить(МассивЭлементов,",");


Спасибо! Проверил - работает!

зы. Но мне лично нужна совместимость с 8.2 upset.gif потому вариант возьму на заметку, на будущее!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua