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




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

50 Comments

  1. ifal

    По сути обертка над ring?

    Reply
  2. GeraltSnow

    (1) Да

    Reply
  3. Aleksey81

    Помоги разобраться.

    Получаю ответ. «Выбранный файл не является лицензией или поврежден.»

    Запускал на двух компьютерах с Win 10 и Server 2008

    Установлен Ring 0.11.4

    Что не так?

    Reply
  4. GeraltSnow

    (3) Проверил у себя — действительно с Ring 0.11.4 и License-Tools 0.7.0, которые идут вместе с 8.3.13.1690 программа не работает.

    Могу пока только посоветовать поставить утилиты других версий. Позже попробую найти причину несовместимости.

    Reply
  5. Aleksey81

    Напрашивается вопрос. А в какой платформе или интернет ресурсе можно найти версии Ring 0.10.0.1 и версией License 0.11.5.3 ?

    Reply
  6. GeraltSnow

    (5)

    Ошибочка вышла — в описании публикации перепутал местами версии. Правильно так — RIng 0.11.5.3, License 0.10.0.1.

    Поставляются эти версии вместе с платформой 8.3.14.1565

    В описании к этой платформе написано следующее:

    Как было:

    Утилита командной строки ring и модуль license этой утилиты поставлялись в составе дистрибутива «1С:Предприятие», в каталоге ExtDst. Установка утилиты была доступна после установки собственно «1С:Предприятия».

    Как стало:

    Утилита командной строки ring и модуль license этой утилиты выделены в отдельный программный продукт со своим дистрибутивом — Утилита лицензирования 1С:Предприятия. Дистрибутив доступен для использования на операционных системах Windows 7 и старше и Linux с архитектурами x86 и x86-64.

    Архив с дистрибутивом имеет имя вида 1c-enterprise-license-tools-a.b.c+d-os-arch.zip. Архив с дистрибутивом поставляется вместе с дистрибутивом системы «1С:Предприятие».

    Размещение установочных файлов утилиты ring и модуля license этой утилиты в каталоге ExtDst больше не выполняется.

    Reply
  7. akela2014

    а с какими версиями ring и license работает?

    Reply
  8. GeraltSnow

    (7)

    Ring 0.11.5.3, License 0.10.0.1. Поставляются эти версии вместе с платформой 8.3.14.1565

    Скоро обновлю публикацию и немного перепишу программу, чтобы её поведение было более логичным.

    Reply
  9. Xershi

    Думаю вам стоило ознакомиться чуть раньше с https://infostart.ru/public/876329/.

    Из ключевых плюсов:

    — Открытый код.

    — Код на 1С.

    — Кроссплатформенность (правда пока не реализована из-за отсутсвия других сервером, но это не проблема доделать в связи с первыми плюсами!).

    Reply
  10. GeraltSnow

    (9)

    Не сомневался, что кто-нибудь оставит здесь ссылку на универсальный монитор) Всё же у моей программы есть один неоспоримый плюс перед этой обработкой — для её работы не требуется лицензия на 1С. В случае, когда системному администратору требуется как можно быстрее переактивировать лицензию на 1С после переустановки операционной системы или апгрейда компьютера, этот нюанс очень важен.

    Reply
  11. dmarenin

    (0) в коде не нашел алгоритм декодирования в сорцах, судя по:

    process.StartInfo.FileName = «cmd.exe»;

    process.StartInfo.Arguments = «/C ring license list —path «» + folderName + «»» + » —send-statistics «false»»;

    не декодер вовсе, а гуй над ринг.

    Reply
  12. Xershi

    (10) ну это как сапожник без сапог! Если сисадмину нравится юзать кучу скриптом и прог это его выбор!

    Reply
  13. monkbest

    А можно накидать примеров ситуаций, когда это бывает полезно? Какие задачи можно решить этой утилитой?

    Я понял, что она вытаскивает какую-то инфу из файла лицензии, но зачем она?

    Reply
  14. akela2014

    а может вообще установочный пакет забабахать с нужными ring, license и самой программой?

    Reply
  15. GeraltSnow

    (14)

    Боюсь, распространение LicenseTools отдельно от платформы будет считаться нарушением авторского права 1С. А вообще я думал над тем, чтобы поместить архив с рингом в ресурсы программы, чтобы она работала независимо от того, какая версия ринга установлена в системе.

    Reply
  16. GeraltSnow
    Reply
  17. monkbest

    (16) спасибо, понял. У меня просто не было такого, чтобы совсем всё прос**ли, хотябы рег.анкета или книжка 🙂 а lic@1c.ru вроде оперативное реагировал, на любые вопросы

    Reply
  18. basforum

    Всем привет!

    Безусловно нужная программа, просто коллеги судят не теми масштабами.

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

    Хотел её протестить на реальных серверах, но к сожалению, скачать её без стартмани нельзя.

    Reply
  19. teflon

    (0) Заметил, что программа не распознаёт файлы программных лицензий базовых версий конфигураций/платформы.

    На таких файлах выдает: «Выбранный файл не является лицензией или поврежден.»

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

    LicData Decoder 1.4, Версия JRE: 1.8.0_191, Версия RING: 0.11.5-3.

    Reply
  20. GeraltSnow

    (19) Во время разработки программы не было под рукой базовой лицензии, поэтому отлаживал её только на файлах проф лицензий. Как только попадется клиент с базовой лицензией — выпущу новую версию программы.

    Reply
  21. teflon

    (20) Хотел Вам ссылку отправить, на программную лицензию для базовой версии, но через личные сообщения не получилось этого сделать: «Сообщение не отправлено, отложенная группа». Если сообщите координаты, могу выслать программную лицензию от базовой версии.

    Reply
  22. GeraltSnow

    (21)

    Лицензию получил. Ring её не распознаёт, видимо просто не умеет работать с базовыми.

    Reply
  23. sergling

    «Выбранный файл не является лицензией или поврежден.» — что с этим делать? В консоли утилита разбирает файл нормально. Лицензии ПРОФ.

    Reply
  24. user705522_constantin_h

    (6)

    Ошибочка вышла — в описании публикации перепутал местами версии. Правильно так — RIng 0.11.5.3, License 0.10.0.1.

    Поставляются эти версии вместе с платформой 8.3.14.1565

    Установил платформу 8.3.14.1565 и 8.3.14.1630 ни в одной нет RIng 0.11.5.3, License 0.10.0.1.

    Reply
  25. GeraltSnow

    (24)

    LicenceTools не устанавливается автоматически вместе с платформой, он ставится вручную. Нужно запустить файл 1ce-installer.cmd из папки license-tools, находящейся в дистрибутиве платформы. Далее следовать инструкциям установщика. Если ранее была установлена другая версия ринга, то перед установкой нужно удалить его через панель управления, а потом вручную удалить папку C:Programdata1C1CE.

    Reply
  26. GeraltSnow

    (23)

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

    Reply
  27. dendzu

    Здравствуйте! Маленькое предложение. Прогоняю через Вашу программу *.lic файлы из папки на рабочем столе. Устал постоянно когда выбираю новый файл идти от C:ProgramData1Clicenses к рабочему столу. Предложение: запоминать выбор последнего пути к папке, а не постоянно C:ProgramData1Clicenses. а так пока все норм.

    Reply
  28. GeraltSnow

    (27)

    В следующей версии добавлю возможность выбирать между последней использованной и стандартной папкой.

    Reply
  29. dendzu

    (28)Ок

    Reply
  30. GeraltSnow

    (29) Обновил программу до версии 1.5. Теперь по умолчанию будет открываться папка, в которой находилась последняя выбранная лицензия. При необходимости автоматического открытия стандартной папки с лицензиями можно установить соответствующую галку.

    Reply
  31. dendzu

    (30) Здравствуйте! А не скините обновленную версию проги мне на эл.почту?

    Reply
  32. GeraltSnow

    (31) Напишите адрес почты в личные сообщения

    Reply
  33. germax

    При открытии обработки кнопка Выбор файла не активна(( Что это может быть?

    Reply
  34. GeraltSnow

    (34) Версия Ring не соответствует минимальной. Удалите Ring и License через панель управления, после чего вручную удалите папки C:ProgramData1C1CE и C:Program Files1C1CE. Далее скачайте платформу 8.3.14.1565 или новее и установите LicenseTools из её комплекта поставки.

    Reply
  35. user1257155

    Добрый лень! При попытке вытащить информацию с файла лицензии выдает такое сообщение

    C:ProgramData1Clicenses

    Файл: 20190717150647.lic

    Пин-код: [WARN ] com._1c.license.activator.storage.LicenseStorage

    Рег.номер: Пропускаем файл C:ProgramData1Clicenses20190717150647.lic. Ошибка декодирования файла лицензии.

    [ERROR ] Неправильный вызов команды (для справки см. «ring help»): Параметр —name может иметь только одно значение. Указаны значения: «[WARN», «]», «com._1c.license.activator.storage.LicenseStorage», «-«, «Пропускаем», «файл», «C:ProgramData1Clicenses20190717150647.lic.», «Ошибка», «декодирования», «файла», «лицензии.».

    В чем может быть причина? Лицензия единственная и рабочая, 1С запускается и работает на ней!

    Reply
  36. Miller777
    Reply
  37. Miller777

    В последних платформах 8.3.14 и 8.3.15 в папках ExtDst дистрибутива ring и license-tools не обнаружил. Где их брать?

    Установлены 1c-enterprise-ring-0.11.4-1.x86, 1c-enterprise-license-tools-0.7.0-1.x86.

    Reply
  38. GeraltSnow

    (39)


    В последних платформах 8.3.14 и 8.3.15 в папках ExtDst дистрибутива ring и license-tools не обнаружил. Где их брать?

    В папке ExtDst эти утилиты больше размешаться не будут. В папке с дистрибутивом платформы есть папка license-tools, в ней нужно найти и запустить файл 1ce-installer.cmd. Перед установкой LicenseTools нужно удалить старые версии Ring и License, а потом вручную почистить папку C:Programdata1C1CE.

    Reply
  39. GeraltSnow

    (37)

    Вижу два варианта — либо используются устаревшие версии Ring и License, либо LicenseTools был установлен поверх них. Попробуй сделать, как написано в (25)

    Reply
  40. gigabyte-leha

    Ошибка при определении внутреннего имени лицензии. Возможные причины:

    Файл лицензии поврежден

    Файл не является лицензией 1С

    В системе присутствуют остатки от предыдущих версий Ring и License

    Обновился формат лицензий и текущая версия LicenseTools его не поддерживает.

    Reply
  41. AllexSoft

    (16) или покупать USB лицензию..

    Reply
  42. mr_best_23rus

    Очень, очень полезная штучка, спасибо !

    Reply
  43. user1140233

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

    Reply
  44. o4karek

    (45) Лицензия платформы с конфигурацией никак не связана. Вообще никак.

    Reply
  45. user1140233

    (46)тогда можно смело туда загрузить?

    Reply
  46. GeraltSnow

    (47) Можно.

    Чтобы поставить базу на поддержку, нужно:

    0. Сделать резервную копию базы!

    1. Выгрузить файл конфигурации поставщика (конфигурация — поддержка — настройка поддержки — сохранить в файл)

    2. Загрузить конфигурацию поставщика из файла (конфигурация — загрузить конфигурацию из файла)

    Reply
  47. o4karek

    (47) Можете загружать несмело 🙂

    Но перед загрузкой нужно безусловно сделать бэкап изменяемой базы, чтобы «потом не было мучительно больно» 🙂

    Reply
  48. user1140233

    Спасибо всем, загрузил, конфигурации были одинаковые, проблем небыло.

    Reply
  49. dimidac

    Здравствуйте! Подскажите пожалуйста, а можно ли с помощью данной утилиты не просто вытащить информацию из файла, а к примеру редактировать ее в этом файле? Было бы очень здорово!

    Reply
  50. YannikAlx

    Эта утилита — собственность 1С и вы хотите чтоб они позволили вам выдавать лицензии вместо себя (ибо редактирование файла лицензии =выдача новой )? )))))))))))

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *