Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не исполняется регламентное задание
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
kosalex
Добрый день! Есть реглам. задание, вызывает процедуру из общего модуля(Сервер,Клиент(обычное приложение),Вызов сервера). В этом модуле присутствуют процедуры и функции которые выполняются по кнопкам, в процедурах присутствуют такие методы как "ОбработкаПрерыванияПользователем()", "Состояние()". В этому же модуле есть точно такие же процедуры и функции которые отвечают за загрузку по регламентному заданию, в них нет методов "ОбработкаПрерыванияПользователем()", "Состояние()". При активации задания, выскакивает ошибка что не обнаружено "ОбработкаПрерыванияПользователем()", я закоменнтировал это даже в тех процедурах которые по сути не вызываются для авто загрузки.

Закоментировал в этом общем модуле все строки с методами которые не могут вызываться в фоновом режиме - регламентное задание запустилось, но вылезло следующее на метод (Закрыть()) внешней компоненты которую я подключаю чтобы подключиться к базе.


Подскажите плиз что делаю не так?

Добвил директивы на процедуры и функции которые не используются в фоновом режиме. Ошибок по поводу обработки ожидания пользователя не появлялось, а вот ошибка с методом подключаемой внешней компонентой осталась....как быть?


 i 

Не надо "поднимать тему".
 
DartRomanius
Цитата(kosalex @ 03.07.15, 10:58) необходимо зарегистрироваться для просмотра ссылки
Добрый день! Есть реглам. задание, вызывает процедуру из общего модуля(Сервер,Клиент(обычное приложение),Вызов сервера). В этом модуле присутствуют процедуры и функции которые выполняются по кнопкам, в процедурах присутствуют такие методы как "ОбработкаПрерыванияПользователем()", "Состояние()". В этому же модуле есть точно такие же процедуры и функции которые отвечают за загрузку по регламентному заданию, в них нет методов "ОбработкаПрерыванияПользователем()", "Состояние()". При активации задания, выскакивает ошибка что не обнаружено "ОбработкаПрерыванияПользователем()", я закоменнтировал это даже в тех процедурах которые по сути не вызываются для авто загрузки.

Закоментировал в этом общем модуле все строки с методами которые не могут вызываться в фоновом режиме - регламентное задание запустилось, но вылезло следующее на метод (Закрыть()) внешней компоненты которую я подключаю чтобы подключиться к базе.


Подскажите плиз что делаю не так?

Добвил директивы на процедуры и функции которые не используются в фоновом режиме. Ошибок по поводу обработки ожидания пользователя не появлялось, а вот ошибка с методом подключаемой внешней компонентой осталась....как быть?


Код в студию чтоле? smile.gif
kosalex
Цитата(DartRomanius @ 04.07.15, 4:04) необходимо зарегистрироваться для просмотра ссылки
Код в студию чтоле? smile.gif


не вставляется код, пишет "Not Acceptable

An appropriate representation of the requested resource /index.php could not be found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request."
Vofka
kosalex, попробуйте ещё разок, глюк какой-то может был.
kosalex
Функция ПодключитьсяКБазеКОДОСАвтоматически() Экспорт
    Попытка
        Alias = "codos";
        Login = "sysdba";
        Password = "masterkey";
        
        ПодключитьВнешнююКомпоненту("Addin.Kodos_db");
        БДЕ = Новый("Addin.Kodos_db"); //!!!Загружаем внешнюю компоненту для обмена с базой КОДОС
        
        ПодключитьВнешнююКомпоненту("Addin.Kodos_rd");
        ОбменСоСчитывателем = Новый("Addin.Kodos_rd");  //!!!Загружаем внешнюю компоненту для обмена со считывателем КОДОС
        
        глСобытиеВходаСКлючом=7;
        глСобытиеВыходаСКлючом=8;
        
        БДЕ.Подключиться(Alias, Login, Password); //!!! Подключаемся к базе данных КОДОС
        
        
        глПрефикс="CODOS.";
        
        Попытка
//ЗДЕСЬ БЫЛ ЗАПРОС К БАЗЕ, УДАЛИЛ Т.К. НЕ ХОТЕЛО ПОСТИТЬСЯ...
            //ЗДЕСЬ БЫЛ ЗАПРОС К БАЗЕ, УДАЛИЛ Т.К. НЕ ХОТЕЛО ПОСТИТЬСЯ...
            //БДЕ.Close();
            БДЕ = Неопределено;
            
        Исключение
            глПрефикс="";
            //БДЕ.Close(); //!!! Закрываем соединение с базой КОДОС
            БДЕ = Неопределено;
        КонецПопытки;
        
        СЗ = Новый СписокЗначений;
        СЗ.Добавить(БДЕ, "БДЕ",,);
        СЗ.Добавить(глПрефикс, "Префикс",,);
        
        
        //БДЕ.Close();
        БДЕ = Неопределено;
        Возврат СЗ;
    Исключение
        //ЗаписьЖурналаРегистрации("Ошибка КОДОС",,,,"" + БДЕ.Ошибка + " " + ИнформацияОбОшибке().Описание,);    
        БДЕ = Неопределено;
    КонецПопытки;
    
КонецФункции


Процедура ЗагрузитьДанныеИзКОДОСАвтоматически()  ЭКСПОРТ
СЗ = ПодключитьсяКБазеКОДОСАвтоматически();
    Если СЗ <> Неопределено Тогда
        БДЕ = СЗ.НайтиПоИдентификатору(0).Значение;
        глПрефикс = СЗ.НайтиПоИдентификатору(1).Значение;
        ПрочитатьБазуКОДОСАвтоматически(БДЕ,глПрефикс);
    КонецЕсли;
КонецПроцедуры


Процедура ПрочитатьБазуКОДОСАвтоматически(БДЕ,глПрефикс) Экспорт
    Попытка
        ТаблицаСотрудников = ПолучитьАктуальныхСотрудниковОрганизации(); //ТаблицаСотрудников - актуальных,не помеченных на удаление, с видом занятости = основное место работы
        ТаблицаСотрудников.Сортировать("Ссылка ВОЗР");
        
        //Ищем в базе КОДОС записи у которых табельный номер равен табельному номеру в базе 1С
        Для Каждого Строка Из ТаблицаСотрудников Цикл
            
            БДЕ.Close();
            
            ПосленийПериодВ1С = ПолучитьПоследнийПериодВ1С(Строка.Ссылка);
            
            ТабельныйНомер =  Число(Формат(Строка.Ссылка.Код,"ЧГ=0"));
            ТабельныйНомер = СтрЗаменить(ТабельныйНомер,Символы.НПП,"");
            Если ПосленийПериодВ1С <> Неопределено Тогда
                //Данные с последней даты в базе 1С
                //ЗДЕСЬ БЫЛ ЗАПРОС К БАЗЕ, УДАЛИЛ Т.К. НЕ ХОТЕЛО ПОСТИТЬСЯ...
            Иначе
                //Данные начиная с начала создания базы
                //ЗДЕСЬ БЫЛ ЗАПРОС К БАЗЕ, УДАЛИЛ Т.К. НЕ ХОТЕЛО ПОСТИТЬСЯ...
                
                //Данные начиная с 01.01.15
                //ЗДЕСЬ БЫЛ ЗАПРОС К БАЗЕ, УДАЛИЛ Т.К. НЕ ХОТЕЛО ПОСТИТЬСЯ...((POBJ_N = 1) OR (POBJ_N = 6))";"
            КонецЕсли;
            
            БДЕ.ЗапросSQL(ЗапросКБазеКОДОС);
            
            Пока БДЕ.ПолучитьЗапись() = 1 Цикл
                Запись = РегистрыСведений.КФЗДанныеПроходныхКОДОС.СоздатьМенеджерЗаписи();
                Если БДЕ.Поле("EV_N") = 7 Тогда //Вход
                    Запись.Период = БДЕ.Поле("DT");
                    Запись.Сотрудник = Строка.Ссылка;
                    Запись.ТабельныйНомер = Строка.Ссылка.Код;
                    Запись.ПодразделениеОрганизации = Строка.Ссылка.ТекущееПодразделениеОрганизации;
                    Запись.Период1 = Дата(Формат(Запись.Период,"ДФ=yyyyMMdd"));
                    Запись.Событие = "Вход"
                    
                ИначеЕсли БДЕ.Поле("EV_N") = 8 Тогда  //Выход
                    Запись.Период = БДЕ.Поле("DT");
                    Запись.Сотрудник = Строка.Ссылка;
                    Запись.ТабельныйНомер = Строка.Ссылка.Код;//СтрЗаменить(БДЕ.Поле("NUMBER_"),Символы.НПП,"");
                    Запись.Событие = "Выход";
                    Запись.ПодразделениеОрганизации = Строка.Ссылка.ТекущееПодразделениеОрганизации;
                    Запись.Период1 = Дата(Формат(Запись.Период,"ДФ=yyyyMMdd"));
                    ДатаВхода = ПолучитьДатуВхода(Запись.Период,Запись.ТабельныйНомер);
                    
                    Если ДатаВхода <> Неопределено Тогда
                        //Получим из секунд часы минуты и секунды
                        СекундыФактические = Запись.Период - ДатаВхода;
                        Запись.ФактическоеВремя = СекундыФактические;
                    
                    Иначе
                        Запись.ФактическоеВремя = Дата("00010101000000");
                    КонецЕсли;
                    
                    НормаСГрафика = ПолучитьНормуВремени(Строка.Ссылка,Запись.Период);
                                    
                    Если НормаСГрафика <> Неопределено Тогда
                        Если СекундыФактические = Неопределено Тогда
                            СекундыФактические = 0;
                        КонецЕсли;    
                        
                        СекундыНормаГрафик = НормаСГрафика * 3600;
                        Запись.НормаГрафик = СекундыНормаГрафик;
                            
                        //Отрицательное значение СекундыОтклонения означает что сотрудник отработал меньше нормы
                        СекундыОтклонения = СекундыФактические -  СекундыНормаГрафик;
                        Запись.Отклонение = СекундыОтклонения;
            
                    КонецЕсли;
                КонецЕсли;    
                Запись.Записать(Истина);
            КонецЦикла;
            БДЕ.Close();

        КонецЦикла;
    Исключение
        ЗаписьЖурналаРегистрации("Ошибка КОДОС",,,,"" + БДЕ.Ошибка + " " + ИнформацияОбОшибке().Описание,);    
        БДЕ.Close();
        БДЕ = Неопределено;
    КонецПопытки;
    
    БДЕ.Close();
    БДЕ = Неопределено;
    
    
КонецПроцедуры




Цитата(Vofka @ 06.07.15, 9:51) необходимо зарегистрироваться для просмотра ссылки
kosalex, попробуйте ещё разок, глюк какой-то может был.



В коде присутствуют запросы к базе SELECT может по этому не постилось...удалил - запостилось.
DartRomanius
Вопрос, а не регламентным заданием работает?
И какая ошибка вылазит?

ЗЫ: Еще можно отладочную информацию скидывать в журнал регистрации, если что...
О, сразу не заметил. Извиняюсь.

Кстати, вопрос: почему регламентным заданием? Фоновая синхронизация?
kosalex
Цитата(DartRomanius @ 08.07.15, 3:48) необходимо зарегистрироваться для просмотра ссылки
Вопрос, а не регламентным заданием работает?
И какая ошибка вылазит?

ЗЫ: Еще можно отладочную информацию скидывать в журнал регистрации, если что...
О, сразу не заметил. Извиняюсь.

Кстати, вопрос: почему регламентным заданием? Фоновая синхронизация?


Нужно по рассписанию загружать Входы/Выходы сотрудников...если без регламентного задания просто по кнопке, тогда все работает.
logist
Если база серверная, то вероятно метод Close() компоненты не работает в консольном сеансе под которым запущен север, раз работает в интерактивном.
Попробуйте поставить Close() в #Если Клиет может соединению будет достаточно закрыться по присвоению Неопределено.
DartRomanius
Если база серверная, возможны проблемы с разрешениями пользователя от которого запущен сервер.

Еще вопрос: компонента(-ты) выводом каких лиюо диалоговых окон не занимается часом? Всмысле своими средствами...

И да, что все-таки сообщает в фоновом заданиим на команду "закрыть"?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.