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




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

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 не будет опубликован. Обязательные поля помечены *