Функция ПодключитьсяКБазеКОДОСАвтоматически() Экспорт
Попытка
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 может по этому не постилось...удалил - запостилось.