<?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='\
А зачем туда заносить данные? Настраивал ТСД, так там принцип работы то совсем другой… туда считываешь данные со штрих кодов товара на складе (тем самым получаешь остатки по складу), а затем все это выгружаешь в базу, зачем там то хранить данные?
(1) а как быть с теми ШК, которых нет в базе? каким образом будите искать? К тому же работа с ТСД не сводится только лишь к инвентаризации. Им можно делать различные операции, в том числе расход, приход, перемещение и проч! Там уж без номенклатурных данных никак!
(2) А разве приход и списание ТМЦ, это не на основании инвентаризации делается?
(3) я имел в виду расходные, приходные накладные!
http://www.atol.ru/products/programs/trade-work/mobile-logistics/
Кстати, инвентаризацию тоже весьма удобно проводить с ТСД, когда в нем есть данные о товаре! Как вы найдете тот ШК, который считали, а при загрузке ТиС вам будет ругаться, что такой ШК не найден!
Я так понимаю, вы мало работали с ТСД и не знаете о продукте Atol:Mobile Logistics ?
(4) Вы правы, я с Atol:Mobile Logistics, мало работал, приходилось только в условиях «надо вчера еще было сделать» подключить ТСД и настроить его на работу…
Но обработку вашу скачал и гляну более подробно. Скорее всего я еще не о всех плюсах работы с ТСД знаю.
что-то 21 скачивание и только один человек коммент запостил!
Здравствуйте.
Приятно, что и за ТСД на инфостарте взялись.
А то в старые времена, года 3 назад, очень долго долбился на АТОЛовском сайте по этой теме.
Не знаю есть ли смысл пытаться сделать что-то универсальное для Mobile Logistics и стандартных конф?
Логичнее, как сделал я на АТОЛовсам сайте выложить пример конкретной работы (обмена данными) между ТСД и 1С — принцип будет понятен и народ под себя заточит, что надо 😉
Если интересно, то и сдесь выложу.
А что касается Mobile Logistics, то есть ньанс, там при переходе с 3-х на 4-х версию структура таблиц изменилась поля «ИД_товара» и «количество» изменило порядковый номер.
Да и много разных нюансов ещё…
А что касается ТСД CipherLab 8001 и Casio TD930 – не рулят.
Большой опыт эксплуатации склонил к Casio IT-600 – дороже, но ревизоры его полюбили 🙂
с ТиС’ом такие конфы и ТСД не уживутся — придется сильно городить, да и правы Вы — стоит ли? я делал это на простенькие конфы. А на специфичные надо писать специализированные обработки. Клиенты у меня любят экономить, вот и писал на простые!
Спасибо за коммент!
Есть идея добавить возможность работы с ПО от компании Гексагонhttp://geksagon.ru в сравненении с Mobile Logistic от ГК АТОЛ, ПО Гексагона распространяется бесплатно.
Посмотрел я чего они предлагают.
Глубоко не вчитывался, но суть похоже в том, что они предлагают «продукт в себе». Закрытый кубик. А если у вас не так — милости просим — под вас доработаем.
Мы же купили конфигуратор АТОЛовский (за хорошие бабки) и теперь мало того, что мы можем переделывать стандартные конфы под себя (что и было сделано).
Но и писать вообще что угодно…
Так что Гексагоном пока не проникся…
Был на семинаре ВЦ СофтБаланс в Питере 21-23- мая 2009г., там были представители Гексагона, оборудование понравилось: инвертаризация, мобильное этикирование, RFID и проч… Вот и подумал, почему бы и нет…
какая версия прошивки и драйвера?
Ровно год назад скачал Вашу обработку. Обработка у клиента работает нормально, клиент доволен. Спасибо.
(14) Спасибо!
Ссылка на сайт Атолла мертвая: «Ссылка, по которой вы попали на эту страницу является «мертвой», удаленной или закрытой для просмотра.»
Поправьте пожалуйста!
Ссылка идет на ветку форума с побоной публикацией. Видимо ветку удалили. Там нет ничего нового.
В вашей документации написано:
«Загрузкаи из ТСД.
В документе, который поддетживает загрузку из ТСД вызвать эту операцию.»
А если это ТиС 7.7? Что делать? Есть возможность загрузить данные в документ стандартного ТиС?
В тис грузится штатными средствами. В документе заполнить — загрузить из терминала
Спасибо за обработку! Но возникли следующие проблемы:
1) Неясно как редактировать поля формата выгрузки. Не получается добавить поле «Количество».
2) При попытке сохранить формат выгрузки по нажатию клавиши «Сохранить» в настройках появляется ошибка:
ПрименитьНастроки<<?>>(1)
Процедура не обнаружена (ПрименитьНастроки)
3) При выгрузке одной позиции выгрузка проходит, но в терминале товар не появляется. При выгрузке нескольких позиций номенклатуры выдает ошибку:
«Ошибка: -2413 (Нарушена уникальность данных (2, 1))»
Используется ТСД HoneyWell ScanPal 5100 RUS. ПО на ТСД — MobileLogistics (Стандартная конф. для инвентаризации). Система учёта — 1С ТиС реадкция 9.2 версия 7.70.921. Проводились эксперименты на версиях драйвера АТОЛ: 6.12.9.0 и 8.0
Заранее спасибо за ответ!
Действительно, закралась ошибка. Спасибо за обратную связь. Странно, что я её сразу не увидел, хоть и тестировал эту функцию.
Постараюсь исправить в ближайшее время.
(22) еще раз спасибо за обработку! Разобрался, всё работает)
(20) dimi3o,
Эта ошибка возникает когда в таблицу попадают одинаковые ШК. При беглом осмотре нашел 2 ошибки. включая и эту. первая не найден при загрузке в накладную ШК. там осуществляется поиск ШК в номенклатуре, когда он прописан в единицах.
А так-же во многих случаях у одного товара может быть несколько ШК а эта обработка загружает только базовую единицу. сами понимаете при сканирование товара он просто будет не найден. пришлось доработать с учетом под эти задачи.
Вообще автору респект за проделанную работу, экономит время.
Но думаю имеет смысл в настройках добавить чекбоксы для параметров, иначе эти постоянные вопросы любого вгонят например на нулевые цены и прочее подобное. много проверок и вопросов.
(24) trade70, спасибо за пояснения.
Очень хотелось бы увидеть вашу версию обработки.
Я также много чего добавлял для загрузки номенклатуры в наш Honeywell Scanpal 5100/
Обработка включена в группуhttp://infostart.ru/community/groups/22/
да я свою пишу уже, пока терминал под рукой есть. заказчика не устроило что много окон и вопросов, для него не просто работать с ней. попросил по привычней сделать не так универсально как тут(
у него обработка от скансити для chiper он к ней привык. там сказал загрузить он и грузит без всяких лишних вопросов, тут более универсальней сделано. сделаю выложу.
(24) в тисе штатно «заблокирована» возможность неуникальных ШК.Если присутсвуют неуникальные ШК — это сделано в «обход» типовых механизмов. И тут, при загрузке, без интерактивного выбора оператором — вряд ли получится — светим оператору все товарыединицы с одинаковым ШК — он ручками выбирает нужный… Правда с трудом себе представляю, как оператор при сливе через стакан знает что именно было отсканировано на неуникальном ШК (или я чего-то не понял)
да я знаю что заблокирована…но каким-то образом в базе действительно один товар и 2 одинаковых ШК. поэтому ошибка и у меня была такая. потом посмотрел дальше в ТСД по умолчанию загружена форма инвентаризации у все так. там форма 0 по ШК имеет ключевое поле то есть уникальное. поэтому и ошибка
(29) да понятно каким. писаласьиспользовалась загрузка данных, написана криво, без контроля. или использовались какие-либо универсальные обработки — с ними можно много чего натворить, но надо понимать что к чему
вот чего не знаю того не знаю. даже не припомню такого случая чтоб им кто-то писал такую обработку. у них локальная база. выходов в другие нет. может только оператор вбить. самое смешное только один такой товар других нет.
и кто-то тут тоже писал про такую ошибку. значит случай не единичный. понятно что в обработке всего не учтешь. но в обработке не правильно отрабатывает проверка на этот случай я смотрел поэтому и ошибка все равно возникает. я подправил и ошибка пропала
Прокомментируйте пожалуйста возможность работы с Zebex PDL-20. И какие параметры у таблиц должны быть на самом терминале? Я так понимаю что в одну таблицу набиваем инвентаризацию, а в другую загружаем остатки, но как терминал будет сличать и находить ШК между таблицами? Спасибо.
(32) maskva, на самом терминате должна стоять прошивка Mobile Logistict от АТОЛ’а (мануалтут ), а конфигурация, обычно, «Инвентаризация с вводом данных (atol)» — она бесплатная (хотя сейчас и конфигуратор для дос-терминалов бесплатный).
тут ) и в бесплатном режиме посмотреть состав таблицы Товары, она там самая первая.
Посмотреть типы и состав таблицы есть 2 варианта
1. Поставить конфигуратор ML (ссылка и мануалы
2. Этот подход покажет только состав таблицы. Ставите драйвер ТСД либо с общего дистрибутива ДТО, либо который идет в коьплекте с ML. Заходите в тест драйвера ТСД, налаживаете связь (мануалы очень подробны) и в главном окне теста драйвера жмете Из ТСД в таблицу.
В данной конфигурации ML всего 2 таблицы: Товары и Настройки(могу ошибаться со второй таблицей).
В Товарах такие колонки:
1.ШК (строка)
2. Количество(число)
3.Наименование(строка)
4. Цена(число)
5.комментарий (строка)
МОгу конечно, ошибаться в очередности колонок, но в целом верно.
(33) чет не понял про конфигуратор для DOS-терминалов? Я в марте ставил свежий MobileLogistic и что-то не заметил там для Opticon SMART он досовский бесплатность этого конфигуратора.
(34) trade70, там зависит от выбранной модели ТСД. с версии 5.1 (если не ошибаюсь) конфигуратор для НЕ виндовых терминалов бесплатный. надеюсь, я ничего не пропустил в лицензионной политике Атола
(35) а у тебя она есть 5.1 ? …ставил 5.4 нефига не бесплатная. хотя ТСД дос.
(36) trade70, либо я действительно что-то пропустил в лицензионной политике Атола касаемо ML (давно ими не занимался). Я задал вопрос техподдержке, потому как точно помню бесплатность конфигуратора для доса (знаю в Атоле некоторых людей и они лично мне говорили об этом на конференциях).
(32) maskva, по вашему вопросу я постарался ответить, но, к сожалению, не нашел вообще поддержку данного аппарата ML’ом =(. У Вас получилось установить ML на него?