Версия для печати темы (https://pro1c.org.ua/index.php?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)
Если чисто ради интереса, то создайте пустую конфигурацию и там пробуйте внешней обработкой.
Я попробую.... На тестовой - вот как обновиться - так и попробую
Автор: salton 01.09.17, 12:33
Цитата(Vidocq05 @ 31.08.17, 12:29)
salton @ Сегодня, 11:55 ,
Или так
МассивЭлементов = ВашСписокЗначений.ВыгрузитьЗначения();
СоединеннаяСтрока = СтрСоединить(МассивЭлементов,",");
Спасибо! Проверил - работает!
зы. Но мне лично нужна совместимость с 8.2
потому вариант возьму на заметку, на будущее!
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua