Конфигурация "Ревизор". Автоматизация работы ревизора и товароведа




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

26 Comments

  1. etmarket

    Анонс решения. Жду комментарии, отзывы, предложения. Спасибо.

    Reply
  2. Steelvan

    На 7.7, ты серьезно ?

    Reply
  3. Константин С.
    На 7.7, ты серьезно ?

    да еще на планшете!)

    Reply
  4. etmarket

    (2) это отзыв, замечание или предложение? Жду конструктив. Спасибо.

    Reply
  5. Константин С.

    (4)

    Жду конструктив

    Конфигурации на 7.7 нужно раздавать за так. Это попахивает некрофилией, при текущих возможностях и развитие платформы 8.*

    Или это должен быть эксклюзив, полный (что наврядли).

    Reply
  6. etmarket

    (5) это сугубо ваше личное мнение

    Reply
  7. Anton64

    (5) есть довольно крупные компании, которые работают на семерке и не собираются переходить на 8-ку.

    Если будет спрос, при чем тут текущие возможности платформы 8?

    Reply
  8. Константин С.

    (7)

    не собираются переходить на 8-ку

    про переход не идет речь.

    Про запуск новой системы…

    Reply
  9. zaoproxy

    ну судя по фото — на планшете должна стоять винда, а это сразу сказывается на стоимости планшета. Это раз. То что люди до сих пор используют 7.7 — это правда, но новые системы на ней писать это утопия. Это два. Совсем не понятен круг возможных потребителей.

    Есть специальные приложения для планшетов для проведения учетов, сбора данных и т.п. И многие из них — БЕСПЛАТНЫ!!!

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

    Reply
  10. etmarket

    Добрый день. Спасибо за комментарий. Цена этого планшета с виндой 3500 руб. Сканера 1500 руб. Цена конфигурации 1500. Дешевле решения и не придумать. Любой программист 1с8 напишет код 1с7. Не слушайте мнений людей, которые не пишут код.

    Reply
  11. Krechet17

    (9)На планшете может стоять и ios и android.

    Reply
  12. zaoproxy

    (11)вот после таких фраз стало совсем интересно)))) и как может 1С77 запуститься на планшете с IOS или Android? Поделитесь опытом!

    Я так понимаю что речь идет про RDP. ну тогда возникают другие ньюансы: связь например. не вся складская зона может быть покрыта Wi-Fi!

    (10)Заинтриговала фраза «Любой программист 1с8 напишет код 1с7». Скорее всего напишет, но сколько времени у него это займёт? Готов ли программист тратить время на изучение 1С7 за свой счет? или готов ли клиент платить вам за то что вы будете изучать как программировать в 1С7.7?

    на мой взгляд затея бесперспективная….

    Reply
  13. Krechet17

    (12) Как мне кажется ответ был об операционной системе планшета. А дальше по техническим возможностям: RDP клиент или мобильный клиент.

    Reply
  14. zaoproxy

    (13)а вот тут поподробнее…. про какого мобильного клиента идет речь?

    Reply
  15. etmarket

    (9) Мне много раз говорили подобное «Создавать новые системы на 1с7.7 — это утопия». Но я уже более 5 лет успешно создаю системы для 1с7.7 и люди пользуются ими и платят мне за это деньги. Какова ваша цель, когда вы говорите подобные фразы? Вам не нравится, что кто-то успешно использует новые системы 1с7.7!? Или Вам это мешает в жизни?

    Reply
  16. zaoproxy

    (15)я не говорю что 1с7.7 уже не используется! Да люди до сих пор пользуются и весьма успешно! Хочется писать именно под эту платформу — да не вопрос!

    Тут же вопрос концептуальный — вопрос применения.

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

    Во-вторых: 1с7.7 уже очень давно не продаётся! И как вы предлагаете людям у которых нет этой платформы использовать свою конфу.

    в третьих: в случаи работы по RDP, вы не упоминаете о том что клиенту нужен будет сервер с установленным сервером удалённых рабочих столов. А это тоже не бесплатно!

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

    Ну и задам ещё раз вопрос на который так и не был получен ответ: если на планшете установлена не windows, каким ещё образом ваша поделка на нём будет работать? RDP — не предлагать!

    (13) похоже вы совсем запутались в своих утверждениях, да и в платформах тоже. мобильного клиента не существовало и не существует под 1с7.7

    Reply
  17. etmarket

    (16) вы не являетесь потенциальным пользователем данной «поделки», поэтому лишние подробности ни к чему. Вопрос был в том, почему вы считаете себя уполноченным унижать пользователей и создателей систем на платформе 1с7.7.

    Reply
  18. zaoproxy

    (17)так а в чём унижение?

    я высказал своё мнение и задал интересующие меня вопросы.

    Вы же вместо того чтобы всё разложить по полочкам ответив на все вопросы (глядишь и потенциальным пользователям эта информация будет полезна), решили обидеться как ребёнок. мне кажется это как минимум не профессионально!!! Если Вы считаете профессионалом — то и ведите себя подобающим образом!

    ну да ладно. Удачи Вам в ваших начинаниях…..

    Reply
  19. etmarket

    (18) у меня никаких обид, правда. Как себя вести я прекрасно знаю. В ваших вопросах явно прослеживается неуважение и неприязнь ко всему, что связано с 1с7.7 и любыми решениями вокруг этого. Если бы вам интересно как что работает, то эти вопросы именно так и звучали бы, но вместо этого я вижу слова «утопия, бессмысленно, неэффективно, зря» и прочие. Так что не утруждайтесь в будущих комментариях. Всё и так ясно.

    Reply
  20. user633533_encantado

    (16)

    1с7.7 уже очень давно не продаётся! И как вы предлагаете людям у которых нет этой платформы использовать свою конфу.

    в третьих: в случаи работы по RDP, вы не упоминаете о том что клиенту нужен будет сервер с установленным сервером удалённых рабочих столов. А это тоже не бесплатно!

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

    Мне вот тоже стало интересно.

    Reply
  21. zaoproxy

    (19)Вот тут Вы совсем не правы! я тоже занимаюсь и поддержкой продуктов на базе 1с7.7 и пишу под неё. Но одно дело создать на 1с7.7 что то под конкретного клиента, и совсем другой вопрос пытаться это продать.

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

    Reply
  22. etmarket

    (21) то есть ваша задача убедить меня не продавать эту «поделку»? Вас никто не заставляет это покупать, также как никто не заставляет раздавать разработки даром. Как вы правильно написали — есть множество аналогов, которые ничем не хуже. Пользуйтесь ими. Удачи и вам.

    Reply
  23. zaoproxy

    (22)лично я, никого ни в чём не пытаюсь убедить. самый главный вопрос на который Вы так и не ответили: как «поделку» на 1с7.7 продавать легально если у клиента нет приобретенной платформы? и это не для того что бы Вас загнобить или унизить! у меня тоже есть поделки для 7.7, но из-за того что я не нашёл способа как в юридическом аспекте правильно их продавать, я их и не продаю. Вот и интересовался у Вас.

    Да собственно говоря вы и на другие вопросы не ответили! Для публикаций для 1с8 мы пишем даже номер релиза на котором тестировалась разработка, Вы же даже не удосужились написать какая компонента 1с7.7 необходима для работы. А ведь для многих это принципиально. Т.е. даже если у потенциального клиента есть купленная УСН, а вы используете оперативный учет, то Ваша разработка даже не запустится у него. И об этом ни где ни слова.

    Ну и т.д. и т.п.

    Reply
  24. etmarket

    (23) юридические вопросы решены через магазин infostart. В конфигурации используется 2 внешние библиотеки, которые регистрируются установочником из комплекта дистрибутива. Внешние библиотеки управляют контекстном исполнения. Учёт может быть любой, поскольку это конфигурация, которая не интегрируется в существующую систему пользователя, а работает с ней через обмен файлами. На планшете должен быть Windows любой версии. Никаких rdp не требуется. Редакция технологической платформы 1с7.7 желательно версии не младше 25-й.

    Reply
  25. etmarket

    (23) всё запустится, не переживайте за наших клиентов.

    Reply
  26. etmarket

    (20) для платформы 1с7.7 можно купить ключ и в настоящее время. Конечно же не только через официального дистрибьютера, но и через сторонних распространителей торгового оборудования и ПО. Единственное, придётся ещё приобрести ИТС на полгода.

    Reply

Leave a Comment

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