Версия для печати темы (https://pro1c.org.ua/index.php?s=e71306186649e008abb034427013fa20&showtopic=41721)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Запуск фонового завдання

Автор: SaintDaemon 07.11.17, 15:01

Доброго дня!
Маю проблему при реалізаціх фонового завдання.
Платформа 8.3.10.2580
Ситуація наступна...
Створюю чисту базу без конфігурації. Ставлю основний режим запуску - ЗВИЧАЙНА програма (НЕ керований інтерфейс). База ФАЙЛОВА.
Пробую реалізувати елементарне фонове завдання, яке б періодично робило записи в регістр відомостей...
Створюю РВ "РегистрСведений1"
Створюю спільний модуль "ОбщийМодуль1" з процедурою Тест()...

Процедура Тест() Экспорт
    Дата = ТекущаяДата();    
    Пока Истина Цикл
        Если ТекущаяДата() >= Дата + 10 Тогда
            Запись = РегистрыСведений.РегистрСведений1.СоздатьМенеджерЗаписи();
            Запись.Дата = ТекущаяДата();
            ЗАпись.Записать();
            
            Дата = ТекущаяДата();
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры


В модулі звичайної програми (общего приложения) додаю...

Процедура ПриНачалеРаботыСистемы()
    ВыполнитьОбработкуЗаданий();
    ФоновыеЗадания.Выполнить("ОбщийМодуль1.Тест", , "Тест");
КонецПроцедуры


В результаті - все працює. Записи в регістрі з'являються з періодичністю в 10 сек.

Питання перше: як це правильно зробити за допомогою регламентного завдання? Я пробував додати завдання, вказати періодичність, процедуру, ставив галочку "Напередвизначене", але все одно не працює.
Питання друге: чому навіть перший варіант (без регл. завдання) не працює, якщо у властивостях конфігурації поставити сумісність з версією 8.2.13?? Насправді потрібно доробити конфігурацію, в якої ця сумісність стоїть.

Автор: podcast 07.11.17, 16:18

SaintDaemon @ Сегодня, 15:01 * ,
Посмотрите как в типовой, там указывается пользователь в константе под которым будет выполнятся Фоновое задание, в событии при открытие подключается Обработчик ожидание и пользователь должен быть запущен,
для файловый базы, если в SQL, то выполняется всё средствами SQL.

Автор: SaintDaemon 07.11.17, 17:16

podcast @ Сегодня, 16:18 * ,
Це відповідь на яке запитання?
Та нащо мені ті типові заморочки) Хочу зрозуміти це все на елементарному рівні.
В мене тестова база - одне фонове завдання і немає користувачів взагалі.
Чому саме фонове працює, а з регл. завданням вже ні?
Чому при встановленні сумісності взагалі нічого не працює?

Ще уточню...
Коли я додаю регл. завдання, то я коментую рядок...

ФоновыеЗадания.Выполнить("ОбщийМодуль1.Тест", , "Тест");

...бо фонове завдання (я так розумію) має саме запускатись з регламентним...
...і міняю процедуру Тест(), щоб вона робила тільки один запис в регістр, бо циклічність (я так розумію) має забезпечити розклад регламентного завдання...

Процедура Тест() 
      Запись = РегистрыСведений.РегистрСведений1.СоздатьМенеджерЗаписи();
      Запись.Дата = ТекущаяДата();
      ЗАпись.Записать();
КонецПроцедуры

Автор: podcast 07.11.17, 17:27

SaintDaemon @ Сегодня, 17:16 * ,
Для того что бы запустить регламентное задание ему нужно Расписание когда выполнятся, почитайте думаю проясните.
http://pro1c.org.ua/redirect.php?http://wiki.kint.ru/index.php/%D0%A0%D0%B5%D0%B3%D0%BB%D0%B0%D0%BC%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%B8_%D1%84%D0%BE%D0%BD%D0%BE%D0%B2%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_(1Cv8)

Автор: SaintDaemon 08.11.17, 8:33

podcast @ Вчера, 17:27 * ,
...та це ясно як білий день...
...зрозуміло, що я йому встановив розклад...поставив кожного дня, кожні деілька секунд...але результату ніякого...

Автор: Vidocq05 08.11.17, 13:22

У Вас файловая база. Вы пользователя регламентного задания указали? Без пользователя оно не запустится.

Автор: SaintDaemon 08.11.17, 13:33

Vidocq05 @ Сегодня, 13:22 * ,
...де його вказувати?...

Автор: Vidocq05 08.11.17, 14:45

SaintDaemon @ Сегодня, 14:33 * ,
Скачайте обработку "Консоль заданий" и запустите в предприятии. Там разберетесь

Автор: SaintDaemon 08.11.17, 15:01

Vidocq05 @ Сегодня, 14:45 * ,
В мене є консоль.
В табличній частині "Регламентні завдання" відображається моє завдання, але записи в регістрі не з'являються. Якщо я обираю користувача для завдання, то нічого не змінюється.

Автор: podcast 08.11.17, 15:16

SaintDaemon @ Сегодня, 15:01 * ,
Я вам это и пытаюсь объяснить, в типовой конфигурации при начале работы системы есть проверка, если база файловая, тогда подключается обработчик ожидания для выполнения Регламентного задания, можно сделать обработку в которой подключите Обработчик ожидания для вашего Регламентного задания, или сделайте как в типовой.

Процедура ПриНачалеРаботыСистемы()
    ЭтоФайловаяИБ = ОпределитьЭтаИнформационнаяБазаФайловая();
        
    Если ЭтоФайловаяИБ Тогда
                    
        ПользовательДляВыполненияРеглЗаданий = Константы.ПользовательДляВыполненияРегламентныхЗаданийВФайловомВарианте.Получить();
        
        Если мТекущийПользователь = ПользовательДляВыполненияРеглЗаданий Тогда
            
            // с интервалом секунд вызываем процедуру работы с регламентными заданиями
            ПоддержкаРегламентныхЗаданиеДляФайловойВерсии();
            
            ПодключитьОбработчикОжидания("ПоддержкаРегламентныхЗаданиеДляФайловойВерсии", глЗначениеПеременной("глКоличествоСекундОпросаОбмена"));
            
            ИнтервалДляОпроса = Константы.ИнтервалДляОпросаРегламентныхЗаданийВФайловомВарианте.Получить();
            
            Если ИнтервалДляОпроса = Неопределено
                ИЛИ ИнтервалДляОпроса = 0 Тогда
                
                ИнтервалДляОпроса = 60;    
                
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЕсли;
КонецПроцедуры // ПриНачалеРаботыСистемы()


Функция ОпределитьЭтаИнформационнаяБазаФайловая(СтрокаСоединенияСБД = "") Экспорт
            
    СтрокаСоединенияСБД = ?(ПустаяСтрока(СтрокаСоединенияСБД), СтрокаСоединенияИнформационнойБазы(), СтрокаСоединенияСБД);
    
    // в зависимости от того файловый это вариант БД или нет немного по-разному путь в БД формируется
    ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "FILE=");
    
    Возврат ПозицияПоиска = 1;    
    
КонецФункции

// процедура служит для поддержки работы регламентных заданий в файловой версии
Процедура ПоддержкаРегламентныхЗаданиеДляФайловойВерсии() Экспорт
    
    ВыполнитьОбработкуЗаданий();
    
КонецПроцедуры

Автор: SaintDaemon 08.11.17, 16:21

podcast @ Сегодня, 15:16 * ,
Мене в цій ТЕСТОВІЙ базі не цікавлять такі заморочки)...результатом цих трьох ваших функцій/процедур все одно є рядок...

ВыполнитьОбработкуЗаданий();

...в мене він точно так само прописаний в процедурі ПриНачалеРаботыСистемы() (я це все писав вище)...правда, на відміну від типових без констант, обробників очікувань і без прив'язки до конкретного користувача - без всього зайвого...я намагаюсь реалізувати найпростіший варіант...

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua