1C + Arduino + сканер отпечатков пальцев + RFID считыватель

Публикация № 889318

Администрирование - Администрирование данных 1С - Сервисные утилиты

Arduino сканер отпечатков пальцев RFID считыватель

Связываем 1C, Arduino, сканер отпечатков пальцев и RFID считыватель для системы учёта рабочего времени или пропускной системы.

Что нужно

 

  1. Модуль отпечатков пальцев FPM10A
  2. RFID-модуль RC522
  3. Arduino mega (теоретически можно использовать и другие платы но я остановился на данной из-за количества выводов)
  4. 1 лицензия на 1С 8.2 (толстый клиент в моём случае, под тонкий пилите сами)
  5. Связь по Com порту с помощью MsCommLib.MsComm (нужна лицензия, ягуглится даже тут)
  6. Среда разработки для ардуино (использована 1.8.5)
  7. Планшет с USB интерфейсом.
  8. Обвязка: Резистор 1 Кило ОМ, кнопка на замыкание, проводочки, "синяя" изолента, терморектальный крипоанализатор по желанию (можно скрутить проводочки если с данным прибором вас связывают тесные непередаваемые ощущения), USB кабель для ардуиино, прямые руки и кривые извилины среднестатистического 1с ника в т.ч. для изготовления корпуса для всего этого чуда.

Примечания: на фото цвета проводов разнятся - в процессе монтажа порвал несколько проводов т.к. они были совсем Huawei и пришлось брать других доступных цветов.

Система сообщений дублируется в критических моментах специально.
Сразу предупреждаю что может у среднестатистического инженера могут потечь слезы из глаз из канифоли но это мой вообще первый Ардуино проект да еще и такой сложности и вроде оно работает и работает стабильно. Сначала была идея сделать всё через сеть (wifi + проводная) но прикинув затраты на отладку и создание своего http сервиса и внедрение всё в 1с я решил использовать com, в любом случае всю логику можно без изменения конфы вынести во внешнюю обработку.

Можно ещё вставить систему фотографирования входящего сотрудника через web камеру планшета, добавить реле и управлять электронными воротами, допилить интеграцию с ЗУП через внешнюю обработку, передаваемую через параметры запуска и аннигиляцию масленницы для особо опасных проходных секретной важности ).

Полезная критика приветствуется.

Пролог


Видя цены на существующие пропусные системы и системы учета времени меня медленно начала душить зеленая сущность. Долго ходив около ардуинки и её модулей наткнулся на модуль отпечатков пальцев FPM10A. Данный модуль в зависимости от версии может запоминать большое количество отпечатков пальцев - от 50 до бесконечности её флеш памяти и используется в большинстве модулей производителей биометрического контроля. Однако в моём проекте из-за библиотеки оно ограниченно 254. Сразу предупреждаю что выкладываю свою измученно-найденную библиотеку для ардуино т.к. долго мучался с поиском и угробил 3 дня на поиски и отладку библиотеки для данного модуля.

 

Описание модулей

 

Библиотека, использованная в проекте позволяет использовать до 256 (byte) отпечатков пальцев. Мне это количество было избыточным, в крайнем случае можно использовать по 1 модулю на каждых 256 сотрудников.
Количество RFID меток ограниченно лишь уникальностью их UID т.к. база может хранится в 1С и привязанна к сотрудникам. Метки можно использовать все совместимые. Теоретически могут подходить всякие ключи от домофонов, карты метро и карты тройка.
Соединение с 1с идёт по com порту через библиотеку MsCommLib.MsComm но можно переписать под любую другую. Драйвера для com порта для Ардуинки должны ставится вместе со средой разработки ардуино но так же ягуглятся.
Всё спаенное прячется в коробку, связывается по сети (я использовал WiFi но можно и внешнюю USB сетевую карту использовать).


Алгоритм работы

Аппаратно:

  1. Модули ардуино спаиваем/скручиваем
  2. Подключаем к ПК-программатору и заливаем прошивку в арду, запускаем тест, убеждаемся в работоспособности команд
  3. Через USB соединяются с планшетом на Windows 10. На планшете заменяем либо через автозагрузку:

А) через батник:

  • пуск - выполнить: shell:startup

  • создаем там через "блокнот" файл с именем hz.bat и содержанием (уверен что сами справитесь с параметрами файловой базы - у меня sql): "C:\Program Files\1cv8\ ... \bin\1cv8.exe" ENTERPRISE /SServerName:Port\DBName" /NUser /PPassword

Б) более совершенный через замену шелла делаем через VB script (обязательно создайте кроме пользователя по умолчанию другого без запуска шелла):

  • создаем через "блокнот" файл с именем C:\hz\hz.vbs и содержанием

set oShell=createobject("wscript.shell") 
sCmd="""C:\Program Files\1cv8\ ... \bin\1cv8.exe"" ENTERPRISE /SServerName:Port\DBName" /NUser /PPassword"
oShell.run sCmd,,true
sCmd="shutdown /r /t 0" 
oShell.run sCmd

  • пуск - выполнить: regedit, идём по ветке: Current User\Software\Microsoft\Windows NT\CurrentVersion\Winlogon

  • добавляем строковый параметр "Shell" (REG_SZ)

  • редактируем его: "wscript C:\hz\hz.vbs" (без кавычек в параметре)

  • ребут и тест. 1с должна запускаться без explorera

  1. Далее убеждаемся в работоспособности и упаковываем в коробку

 

Программно:

  1. В обычном состоянии ардуино опрашивает сканер отпечатков пальцев, RFID сканер, кнопку администрирования и посылает по com порту команды ожидания.
  2. Как только в поле зрения считывателей появляется палец посылаем команду в com порт и 1с видит либо ID пальца, либо UID метки через чтение переменных.
  3. Кнопка нужна для администирования отпечатков. При её нажатии 1с опрашивает пароль-логин и дальше может присвоить сотруднику либо ID сканера либо UID карты через систему сообщений.

Для связи с 1с используется следующие строки (обработку я делал для своей конфы и своего табеля, она в проекте просто для примера но включена в исходники):


Подключение к com порту

Процедура СтартСистемы()
       ComPort = Новый COMОбъект("MsCommLib.MsComm");    
    Попытка
        ComPort.CommPort        = 3;
        ComPort.Settings        = "9600,N,8,1";
        ComPort.Handshaking     = 0;
        ComPort.InBufferCount   = 0;
        ComPort.InBufferSize    = 70;
        ComPort.InputLen        = 0;
        ComPort.InputMode       = 1;
        ComPort.NullDiscard     = 0;
        ComPort.PortOpen        = Истина;
    Исключение
        Предупреждение("Не возможно открыть порт!");
        ЭтаФорма.Закрыть();
    КонецПопытки;
    
    чСекунд = 0;
     ПодключитьОбработчикОжидания("ВывестиДанныеСПорта", 1, Ложь); // Подключим обработчик для мониторинга порта    
КонецПроцедуры

Отключение от com порта

Процедура КонецСистемы()
    ОтключитьОбработчикОжидания("ВывестиДанныеСПорта");
    ComPort.PortOpen            = Ложь;
    ComPort                     = "";
КонецПроцедуры

Считывание данных с com порта

Процедура ВывестиДанныеСПорта() Экспорт
    ДанныеСПорта = "";
    Если ComPort.PortOpen Тогда
        //ComPort.Output = "1";
        ДанныеСПорта = ComPort.Input;
        ОбработатьЗашифрованнуюСтроку(ДанныеСПорта);
        
        Если СокрЛП(ПредСотрудник) <> "" Тогда
            чСекунд = чСекунд + 1;
        КонецЕсли;
        Если чСекунд > 60 Тогда
            ПредСотрудник      = 0;
            чСекунд         = 0;
        КонецЕсли;
        
    Иначе
        Предупреждение("Порт не открывается");
        ЭтаФорма.Закрыть();
    КонецЕсли;
КонецПроцедуры

Процедура ОбработатьЗашифрованнуюСтроку(ДанныеСПорта)
    Массив = ДанныеСПорта.Выгрузить();
    ИндексМин = ДанныеСПорта.GetLowerBound(0);
    ИндексМакс = ДанныеСПорта.GetUpperBound(0);
    
    СтрокаИнфо = "";
    Для Индекс = ИндексМин По ИндексМакс - 1 Цикл
        СимволПолученный = СокрЛП(Массив.Получить(Индекс));
        Если СимволПолученный = "13" Тогда
            Если Не Приостановить Тогда
                СтрокаИнфо = ОбработкаСтроки(СтрокаИнфо); //Тут обработка сообщений
            КонецЕсли;
        Иначе
            СтрокаИнфо = СтрокаИнфо + Символ(Число(СимволПолученный)); 
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Отправка информации в com порт

Процедура ОтправитьВПорт(Отправить)
    Если ComPort.PortOpen Тогда
        ComPort.Output         = СокрЛП(Отправить);
    Иначе
        Сообщить("Порт не открывается",СтатусСообщения.ОченьВажное);
    КонецЕсли;    
КонецПроцедуры


Код проекта для Arduino Mega


#include <Adafruit_Fingerprint.h>                               // подключаем библиотеку для работы с модулем отпечатков пальцев
#include <SoftwareSerial.h>                                     // подключаем библиотеку для работы с программным UART

#include <SPI.h>
#include <MFRC522.h>

const int     buttonPin = 2;                                    // номер входа, подключенный к кнопке для входа в режим программирования
int           buttonState = 0;                                  // переменная для хранения состояния кнопки

int           modeState = 0;                                    // переменная для хранения состояния устройства. 0 - ожидание сканера отпечатков. 1 - программирование

uint8_t       id;                                               // идентификационный номер, под которым будет сохранён шаблон отпечатка пальца

String        frcUID = "";                                      // идентификационный номер считывателя rfid
int           rfidYes = 0;                                      // успешный ввод RFID

SoftwareSerial  mySerial(10, 11);                               // объявляем объект mySerial для работы с библиотекой SoftwareSerial ИМЯ_ОБЪЕКТА( RX, TX ); // Можно указывать любые выводы, поддерживающие прерывание PCINTx
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);  // объявляем объект finger   для работы с библиотекой Adafruit_Fingerprint ИМЯ_ОБЪЕКТА = Adafruit_Fingerprint(ПАРАМЕТР); // ПАРАМЕТР - ссылка на объект для работы с UART к которому подключен модуль, например: &Serial1

MFRC522 mfrc522(53, 5);                                         // Create MFRC522 instance

void setup() {

  pinMode(buttonPin, INPUT);                                    // инициализируем пин, подключенный к кнопке, как вход

  Serial.begin(9600);                                           // Инициализация аппаратного UART на скорости 9600
  while (!Serial);                                              // Ожидание инициализации аппаратного UART

  delay(500);
  SPI.begin();                                                  // Init SPI bus
  mfrc522.PCD_Init();                                           // Init MFRC522
  mfrc522.PCD_DumpVersionToSerial();                            // Show details of PCD - MFRC522 Card Reader details

  delay(500);                                                   // Ожидание инициализации модуля отпечатков пальцев
  Serial.println(". . . Scan sensor . . .");                    // Вывод сообщения "Поиск сенсора"
  finger.begin(57600);                                          // Инициализация программного UART на скорости 57600 (скорость модуля по умолчанию)
  Serial.println(finger.verifyPassword());
  if (finger.verifyPassword()) {
    Serial.println(". . . Found sensor! . . .");                 // Если модуль отпечатков    обнаружен, выводим сообщение "сенсор обнаружен"
  }
  else {
    Serial.println(". . . Did not find sensor . . .");          // Если модуль отпечатков не обнаружен, выводим сообщение "сенсор не обнаружен" и входим в бесконечный цикл: while(1);
    while (1);
  }
  Serial.println(". . . Please put your finger on the scanner or rfid . . .");

}

void loop() {

  //Работа с кнопкой!
  buttonState = digitalRead(buttonPin); // считываем значения с входа кнопки

  if (buttonState == HIGH) {
    modeState = 1;  // входим в режим программирования ДАЛЕЕ
  }

  switch (modeState) {
    case 0:

      frcUID = "";
      //Работа в режиме опроса отпечатков пальцев и rfid
      if (finger.getImage()         == FINGERPRINT_OK) {      // Захватываем изображение, если результат выполнения равен константе FINGERPRINT_OK (корректная загрузка изображения), то проходим дальше
        if (finger.image2Tz()         == FINGERPRINT_OK) {    // Конвертируем полученное изображение, если результат выполнения равен константе FINGERPRINT_OK (изображение сконвертировано), то проходим дальше
          if (finger.fingerFastSearch() == FINGERPRINT_OK) {  // Находим соответствие в базе данных отпечатков пальцев, если результат выполнения равен константе FINGERPRINT_OK (найдено соответствие), то проходим дальше
            frcUID = ". . . Found ID=" + String(finger.fingerID) + ", confidence=" + String(finger.confidence) + "! . . .";
            Serial.println(frcUID);
          }
        }
      }

      if (mfrc522.PICC_IsNewCardPresent()) {
        delay(100);
        if (mfrc522.PICC_ReadCardSerial()) {
          //mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
          frcUID = "";
          for (byte i = 0; i < mfrc522.uid.size; i++) {
            frcUID = frcUID + (mfrc522.uid.uidByte[i]);
          }
          frcUID = ". . . Found RFID UID=" + frcUID + "@ . . .";
          Serial.println(frcUID);
        }
      }

      delay(100);                                             // Задержка перед следующим сканированием 0,5 сек (нет смысла запускать на полной скорости)
      Serial.println(". . . Please put your finger on the scanner or rfid . . .");
      break;

    case 1:
      Serial.println(". . . Programming mode . . .");         // Входим в режим программирования
      delay(400);
      Serial.println(". . . Programming mode . . .");         // Входим в режим программирования
      delay(400);
      Serial.println(". . . Programming mode . . .");         // Входим в режим программирования
      delay(400);
      Serial.println(". . . Programming mode . . .");         // Входим в режим программирования

      id = readnumber();                                      // Ожидание получения цифры, введённой с COM-порта
      if (id >= 255) {                                        // Если 255 (макс ид) то входим в режим ожидания снова
        modeState = 0;
      } else {
        if (id < 254) {                                       // Если 254 то rfid иначе палец 0-253
          modeState = 2;                                      // Пытаемся отсканировать палец
        }
        else {
          modeState = 3;                                      // Пытаемся отсканировать rfid uid
        }
      }
      break;

    case 2:
      while (!getFingerprintEnroll());                        // Пытаемся получить ответ об присваивании ID
      modeState = 1;
      break;

    case 3:
      rfidYes = 0;

      Serial.println(". . . Put RFID in Scanner! . . .");
      delay(400);
      Serial.println(". . . Put RFID in Scanner! . . .");
      delay(400);      
      Serial.println(". . . Put RFID in Scanner! . . .");
      delay(5000);

      if (mfrc522.PICC_IsNewCardPresent()) {                  // Пытаемся отсканировать rfid uid
        delay(100);
        if (mfrc522.PICC_ReadCardSerial()) {
          //mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
          frcUID = "";
          for (byte i = 0; i < mfrc522.uid.size; i++) {
            frcUID = frcUID + (mfrc522.uid.uidByte[i]);
          }
          frcUID = ". . . New RFID UID=" + frcUID + "@ . . .";
          rfidYes = 1;
          Serial.println(frcUID);
          delay(400);
          Serial.println(frcUID);
          delay(400);
          Serial.println(frcUID);
          delay(400);
          Serial.println(frcUID);
        }
      }

      if (rfidYes == 0) {
        Serial.println(". . . RFID error! . . .");
        delay(400);
      }

      modeState = 1;
      break;
  }
}

// функция возвращает номер, введённый с COM-порта
uint8_t readnumber(void) {
  int num = -1;                                                 // Переменная с номером, который требуется вернуть
  while (num < 0) {                                             // Вход в цикл, пока переменная num не станет >= 0
    while (!Serial.available());                                // Ожидание пока в буфере COM-порта нет появятся данные
    while (Serial.available()) {                                // Цикл пока в буфере COM-порта не закончатся данные
      char c = Serial.read();                                   // Присваиваем очередной символ из COM-порта в переменную c
      if (isdigit(c)) {                                         // Если значение переменной с - цифра, то ...
        if (num < 0) {
          num = 0; // Увеличиваем значение num на один порядок
        } else {
          num *= 10;
        }
        num += c - '0';                                         // Прибавляем к значению num цифру из переменной c
      } delay(5);                                               // Задержка на 5мс, чтоб в буфер COM-порта успели догрузиться следующие символы (если таковые имеются)
    }
  }
  return num;                                                   // Возвращение введённого числа
}

uint8_t getFingerprintEnroll() {
  int p;                                                                                                                // Переменная для получения результатов выполнения функций
  //Загрузка первого изображения отпечатка пальца
  p = -1;
  Serial.println(". . . Please put your new finger on the scanner . . .");                                              // Вывод сообщения "Пожалуйста положите Ваш палец на сканер"
  delay(400);
  Serial.println(". . . Please put your new finger on the scanner . . .");                                              // Вывод сообщения "Пожалуйста положите Ваш палец на сканер"
  delay(400);
  Serial.println(". . . Please put your new finger on the scanner . . .");                                              // Вывод сообщения "Пожалуйста положите Ваш палец на сканер"
  delay(400);
  Serial.println(". . . Please put your new finger on the scanner . . .");                                              // Вывод сообщения "Пожалуйста положите Ваш палец на сканер"

  while (p != FINGERPRINT_OK) {                                                                                         // Вход в цикл, пока переменная p не станет равна константе FINGERPRINT_OK (корректная загрузка изображения)
    p = finger.getImage();                                                                                              // Захватываем изображение и возвращаем результат выполнения данной операции в переменную p
    switch (p) {                                                                                                        // Проверка ответа ...
      case FINGERPRINT_OK:               Serial.println(" Ok!");                                              break;    // Изображение отпечатка пальца корректно загрузилось
      case FINGERPRINT_NOFINGER:         Serial.println(". . . Please put your new finger on the scanner . . ."); break;// Сканер не обнаружил отпечаток пальца
      case FINGERPRINT_PACKETRECIEVEERR: Serial.println(". . . Communication error . . .");                   break;    // Ошибка соединения
      case FINGERPRINT_IMAGEFAIL:        Serial.println(". . . Imaging error Please try again . . .");        break;    // Ошибка изображения
      default:                           Serial.println(". . . Unknown error Please try again . . .");        break;    // Неизвестная ошибка
    }
  }
  //Конвертирование изображения первого отпечатка пальца
  p = finger.image2Tz(1);                Serial.print  (". . . Image converting . . .");                                // Конвертируем первое изображение и возвращаем результат выполнения данной операции в переменную p
  switch (p) {                                                                                                          // Проверка ответа ...
    case FINGERPRINT_OK:                 Serial.println("Ok!");                                               break;    // Изображение сконвертировано
    case FINGERPRINT_IMAGEMESS:          Serial.println(". . . Image too messy . . .");                       return p; // Изображение слишком нечеткое
    case FINGERPRINT_PACKETRECIEVEERR:   Serial.println(". . . Communication error . . .");                   return p; // Ошибка соединения
    case FINGERPRINT_FEATUREFAIL:        Serial.println(". . . No fingerprint on image . . .");               return p; // Ошибка конвертирования
    case FINGERPRINT_INVALIDIMAGE:       Serial.println(". . . No fingerprint on image . . .");               return p; // Ошибка изображения
    default:                             Serial.println(". . . Unknown error . . .");                         return p; // Неизвестная ошибка
  }
  //Просим убрать палец от сканера
  p = 0;
  while (p != FINGERPRINT_NOFINGER) {                                                                                // Вход в цикл, пока переменная p не станет равна константе FINGERPRINT_NOFINGER (сканер не обнаружил отпечаток пальца)
    Serial.println(". . . Please remove your finger from the scanner . . .");                                        // Вывод сообщения "Пожалуйста уберите Ваш палец со сканера"
    delay(400);

    p = finger.getImage();                                                                                           // Захватываем изображение и возвращаем результат выполнения данной операции в переменную p
  }
  Serial.println(" Ok!");

  //Загрузка второго изображения отпечатка пальца
  p = -1;
  Serial.println(". . . Place same finger again . . .");                                                              // Вывод сообщения "Пожалуйста положите тот же палец еще раз"
  delay(400);

  while (p != FINGERPRINT_OK) {                                                                                      // Вход в цикл, пока переменная p не станет равна константе FINGERPRINT_OK (корректная загрузка изображения)
    p = finger.getImage();                                                                                           // Захватываем изображение и возвращаем результат выполнения данной операции в переменную p
    switch (p) {                                                                                                     // Проверка ответа ...
      case FINGERPRINT_OK:               Serial.println(" Ok!");                                      break;         // Изображение отпечатка пальца корректно загрузилось
      case FINGERPRINT_NOFINGER:         Serial.println(". . . Place same finger again . . .");       break;         // Сканер не обнаружил отпечаток пальца
      case FINGERPRINT_PACKETRECIEVEERR: Serial.println(". . . Communication error . . .");           break;         // Ошибка соединения
      case FINGERPRINT_IMAGEFAIL:        Serial.println(". . . Imaging error . . .");                 break;         // Ошибка изображения
      default:                           Serial.println(". . . Unknown error . . .");                 break;         // Неизвестная ошибка
    }
  }

  //Конвертирование изображения второго отпечатка пальца
  p = finger.image2Tz(2);                Serial.print  (". . . Image 2 converting . . .");                              // Конвертируем второе изображение и возвращаем результат выполнения данной операции в переменную p
  switch (p) {                                                                                                          // Проверка ответа ...
    case FINGERPRINT_OK:                 Serial.println("Ok!");                                               break;    // Изображение сконвертировано
    case FINGERPRINT_IMAGEMESS:          Serial.println(". . . Image too messy . . .");                       return p; // Изображение слишком нечеткое
    case FINGERPRINT_PACKETRECIEVEERR:   Serial.println(". . . Communication error . . .");                   return p; // Ошибка соединения
    case FINGERPRINT_FEATUREFAIL:        Serial.println(". . . No fingerprint on image . . .");               return p; // Ошибка конвертирования
    case FINGERPRINT_INVALIDIMAGE:       Serial.println(". . . No fingerprint on image . . .");               return p; // Ошибка изображения
    default:                             Serial.println(". . . Unknown error . . .");                         return p; // Неизвестная ошибка
  }
  //Создание модели (шаблона) отпечатка пальца, по двум изображениям
  p = finger.createModel();              Serial.print  (". . . Creating model . . .");                        // Создание модели (шаблона) отпечатка пальца, по двум изображениям
  if (p == FINGERPRINT_OK              ) {
    Serial.println(". . . Model create! Ok! . . .");
  } else // Модель (шаблон) отпечатка пальца создана
    if (p == FINGERPRINT_PACKETRECIEVEERR) {
      Serial.println(". . . Communication error . . .");
      return p;
    } else // Ошибка соединения
      if (p == FINGERPRINT_ENROLLMISMATCH  ) {
        Serial.println(". . . Fingerprints did not match . . .");
        return p;
      } else // Отпечатки пальцев не совпадают
      {
        Serial.println(". . . Unknown error . . .");                                  // Неизвестная ошибка
        return p;
      }
  //Сохранение, ранее созданной, модели (шаблона) отпечатка пальца, под определённым ранее, идентификационным номером
  p = finger.storeModel(id);
  //Serial.println(". . . Saving model . . .");
  Serial.println(". . . Saving model . . .");

  //Serial.println(". . . Saving model in ID="); Serial.print(id); Serial.print(": ");  // Сохранение модели (шаблона) отпечатка пальца, по двум изображениям
  if (p == FINGERPRINT_OK              ) {
    frcUID = ". . . Model save in ID=" + String(id) + "! . . .";
    Serial.println(frcUID);
    delay(1500);
    Serial.println(frcUID);
    delay(400);
    Serial.println(frcUID);
    delay(400);
    Serial.println(frcUID);

  } else // Модель (шаблон) отпечатка пальца сохранена
    if (p == FINGERPRINT_PACKETRECIEVEERR) {
      Serial.println(". . . Communication error . . .");
      return p;
    } else // Ошибка соединения
      if (p == FINGERPRINT_BADLOCATION     ) {
        Serial.println(". . . Could not store in that location . . .");
        return p;
      } else // Не удалось сохранить в этом месте
        if (p == FINGERPRINT_FLASHERR        ) {
          Serial.println(". . . Error writing to flash . . .");
          return p;
        } else // Ошибка записи в flash память
        {
          Serial.println(". . . Unknown error . . .");                              // Неизвестная ошибка
          return p;
        }
}


 

Эпилог

Цена планшета около 10 000 руб. (на самом деле от 7000 новые можно купить с 1 Gb ОЗУ но с 4Gb 1с будет поприятнее двигаться, я вообще взял б.у. с рук за 6000 в идеальном состоянии с 1Gb но повозился с оптимизацией).

Проходная делалась для мебельного производства поэтому корпус я изготовил там же. Думаю что можно напилить "смесь опилок с картоном" в магазине за 1 000 руб. и скрутить саморезами/склеить суперклеем. В крайнем случае можно взять готовый ящик (например электрошкафчик) и выпилить там окно.

Модули ардуинки и прочее около 2 000 руб.

Удовольствие от мозгового штурма и изготовления - бесценно!

 

Скачать файлы

Наименование Файл Версия Размер
Исходники и чертеж для Arduino Mega

.zip 607,82Kb
19.08.18
15
.zip 607,82Kb 15 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. Черный Плащ 165 22.08.18 08:49 Сейчас в теме
А почему нельзя было использовать обычный usb сканер отпечатка пальца ?
maksa2005; held88; collider; +3 Ответить
2. Fator26 7 22.08.18 09:23 Сейчас в теме
(1)В Вас пропадает дух авантюризма...
maksa2005; Dmitri93; +2 Ответить
5. DGorgoN 107 22.08.18 12:46 Сейчас в теме
(1) А есть готовые примеры реализации?
3. Region102 22.08.18 11:36 Сейчас в теме
А как обрабатываются сбои, зависание arduinы, зависание 1С, зависание com порта? Внедряя проф скуд на предприятии, первые несколько месяцев были постоянные скандалы с опозданцами. Помогало видео наблюдение на проходной.
7. DGorgoN 107 22.08.18 12:49 Сейчас в теме
(3) Честно говоря пока никак, единственное что можно перезагрузить всё.
9. TitanLuchs 244 22.08.18 17:20 Сейчас в теме
(3) У "Меги" есть встроенный таймер, отслеживающий зависание. При его срабатывании контроллер перезагружается.
12. DGorgoN 107 22.08.18 19:40 Сейчас в теме
14. TitanLuchs 244 22.08.18 23:24 Сейчас в теме
(12) Там 3 строчки кода. Подключаешь стандартную библиотеку
#include <avr/wdt.h>

В setup() Устанавливаешь время, через которое должен сработать таймер:
wdt_enable(WDTO_2S);
WDTO_2S - это константа, в данном случае 2 секунды. Можно ставить от 15 мсек до 8 сек.

В цикле loop() сбрасываешь таймер:
wdt_reset();

Если контроллер зависает, то программа перестает сбрасывать таймер и через указанное в сетапе время происходит хард-резет. Именно хард, аналогичный нажатию кнопки "Сброс".
25. DGorgoN 107 24.08.18 19:02 Сейчас в теме
(14) "но дело в том, что все это работает только в Arduino Uno, а на Arduino Mega, Mini и Nano все это работает ровно наоборот, т.е. не работает совсем :)"
Ахах (
26. TitanLuchs 244 24.08.18 20:45 Сейчас в теме
(25) Загрузка нового бутлоадера решает проблему. В интернетах много информации на эту тему.
27. DGorgoN 107 24.08.18 22:56 Сейчас в теме
(26) Это понятно, буду мучать уже следующую версию, думаю всё таки если время будет то мучать буду уже по http
4. pro-rok 253 22.08.18 12:39 Сейчас в теме
Как я понял ардуинка связана с планшетом по usb. На планшете 1С (подключенная через Wi-Fi) обрабатывает посылки от ардуино.
В 1С вызывается внешнее событие или какое-то регламентное задание опрашивает ?
Так и не понял назначение MsCommLib.MsComm, она эмулирует com порт?
6. DGorgoN 107 22.08.18 12:48 Сейчас в теме
(4) В 1с с помощью MsComm считывается ком порт и посылаются туда значения с помощью обработки ожидания
8. pro-rok 253 22.08.18 14:17 Сейчас в теме
(6) Я подобную связь организовывал напрямую через ком. В 1С говорил например что на com 3 висит сканер ШК и подключал обработчик внешнего события. Как только ардуинка ловива показания от датчиков она отправляла значение в ком порт, предварительно ставил префикс события например D1 ( первый датчик), что бы понимать каккой датчик сработал. 1С отрабатывала как внешнее событие от сканера и передавала мне ШК, т.е. показание датчика.
13. DGorgoN 107 22.08.18 19:51 Сейчас в теме
(8) Напрямую через com это как?
17. pro-rok 253 23.08.18 13:02 Сейчас в теме
(13) С планшетом я не эксперементировал, но при подключении ардуинки к ПК через USB она автоматом эмулирует COM порт (через который собственно и прошивается само железо). В 1С я подключаю сканер ШК говорю что он работает через СОМ в качестве номера порта указываю тот, который эмулирует драйвер ардуино. Как только ардуино что то посылает в СОМ порт в 1С срабатывает обработка события. Тут правда получается односторонняя связь. В обратную сторону при необходимости можно использовать Ethernet, код не сложный нужна только плата.
void loop()
{

  char* params;                              // переменная для хранения полученного запроса
  if (params = ethernet.serviceRequest())    //Если чтото пришло, то считываем и выполняем код
  {    
    if(params[0] == '1'){   // Если пришла команда 1 то ...
     digitalWrite(10, LOW);   // выключаем реле
    ethernet.print(ch1);   // отправляем ответ "1"
    }
    else if(params[0] == '2'){   // иначе если пришла команда 2 то...
     digitalWrite(10, HIGH);       // включаем реле 
    ethernet.print(ch2);         // отправляем ответ "2"
Показать
19. DGorgoN 107 23.08.18 13:08 Сейчас в теме
(17) 1.Мне очень важна двухсторонняя связь
2. Планшет это тот же ПК на Win, они только форм-фактором различаются.
10. TitanLuchs 244 22.08.18 18:16 Сейчас в теме
Нормуль, но лучше все-таки было бы разобраться с http-сервисами и сделать все на них. Было бы более масштабируемо, надежнее и дешевле. Ардуина легко работает как с ethernert, так и с wi-fi. Планшет исключаем, вместо него можно поставить дисплей: или обычный сегментный, или LCD - они сейчас стоят копейки. Таким образом уходит еще одно слабое звено в виде соединения дуни с планшетом через сом-порт, заодно и лицензия одна сэкономится. При сканировании отпечатка или карты дергаем 1С через http-сервис, можно даже сразу от нее получать ответ, разрешение на вход, например, и при необходимости показывать на экране. Итого стоимость запчастей обойдется в 2500 рублей (это по максимуму).
Но в целом лайк, конечно.
11. DGorgoN 107 22.08.18 19:39 Сейчас в теме
(10) Я всё понимаю но это будет следующая версия
18. DGorgoN 107 23.08.18 13:06 Сейчас в теме
(10) И еще по поводу слабого звена. Через 1с ведь можно любой интерфейс нарисовать. Ещё там админка есть, которая сразу у аппарата позволяет присвоить человеку свой код
20. TitanLuchs 244 23.08.18 13:29 Сейчас в теме
(18) Я ж не настаиваю на своем варианте ) Все зависит от того, какой в итоге функционал вы хотите реализовать. Если интерфейс нужен более продвинутый, чем просто отображение одной строчки с сообщением, то конечно планшет с 1С тут выигрывает.
15. DGorgoN 107 23.08.18 02:06 Сейчас в теме
Просто еще нужно учесть что понятно что было бы прикольно экран к малине или ардуино и там свой софт без лицензии но ведь и устройство получилось ну очень интересным. Зная код на 1с можно управлять всякими ардуинами без посредников. Даешь робота на 1с!
16. TitanLuchs 244 23.08.18 09:34 Сейчас в теме
21. Region102 23.08.18 17:28 Сейчас в теме
Честно говоря к данной реализации отношусь скептически, ладно если работает, а что если при зависании одного из компонентов пропадут проходы тысячи сотрудников. Думаю вы услышите множество лестных слов в свой адрес. Не вник в код на ардуине, вы пишите проходы в постоянную память?
22. DGorgoN 107 23.08.18 17:53 Сейчас в теме
(21) Проходы сразу пишутся в базу 1с, если устройство зависнет то ребут.
Причём 1с сразу выводит на экране сотрудника, который проходит да еще вдобавок и пикает. Т.е. если ожидаемого не происходит то ребут. Никто не пройдет незамеченным.
23. Region102 24.08.18 06:16 Сейчас в теме
(22) Что происходит если 1С зависает? На проходной 100 человек и все хотят зайти. Я понимаю ребут ардуины по таймеру, а вот ребут 1С это дело не 30 секунд. Я не стараюсь критиковать, я стараюсь улучшить ваш продукт ). Сам люблю ардуинку, но 1С в нашей СКУД выполняла только роль backend-а, туда регламентым заданием забирались данные о проходах и строились отчеты из базы Firebase СКУД. В столовой у нас был подключен считыватель по вашему принципу, и были периодические глюки и зависания, вот основные по приоритетам:
1. Зависло регламентное задание опрашивающие считыватель и выводящее данные на дисплей.
2. Завис хаб.
3. Завис комп с 1С
4. Завис считыватель. Очень редко, но обычно удавалось вытащить проходы из его памяти.
Все зависания решались тем, что сотрудники писали свои проходы на листочке в ручную.
24. DGorgoN 107 24.08.18 15:50 Сейчас в теме
(23) Если 1с зависает то это очень и очень плохо. У меня 1с по настоящему зависала два раза в год из-за проблем с оборудованием. Всё остальное время она работала 24\24. Мне сложно представить что такое бывает.
Я проверю реализацию после эксплуатации и напишу вам!
28. pro-rok 253 30.08.18 09:07 Сейчас в теме
(23) Зависание хаба, компа или считывателя возможно даже если используется не 1С+Arduino, а нечто другое.
29. Region102 31.08.18 14:12 Сейчас в теме
(28) Использовали проф СКУД, считыватели за несколько лет не зависли ни разу. Внутренняя память в считывателе на 90тыс событий решала все проблемы с зависанием остальных компонентов. Зависали считыватели другого производителя, но они и стоили в 5 раз дешевле, правда зависание было своеобразным, считыватель переставал опрашиваться через сеть, но проходы продолжал писать в память.
30. DGorgoN 107 31.08.18 18:00 Сейчас в теме
Ну сделать рестарт на Ардуино это плюс 400 рублей денег. Поставить Ардуино мини и мониторить оба устройства и уже 2 надежность.
31. taishy 52 02.10.18 09:22 Сейчас в теме
+ напечатать корпус под это все на 3Д-принтере
32. alexander-lubich 02.10.18 09:36 Сейчас в теме
нормальное решение, считыватель может быть подключен к локальной базе , которую можно назвать "СКУД" и ее задача будет - накопление и информации и отправка ее в основную базу . зависание ардуино - 1 минута, перезагрузка компа с локальной базой - 3 минуты. + проработать пару сценариев развития учета в случае долговременного отказа , например второй комплект оборудования (комп+ считыватель на аруине) для ряда проектов вполне себе решение.

мне интересно как малину с 1С соединить, в ардуине тесно.
33. alexander-lubich 02.10.18 09:42 Сейчас в теме
если Ардуина работает c атоловским драйвером через UART и мы имеем подключение USB устройства к компьютеру то для Расберри я иного кроме вебсервисов не вижу пока.
34. Rik30 13 02.10.18 13:28 Сейчас в теме
Ну рукожопам всегда почёт и уважуха,хорошо описал тему. Вот только в стабильности данной разработки сомневаюсь.У меня 1500 чел.проходят в день через Anviz- и то траблов хватает.(Хотя это монолитное устройство) - только результаты считывай - ID сотрудника и время прихода-ухода по Ethetnetу.А тут такой "головняк".Каждое зависание данного устройства или его компонента -будет вызывать недоверие в его адекватности работы. Соответственно жуликоватые сотрудники- которые привыкли опаздывать - будут себя пяткой в грудь бить и говорить, что они отмечались, а эта электронная штуковина засбоила. Но в любом случае - работа хорошая - добавляю в закладки.
P.S, - Цена устройства Anviz (считывание отпечатков и карт) стоит порядка 12-14 тыс.
35. starik-2005 2177 02.10.18 14:07 Сейчас в теме
Код на С - отдельная песня, но за то, что еще раз вспомнили про ардвинку - однозначно плюс.

И да, в час, когда первые ступени многоразовых ракет приземляются на плавучие платформы в атлантических океанах, использовать что-то без WiFi (тот же ESP8266) - стыд и позор.
36. dmarenin 283 06.10.18 18:33 Сейчас в теме
(35) там не совсем с (обертка над c-avr)
37. starik-2005 2177 06.10.18 21:15 Сейчас в теме
(36) и чем отличается от С?)))
38. danil7772 26.06.19 13:28 Сейчас в теме
Никто не пробовал реализовать хранение отпечатков пальцев в базе данных типа Постгре и тп. ,чтобы хранить более 1000 отпечатков?
39. tf-paritet 18.11.19 07:24 Сейчас в теме
Добрый день всем. Собрал данный девайс. Отпечаток работает, но только 1 раз. Для того чтобы отметиться повторно надо перезапускать обработку. На рисунке сканер подключен к шине 3.3 вольта, но по другим схемам что смотрел он должен был быть подключен в 5 Вольтовую шину "+" . Спрашиваю почему? RFID не работает и сканер отпечатков пальцев до тех пор пока RFID не отключить минусовой провод. Кто сталкивался с такой проблемой? RFID и Сканер "+" берут от 3.3V один разъем. Может обязательно необходимо дополнительное питания для АРДУИНО? Может причина нестабильной работы в питании? Коллеги подскажите)
Оставьте свое сообщение

См. также

Загрузка табелей рабочего времени из файлов Excel Промо

Зарплата Обработка документов Учет рабочего времени Загрузка и выгрузка в Excel v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m)

Обработка по загрузке в типовой документ «Табель» конфигурации ЗУП 3.1 данных из файлов MS Excel, согласно шаблону.

18.10.2019    7672    5    HostHost    0    

Создание *.dt файла из рабочей базы на сервере 1С без завершения работы пользователей

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

Предлагаемая обработка создает *.dt файл (выгрузку ИБ) из рабочей базы на сервере 1С:Предприятие 8.3 без завершения работы пользователей.

1 стартмани

19.01.2020    9182    62    Sedaiko    15    

Командный интерпретатор для 1С

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

Инструмент для выполнения команд CMD / PowerShell из 1С.

2 стартмани

15.11.2019    10027    20    YPermitin    41    

Закрытие незавершенных сеансов

Сервисные утилиты Администрирование СУБД v8 1cv8.cf Россия Абонемент ($m)

Как удалять потерянные сеансы пользователей, чтобы они не мешали работе. Обработка протестирована на платформе версии 8.3.13.1644.

1 стартмани

20.09.2019    10382    47    AnatolPopov    8    

Блин, мы забыли включить регламентные задания… Промо

Сервисные утилиты v8 Абонемент ($m)

Привет, Инфостарт! Сегодня расскажу, как я решил проблему с выключенными регламентными заданиями в рабочих базах. Желая исключить человеческий фактор и минимизировать количество ошибок, я написал небольшую конфигурацию.  В конфигурации два регламентных задания. Первое периодически подключается к кластеру и сохраняет текущие параметры: имя, Сервер БД, базу СУДБ, блокировки входа и регламентных заданий и т.д. Второе задание периодически проверяет эти параметры на ошибки.

1 стартмани

08.04.2019    14901    14    slozhenikin_com    37    

Мониторинг потребления ресурсов базами кластеров сервера

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

Обработка позволяет, в графической форме, производить мониторинг потребляемых ресурсов базами данных кластера сервера 1с для платформ 8.3, 8.2. Обработка работает на платформе не ниже 8.3.6

2 стартмани

17.07.2019    7129    29    IVC_goal    34    

Bash-скрипт для установки 1С:Предприятие 8.3 и СУБД PostgreSQL на сервер CentOS 7

Сервисные утилиты v8 Россия Абонемент ($m)

Данный скрипт позволяет полностью установить сервер 1С и СУБД PostgreSQL на одном хосте. Потом это же скрипт можно использовать для обновление платформы и дистрибутивов установки

1 стартмани

07.04.2019    13396    34    Sedaiko    29    

Утилита для регистрации ComConnector и консоли администрирования сервером по установленным версиям платформы

Сервисные утилиты v8 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

20.03.2019    7809    28    vardeg    10    

Очистка кэша 1С 8 (8.0, 8.1, 8.2, 8.3). Грамотная чистка кэша 1С с сохранением настроек. Промо

Чистка базы Сервисные утилиты Администрирование данных 1С v8 1cv8.cf Россия Абонемент ($m)

Эффективное средство для устранения ошибок, возникающих в локальном кэше 1С на клиенте, которым легко сможет воспользоваться пользователь с любым уровнем знаний. Wsf-скрипт, созданный на стандартном языке автоматизации Windows - "WSH JScript", очищает кэш 1С просто, быстро и безопасно. Кроме варианта, очищающего кэш текущего пользователя, имеется также вариант для чистки кэша 1С всех пользователей терминального-сервера.

1 стартмани

04.11.2018    33968    358    Eugen-S    34    

LicDataDecoder - расшифровка файла программной лицензии 1С

Сервисные утилиты v8 1cv8.cf Россия Абонемент ($m)

Представляю вашему вниманию утилиту, предназначенную для работы с файлами программных лицензий 1С (*.lic).

1 стартмани

10.02.2019    25913    244    GeraltSnow    60    

Удобная консоль регламентных и фоновых заданий

Универсальные обработки Сервисные утилиты Администрирование данных 1С v8 v8::УФ 1cv8.cf Абонемент ($m)

Аналог обработки БСП "РегламентныеИФоновыеЗадания". Не требует наличия библиотек, может использоваться в качестве внешней обработки. В отличие от обработки БСП предоставляет больше информации о свойствах регламентных и фоновых заданий, а также об ошибках и сообщениях для пользователей, возникших во время их выполнения. Позволяет управлять регламентными (создание, удаление, настройка расписания, ручной запуск) и фоновыми (прерывание) заданиями.

1 стартмани

06.02.2019    12755    149    Alxby    20    

Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия - Simple UI (обновлено 14.11.2019)

Инструментарий разработчика Сканер штрих-кода Терминал сбора данных Мобильная разработка Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ v8 v8::Mobile БУ УУ Абонемент ($m)

Simple WMS Client – это визуальный конструктор мобильного клиента для терминала сбора данных(ТСД) или обычного телефона на Android. Приложение работает в онлайн режиме через интернет или WI-FI, постоянно общаясь с базой посредством http-запросов (вариант для 1С-клиента общается с 1С напрямую как обычный клиент). Можно создавать любые конфигурации мобильного клиента с помощью конструктора и обработчиков на языке 1С (НЕ мобильная платформа). Вся логика приложения и интеграции содержится в обработчиках на стороне 1С. Это очень простой способ создать и развернуть клиентскую часть для WMS системы или для любой другой конфигурации 1С (УТ, УПП, ERP, самописной) с минимумом программирования. Например, можно добавить в учетную систему адресное хранение, учет оборудования и любые другие задачи. Приложение умеет работать не только со штрих-кодами, но и с распознаванием голоса от Google. Это бесплатная и открытая система, не требующая обучения, с возможностью быстро получить результат.

5 стартмани

09.01.2019    39599    246    informa1555    200    

Легкое и гибкое управление списком доступных баз 1С у пользователей Промо

Стартеры 1С Сервисные утилиты Администрирование СУБД v8 1cv8.cf Россия Абонемент ($m)

Когда в локальной сети много пользователей, а еще большое количество различных баз и при этом каждому нужны свои, то администрирование этого зоопарка превращается в АД! Этот комплекс позволяет централизованно управлять списком доступных баз в разрезе пользователей. За пару кликов можно добавить или убрать базу у всех пользователей.

5 стартмани

05.12.2018    13794    13    RomikR    9    

Универсальный монитор лицензий 1С

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

Хотите узнать, какие программные лицензии установлены на сервере и все их технические подробности? А может быть, вам нужна информация по использованию всех видов лицензий кластера? Нет ничего проще, читай далее, чтобы быть в курсе!

3 стартмани

03.01.2019    24943    211    Xershi    68    

Скрипт обновления конфигурации

Сервисные утилиты v8 Абонемент ($m)

Как обновить конфигурацию базы? Столько всего сделать надо: И базу заблокировать, и пользователей выгнать. А ещё надо дождаться загрузки конфигурации и после этого применить её. Если же конфигурация на БСП, то запустить с ключом /C ЗапуститьОбновлениеИнформационнойБазы. И только потом можно пускать пользователей. А ещё на каждом этапе надо ждать окончания предыдущего. Это скучно. Давайте заливать конфигурацию в базы весело!

1 стартмани

11.12.2018    9377    42    MrWonder    18    

Чистка кэша 1С (теперь в .exe)

Сервисные утилиты v8 Абонемент ($m)

Попробуйте поискать в интернете "Очистить кэш 1С". Практически везде вы наткнетесь на всякие батники, ps-скрипты, рекомендации зайти и удалить вручную, поставить /ClearCache для баз на УФ и т.д. В подавляющем большинстве случаев предлагается бездумно удалить все содержимое \Roaming\1C\1cv8\ и \Local\1C\1cv8\, но это как переустановить Windows, чтобы почистить Temp.

1 стартмани

18.11.2018    14218    92    riposte    42    

Автоматическое заполнение графиков в ЗУП 3.1 Промо

Зарплата Учет рабочего времени Обработка справочников Зарплата Учет рабочего времени v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m)

Данная разработка будет актуальна для организаций с большим количеством графиков (несколько десятков/сотен).

1 стартмани

05.05.2018    21151    18    notserioussam    2    

Go. Разбор лога технологического журнала. Достойная альтернатива perl'у

Сервисные утилиты Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Началось все с того, что я познакомился с перловыми скриптами для парса ТЖ которые размещены на kb.1c.ru (например в этой статье https://kb.1c.ru/articleView.jsp?id=113). По началу мне дико понравилось то, что перл разбирал гигабайты логов за считанные минуты, но позитив мой угасал обратно пропорционально с тем, насколько глубже я погружался в "кроличью нору" ....

1 стартмани

24.10.2018    19016    6    lazarenko    39    

Обнаружено нарушение целостности системы

Сервисные утилиты v8 1cv8.cf Россия Абонемент ($m)

Ошибка «Обнаружено нарушение целостности системы», причины и варианты устранения ошибки.

1 стартмани

03.10.2018    99701    474    Palmer1976    48    

1С:Коммандер (УФ)

Сервисные утилиты v8 v8::УФ 1cv8.cf Абонемент ($m)

Коммандер для просмотра файлов на клиенте и сервере.

1 стартмани

07.09.2018    8240    21    Student1C    9    

ЕГАИС 3 Контролёр для 1С:Розница Промо

Терминал сбора данных Розничная торговля Розничная торговля v8 Розница Розничная и сетевая торговля (FMCG) Россия УУ Абонемент ($m)

Оградите себя от рисков отзыва лицензии на торговлю алкоголем, штрафов и блокировок в ЕГАИС. Проверяйте поступающую алкогольную продукцию помарочно на соответствие ТТН ЕГАИС v3 перед тем, как подтвердить получение и принять её на баланс в ЕГАИС. С 01.07.2018 начинается переход ЕГАИС на помарочный учет алкогольной продукции на всех стадиях товародвижения, начиная от производства или ввоза на территорию России, до реализации в розничной торговле, т.н. "ЕГАИС 3.0". В типовой Рознице уже появилась обработка для контроля поступивших акцизных марок на ПК. Предлагаю ознакомиться с мобильным решением. Контроль производится в Android приложении на ТСД или на обычном смартфоне.

1 стартмани

13.06.2018    18517    17    kuld    30    

Tool1CD: отрежем донорскую почку

Сервисные утилиты Разработка внешних компонент v8 Розница Абонемент ($m)

Ваша база мертва? Что ж, кое-что в ней ещё теплится.

1 стартмани

15.05.2018    17843    23    baton_pk    13    

Очередная система ведения учета задач

Рабочее место Учет рабочего времени Личная эффективность Учет рабочего времени v8 Россия УУ Абонемент ($m)

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

10 стартмани

28.02.2018    20724    165    asdes    63    

Мониторинг изменений рабочих конфигураций. Часть 1. Сохранение конфигураций из базы SQL без конфигуратора

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

Выгружаем исходники из SQL напрямую скриптом, собираем CF и контролируем реальные изменения в рабочих базах из браузера.

1 стартмани

28.02.2018    18707    18    user768334    25    

Простой отчет по фактическим отпускам Промо

Бухгалтерские Управленческие Управление персоналом (HRM) Учет рабочего времени Управление персоналом (HRM) Учет рабочего времени v8 ЗУП2.5 УПП1 БУ УУ Абонемент ($m)

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

2 стартмани

18.08.2015    32159    86    VBod    5    

Практика доступа в базу 1С через протокол oData. Чтение данных

Сервисные утилиты Практика программирования Администрирование данных 1С v8 1cv8.cf Абонемент ($m)

Для чего нужен доступ в базу 1С через REST-интерфейс по протокол oData? Как его организовать? Как не будучи гуру в JavaScript и .NET получить быстрый визуальный доступ к данным базы 1С? Попробую дать ответ на эти вопросы и прокомментирую некоторые нюансы, с которыми я столкнулся.

1 стартмани

11.12.2017    87950    302    Dementor    49    

Мобильное приложение "Отчет по проделанной работе"

Мобильная разработка Учет рабочего времени Учет рабочего времени v8 Россия УУ Абонемент ($m)

Приложение выполняет фиксацию рабочего времени у клиентов, а также заявок на работы, пригодится как шаблон для разработки своего или как готовое решение для работников в сфере услуг, которые фиксируют время у клиентов. В приложении 2 документа: первый "отчет за день", второй "заявка" и полезный инструмент "Отчет задачи", который в свою очередь создан для просмотра, анализа и закрытия заявок. Тестировал на Iphone 6s.

10 стартмани

01.12.2017    19989    10    olejnikov_m    6    

Быстрое удаление неиспользуемых версий 1С:Предприятие 8, кэша метаданных и информационных баз

Сервисные утилиты v8 Абонемент ($m)

При обновлении платформы 1С:Предприятие 8 предыдущие версии не удаляются. Со временем количество неиспользуемых версий платформы растет. Они занимают место на диске. Для решения этой проблемы предназначена программа OneCleaner. Она позволяет быстро удалить неиспользуемые версии платформы, а также почистить кэш метаданных и удалить ненужные информационные базы данных.

1 стартмани

14.11.2017    20200    87    bonv    15    

Скачиваем релизы с сайта users.v8.1c.ru Промо

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

Обработка позволяет настроить список релизов, доступных пользователю, на сайте users.v8.1c.ru, проверять - вышли ли новые обновления и, если вышли, скачивать их и раскладывать по папочкам. Требует установки curl и openssl

10 стартмани

18.08.2014    37421    24    Demonobond    31    

V8 Log Scanner - утилита для быстрого парсинга логов ТЖ

Сервисные утилиты v8 Россия Абонемент ($m)

Как можно быстро настраивать logcfg.xml и парсить логи технологического журнала с помощью самописной open-source утилиты V8LogScanner. Без необходимости погружаться в регулярные выражения.

1 стартмани

07.11.2017    17790    5    ripreal1    27    

Графическая оболочка для консольной утилиты cnvdbfl.exe

Сервисные утилиты v8 Абонемент ($m)

Графическая оболочка для консольной утилиты cnvdbfl.exe предназначенной для преобразования размера внутренней страницы файла базы 1С.

1 стартмани

25.10.2017    36757    258    frkbvfnjh    43    

Терминал сбора данных штрихкодов на планшете Windows

Розничная торговля Терминал сбора данных Розничная торговля v8 Розница Розничная и сетевая торговля (FMCG) Россия УУ Абонемент ($m)

Терминал сбора данных штрихкодов с использованием планшета WIndows и беспроводного сканера - простое решение

1 стартмани

18.08.2017    19153    24    independ    16    

V8 Viewer. Открытие и сравнение внешних обработок в Проводнике + исходники Промо

Сервисные утилиты Инструментарий разработчика Универсальные обработки v8 1cv8.cf Абонемент ($m)

Вы хотите получить возможность быстро посмотреть содержимое внешнего отчета или обработки? А сравнить ее с другой? И все это без запуска 1С:Предприятия, только из оболочки ОС? Тогда мы идем к вам! :) В конце заметки - ссылка на исходники.

2 стартмани

06.03.2013    64299    118    Evil Beaver    157    

Удаление данных напрямую в SQL

Сервисные утилиты Чистка базы v8 v8::СКД 1cv8.cf Абонемент ($m)

Порой так и хочется грохнуть что нить в скуле, но наталкиваешься на отсутствие понятных и функциональный инструментов. Вроде как что то и есть, но явно писанное для каких то конкретных простых целей. И так очередное творение в данной тематике. Особенности: удаление порциями, отображение готового текста запроса, отбор данных с помощью СКД (в отборе учитываются составные типы и обращения через точку).

1 стартмани

08.07.2017    14120    91    denacid    29    

ОСкрипты для деплоя и копирования базы данных

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

Набор оскриптов для деплоя базы 1С через хранилище и копирование через sql-бекап одной базы в другую

1 стартмани

02.05.2017    21926    34    Stepa86    27    

Автокликер для 1С

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

Внешняя обработка, запускаемая в обычном (неуправляемом) режиме для автоматизации действий пользователя (кликер). ActiveX компонента, используемая в обработке, получает события от клавиатуры и мыши по всей области экрана в любом приложении и транслирует их в 1С, получает информацию о процессах, текущем активном приложении, выбранном языке в текущем приложении, умеет сохранять снимки произвольной области экрана, активных окон, буфера обмена, а также, в режиме воспроизведения умеет активировать описанные выше события. Все методы и свойства компоненты доступны при непосредственной интеграции в 1С. Примеры обращения к компоненте представлены в открытом коде обработки.

1 стартмани

03.04.2017    29074    70    slava_1c    49    

Система учета задач

Управление проектом Личная эффективность Учет рабочего времени Учет рабочего времени v8 УУ Абонемент ($m)

Конфигурация для учета задач небольшой команды разработчиков. Поскольку основной причиной того, что в учете задач наступает хаос, являются затраты на актуализацию всего этого дела, я попытался сделать так, чтобы делать это было просто. Тут еще можно написать про скрум, аджайл и прочее. В общем, получилась канбан доска с плюшками. Конечно, тут далеко до того, чем пользуются silverbulleters, но для "непромышленной" разработки командой из 1-5 человек - пойдет. Ну и главное - это теплый, ламповый, родной 1C (с его плюсами и минусами).

1 стартмани

20.10.2016    39625    220    Fragster    118    

Zabbix: Мониторинг состояния сервера 1С

Сервисные утилиты Администрирование данных 1С Внешние источники данных Zabbix v8 Абонемент ($m)

Скрещиваем мощную систему мониторинга Zabbix с 1С

1 стартмани

02.09.2016    45632    116    deevil    28    

Организация файлового хранилища на базе MS SQL Server с доступом из 1С

Разработка внешних компонент Сервисные утилиты v8 Абонемент ($m)

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

1 стартмани

27.07.2016    23374    41    tohandr    37    

Спланируй день! #0.9.6

Учет рабочего времени Управленческий учет (прочее) v8 Абонемент ($m)

Персональный планировщик дел.

1 стартмани

03.02.2016    29353    104    chuprina_as    69    

Складские операции на ТСД

Терминал сбора данных Учет ТМЦ Учет ТМЦ v8 УУ Абонемент ($m)

Складская мобильная программа для терминалов сбора данных.

1 стартмани

15.11.2015    25248    4    JetBrain    8    

Скачивание обновлений типовых конфигураций с портала 1С:ИТС

Сервисные утилиты v8 Абонемент ($m)

С помощью этой конфигурации можно скачивать обновления с портала 1С:ИТС. Отличительные особенности: 1. Скачивание только тех пакетов, которые необходимы для обновления от текущей версии до самой новой; 2. Запуск скачивания с помощью VBS-скрипта; 3. Написана на родном языке ;)

1 стартмани

06.10.2015    22964    123    Wezoowy    32