Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Разбить строку в массив подстрок

Разбить строку в массив подстрок
Я
   БИР
 
10.11.18 - 20:53
Всем привет. Я новичек в этом деле. Подскажите как разбить строку в массив подстрок на примере. Очень поможете. У меня Контрагенты.АдресЭлектроннойПочты содержит несколько адресов. Потом не могу понять как это все добавить в Сообщения.Получатели.Добавить.
 
 
   lEvGl
 
1 - 10.11.18 - 20:54
в типовых есть функция, так и называется "разобратьстрокувмассивподстрок", если самописька, то скопируйте
   БИР
 
2 - 10.11.18 - 21:01
Я ее там нашла, но не могу понять, что куда подставлять. Всяко пробовала, не работает. Туго до меня доходит эта функция.

вот код:

Функция РазложитьСтрокуВМассивПодстрок(Знач АдресЭлектронноПочты, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт
    
    Результат = Новый Массив;
    
    // для обеспечения обратной совместимости

    Если ПропускатьПустыеСтроки = Неопределено Тогда
        ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
        Если ПустаяСтрока(АдресЭлектронноПочты) Тогда 
            Если Разделитель = " " Тогда
                Результат.Добавить("");
            КонецЕсли;
            Возврат Результат;
        КонецЕсли;
    КонецЕсли;
    
    
    Позиция = Найти (АдресЭлектронноПочты, ",");
    Пока Позиция > 0 Цикл
        Подстрока = Лев(АдресЭлектронноПочты, Позиция - 1);
        Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
            Результат.Добавить(Подстрока);
        КонецЕсли;
        Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
        Позиция = Найти(Строка, Разделитель);
    КонецЦикла;
    
    Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда
        Результат.Добавить(Строка);
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции
   БИР
 
3 - 10.11.18 - 21:03
(1) Посмотрите пожалуйста.
   NorthWind
 
4 - 10.11.18 - 21:05
МассивСтрок = РазложитьСтрокуВМассивПодстрок (ТоЧтоНадоРазложить);

Для Каждого Строчка В МассивСтрок Цикл
Сообщить (Строчка);
КонецЦикла;
   lEvGl
 
5 - 10.11.18 - 21:07
у вас строка вида
строка = "текст1;текст2";
передаете
РазложитьСтрокуВМассивПодстрок(Строка, ";")
получаете массив
текст1
текст2
   lEvGl
 
6 - 10.11.18 - 21:10
внутрь фнункции даже не смотрите, там много и непонятно, наверно никому)
   БИР
 
7 - 10.11.18 - 21:10
(4) МассивСтрок = РазложитьСтрокуВМассивПодстрок (Контрагент.АдресЭлектроннойПочты);

     Для Каждого Строчка В МассивСтрок Цикл
    Сообщить (Строчка);
    КонецЦикла;

Ругается
Ожидается символ '='
     Для Каждого Строчка <<?>>В МассивСтрок Цикл (Проверка: Толстый клиент (обычное приложение))
   NorthWind
 
8 - 10.11.18 - 21:14
Дико извиняюсь за невнимательность.
   БИР
 
9 - 10.11.18 - 21:14
(5) т. е. надо написать
РазложитьСтрокуВМассивПодстрок(Строка, ";")
строка = "адрес электронной почты";

А потом массив добавить в Сообщение.получатели.Добавить(Массив);
   NorthWind
 
10 - 10.11.18 - 21:14
Для каждого Строчка Из МассивСтрок .... читать так
 
 Рекламное место пустует
   mmmarat
 
11 - 10.11.18 - 21:14
(0) стрразделить используйте
   lEvGl
 
12 - 10.11.18 - 21:18
(9)
Для Каждого Строка Из РазложитьСтрокуВМассивПодстрок(Строка, ";") Цикл
Сообщение.Получатели.Добавить(Строка);
Конец
все недословно
   lEvGl
 
13 - 10.11.18 - 21:19
розберайтесь ^)
   БИР
 
14 - 10.11.18 - 21:24
(10) написал ошибку при отправке
Итератор для значения не определен
    Для Каждого Строчка Из МассивСтрок Цикл
   lEvGl
 
15 - 10.11.18 - 21:26
с ошибками "итератор не определен" - в учебники
   БИР
 
16 - 10.11.18 - 21:43
Снова при отправке написал итератор не определен
Для Каждого Строка Из МассивСтрок Цикл

    Строка = "Адрес электронной почты";
    МассивСтрок = РазложитьСтрокуВМассивПодстрок (Строка, ",");
    Для Каждого Строка Из МассивСтрок Цикл
    Сообщение.Получатели.Добавить(Строка);
    КонецЦикла;
   lEvGl
 
17 - 10.11.18 - 21:45
четайте 12
   lEvGl
 
18 - 10.11.18 - 21:47
там в Строке должен быть текст вида "текст1%текст2"
   lEvGl
 
19 - 10.11.18 - 21:48
раделитель %
   БИР
 
20 - 10.11.18 - 21:55
(19) Не совсем понимаю как я строку адрес электронной почты с несколькими адресами разделю "%",

У меня у контрагента в карточки есть одна строка в которой записаны адреса через запятую.
   big
 
21 - 11.11.18 - 07:24
ТС лучше удачно выйти замуж и не насиловать себе голову
   echo77
 
22 - 11.11.18 - 08:27
А где фоточка?
Смените пол в карточке на форуме, вы же не мужик?
   echo77
 
23 - 11.11.18 - 09:04
А как найти все вхождения подстроки в строку?
   Мыш
 
24 - 11.11.18 - 09:24
(23) СтрНайти
   МимохожийОднако
 
25 - 11.11.18 - 09:39
офф:"угадал все буквы,но не смог назвать слово"
   osa1C
 
26 - 11.11.18 - 10:03
(22) неужели традиция форума ещё сохранилась? Я думал уже все забыли о ней
   lEvGl
 
27 - 11.11.18 - 10:03
(25) пусть разбирается, че, первая функция в жизни должна запомниться навсегда
   БИР
 
28 - 11.11.18 - 11:57
(22) Фото загрузила, пол сменила. Надеюсь поможет...
   Михаил Иванович
 
29 - 11.11.18 - 13:19
(28) "Фото загрузила, пол сменила" -  а теперь замуж.
   osa1C
 
30 - 11.11.18 - 13:45
(28) теперь конечно поможет. Традиция форума ... девушки только с фото, тогда любой готов помочь по любому вопросу
   ejikbeznojek
 
31 - 12.11.18 - 10:56
Обманули девушку то?)
   NorthWind
 
32 - 12.11.18 - 11:28
(31) простимулировали разобраться самостоятельно, я бы так сказал. Дав всю необходимую инфу и немного сверху.
   Малыш Джон
 
33 - 12.11.18 - 11:39
(0) СтрРазделить() не предлагать? или платформа не позволяет?
 
 
   БИР
 
34 - 12.11.18 - 17:01
(33) Добрый день! Делаю через СтрЗаменить и вывожу сообщить. Массив показывает правильно, все адреса в столбик. Но когда начинаю писать для каждого-выдает сообщение интератор не определен.
   БИР
 
35 - 12.11.18 - 17:04
СтрокаСРазделителями = Контрагент.АдресЭлектроннойПочты;
    МногострочнаяСтрока = СтрЗаменить(СтрокаСРазделителями, ",",Символы.ПС);
    Для СчЦ = 1 по СтрЧислоСтрок(МногострочнаяСтрока) Цикл
   Сообщить(СтрПолучитьСтроку(МногострочнаяСтрока,СчЦ));
КонецЦикла;
 Как данный код прописать для каждого, после цикла Сообщение.Получатели.Добавить я уже второй день не могу решить данную головоломку. Везде ошибка "интератор не определен".
   hhhh
 
36 - 12.11.18 - 17:18
(35) МассивСтрок = СтрРазделить(Контрагент.АдресЭлектроннойПочты, ",");
Для Каждого Стр Из МассивСтрок Цикл
   Сообщить(Стр);
КонецЦикла;
   БИР
 
37 - 13.11.18 - 12:49
(36) Спасибо,большое. Вот этот вариант заработал, только теперь у меня в строчке из 5 адресов отправляется на последний адрес, а 4 пропускает, почему так может быть?.
   БИР
 
38 - 13.11.18 - 12:49
Всем, спасибо большое.
   БИР
 
39 - 13.11.18 - 12:55
Подскажите, как можно сделать, дайте хоть направление на какие функции обратить внимание: хочу сделать отправку писем по одной кнопке, но считывание должно идти по справочнику контрагенты и, если, на этого контрагента заполнен макет(он будет заполнятся автоматически), то делать отправку.
   ДенисЧ
 
40 - 13.11.18 - 12:57
(39) А в чём конкретно проблема? Перебрать контрагентов и определить, есть ли у них макет (я не знаю, как он у вас задаётся)?
Или как отпправить письмо?
   БИР
 
41 - 13.11.18 - 13:00
(40) в макет вытягиваются данные, которые попадают отбором по определенному комментарию, и процедура на макет сделана отдельно.
   БИР
 
42 - 13.11.18 - 13:00
(40) все это не могу связать.
   ДенисЧ
 
43 - 13.11.18 - 13:01
(41) И? В чем загвоздка-то?
   БИР
 
44 - 13.11.18 - 13:04
(43) процесс в голове не укладывается. т.е. первое пишем заполнение макета по комментарию? А потом проверяем если на контрагента есть заполненный макет, то отправляем?
   ДенисЧ
 
45 - 13.11.18 - 13:05
(44)
1. Выбираем всех контрагентов, кому нужно отправить
2. для каждого выбранного формируем печатную форму.
3. для каждой печатной формы формируем письмо.

Вроде всё просто, как две ноты на рояле...
   БИР
 
46 - 13.11.18 - 13:06
(45) Спасибо, попробую.
   tesseract
 
47 - 13.11.18 - 13:06
(39) В сторону найма программиста.
   БИР
 
48 - 13.11.18 - 13:08
(47) Мир не без добрых людей.
   novichok79
 
49 - 13.11.18 - 13:09
(48) иногда быстрее и дешевле нанять профессионала, чем потом исправлять допущенные ошибки.
 
 Рекламное место пустует
   ДенисЧ
 
50 - 13.11.18 - 13:10
(49) А если такие задачи возникают постоянно? Сейчас поковыряется, научится, а через год таких, как ты будет сама тут учить и тыкать носом...
   novichok79
 
51 - 13.11.18 - 13:14
(50) если задачи будут именно такими, то эта девушка станет экспертом по работе с стрразделить...
что будет учить - возможно, но вот чему-то новому научить - маловероятно.
   novichok79
 
52 - 13.11.18 - 13:17
(50) чтобы быть хорошим айтишником, этим надо жить... желательно с детства, ибо стек технологий очень широк и постоянно расширяется.
   Garykom
 
53 - 13.11.18 - 13:32
(52) Когда стек технологий слишком уширяется и выходит за пределы возможностей людей то происходит специализация с жестким разделением на разные профессии, которым надо учиться отдельно.

Короче понятие "айтишник" - скоро перейдет в понятие подобное "врач".
   Garykom
 
54 - 13.11.18 - 13:33
(53)+ или понятие "инженер"
   novichok79
 
55 - 13.11.18 - 15:24
(53) да, по-моему уже... есть сис. админы, программисты 1С, веб-программисты, фуллстэк, фронтенд, бэкенд, и т. д.
в идеале - чем больше ты знаешь, тем лучше.
   ДенисЧ
 
56 - 13.11.18 - 15:43
(55) "чем больше ты знаешь"...
Тем меньше умеешь
   d4rkmesa
 
57 - 13.11.18 - 15:46
(52) Хехе, с возрастом энтузиазм значительно угасает. Оглянуться не успеете, а вокруг уже одни дата сайентисты.
   Garykom
 
58 - 13.11.18 - 15:48
(56) Тем больше ты знаешь того чего не умеешь
   Lamer1C
 
59 - 13.11.18 - 15:50
(0) СтрРазделить() уже было?
   ДенисЧ
 
60 - 13.11.18 - 15:51
(59) Нет, первым будешь
   novichok79
 
61 - 13.11.18 - 17:27
(57) работаю на хайлоаде, в компании два аналитика Big Data. так что вокруг уже дата сайентисты.
   tesseract
 
62 - 13.11.18 - 17:37
(61) >>так что вокруг уже дата сайентисты.

Это у которых с SQL и математикой плохо, а с языком хорошо?
   БИР
 
63 - 14.11.18 - 05:54
Подскажите, почему при отправке письма из строки читается только последний адрес электронной почты, а при просмотре массив показывает правильно. В чем может быть дело?
   hhhh
 
64 - 14.11.18 - 07:10
(63) ну вы покажите как отправляете
Все на каких-то экстрасенсов надеетесь? Которые по завихрпнию колец Сатурна определят, почему у вас письмо не отправляется.
   Nikoss
 
65 - 14.11.18 - 08:15
(36) СтрРазделить работает на, что-то вроде, 5% медленнее процедуры из типовых. 1С такая 1С...
   БИР
 
66 - 14.11.18 - 08:16
(64) отправляю так:
Сообщение.Получатели.Добавить(Стр);

массив:
МассивСтрок = СтрРазделить(Контрагент.АдресЭлектроннойПочты, ",", Символы.ПС);
    Для Каждого Стр Из МассивСтрок Цикл
       Сообщить(Стр);
           КонецЦикла;
   БИР
 
67 - 14.11.18 - 08:18
(65) Приходит позже-это да. Но первый адрес пропускает все-равно.
   Мелифаро
 
68 - 14.11.18 - 08:18
(66) Посмотрите отладкой, что у вас в Сообщение.Получатели после цикла лежит.
   Мелифаро
 
69 - 14.11.18 - 08:19
И покажите весь код, включая добавление получателей в цикле.
   hhhh
 
70 - 14.11.18 - 08:24
(65) ты не прав, стрРазделить работает в десятки тысяч раз быстрее типовых процедур. У меня была задача: разобрать текстовую строку, состоящую из 18000 строк. При помощи цикла и типовых процедур из 1с выполнялось около минуты. Заменил на СтрРазделить, теперь выполняется практически мгновенно, меньше секунды.
   БИР
 
71 - 14.11.18 - 08:25
(69) У меня нет получателей в цикле. у меня из массива в сообщения встает Стр
   Мелифаро
 
72 - 14.11.18 - 08:28
(71) Что?
Вам надо добавить получателей, как вы их добавляете из массива строк?
   Nikoss
 
73 - 14.11.18 - 08:30
(70) у меня немного другая ситуация была.
Что-то типа 500к строк в цикле, с разделением каждой (по 32 значения в каждой строке)
   dezss
 
74 - 14.11.18 - 08:53
(71)
МассивСтрок = СтрРазделить(Контрагент.АдресЭлектроннойПочты, ",", Символы.ПС);
    Для Каждого Стр Из МассивСтрок Цикл
Сообщение.Получатели.Добавить(Стр); 
    КонецЦикла;
   БИР
 
75 - 14.11.18 - 09:01
))) (74)Я так пробовала:
Значение не является значением объектного типа (Получатели)
    Сообщение.Получатели.Добавить(Стр);
   ДенисЧ
 
76 - 14.11.18 - 09:03
(75) А что у тебя "Получатели" ?
Может, всё-таки отладчик запустить?
   Мелифаро
 
77 - 14.11.18 - 09:03
Я ничего не понял.
В (66) вы пишете, что отправляете так, в (75) - оно выдаёт ошибку. Или вы думаете, что факт нахождения объекта Сообщение в цикле меняет состав его свойств?
   БИР
 
78 - 14.11.18 - 09:23
(76) Отладчик ничего не показывает. Не спотыкается. Сама не могу ничего понять. Точку останова ставлю и запускаю отладку.
   Мелифаро
 
79 - 14.11.18 - 09:24
(78) Вы можете весь код показать, включая тот участок, где получателей заполняете?
   БИР
 
80 - 14.11.18 - 09:34
(79) Почта = Новый ИнтернетПочта;
    Попытка
    Почта.Подключиться(ПолучитьПрофиль());
        Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки; 

    МассивСтрок = СтрРазделить(Контрагент.АдресЭлектроннойПочты, ",", Символы.ПС);
    Для Каждого Стр Из МассивСтрок Цикл
    Сообщение.Получатели.Добавить(Стр); 
    КонецЦикла;
    
    
        // Создадим почтовое сообщение

    Сообщение = Новый ИнтернетПочтовоеСообщение;
    Текст = Сообщение.Тексты.Добавить("Вопросы …);
    Сообщение.Отправитель = " адрес";
    Сообщение.ИмяОтправителя = "имя";
    Сообщение.Тема = "";
    Сообщение.Вложения.Добавить(ИмяВложения, ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла)));
   Мелифаро
 
81 - 14.11.18 - 09:37
Паажжите, у вас создание почтового сообщения идёт после добавления в него получателей, что ли?
   ДенисЧ
 
82 - 14.11.18 - 09:39
(80) Милая.... Вы пытаетесь добавить получателей в несуществующий объект...
   БИР
 
83 - 14.11.18 - 10:08
Урааа, теперь все заработало. Тяжело в ученье, зато будет легко в бою... Спасибо всем.
   Мелифаро
 
84 - 14.11.18 - 10:10
Дерзайте =)
   novichok79
 
85 - 14.11.18 - 11:32
(62) нет, чуваки - профи.
   БИР
 
86 - 15.11.18 - 18:26
Всем привет. Сегодня расстроилась... открыла внешний отчет в основной программе и у меня функция СТрразделить не сработала. В чем может быть дело? Почему в тесте работает без проблем, а в основной безе с проблемами.
   FIXXXL
 
87 - 15.11.18 - 18:37
(86) режим совместимости какой стоит в рабочей базе?
   БИР
 
88 - 15.11.18 - 18:42
(87) Где посмотреть? В конфигуратор доступ админ не даст.
   БИР
 
89 - 15.11.18 - 18:43
в тестовой 8.3.2. Поэтому там и сработала стрразделить
   БИР
 
90 - 15.11.18 - 18:45
Ссори 8.3.10
   БИР
 
91 - 15.11.18 - 20:40
ну как исправить ошибку????
   БИР
 
92 - 15.11.18 - 20:46
написала новый код:
Строка = Контрагент.адресЭлектроннойПочты;
МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокув МассивПодстрок(строка, ",", Символы.ПС);
Для Каждого Строка ИЗ МассивСтрок цикл
Сообщение.Получатели.Добавить(Строка)
КонецЦикла;

При проверке ругается с ссылкой на общий модуль:
Если Не ПустаяСтрока и не что- то с подстрокой
 добавить (подстрока)... ошибку писала по памяти

КАк исправить можно?
   hhhh
 
93 - 15.11.18 - 20:54
(92) символы.пс выбросить нахрен. Непонятно, откуда вообще это слово у вас присобачилось. может рука соскочила с клавиатуры и самопроизвольно впечатала эту фигню?
   runoff_runoff
 
94 - 15.11.18 - 21:11
СтрЗабей
   Garykom
 
95 - 15.11.18 - 21:16
(92) "строка" - не надо так делать, имена переменных совпадающие со служебными словами (имена процедур/функций и т.д.)
   БИР
 
96 - 16.11.18 - 10:14
(93) Смешно... про руку
   Малыш Джон
 
97 - 16.11.18 - 11:18
(95) система прекрасно отличает переменную Строка от функции Строка()
но чисто с точки зрения читабельности - да, не очень красиво получается.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует