Простой и Удобный Универсальный отчет (СКД) v 2.6




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

69 Comments

  1. xten

    Очень заинтересовал Ваш отчет. Скажите, пожалуйста, я правильно понимаю, что с помощью Вашего отчета можно в удобной форме выбирать нужные данные из реквизитов и табличных частей справочников, документов, регистров и по аналогии с СКД все это дело группировать, выстраивать и т.п.? Если так, то как можно задавать различные ограничения на условия, в СКД с помощью встроенного языка все это делается, а в Вашем отчете как?

    Reply
  2. kser87

    (1) xten, вы все правильно понимаете, но есть пара моментов:

    1) регистры не стал добавлять так как в типовых конфигурациях есть универсальный отчет по регистрам.

    2) Ограничения не реализованы.

    Регистры в принципе могу добавить: тут нет никаких технических препятствий.

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

    Reply
  3. xten

    Но ограничений на «хитрость» и разнообразие условий нет, так?

    Reply
  4. kser87

    (3) xten, не совсем понял, что вы имеете в виду под «хитростью условий») если вы имеете в виду отбор, то он такой же, как здесь: http://infostart.ru/public/189338/ Плюс при сложной настройке СКД есть возможность задавать условия для каждой группировки.

    Reply
  5. xten

    понял, спасибо

    Reply
  6. xten

    Хотел еще пару моментов уточнить:

    Он только под УФ или для обычного приложения тоже?

    При формировании отчета где-нибудь генерируется код запроса?

    Есть ли возможность сохранить вариант отчета в виде внешнего отчета, никак не зависящего от данной разработки?

    Спасибо!

    Reply
  7. kser87

    (6) xten, только для УФ. Для обычного уже реализовано несколько вариантов. Средствами встроенного языка 1С создать независимый внешний отчет программно невозможно. Можно сохранять схему компоновки данных и грузить ее вручную в созданный в конфигураторе отчет

    Reply
  8. neurotechnic

    В УТ 3.0 для Украины работать будет же?

    Reply
  9. kser87

    (8) neurotechnic, должна работать

    Reply
  10. Светлый ум

    Где кнопки группировок?

    Reply
  11. kser87

    (10) Светлый ум, не очень понял вопрос. Может, вы хотите знать как задавать группировки? Это можно увидеть на 37-ой секунде видео. Если я вас понял неправильно, то распишите подробнее пожалуйста

    Reply
  12. elsee

    Хорош отчет, надо будет купить

    Reply
  13. AlX0id

    (7)

    Для обычного уже реализовано несколько вариантов.

    Для УФ также есть вариант от 1С — в БП 3.0.

    Reply
  14. kser87

    (13) AlX0id, спасибо, я в курсе, что в БП 3.0 есть «Универсальный отчет по метаданным». Функционал уже и он совсем не универсальный. Его нельзя использовать как внешний

    Reply
  15. OBEH

    Странно, а я каким пользуюсь? У меня более универсальный отчет и работает с бОльшим функционалом, чем представленный тут платный экземпляр.

    Поэтому фразы, типа, «Хорош отчет, надо будет купить» не совсем понимаю. Или это пиарство, якобы, под видом благодарного пользователя?

    Reply
  16. kser87

    (15) OBEH, ну продемонстрируйте свой бесплатный отчет с бОльшим функционалом.

    Reply
  17. Гость

    Можно мне с вами побеседовать на тему одного отчета?

    напишите мне на tuktuk7@bk.ru ЖДУ

    Reply
  18. shoy

    (15) OBEH, Эх, не дождался я бесплатного отчета! А на платный не потяну! А так хотелось! (

    Reply
  19. yurank

    Купил данный отчет. В целом доволен, но очень хотелось бы добавить регистры. Это как-то отдельно надо оплачивать или можно будет получить в качестве обновления?

    Reply
  20. kser87

    (19) yurank, Регистры добавлю. Получите в качестве обновления

    Reply
  21. kser87

    (19) yurank, Добавил регистры. Пока что без виртуальных таблиц, но в ближайшее время сделаю и это. Обработка должна была прийти вам на e-mail. Если не пришла — пишите адрес в личку

    Reply
  22. Kashemir

    Хороший отчет для работы с одной таблицей, но это для совсем нетребовательных пользователей 🙂

    У меня в своей время стояла задача написать универсальный отчет, который может «всё» без конфигуратора и запросов, возможностями толковых ребят (не программистов) проектной группы фин. отдела.

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

    Поскольку после реализации базового функционала постоянно появлялись новые хотелки (постановщиком у нас была талантливая и очень настойчивая девушка 🙂 ) есть также несколько доп. фишек отчета:

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

    — возможность вывода в шаблон (созданную пользователем печатную форму)

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

    Поглядеть реализацию можно в конфе здесь http://infostart.ru/public/298367/

    Конечно на новой работе лично я сейчас использую только «прямой режим редактирования» и никому не говорю что есть «непрямой» 😉 поскольку написать инструкцию для подобного продукта — адский труд, да и пользователей такого уровня здесь нет 🙂

    Reply
  23. Патриот

    (22) Kashemir,

    может «всё» без конфигуратора и запросов

    — смутно могу себе представить, чем такой отчёт будет легче в изучении для юзверей, чем консоль запросов, если их функционал примерно равен, с ваших слов… Надо будет глянуть как-нибудь. Ещё непонятно, что этот отчёт делает в конфе для изучения ин-язов… И почему он не удостоился отдельной публикации…

    Reply
  24. kser87

    (23) Патриот, ссылка непонятно на что дана. Долгое время она вообще не работала

    Reply
  25. KRIHA

    Мне нравятся универсальные решения.

    Reply
  26. kser87

    (25) KRIHA, мне тоже=) я их сам умею делать при этом

    Reply
  27. OBEH

    Действительно, что-то я выпал. За это время уже понапродано, наверное этого «универсального решения»?

    Может быть как-то показать видео, как работает(причем, повторюсь, с гораздо бОльшим функционалом)? Есть возможность какая-то это дело записать и на каком-либо ресурсе выложить?

    Reply
  28. kser87

    (27) OBEH, к публикации прикреплено видео. Вам его недостаточно?

    Reply
  29. OBEH

    (28) Я про то, чтобы показать возможность бесплатного.

    А прикрепленное видео не смотрел. Может быть, его использовать для показа?

    Ну я к тому, чтобы показать по аналогии.

    Reply
  30. kser87

    (29) OBEH, с какой целью в пишите здесь?

    Reply
  31. OBEH

    Показать, что есть бесплатная и более совершенная обработка.

    Reply
  32. kser87

    (31) OBEH, покажите, что вам мешает?

    Reply
  33. Tata7772

    Добрый день!

    Скажите, пожалуйста, я правильно понимаю, что я могу сформировать практически Отчет по проводкам любого документа?

    В каком релизе Обработка работает? Или она подойдет для любого релиза 8.3?

    Можно ли купить обработку и попробовать ее?

    Спасибо!

    Reply
  34. kser87

    (33) Tata7772,

    отчет по проводкам не совсем верно. Вы можете посмотреть движения любого регистра с отбором по нужному вам документу.

    Обработка работает без ограничений на любой конфигурации на Управляемом приложении любого релиза на платформах 8.3 и 8.2.

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

    Конечно, обработку можно купить и попробовать. Если она вам по каким-то причинам не подойдет, то вы всегда можете оформить возврат покупки. Но таких еще не было=)

    Reply
  35. Tata7772

    Добрый вечер! Спасибо большое за ответ!

    Очень извиняюсь. А у меня у одной звук не работает на видео? И через YouTube попробовала…. ничего не слышно. Можно попросить, пожалуйста, проверить))))

    Заранее приношу извинения за беспокойство!

    Спасибо!

    Reply
  36. kser87

    (35) Tata7772, звук не работает потому, что его нет)) да я и не понимаю, что там можно рассказывать. Все просто

    Reply
  37. Tata7772

    Скажу честно! Вам- может быть и просто!

    Я же просто аудитор. И таких вещей, какие умеете Вы, не то что не умею, даже названия не слышала!

    Мне нужны обработки для облегчения работы и возможности формировать необходимую информацию в удобном виде )))

    Reply
  38. kser87

    (37) Tata7772, понятно. вы всегда можете задать вопрос по отчету сюда, в личные сообщения или на почту. Я не оставлю его без ответа

    Reply
  39. vinik1005

    Добрый день!

    Сразу прошу прощения, но я совсем не программист, далеко не программист…

    В общем скачала отчет, добавила его в список внешних, открываю, а там ничего…Данные никаких нет, есть возможность только настраивать сам внешний вид отчета. Может необходимо какие-то еще манипуляции совершить? Помогите пожалуйста! Еще раз прошу прощения!

    Reply
  40. kser87

    (39) vinik1005, добрый день! У вас обычное приложение или управляемое?

    Reply
  41. vinik1005

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

    Reply
  42. kser87

    (41) vinik1005, в таком случае отчет нужно включить в конфигурацию. Внешние отчеты на упр.приложении в обычном не запускаются. Пишите в личку почту, я дам инструкцию

    Reply
  43. vinik1005

    (42) скинула почту

    Reply
  44. 7OH

    А за СМ никак не сделать ? (10, 20 SM).

    Тут вроде и нормального отчета нигде нет и за 2000 пробовать не охота.

    Такой (http://infostart.ru/public/281400) уже скачал, но там настройка совсем слабая.

    Reply
  45. kser87

    (44) 7OH, извините, но никак

    Reply
  46. vis_tmp

    Не могу понять, где в публикации видео?

    Reply
  47. kser87

    (46) пропало( восстановлю

    Reply
  48. kser87

    (44) последовал вашему совету

    Reply
  49. VZhulanov

    Можно ли доработать данный универсальный отчет чтобы он мог принимать как параметр уже готовый макет СКД ?

    В таком варианте он будет использоваться как форма для задания параметров, настройки СКД и работы с результатом отчета.

    У меня возникла необходимость работать с присланными из вне готовыми макетами СКД, но нужна возможность их настраивать, задавать параметры отбора и сортировки.

    И это сложные макеты с несколькими наборами данных, с внешними источниками данных (таблицы значений).

    Reply
  50. leosoft

    А ссылочка на видео имеется?

    Reply
  51. kser87

    (50) отчёт интуитивно понятный, видео нет. Показывать особо нечего

    Reply
  52. leosoft

    А как в запрос параметры передавать?

    Reply
  53. leosoft

    При выходе пишет ошибка формата объекта настроек.

    Даже если просто открыть и закрыть обработку.

    Reply
  54. kser87

    (53) ошибка на функционал не влияет. поправлю в обозримом будущем

    Reply
  55. mrx2012

    (54) Просим параметры для произвольного запроса)

    Reply
  56. kser87

    (55) должна появиться вкладка «параметры» слева

    Reply
  57. mrx2012

    (56)Не появляется..

    Reply
  58. kser87

    (57) нажмите «Вариант отчета»-«изменить вариант»

    Reply
  59. mrx2012

    (58)запрос тот же:

    Reply
  60. kser87

    (59) текст покажите

    Reply
  61. mrx2012

    (60)

    Reply
  62. kser87

    (61) поставьте отборы

    Reply
  63. mrx2012

    (62)Отборов нет, параметров нет

    Reply
  64. kser87

    (63) выберите в запросе все поля ,по которым надо ставить отбор

    Reply
  65. mrx2012

    (64)

    ля ,по которым надо ставить отбор

    А если это не поле а параметр виртуальной таблицы?

    Reply
  66. kser87

    (65) надо отчетик поправить тогда

    Reply
  67. mrx2012

    (66)Если будет время и возможность поправьте , пожалуйста.

    Отчет по произвольному запросу это единственная фишка вашего отчета , которая меня интересует. Остальное есть в встроенном отчете.

    Reply
  68. wunderland

    >> 2.3

    >> -Исправлена ошибка, не позволяющая запускать отчет в обычном приложении.

    что-то не запускается в обычном, в управляемом — все супер

    Reply
  69. kser87

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

    Reply

Leave a Comment

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