Имя: Пароль:
1C
1С v8
1C: Документооборот Можно ли настроить старт БП по получению электронного письма
0 Strelolga
 
29.03.16
14:42
Добрый день! Внедряем 1с документооборот 2.0 корп.
Возникла необходимость: пользователь отправляет письмо на почтовый ящик (создали отдельный, завели учетку в Документообороте, письма получить можно). при получении письма автоматически стартует БП, состоящий из уведомления и поручения? И как реализовать старт при получении письма?
1 AceVi
 
29.03.16
15:05
(0) И в чем проблема то? Я делал такой функционал, правда стандартную конфу чуть дописывал(хотя мог бы и полностью весь функционал в отдельный(свой) модуль вынести, просто скопировал бы кусок стандартного).
Делаешь рег задание которое каждые 10 минут читает почту.
почту читать 1С умеет. сделай для письма какие либо обязательные символы(например - самые 3 ервых символа это управляющий код для создания того или иного задания) и обяжи пользователей их проставлять. или даже проще - все письма которые приходят на конкретный почтовый адрес - преобразуються в задачи в 1С.
Ты проблему уточни, что конкретно не знаешь как делать.
2 Strelolga
 
29.03.16
15:10
Ну вот получила я почту. Есть кнопку - создать входящий документ. Создала шаблон входящего документа - Письмо. Я хочу чтобы, когда приходит письмо на конкретный адрес, стартовался БП, состоящий из 1ой функции: поручение отдела бухгалтерии ввести нового контрагента в программу и все. Про рег задания я поняла - рег заданием создаю из письма документ входящий. так?
3 vde69
 
29.03.16
15:18
(2) не стоит поручать почте то, что ДОЛЖЕН делать юзер !!!!

Пусть заходят в документооборот и делают нормальный БП...

все эти "управление через почту" вылезает боком хотя-бы по причине глюков почты (не дошло, или дошло несколько раз, или на него ответили)

почту можно использовать только для получения уведомлений но никак не для управления...
4 AceVi
 
29.03.16
15:18
(2) сначала напиши полный круг задач которые будут запускаться из писем, а потом пронумеруй их.
Например : СОздание контрагента - 001, Оплата счета - 002 и т.д. - и сделай что бы этот номер был обязательно первые 3 символа в письме. иначе письмо не будет зарегестрировано в 1С как задача. Вот у тебя теперь есть четкое понимание для какой задачи письмо.
Потом создавай на каждую задачу шаблон. и когда приходит письмо с тем или иным кодом создаешь задачу и заполняешь ее по соответсвующему шаблону(там есть стандартные функции для этого)
5 AceVi
 
29.03.16
15:21
(3) ага, я 100 раз говорил это людям - но собственники хотят только так и никак иначе(например в моем случае согласовывать любые счета только через почту не заходя в 1С).
6 vde69
 
29.03.16
15:23
(5) это не возможно... если хотят не залазить в 1с, то есть 2 варианта

1. завести для них секретуток, которые будут за них в 1с работать
2. сделать для них отдельную WEB морду (можно даже похожую на почту) и пусть хоть с телефона согласуют
7 AceVi
 
29.03.16
15:31
(6) Очень даже возможно - я же сделал(причем там целая цепочка задач). Просто у пользователя всегда перед глазами в нужный момент напоминалка(например формат не подходит - 1с в ответном письме спрашивает и уточняет задание - например говорит - возможно вы имелли ввиду задачу "Завести контрагента - 001" и пользователь уже точно пришлет верное письмо.

1. Дорого - деньги - зачем? если можно условиться о паре значений и определенных форм письма.
2.  предлагал - не хотят - хотят с помощью своей почты управлять согласованием и другими процессами.
8 vde69
 
29.03.16
15:35
(7) создание БП - это транзакция, почта не имеет к транзакциям никакого отношения, она не может отслеживать получение письма в целостности....

конечно тут как говорится на цвет и вкус все фломастеры разные, но задай им вопрос "почему клиент банки на почте не делают????"
9 Strelolga
 
29.03.16
15:40
(4)Потом создавай на каждую задачу шаблон. и когда приходит письмо с тем или иным кодом создаешь задачу и заполняешь ее по соответсвующему шаблону(там есть стандартные функции для этого)

Создала шаблон вх документа - письмо
создала шаблон БП - согласование заявок на заведение контрагента
как создать задачу, если пришло письмо с заданным кодом? (через регламентное задание?)
10 AceVi
 
29.03.16
15:40
(8) Потому что безопастность? Структурированные данные?
А так у меня к нескольким банкам к их выгрузке в 1С пара вопросов. не соблюдают они формат и обязательные поля)

Для управления процессами этого не требуется.
11 vde69
 
29.03.16
15:43
(10) клиент банк - это и есть запуск БП по расходованию текущих ресурсов (денег). БП в документообороте ничем не отличается от заявки в клиент банке, только он расходует обычно не деньги а время, что в общем случае то же деньги...
12 Cyberhawk
 
29.03.16
15:46
Старт заявок (БП) по входящему письму - нормальная практика, много где такое видел, в т.ч. и у себя на одном из фиксов
13 vde69
 
29.03.16
15:46
(11) +
и даже урон компания может получить очень неслабый, например:

стартанули БП "оплатить НДС на сумму 1000тр", у тебя шаблон распознал как 1000 руб (а не лям что было в письме), в результате оплатят только 1/10 налога и кто будет виноват?

начальник - у меня в письме 1000тыр
исполнитель - в БП 1000 руб
программист (доставая вазелин) - ну я не досмотрел....
14 Карупян
 
29.03.16
15:47
(13) Такую умную систему никто и не предлагает
15 Карупян
 
29.03.16
15:48
Старт БП - это не есть старт автоматической обработки данных
16 vde69
 
29.03.16
15:49
(14) уверяю тебя как только запускают на простых, следом идут более сложные задачи... в сабже есть АРХИТЕКТУРНЫЙ косяк который обязательно выскочит и больно ударит...
17 vde69
 
29.03.16
15:50
ответственность за корректность данных в БП на ком????
18 Карупян
 
29.03.16
15:52
(13) По идее должно быть так.
Кинули письмо" Оплатить НДС ххх руб.
Стартовал БП
Ответственный получил уведомление и сформировал платежку
19 Карупян
 
29.03.16
15:53
Примерный аналог, что нач кинул письмо непосредственно исполнителю
20 AceVi
 
29.03.16
15:54
(9) Может все таки ВнутреннийДокумент(и создать вид для него ЭлектронноеПисьмо). а не входящий?

Сейчас уже под рукой нет базы документооборота.
Уточни вопрос - что значит КАК создать? как прочитать письмо? как распознать какое задание создавать из него? как получиться шаблон? как на основании шаблона создать задачу?
(16) (17) Ты слишком заморачиваешься - просто договариваешься - вот шаблон письма все что не подходит под шаблон я ответсвенности не несу и все.
Да есть косяк - но его точно так же можно обойти и свести к минимуму, проблем с этим нет. просто четко налаженный бизнес процесс.
21 vde69
 
29.03.16
15:54
(17)+ почему все загрузки из файлов и т.д. загружают в открытую форму, но не записывают ее ???

по тому, что человек должен взять ответственность за результат на себя, и нажимая кнопку ОК он эту ответственность принимает... Представьте например автоматическую загрузку банковских выписок из клиент банка в фоновом режиме, удобно, классно, но ни один руководитель такое не разрешит....
22 vde69
 
29.03.16
15:55
(20) просто я в банке работал :)
23 Карупян
 
29.03.16
15:57
(22) И поэтому любой БП - это списание и выдача бабла )))
24 AceVi
 
29.03.16
15:59
(21) Аха, пальцем в небо. я делал уже 2 раза автоматическую загрузку банковских выписок. По анализу НазначенияПлатежа. с логами всех действий робота. и все что делает в конце пользователь просто сверяет обороты и все. Есть расхождения копается - нет, его работа закончена. все работает, работу пользователя уменьшили на 90%.
Просто грамотно поставили процесс контроля и все - ошибок при загрузке не пропускаются. Согласись контролировать только ошибки легче чем контролировать загрузку каждого файла и документа в нем.
25 Strelolga
 
29.03.16
16:05
(20) Я думала. что письма - это входящие документы. Есть обработка - загрузка почты. Там вижу письмо. Внизу есть кнопка -создать внутр документ (вход / исход). по этой кнопке создается документ по заданному шаблону. Создала шаблон БП, привязала его к шаблону документа. При создании документа "Заявка" стартуется БП. 1. Видимо, мне необходимо через рек задание сделать нажатие кнопки "создать документ"? 2. В таком случае в базе будут хранится внутренние документы по заведению контрагентов. Можно ли просто хранить письма, как письма а не документы (внтр/вход) и при этом автоматизировать старт БП?
26 AceVi
 
29.03.16
16:15
(25) Надо делать не так. не надо хранить письма как документы базы документооборот. Просто рег заданием читаешь почту и запоминаешь только одно - обработала ты это письмо или нет. Сам текст письма копируешь в описание бизнес процесса и все.
Следовательно создавать нужно только бизнес процессы на основании шаблона.
27 spock
 
29.03.16
16:30
(0) смотри про детекторы бизнес-событий. Настраивается это.
28 Strelolga
 
30.03.16
09:39
(26) пишу регламентную обработку, которая стартует бизнес-процесс приема заявок через электронные письма. Не могу добавить в предмет бизнес-процесса письмо. В шаблоне указала. что основной предмет - письмо (Тип - входящее письмо)

роцедура ВызовСервера()
    
    ИнтернетПрофиль = Новый ИнтернетПочтовыйПрофиль;
    УчЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.НайтиПоНаименованию("[email protected]");
    
    ИнтернетПрофиль.АдресСервераPOP3 = УчЗапись.СерверВходящейПочтыPOP3;
    ИнтернетПрофиль.АдресСервераSMTP = УчЗапись.СерверИсходящейПочтыSMTP;
    
    ИнтернетПрофиль.Пользователь = УчЗапись.Пользователь;
    ИнтернетПрофиль.Пароль = УчЗапись.Пароль;
    ИнтернетПрофиль.ПортPOP3 = УчЗапись.ПортPOP3;
    ИнтернетПрофиль.ПортSMTP = УчЗапись.ПортSMTP;
    ИнтернетПрофиль.ПарольSMTP = УчЗапись.ПарольSMTP;
    ИнтернетПрофиль.ПользовательSMTP = УчЗапись.ПользовательSMTP;
    ИнтернетПрофиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
    ИнтернетПочта = Новый ИнтернетПочта;
    Попытка
        ИнтернетПочта.Подключиться(ИнтернетПрофиль);
    Исключение
        Сообщить("Ошибка при подключении к серверу" + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    // Получаем старые письма для удаления
    МассивСообщенийДляУдаления = Новый Массив;
    МассивСообщений = ИнтернетПочта.Выбрать(Ложь,, истина);
    Для Каждого Письмо Из МассивСообщений Цикл
        Письмо.кодировка = "windows-1251";
        Попытка
            СтартБП(письмо);
            МассивСообщенийДляУдаления.Добавить(Письмо);

        Исключение
            Сообщить("Ошибка старта БП");
            //Продолжить;
        КонецПопытки;                
        КонецЦикла;
    ИнтернетПочта.УдалитьСообщения(МассивСообщенийДляУдаления);
КонецПроцедуры

&НаСервере
Процедура СтартБП(письмо)
    
    БП = БизнесПроцессы.Ознакомление.СоздатьБизнесПроцесс();
    БП.Шаблон =Справочники.ШаблоныОзнакомления.НайтиПоНаименованию("Ознакомление с заявкой");// ШаблоныБизнесПроцессов.на
    БП.Дата = ТекущаяДата();
    БП.Автор = Справочники.Пользователи.НайтиПоНаименованию("Администратор");
    БП.Записать();
    НоваяСтрока = БП.Предметы.Добавить;
    НоваяСтрока.Предмет = письмо;
    БП.Наименование = "Ознакомление с: " + письмо.тема;
    БП.Записать();
    БП.Старт();
    
КонецПроцедуры
29 Strelolga
 
30.03.16
10:47
(28) Решено
Новая проблема. У меня настроена легкая почта. с помощью кода не находит ни одного сообщения. Если зайти в обработку загрузки почты, нажать кнопку - обновить список сообщений..То обработкой получают сообщения. Тогда в дальнейшем по коду находятся сообщения. Как получить сообщения только по коду:
УчЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.НайтиПоНаименованию("[email protected]");
    
    ИнтернетПрофиль.АдресСервераPOP3 = УчЗапись.СерверВходящейПочтыPOP3;
    ИнтернетПрофиль.АдресСервераSMTP = УчЗапись.СерверИсходящейПочтыSMTP;
    
    ИнтернетПрофиль.Пользователь = УчЗапись.Пользователь;
    ИнтернетПрофиль.Пароль = УчЗапись.Пароль;
    ИнтернетПрофиль.ПортPOP3 = УчЗапись.ПортPOP3;
    ИнтернетПрофиль.ПортSMTP = УчЗапись.ПортSMTP;
    ИнтернетПрофиль.ПарольSMTP = УчЗапись.ПарольSMTP;
    ИнтернетПрофиль.ПользовательSMTP = УчЗапись.ПользовательSMTP;
    ИнтернетПрофиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
    ИнтернетПочта = Новый ИнтернетПочта;
    Попытка
        ИнтернетПочта.Подключиться(ИнтернетПрофиль);
    Исключение
        Сообщить("Ошибка при подключении к серверу" + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    МассивСообщений = ИнтернетПочта.Выбрать(Ложь,, истина);
30 Strelolga
 
30.03.16
10:47
(29) перейти с легкой почты на встроенную?
31 AceVi
 
30.03.16
11:11
(30) А код в 29 ты скопировала из стандартной обработки?
Просто я помню у меня таких проблем не было. просто скопировал часть кода который читает письма из стандартной обработки и все. И то мне так пришлось делать потому что стандартная обработка завязана на код который выполняется на клиенте(а рег задание выполнятся только на сервере).
32 Strelolga
 
30.03.16
13:20
(31)Разобралась. Заработало. Код писала сама.
теперь хочу понять как детекторы событий сделать, чтобы не регламентной обработкой. Не могу понять пока.
33 Strelolga
 
30.03.16
14:17
(32) Как работать с детекторами событий?
Вот например создаю детектор: появление письма заявки:
ИнтернетПрофиль = Новый ИнтернетПочтовыйПрофиль;
    УчЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.НайтиПоНаименованию("[email protected]");
    
    ИнтернетПрофиль.АдресСервераPOP3 = УчЗапись.СерверВходящейПочтыPOP3;
    ИнтернетПрофиль.АдресСервераSMTP = УчЗапись.СерверИсходящейПочтыSMTP;
    
    ИнтернетПрофиль.Пользователь = УчЗапись.Пользователь;
    ИнтернетПрофиль.Пароль = УчЗапись.Пароль;
    ИнтернетПрофиль.ПортPOP3 = УчЗапись.ПортPOP3;
    ИнтернетПрофиль.ПортSMTP = УчЗапись.ПортSMTP;
    ИнтернетПрофиль.ПарольSMTP = УчЗапись.ПарольSMTP;
    ИнтернетПрофиль.ПользовательSMTP = УчЗапись.ПользовательSMTP;
    ИнтернетПрофиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
    ИнтернетПочта = Новый ИнтернетПочта;
    Попытка
        ИнтернетПочта.Подключиться(ИнтернетПрофиль);
    Исключение
                результат = ложь;
    КонецПопытки;

    МассивСообщенийДляУдаления = Новый Массив;
    МассивСообщенийДляОтправки = Новый Массив;
    МассивСообщений = ИнтернетПочта.Выбрать(Ложь,, истина);
    Если МассивСообщений.Количество()> 0 тогда
     результат = истина;
     иначе
     результат = ложь;
     конецесли;

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

Вопросы:
1. если детекторы запускаются раз в минуту, а обработчик не успеет обработать все письма за минуту, не возникнет конфликтов? или повторной обработки писем
2. как в дополнительном обработчике из одной функции вызвать другую?
34 AceVi
 
30.03.16
16:31
(33) 1. Я тебе говорил - как либо запоминай письма которые отработаны(либо заведи регистр(где, например, учитывай по отправителю и дата_Время письма), либо у письма есть признак Прочитано, либо удаляй загруженные письма с сервера почты).
2. Не понял вопроса. приведи пример текста.
35 AceVi
 
30.03.16
16:33
(33) Детекторы событий - ты поясни что ты имеешь ввиду? появление письма на почте? никак - только периодическое чтение почты рег. заданием.
36 Strelolga
 
31.03.16
06:49
(35) Детекторы - типовой функционал документооборота. Доп обработчики событий привязываются к детекторам. так вот. там пишется код.. что то вроде
ИнтернетПрофиль = Новый ИнтернетПочтовыйПрофиль;
    УчЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.НайтиПоНаименованию("[email protected]");
    
    ИнтернетПрофиль.АдресСервераPOP3 = УчЗапись.СерверВходящейПочтыPOP3;
    ИнтернетПрофиль.АдресСервераSMTP = УчЗапись.СерверИсходящейПочтыSMTP;
    
    ИнтернетПрофиль.Пользователь = УчЗапись.Пользователь;
    ИнтернетПрофиль.Пароль = УчЗапись.Пароль;
    ИнтернетПрофиль.ПортPOP3 = УчЗапись.ПортPOP3;
    ИнтернетПрофиль.ПортSMTP = УчЗапись.ПортSMTP;
    ИнтернетПрофиль.ПарольSMTP = УчЗапись.ПарольSMTP;
    ИнтернетПрофиль.ПользовательSMTP = УчЗапись.ПользовательSMTP;
    ИнтернетПрофиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
    ИнтернетПочта = Новый ИнтернетПочта;
    Попытка
        ИнтернетПочта.Подключиться(ИнтернетПрофиль);
    Исключение
        Сообщить("Ошибка при подключении к серверу" + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    // Получаем старые письма для удаления
    МассивСообщенийДляУдаления = Новый Массив;
    МассивСообщенийДляОтправки = Новый Массив;
    МассивСообщений = ИнтернетПочта.Выбрать(Ложь,, истина);
    Если МассивСообщений.Количество()<= 0 тогда
        сообщить("На сервере нет сообщений");
    иначе
        
        Для Каждого Письмо Из МассивСообщений Цикл
            Письмо.кодировка = "windows-1251";
            Попытка
                    БП = БизнесПроцессы.Ознакомление.СоздатьБизнесПроцесс();
                   БП.Шаблон =Справочники.ШаблоныОзнакомления.НайтиПоНаименованию("Ознакомление с заявкой");// ШаблоныБизнесПроцессов.на
                  БП.Дата = ТекущаяДата();
                  БП.Автор = Справочники.Пользователи.НайтиПоНаименованию("Администратор");
                    Для Каждого Стр из БП.Шаблон.Исполнители цикл
                          НСтрока = БП.Исполнители.Добавить();
                           НСтрока.Исполнитель = Стр.Исполнитель;
                    КонецЦикла;

                  БП.Описание = письмо.тексты.получить(0).текст;
                  БП.Наименование = "Поручение: Обработать заявку на ввод нового контрагента " + письмо.тема;
    
                 БП.Записать();
                 БП.Старт();
                МассивСообщенийДляОтправки.Добавить(НаписатьПисьмоОтвет(письмо));
                МассивСообщенийДляУдаления.Добавить(Письмо);
                
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;                
        КонецЦикла;
    КонецЕсли;
    ИнтернетПочта.УдалитьСообщения(МассивСообщенийДляУдаления);
    
    Для Каждого сообщение из МассивСообщенийДляОтправки цикл
        попытка
            ИнтернетПочта.Послать(сообщение);
        исключение
            Продолжить;
        КонецПопытки;
        
    КонецЦикла;
    
    ИнтернетПочта.Отключиться();

Функция НаписатьПисьмоОтвет(письмо)
    
     ПисьмоОтвет = новый ИнтернетПочтовоеСообщение;
     ПисьмоОтвет.Получатели.Добавить(письмо.отправитель.адрес);
     ПисьмоОтвет.Кодировка = "windows-1251";
     ПисьмоОтвет.Тема ="Ваше письмо" + письмо.тема + "  принято в работу!";
     ПисьмоОтвет.Отправитель.ОтображаемоеИмя = "1s edo";
     ПисьмоОтвет.Тексты.Добавить("Ваше письмо" + письмо.тема + "  принято в работу!");
     Возврат ПисьмоОтвет;
    
КонецФункции

Функция НаписатьПисьмо
37 Strelolga
 
31.03.16
06:51
(36) Так вот такой обработчик событий на срабатывает. БП не стартуется, письмо ответ не высылается. Через рег задание работает.
38 AceVi
 
31.03.16
09:54
(37) Так давай последовательно.
Мы говорим о детекторе событий. Тот текст что ты привела - это не детектор событий - это то что должно произойти когда детектор уже сработает.
Давай разбираться с самим детектором. Детектор Это регистр сведений когда записываються определенные шаги бизнес процессов и задач(создание, заверешение конкретной задачи, завершение бизнес процесса и т.д.).
В документообороте есть обычное рег. задание которое с определенной периодичностью(по умолчанию вроде 5 минут) проверяет этот регистр и в процедуре обработки этого рег задания описано как реагировать на ту или иную запись в  регистре(например старб БП после завершения другого или старт БП сразу после создания внутреннего документа и т.д.) Что конкретно ты хочешь от детектора событий? потому что там запрограммированы определенные действия(причем как на мой вкус механизм очень куцый, хотя на нем можно развернуться там мощно что можно будет в пользовательском режиме задавать цепочки бизнес процессов.
39 turbosuslic
 
01.04.16
15:37
А как в ДО 2.0 в детекторе событий обратиться к самому событию? Видел пример кода на ДО 1.4 там было так: Задача = Событие.Источник в 2.0 это не работает, начинает ругаться на Событие. Кто-нибудь сталкивался с таким?
40 AceVi
 
01.04.16
17:07
(39) Что значит обратиться? Выполнить его(т.е. записать информацию в Регистр Сведений) или прочитать регистр?
Все события хранятся в регистре сведений(не помню уже как называться) вот от туда и получай.
41 turbosuslic
 
04.04.16
08:12
(40) Я имею ввиду то, что мне нужно настроить детектор события, например с видом "Завершение процесса". Так вот, в момент завершения какого-либо процесса будет стартовать этот детектор, в этот момент в самом детекторе мне нужно отследить сам бизнес-процесс, который был сейчас заверешен, чтобы дальше с ним работать.

В 1.4 был такой пример:

// Регистрация
Задача = Событие.Источник;

Выполнять = Ложь;

Если ТипЗнч(Задача.БизнесПроцесс) = Тип("БизнесПроцессСсылка.Утверждение") Тогда

но в 2.0 он не срабатывает, ругается: Переменная не определена (Событие). Задача = <<?>>Событие.Источник

Вот мне и нужно узнать, как в 2.0 обраться из детектора события к произошедшему бизнес-процессу или событию.
42 AceVi
 
04.04.16
09:46
(41) Я тебя не пойму)
Переменная не определена (Событие). Задача = <<?>>Событие.Источник
Ну так определи событие) или ты думаешь что событие это реквизит бизнес процесса? Событие - это запись регистра сведений - ну получи нужную запись и бери от туда источник.
43 AceVi
 
04.04.16
09:48
(41) Если вопрос звучит - как отследить завершение той или иной задачи\БП - то стандартный механизм подразумевает чтение РС по событиям раз в 5-10 минут и обработка новых записей(у регистр есть реквизит отработана запись или нет)