Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 сен 2024, 04:21

В созданном через 1с в "the bat" письме не ставятся абзацы

Автор Sanz, 15 дек 2014, 11:04

0 Пользователей и 1 гость просматривают эту тему.

Sanz

Добрый день!
В 1с почту настроить не получится, руководство строго против. Создала кнопку, по которой автоматически создается новое письмо в почтовой программе по умолчанию (в нашем случае the bat) с уже заданным телом письма. Тело письма берется из элемента формы, элемент с неограниченной длиной и многострочным режимом.


Процедура ДействияФормыПисьмо(Кнопка)
//Запускает почтовую прогу установленную по умолчанию и в текст письма вставляет значение из поля "результат":
RunApp("mailto:?Body="+Результат +"");
КонецПроцедуры

Все работает на ура, проблема только в том, что из поля "результат" все пишется в одну строку без абзацев. А они нужны, очень.
Может у кого есть идея как мне поставить знаки абзаца в конце каждой строки?

cska-fanat-kz

может получится текст из поля сохранить в тестовый файл и попытаться его подсунуть Бату?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

cska-fanat-kz

может покопаться в справке Бата на тему параметров командной строки...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Sanz

Да дело в том, что не в бате проблема - если по умолчанию стоит аутлук, то там та же беда. То есть проблема не в почтовой программе, а т свойствах передаваемого из 1с текста
Добавлено: 15 дек 2014, 15:49


может поможет покопаться в свойствах поля ввода, например, "маска"?

Маска определяющая ввод символов в строке (может содержать определенные символы и специальные символы маски)

Sanz

Задачу решила, если еще есть такие извращенцы-говнокодеры как я :nhsrm:, пишу решение.

Пояснения:
0) чтобы делелся перенос на др.строку нужно знак переноса (это "Символы.ПС")заменить на значок  переноса для почтового агента (%0D).
1) если в тексте будут кавычки, то дальнейший текст после них обрежется,поэтому можем заменить кавычки: ТекстБезКавычек = СтрЗаменить(Текст,Символ(34),"``");
2) а вот так он будет писать все не обрезая, но не ставить сами кавычки: ТекстБезКавычек = СтрЗаменить(Текст,Символ(34),Символ(34)+Символ(34));
3) чтоб все кавычки писались нормально (а не как описано выше в п.2 и 3) заменяем обычные кавычки на кавычки-ёлочки при помощи функции ЗаменитьКавычкиНаЕлочки(текст):

Процедура ДействияФормыПисьмо(Кнопка)

Текст= ЭлементыФормы.Результат.Значение;
ТекстБезКавычек = ЗаменитьКавычкиНаЕлочки(текст);
ТекстПисьма = СтрЗаменить(ТекстБезКавычек,Символы.ПС,"%0D");
RunApp("mailto:?Body="+ТекстПисьма +"");
КонецПроцедуры


//спасибо Sergey с другого фрума!
Функция ЗаменитьКавычкиНаЕлочки(Знач ИсходныйТекст) Экспорт
Текст= ЭлементыФормы.ЗадачаРезультат.Значение;
   Если Не ЗначениеЗаполнено(Текст) Тогда
      Возврат Текст;
   КонецЕсли;
   ДвойнаяКавычка = """";
   КоличествоКавычек = СтрЧислоВхождений(Текст, ДвойнаяКавычка);
   // Если количество кавычек меньше двух, ничего не делаем, так как нет смысла закрывать/открывать
   Если КоличествоКавычек < 2 Тогда
      Возврат Текст;
   КонецЕсли;
   ЛеваяКавычка = "«";
   ПраваяКавычка = "»";
   БуквыИЦифры = "0123456789ABCDEFGHIKLMNJOPQRSTUVWXYZ";
   БуквыИЦифры = БуквыИЦифры + "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
   Результат = "";
   ПозицияКавычки = Найти(Текст, ДвойнаяКавычка);
   Пока ПозицияКавычки > 0 Цикл
      Если ПозицияКавычки = СтрДлина(Текст) Тогда
         // Если конец строки заканчивается кавычкой
         ИсходныйТекст = Лев(Текст, ПозицияКавычки - 1) + ПраваяКавычка; //
      Иначе
         // Если впереди кавычки идут буквы и цифры, - ставим открывающую "«"
         // Если любые другие символы, - ставим закрывающую "»"
         СледующийСимвол = ВРег(Сред(Текст, ПозицияКавычки + 1, 1));
         СтрокаЗамены = ?((Найти(БуквыИЦифры, СледующийСимвол) > 0) Или (ПозицияКавычки = 1), ЛеваяКавычка, ПраваяКавычка); //
         Текст = Лев(Текст, ПозицияКавычки - 1) + СтрокаЗамены + Сред(Текст, ПозицияКавычки + 1); //
      КонецЕсли;
      // Если количество кавычек после последней замены осталось меньше двух, ничего не делаем, так как нет смысла закрывать/открывать
      КоличествоКавычек = СтрЧислоВхождений(Текст, ДвойнаяКавычка);
      Если СтрокаЗамены = ПраваяКавычка И КоличествоКавычек < 2 Тогда
         ПозицияКавычки = 0;
      Иначе
         ПозицияКавычки = Найти(Текст, ДвойнаяКавычка);
      КонецЕсли;
   КонецЦикла;
   Возврат Текст;
КонецФункции // ЗаменитьКавычкиНаЕлочки()


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск