Отправка печатных форм по e-mail



Отправка печатных документов, отчетов и пр. форм по e-mail.
  • Для работы потребуются 2 библиотеки: FormEx.dll и SpreadSheet.dll.
  • Файл с обработкой положить в каталог. Например: каталог БДОбработки.
  • Создать на диске каталог для записи отправленных файлов. Например: каталог ИБ.
  • В конфигураторе БД: Интерфейсы -> Редактировать панели инструментов -> добавить новую кнопку:
  • Объект —> Задача
  • Команда ->Задача.Выполнить
  • В параметрах прописать формулу: ОткрытьФорму("Отчет",,КаталогИБ() + "ОбработкиДиалогОтправкаНаМыло.ert") – в кавычках каталог, где лежит обработка.
  • В конфигураторе открыть обработку:
  • заполнить параметры ящика для отправки:
  • SMTPСервер – ://../// — для — smtp.gmail.com.
  • SMTPПорт – http://schemas.microsoft.com/cdo/configuration/smtpserverport — для — 465.
  • ПротоколШифрования – http://schemas.microsoft.com/cdo/configuration/smtpusessl — для — -1 (минус один).
  • Отправитель — http://schemas.microsoft.com/cdo/configuration/sendusername — ящик.
  • Пароль — http://schemas.microsoft.com/cdo/configuration/sendpassword — пароль.
  • Текст письма.
  • прописать КаталогДляЗаписи (сохранение отправленных файлов).

Вышеуказанные переменные находятся в операторах основной программы (в конце модуля).

  • Сохранить изменения в обработке и конфигураторе, запустить предприятие, открыть печатную форму и можно работать.

Открытая печатная форма сохраняется в файл формата PDF.

42 Comments

  1. CheBurator

    Плюсую как за сильно упрощенный бесплатный вариант 😉

    а так — возьмтите себе (но платно) http://infostart.ru/public/14131/ и http://infostart.ru/public/14180/

    Reply
  2. Gkmy
    мСервис = СоздатьОбъект(«Сервис»);

    {C:USERS888DESKTOPДИАЛОГОТПРАВКАНАМЫЛО.ERT(54)}: Неудачная попытка создания объекта (Сервис)
    Reply
  3. Gkmy
    Йоксель = СоздатьОбъект(«ТабличныйДокумент»);

    {C:USERS888DESKTOPДИАЛОГОТПРАВКАНАМЫЛО.ERT(107)}: Неудачная попытка создания объекта (ТабличныйДокумент)
    Reply
  4. Gkmy
    Конвертер = СоздатьОбъект(«Йоксель.ГрафическийКонвертер.PDF»);

    {C:USERS888DESKTOPДИАЛОГОТПРАВКАНАМЫЛО.ERT(118)}: Неудачная попытка создания объекта (Йоксель.ГрафическийКонвертер.PDF)
    Reply
  5. Gkmy

    Как устранить причины ошибок (2) и (3) разобрался. Что делать с (4) — ума не приложу

    Reply
  6. Gkmy
    Конвертер.ЗаписатьВФайл(КаталогДляЗаписи);

    {C:USERS888DESKTOPДИАЛОГОТПРАВКАНАМЫЛО.ERT(140)}: File open error
    Reply
  7. Gkmy

    ..

    Reply
  8. Gkmy

    (1)

    в:

    http://infostart.ru/public/14131/ [ECDO] Отсылка писем из 1С без проблем — одна из лучших разработок!

    http://infostart.ru/public/14180/ [ЭВРИКА] МАЛЕНЬКИЙ ШЕДЕВР 1.8 Мгновенная отправка по почте ЛЮБОЙ печатной формы БЕЗ ИЗМЕНЕНИЯ КОДА

    — тоже используется:

    Письмо = СоздатьОбъект(«CDO.Message»);
    **
    Письмо.Send();
    

    ??

    Reply
  9. Доня

    для какой конфигурации ?

    Reply
  10. CheBurator

    (8) да, используется CDO

    разработка фурычит на нескольких тысячах емайлов разных контор

    Reply
  11. АннаШ

    (6) SpredSheet.dll — установлена? Каталог для записи создан?

    Reply
  12. АннаШ

    (9) Разрабатывалось для ТиС. На ней же тестировалось (чистая БД).

    По-моему, и для бухгалтерии должно работать: (важно) в контрагентах поле «Адрес электронной почты».

    Reply
  13. Доня

    вылетает:

    Конвертер.ЗаписатьВФайл(КаталогДляЗаписи);

    {J:1SBDBBНЕШНИЕОТЧЕТЫОТПРАВКА ИЗ 1С ПО EMAILДИАЛОГОТПРАВКАНАМЫЛО.ERT(138)}: File open error

    Я создала в ИБ просто Папку «КаталогДляЗаписи»

    но ругается на это обработка

    Опишите по-подробнее про каталог

    >> прописать КаталогДляЗаписи (сохранение отправленных файлов).

    как прописать ???

    Reply
  14. Доня

    Спасибо!

    Все получилось в 1с7 Бухгалтерия

    Очень удобно

    Плюс

    Reply
  15. Доня

    Замечание:

    При отправке формируется только в портрет

    в ландшафт не переводит ни с кнопкой ни без кнопки

    Почему ?

    Reply
  16. АннаШ

    (15) На форме переключатель «Ориентация» не срабатывает? То есть — в любом случае — портрет?

    А в pdf сохраняет?

    Reply
  17. Доня

    кнопки перепутаны.

    если ставить на портрет, то отсылается в pdf в альбомном, и наоборот

    Reply
  18. АннаШ

    (17) Вот эти строчки:

    // ориентация печ. формы: для всех, кроме счета — 1 (альбомная)
    Если (СтрОриентация = 1) Тогда
    Конвертер.ВысотаСтраницы = 210*56.7;
    Конвертер.ШиринаСтраницы = 297*56.7;
    Иначе
    Конвертер.ВысотаСтраницы = 297*56.7;
    Конвертер.ШиринаСтраницы = 210*56.7;
    КонецЕсли;

    отвечают за ориентацию.

    Reply
  19. Доня

    если поменять местами

    // ориентация печ. формы: для всех, кроме счета — 1 (альбомная)
    Если (СтрОриентация = 1) Тогда
    Конвертер.ВысотаСтраницы = 297*56.7;
    Конвертер.ШиринаСтраницы = 210*56.7 ;
    Иначе
    Конвертер.ВысотаСтраницы = 210*56.7 ;
    Конвертер.ШиринаСтраницы = 297*56.7;
    КонецЕсли; 

    тогда все встает на свои места

    портрет = портрет

    ландшафт = ландшафт

    Reply
  20. АннаШ

    (19) Спасибо. Исправлю.

    Reply
  21. АннаШ

    Исправила.

    Reply
  22. АннаШ

    По поводу подписей и печати:

    у меня формируется pdf — файл, в котором и подписи, и печати есть (используется bmp_1C). Получается (типа) скан, только без сканирования.

    Reply
  23. CheBurator

    Анна. а что такое bmp_1C?

    Reply
  24. АннаШ

    (23) Бесплатная внешняя компонента

    Reply
  25. CheBurator

    (24) а делает она что?

    Reply
  26. lostlamer

    Полезная вещь ActiveX элемент управления bmp_1c.ocx- автор Морев Андрей — используется непосредственно для отображения картинок в таблице http://www.1cpp.ru/forum/YaBB.pl?num=1338556939/all

    здесь код для 1CPP++ с использованием класса «ИзображенияДляТаблицы»

    Печ = СоздатьОбъект(«ИзображенияДляТаблицы»);
    Печ.ПодключитьТаблицу(Таблица);
    Печ.ЕстьПроизвольноеСмещение = 1;
    Печ.ЕстьПроизвольныйПоворот = 0;
    Печ.ДобавитьИзображение(2,5,70,50,»C:Подпись.gif»,2);
    Reply
  27. АннаШ

    (25) У меня она делает: логотип на печ. форме счета, подписи и печати на сканах печ. форм реализации.

    Reply
  28. user1089352

    (12) У меня 1С 7.7 редакция 4.5 бухгалтерия, в контрагентах поля для «Адрес эл. почты», вообще нет! Ну или я не нашел как его включить! Я внес изменения в «модуле»,

    // адрес почты контрагента

    Адрес = СокрЛП(ВыбКонтрагент.ПочтовыйАдрес)

    Получается в поле «ПочтовыйАдрес», вписываю e-mail.

    Он корректно подставляется в поле «получатель» при выборе контрагента.

    Но в итоге, при отправке выскакивает ошибка «CDO.Messadge1.: Транспорту не удалось подключиться к серверу»

    Помогите разобраться! С чем эта ошибка может быть связана?

    Как её устранить?

    Reply
  29. user1089352

    (28) Я понимаю, что способ подменить поля, он кривой, и потом в шаблоне таблицы «торг12» придется правки делать. Может быть еще подскажите, как в «редакции 4.5», в «контрагентах» добавить поле для ввода e-mail? Если конечно это возможно?

    Reply
  30. АннаШ

    (28) Попробуйте поиграться с ПротоколШифрования (0, 1, -1).

    Ну, и порты, сервер (SMTPСервер, SMTPПорт). Еще и smtpusessl.

    Я все эти настройки брала из своего бата.

    Reply
  31. user1089352

    (30) Спасибо за ответ!

    Все заработало! Проблема была в файрволе, он сволочь блокировал.

    Я сейчас пытаюсь еще несколько вопросов решить. Может поможете?

    1. Как в «Модуле» прописать, чтобы в «Тему письма» и «Имя файла PDF», по умолчанию подставлялась строка из отправляемой формы, к примеры: «Счет № 000 от 21 Ноября 2018 г.»???

    2. У меня почтовый SMTPСервер — «smtp.mail.ru», отправленные письма при помощи этой разработки, в папку «Отправленные», не попадают! Эти письма, вообще где-то сохраняются? Если да — то, где? Если нет — то, можно ли настроить, чтобы они в папку «Отправленные» попадали?

    3. И самый главный вопрос, который я сейчас «гуглю»! Можно ли в моей «1с7.7 редакция 4.5», добавить поле для ввода E-mail, при внесении нового «контрагента»?

    Пожалуйста помогите решить эти вопросы!!!

    Reply
  32. АннаШ

    (31) 1. Тема = СокрЛ(ИмяФайла);

    2. Я не смогла добиться сохранения этих писем.

    3. В конфигураторе в справочнике «Контрагенты» добавить, вынести на форму.

    Reply
  33. user1089352

    (32) Когда прописано «Тема = СокрЛ(ИмяФайла);», в тему письма подставляется надпись «Печать», а файл PDF, вообще без имени отправляется!

    Reply
  34. АннаШ

    (33) А этого куска, что нет?

    // смотрим — откуда вызвали диалог
    мНомер = «»; // для номера актов передачи-возврата оборудования
    Если (ПустоеЗначение(глОткрытыйДокумент) = 0) Тогда  // из печатной формы документа
    // формат печ. формы: для всех, кроме реализации (ТОРГ-12, акт) и счета-фактуры — альбомная ориентация (2)
    Если (Найти(ИмяТаблицы, «Реализация») > 0) Тогда
    СтрОриентация  = 1;
    мЗаголовок  = «Реализация»;
    ИначеЕсли (Найти(ИмяТаблицы, «фактура») > 0) Тогда
    СтрОриентация  = 1;
    мЗаголовок  = «Счет-фактура»;
    ИначеЕсли (Найти(ИмяТаблицы, «Заявка») > 0) Тогда
    СтрОриентация  = 2;
    мЗаголовок  = «Заявка»;
    ИначеЕсли (Найти(ИмяТаблицы, «Счет») > 0) Тогда
    СтрОриентация   = 2;
    мЗаголовок   = «Счет»;
    ИначеЕсли (Найти(ИмяТаблицы, «Коммерческое») > 0) Тогда
    СтрОриентация   = 2;
    мЗаголовок   = «Коммерческое предложение»;
    ИначеЕсли (Найти(ИмяТаблицы, «Наряд») > 0) Тогда
    СтрОриентация   = 2;
    мЗаголовок   = «Наряд на выполнение работ»;
    ИначеЕсли (Найти(ИмяТаблицы, «Акт передачи оборудования») > 0) Тогда
    СтрОриентация  = 2;
    мНомер   = «-П»;
    мЗаголовок  = «Акт передачи оборудования»;
    ИначеЕсли (Найти(ИмяТаблицы, «Акт возврата оборудования») > 0) Тогда
    СтрОриентация  = 2;
    мНомер   = «-В»;
    мЗаголовок  = «Акт возврата оборудования»;
    КонецЕсли;
    
    ТекДок = глОткрытыйДокумент.ТекущийДокумент(); // открытый документ
    
    Контрагент = ТекДок.Контрагент;
    Адрес     = СокрЛП(Контрагент.ЭлПочта);
    
    // для заполнения темы письма
    мЗаголовок = СокрЛП(мЗаголовок + » № » + СокрЛП(глНомерНаПечать(ТекДок) + мНомер) + » от » + Нрег(Формат(ТекДок.ДатаДок, «Д ДДММММГГГГ»)));
    
    // имя файла
    ИмяФайла  = СокрЛП(СтрЗаменить(мЗаголовок, «№ «, «»));
    
    ИначеЕсли (ПустоеЗначение(глОткрытаяФорма) = 0) Тогда // из отчета, обработки
    
    Если (Найти(ИмяТаблицы, «Акт сверки») > 0) Тогда  // из акта сверки
    мЗаголовок = «Акт сверки «;
    ИмяТаблицы = СокрЛП(ИмяТаблицы);
    
    ДлинаИмяКонтрагента = СтрДлина(ИмяТаблицы);
    ИмяКонтрагента   = СокрЛП(Сред(ИмяТаблицы, 11, ДлинаИмяКонтрагента — 11));
    СпрКонтрагенты   = СоздатьОбъект(«Справочник.Контрагенты»);
    СпрКонтрагенты.НайтиПоНаименованию(СокрЛП(ИмяКонтрагента), 0);
    ТекКонтрагент   = СпрКонтрагенты.ТекущийЭлемент();
    Контрагент   = ТекКонтрагент;
    Адрес       = СокрЛП(ТекКонтрагент.ЭлПочта);
    
    // для заполнения темы письма
    мЗаголовок = СокрЛП(мЗаголовок + СокрЛП(ТекКонтрагент));
    
    // имя файла
    ИмяФайла  = мЗаголовок + «.»;
    
    СтрОриентация = 2;
    КонецЕсли;
    
    Иначе
    Предупреждение(«Открытая печатная форма не отправляется по электронной почте.»);
    СтатусВозврата(0);
    Возврат;
    
    КонецЕсли;

    Показать

    Reply
  35. user1089352

    (34) Нет! Нету! А этот кусок где вставлять? Я что-то совсем потерялся в этой абра-кадабре!)))

    Вот, что выдает:

    Если (ПустоеЗначение(глОткрытыйДокумент<<?>>) = 0) Тогда // из печатной формы документа

    {Отчет.КаталогИБмыло.Форма.Модуль(237)}: Переменная не определена (глОткрытыйДокумент)

    ТекДок = глОткрытыйДокумент<<?>>.ТекущийДокумент(); // открытый документ

    {Отчет.КаталогИБмыло.Форма.Модуль(267)}: Переменная не определена (глОткрытыйДокумент)

    мЗаголовок = СокрЛП(мЗаголовок + » № » + СокрЛП(глНомерНаПечать<<?>>(ТекДок) + мНомер) + » от » + Нрег(Формат(ТекДок.ДатаДок, «Д ДДММММГГГГ»)));

    {Отчет.КаталогИБмыло.Форма.Модуль(273)}: Функция не обнаружена (глНомерНаПечать)

    ИначеЕсли (ПустоеЗначение(глОткрытаяФорма<<?>>) = 0) Тогда // из отчета, обработки

    {Отчет.КаталогИБмыло.Форма.Модуль(278)}: Переменная не определена (глОткрытаяФорма)

    Возврат<<?>>;

    {Отчет.КаталогИБмыло.Форма.Модуль(304)}: Оператор Return (Возврат) не может употребляться вне процедуры или функции

    Reply
  36. CheBurator

    надо было мою разработку брать 😉

    у меня можно в тему письма подставлять имя прикрепляемого файла.

    а прикрепляемый файл можно именовать автоматом на выбор:

    — имя вводит пользователь

    — имя генерится случайное типа Т-дата-время

    — имя генерится из заголовка печатной формы

    примерно вот такая форма настройки

    https://www.screencast.com/t/yEGzoig0w

    Reply
  37. user1089352

    (32)

    2. Я не смогла добиться сохранения этих писем.

    Как реализовать эту возможность в скрипте, я тоже не нашел способ.

    Я поступил по другому.

    Прописал так: Адрес = СокрЛП(ВыбКонтрагент.ЭлПочта) + «,» + («мой ящик@mail.ru»);

    В результате, письмо отправляется, «контрагенту» и «самому себе», попадая во входящие!

    А в настройках почтового ящика, настроил фильтр!

    1. Для папки «Отправленные», создал подпапку «Счета клиентам» (на данный момент, этот скрипт я использую только для отправки выставленных счетов.)

    2. Фильтр содержит два условия:

    Все «входящие», со следующими параметрами:

    — Письма от: «мой ящик@mail.ru»

    — Тема содержит: «Счет на оплату» (в скрипте, тему письма, я прописал «Счет на оплату»)

    Перенаправляются в подпапку «Счета клиентам»!

    Ну!))) Из-за не умения писать скрипты, пришлось выкручиваться!)))))

    «АннаШ», у меня к Вам просьба, помогите пожалуйста, все же настроить, чтобы «тема письма» и «имя файла.pdf», автоматически прописывались, «Счет № ???? от 00 месяца 201? г.»!!???

    (34) А этого куска, что нет?

    Тот «кусок», про который Вы говорите, я так и не «догнал», как его правильно встроить в общий контекст??? Подскажите, если не сложно!

    Reply
  38. АннаШ

    (37) В ПриОткрытии:

    ИмяФайла  = СокрЛП(Лев(ИмяТаблицы,Найти(ИмяТаблицы, » «)));

    попробуйте заменить на

    мЗаголовок = СокрЛП(мЗаголовок + » № » + СокрЛП(глНомерНаПечать(ТекДок) + мНомер) + » от » + Нрег(Формат(ТекДок.ДатаДок, «Д ДДММММГГГГ»)));
    
    // имя файла
    ИмяФайла  = СокрЛП(СтрЗаменить(мЗаголовок, «№ «, «»));

    мЗаголовок = ИмяТаблицы (имя печ. формы, задается в конфигураторе).

    Ну, а ТекДок — это тек. док-т (из которого вызывана печ. форма).

    Расширение — думаю, справитесь сами 🙂

    Reply
  39. АннаШ

    (36) Уважаемый!

    Вы слегка достали уже.

    Reply
  40. CheBurator

    (39) Я пока вижу, что пока достан только клиент 😉

    Не нравятся чтобы писали в комменты — отключите возможность комментирования.

    Reply
  41. АннаШ

    (40) Зависть — плохое чувство 🙁

    Reply
  42. CheBurator

    (41) и я такого же мнения!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *