Добрый день! Есть реглам. задание, вызывает процедуру из общего модуля(Сервер,Клиент(обычное приложение),Вызов сервера). В этом модуле присутствуют процедуры и функции которые выполняются по кнопкам, в процедурах присутствуют такие методы как "ОбработкаПрерыванияПользователем()", "Состояние()". В этому же модуле есть точно такие же процедуры и функции которые отвечают за загрузку по регламентному заданию, в них нет методов "ОбработкаПрерыванияПользователем()", "Состояние()". При активации задания, выскакивает ошибка что не обнаружено "ОбработкаПрерыванияПользователем()", я закоменнтировал это даже в тех процедурах которые по сути не вызываются для авто загрузки.
Закоментировал в этом общем модуле все строки с методами которые не могут вызываться в фоновом режиме - регламентное задание запустилось, но вылезло следующее на метод (Закрыть()) внешней компоненты которую я подключаю чтобы подключиться к базе.
Подскажите плиз что делаю не так?
Добвил директивы на процедуры и функции которые не используются в фоновом режиме. Ошибок по поводу обработки ожидания пользователя не появлялось, а вот ошибка с методом подключаемой внешней компонентой осталась....как быть?
i | Не надо "поднимать тему". |
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();
БДЕ = Неопределено;
КонецПроцедуры
Вопрос, а не регламентным заданием работает?
И какая ошибка вылазит?
ЗЫ: Еще можно отладочную информацию скидывать в журнал регистрации, если что...
О, сразу не заметил. Извиняюсь.
Кстати, вопрос: почему регламентным заданием? Фоновая синхронизация?
Если база серверная, то вероятно метод Close() компоненты не работает в консольном сеансе под которым запущен север, раз работает в интерактивном.
Попробуйте поставить Close() в #Если Клиет может соединению будет достаточно закрыться по присвоению Неопределено.
Если база серверная, возможны проблемы с разрешениями пользователя от которого запущен сервер.
Еще вопрос: компонента(-ты) выводом каких лиюо диалоговых окон не занимается часом? Всмысле своими средствами...
И да, что все-таки сообщает в фоновом заданиим на команду "закрыть"?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua