Перем PCSC_Инфо; Перем PCSC_Карта; Перем PCSC_Наблюдение; Перем PCSC_Захват; Перем PCSC_Mifare; Перем VARIANT_TRUE; Перем VARIANT_FALSE; Перем CL_KEYTYPE_MIFARE_A; Перем CL_KEYTYPE_MIFARE_B; Перем CL_CARDTYPE_UNKNOWN; Перем CL_CARDTYPE_MIFARE_1K; Перем CL_CARDTYPE_MIFARE_4K; Перем CL_CARDTYPE_MIFARE_ULTRA_LIGHT; Перем CL_CARDTYPE_SLE55R_XXXXX; Перем CL_CARDTYPE_SR176; Перем CL_CARDTYPE_SRIX4K; Перем CL_CARDTYPE_AT88RF020; Перем CL_CARDTYPE_AT88SC0204CRF; Перем CL_CARDTYPE_AT88SC0808CRF; Перем CL_CARDTYPE_AT88SC1616CRF; Перем CL_CARDTYPE_AT88SC3216CRF; Перем CL_CARDTYPE_AT88SC6416CRF; Перем CL_CARDTYPE_SRF55V10P; Перем CL_CARDTYPE_SRF55V02P; Перем CL_CARDTYPE_SRF55V10S; Перем CL_CARDTYPE_SRF55V02S; Перем CL_CARDTYPE_TAGIT; Перем CL_CARDTYPE_LRI512; Перем CL_CARDTYPE_ICODESLI; Перем CL_CARDTYPE_TEMPSENS; Перем CL_CARDTYPE_ICODE1; Перем CL_CARDTYPE_PICOPASS_2K; Перем CL_CARDTYPE_PICOPASS_2KS; Перем CL_CARDTYPE_PICOPASS_16K; Перем CL_CARDTYPE_PICOPASS_16KS; Перем Инициализирован; Процедура УсловияДоступаДляDиVБлоков_ЗаполнитьСтроку(Строка, УД, Блоки) Строка.Блоки = Блоки; Строка.Биты = УД; Если УД = 0 Тогда Строка.Чтение = "A или B"; Строка.Запись = "A или B"; Строка.Инкремент = "A или B"; Строка.Декремент = "A или B"; ИначеЕсли УД = 1 Тогда Строка.Чтение = "A или B"; Строка.Запись = "Никогда"; Строка.Инкремент = "Никогда"; Строка.Декремент = "A или B"; ИначеЕсли УД = 2 Тогда Строка.Чтение = "A или B"; Строка.Запись = "Никогда"; Строка.Инкремент = "Никогда"; Строка.Декремент = "Никогда"; ИначеЕсли УД = 3 Тогда Строка.Чтение = "B"; Строка.Запись = "B"; Строка.Инкремент = "Никогда"; Строка.Декремент = "Никогда"; ИначеЕсли УД = 4 Тогда Строка.Чтение = "A или B"; Строка.Запись = "B"; Строка.Инкремент = "Никогда"; Строка.Декремент = "Никогда"; ИначеЕсли УД = 5 Тогда Строка.Чтение = "A или B"; Строка.Запись = "B"; Строка.Инкремент = "B"; Строка.Декремент = "A или B"; ИначеЕсли УД = 6 Тогда Строка.Чтение = "A или B"; Строка.Запись = "B"; Строка.Инкремент = "B"; Строка.Декремент = "A или B"; ИначеЕсли УД = 7 Тогда Строка.Чтение = "Никогда"; Строка.Запись = "Никогда"; Строка.Инкремент = "Никогда"; Строка.Декремент = "Никогда"; КонецЕсли; КонецПроцедуры Процедура УсловияДоступаДляTБлока_ЗаполнитьСтроку(Строка, УД, Блок) Строка.Блоки = Блок; Строка.Биты = УД; Если УД = 0 Тогда Строка.КлючAЧтение = "Никогда"; Строка.КлючAЗапись = "A или B"; Строка.УсловияЧтение = "A или B"; Строка.УсловиеЗапись = "Никогда"; Строка.КлючBЧтение = "A или B"; Строка.КлючBЗапись = "A или B"; ИначеЕсли УД = 1 Тогда Строка.КлючAЧтение = "Никогда"; Строка.КлючAЗапись = "A или B"; Строка.УсловияЧтение = "A или B"; Строка.УсловиеЗапись = "A или B"; Строка.КлючBЧтение = "A или B"; Строка.КлючBЗапись = "A или B"; ИначеЕсли УД = 2 Тогда Строка.КлючAЧтение = "Никогда"; Строка.КлючAЗапись = "Никогда"; Строка.УсловияЧтение = "A или B"; Строка.УсловиеЗапись = "Никогда"; Строка.КлючBЧтение = "A или B"; Строка.КлючBЗапись = "Никогда"; ИначеЕсли УД = 3 Тогда Строка.КлючAЧтение = "Никогда"; Строка.КлючAЗапись = "B"; Строка.УсловияЧтение = "A или B"; Строка.УсловиеЗапись = "B"; Строка.КлючBЧтение = "Никогда"; Строка.КлючBЗапись = "B"; ИначеЕсли УД = 4 Тогда Строка.КлючAЧтение = "Никогда"; Строка.КлючAЗапись = "B"; Строка.УсловияЧтение = "A или B"; Строка.УсловиеЗапись = "Никогда"; Строка.КлючBЧтение = "Никогда"; Строка.КлючBЗапись = "B"; ИначеЕсли УД = 5 Тогда Строка.КлючAЧтение = "Никогда"; Строка.КлючAЗапись = "Никогда"; Строка.УсловияЧтение = "A или B"; Строка.УсловиеЗапись = "B"; Строка.КлючBЧтение = "Никогда"; Строка.КлючBЗапись = "Никогда"; ИначеЕсли УД = 6 Тогда Строка.КлючAЧтение = "Никогда"; Строка.КлючAЗапись = "Никогда"; Строка.УсловияЧтение = "A или B"; Строка.УсловиеЗапись = "Никогда"; Строка.КлючBЧтение = "Никогда"; Строка.КлючBЗапись = "Никогда"; ИначеЕсли УД = 7 Тогда Строка.КлючAЧтение = "Никогда"; Строка.КлючAЗапись = "Никогда"; Строка.УсловияЧтение = "Никогда"; Строка.УсловиеЗапись = "Никогда"; Строка.КлючBЧтение = "Никогда"; Строка.КлючBЗапись = "Никогда"; КонецЕсли; КонецПроцедуры Процедура УсловияДоступаДляБлоков_Заполнить(УД_0, УД_1, УД_2, УД_3) УсловияДоступаДляDиVБлоков.Очистить(); УсловияДоступаДляTБлока.Очистить(); УсловияДоступаДляDиVБлоков_ЗаполнитьСтроку(УсловияДоступаДляDиVБлоков.Добавить(), УД_0, "0 / 0..4"); УсловияДоступаДляDиVБлоков_ЗаполнитьСтроку(УсловияДоступаДляDиVБлоков.Добавить(), УД_1, "1 / 5..9"); УсловияДоступаДляDиVБлоков_ЗаполнитьСтроку(УсловияДоступаДляDиVБлоков.Добавить(), УД_2, "2 / 10..14"); УсловияДоступаДляTБлока_ЗаполнитьСтроку(УсловияДоступаДляTБлока.Добавить(), УД_3, "T-Блок"); КонецПроцедуры Процедура ИнициализацияНажатие(Элемент) PCSC_Инфо = Неопределено; PCSC_Захват = Неопределено; PCSC_Mifare = Неопределено; Инициализирован = Ложь; Попытка ПодключитьВнешнююКомпоненту("AddIn.PCSCInfo"); ПодключитьВнешнююКомпоненту("AddIn.PCSCCapture"); ПодключитьВнешнююКомпоненту("AddIn.PCSCCard_Mifare"); PCSC_Инфо = Новый("AddIn.PCSCInfo"); PCSC_Захват = Новый("AddIn.PCSCCapture"); PCSC_Mifare = Новый("AddIn.PCSCCard_Mifare"); PCSC_Захват.УстановитьATR(ATRКарты); PCSC_Захват.НачатьЗахват(); Инициализирован = Истина; Сообщить("Инициализация: классы успешно загружены"); Исключение ДеинициализацияНажатие(Неопределено); Сообщить("Инициализация: классы не загружены"); КонецПопытки; КонецПроцедуры Процедура ДеинициализацияНажатие(Элемент) Попытка PCSC_Захват.ОстановитьЗахват(); Исключение КонецПопытки; PCSC_Инфо = Неопределено; PCSC_Захват = Неопределено; PCSC_Mifare = Неопределено; Инициализирован = Ложь; Сообщить("Деинициализация"); КонецПроцедуры Процедура ПолучитьСписокРидеровНажатие(Элемент) Если Инициализирован Тогда КоличествоРидеров = 0; ИмяРидера = ""; СпРидеры = Новый СписокЗначений(); Если PCSC_Инфо.ПолучитьCписокРидеров(КоличествоРидеров) = 1 Тогда Если КоличествоРидеров > 0 Тогда Для ТекРидер = 0 По КоличествоРидеров - 1 Цикл Если PCSC_Инфо.ПолучитьИмяРидера(ТекРидер, ИмяРидера) = 1 Тогда СпРидеры.Добавить(ТекРидер, ИмяРидера); Сообщить("Обнаружен ридер [" + ТекРидер + "]: " + ИмяРидера); КонецЕсли; КонецЦикла; Иначе Сообщить("Не один ридер не подключён!"); КонецЕсли; Иначе Сообщить("Ошибка при получении списка ридеров"); КонецЕсли; ЭлементыФормы.НомерРидера.СписокВыбора = СпРидеры; НомерРидера = 0; КонецЕсли; КонецПроцедуры Процедура ПолучитьТипКартыНажатие(Элемент) Если Инициализирован Тогда ИмяРидера = ЭлементыФормы.НомерРидера.СписокВыбора[НомерРидера].Представление; PCSC_Mifare.ИмяРидера = ИмяРидера; Если PCSC_Mifare.Подключиться() = 1 Тогда Если PCSC_Mifare.ПолучитьТипКарты(ТипКарты) = 1 Тогда Если ТипКарты <> CL_CARDTYPE_MIFARE_1K ИЛИ ТипКарты <> CL_CARDTYPE_MIFARE_4K Тогда Сообщить(ИмяРидера + " - тип карты карты: " + ЭлементыФормы.ТипКарты.СписокВыбора[ТипКарты].Представление); Иначе Сообщить(ИмяРидера + " - тип карты карты " + ЭлементыФормы.ТипКарты.СписокВыбора[ТипКарты].Представление + " не поддерживается"); ТипКарты = CL_CARDTYPE_UNKNOWN; КонецЕсли; Иначе Сообщить(ИмяРидера + " - не удалось подключится к карте"); КонецЕсли; PCSC_Mifare.Отключиться(); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПолучитьUIDКартыНажатие(Элемент) Если Инициализирован Тогда ИмяРидера = ЭлементыФормы.НомерРидера.СписокВыбора[НомерРидера].Представление; PCSC_Mifare.ИмяРидера = ИмяРидера; Если PCSC_Mifare.Подключиться() = 1 Тогда Если PCSC_Mifare.ПолучитьСерийныйНомер(UIDКарты) = 1 Тогда Сообщить(ИмяРидера + " - UID карты: " + UIDКарты); Иначе Сообщить(ИмяРидера + " - не удалось подключится к карте"); КонецЕсли; PCSC_Mifare.Отключиться(); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ЗагрузитьКлючНажатие(Элемент) Если Инициализирован Тогда ИмяРидера = ЭлементыФормы.НомерРидера.СписокВыбора[НомерРидера].Представление; PCSC_Mifare.ИмяРидера = ИмяРидера; ТипКлючаПерем = ?(ТипКлюча = "A", CL_KEYTYPE_MIFARE_A, CL_KEYTYPE_MIFARE_B); КлючПерем = ?(ТипКлюча = "A", Ключ_A, Ключ_B); ХранениеКлючаПерем = ?(ХранениеКлюча = VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE); Если PCSC_Mifare.Подключиться() = 1 Тогда PCSC_Mifare.НачатьТранзакцию(); Если PCSC_Mifare.ЗагрузитьКлюч(ХранениеКлючаПерем, ТипКлючаПерем, 0, КлючПерем) = 1 Тогда //Сообщить(ИмяРидера + " - ключ (" + ТипКлюча + ") " + КлючПерем + " загружен"); Если PCSC_Mifare.Аутентификация(Сектор, ХранениеКлючаПерем, ТипКлючаПерем, 0) = 1 Тогда Сообщить(ИмяРидера + " - авторизаця блока сектора " + Сектор); Иначе Сообщить(ИмяРидера + " - не удалось пройти авторизацию для сектора " + Сектор); КонецЕсли; Иначе Сообщить(ИмяРидера + " - не удалось загрузить ключ"); КонецЕсли; PCSC_Mifare.ЗавершитьТранзакцию(); PCSC_Mifare.Отключиться(); Иначе Сообщить(ИмяРидера + " - не удалось подключится к карте"); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ЧтениеDБлокаНажатие(Элемент) Если Инициализирован Тогда ИмяРидера = ЭлементыФормы.НомерРидера.СписокВыбора[НомерРидера].Представление; PCSC_Mifare.ИмяРидера = ИмяРидера; ТипКлючаПерем = ?(ТипКлюча = "A", CL_KEYTYPE_MIFARE_A, CL_KEYTYPE_MIFARE_B); ХранениеКлючаПерем = ?(ХранениеКлюча = VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE); Если PCSC_Mifare.Подключиться() = 1 Тогда //PCSC_Mifare.НачатьТранзакцию(); //Если PCSC_Mifare.Аутентификация(Сектор, ХранениеКлючаПерем, ТипКлючаПерем, 0) = 1 Тогда Если PCSC_Mifare.СчитатьДБлок(Блок) = 1 Тогда Данные16 = PCSC_Mifare.ОтветКарты; Сообщить(ИмяРидера + " - чтение блока " + Блок + " для сектора " + Сектор + " произведено успешно"); Иначе Сообщить(ИмяРидера + " - не удалось произвести чтение блока " + Блок + " сектора " + Сектор); КонецЕсли; //Иначе // Сообщить(ИмяРидера + " - не удалось пройти авторизацию для сектора " + Сектор); //КонецЕсли; //PCSC_Mifare.ЗавершитьТранзакцию(); PCSC_Mifare.Отключиться(); Иначе Сообщить(ИмяРидера + " - не удалось подключится к карте"); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ЗаписьDБлокаНажатие(Элемент) Если Инициализирован Тогда ИмяРидера = ЭлементыФормы.НомерРидера.СписокВыбора[НомерРидера].Представление; PCSC_Mifare.ИмяРидера = ИмяРидера; ТипКлючаПерем = ?(ТипКлюча = "A", CL_KEYTYPE_MIFARE_A, CL_KEYTYPE_MIFARE_B); ХранениеКлючаПерем = ?(ХранениеКлюча = VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE); Если PCSC_Mifare.Подключиться() = 1 Тогда PCSC_Mifare.НачатьТранзакцию(); Если PCSC_Mifare.Аутентификация(Сектор, ХранениеКлючаПерем, ТипКлючаПерем, 0) = 1 Тогда Если СтрДлина(Данные16) = 32 И PCSC_Mifare.ЗаписатьДБлок(Блок, Данные16) = 1 Тогда Сообщить(ИмяРидера + " - запись блока " + Блок + " для сектора " + Сектор + " произведено успешно"); Иначе Сообщить(ИмяРидера + " - не удалось произвести запись блока " + Блок + " сектора " + Сектор); КонецЕсли; Иначе Сообщить(ИмяРидера + " - не удалось пройти авторизацию для сектора " + Сектор); КонецЕсли; PCSC_Mifare.ЗавершитьТранзакцию(); PCSC_Mifare.Отключиться(); Иначе Сообщить(ИмяРидера + " - не удалось подключится к карте"); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ЧтениеVБлокаНажатие(Элемент) Если Инициализирован Тогда ИмяРидера = ЭлементыФормы.НомерРидера.СписокВыбора[НомерРидера].Представление; PCSC_Mifare.ИмяРидера = ИмяРидера; ТипКлючаПерем = ?(ТипКлюча = "A", CL_KEYTYPE_MIFARE_A, CL_KEYTYPE_MIFARE_B); ХранениеКлючаПерем = ?(ХранениеКлюча = VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE); Если PCSC_Mifare.Подключиться() = 1 Тогда PCSC_Mifare.НачатьТранзакцию(); Если PCSC_Mifare.Аутентификация(Сектор, ХранениеКлючаПерем, ТипКлючаПерем, 0) = 1 Тогда Если PCSC_Mifare.СчитатьВБлок(Блок, ДанныеВ) = 1 Тогда Сообщить(ИмяРидера + " - чтение блока " + Блок + " для сектора " + Сектор + " произведено успешно"); Иначе Сообщить(ИмяРидера + " - не удалось произвести чтение блока " + Блок + " сектора " + Сектор); КонецЕсли; Иначе Сообщить(ИмяРидера + " - не удалось пройти авторизацию для сектора " + Сектор); КонецЕсли; PCSC_Mifare.ЗавершитьТранзакцию(); PCSC_Mifare.Отключиться(); Иначе Сообщить(ИмяРидера + " - не удалось подключится к карте"); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ЗаписьVБлокаНажатие(Элемент) Если Инициализирован Тогда ИмяРидера = ЭлементыФормы.НомерРидера.СписокВыбора[НомерРидера].Представление; PCSC_Mifare.ИмяРидера = ИмяРидера; Адрес = 0; ТипКлючаПерем = ?(ТипКлюча = "A", CL_KEYTYPE_MIFARE_A, CL_KEYTYPE_MIFARE_B); ХранениеКлючаПерем = ?(ХранениеКлюча = VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE); Если PCSC_Mifare.Подключиться() = 1 Тогда PCSC_Mifare.НачатьТранзакцию(); Если PCSC_Mifare.Аутентификация(Сектор, ХранениеКлючаПерем, ТипКлючаПерем, 0) = 1 Тогда Если PCSC_Mifare.ЗаписатьВБлок(Блок, ДанныеВ, Адрес) = 1 Тогда Сообщить(ИмяРидера + " - запись блока " + Блок + " для сектора " + Сектор + " произведено успешно"); Иначе Сообщить(ИмяРидера + " - не удалось произвести запись блока " + Блок + " сектора " + Сектор); КонецЕсли; Иначе Сообщить(ИмяРидера + " - не удалось пройти авторизацию для сектора " + Сектор); КонецЕсли; PCSC_Mifare.ЗавершитьТранзакцию(); PCSC_Mifare.Отключиться(); Иначе Сообщить(ИмяРидера + " - не удалось подключится к карте"); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ИнкрементНажатие(Элемент) Если Инициализирован Тогда ИмяРидера = ЭлементыФормы.НомерРидера.СписокВыбора[НомерРидера].Представление; PCSC_Mifare.ИмяРидера = ИмяРидера; Адрес = 0; ТипКлючаПерем = ?(ТипКлюча = "A", CL_KEYTYPE_MIFARE_A, CL_KEYTYPE_MIFARE_B); ХранениеКлючаПерем = ?(ХранениеКлюча = VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE); Если PCSC_Mifare.Подключиться() = 1 Тогда PCSC_Mifare.НачатьТранзакцию(); Если PCSC_Mifare.Аутентификация(Сектор, ХранениеКлючаПерем, ТипКлючаПерем, 0) = 1 Тогда Если PCSC_Mifare.Инкремент(Блок, 1) = 1 Тогда Сообщить(ИмяРидера + " - запись блока " + Блок + " для сектора " + Сектор + " произведено успешно"); Иначе Сообщить(ИмяРидера + " - не удалось произвести запись блока " + Блок + " сектора " + Сектор); КонецЕсли; Иначе Сообщить(ИмяРидера + " - не удалось пройти авторизацию для сектора " + Сектор); КонецЕсли; PCSC_Mifare.ЗавершитьТранзакцию(); PCSC_Mifare.Отключиться(); Иначе Сообщить(ИмяРидера + " - не удалось подключится к карте"); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ДекрементНажатие(Элемент) Если Инициализирован Тогда ИмяРидера = ЭлементыФормы.НомерРидера.СписокВыбора[НомерРидера].Представление; PCSC_Mifare.ИмяРидера = ИмяРидера; Адрес = 0; ТипКлючаПерем = ?(ТипКлюча = "A", CL_KEYTYPE_MIFARE_A, CL_KEYTYPE_MIFARE_B); ХранениеКлючаПерем = ?(ХранениеКлюча = VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE); Если PCSC_Mifare.Подключиться() = 1 Тогда PCSC_Mifare.НачатьТранзакцию(); Если PCSC_Mifare.Аутентификация(Сектор, ХранениеКлючаПерем, ТипКлючаПерем, 0) = 1 Тогда Если PCSC_Mifare.Декремент(Блок, 1) = 1 Тогда Сообщить(ИмяРидера + " - запись блока " + Блок + " для сектора " + Сектор + " произведено успешно"); Иначе Сообщить(ИмяРидера + " - не удалось произвести запись блока " + Блок + " сектора " + Сектор); КонецЕсли; Иначе Сообщить(ИмяРидера + " - не удалось пройти авторизацию для сектора " + Сектор); КонецЕсли; PCSC_Mifare.ЗавершитьТранзакцию(); PCSC_Mifare.Отключиться(); Иначе Сообщить(ИмяРидера + " - не удалось подключится к карте"); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ЧтениеTБлокаНажатие(Элемент) Если Инициализирован Тогда ИмяРидера = ЭлементыФормы.НомерРидера.СписокВыбора[НомерРидера].Представление; PCSC_Mifare.ИмяРидера = ИмяРидера; Адрес = 0; ТипКлючаПерем = ?(ТипКлюча = "A", CL_KEYTYPE_MIFARE_A, CL_KEYTYPE_MIFARE_B); ХранениеКлючаПерем = ?(ХранениеКлюча = VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE); Если PCSC_Mifare.Подключиться() = 1 Тогда PCSC_Mifare.НачатьТранзакцию(); Если PCSC_Mifare.Аутентификация(Сектор, ХранениеКлючаПерем, ТипКлючаПерем, 0) = 1 Тогда Если PCSC_Mifare.СчитатьТБлок(Сектор, УДБлок0, УДБлок1,УДБлок2, УДБлок3, Ключ_B) = 1 Тогда Сообщить(ИмяРидера + " - чтение T-блока произведено успешно"); Иначе Сообщить(ИмяРидера + " - не удалось произвести чтение T-блока"); КонецЕсли; Иначе Сообщить(ИмяРидера + " - не удалось пройти авторизацию для сектора " + Сектор); КонецЕсли; PCSC_Mifare.ЗавершитьТранзакцию(); PCSC_Mifare.Отключиться(); Иначе Сообщить(ИмяРидера + " - не удалось подключится к карте"); КонецЕсли; КонецЕсли; УсловияДоступаДляБлоков_Заполнить(УДБлок0, УДБлок1, УДБлок2, УДБлок3); КонецПроцедуры Процедура ЗаписьTБлокаНажатие(Элемент) Если Инициализирован Тогда Если УДБлок3 = 0 ИЛИ УДБлок3 = 2 ИЛИ УДБлок3 = 4 ИЛИ УДБлок3 = 6 ИЛИ УДБлок3 = 7 Тогда Ответ = Вопрос("При успешной записи будет невозможна модификация условий доступа. Вы хотите продолжить?", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; КонецЕсли; ИмяРидера = ЭлементыФормы.НомерРидера.СписокВыбора[НомерРидера].Представление; PCSC_Mifare.ИмяРидера = ИмяРидера; Адрес = 0; ТипКлючаПерем = ?(ТипКлюча = "A", CL_KEYTYPE_MIFARE_A, CL_KEYTYPE_MIFARE_B); ХранениеКлючаПерем = ?(ХранениеКлюча = VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE); Если PCSC_Mifare.Подключиться() = 1 Тогда PCSC_Mifare.НачатьТранзакцию(); Если PCSC_Mifare.Аутентификация(Сектор, ХранениеКлючаПерем, ТипКлючаПерем, 0) = 1 Тогда Если PCSC_Mifare.ЗаписатьТБлок(Сектор, Ключ_A, Ключ_B, УДБлок0, УДБлок1, УДБлок2, УДБлок3) = 1 Тогда Сообщить(ИмяРидера + " - запись T-блока произведено успешно"); Иначе Сообщить(ИмяРидера + " - не удалось произвести запись T-блока"); КонецЕсли; Иначе Сообщить(ИмяРидера + " - не удалось пройти авторизацию для сектора " + Сектор); КонецЕсли; PCSC_Mifare.ЗавершитьТранзакцию(); PCSC_Mifare.Отключиться(); Иначе Сообщить(ИмяРидера + " - не удалось подключится к карте"); КонецЕсли; КонецЕсли; УсловияДоступаДляБлоков_Заполнить(УДБлок0, УДБлок1, УДБлок2, УДБлок3); КонецПроцедуры Процедура УДБлокПриИзменении(Элемент) УсловияДоступаДляБлоков_Заполнить(УДБлок0, УДБлок1, УДБлок2, УДБлок3); КонецПроцедуры Процедура ПриОткрытии() УсловияДоступаДляБлоков_Заполнить(УДБлок0, УДБлок1, УДБлок2, УДБлок3); КонецПроцедуры Процедура ПриЗакрытии() ДеинициализацияНажатие(Неопределено); КонецПроцедуры Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) Если Источник = "PCSCCapture" Тогда Если Событие = "КартаЗахвачена" Тогда КоличествоРидеров = 0; ИмяРидера = ""; СпРидеры = Новый СписокЗначений(); Если PCSC_Инфо.ПолучитьCписокРидеров(КоличествоРидеров) = 1 Тогда Если КоличествоРидеров > 0 Тогда Для ТекРидер = 0 По КоличествоРидеров - 1 Цикл Если PCSC_Инфо.ПолучитьИмяРидера(ТекРидер, ИмяРидера) = 1 Тогда СпРидеры.Добавить(ТекРидер, ИмяРидера); КонецЕсли; КонецЦикла; ЭлементыФормы.НомерРидера.СписокВыбора = СпРидеры; НомерРидера = 0; Для каждого Номер Из ЭлементыФормы.НомерРидера.СписокВыбора Цикл Если Номер.Представление = Данные Тогда НомерРидера = Номер.Значение; Прервать; КонецЕсли; КонецЦикла; ИмяРидера = ЭлементыФормы.НомерРидера.СписокВыбора[НомерРидера].Представление; PCSC_Mifare.ИмяРидера = ИмяРидера; Если PCSC_Mifare.Подключиться() = 1 Тогда Если PCSC_Mifare.ПолучитьТипКарты(ТипКарты) = 1 Тогда Если ТипКарты <> CL_CARDTYPE_MIFARE_1K ИЛИ ТипКарты <> CL_CARDTYPE_MIFARE_4K Тогда Иначе ТипКарты = CL_CARDTYPE_UNKNOWN; КонецЕсли; КонецЕсли; PCSC_Mifare.ПолучитьСерийныйНомер(UIDКарты); PCSC_Mifare.Отключиться(); КонецЕсли; КонецЕсли; КонецЕсли; ИначеЕсли Событие = "КартаОсвобождена" Тогда КонецЕсли; КонецЕсли; КонецПроцедуры Процедура КоманднаяПанельУстановитьДрайвер(Кнопка) Попытка ПолучитьМакет("ESDK2_1C_dll").Записать(КаталогПрограммы() + "ESDK2_1C.dll"); ПолучитьМакет("MCSCM_dll").Записать(КаталогПрограммы() + "MCSCM.dll"); ПолучитьМакет("scardsyn_dll").Записать(КаталогПрограммы() + "scardsyn.dll"); ПутьRegSvr32 = "regsvr32.exe " + """" + КаталогПрограммы() + "ESDK2_1C.dll"""; ЗапуститьПриложение(ПутьRegSvr32, , Истина); Исключение Сообщить("Ошибка при установки драйвера"); КонецПопытки; КонецПроцедуры VARIANT_TRUE = -1; VARIANT_FALSE = 0; CL_KEYTYPE_MIFARE_A = 96; CL_KEYTYPE_MIFARE_B = 97; CL_CARDTYPE_UNKNOWN = 0; CL_CARDTYPE_MIFARE_1K = 1; CL_CARDTYPE_MIFARE_4K = 2; CL_CARDTYPE_MIFARE_ULTRA_LIGHT = 3; CL_CARDTYPE_SLE55R_XXXXX = 5; CL_CARDTYPE_SR176 = 6; CL_CARDTYPE_SRIX4K = 7; CL_CARDTYPE_AT88RF020 = 8; CL_CARDTYPE_AT88SC0204CRF = 9; CL_CARDTYPE_AT88SC0808CRF = 10; CL_CARDTYPE_AT88SC1616CRF = 11; CL_CARDTYPE_AT88SC3216CRF = 12; CL_CARDTYPE_AT88SC6416CRF = 13; CL_CARDTYPE_SRF55V10P = 14; CL_CARDTYPE_SRF55V02P = 15; CL_CARDTYPE_SRF55V10S = 16; CL_CARDTYPE_SRF55V02S = 17; CL_CARDTYPE_TAGIT = 18; CL_CARDTYPE_LRI512 = 19; CL_CARDTYPE_ICODESLI = 20; CL_CARDTYPE_TEMPSENS = 21; CL_CARDTYPE_ICODE1 = 22; CL_CARDTYPE_PICOPASS_2K = 23; CL_CARDTYPE_PICOPASS_2KS = 24; CL_CARDTYPE_PICOPASS_16K = 25; CL_CARDTYPE_PICOPASS_16KS = 26; Инициализирован = Ложь; ТипКлюча = "A"; ТипКарты = CL_CARDTYPE_UNKNOWN; ХранениеКлюча = VARIANT_TRUE; Ключ_A = "FFFFFFFFFFFF"; Ключ_B = "FFFFFFFFFFFF"; ATRКарты = ""; Сектор = 0; Блок = 0; УДБлок0 = 0; УДБлок1 = 0; УДБлок2 = 0; УДБлок3 = 0;