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

вот код:

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

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

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

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

РазложитьСтрокуВМассивПодстрок(Строка, ";")
строка = "адрес электронной почты";

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

Итератор для значения не определен
    Для Каждого Строчка Из МассивСтрок Цикл
15 lEvGl
 
гуру
10.11.18
21:26
с ошибками "итератор не определен" - в учебники
16 БИР
 
10.11.18
21:43
Снова при отправке написал итератор не определен
Для Каждого Строка Из МассивСтрок Цикл

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

У меня у контрагента в карточки есть одна строка в которой записаны адреса через запятую.
21 big
 
11.11.18
07:24
ТС лучше удачно выйти замуж и не насиловать себе голову
22 echo77
 
11.11.18
08:27
А где фоточка?
Смените пол в карточке на форуме, вы же не мужик?
23 echo77
 
11.11.18
09:04
А как найти все вхождения подстроки в строку?
24 Мыш
 
11.11.18
09:24
(23) СтрНайти
25 Мимохожий Однако
 
11.11.18
09:39
офф:"угадал все буквы,но не смог назвать слово"
26 osa1C
 
11.11.18
10:03
(22) неужели традиция форума ещё сохранилась? Я думал уже все забыли о ней
27 lEvGl
 
гуру
11.11.18
10:03
(25) пусть разбирается, че, первая функция в жизни должна запомниться навсегда
28 БИР
 
11.11.18
11:57
(22) Фото загрузила, пол сменила. Надеюсь поможет...
29 Михаил Иванович
 
11.11.18
13:19
(28) "Фото загрузила, пол сменила" -  а теперь замуж.
30 osa1C
 
11.11.18
13:45
(28) теперь конечно поможет. Традиция форума ... девушки только с фото, тогда любой готов помочь по любому вопросу
31 ejikbeznojek
 
12.11.18
10:56
Обманули девушку то?)
32 NorthWind
 
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 по СтрЧислоСтрок(МногострочнаяСтрока) Цикл
   Сообщить(СтрПолучитьСтроку(МногострочнаяСтрока,СчЦ));
КонецЦикла;
Как данный код прописать для каждого, после цикла Сообщение.Получатели.Добавить я уже второй день не могу решить данную головоломку. Везде ошибка "интератор не определен".
36 hhhh
 
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) Спасибо, попробую.
47 tesseract
 
13.11.18
13:06
(39) В сторону найма программиста.
48 БИР
 
13.11.18
13:08
(47) Мир не без добрых людей.
49 novichok79
 
13.11.18
13:09
(48) иногда быстрее и дешевле нанять профессионала, чем потом исправлять допущенные ошибки.
50 ДенисЧ
 
13.11.18
13:10
(49) А если такие задачи возникают постоянно? Сейчас поковыряется, научится, а через год таких, как ты будет сама тут учить и тыкать носом...
51 novichok79
 
13.11.18
13:14
(50) если задачи будут именно такими, то эта девушка станет экспертом по работе с стрразделить...
что будет учить - возможно, но вот чему-то новому научить - маловероятно.
52 novichok79
 
13.11.18
13:17
(50) чтобы быть хорошим айтишником, этим надо жить... желательно с детства, ибо стек технологий очень широк и постоянно расширяется.
53 Garykom
 
гуру
13.11.18
13:32
(52) Когда стек технологий слишком уширяется и выходит за пределы возможностей людей то происходит специализация с жестким разделением на разные профессии, которым надо учиться отдельно.

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

Это у которых с SQL и математикой плохо, а с языком хорошо?
63 БИР
 
14.11.18
05:54
Подскажите, почему при отправке письма из строки читается только последний адрес электронной почты, а при просмотре массив показывает правильно. В чем может быть дело?
64 hhhh
 
14.11.18
07:10
(63) ну вы покажите как отправляете
Все на каких-то экстрасенсов надеетесь? Которые по завихрпнию колец Сатурна определят, почему у вас письмо не отправляется.
65 Nikoss
 
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
И покажите весь код, включая добавление получателей в цикле.
70 hhhh
 
14.11.18
08:24
(65) ты не прав, стрРазделить работает в десятки тысяч раз быстрее типовых процедур. У меня была задача: разобрать текстовую строку, состоящую из 18000 строк. При помощи цикла и типовых процедур из 1с выполнялось около минуты. Заменил на СтрРазделить, теперь выполняется практически мгновенно, меньше секунды.
71 БИР
 
14.11.18
08:25
(69) У меня нет получателей в цикле. у меня из массива в сообщения встает Стр
72 Мелифаро
 
14.11.18
08:28
(71) Что?
Вам надо добавить получателей, как вы их добавляете из массива строк?
73 Nikoss
 
14.11.18
08:30
(70) у меня немного другая ситуация была.
Что-то типа 500к строк в цикле, с разделением каждой (по 32 значения в каждой строке)
74 dezss
 
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
Дерзайте =)
85 novichok79
 
14.11.18
11:32
(62) нет, чуваки - профи.
86 БИР
 
15.11.18
18:26
Всем привет. Сегодня расстроилась... открыла внешний отчет в основной программе и у меня функция СТрразделить не сработала. В чем может быть дело? Почему в тесте работает без проблем, а в основной безе с проблемами.
87 FIXXXL
 
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
написала новый код:
Строка = Контрагент.адресЭлектроннойПочты;
МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокув МассивПодстрок(строка, ",", Символы.ПС);
Для Каждого Строка ИЗ МассивСтрок цикл
Сообщение.Получатели.Добавить(Строка)
КонецЦикла;

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

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