Имя: Пароль:
1C
1С v8
Автоматический запуск внешней обработки
,
0 Den888
 
27.10.17
11:23
Всем доброго времени суток. Помогите пожалуйста уважаемые разработчики 1С решить задачку.
Есть внешняя обработка, в ней две кнопки, "Выполнить" и "Отправить". При нажатии на кнопку "Выполнить", заполняется табличная часть.
При нажатии на кнопку "Отправить", отправляется электронное письмо с данными из табличной части и прикрепленным файлом.

Вопрос: возможно ли сделать так, что бы данная обработка автоматически выполнялась каждый день. Т.Е. например: в 08:00 утра каждого дня срабатывала процедура кнопки "Выполнить" и "Отправить"? База серверная. Буду рад любой помощи и любым вариантам.
1 wondkind
 
27.10.17
11:26
(0) да, можно! Для этого есть регламентные задания
2 lodger
 
27.10.17
11:27
нажать красную букву Я рядом с заголовком темы. читать первую ссылку.
3 wondkind
 
27.10.17
11:29
(1) для этого в обработке эти процедуры должны быть экспортными, а также сделать обёртку для запуска.

То есть, создам в общем модуле процедуру для запуска регламентного задания:

Процедура ВыполнениеПроцедуры() Экспорт
   об = Обработки.ТвояОбработка.Создать();
   об.Выполнить();
   об.Отправить();
КонецПроцедуры

Это просто как пример. Я не знаю как у вас устроена обработка
4 lodger
 
27.10.17
11:29
хотя там древний баян. в современной БСП давно есть запуск внешних обработок по расписанию.
5 Den888
 
27.10.17
11:53
Вот процедуры обработки


Процедура ПриОткрытии()
    ПолеДата = Дата(ТекущаяДата());    
КонецПроцедуры

//Отбор сотрудников, у которых сегодня ДР
Процедура ВыполнитьНажатие(Кнопка) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    СотрудникиОрганизаций.Ссылка,
        |    СотрудникиОрганизаций.Физлицо.Пол КАК ПолФЛ,
        |    СотрудникиОрганизаций.ТекущаяДолжностьОрганизации КАК Должность
        |ИЗ
        |    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
        |ГДЕ
        |    ДЕНЬ(СотрудникиОрганизаций.Физлицо.ДатаРождения) = ДЕНЬ(&ДатаРождения)
        |    И МЕСЯЦ(СотрудникиОрганизаций.Физлицо.ДатаРождения) = МЕСЯЦ(&ДатаРождения)
        |    И СотрудникиОрганизаций.ДатаУвольнения = &ДатаУвольнения";
        
    Запрос.УстановитьПараметр("ДатаРождения", ПолеДата);
    Запрос.УстановитьПараметр("ДатаУвольнения", ДАТА(1,1,1));
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    ЭтотОбъект.ТабличнаяЧасть.Очистить();
    
    Если ВыборкаДетальныеЗаписи.Количество() > 0 Тогда
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            СтрокаТч = ЭтотОбъект.ТабличнаяЧасть.Добавить();
            ПредвФИО1 = ОбщегоНазначения.ФамилияИмяФизЛица(ВыборкаДетальныеЗаписи.Ссылка, ВыборкаДетальныеЗаписи.ПолФЛ);
            ПредвФИО2 = Прав(ПредвФИО1, 2);
            СтрокаТч.ФИО = СтрЗаменить(ПредвФИО1, ПредвФИО2, "");
            СтрокаТч.Должность = ВыборкаДетальныеЗаписи.Должность;
        КонецЦикла;
    Иначе
        Сообщить(Строка(Формат(ПолеДата,"ДФ=dd/MM/yy")) + " ни у кого из сотрудников дня рождения нет.");    
    КонецЕсли;

КонецПроцедуры

//Отправка письма
Процедура ОтправитьНажатие(Элемент) Экспорт
    
    Попытка
        Outlook = Новый COMОбъект("Outlook.Application");
        ЕстьОшибка = 0;
    Исключение
        Сообщить("Не удалось создать объект Outlook.Application");
        ЕстьОшибка = 1;
    КонецПопытки;
    
    Если ЕстьОшибка = 0 Тогда
        
        Письмо = Outlook.CreateItem(0);
        Письмо.Subject = "С Днем рождения!"; //Тема письма
        
        Если ТабличнаяЧасть.Количество() = 0 Тогда
            Возврат;
        КонецЕсли;
        
        //отоброжение текста в теле письма
        ТекстПисьма = "<html><body>";
        ТекстПисьма = ТекстПисьма + "<center>" + "<b><font size=5>" + (Формат(ПолеДата, "ДФ=""дд ММММ""")) + "<br>";        
        Если ТабличнаяЧасть.Количество() > 1 Тогда
            ТекстПисьма = ТекстПисьма + "Именинники дня" + "</b>" + "</center>";
        Иначе
            ТекстПисьма = ТекстПисьма + "Именинник дня" + "</b>" + "</center>";
        КонецЕсли;
        
        Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл
            ТекстПисьма = ТекстПисьма + "<center>" + "<b><font size=10 color=#FF4500>" + СтрокаТЧ.ФИО + "</b>" + "<br>";  
            ТекстПисьма = ТекстПисьма + "<font size=5 color=#696969>" + СтрокаТч.Должность + "</font>" + "</center>";
        КонецЦикла;
        
        Письмо.Body = ТекстПисьма;            
        Письмо.Recipients.Add("[email protected]"); //Адрес получателя  
        Письмо.Attachments.Add("C:\Users\D.Boyakov\Desktop\ДР.jpg"); //Путь к картинке            
        Письмо.HTMLBODY = ТекстПисьма + " " + "<center>" + "<img src=""ДР.jpg""></body></html>" + "</center>"; //Выравнивание картинки по центру
        
        Письмо.Send();
    Иначе
        Тема = "Тема письма";
        ТекстПисьма = "Текст письма";
        СтрокаЗапуска = "mailto:"; + "[email protected]" + "?subject=" + Тема + "&body=" + ТекстПисьма;
        ЗапуститьПриложение(СтрокаЗапуска);
    КонецЕсли;
    
КонецПроцедуры
6 Has
 
27.10.17
15:40
в планировщике задача с запуском файла Automat.bat
содержимое файла:
rem стартер внешней обработки
E:\1CEDistr\1cestart.exe enterprise /S"server1c8\InfoBase" /DisableStartupMessages /executeE:\Automat\Automat.epf /OutE:\Automat\Automat_out_.txt -NoTruncate
7 HEKPOH
 
27.10.17
16:05
"Если ЕстьОшибка = 0 Тогда" - какая красота :)
8 Ц_У
 
27.10.17
16:30
9 Мимохожий Однако
 
27.10.17
16:32
(7) Не обижай семёрочников ))
10 Rema Dan
 
27.10.17
16:56
(6) А при таком варианте запуска процесс 1С закроется после выполнения обработки? или его нужно завершать из обработки через ЗавершитьРаботуСистемы(Ложь)?