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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *