Имя: Пароль:
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("d.boyakov@qiwi.kz"); //Адрес получателя  
        Письмо.Attachments.Add("C:\Users\D.Boyakov\Desktop\ДР.jpg"); //Путь к картинке            
        Письмо.HTMLBODY = ТекстПисьма + " " + "<center>" + "<img src=""ДР.jpg""></body></html>" + "</center>"; //Выравнивание картинки по центру
        
        Письмо.Send();
    Иначе
        Тема = "Тема письма";
        ТекстПисьма = "Текст письма";
        СтрокаЗапуска = "mailto:"; + "d.boyakov@qiwi.kz" + "?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С закроется после выполнения обработки? или его нужно завершать из обработки через ЗавершитьРаботуСистемы(Ложь)?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан