Подробный анализ информационной технологии или процесса, указанных в качестве индивидуального задания.




 

ПеремConnection Экспорт;

Перем _ТаблицаЗагрузки Экспорт;

 

//при открытии формы основные данные для строки подключения к БД

Процедура ПриОткрытии()

 

Сервер = "192.168.9.50";

БД = "tc-db-log";

Порт = "3305";

Логин = "root";

Пароль = "";

Driver = "{MySQL ODBC 5.1 Driver}";

 

//Подразделение=мДокументОбъект.ПодразделениеОрганизации;

//ДатаНачала=мДокументОбъект.неоДатаНачалаПериода;

//ДатаОкончания=мДокументОбъект.неоДатаОкончанияПериода;

 

КонецПроцедуры

//подключение к базе

Процедура ПодключитьсяНажатие(Элемент)

 

ConString = "Driver="+СокрЛП(Driver)+"; SERVER="+Сервер+"; Port="+Порт+"; Database="+БД+"; Uid="+Логин+"; PWD="+Пароль+"";

Connection = НовыйCOMОбъект("ADODB.Connection");

Connection.CommandTimeOut= 600;

Попытка

Connection.Open(ConString);

ЭлементыФормы.Подключиться.Доступность = Ложь;

ЭлементыФормы.Отключится.Доступность = Истина;

 

Сообщить("Сервер: "+Сервер+":"+Порт+" Подключен!"+" "+"Доступна база"+" "+БД+"!!!");

 

Исключение

Сообщить(ОписаниеОшибки());

Сообщить("Строка подключения: " + ConString, СтатусСообщения.Информация);

Возврат;

КонецПопытки;

 

ЭтотОбъект.ПодключитьсяКБазеСотрудниковВСКУД();

 

КонецПроцедуры

//отключение от базы

Процедура ОтключитсяНажатие(Элемент)

 

Connection.Close();

Сообщить("Сервер: "+Сервер+":"+Порт+" Отключен!"+" "+"Отключена база"+" "+БД+"!!!");

ЭлементыФормы.Подключиться.Доступность = Истина;

ЭлементыФормы.Отключится.Доступность = Ложь;

 

ЭтотОбъект.ОтключитьсяОтБазыСотрудниковВСКУД();

 

 

КонецПроцедуры

//процедура создает описание таблицы значений в которой будут храниться события в СКУД

Процедура СоздатьТаблицуЗагрузкиДанныхSKUD()

 

_ТаблицаЗагрузки = Новый ТаблицаЗначений;

_ТаблицаЗагрузки.Колонки.Добавить("LOGTIME",ОбщегоНазначения.ПолучитьОписаниеТиповДаты(ЧастиДаты.ДатаВремя));

_ТаблицаЗагрузки.Колонки.Добавить("LEMPHINT",ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(4,0));

 

КонецПроцедуры

//процедура загружает в таблицу значений данные

Процедура КнопкаНажатиеНажатие(Элемент)

 

Сотрудники.Очистить();

 

ЭтотОбъект.ПолучитьДанныеТаблицыPersonalбазыMain();

 

//ЗагрузитьТаблицуЗначенийДаннымиИзТаблицыLOGS();

 

Запрос=Новый Запрос("ВЫБРАТЬ

| ТТ.TABID,

| ТТ.ID

|ПОМЕСТИТЬ ВТТабб

|ИЗ

| &Табб КАК ТТ");

Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;

Запрос.УстановитьПараметр("Табб",_ТаблицаЗагрузкиСотрудников);

Запрос.Выполнить();

ЗапросТМП=Новый Запрос("ВЫБРАТЬ

| ВТТабб.ID,

| ВТТабб.TABID,

| РаботникиОрганизацийСрезПоследних.Сотрудник,

| РаботникиОрганизацийСрезПоследних.КодРабочегоМеста,

| РаботникиОрганизацийСрезПоследних.ГрафикРаботы КАК График,

| ШтатноеРасписаниеОрганизацийСрезПоследних.ШПЗ

|ИЗ

| ВТТабб КАК ВТТабб

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Дата,) КАК РаботникиОрганизацийСрезПоследних

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтатноеРасписаниеОрганизаций.СрезПоследних(&Дата,) КАК ШтатноеРасписаниеОрганизацийСрезПоследних

| ПО РаботникиОрганизацийСрезПоследних.КодРабочегоМеста = ШтатноеРасписаниеОрганизацийСрезПоследних.КодРабочегоМеста

| ПО ВТТабб.TABID = РаботникиОрганизацийСрезПоследних.Сотрудник.Код");

Если ЗначениеЗаполнено(Подразделение) Тогда

ЗапросТМП.Текст=ЗапросТМП.Текст+"

|ГДЕ

| РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации = &ПодразделениеОрганизации";

ИначеЕсли

ЗначениеНеЗаполнено(Подразделение) и ЗначениеЗаполнено(Сотрудник) Тогда

ЗапросТМП.Текст=ЗапросТМП.Текст+"

|ГДЕ

| РаботникиОрганизацийСрезПоследних.Сотрудник = &Сотрудник";

ЗапросТМП.Текст=ЗапросТМП.Текст+"

|";

КонецЕсли;

 

 

ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц;

ЗапросТМП.УстановитьПараметр("Дата",ДатаНачала);

ЗапросТМП.УстановитьПараметр("ПодразделениеОрганизации",Подразделение);

ЗапросТМП.УстановитьПараметр("Сотрудник",Сотрудник);

_Выборка = ЗапросТМП.Выполнить().Выбрать();

_КоличествоСотрудников=_Выборка.Количество();

_форма=ЭтотОбъект.ПолучитьФорму("ФормаИндикатор");

_форма.Открыть();

Индикатор=_форма.ЭлементыФормы.Индикатор;

Индикатор.МаксимальноеЗначение=_КоличествоСотрудников;

 

Пока _Выборка.Следующий() Цикл

_строкатаб=Сотрудники.Добавить();

_строкатаб.Сотрудник=_Выборка.Сотрудник;

//_индекс=ЭтотОбъект.ПолучитьIDСотрудникаПоТабельномуНомерубазыMain(СокрЛП(_Выборка.Сотрудник.Код));

IDСтрокой=Строка(_Выборка.ID);

_IDСтрокой=СтрЗаменить(IDСтрокой, Символы.НПП, "");

_ID=_IDСтрокой;

ЗагрузитьТаблицуЗначенийДаннымиИзТаблицыLOGS(_ID);

_строкатаб.КодРабочегоМеста=_Выборка.КодРабочегоМеста;

_строкатаб.График=_Выборка.График;

_строкатаб.ШПЗ=_Выборка.ШПЗ;

ЗаполнитьСтрокуОтработанногоВремениТабеля(_строкатаб);

Индикатор.Значение=Индикатор.Значение+1;

_форма.ЭлементыФормы.надпись.заголовок="Загружаем данные объекта доступа из SKUD"+" "+_строкатаб.Сотрудник;

КонецЦикла;

_форма.Закрыть();

КонецПроцедуры

//Процедура заполняет структуру рабочего дня

Процедура ЗаполнитьСтрокуОтработанногоВремениТабеля(строкаТЧ)

 

Запрос = новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| ГрафикиРаботыПоСменам.Дата КАК Дата,

| ГрафикиРаботыПоСменам.Часы КАК Часы,

| ГрафикиРаботыПоСменам.ВечерниеЧасы КАК ВечерниеЧасы,

| ГрафикиРаботыПоСменам.НочныеЧасы КАК НочныеЧасы,

| ГрафикиРаботыПоСменам.ГрафикРаботы КАК ГрафикРаботы,

| ГрафикиРаботыПоСменам.Смена КАК Смена,

| ВЫБОР

| КОГДА ГрафикиРаботыПоСменам.ГрафикРаботы = &ГрафикРаботы

| ТОГДА ДОБАВИТЬКДАТЕ(ГрафикиРаботыПоСменам.Дата, ЧАС, 8)

| КОНЕЦ КАК ДатаНачалоРабочегоДняПоГрафику,

| ВЫБОР

| КОГДА ГрафикиРаботыПоСменам.Часы> 0

| ТОГДА ДОБАВИТЬКДАТЕ(ВЫБОР

| КОГДА ГрафикиРаботыПоСменам.ГрафикРаботы = &ГрафикРаботы

| ТОГДА ДОБАВИТЬКДАТЕ(ГрафикиРаботыПоСменам.Дата, ЧАС, 8)

| КОНЕЦ, ЧАС, ГрафикиРаботыПоСменам.Часы + 1)

| КОНЕЦ КАК ДатаОкончанияРабочегоДняПоГрафику

|ИЗ

| РегистрСведений.ГрафикиРаботыПоСменам КАК ГрафикиРаботыПоСменам

|ГДЕ

| ГрафикиРаботыПоСменам.ГрафикРаботы = &ГрафикРаботы

| И ГрафикиРаботыПоСменам.Дата МЕЖДУ &Дата1 И &Дата2

|

|УПОРЯДОЧИТЬ ПО

| Дата";

Запрос.УстановитьПараметр("Дата1",ДатаНачала);

Запрос.УстановитьПараметр("Дата2",ДатаОкончания);

Запрос.УстановитьПараметр("ГрафикРаботы",строкаТЧ.График);

Выборка=Запрос.Выполнить().Выбрать();

 

Пока Выборка.Следующий() Цикл

_строкаДнем=Строка(День(Выборка.Дата));

_дата_контроль_ранняя=ПолучитьДатуПроходаСотрудника(Выборка.Дата);

_дата_контроль_поздняя=ПолучитьДатуУходаСотрудника(Выборка.Дата);

//день входа по графику

_НачалоСмены=ПолучитьДеньНачалаСменыПоГрафику(строкаТЧ.График);

_ОкончаниеСмены=ПолучитьДеньОкончанияСменыПоГрафику(строкаТЧ.График);

 

Если _дата_контроль_ранняя<_НачалоСмены и _дата_контроль_поздняя>_ОкончаниеСмены и ИспользоватьФактическоеВремяПрисутствия=Ложь тогда

_разница_регистрация=ПолучитьРазницуВРегисрацииВSKUDФактическогоВремениПрохода(_НачалоСмены, _ОкончаниеСмены);

ИначеЕсли _дата_контроль_ранняя<_НачалоСмены и _дата_контроль_поздняя>_ОкончаниеСмены и ИспользоватьФактическоеВремяПрисутствия=Ложь и Сверхурочно=Истина ТОгда

_разница_регистрация_сверхурочно=ПолучитьРазницуВРегисрацииВSKUDФактическогоВремениПрохода(_дата_контроль_поздняя, _ОкончаниеСмены);

ИначеЕсли _дата_контроль_ранняя<_НачалоСмены и _дата_контроль_поздняя>_ОкончаниеСмены и ИспользоватьФактическоеВремяПрисутствия=Истина тогда

_разница_регистрация=ПолучитьРазницуВРегисрацииВSKUDФактическогоВремениПрохода(_дата_контроль_ранняя, _дата_контроль_поздняя);

КонецЕсли;

 

//_разница_регистрация=ПолучитьРазницуВРегисрацииВSKUDФактическогоВремениПрохода(_дата_контроль_ранняя, _дата_контроль_поздняя);

Если строкаТЧ.График.ВидГрафика=Перечисления.ВидыРабочихГрафиков.Пятидневка Тогда

Если Сверхурочно=ложь Тогда

строкаТЧ["День"+_строкаДнем] = "Я"+" "+Строка(_разница_регистрация);

Иначе

строкаТЧ["День"+_строкаДнем] = "Я"+" "+Строка(_разница_регистрация)+" "+"С"+Строка(_разница_регистрация_сверхурочно);

КонецЕсли;

ИначеЕсли строкаТЧ.График.ВидГрафика=Перечисления.ВидыРабочихГрафиков.Сменный Тогда

строкаТЧ["День"+_строкаДнем] = "";

КонецЕсли;

КонецЦикла;

 

КонецПроцедуры

 

Функция ПолучитьДеньНачалаСменыПоГрафику(График)

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| ЗначенияСвойствОбъектов.Значение

|ИЗ

| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов

|ГДЕ

| ЗначенияСвойствОбъектов.Объект = &Объект

| И ЗначенияСвойствОбъектов.Свойство = &Свойство";

Запрос.УстановитьПараметр("Объект",График);

Запрос.УстановитьПараметр("Свойство",ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00141"));

Выборка= Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

_дата=Выборка.Значение;

КонецЦикла;

Возврат _дата;

 

КонецФункции

 

Функция ПолучитьДеньОкончанияСменыПоГрафику(График)

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| ЗначенияСвойствОбъектов.Значение

|ИЗ

| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов

|ГДЕ

| ЗначенияСвойствОбъектов.Объект = &Объект

| И ЗначенияСвойствОбъектов.Свойство = &Свойство";

Запрос.УстановитьПараметр("Объект",График);

Запрос.УстановитьПараметр("Свойство",ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00142"));

Выборка= Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

_дата=Выборка.Значение;

КонецЦикла;

Возврат _дата;

 

КонецФункции

 

//процедура загружает в таблицу значений данные

Процедура ЗагрузитьТаблицуЗначенийДаннымиИзТаблицыLOGS(ИндексСотрудника)

 

_Стр = ПолучитьТекстЗапросаБазыMySql(ИндексСотрудника);

 

Table = Connection.Execute(_Стр);

 

СоздатьТаблицуЗагрузкиДанныхSKUD();

 

 

Пока Table.EOF() = 0 do

 

Value1=Table.Fields("LOGTIME").Value; // текстовоеполе

//Value2=Table.Fields("LOGDATA").Value;//

Value3=Table.Fields("EMPHINT").Value;//

//

//Сообщить(Value1);

//Сообщить(Value2);

//Сообщить(Value3);

 

_строка = _ТаблицаЗагрузки.Добавить();

_строка.LOGTIME = Value1;

_строка.LEMPHINT = Value3;

 

Table.MoveNext();

КонецЦикла;

Table.Close();

КонецПроцедуры

 

Функция ПолучитьРазницуВРегисрацииВSKUDФактическогоВремениПрохода(_дата_начала, _дата_окончания);

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| ВЫБОР

| КОГДА &ПараметрСверхурочно = ЛОЖЬ

| ТОГДА РАЗНОСТЬДАТ(&Дата1, &Дата2, ЧАС) - 1

| ИНАЧЕ РАЗНОСТЬДАТ(&Дата1, &Дата2, ЧАС)

| КОНЕЦ КАК Результат";

Запрос.УстановитьПараметр("Дата1",_дата_начала);

Запрос.УстановитьПараметр("Дата2",_дата_окончания);

Запрос.УстановитьПараметр("ПараметрСверхурочно",Сверхурочно);

Выборка=Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

_разница=Выборка.Результат;

КонецЦикла;

Возврат _разница;

 

КонецФункции

 

//получим из таблицы LOGS дату прохода сотрудника

Функция ПолучитьДатуПроходаСотрудника(ДатаРегистрации)

 

Запрос=Новый Запрос("ВЫБРАТЬ

| Т.LOGTIME

|ПОМЕСТИТЬ ВТТаб

|ИЗ

| &Таб КАК Т");

Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;

Запрос.УстановитьПараметр("Таб",_ТаблицаЗагрузки);

Запрос.Выполнить();

ЗапросТМП=Новый Запрос("ВЫБРАТЬ

| МИНИМУМ(ВТТаб.LOGTIME) КАК LOGTIME

|ИЗ

| ВТТаб КАК ВТТаб

|ГДЕ

| ВТТаб.LOGTIME МЕЖДУ &ДатаРегистрацииНачало И&ДатаРегистрацииКонец");

 

ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц;

ЗапросТМП.УстановитьПараметр("ДатаРегистрацииНачало",НачалоДня(ДатаРегистрации));

ЗапросТМП.УстановитьПараметр("ДатаРегистрацииКонец",КонецДня(ДатаРегистрации));

Выборка = ЗапросТМП.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

_РаняяДатаПрихода=Выборка.LOGTIME;

КонецЦикла;

Возврат _РаняяДатаПрихода;

КонецФункции

//аналогично из таблицы LOGS на дату ухода сотрудника

Функция ПолучитьДатуУходаСотрудника(ДатаРегистрации)

 

Запрос=Новый Запрос("ВЫБРАТЬ

| Т.LOGTIME

|ПОМЕСТИТЬ ВТТаб

|ИЗ

| &Таб КАК Т");

Запрос.МенеджерВременныхТаблиц=Новый МенеджерВременныхТаблиц;

Запрос.УстановитьПараметр("Таб",_ТаблицаЗагрузки);

Запрос.Выполнить();

ЗапросТМП=Новый Запрос("ВЫБРАТЬ

| МАКСИМУМ(ВТТаб.LOGTIME) КАК LOGTIME

|ИЗ

| ВТТаб КАК ВТТаб

|ГДЕ

| ВТТаб.LOGTIME МЕЖДУ &ДатаРегистрацииНачало И&ДатаРегистрацииКонец");

 

ЗапросТМП.МенеджерВременныхТаблиц=Запрос.МенеджерВременныхТаблиц;

ЗапросТМП.УстановитьПараметр("ДатаРегистрацииНачало",НачалоДня(ДатаРегистрации));

ЗапросТМП.УстановитьПараметр("ДатаРегистрацииКонец",КонецДня(ДатаРегистрации));

Выборка = ЗапросТМП.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

_ПоздняяДатаПрихода=Выборка.LOGTIME;

КонецЦикла;

Возврат _ПоздняяДатаПрихода;

КонецФункции

//функция получает разницу во времени между зафиксированными в проходной датами

//Функция ПолучитьРазницуВРегисрацииВSKUDФактическогоВремениПрохода(_дата_контроль_ранняя, _дата_контроль_поздняя)

// Запрос = Новый Запрос;

// Запрос.Текст = "ВЫБРАТЬ

// | РАЗНОСТЬДАТ(&Дата1, &Дата2, ЧАС) - 1 КАК Разница";

// Запрос.УстановитьПараметр("Дата1",_дата_контроль_ранняя);

// Запрос.УстановитьПараметр("Дата2",_дата_контроль_поздняя);

// Выборка=Запрос.Выполнить().Выбрать();

// Пока Выборка.Следующий() Цикл

// _РазностьДат=Выборка.Разница;

// КонецЦикла;

// Возврат _РазностьДат;

//КонецФункции

//преобразуем параметры дата начала и конец в формат MySQL

Функция ПреобразоватьДатуНачалаВЗначениеMySQL()

 

_ДатаНачала=Формат(ДатаНачала,"ДФ=yyyy-MM-dd");

Возврат _ДатаНачала;

КонецФункции

Функция ПреобразоватьДатуОкончанияВЗначениеMySQL()

_ДатаКонец=Формат(ДатаОкончания,"ДФ=yyyy-MM-dd");

Возврат _ДатаКонец;

КонецФункции

// функция получает текст запроса в MySql

Функция ПолучитьТекстЗапросаБазыMySql(ИдентификаторВБазе)

 

Возврат "SELECT `ID`, `LOGTIME`, `AREA`, `LOGDATA`, `EMPHINT`, `DEVHINT` FROM `logs` WHERE DATE(LOGTIME) BETWEEN"+" "+"'"+ПреобразоватьДатуНачалаВЗначениеMySQL()+"'"+" "+"AND"+" "+"'"+ПреобразоватьДатуОкончанияВЗначениеMySQL()+"'"+" "+"AND EMPHINT="+ИдентификаторВБазе+" "+"AND (hex(LOGS.LOGDATA) LIKE 'FE06______03%')";

 

КонецФункции

//пока пустая

Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)

// Вставить содержимое обработчика.

КонецПроцедуры

//настройка времени

Процедура Кнопка1Нажатие(Элемент)

 

НастройкаПериода = Новый НастройкаПериода;

НастройкаПериода.УстановитьПериод(ДатаНачала,?(ДатаОкончания='0001-01-01', ДатаОкончания, КонецДня(ДатаОкончания)));

НастройкаПериода.РедактироватьКакИнтервал = Истина;

НастройкаПериода.РедактироватьКакПериод = Истина;

НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;

Если НастройкаПериода.Редактировать() Тогда

ДатаНачала = НастройкаПериода.ПолучитьДатуНачала();

ДатаОкончания = НастройкаПериода.ПолучитьДатуОкончания();

КонецЕсли;

 

КонецПроцедуры

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-03-24 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: