[BarcodeGenerator] — "Генерация штрихкодов" ActiveX-компонента для 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='\

99 Comments

  1. Душелов

    Как вставить штрихкод в документ ворда, когда удаленному пользователю запрещено использование внедренных ActiveX-ов и не установлены шрифты, аналогичные ean13.ttf с диска ИТС?

    Компонента поможет 😉

    Reply
  2. vip

    (0) В 7.7 не рисует.

    Объект нормально создается, а контейнер пустой.

    Reply
  3. Арчибальд

    Отзывчивый ты наш…:))))

    Reply
  4. vip

    (3) Ты про что?

    Reply
  5. Душелов

    (2) Размеры контейнера какие? Попробуй использовать привязки.

    Reply
  6. vip

    (5) Какие привязки?

    Контейнер на всю форму должен быть?

    Reply
  7. Душелов

    (6) Ну класс растягивания что-ли.

    Возможно размер контейнера больше, чем форма, потому сам штрихкод находится за пределами формы.

    Я вообщем, завтра до 7-ки доберусь, посмотрю.

    Reply
  8. Душелов

    (6) И методы, как в 8-ке используешь?

    ШК.ШиринаШтрихкода = ШиринаШтрихкода;

    ШК.ВысотаШтрихкода = ВысотаШтрихкода;

    ШК.Штрихкод = Штрихкод;

    ШК.ВыводитьТекст = ВыводитьТекст;

    Попытка

    ШК.ТипШтрихкода = ТипШтрихкода;

    Исключение

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

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

    Попытка

    ШК.Сгенерировать();

    Исключение

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

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

    Reply
  9. Душелов

    Если после генерации ошибки нет, попробуй сохранить в файл — будет ли там картинка.

    Reply
  10. vip

    (7) Извиняюсь, работает.

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

    Reply
  11. Душелов

    (10) Хе… :))) Не, ну можно сделать и умолчальный…

    Reply
  12. CheBurator

    Хорошо бы сразу дать ссылочку на скачивание 1С++ класса…

    вопрос: без него никак?

    Reply
  13. CheBurator

    Василий, а стоит ли внутри какая-нибудь «защита» при невозможности генерации требуемого ШК? например, если ШК допускает только цифры, а нерадивый разработчег вбабахал туда нецифровые символы — возвращает ли метод Сгенерировать код возврата? типа 0 — плохо, 1 — ок.

    …???

    Reply
  14. Арчибальд
  15. Душелов

    (13) Срабатывает исключение.

    А вообще, метод Сгенерировать() — возвращает результат, типа «булево».

    Reply
  16. Ёпрст

    Одно мне не ясно .. нафига всё это нужно ?…

    Reply
  17. Ёпрст

    Главное, активихс запрещен, а вот ВК — нет…

    гы…

    🙂

    Reply
  18. vip

    (12) Продолжаешь лениться в изучении 1С++.

    Продолжаешь пугаться слова «класс».

    АктивИкс это ВСТРОЕННЫЙ класс, без него никак ;))

    Он нужен для показа активиксов на форме.

    У меня ощущение, что ты не в курсе вообще, что дает работа с любыми активиксами непосредственно на форме.

    Reply
  19. Душелов

    (17) АктивИксы запрещены, внедренные в ворд и на стороне покупателя (к примеру). А ВК — это для генерации (на стороне продавца).

    Reply
  20. Dwiss

    А зачем весь этот изврат, типовая компонента не подходит что ли? я все делал с помощью ее и отображал на форме и карточки печатал с закодированным ФИО в виде ШК, смысл? Для чего это надо???

    Reply
  21. Душелов

    (20) см 1 и 19 комменты.

    Reply
  22. lucius

    А ответьте убогому — зачем типовая компонента, зачем ActiveX, что трудно реализовать алгоритм формирования штрихкода и использовать соответствующий шрифт ttf?

    Я так уже лет 5 живу, и никаких хитрых «помогалочек» не нужно

    или разобраться с чужим активиксом проще, чем прочесть алгоритм формирования штрихкода и реализовать его?

    Reply
  23. Душелов

    (22) Вы документы, сохраненные в экзеле клиентам (к примеру) тоже с этими соответствующими шрифтами высылаете?

    Reply
  24. Ёпрст

    (23) не боись — вышлем в jpeg-е :))

    Reply
  25. lucius

    я как-то больше pdf-аю…

    но в общем — да, прикладываю шрифт (как и сама 1С для своих регламентированных)

    с другой стороны нет у меня таких постоянных клиентов, может раз в год появляется — так что «сытый пешему не товарсчь»

    Reply
  26. CheBurator

    (18) НЕ! не пугаюсь!! уже работает один класс — ввод в ТЗ напрямую в ячейки!! 😉 Времени просто особо нет и то что можно без особого изврата без классов — то без классов…

    Reply
  27. vip

    (26) Путаешь пользовательские классы и встроенные.

    Хотя встроенные наверно лучше называть объектами.

    Reply
  28. Душелов

    (10) Добавил предварительну. генерацию и свойство «Авторазмер»

    Reply
  29. CheBurator

    (27) не путаю, вроде.. в (26) речь идет именно о пользовательском классе

    Reply
  30. CheBurator

    (25) я бы таких любителей пдф-ания на месте расстреливал… придет заявка в пдфе на 10 листах да еще в таблицеподобной форме — чем мне эту заявку оттуда АВТОМАТОМ выковыривать?

    Reply
  31. CheBurator

    (20) типовая компонента позволяет рисовать ITF14..?

    Reply
  32. lucius

    (30) ну к счастью для мирососуществования «бодливой корове» аллах…. уменьшил возможности…

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

    8о\r

    может я в своем поступательном развитии еще не дошел до автоматического преобразования штрихкода из активикса в сигналы сомпорта — ну так звиняйте дяинька, что мое самадхи вашему по колено

    ну и в качестве жеста доброй воли — вместо напрасного расхода боеприпаса попробуйте в следующий раз договориться с контрагентом о формате обмена данными. Говорят коммуникация — залог взаимовыгодного сотрудничества… я правда не проверял

    ;о))

    Reply
  33. CheBurator

    (32) в (30) ругаюсь на любителей обмена информацией в формате ПДФ, ШК тут никаким боком, ясен пень, не относится…



    ну как попробуете с ашаном или метро ЛИЧНО договориться о нужном и удобном для вас формате обмена — сообщите!

    Reply
  34. Dwiss

    (31) И часто ты рисуешь в ITF14??? Мне изо всех ШК за 10 лет понадобились только EAN-8,13 и Code39,128 все — ну и вот у меня вопрос куда и под какие задачи это нужно?

    Reply
  35. Лев

    Идея хорошая

    Reply
  36. CheBurator

    (34) ты видать просто не представляешь степени изощренности клиентов 😉

    Reply
  37. Alex_Sun

    Dwiss — Попробуй офис 2007 версии стандарт.

    Reply
  38. Dwiss

    (36) Точно Сергей, изощренности у них хватет 🙂

    (37) Что мне в нем пробовать и зачем?

    Reply
  39. Alex_Sun

    Dwiss — на твой (20) пост. в офисе 2007 стандарт всех таких возможностей нет.А Делать нада.

    Reply
  40. Dwiss

    (39) А надо ли — задйся вопрсом, разве нельзя все сделать из 1с не используя офис.

    Reply
  41. Alex_Sun

    Можно. Но форма договора особенно если частенько изменяется и вносятся изменения… Лучше формировать из ворда. Я вот своих кадровиков пересадил на ворд. теперь шарашат трудовые договора из ворда только так. причем если какие то новшества меня не дергают понапрасну а сами вносят в шаблон дополнения. Ну это все дело вкуса знаете ли.

    Reply
  42. Душелов

    — добавлена генерация 2D-кода QR Code

    Reply
  43. CheBurator

    е! вау! автор жжот!

    Reply
  44. Душелов

    (43) Кстати, очень даже веселая штучка оказалась.. Я даже русские буквы закодировал и распознал 🙂

    Reply
  45. CheBurator

    (44) Для QR спецсканер нужен?

    Reply
  46. Душелов

    (45) Типа того http://www.barscanner.ru/event.php/event=1288

    Но я распознавал из картинки (BarcodeReader мой)

    Reply
  47. CheBurator

    (46) думает ли аффтар 😉 расширять список распознаваемых ШК?

    Reply
  48. Душелов

    (47) а каких, например?

    Reply
  49. Арчибальд

    (48)ИМХО, произвольный набор пикселов. Трехмерный, естественно :))

    Reply
  50. CheBurator

    ye// там где про сканер — там еще 2D всякие есть… если уж делать — так подорвать бизнес всем халявщикам… 😉

    Reply
  51. Душелов

    (50) А зачем всякие 2Д, если этого достаточно? Смысла, думаю, нет…

    Reply
  52. CheBurator

    в принципе да…

    Reply
  53. CheBurator

    Ждем новых заманух! 😉

    Reply
  54. Adecvator

    dushelov, а можно выложить обработку для 7.7. Скачивал с Вашего сайта, так там демка на 3 процедуры. Если можно. Заранее благодарен.

    Reply
  55. Душелов

    (54) Берете любой пример работы с активиксом с 1С++ и используете методы компоненты.

    Reply
  56. RegrZ

    dushelov спасибо огромное за QR Code!

    у меня небольшая проблема с сохранением картинки из обработки, метод СохранитьКартинку() отрабатывает возвращает истина, а файла никакого не сохраняется. компоненту регистрировал, разложил библиотеки в in, system32,

    .net установлен

    Reply
  57. RegrZ

    другие коды например EAN13 нормально сохраняются в картинку, если после EAN13 сформировать QR Code и сохранить, то сохраняется опять EAN13, посмотри пожалуйста в чем дело.

    Reply
  58. RegrZ

    ребята подскажите как на макет добавить этот объект, там нет ActiveX в меню объектов для вставки в таблицу 🙁

    Reply
  59. RegrZ

    dushelov, для того чтобы эта обработка стала бестселлером среди штрихкодеров, еще бы добавить DataMatrix, и PDF417

    Reply
  60. RegrZ

    platform for all 2D code users with two-dimensional coding and decoding platform provide technical support and development assistance. 2D code types include : PDF417, Qr_Code. DataMatrix and MaxCode, Aztec, etc. (2006-09-28, Visual C++, 169KB, Downloads 138)

    http://narod.ru/disk/10710575000/43680512BarMadeBase.rar.html

    описание на китайском…

    Reply
  61. RegrZ

    Не могу опубликовать сообщения со ссылками и описаниями библиотек, много интересного нашел а опубликовать не получается… может это оттого что на англицком?

    Reply
  62. RegrZ

    http://y8y8.narod.ru/fath_BarcodeX_NET_v2.0.zip

    дот нет Компонента на все штрих-коды включая Datamatrix и PDF417, для виндовых форм, поддерживает управляемый код, генерит все картинки, незнаю как опубликовать оригинальное описание, сюда не пропускает тексты на английском, а описывать все это на русском неохота 🙁

    примеры на вижл бейсике

    Reply
  63. RegrZ

    http://y8y8.narod.ru/13898393DataMatrixDec20061217.zip

    Datamatrix decoder, примеры на С

    Reply
  64. RegrZ

    SDK — для мобильных платформ:

    читалка на яве для всех 2D штрихкодов.

    http://y8y8.narod.ru/1985492QRWinCE.rar

    Reply
  65. RegrZ

    PDF417, QR_CODE, DATAMATRIX controls and examples, it is applicable

    (2008-07-03, MultiPlatform, 2318KB,)

    http://y8y8.narod.ru/113172210PkEncodeDemo2.0.zip

    Reply
  66. Душелов

    (63) Только то, что она «крякнутая», то уже использование не желательное!

    Reply
  67. Душелов

    (57) Сейчас посмотрю

    Reply
  68. Душелов

    (57) Обновил.

    Reply
  69. RegrZ

    (67) я не уверен что она крякнутая, может она купленная?

    Reply
  70. Душелов

    (70) Открой архив…

    Reply
  71. RegrZ

    (69) Спасибо, я заменил библиотеки, теперь при нажатии выполнить в тестовой обработке выдает «Невозможно загрузить файл или сборку QRcode version=1.0.3476.19169 или один из зависимых от них компонентов. Найденное определение манифеста сборки не соответствует ссылке на сборку.»

    пытался зарегать компонент снова на компе где стояла предыдущая версия, и на другом где ее не было, при запуске файла «reg.bat» выдает тоже — «Failed to load dependency QRcode of assemly Dushelov.barcode1C… Найденное определение манифеста сборки не соответствует ссылке на сборку.»

    Посмотри пожалуйста что там еще не так…

    (71) точно варез, мы тут в глубинке не так чувствительны к лицензионности нам очень далеки эти проблемы, прошу прощения если что 🙂

    Reply
  72. RegrZ

    +(72) забыл сказать что при этом обработка отлично формирует остальные ШК, за исключением QR. видимо проблема в очередной сборке QRcode.dll

    Reply
  73. Kenzo

    У меня тоже QRcode не сработал

    Reply
  74. Душелов

    Обновил.

    Reply
  75. RandomDV

    Люди, подскажите все-таки — как вывести штрихкод в макет под 8.1 ?

    Reply
  76. Душелов

    В макет вставить поле картинки и при выводе на печать туда выводить картинку из компоненты.

    Reply
  77. Alex_Sun

    Авторство вещь важная, но ненужно доводить его до само выпячивания, в названиях Соmобъектов или процедурах. Ему самое место в скромной кнопкой about. 🙂 — А так очень достойная разработка.

    Reply
  78. Душелов

    (79) При чем тут самовыпячивание? Мелкософт тоже самовыпячивается, везде MS, как и апл, как и все остальные. Это — бренд, а не самовыпячивание.

    Reply
  79. vip

    (80) Пральна. Стесняться не надо. Автор имеет полное право на любое название.

    У меня одна из ВК назывется semen.dll, а ее объект MyCatSemen.

    Прототип сейчас храпит рядом со мной под кондёром.

    Reply
  80. dotBY

    бррр… есть проблема, EAN-13, штрихкод 4811424058982, продукт реально существует и корел генерит штрихкод под него… а обработка выдает «EEAN13-3: Country assigning manufacturer code not found»… это чё за зверь?

    Reply
  81. Zigbee

    есть возможность немного доработать?

    нужно чтобы над штрихкодом выводился заголовок (простая строка рус.+лат.+цифирки) и галочка «выводить заголовок».

    а вообще, мы пользуемся и радуемся!

    Reply
  82. Душелов

    (83) Для QR Code ?

    Reply
  83. Zigbee

    нет, для code128 или других простых типов штрихкодов

    Reply
  84. Alex161177

    У меня проблема с кодировкой кирилицы. Установив вашу компоненту и запустив обработку ГенерацияШтрихкода.epf. в поле штрихкод я набрал для примера «Добрый день». Получил картинку 2D-кода (QR Code) потом я сосканировал ее на сайте (http://zxing.org/w/decode.jspx — Online Decoder) я получил Äîáðûé äåíü (пробовал изменять кодировки в браузере не помогает). Тот же результат я получил если сканировать распечатаную картинку телефоном. Подскажите пожалуйста в чем проблема?

    Reply
  85. Душелов

    (86) А разме в штрихкодах испольуется кириллица?

    Reply
  86. Душелов

    (85) Это — «ВыводитьТекст»

    Reply
  87. Трактор

    Прикольно!

    Вот бы ещё для такую же ВК для web клиента 8.2.

    Reply
  88. Alex161177

    Если в обработке убрать галочку «Выводить текст» а в поле штрихкод набрать «Добрый день» то результат сосканированный на сайте (http://zxing.org/w/decode.jspx — Online Decoder) получил Äîáðûé äåíü. Это проблемма в компоненте или я делаю что-то не так?

    Reply
  89. Душелов

    (90) «ВыводитьТекст» тут совсем не при чем. Тот пост был адресован (85)

    Вы где-то видели использование кириллицы в штрихкодах?

    Reply
  90. Душелов

    (89) Так в 8.2 она и используется у меня.

    В контексте сервера работает, генерит картинку и на клиент выводит уже готовую картинку на макет.

    Reply
  91. Alex161177

    Если я генерирую штрихкод например на сайте (http://qrcc.ru/generator.php) и пишу текст «Добрый день» , тогда сосканировав картинку на сайте (http://zxing.org/w/decode.jspx — Online Decoder) я получаю результат ===> «Добрый день» .

    Использование кирилицы в штрихкодах есть необходимость у меня есть задача загнать в штрихкод 2D платежное поручение в макете счета-фактуры, когда покупатель прийдет с этим счетом в банк касир сосканирует в свою программу клиент-банк и не будет тратить время на набор платежа. У моего клиента из-за долгого набора оператора в банке образуется очередь в кассу.

    Reply
  92. Alex161177

    У меня вопрос задачу описанную в (93) возможно выполнить используя вашу компоненту или она не умеет пока работать с кирилицей?

    Reply
  93. Душелов

    (94) Посмотрим…

    Reply
  94. Zigbee

    (88) «Выводить текст» — это выводить текст штрихкода, а «Выводить заголовок» — это выводить заголовок.

    Например, заголовок — «пирожок с вишней», штрихкод — «pirog001»;

    заголовок — «пирожок с капустой», штрихкод — «pirog023»

    Reply
  95. miroshnik

    Всем добрый день.

    Помогите пожалуйста справиться с установкой новичку (можно сказать полному «нулю» 😳 ).

    Нужно установить в 1С генератор штрих-кода. Microsoft .NET есть.

    reg.bat запустила. Что дальше? в 1С в меню «Формы» не вижу…

    Reply
  96. miroshnik

    Ау! Ребята. Действительно очень надо.

    Подскажите, что дальше делать! 1С-8.1.

    Reply
  97. GarageINC1981

    +(78) Как это сделать практически не подскажешь, хоть кусочки кода… как это делается???

    Reply
  98. GarageINC1981

    Как достать картинку из компоненты чтоб вставить в поле картинки… Просто сохранить а потом удалить?

    Reply
  99. Душелов

    (100) Именно так.

    Reply

Leave a Comment

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