Внешняя обработка: Рабочее место кассира для УТ 11 с возможностью печати чека на нефискальный windows принтер




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

54 Comments

  1. Chistota

    Отличная обработка то что надо.

    Только не понял как настроить ширину чека?

    К примеру у меня чекопечатающая машинка с шириной ленты 56мм

    Ещё хотелось бы чтоб товарный чек отображался как кассовый с той лишь разницей что в нём присутствовала надпись «Товарный чек» , сумма прописью, место под подпись и печать.

    Неплохо было бы вынести кнопочку товарный чек в главное меню.

    В остальном всё устраивает.

    Reply
  2. ferasinka

    Скажите пожалуйста, будет ли эта обработка работать на базовой версии УТ 11?

    Reply
  3. duck

    (2) ferasinka, Да, конечно. На базовой версии можно запускать любые внешние обработки. Собственно эта была сделана как внешняя примерно для тех же целей, чтобы можно было на типовой УТ использовать новый функционал.

    Reply
  4. lartnec

    Обработка не работает в УТ 11.1 (11.1.10.86) в клиент-серверном варианте

    Reply
  5. duck

    (4) lartnec, Пришлите скриншот ошибки. Постараюсь поправить.

    Reply
  6. sasha123super1

    Скачал версию 1.1, ошибка при подключении обработки(скрин во вложении), просьба исправить и оповестить об исправлении! Спасибо.

    Reply
  7. duck

    (6) sasha123super1, Нигде и не написано что она должна была подключаться. Добавил эту функцию. Теперь должно быть все нормально.

    Reply
  8. dr_dem

    Рабочее место кассира УТ 11 с печатью чеков на нефискальный windows принтер v1.2

    Ошибка на УТ 11.1.10.86

    НА УТ 11.1.7.49 — работает

    Reply
  9. andrewa

    На УТ 11.1.9.66 не работает

    ошибка

    Reply
  10. duck

    (9) andrewa, До конца недели постараюсь проверить работу обработки на самом последнем релизе УТ 11. Скорее всего немного изменилась структура данных в новых релизах. Потому и не работает. Если нужно срочно — обращайтесь.

    Reply
  11. rafaelf

    Прошу решить проблему с обработкой v.1.2 на УТ 11.1 (11.1.10.86). Спасибо.

    Reply
  12. 2casp

    Ошибку исправили? 🙂

    Reply
  13. 2casp

    Нет, ошибку не исправили 🙁

    Reply
  14. 2casp

    Работает 🙂

    Проверенно на Управление торговлей (базовая), редакция 11.1 (11.1.10.138)

    Reply
  15. edpipiya

    Здравствуйте, Релиз 11.1.6.24. Скачал версию 1.2 и 1.3 Обе не работают.

    На версии 1,3

    дает ту же ошибку, что и предыдущих постах.

    На версии 1,2 как во вложении — версия 1.2.jpg

    Reply
  16. duck

    (15) edpipiya, У вас похоже слишком старый релиз УТ. Обработка создана на базе типовой из конфигурации, поэтому там используется много внутренних механизмов УТ, а они от версии к версии сильно изменяются. Поэтому либо обновите конфигурацию, либо могу по отдельной договоренности адаптировать обработку под вашу базу.

    Reply
  17. edpipiya

    (16) Мне бы хотелось оставить мой УТ как есть. Как с вами договориться?

    Reply
  18. rafaiil

    (16) отличная работа! Однако,будет ли добавлена работа с характеристиками?пока они не печатаются.

    Reply
  19. duck

    (18) rafaiil, характеристики добавить не сложно. обращайтесь в личку.

    Reply
  20. FreeArcher

    Спасибо за обработку.

    А подбор, то что сразу закрывается и в документ переносит, так специально сделано? Вроде удобнее когда наподбирал несколько, а потом в документ передал.

    Reply
  21. duck

    (20) FreeArcher, смотря для каких целей подбор работает. В типовом варианте, на мой взгляд, лучше всего пользоваться сканером штрих-кодов для добавления товара в ТЧ. А формой подбора пользоваться только если нет штрих-кода или он не читается. Если стоит задача всегда подбирать товар через форму то логичнее, конечно, подбирать сразу все в форме. Если это нужно, то можно доработать, не сложно.

    Reply
  22. Гильермо

    (3) Скажите, пожалуйста, можно как-то поменять реквизиты которые печатаются в чеке?

    какие применить настройки, что бы чек не обрезался по надписи «Спасибо за покупку» (параметры печати выставлены как на Вашем скриншоте)?

    Заранее благодарю!

    Reply
  23. Dolour

    Да уж ,не понимаю ,в УТ 10 можно было самому написать и подцепить epf для работы с торговым оборудованием и как результат твори там ,что хочешь . А тут… . И Спасибо за обработку , забрал макет и его заполнение .

    Reply
  24. duck

    (22) Гильермо, В обработке есть кнопка для настройки печати. Параметры на скриншоте ни образец для подражания. Надо добиваться нужного вида печати на вашем принтере индивидуально (по ширине страницы, отступы по краям).

    Reply
  25. duck

    (22) Гильермо, Реквизиты вроде все из вашей базы берутся (названия организации инн и тд). Что то можно прямо в макете подправить.

    Reply
  26. itconsalt

    (3) Здравствуйте. Подскажите пожалуйста как настроить обрезку чека после печати. Принтер эту функцию поддерживает.

    Reply
  27. artur_fcsm

    УТ 11.1.7.49

    При нажатии на кнопку «Расчет» ничего не происходит. В чем может быть дело?

    Reply
  28. morgan21

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

    Введите ваш корпоративный e-mail

    Ввел корпоративный e-mail нажал отправить файл, вышло окно регистрации, заполнил все поля, но почту так файл и не пришел. Может что-то не так делаю. Спасибо

    Reply
  29. alexandrit

    подскажите почему не отображается наименование товара в чеке?

    УТ 11.1.10.173

    Reply
  30. alexandrit

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

    Очень жду ответ!

    Reply
  31. duck

    (30) alexandrit,

    подскажите почему не отображается наименование товара в чеке? — скорее всего такого просто не предусмотрено. Добавить строчку с наименованием товара не сложно. Но это надо в коде исправлять.

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

    Есть как минимум 2 варианта:

    1 Можно внести изменения в конфигурацию. Тогда можно заложить практически любой алгоритм поведения обработки. Но тогда все таки придется вносить изменения в конфигурацию и при обновлении могут быть проблемы.

    2. Можно написать bat файл, который будет как ярлык на столе, но при нажатии будет запускать 1С и сразу открывать обработку нужную. Это вроде бы самый простой и легкий способ.

    Могу сделать все вышеперечисленное, но не безвозмездно. Обращайтесь в личку.

    Reply
  32. alexandrit

    (31) как не предусмотрено, а смысл тогда вообще в вашей обработке?

    в чеке должно выходить название товара и его цена. вместо товара стоят скобки ()

    напишите пожалуйста електронку, сообщения вам почему-то не отправляются

    Reply
  33. alexandrit

    Оказалось все просто — нужно чтобы было заполнено Наименование для печати. Для того кто с этим столкнется.

    Reply
  34. alexandrit

    Еще есть вопрос: при открытии обработки стала появляться ошибка :

    «Недостаточно прав для работы с таблицей. Справочник. Горящие клавиши»

    Можете подсказать что ей не хватает?

    Reply
  35. duck

    (33) alexandrit,

    Спасибо)

    Reply
  36. duck

    (34) alexandrit,

    Релиз какой УТ? Поставьте полные права для этого пользователя. А чтобы пользователь лишнего не открывал можно просто из интерфейса убрать все лишнее.

    Reply
  37. alexandrit

    (36) УТ 11.1.10.173

    В том то и дело что ребята шустрые очень) открывают сами себе все что как раз нельзя. Разрешаю им только кассира и обработки

    Reply
  38. alexandrit

    (25) подскажите как реквизиты подправить в чеке? нужно чтобы название брал не из базы, а то что напишем в макете чека. Очень жду ответ!

    Reply
  39. duck

    (38) alexandrit,

    Если знать как то там на 5 мин делов. Заходите в конфигуратор, смотрите макет чека, ищите нужный реквизит, затем идете в код самой обработки и ищите этот реквизит в коде. И меняете существующий алгоритм вывода на нужный (можно подставить просто строку).

    Ну или обращайтесь в личку, подправлю.

    Reply
  40. v_clim

    Добрый день! На 11.2 планируется?

    Reply
  41. lsv1978

    (39) нам требуется такая обработка для версии 11.1.9.61

    обе версии и 1.2 и 1.3 работают с ошибками

    свяжитесь с нами для возможности платной доработки

    lsv1978@mail.ru

    Reply
  42. FreeArcher

    А для УТ 11.2 не планируется адаптация обработки?

    Reply
  43. FreeArcher

    И обрезки бумаги нет, как я понимаю. Вобще возможно сделать обрезку в обычной печатной форме?

    Reply
  44. ferasinka

    (45) FreeArcher, В 11.2.3 в подключаемом оборудовании появились Принтеры чеков

    Reply
  45. FreeArcher

    (46) Появится то они появились и по моему раньше были, но в РМК но возможность печатать на них в РМК отключена, включается небольшими доработками.

    Reply
  46. n.melnikov

    (35) Здравствуйте приобрели вашу обработку (Рабочее место кассира УТ 11 с печатью чеков на нефискальный windows принтер v1.3 для УТ 11.1.10.145) . Проблема в том что у нас УТ_11.2.3.101 . скажите пожалуйста когда вы будете писать обработку под это версию ?

    Reply
  47. duck

    (48) n.melnikov@turkmen-tranzit.com, Добрый день!

    Обработка под каждый релиз УТ создается по сути заново (т.к. в УТ 11 от версии к версии сильно меняется структура данных). А это довольно трудоемкая задача. Поэтому обновления выходят так часто, как находится кто то, кому очень нужна новая версия обработки и кто готов заплатить за эту работу. Если Вы готовы проспонсировать прогресс, то буду рад помочь. Пишите в личку.

    Reply
  48. n.melnikov

    (49) я вам не могу дописаться в личку . вы не могли бы написать мне на почту m.mikheew@turkmen-tranzit.com

    Reply
  49. Weman

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

    Также хочу купить/получить данную обработку под последнюю версию УТ 11.2.

    Готов с кем-нибудь вместе сложиться и оплатить написание.

    Автору в личку написал, пока ответа не получил, очень жду ответа

    Reply
  50. rose56

    Привет нужно срочно поправить для релиза 11.2.3.138

    Reply
  51. pollution

    Готовы купить обработку и оплатить адаптацию под наши задачи. Как с вами связаться?

    Reply
  52. user1166663

    Здравствуйте Тоже хотелось бы обновленные выпуски данной обработки у нас ошибка

    Reply
  53. user1166663

    В справочнике нет УпраковкиНоменклатуры а вместо него вот это

    Reply
  54. user840946

    как исправить ошибку с упаковкой, аналогичная проблема

    Reply

Leave a Comment

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