Печать всей контактной информации для типовых




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

32 Comments

  1. sanja

    Отчет без формы (нет отборов). Еще итоги по контактной информации выводятся. В общем минус

    Reply
  2. fixin

    (1)

    Может быть и минус, но найдите мне более лучшие аналоги. 😉

    Когда найдете, тогда и поговорим.

    Делал на скорую руку, не до нюансов типо итогов было, но пользователи юзают и не жужжат.

    думаю, и другие пользователи будут пользоваться с удовольствием, ведь не все же перфикционисты.

    Reply
  3. gutentag
    Отчет без формы (нет отборов)

    имхо мне — не принципиально 🙂

    Reply
  4. Yashazz

    И что?

    Элементарный «Универсальный отчёт» справится с этой задачей ничуть не хуже. А он нынче есть почти во всех конфигурациях.

    Reply
  5. fixin

    (4) не знаю, в УТ 10.3 в универсальном отчете есть только разрезы по регистрам накопления (а не сведений). А если вы про конструктор отчетов, то пользователям боязно такую штуку давать, еще лишнего увидят. Пусть контролируемо смотрят только контактную информацию.

    (3) по мне тоже. большинство пользователей за годы 1с8 уже научились пользоваться стандартными отборами СКД

    Reply
  6. Yashazz

    (5) В БП 1.6 и то уже были регистры сведений в Универсальном отчёте.

    Reply
  7. fixin

    (6) Там есть все РС или только некоторые, в частности регистры по контактной информации есть?

    В УТ 10 нету такого отчета, я им пользуюсь, возможно будет полезен и другим пользователям не таких продвинутых конфигураций, не говоря уже про конфу Розница.

    Тем более пользователю не нужно думать над структурой информации. Взял и вывел в шахматке… Не уверен, что кроссом можно вывести через универсальный отчет, хотя может и можно, но надеюсь это просто делается.

    Посмотрел. Да, в БП 2 есть отчет по регистру, но кроссом не выводится. Выдает фигню, т.к. представление — не ресурс. Можно конечно, заморочиться и настроить пользовательское поле для детальных записей:

    Максимум(Подстрока(Представление, 1, 1024))

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

    Reply
  8. alexk-is

    (6) (7) Не мучайтесь. Вот универсальный Универсальный отчет http://infostart.ru/public/84642/

    Если пользователю нужен готовый отчет, то пусть берет. Я не против 🙂

    Reply
  9. Diego_Iv
    fixin пишет:

    (1)

    Может быть и минус, но найдите мне более лучшие аналоги. 😉

    Когда найдете, тогда и поговорим.

    (2) Вот например: http://infostart.ru/public/101526/

    Reply
  10. luns

    в типовых (в том числе в УТ 10.3), есть отчет по контактной информации:

    в этом отчете можно выбрать источник получения информации (регистр, справочник)

    и объекты по которым данная информация нужна

    внешний вид итогового отчета

    Reply
  11. fixin

    (10) Гм, действительно, такой отчет есть. 😉

    Reply
  12. fixin

    (9) пример некорректный. Мне нужна была КИ физлиц, в основном, а вы мне контрагентов показываете. 😉

    (8) еще раз повторю — иногда пользователю проще дать готовый отчет (или готовые настройки, не суть), чтобы он нажал кнопку и получил, а не обучать его использовать универсальные отчеты.

    Reply
  13. Ish_2

    (12) Что-то ты без разбора стал буквально наваливать когда-то , где-то сделанные наспех вещи.

    Вещи настолько элементарные , да еще и имеющие гораздо лучшие аналоги в типовых, что мне становится грустно.

    Оно ,конечно , дело твоё. Но несолидно. Для Гения.

    Reply
  14. fixin

    (13) век живи — век учись. 😉

    Хотя нет, в Рознице такого отчета нет, а отчет из УТ без переделки не работает.

    Вспомнил — я делал его для розницы.

    Так что отчет остается актуальным, и товарищ Лунс, спасибо за критику, но — отчет полезен. 😉

    Так что Ишь грустишь ты зря. Порой проще пять минут поковырять СКД, чем переделывать отчет из УТ для Розницы.

    Reply
  15. Diego_Iv

    (12)

    fixin пишет:

    пример некорректный. Мне нужна была КИ физлиц, в основном, а вы мне контрагентов показываете. 😉

    У Вас русским по белому написано в заголовке — (контрагенты, юрлица, физлица)

    А я Вам показал аналог, сделанный не тяп-ляп за 5 минут, а качественно и удобно.

    Учитесь 😉

    Reply
  16. luns

    (14) что значит отчет без переделки не работает?

    в УТ 10.3.7.9 отчет такой есть:

    возможности его более полные чем то, что ты разместил.

    и ценность твой отчет имеет только для тех, кто не знает возможностей типовых конфигурации или пока еще не прочитал комментарий (10) в этой теме.

    На самом деле он вреден. Так как дублирует типовой, причем дублирует не в полной мере. И приучает пользователей, вместо прочтения документации, пользоваться непонятными «обработками»

    вывод: изучайте документацию дамы и господа. там много интересного.

    Reply
  17. fixin

    (16) сохрани его из УТ, запусти в Рознице. Выдаст ошибку. Для не-программистов размещаю свой отчет. Лирику комментировать не буду. В Рознице такого отчета нет, кому надо, пусть юзает.

    Возможности может и больше, чем у моего, но когда нужно сформировать отчет в Рознице, а готового варианта нет, думаю, мой отчет пока единственное решение. Или перепишите отчет из УТ, как вариант. 😉

    Reply
  18. fixin

    (15) Возможно, у вас было много времени писать отчет. Я сделал быстро и универсально. Учиться тут нечему — если есть время — лабаем на отлично, нет времени — лабаем просто на хорошо.

    И потом, чем ваш отчет лучше моего? Ваш отчет сделан не на СКД, соответственно у пользователя меньше возможностей крутить его так, как ему надо. Это касается отборов. Так что пока не убедили, Диего.

    Reply
  19. luns

    (17) конечно выдаст ошибку. ведь в конфигурации «розница» нет регистра «КонтактнаяИнформация»

    А вот то, что твой отчет используя запрос к этому же регистру, тем не менее работает в «Рознице», надо считать чудом:

    Это не лирика. Это фантастика!

    Reply
  20. fixin

    (19) в Рознице 1.0.5.6 есть регистр сведений Контактная информация. Скриншоты приводить или так поверите?

    А ругается он при открытии совершенно на другую вещь:

    {ВнешнийОтчет.ОтчетОКонтактнойИнформации(216)}: Тип не определен (СправочникСсылка.КонтактныеЛицаКонтрагентов)
    Если ОбъектОтчета <> Тип(«СправочникСсылка.КонтактныеЛицаКонтрагентов») Тогда
    
    Reply
  21. Diego_Iv
    fixin пишет:

    (15) Возможно, у вас было много времени писать отчет. Я сделал быстро и универсально. Учиться тут нечему — если есть время — лабаем на отлично, нет времени — лабаем просто на хорошо.

    И потом, чем ваш отчет лучше моего? Ваш отчет сделан не на СКД, соответственно у пользователя меньше возможностей крутить его так, как ему надо. Это касается отборов. Так что пока не убедили, Диего.

    Не, это не мое. Своё я бы не стал так нагло расхваливать 🙂

    Если пользователь знает, что такое СКД — ему вообще никаких отчетов не надо. Он сам все себе нарисует.

    А моим тупым бухам очень понравился тот юзер-френдли отчет: галочки где нужно ставить они умеют.

    Если не убедил, ну и пусть. Больше обещаю не оффтопить.

    Reply
  22. fixin

    (21) и опять не убедили. Выше я показывал, что нарисовать этот кросс-отчет на СКД не тривиально. Пользоваться отбором СКД проще, чем рисовать структуру отчета в СКД.

    Reply
  23. luns

    В рознице 1.0.5.6 такой регистр есть.

    но так же там есть отчет «Универсальный отчет» который позволяет вывести информацию и из регистров сведений:

    при этом, он сделан на СКД.

    Reply
  24. luns

    (22) По умолчанию, универсальный отчет предоставляет пользователю упрощенную форму настройки:

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

    поэтому твой отчет уступает по всем статьям.

    Reply
  25. Alav

    В БП тоже есть такой отчет http://screencast.com/t/jiJuynrfcdW

    Reply
  26. luns

    В общем резюмирую.

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

    Поэтому «-«

    Reply
  27. fixin

    (23) ну вот видите, вы уже признали свою ошибку, сделанную сгоряча. По поводу универсального отчета я уже писал в (7), почитайте пожалуйста. Мой отчет не для продвинутых пользователей…а для обычных.

    (26) конечно же, вы имеете право на свое субъективное мнение. Но пользователи, которые хотят готовый отчет, могут качать мой.

    Кстати признаю один момент — в Рознице есть отчет по регистрам сведений, но настраивать его в кросс-виде не тривиально.

    Reply
  28. fixin

    (28) платить или нет — это выбор пользователей. Если ему проще скачать готовый отчет, чем нетривиально ковырять схему кросс-таблицы СКД в универсальном отчете, он выберет мой отчет.

    Насчет Розницы не знаю — у меня нет информации о том, когда там отказались от контактной информации, поэтому не могу предоставить вам развернутую информацию для каких платформ подойдет моя обработка, для каких нет. Главное требование — наличие регистра контактной информации. 😉

    Reply
  29. fixin

    (30) Добавил в описание:

    Отчет работоспособен на всех конфигурациях, где есть регистр сведений Контактная информация, в частности, лично мною тестировался на типовой конфигурации Розница 1.0.5.6

    Нужно добавить что-то еще?

    Reply
  30. fixin

    (32) спасибо. 😉

    Reply
  31. GVALA
    Reply
  32. kirlog

    Спасибо. Это явно удобнее универсального отчета.

    Reply

Leave a Comment

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