Имя: Пароль:
1C
 
Аналог функции ВСтрокуСРазделителями() в 8-ке
0 Dunstan
 
11.11.09
11:50
Кто знает как список значений либо структуру легким движением преобразовать в строку или обратно?
Нужен аналог ВСтрокуСРазделителями() и ИзСтрокиСРазделителями()...
Хелп плз!
1 Ненавижу 1С
 
гуру
11.11.09
11:52
(0) разделитель запятая? это конструктор структуры
2 Живой Ископаемый
 
11.11.09
11:52
а почему именно эти? почему не ВСтрокуВнутр()?
3 skunk
 
11.11.09
11:52
ЗначениеВСтрокуВнутр (ValueToStringInternal)
Синтаксис:
ЗначениеВСтрокуВнутр(<Значение>)
4 Dunstan
 
11.11.09
11:55
А ЗначениеВСтрокуВнутр работает со Списком Значений?
5 Живой Ископаемый
 
11.11.09
11:57
А ЗначениеЗаполнено(Список)  возвращает ложь, если список пустой?
6 skunk
 
11.11.09
11:58
(4)а книжку открыть и почитать уже религия не позваляет?


Параметры:
<Значение> (обязательный)
Тип: Произвольный. Преобразуемое значение.
7 Mort
 
11.11.09
12:01
Только если автор понимает что результат ЗначениеВСтрокуВнутр(<Значение>) будет не читаем.
8 Соратник
 
11.11.09
12:01
Ногами не пинать в 8-ке меньше года ;)

// <Функция реализует действия аналогичные методу объекта СписокЗначений в 7.7>
//
// Параметры
//  <Параметр1>  - <СписокЗначений> - <Список значений для выгрузки в строку>
//  <Параметр2>  - <Строка> - <Строка или символ разделитель>
//
// Возвращаемое значение:
//   <Строка>   - <Строка со значениями через разделитель>
//
Функция _пскВСтрокуСРазделителем(СписокЗначений,Разделитель) Экспорт
   Строка = "";
   РазмерСписка = СписокЗначений.Количество();
   Сч = 0;
   Для каждого ЭлементСписка Из СписокЗначений Цикл
       Сч = Сч+1;
       Значение = ЭлементСписка.Значение;
       Если ТипЗнч(Значение) = Тип("Строка") Тогда
           ПодготовленноеЗначение = """"+СтрЗаменить(СокрЛП(Значение),"""","""""")+"""";
       ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда
           ПодготовленноеЗначение = Формат(Значение,"ЧРД='.'");
       Иначе
           ПодготовленноеЗначение = """"+Строка(Значение)+"""";
       КонецЕсли;
       Строка = Строка + ПодготовленноеЗначение + ?(Сч = РазмерСписка,"",Разделитель);
   КонецЦикла;
   Возврат Строка;
КонецФункции // пскВСтрокуСРазделителем()

Функция _пскИзСтрокиСРазделителями(СтрокаСоЗначениями,Разделитель) Экспорт
   СтрокаЗначений = СокрЛП(СтрокаСоЗначениями);
   Список = НОВЫЙ СписокЗначений;
   Пока 1 = 1 Цикл
       поз = Найти(СтрокаЗначений,Разделитель);
       Если поз > 0 Тогда
           Значение = Лев(СтрокаЗначений,поз-1);
           Если Лев(Значение,1) = """" и Прав(Значение,1) = """" Тогда // это строка
               Значение = Строка(Сред(Значение,2));
               Значение = Лев(Значение,СтрДлина(Значение)-1);
           ИначеЕсли Лев(Значение,1) = """" и Прав(Значение,1) <> """" Тогда // это кусок строки, в которой попалась запятая
               Значение = Строка(Сред(Значение,2));
               ПервыйКусок = Значение;
               ОстатокВсейСтроки = Сред(СтрокаЗначений,поз);
               ПозицияКонцаСтроки = Найти(СтрокаЗначений,""",");
               ПозицияКонцаВторогоКуска = Найти(ОстатокВсейСтроки,""",");
               ВторойКусок = Лев(ОстатокВсейСтроки,ПозицияКонцаВторогоКуска-1);
               Значение = ПервыйКусок + ВторойКусок;
               поз = ПозицияКонцаСтроки+1;
           Иначе
               Значение = Число(Значение);
           КонецЕсли;
           Список.Добавить(Значение);
           СтрокаЗначений = Сред(СтрокаЗначений,поз+1);
       Иначе
           Значение = СтрокаЗначений;
           Список.Добавить(Значение);
           Возврат Список;
       КонецЕсли;
   КонецЦикла;
КонецФункции
9 Dunstan
 
11.11.09
12:33
Большое спасибо...
10 skunk
 
11.11.09
12:50
(8)ужас )))
11 Serginio1
 
11.11.09
13:18
12 Соратник
 
11.11.09
16:06
(10) А в чем ужас? Может что нахрапом по "семерошному" сделал... так подскажите где код украсить можно? :) Но функции сии работают у меня уже больше полугода и нужны были для работы с семерочными базами филиалов (электронные накладные)
13 Serginio1
 
11.11.09
16:16
(8) Если Лев(Значение,1) = """" и Прав(Значение,1) = """" Тогда
Вполне может быть такая строка
"рррр""," но в данном случае , разделителем не является.
Делай автомат по аналогии с 8 и в зависимости от состояния делай поиск.
Вариант 11 можно значительно ускорить, но лень.
Там же если состояние FieldScan можно возвращать число.