Помощь (контроль) в подборе Рабочего места кассира для 1С:Розница 2.2 при неуникальности штрихкода




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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. Protman

    Нельзя добавить колонки в таблицу «Данные выбора» с остатком по Магазину и «Производитель»?

    Reply
  2. Protman

    В карточке товара мы уже изменили наименование добавлением литража, но сейчас нужно пиво и прочую не маркируемую АП переименовать нормально, а Ваши обработка помогла бы безболезненно это сделать…

    Reply
  3. chingis.quiz

    Привет!

    а цену товара можно добавить?

    Reply
  4. leha2403

    цена может отличаться на один штрих код? ))), можно конечно

    Reply
  5. CrimeanWind

    (4)а можно сделать так, чтобы не показывались с остатком 0?

    Reply
  6. leha2403

    Можно конечно, но эта обработка будет срабатывать и просто в форме справочника номенклатура и при подборе поступления — не правильно будет не показывать без остатков.

    Reply
  7. svsrus

    (4) Запросто ) Сигареты с разными МРЦ, но одинаковыми ШК.

    Reply
  8. leha2403

    (7) Понятно, добавил уже вывод цены

    Reply
  9. EVG.Shab-84

    Будет ли доработка под 1С Розница 2.2.6?

    Reply
  10. nikaleks

    Алексей, вопрос актуальный, очень выручала обработка, обновили базу и перестала работать, под 2.2.6 планируете выпустить, возможно на коммерческой основе

    Reply
  11. leha2403

    Пока не смотрел, в отпуске, если возможно, то переделаю, числа 21 августа.

    Reply
  12. leha2403

    Исправил под 2.2.6

    Reply
  13. dima_6000000

    Есть старая версия? под 2.2.5 не работает обработка

    Reply
  14. leha2403

    Просто режим совместимости сменить нужно,могу выложить старую

    Reply
  15. wake

    Работает ли с характеристиками?

    Reply
  16. leha2403

    (15) Добавил поддержку характеристик

    Reply
  17. ivanmotyan

    В Розница 2.2.6.33 работает?

    Reply
  18. leha2403

    (17) Не проверял, тестил на 2.2.6.30 — работает.

    Reply
  19. ivanmotyan

    (18) Зря деньги потратил. На 33 запускается, но самое главное — цены и остатки не выводит

    Reply
  20. gnn_niko

    В Розница 2.2.7.32 работает?

    Reply
  21. leha2403

    (21) Добавил версию для 2.2.7

    Reply
  22. tiptronik666

    Попробовал на версии 2.2.6.22 не заработало, пробовал качать по первой ссылке

    Reply
  23. tiptronik666

    да ошибка «(Критичная) : Значение контролируемого свойства РежимСовместимостиИнтерфейса у объекта не совпадает со значением в расширяемой конфигурации »

    Платформа 8.3.10

    Reply
  24. leha2403

    (24) там как раз с 2.2.6.30 вроде режим совместимости сменился, откройте расширение в конфигураторе и измените режим совместимости, либо обновитесь

    Reply
  25. tiptronik666

    (25)Отключил в расширении режим совместимости, заработала но остатки не показывает. Что значит «Должен быть установлен текущий магазин и склад» , где он должен быть установлен в каких настройках?

    Reply
  26. leha2403

    (26) «Администрирование» — «Пользователи и права» — найти своего пользователя и установить у него магазин по умолчанию, в магазине должен быть установлен склад и правило ценообразования, в этом правиле должна быть указана цена. ))

    Reply
  27. tiptronik666

    (27)Ну это все указанно

    Reply
  28. leha2403

    (28) значит должен показывать и цены и остатки, могу по удаленке посмотреть, в личку напишите

    Reply
  29. fin7

    (27) Аналогично, тоже не показывает остатки

    Reply
  30. leha2403

    Проверяйте настройки, или скрин сбросьте с настройками в личку, см сообщение 27.

    Reply
  31. mafey

    Под розницу 2.2.8 будете дорабатывать?

    Reply
  32. leha2403

    (32) сделал для 2.2.8

    Reply
  33. mafey

    Спасибо большое!

    Reply
  34. OLGAO

    В релизе 2.2.9.18 будет работать?

    Reply
  35. leha2403

    (35) Да, работает, вариант для 2.2.8

    Reply
  36. ivanmotyan

    Здравствуйте. Вариант для 2.2.11 стоит ждать?

    Reply

Leave a Comment

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