Пара забавных скриншотов рабочих баз 1С.




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

29 Comments

  1. CheBurator

    да, второй скрин вызывает увжение за юзеров, которые с ним работают…

    Reply
  2. Maxis

    Причем показана только одна закладка. А таких, видимо, три…

    Reply
  3. kstukov

    (2) на второй поменьше, на третей не помню уже

    Reply
  4. MrDen

    типа второго скрина видел, его бы озаглавить «Краткий отчет по некоторым параметрам» 🙂

    Reply
  5. Altair777

    (4) Почему по некоторым? «По всем мыслим и немыслимым» 🙂

    Reply
  6. sound

    Где-то читал: некоторые психологи утверджают, что среднестатистический человек нормально воспринимает на экране одновременно не более 5-ти элементов управления 🙂

    С другой стороны: вот попробуйте потом этого юзера отучить от такого отчета 🙂

    Reply
  7. MrDen

    (5) душевно посмеялся

    + с добавкой ограниченными только размером экрана 🙂

    Reply
  8. Stepa86

    (6) человек может воспринимать одновременно 7 плюс минус 2 элемента — ограничение оперативной памяти(или как она там называется)

    меня убивает выравнивание элементов… это так специально сделано?

    Reply
  9. sound

    (8) Ну значит я не точно сказал, сколько там кто может воспринимать, но по-любому это не тот случай 🙂

    Reply
  10. Stepa86

    (9) вообще то отчасти правильно, интерфейс должен быть рассчитан на всех, поэтому максимум должно быть 5 элементов =)

    Reply
  11. ChinChin

    Второй скриншот порадовал!!!

    В первой не понял в чем юмор (сам старлей в запасе ;))

    Reply
  12. kstukov

    (11) когда в первый раз увидел, улыбнула надпись «Виноват, исправлю» в окошке с предупреждением

    Reply
  13. kstukov

    по поводу второго скрина небольшая история:

    Новый клиент. Сказали что беда с остатками — минусов много.

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

    Когда увидел — небольшое замешательство, не знаю куда нажимать..

    Клиент заметил замешательство и сказал с небольшой укоризной — вы же специалист по 1с и должны знать как отчет сформировать (дословно не помню, но суть была такова).

    Так-то интересные настройки — можно эксперименты ставить.

    Поставить галочку «быстрые остатки» и нажать на кнопку Остатки (долго) например..

    Reply
  14. LavS

    Оба скрина повеселили отдуши. Во втором ещё порадовал перенос:

    «Зая

    витель» 🙂

    Есть в нашей фирме конфа, у которой формы документов — тоже чем-то 2й скрин напоминают. Тоже есть несколько скринов, но я ещё не разобрался как здесь картинки в текст вставлять:(

    Reply
  15. natalijnnn

    В свете принесенного вчера распоряжения «… обеспечить технически невозможность проведения документов в торговой базе при наличии незаполненных полей …» впечатлило. А мы тут прикидываем, сопроводить ли эту невозможность проведения сообщением «С вопросами, замечаниями, пожеланиями обращаться по тел. <сотовый автора распоряжения>».

    Reply
  16. bashhhh

    😮

    Reply
  17. Andrew_flyer

    порадовала кнопка «Искать» в центре формы 🙂

    Reply
  18. annak2980

    Мне клиент заказал всплывающее окно в ТиС 7.7 при продаже товара ниже себестоимости:

    «А ты задумался чем будешь кормить семью в этом месяце?» —

    вариант «Да» — проводится, записывая в регистр минусовой профит.

    вариант «Нет» — отмена проведения.

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

    Reply
  19. Altair777

    (18) Бред!

    Иногда фирмы продают ниже себестоимости. Например, залежавшийся товар. Или рыночная цена изменилась.

    И, думаю, никому не придет в голову вешать просчеты фирмы на менеджеров.

    Reply
  20. anig99

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

    Reply
  21. annak2980

    Может Вам и приходилось работать с такими благородными бизнесменами,

    и оттого сия ситуация кажется бредом.

    Более того, у этих ребят, то что раздается клиентам в качестве призов-акций, вбивается в накладной по 1 копейке.

    Естественно профит записывается отрицательный в сумме себестоимости товара. А затем прекрасно вычитается в полной сумме из заработной платы.

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

    Посему ее не делают.

    Оттого богатые богатеют еще больше а продавцы…ну кто их бедных за людей считает.

    Reply
  22. agentesecreto

    картинки чот не открываются

    Reply
  23. igor_1c

    куда то пропали картинки

    Reply
  24. adhocprog

    куда-то пропали картинки?

    страшно хочется посмотреть! )))

    Анекдот в тему:

    Профессор жил в общаге.

    Студент в с соседней комнате каждый раз приходил поздно вечером и кидал сапоги об стену. Первый сапог — Бух! Второй — Бух!

    Каждый день. Бух!… Бух!…

    Бух!… Бух!…

    Профессор зашел, сказал что выживет из института, если он будет сапоги об стену кидать.

    На следующий день студент приходит. Бух!… Вспомнил профессора. Второй сапог поставил на пол.

    Через какое-то время заходит профессор и говорит. Слышь студент, кинь второй сапог. Лежу, жду! 🙂

    Reply
  25. kstukov

    (22)(23)(24) adhocprog, обновил ссылки 🙂

    Reply
  26. adhocprog

    (25) спасибо 🙂

    Второй скрин очень понравился. Жизненный 🙂

    Reply
  27. AlexM999

    А интересно на второй картинке вообще эта форма работает и как работник её заводит?

    Reply
  28. agulaev

    А у меня пользователи с трудом Универсальный отчет и отчеты на СКД осваивают. Покажу им ради смеха «Своеобразная форма настройки отчета» =)

    Reply
  29. ron1

    Думаю, что начиналось всё с кнопки «Простая обработка». )))))))))

    Reply

Leave a Comment

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