Перем 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;