ATRIX: Загрузка данных в ТСД для ТиС 9.2 v.1.1" 2009г. ©




Принцип обмена данными из 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='\

36 Comments

  1. Cobranet123

    А зачем туда заносить данные? Настраивал ТСД, так там принцип работы то совсем другой… туда считываешь данные со штрих кодов товара на складе (тем самым получаешь остатки по складу), а затем все это выгружаешь в базу, зачем там то хранить данные?

    Reply
  2. den_vladimir

    (1) а как быть с теми ШК, которых нет в базе? каким образом будите искать? К тому же работа с ТСД не сводится только лишь к инвентаризации. Им можно делать различные операции, в том числе расход, приход, перемещение и проч! Там уж без номенклатурных данных никак!

    Reply
  3. Cobranet123

    (2) А разве приход и списание ТМЦ, это не на основании инвентаризации делается?

    Reply
  4. den_vladimir

    (3) я имел в виду расходные, приходные накладные!

    Кстати, инвентаризацию тоже весьма удобно проводить с ТСД, когда в нем есть данные о товаре! Как вы найдете тот ШК, который считали, а при загрузке ТиС вам будет ругаться, что такой ШК не найден!

    Я так понимаю, вы мало работали с ТСД и не знаете о продукте Atol:Mobile Logistics ?

    http://www.atol.ru/products/programs/trade-work/mobile-logistics/

    Reply
  5. Cobranet123

    (4) Вы правы, я с Atol:Mobile Logistics, мало работал, приходилось только в условиях «надо вчера еще было сделать» подключить ТСД и настроить его на работу…

    Но обработку вашу скачал и гляну более подробно. Скорее всего я еще не о всех плюсах работы с ТСД знаю.

    Reply
  6. den_vladimir

    что-то 21 скачивание и только один человек коммент запостил!

    Reply
  7. Fisherru

    Здравствуйте.

    Приятно, что и за ТСД на инфостарте взялись.

    А то в старые времена, года 3 назад, очень долго долбился на АТОЛовском сайте по этой теме.

    Не знаю есть ли смысл пытаться сделать что-то универсальное для Mobile Logistics и стандартных конф?

    Логичнее, как сделал я на АТОЛовсам сайте выложить пример конкретной работы (обмена данными) между ТСД и 1С — принцип будет понятен и народ под себя заточит, что надо 😉

    Если интересно, то и сдесь выложу.

    А что касается Mobile Logistics, то есть ньанс, там при переходе с 3-х на 4-х версию структура таблиц изменилась поля «ИД_товара» и «количество» изменило порядковый номер.

    Да и много разных нюансов ещё…

    А что касается ТСД CipherLab 8001 и Casio TD930 – не рулят.

    Большой опыт эксплуатации склонил к Casio IT-600 – дороже, но ревизоры его полюбили 🙂

    Reply
  8. den_vladimir

    с ТиС’ом такие конфы и ТСД не уживутся — придется сильно городить, да и правы Вы — стоит ли? я делал это на простенькие конфы. А на специфичные надо писать специализированные обработки. Клиенты у меня любят экономить, вот и писал на простые!

    Спасибо за коммент!

    Reply
  9. den_vladimir

    Есть идея добавить возможность работы с ПО от компании Гексагон http://geksagon.ru в сравненении с Mobile Logistic от ГК АТОЛ, ПО Гексагона распространяется бесплатно.

    Reply
  10. Fisherru

    Посмотрел я чего они предлагают.

    Глубоко не вчитывался, но суть похоже в том, что они предлагают «продукт в себе». Закрытый кубик. А если у вас не так — милости просим — под вас доработаем.

    Мы же купили конфигуратор АТОЛовский (за хорошие бабки) и теперь мало того, что мы можем переделывать стандартные конфы под себя (что и было сделано).

    Но и писать вообще что угодно…

    Так что Гексагоном пока не проникся…

    Reply
  11. den_vladimir

    Был на семинаре ВЦ СофтБаланс в Питере 21-23- мая 2009г., там были представители Гексагона, оборудование понравилось: инвертаризация, мобильное этикирование, RFID и проч… Вот и подумал, почему бы и нет…

    Reply
  12. den_vladimir

    какая версия прошивки и драйвера?

    Reply
  13. OGV

    Ровно год назад скачал Вашу обработку. Обработка у клиента работает нормально, клиент доволен. Спасибо.

    Reply
  14. den_vladimir

    (14) Спасибо!

    Reply
  15. Lapitskiy

    Ссылка на сайт Атолла мертвая: «Ссылка, по которой вы попали на эту страницу является «мертвой», удаленной или закрытой для просмотра.»

    Поправьте пожалуйста!

    Reply
  16. den_vladimir

    Ссылка идет на ветку форума с побоной публикацией. Видимо ветку удалили. Там нет ничего нового.

    Reply
  17. Lapitskiy

    В вашей документации написано:

    «Загрузкаи из ТСД.

    В документе, который поддетживает загрузку из ТСД вызвать эту операцию.»

    А если это ТиС 7.7? Что делать? Есть возможность загрузить данные в документ стандартного ТиС?

    Reply
  18. den_vladimir

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

    Reply
  19. etmarket

    Спасибо за обработку! Но возникли следующие проблемы:

    1) Неясно как редактировать поля формата выгрузки. Не получается добавить поле «Количество».

    2) При попытке сохранить формат выгрузки по нажатию клавиши «Сохранить» в настройках появляется ошибка:



    ПрименитьНастроки<<?>>(1)

    Процедура не обнаружена (ПрименитьНастроки)

    3) При выгрузке одной позиции выгрузка проходит, но в терминале товар не появляется. При выгрузке нескольких позиций номенклатуры выдает ошибку:

    «Ошибка: -2413 (Нарушена уникальность данных (2, 1))»

    Используется ТСД HoneyWell ScanPal 5100 RUS. ПО на ТСД — MobileLogistics (Стандартная конф. для инвентаризации). Система учёта — 1С ТиС реадкция 9.2 версия 7.70.921. Проводились эксперименты на версиях драйвера АТОЛ: 6.12.9.0 и 8.0

    Reply
  20. etmarket

    Заранее спасибо за ответ!

    Reply
  21. den_vladimir

    Действительно, закралась ошибка. Спасибо за обратную связь. Странно, что я её сразу не увидел, хоть и тестировал эту функцию.

    Постараюсь исправить в ближайшее время.

    Reply
  22. etmarket

    (22) еще раз спасибо за обработку! Разобрался, всё работает)

    Reply
  23. (20) dimi3o,

    Эта ошибка возникает когда в таблицу попадают одинаковые ШК. При беглом осмотре нашел 2 ошибки. включая и эту. первая не найден при загрузке в накладную ШК. там осуществляется поиск ШК в номенклатуре, когда он прописан в единицах.

    А так-же во многих случаях у одного товара может быть несколько ШК а эта обработка загружает только базовую единицу. сами понимаете при сканирование товара он просто будет не найден. пришлось доработать с учетом под эти задачи.

    Вообще автору респект за проделанную работу, экономит время.

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

    Reply
  24. etmarket

    (24) trade70, спасибо за пояснения.

    Очень хотелось бы увидеть вашу версию обработки.

    Я также много чего добавлял для загрузки номенклатуры в наш Honeywell Scanpal 5100/

    Reply
  25. CheBurator

    Обработка включена в группу http://infostart.ru/community/groups/22/

    Reply
  26. да я свою пишу уже, пока терминал под рукой есть. заказчика не устроило что много окон и вопросов, для него не просто работать с ней. попросил по привычней сделать не так универсально как тут(

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

    Reply
  27. CheBurator

    (24) в тисе штатно «заблокирована» возможность неуникальных ШК.Если присутсвуют неуникальные ШК — это сделано в «обход» типовых механизмов. И тут, при загрузке, без интерактивного выбора оператором — вряд ли получится — светим оператору все товарыединицы с одинаковым ШК — он ручками выбирает нужный… Правда с трудом себе представляю, как оператор при сливе через стакан знает что именно было отсканировано на неуникальном ШК (или я чего-то не понял)

    Reply
  28. да я знаю что заблокирована…но каким-то образом в базе действительно один товар и 2 одинаковых ШК. поэтому ошибка и у меня была такая. потом посмотрел дальше в ТСД по умолчанию загружена форма инвентаризации у все так. там форма 0 по ШК имеет ключевое поле то есть уникальное. поэтому и ошибка

    Reply
  29. CheBurator

    (29) да понятно каким. писаласьиспользовалась загрузка данных, написана криво, без контроля. или использовались какие-либо универсальные обработки — с ними можно много чего натворить, но надо понимать что к чему

    Reply
  30. вот чего не знаю того не знаю. даже не припомню такого случая чтоб им кто-то писал такую обработку. у них локальная база. выходов в другие нет. может только оператор вбить. самое смешное только один такой товар других нет.

    и кто-то тут тоже писал про такую ошибку. значит случай не единичный. понятно что в обработке всего не учтешь. но в обработке не правильно отрабатывает проверка на этот случай я смотрел поэтому и ошибка все равно возникает. я подправил и ошибка пропала

    Reply
  31. maskva

    Прокомментируйте пожалуйста возможность работы с Zebex PDL-20. И какие параметры у таблиц должны быть на самом терминале? Я так понимаю что в одну таблицу набиваем инвентаризацию, а в другую загружаем остатки, но как терминал будет сличать и находить ШК между таблицами? Спасибо.

    Reply
  32. den_vladimir

    (32) maskva, на самом терминате должна стоять прошивка Mobile Logistict от АТОЛ’а (мануал тут), а конфигурация, обычно, «Инвентаризация с вводом данных (atol)» — она бесплатная (хотя сейчас и конфигуратор для дос-терминалов бесплатный).

    Посмотреть типы и состав таблицы есть 2 варианта

    1. Поставить конфигуратор ML (ссылка и мануалы тут) и в бесплатном режиме посмотреть состав таблицы Товары, она там самая первая.

    2. Этот подход покажет только состав таблицы. Ставите драйвер ТСД либо с общего дистрибутива ДТО, либо который идет в коьплекте с ML. Заходите в тест драйвера ТСД, налаживаете связь (мануалы очень подробны) и в главном окне теста драйвера жмете Из ТСД в таблицу.

    В данной конфигурации ML всего 2 таблицы: Товары и Настройки(могу ошибаться со второй таблицей).

    В Товарах такие колонки:

    1.ШК (строка)

    2. Количество(число)

    3.Наименование(строка)

    4. Цена(число)

    5.комментарий (строка)

    МОгу конечно, ошибаться в очередности колонок, но в целом верно.

    Reply
  33. (33) чет не понял про конфигуратор для DOS-терминалов? Я в марте ставил свежий MobileLogistic и что-то не заметил там для Opticon SMART он досовский бесплатность этого конфигуратора.

    Reply
  34. den_vladimir

    (34) trade70, там зависит от выбранной модели ТСД. с версии 5.1 (если не ошибаюсь) конфигуратор для НЕ виндовых терминалов бесплатный. надеюсь, я ничего не пропустил в лицензионной политике Атола

    Reply
  35. (35) а у тебя она есть 5.1 ? …ставил 5.4 нефига не бесплатная. хотя ТСД дос.

    Reply
  36. den_vladimir

    (36) trade70, либо я действительно что-то пропустил в лицензионной политике Атола касаемо ML (давно ими не занимался). Я задал вопрос техподдержке, потому как точно помню бесплатность конфигуратора для доса (знаю в Атоле некоторых людей и они лично мне говорили об этом на конференциях).

    (32) maskva, по вашему вопросу я постарался ответить, но, к сожалению, не нашел вообще поддержку данного аппарата ML’ом =(. У Вас получилось установить ML на него?

    Reply

Leave a Comment

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