11.11.2010, 15:53 | #1 |
Участник
|
Автоматизация отправки накладной по e-mail
Стоит задача автоматизации процесса отправки накладной Торг-12.
Сейчас процесс выглядит следующим образом. Есть Приемо-сдатчики, которые напрямую работают при отгрузке груза, они же Разносят накладную и формируют пакет документов для водителей (ТТН). Есть менеждеры, которые работаю с клиентами (формируют заказы, ведут переговоры и тд). Менеджеры отправляют своим клиентам по почте ТОРГ-12. Делают это вручную, импортируют ТОРГ-12 в PDF, потом отправляют вложением. На эту работу уходит много времени, и автоматизация данного процесса необходима. Ищу правильное решение, дабы не наломать дров, не изобретать велосипед. Желательно максимально приближенно к стандартному функционалу. Прошу совета в каком направлении смотреть? |
|
11.11.2010, 16:13 | #2 |
Ищущий знания...
|
В стандарте когда выводится аксаптовский репорт, его можно не только экспортнуть в файл или отправить на принтер, но и отправить по почте.
Можете написать функцию, которая по определенным параметрам будет отправлять эти накладные на почту клиентов, используя стандартный механизм.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
11.11.2010, 17:00 | #3 |
Участник
|
Цитата:
А как можно программно сгенерировать отчет? Может есть похожий пример? |
|
11.11.2010, 17:26 | #4 |
Участник
|
В вашем случае можно доработать обработку накладной по конкретному заказу следующим образом:
- автоматически заполнять емайл клиента и тему письма в настройках печати документа и при разноске накладной с галочкой "Печать" письмо с накладной должно отправляться клиенту. |
|
11.11.2010, 19:30 | #5 |
Участник
|
Сформировать файл из накладной программно - не сложно.
Какая у вас версия Аксапта ? Например, для 3-й версии будет работать так (пример) X++: static void Job1(Args _args) { custInvoiceJour custInvoiceJour; PrintJobSettings printJobSettings = new PrintJobSettings(); SalesReport_Invoice_RU SalesReport_Invoice_RU = new SalesReport_Invoice_RU(); ; custInvoiceJour = custInvoiceJour::findRecId(449627); printJobSettings.setTarget(PrintMedium::File); printJobSettings.format(PrintFormat::RTF); printJobSettings.fileName("c:\\invoice.rtf"); SalesReport_Invoice_RU.setParameters(PrintCopyOriginal::Original, custInvoiceJour); if (SalesReport_Invoice_RU.prompt()) { SalesReport_Invoice_RU.printJobSettings().unpackPrintJobSettings(printJobSettings.packPrintJobSettings()); SalesReport_Invoice_RU.run(); } } Можно отправлять этот файл через почтовый клиент Аксапты (SysMailer), (с сервера пакетной обработки например). Можно отправить с клиента, открыв оператору его почтовый клиент с вложенным файлом, подготовленным на предыдущем этапе. (ну и конечно, заполненным адресом получателем, темой и текстом сообщения). Оператору остается лишь нажать кнопку "отправить" Тут все зависит от типа почтового клиента, который используется в вашей комании (thebat, Outlook, OutlookExpress и так далее) Например этот код отправляет письмо открывая почтовый клиент пользователя по умолчанию: X++: boolean sendMAPI(str _to, str _cc, str _subj, str _text, FileName _attachFileName = "") { #Mapi Mapi mapi = new Mapi(); MapiMessage msg = new MapiMessage(); MapiRecipDesc recip = new MapiRecipDesc(); MapiFileDesc file = new MapiFileDesc(); ; recip.Name(_to); recip.RecipClass(#MAPI_TO); msg.setRecipNo(1, recip); if (_cc) { recip.Name(_cc); recip.RecipClass(#MAPI_CC); msg.setRecipNo(2, recip); } msg.subject(_subj); msg.text(_text); if (_attachFileName) { file.fileName(_attachFileName); msg.setFileNo(1, file); } mapi.Logon("", "", #MAPI_USE_DEFAULT); mapi.SendMail(msg, #MAPI_DIALOG); mapi.Logoff(); return true; } Если интересно - могу привести код отправки письма с вложением через COM интерфейс Outlook |
|
|
За это сообщение автора поблагодарили: erudit (2), BOAL (2), ena_ax (1), fedka (1). |
11.11.2010, 19:46 | #6 |
Участник
|
|
|
11.11.2010, 19:50 | #7 |
Участник
|
Все просто в общем то...
X++: boolean sendOutlook(str _to, str _cc, str _subj, str _text, FileName _attachFileName = "") { COM outlook = new COM("Outlook.Application"); COM letter = Outlook.CreateItem(""); COM attachments; ; letter.To(_to); letter.CC(_cc); letter.Subject(_subj); letter.Body(_text); if (_attachFileName) { attachments = letter.Attachments(); attachments.add(_attachFileName); } letter.display(); return true; } Последний раз редактировалось someOne; 11.11.2010 в 19:52. |
|
12.11.2010, 08:17 | #8 |
Участник
|
У меня Axapta 4.0
Коллеги спасибо за идеи, и особенно за приведенный код. Буду пробовать. |
|
19.06.2015, 15:58 | #9 |
Участник
|
pdf
Попробовал воспользоваться примером. Получил "Ошибка времени выполнения. Неправильный тип номера поля". Как мне ее исправить? Искал по форуму решения, и нашел рекомендацию, что какие то связи в DataSource не созданы-не понял что имелось ввиду, или может это не то.
Ax3.0sp5fp2 Последний раз редактировалось BokarevSS; 19.06.2015 в 16:05. |
|
20.06.2015, 15:26 | #10 |
Участник
|
|
|
|
|